<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Squarespace Site Server v5.11.81 (http://www.squarespace.com/) on Thu, 23 Feb 2012 21:10:34 GMT--><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><title>Blog</title><subtitle>Blog</subtitle><id>http://www.linder.org/blog/</id><link rel="alternate" type="application/xhtml+xml" href="http://www.linder.org/blog/"/><link rel="self" type="application/atom+xml" href="http://www.linder.org/blog/atom.xml"/><updated>2012-01-16T03:00:23Z</updated><generator uri="http://www.squarespace.com/" version="Squarespace Site Server v5.11.81 (http://www.squarespace.com/)">Squarespace</generator><entry><title>Cutting the cord - not for the faint of heart...</title><id>http://www.linder.org/blog/2012/1/15/cutting-the-cord-not-for-the-faint-of-heart.html</id><link rel="alternate" type="text/html" href="http://www.linder.org/blog/2012/1/15/cutting-the-cord-not-for-the-faint-of-heart.html"/><author><name>Dan Linder</name></author><published>2012-01-16T03:00:23Z</published><updated>2012-01-16T03:00:23Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p style="text-align: center;"><span style="font-size: 120%;"><strong><span>We're taking the plunge!</span></strong></span></p>
<p style="text-align: left;">After talking about it for years, I'm finally getting things setup to cut the cord with our cable TV provider and try living with the local over-the-air (OTA) and Internet provided video content.</p>
<p>Before doing this, I had to ensure that the rest of the family was going to make the transition with me. &nbsp;We had a number of deciding factors:</p>
<ol>
<li><strong>The cost of the Cable TV services is around $3/day for our fairly basic package.</strong> &nbsp;This fact alone was enough to convince my wife (the chief financial officer of our house) to allow me to spend a bit of extra money to make this all happen. &nbsp;Some of the pieces that I had to purchase were in the $80-$100 range, but that's just about the cost of one months service, so they will pay for themselves in just a few months.</li>
<li><strong>We're not a "glued to the latest sitcoms or cable-only TV shows" house.</strong> &nbsp;A few friends of mine are absolute glued to the latest installments of some for-pay-only channels (i.e. HBO "<a href="http://www.hbo.com/game-of-thrones/index.html">Game of Thrones</a>"), or cable-only channels ("<a href="http://www.trutv.com/">CourtTV</a>", "<a href="http://www.spike.com/">Spike</a>", etc) (see "Bit-torrent shows" below).</li>
<li><strong>The shows we do find hard to live without are easy to get through other means.</strong> &nbsp;My wife and I don't watch much, but when we do it's usually on one of the local channels ("<a href="http://www.cbs.com/shows/big_bang_theory/">Big Bang Theory</a>" on CBS, or "<a href="http://www.pbs.org/wgbh/masterpiece/">Masterpiece</a>" on PBS).</li>
<li><strong>The shows that are not broadcast locally can usually be found through other legal means.</strong> &nbsp;We're currently subscribed to NetFlix, mostly for the entertainment of our two daughters (10 and 5). &nbsp;For them, NetFlix has enough variety that they enjoy being able to watch multiple instalments of a show at a time. &nbsp;As a bonus, they can continue to watch their shows when we're on long trips or waiting at the doctor/dentist office.</li>
<li><strong>There are a number of streaming services that can provide a broader variety of shows.</strong> &nbsp;The previously mentioned <a href="http://www.netflix.com/">NetFlix</a> is one popular example, but another one that has caught on is the <a href="http://www.amazon.com/Instant-Video">Amazon OnDemand</a> service. &nbsp;If I subscribe to the sreaming-only options for both, it comes to roughly $14.60/month ($79/year for Amazon, and $8/month for NetFlix). &nbsp;We've opted for the NetFlix "stream plus one DVD" so our total monthly cost for these videos is $22.60. &nbsp;Compare that to the $90 we were paying monthly and it starts to make sense quickly.</li>
<li><strong>The ability to DVR shows was an extra cost that was driving me insane.</strong> &nbsp;We originally got along with the basic cable package, but when our stand-alone DVR died and we had to go to the one provided with our cable company, we had to upgrade to the basic <span style="text-decoration: underline;">digital</span> package (extra $$), then pay an additional fee for the DVR capable set-top-box - in total about $30/month in additional fees. &nbsp;Considering the old DVR we had been using (a very solid ReplayTV system) only initially cost $250, I should have looked into a replacement rather than diving further into the Cable TV trap.</li>
<li><strong>We also want to move all the DVD videos to a "media server".</strong> &nbsp;This isn't a direct replacement of an existing cable TV solution, but it is going to be a side-effect of getting this all setup.</li>
</ol>
<p>So, those are all good benefits, but there are some drawbacks.</p>
<p>&nbsp;</p>
<ol>
<li><strong>There will be something that we don't get that will be "popular" or a "must see" that we will miss.</strong> &nbsp;For our family, the Disney channel might be that one channel that or daughters will miss. &nbsp;But then, I lived without all the drama that HBO's "The Sopranos" provided and they are now available via DVD on NetFlix - I can get hooked on them if I really want to.</li>
<li><strong>The technology to make this all happen is going to be completely home built.</strong> &nbsp;I am technical enough that the maintenance doesn't scare me. &nbsp;What I don't want to have happen is failures to record the special TV show (i.e. daughter on TV, or "final episode" of a series). &nbsp;But then that has happed with our current cable company provided equipment too, so I've been through that pain already.</li>
<li><strong>The complexity of this may not be acceptable to my family.</strong> &nbsp;To quote Iyaz Akhtar of "<a href="http://thisoldnerd.finitecomedy.com/">This Old Nerd</a>", the "Partner Acceptance Rating" is paramount to making this all work. &nbsp;I have to make sure everything I put in place isn't overly complex. &nbsp;Thankfully, all three are fairly geeky so I don't think this will be too much of a problem.</li>
</ol>
<p>&nbsp;</p>
<p>To make all this come together, I'm starting to put together a list of items we need to pull this together:</p>
<p>&nbsp;</p>
<ul>
<li>TV tuner - First and foremost is the ability to bring in TV signals and convert them to something a computer can use.</li>
<li>DVR software - This is the software that will schedule the shows to record, plus provide a method to view them.</li>
<li>Media server system - The actual hardware and OS that will store the files and run the DVR software.</li>
<li>Media "extender" - Since I will want to put the recorded video on other TVs...</li>
</ul>
<p>&nbsp;</p>
<p><strong>The "Third Rail" of topics, bit-torrents for shows.</strong></p>
<p><strong></strong>When I first started discussing cutting the cord with my <a href="http://levihackwith.com/">brother-in-law</a> a number of years ago, I lamented the lack of programing available on the local OTA stations. &nbsp;(At the time, NetFlix and Amazon OnDemand hadn't been created yet.) &nbsp;He had just created a <a href="http://www.levihackwith.com/torrentfiend-a-lesson-in-file-manipulation-using-rss-sqlite3-and-ruby/">bit-torrent downloader</a>, and was having good luck with it, even setting up an automatic <a href="http://www.dropbox.com/">DropBox</a> site to let him start downloads at home just by adding a torrent link via his smartphone. &nbsp;That was working well, and the automation to download the files and get the latest episodes worked great...until the cable company sent him a lettering telling him to stop. &nbsp;I'm undecided how I will proceed on this front. &nbsp;I will probably save the bit-torrent setup for a later experiment since most of what we watch is available OTA, but I'm sure there will be a time when the cable TV and networks lock us out and I'm tempted to look at less than socially accepted means.</p>]]></content></entry><entry><title>How to un-root your DroidX.</title><id>http://www.linder.org/blog/2012/1/8/how-to-un-root-your-droidx.html</id><link rel="alternate" type="text/html" href="http://www.linder.org/blog/2012/1/8/how-to-un-root-your-droidx.html"/><author><name>Dan Linder</name></author><published>2012-01-09T03:00:00Z</published><updated>2012-01-09T03:00:00Z</updated><summary type="html" xml:lang="en-US"><![CDATA[Un-root a Motorola Droid X]]></summary></entry><entry><title>A SOPA-opera...</title><id>http://www.linder.org/blog/2012/1/1/a-sopa-opera.html</id><link rel="alternate" type="text/html" href="http://www.linder.org/blog/2012/1/1/a-sopa-opera.html"/><author><name>Dan Linder</name></author><published>2012-01-02T03:01:01Z</published><updated>2012-01-02T03:01:01Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>
<link href="SOPA%20-%20Pizza%20enforcement_files/filelist.xml" rel="File-List" />
</p>
<!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>Dan</o:Author> <o:LastAuthor>Dan</o:LastAuthor> <o:Revision>2</o:Revision> <o:TotalTime>87</o:TotalTime> <o:Created>2011-12-31T13:34:00Z</o:Created> <o:LastSaved>2011-12-31T13:34:00Z</o:LastSaved> <o:Pages>3</o:Pages> <o:Words>960</o:Words> <o:Characters>5477</o:Characters> <o:Company>MDS</o:Company> <o:Lines>45</o:Lines> <o:Paragraphs>12</o:Paragraphs> <o:CharactersWithSpaces>6425</o:CharactersWithSpaces> <o:Version>12.00</o:Version> </o:DocumentProperties> </xml><![endif]-->
<p>
<link href="SOPA%20-%20Pizza%20enforcement_files/item0001.xml" rel="dataStoreItem" target="SOPA%20-%20Pizza%20enforcement_files/props0002.xml" />
<link href="SOPA%20-%20Pizza%20enforcement_files/themedata.thmx" rel="themeData" />
<link href="SOPA%20-%20Pizza%20enforcement_files/colorschememapping.xml" rel="colorSchemeMapping" />
</p>
<!--[if gte mso 9]><xml> <w:WordDocument> <w:SpellingState>Clean</w:SpellingState> <w:TrackMoves>false</w:TrackMoves> <w:TrackFormatting /> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:DontUseIndentAsNumberingTabStop /> <w:FELineBreak11 /> <w:WW11IndentRules /> <w:DontAutofitConstrainedTables /> <w:AutofitLikeWW11 /> <w:HangulWidthLikeWW11 /> <w:UseNormalStyleForList /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--  /* Font Definitions */  @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-536870145 1107305727 0 0 415 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-520092929 1073786111 9 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0in; 	margin-right:0in; 	margin-bottom:10.0pt; 	margin-left:0in; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman";} span.MsoEndnoteReference 	{mso-style-noshow:yes; 	mso-style-priority:99; 	vertical-align:super;} p.MsoEndnoteText, li.MsoEndnoteText, div.MsoEndnoteText 	{mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-link:"Endnote Text Char"; 	margin:0in; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Calibri","sans-serif"; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman";} a:link, span.MsoHyperlink 	{mso-style-noshow:yes; 	mso-style-priority:99; 	color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{mso-style-noshow:yes; 	mso-style-priority:99; 	color:purple; 	mso-themecolor:followedhyperlink; 	text-decoration:underline; 	text-underline:single;} span.EndnoteTextChar 	{mso-style-name:"Endnote Text Char"; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-unhide:no; 	mso-style-locked:yes; 	mso-style-link:"Endnote Text"; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt;} span.SpellE 	{mso-style-name:""; 	mso-spl-e:yes;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	mso-ascii-font-family:Calibri; 	mso-fareast-font-family:Calibri; 	mso-hansi-font-family:Calibri;}  /* Page Definitions */  @page 	{mso-footnote-separator:url("SOPA%20-%20Pizza%20enforcement_files/header.htm") fs; 	mso-footnote-continuation-separator:url("SOPA%20-%20Pizza%20enforcement_files/header.htm") fcs; 	mso-endnote-separator:url("SOPA%20-%20Pizza%20enforcement_files/header.htm") es; 	mso-endnote-continuation-separator:url("SOPA%20-%20Pizza%20enforcement_files/header.htm") ecs;} @page WordSection1 	{size:8.5in 11.0in; 	margin:1.0in 1.0in 1.0in 1.0in; 	mso-header-margin:.5in; 	mso-footer-margin:.5in; 	mso-paper-source:0;} div.WordSection1 	{page:WordSection1;} --> <!--[if gte mso 10]> <mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0in 5.4pt 0in 5.4pt; 	mso-para-margin:0in; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Calibri","sans-serif"; 	mso-bidi-font-family:"Times New Roman";} --> <!--[endif] --><!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="2050" /> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1" /> </o:shapelayout></xml><![endif]-->
<div class="WordSection1">
<p class="MsoNormal">It's late in the afternoon.<span style="mso-spacerun: yes;">&nbsp; </span>Mike had just turned off the television finding nothing of interest to watch, when there was a loud knock at his front door.</p>
<p class="MsoNormal">Mike opened the door and sees three men dressed in black commando fatigues on his door step.<span style="mso-spacerun: yes;">&nbsp; </span>"May I help you," he asks?</p>
<p class="MsoNormal">"Mr. Godwin?" the first agent asks.</p>
<p class="MsoNormal">"Yes, I'm Mike Godwin<a style="mso-endnote-id: edn1;" name="_ednref1" href="#_edn1"><span class="MsoEndnoteReference"><span style="mso-special-character: footnote;"><!--[if !supportFootnotes]--><span class="MsoEndnoteReference"><span style="font-size: 11.0pt; line-height: 115%; font-family: &amp;amp;amp; mso-fareast-font-family: Calibri; mso-bidi-font-family: &amp;amp;amp; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">[i]</span></span><!--[endif]--></span></span></a>...who are you?"</p>
<p class="MsoNormal">"We're with the SOPA enforcement department of the government."</p>
<p class="MsoNormal">Mike stares back blankly, "The <em style="mso-bidi-font-style: normal;">what</em>..?"</p>
<p class="MsoNormal">"SOPA - Suppress Offending Pizza Assembly.<span style="mso-spacerun: yes;">&nbsp; </span>We have a report of a few local pizza restaurants that are using patented sauce application methods, so we're here to update your phone book as mandated by the law.<span style="mso-spacerun: yes;">&nbsp; </span>Please step aside."<span style="mso-spacerun: yes;">&nbsp; </span>And with that, the three agents push past Mr. Godwin and move toward the phone book on a table across the room.</p>
<p class="MsoNormal">Mike had been through this a couple of times in the past under different department names. <span style="mso-spacerun: yes;">&nbsp;</span>The first few visits replaced the pages of the phonebook for "escort" services and some shady pharmacies selling counterfeit drugs.<span style="mso-spacerun: yes;">&nbsp; </span>Mike knew he didn't want his kids having access to <em style="mso-bidi-font-style: normal;">those</em> sites so he and his neighbors readily accepted the changes.<span style="mso-spacerun: yes;">&nbsp; </span>But lately the changes had been for other things that didn't seem all that necessary...</p>
<p class="MsoNormal">"So, what is going on with these pizza places?<span style="mso-spacerun: yes;">&nbsp; </span>Are they fronts for drug dealers or human trafficking," Mike asked.<span style="mso-spacerun: yes;">&nbsp; </span>"I have a couple tips on some places I drive by on my way to work that we're certain are up to no good - I can give you their address if you want..."</p>
<p class="MsoNormal">"Hmm, no," the second agent responded, cutting off Mike.<span style="mso-spacerun: yes;">&nbsp; </span>"We need a reputable source<a style="mso-endnote-id: edn2;" name="_ednref2" href="#_edn2"><span class="MsoEndnoteReference"><span style="mso-special-character: footnote;"><!--[if !supportFootnotes]--><span class="MsoEndnoteReference"><span style="font-size: 11.0pt; line-height: 115%; font-family: &amp;amp;amp; mso-fareast-font-family: Calibri; mso-bidi-font-family: &amp;amp;amp; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">[ii]</span></span><!--[endif]--></span></span></a> to take this sort of action, not hear-say."<span style="mso-spacerun: yes;">&nbsp; </span>He resumed thumbing through the phone book, tearing out pages and replacing them with pre-printed pages they brought along.</p>
<p class="MsoNormal">"So, what were these pizza restaurants doing?"</p>
<p class="MsoNormal">Agent one turns toward Mike, obviously agitated in his questions.<span style="mso-spacerun: yes;">&nbsp; </span>"They were found to have been infringing on highly guarded trade secrets."</p>
<p class="MsoNormal">"What?<span style="mso-spacerun: yes;">&nbsp; </span>You mean they stole the recipe for the dough or sauce...?"</p>
<p class="MsoNormal">"No, much more insidious.<span style="mso-spacerun: yes;">&nbsp; </span>We have reports from highly trusted individuals that they were infringing on the sauce application procedure as documented in the patent held by <em style="mso-bidi-font-style: normal;">Pizza Shack</em> and cross-licensed to <em style="mso-bidi-font-style: normal;">Dice Pizza<a style="mso-endnote-id: edn3;" name="_ednref3" href="#_edn3"><span class="MsoEndnoteReference"><span style="mso-special-character: footnote;"><!--[if !supportFootnotes]--><span class="MsoEndnoteReference"><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 11.0pt; line-height: 115%; font-family: &amp;amp;amp; mso-fareast-font-family: Calibri; mso-bidi-font-family: &amp;amp;amp; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">[iii]</span></strong></span><!--[endif]--></span></span></a></em>."</p>
<p class="MsoNormal">Mike remembered that case, it made news a couple years ago.<span style="mso-spacerun: yes;">&nbsp; </span>Pizza Shack had settled a case out of court against another national pizza chain, Dice Pizza.<span style="mso-spacerun: yes;">&nbsp; </span>The argument by Dice Pizza was that the crust/sauce/cheese was the logical order to begin making a pizza, but Pizza Shack had received a patent for just that process a few years earlier and had successfully put a number of smaller pizza restaurants out of business.<span style="mso-spacerun: yes;">&nbsp; </span>The end result of this settlement was that Dice Pizza could put the sauce on between the dough and cheese, and they would allow Pizza Shack to use their patented "automobile pizza delivery" method Dice Pizza had patented around the same time.</p>
<p class="MsoNormal">Mike looked over their shoulders and saw one page being replaced.<span style="mso-spacerun: yes;">&nbsp; </span>"Wow, I had no idea "<span class="SpellE"><em style="mso-bidi-font-style: normal;">Pauls</em></span><em style="mso-bidi-font-style: normal;"> Pizza</em>" and "<span class="SpellE"><em style="mso-bidi-font-style: normal;">Kevins</em></span><em style="mso-bidi-font-style: normal;"> <span class="SpellE">Resturaunt</span></em>" were doing this.<span style="mso-spacerun: yes;">&nbsp; </span>Were any of you involved in the surveillance or a sting operation?"</p>
<p class="MsoNormal">"No, we're too busy changing out the phone book pages to do that work.<span style="mso-spacerun: yes;">&nbsp; </span>Thankfully Pizza Shack provided us with a list of infringing sites, so that makes our job a lot easier."</p>
<p class="MsoNormal">"Wait, what?<span style="mso-spacerun: yes;">&nbsp; </span>You're just taking their word without checking into it yourself?"</p>
<p class="MsoNormal">"Oh, it's all legal - SOPA and the DMCA laws allow for this, and since there's no way our department could check all of these reports, we're grateful for their assistance."</p>
<p class="MsoNormal">After a few minutes agent one reports, "Our work is done for now.<span style="mso-spacerun: yes;">&nbsp; </span>Please remember it's up to each person to be vigilant in the war on terror...I mean intellectual property piracy.<span style="mso-spacerun: yes;">&nbsp; </span>Please inform us of any neighbors who might be using outdated or other phone books so we can keep them updated, too."<span style="mso-spacerun: yes;">&nbsp; </span>And with that, the agents closed the phone book and walk out the door.</p>
<p class="MsoNormal">Mike picked up the phone book and turns to the section marked "Pizza".<span style="mso-spacerun: yes;">&nbsp; </span>The page that use to contain ads for the offending restaurants was replaced with a new page only showing "Pizza Shack" and "Dice Pizza".</p>
<p class="MsoNormal">"What about "Mr. Levi's Pizzeria?<span style="mso-spacerun: yes;">&nbsp; </span>That's one of our favorite places?!?"<span style="mso-spacerun: yes;">&nbsp; </span>Mike knew they would be in the clear with SOPA because their big claim was they didn't use pizza sauce<a style="mso-endnote-id: edn4;" name="_ednref4" href="#_edn4"><span class="MsoEndnoteReference"><span style="mso-special-character: footnote;"><!--[if !supportFootnotes]--><span class="MsoEndnoteReference"><span style="font-size: 11.0pt; line-height: 115%; font-family: &amp;amp;amp; mso-fareast-font-family: Calibri; mso-bidi-font-family: &amp;amp;amp; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">[iv]</span></span><!--[endif]--></span></span></a>, so they couldn't possibly break this law.</p>
<p class="MsoNormal">Mikes young daughter entered carrying a small phone book, but this one is from a foreign city.<span style="mso-spacerun: yes;">&nbsp; </span>"Here dad, I got this from a friend in school.<span style="mso-spacerun: yes;">&nbsp; </span>She was able to snag a copy when she was visiting her grandmother in Romania - they don't have SOPA or the DMCA there, so this is a complete un-censored phone book."</p>
<p class="MsoNormal">She opened the page and showed him hundreds of listings for pizza places all over the world.<span style="mso-spacerun: yes;">&nbsp; </span>After a few seconds she found the listing for Levi's and Mike started dialing the phone.</p>
<p class="MsoNormal">Before he could finish dialing, the line went dead and the door burst open.<span style="mso-spacerun: yes;">&nbsp; </span>Agent one was again in the room.</p>
<p class="MsoNormal">"Mr. Godwin! We just updated your phone book, but we caught you using an illegal foreign one.<span style="mso-spacerun: yes;">&nbsp; </span>Can you explain yourself?"</p>
<p class="MsoNormal">"Your update removed the entry for our favorite restaurant.<span style="mso-spacerun: yes;">&nbsp; </span>There must be some mistake!"</p>
<p class="MsoNormal">"Highly doubtful considering the source, but if you insist, you can file a formal complaint and work it out through the legal system."</p>
<p class="MsoNormal">"A lawsuit?!?<span style="mso-spacerun: yes;">&nbsp; </span>That will take weeks if not years to complete - what do I do if I want pizza until then?"</p>
<p class="MsoNormal">"That's why we left Pizza Shack and Dice Pizza - they aren't infringing on anything so they are perfectly legal."</p>
<p class="MsoNormal">Mike was speechless, the agent continued.<span style="mso-spacerun: yes;">&nbsp; </span>"And there's the small matter of the circumvention clause of the law."</p>
<p class="MsoNormal">Mike saw the agents gaze move to his daughter, and at the same time the two other agents grabbed her arms and restrained her.</p>
<p class="MsoNormal">"We've been keeping an eye on you and your friends at school.<span style="mso-spacerun: yes;">&nbsp; </span>Our counterparts in Romania have been watching your friends grandmother - she's claiming her innocence, but thankfully the ACTA treaty has allowed them to use our evidence in her trial.<span style="mso-spacerun: yes;">&nbsp; </span>I suppose you're one of those <em style="mso-bidi-font-style: normal;">Free Software</em> protesters as well, eh?"</p>
<p class="MsoNormal">And with that, the two agents pulled the young girl out the door to their awaiting van.</p>
<p class="MsoNormal">"I'm sorry for the interruption Mr. Godwin.<span style="mso-spacerun: yes;">&nbsp; </span>She'll be processed at the federal courthouse since this is a federal offense, but you can visit her some time tomorrow after she's been processed in.<span style="mso-spacerun: yes;">&nbsp; </span>I'd suggest hiring a lawyer.<span style="mso-spacerun: yes;">&nbsp; </span>The approved lawyers are still listed in the phone book."</p>
</div>
<div style="mso-element: endnote-list;"><!--[if !supportEndnotes]--><br /> 
<hr size="1" />
<!--[endif]-->
<div id="edn1" style="mso-element: endnote;">
<p class="MsoEndnoteText"><a style="mso-endnote-id: edn1;" name="_edn1" href="#_ednref1"><span class="MsoEndnoteReference"><span style="mso-special-character: footnote;"><!--[if !supportFootnotes]--><span class="MsoEndnoteReference"><span style="font-size: 10.0pt; line-height: 115%; font-family: &amp;amp;amp; mso-fareast-font-family: Calibri; mso-bidi-font-family: &amp;amp;amp; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">[i]</span></span><!--[endif]--></span></span></a> Homage paid to Mike Godwin - formulator of "Godwin's Law", <a href="http://en.wikipedia.org/wiki/Godwin's_law">http://en.wikipedia.org/wiki/Godwin's_law</a>.</p>
</div>
<div id="edn2" style="mso-element: endnote;">
<p class="MsoEndnoteText"><a style="mso-endnote-id: edn2;" name="_edn2" href="#_ednref2"><span class="MsoEndnoteReference"><span style="mso-special-character: footnote;"><!--[if !supportFootnotes]--><span class="MsoEndnoteReference"><span style="font-size: 10.0pt; line-height: 115%; font-family: &amp;amp;amp; mso-fareast-font-family: Calibri; mso-bidi-font-family: &amp;amp;amp; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">[ii]</span></span><!--[endif]--></span></span></a> See the Universal Music Groups use of the existing DMCA law and how it may have been abused, <a href="http://arstechnica.com/tech-policy/news/2011/12/judge-gives-umg-24-hours-to-explain-takedown-spree.ars">http://arstechnica.com/tech-policy/news/2011/12/judge-gives-umg-24-hours-to-explain-takedown-spree.ars</a>. &nbsp;Also see how Warner Brothers mis-used the existing DMCA law, <a href="http://arstechnica.com/tech-policy/news/2011/09/hotfile-turns-tables-accusing-warner-brothers-of-dmca-abuse.ars">http://arstechnica.com/tech-policy/news/2011/09/hotfile-turns-tables-accusing-warner-brothers-of-dmca-abuse.ars</a>. &nbsp;Or just use your favorite search engine to search for "DMCA abuses": <a href="http://lmgtfy.com/?q=dmca+abuses">http://lmgtfy.com/?q=dmca+abuses</a></p>
</div>
<div id="edn3" style="mso-element: endnote;">
<p class="MsoEndnoteText"><a style="mso-endnote-id: edn3;" name="_edn3" href="#_ednref3"><span class="MsoEndnoteReference"><span style="mso-special-character: footnote;"><!--[if !supportFootnotes]--><span class="MsoEndnoteReference"><span style="font-size: 10.0pt; line-height: 115%; font-family: &amp;amp;amp; mso-fareast-font-family: Calibri; mso-bidi-font-family: &amp;amp;amp; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">[iii]</span></span><!--[endif]--></span></span></a> I'm envisioning the "Dice Pizza" to mirror the "Dominoes Pizza" logo, but using two dice with the values of "3" and "4" - the year in the 20'th century when Hitler became dictator of Nazi Germany.<span style="mso-spacerun: yes;">&nbsp; </span>Again, a nod to Godwin's Law.</p>
</div>
<div id="edn4" style="mso-element: endnote;">
<p class="MsoEndnoteText"><a style="mso-endnote-id: edn4;" name="_edn4" href="#_ednref4"><span class="MsoEndnoteReference"><span style="mso-special-character: footnote;"><!--[if !supportFootnotes]--><span class="MsoEndnoteReference"><span style="font-size: 10.0pt; line-height: 115%; font-family: &amp;amp;amp; mso-fareast-font-family: Calibri; mso-bidi-font-family: &amp;amp;amp; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">[iv]</span></span><!--[endif]--></span></span></a> Too much MSG in the sauces of other pizzas...</p>
</div>
</div>]]></content></entry><entry><title>Merry Christmas - my "Three Gift" rule</title><id>http://www.linder.org/blog/2011/12/24/merry-christmas-my-three-gift-rule.html</id><link rel="alternate" type="text/html" href="http://www.linder.org/blog/2011/12/24/merry-christmas-my-three-gift-rule.html"/><author><name>Dan Linder</name></author><published>2011-12-24T15:34:47Z</published><updated>2011-12-24T15:34:47Z</updated><content type="html" xml:lang="en-US"><![CDATA[<h2 style="text-align: center;">Merry Christmas!</h2>
<p>Sorry for the delay this week - I'm on vacation for the Christmas Holidays, and I totally lost track of the time! &nbsp;In the busy season, it's easy to overlook the true meaning of the season. &nbsp;I won't get all sappy over the meaning - it's been covered by others much more eloquent than I, rather I'd like to note how we try to keep the meaning with our two girls.</p>
<p>With the world of inexpensive plastic toys, free delivery from Amazon, and the numerous advertisments for thousands of nearly disposable toys - have you ever priced the cost of the special batteries some toys use?!? - it's all to easy for parents to get on the slippery slope of buying their children lots of presents and finding that they are expecting to get the same number as their siblings. &nbsp;(And of course the price of the toy makes no difference - the 1 year old will love the box more than the $30 toy that came in it.)</p>
<p>To help remind our daughters of the reason, we've implemented a gift rule based on what "Baby Jesus" received on his birthday. &nbsp;No, we're not forcing them to exchange gold, frankincense, and myrrh (though Kris would not turn down anything made of gold), rather we've implemented the "three gift" rule. &nbsp;Each child receives three gifts: one from Santa, one from Mom and Dad, and one from a sibling. &nbsp;There's a significance for each:</p>
<p>&nbsp;</p>
<ul>
<li>One gift from a sibling. &nbsp;This works out easy in our family since we only have two children - it's a simple exchange in their mind. &nbsp;In larger families, it will limit the expense that the family will experience plus keep each child guessing which sibling got their name and what they were given. &nbsp;This allows each child some time to reflect on what they want to give to their sibling - you might be suprised what ideas some will come up with (and it won't leave us parents struggling to decide).</li>
<li>The gift from Mom and Dad symoblize the love of parent and child. &nbsp;This relation ship is special and significant enough that it's not a gift lumped in with the other gifts they might receive. &nbsp;My wife and I also use this gift as the "big gift" for the year to that child. &nbsp;For instance, when we decided to get one daughter a video game she wanted. &nbsp;Knowing that the inevitable "I got this gift from ____" might be uttered, we decided that we could bypass that argument completely if we gave it to her.</li>
<li>The final gift from Santa will change over time. &nbsp;Right now, our youngest still believes in him but our oldest has figured it out so for now we're keeping the big guy in our list. &nbsp;Once our youngest finds out, we'll have a family discussion about this gift. &nbsp;Since "Santa" easily represents a caring individual to the youngest people, this present will transform into a gift to symbolize the season.</li>
</ul>
<p>To keep this a tech-oriented blog, here's how I used some tech this holiday season.</p>
<p>&nbsp;</p>
<ol>
<li>I entered all of my families Christmas lists into Evernote so I could easily update it wherever I was (on my laptop at work, on my iPad in the living room, from my phone in a store, etc).</li>
<li>I set a reminder on my calendar (synced to my phone and GMail account) that will remind me to purchase a "stocking stuffer" gift for my wife <strong>next year</strong> (calendar reminder for Dec 14, 2012). &nbsp;(Yeah, I forgot and had to scramble for something Christmas Eve...)</li>
<li>I used the Amazon gift lists to help make sure I pointed other familly members to the correct item, and I bought from the lists my sisters stored on-line. &nbsp;No more guessing!</li>
<li>I setup the "X10" receiver to control the Christmas tree lights so they weren't left on (or off) for a long period of time.</li>
</ol>
<p>Many of the gifts I received this year are also tech related:</p>
<p>&nbsp;</p>
<ul>
<li>"Geek Dad" by Ken Denmead (<a href="http://www.amazon.com/Geek-Dad-Awesomely-Projects-Activities/dp/1592405525">http://www.amazon.com/Geek-Dad-Awesomely-Projects-Activities/dp/1592405525</a>) 
<ul>
<li>Lots of great tech/geek related projects to do with kids of all ages: kite camera, homemade coloring books, simple electronic light ideas, LEGO ideas, etc.</li>
</ul>
</li>
<li>"Practical Android Projects" by Luscan Jordan and Pieter Greyling (<a href="http://www.amazon.com/Practical-Android-Projects-Books-Professionals/dp/1430232439">http://www.amazon.com/Practical-Android-Projects-Books-Professionals/dp/1430232439</a>) 
<ul>
<li>This book looks like it will a great resource when I finally find some free time to read through it and start programming for fun again.</li>
</ul>
</li>
<li>An Energizer "TrailFinder" head-mounted ligth (<a href="http://www.energizer.com/lighting-products/outdoor/trailfinder/Pages/6-led-headlight.aspx">http://www.energizer.com/lighting-products/outdoor/trailfinder/Pages/6-led-headlight.aspx</a>) 
<ul>
<li>Too many times working on a computer under a desk, or underneath the car I've wished to have light where I'm looking. &nbsp;This should solve that problem in many of those cases. &nbsp;And the single "spot light" mode is truly a spot-light worthy of a theatrical stage lighting set - I'm sure the kids will borrow this for some play time, too.</li>
</ul>
</li>
</ul>
<p>I'll wrap up for now - hope your Christmas was great!</p>
<p>&nbsp;</p>]]></content></entry><entry><title>Folders for managing (email) floods.</title><id>http://www.linder.org/blog/2011/12/18/folders-for-managing-email-floods.html</id><link rel="alternate" type="text/html" href="http://www.linder.org/blog/2011/12/18/folders-for-managing-email-floods.html"/><author><name>Dan Linder</name></author><published>2011-12-19T03:00:17Z</published><updated>2011-12-19T03:00:17Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>For years I've had to keep track of communicaiton with many&nbsp; customers at numerous sites covering a wide variety of questions and conversations.&nbsp; Thankfully most have well defined start and end points to the conversations, so it is possible to use folders to segregate down to this level.&nbsp; The ability to do this is key to my ability to juggle numerous conversations and not drop details.&nbsp; For my work e-mails, I use the corporate standard "Microsoft Outlook", but most all e-mail clients (GMail, Yahoo, etc) support some level of mail automation.</p>
<p>For me, the key to this filing system is reflected in what our mothers always told us: "Put your things away."&nbsp; Taking this to the on-line world, I try to keep my in-box free of clutter and only items that are one-offs or unique conversations that aren't expected to last long.&nbsp; Where possible, I suggest automating if possible.&nbsp; Most if not all modern e-mail clients allow for fairly complex rules to handle incoming e-mail.&nbsp; At some level, the basics of sorting on the From: address into a common folder for emails from a specific person are available in even the most basic e-mail clients.&nbsp; Beyond that, automation might take additional skill but should not be insurmountable.</p>
<p>For my needs (I'm a consultant and support engineer for my company), I have broken down my job functions by teams, customers, and trouble ticket.&nbsp; The teams folder is a general category such as "consulting" , "support", etc). At this level i've also created a few unique foldes for "Inactive Customers", and some e-mails that don't fall into the categories but still need to have some long-term attention.&nbsp; Since Outlook default sorts the folders based on name, I pre-pend a "@" to the name of folders that I want to appear at the top of the list.</p>
<p>Within those team groups, there are sub-folders based on customer names.&nbsp; Eg: Appleton, Bakers, CostCo, Dales, Google, etc.&nbsp; (It is at this level that I would suggest setting up filters based on the From: address if you do any automation.)&nbsp; For the rare case that two customers might have the same general name (i.e. two separate divisions within the same parent organization), you might want to create a "Company-SubGroup" name (eg: "Google-SearchTeam" and a "Google-AdSenseTeam")</p>
<p>Before continuing, I'll take a quick departure into sorting and dates.&nbsp; The standard US method of writing the date, Month/Day/Year, doesn't sort easily on computers.&nbsp; Sure, they can be setup to sort this correctly, but the chronology of the folders is broken for simple views the email client provides.&nbsp; Over the years I've got into the habbit of writing the date as Year/Month/Day, and having battled programming glitches introduced during the "Y2K" event, I've got into the habit of using a full four-digit year so my folders.&nbsp; Using a dash ("-") for the field seperator, I write the date for "June 6, 2011" as "2011-06-14".&nbsp; These date strings automaticall sort correctly and don't require any additional work on the part of ourselves or the email system.</p>
<p>Most people might be able to stop at this level.&nbsp; For my job I may have numerous open support tickets with each customer, so keeping these different trains of though separated really helps track the current state of each problem.&nbsp; For my needs, each time a new ticket comes in I create a folder named with the date of the initial contact, the support ticket number and a brief description of the problem.&nbsp; This allows me to quickly scan for the problem should a co-worker need a quick update on my current workload, or quickly dive into the project without having to request and search for the un-friendly "ticket number".&nbsp; So, a problem that came in on "June 14, 2011" and a subsequent ticket of "ID1234" was created to resolve "Problem updating server address" would look like this: "2011-06-14:ID1234 - Problem updating server address".&nbsp;</p>
<p>When I finally resolve an problem tracked in the folder, I then move the entire folder to a "Closed" folder inside the customer name folder.&nbsp; Depending on the ammount of information tracked about each customer, I'll create folders within here, too.&nbsp; For example, for most customers I create a "year" folder (i.e. 2010, 2011) and move the ticket folder directly there.&nbsp; For some customers I've found it necessary to break this folder into additional levels so I create folders based on the quarter (i.e. Jan-March = First Quarter, April-June = Second Quarter, etc).&nbsp; So, using the example above, i'd move this into the "Closed/2011/2011Q2" folder.</p>
<p>This organizational method has allowed me to keep abreast of a huge volume of tasks and conversations.&nbsp; No, it's not perfect.&nbsp; There are times when the flow of incoming messages increase and the time required to sort them into their folders can be substantial, but continuing to do this allows me to quickly review the latest updates and resume when time permits (or the project has become the latest "high priority").</p>
<p>Some people have mentioned the "Inbox Zero" - http://inboxzero.com/ - as a possible solution.&nbsp; I haven't read the details, but from what I understand it looks to be another method to keep the flow of elecrronic thoughts organized in our daily lives.</p>]]></content></entry><entry><title>Podcasts from the command line.</title><id>http://www.linder.org/blog/2011/12/11/podcasts-from-the-command-line.html</id><link rel="alternate" type="text/html" href="http://www.linder.org/blog/2011/12/11/podcasts-from-the-command-line.html"/><author><name>Dan Linder</name></author><published>2011-12-12T03:00:16Z</published><updated>2011-12-12T03:00:16Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>I work from my home office, so I don't have to listen to what the guy in the cubicle next to me likes. &nbsp;That's good and bad, but in my case it's a moot point - my office in the basement can barely pick up any local radio stations. &nbsp;Just a few short years ago I would have had to resort to a collection of CDs or tapes (or running a long set of speaker wires from the livingroom radio down to the office). &nbsp;Thankfully, the technology came about and rescued me from boredom of the same CDs on endless repeat - enter the Podcast.</p>
<p>From the Wikipedia entry, the term came about in early 2004. &nbsp;I must have been right on the cusp, because it wasn't too much after that time I was finishing our basement and ran into the entertainment problem. &nbsp;Somehow I came across some tech related podcasts (<a href="http://www.dailysourcecode.com/">DailySourcecode</a>, <a href="http://www.twit.tv/">TWiT</a>), so I downloaded a few and played them through my laptop. &nbsp;That all worked well but it meant each time I finished one, I had to take the laptop back up to the network connection (WiFi router died and hadn't been replaced) and download the next one. &nbsp;A podcast is nothing more than an MP3 file, so copying the files to the laptop is quick but still another step that I had to do manually to make sure I didn't re-download a show I had already listened to. &nbsp;After a couple evenings of this I started searching for a way to download them in the background when I was at work so I could have hours of un-interrupted geek-talk while working in the basement.</p>
<p>A quick bit of Googling lead me to <a href="http://lincgeek.org/bashpodder/">BashPodder</a>. &nbsp;Since I was running Linux on my home system, this was a great fit. &nbsp;(Though the BashPodder website says that it runs on many other OS's including MacOSX, Windows, etc.) &nbsp;There are only three real files you need to make it all work:</p>
<p>1: The bashpodder.shell script - this is the main program that retrieves the requested podcast files.</p>
<p>2: The parse_enclosure.xsl file - this is used by the script to extract the podcast file names and download URLs.</p>
<p>3: The bp.conf file - This is a simple text file containing a list of URLs pointing to some website feeds for their podcasts.</p>
<p>Download these files from the BashPodder website, or you're welcome to use my tweaked version here.</p>
<p>Finally, to listen to them from the command line I wrote a script I cleverly call "Play And Delete" or "pad" for short.</p>
<p>Here's the bashpodder.shell script I am currently using:</p>
<pre class="brush: shell">#!/bin/bash
# By Linc 10/1/2004
# Find the latest script at http://lincgeek.org/bashpodder
# Revision 1.21 12/04/2008 - Many Contributers!
# If you use this and have made improvements or have comments
# drop me an email at linc dot fessenden at gmail dot com
# and post your changes to the forum at http://lincgeek.org/lincware
# I'd appreciate it!
QUIET=-q
#QUIET=-v

#
if [ -e /var/tmp/bashpodder.FAIL ] ; then
	echo Will not run - /var/tmp/bashpodder.FAIL exists.
fi

# Make script crontab friendly:
cd $(dirname $0)

# datadir is the directory you want podcasts saved to:
datadir=$(date +%Y-%m-%d)

# create datadir if necessary:
mkdir -p $datadir

# Delete any temp file:
rm -f temp.log

# Read the bp.conf file and wget any url not already in the podcast.log file:
date &gt;&gt; ordered.log
while read podcast
	do
	file=$(xsltproc parse_enclosure.xsl $podcast 2&gt; /dev/null | sed 's# #%20#g' || wget -q $podcast -O - | tr '\r' '\n' | tr \' \" | sed -n 's/.*url="\([^"]*\)".*/\1/p')
	for url in $file
		do
		echo $url &gt;&gt; temp.log
		if ! grep "$url" podcast.log &gt; /dev/null ; then
			name=$(echo "$url" | awk -F'/' {'print $NF'} | awk -F'=' {'print $NF'} | awk -F'?' {'print $1'})
			# Fixes for different URLs that parse to incorrect file names.
			# Buzz Out Loud has the name first but it's a redirect URL...
			if [ $( echo $url | grep 'dl_dlnow$' | wc -l ) ] ; then 
				name=$(echo $url | awk -F? '{ print $1 }' | awk -F'/' '{ print $NF }')
				#echo FIXING: $url
				#echo NEWNAME: $name
			fi

			wget -t 10 -U BashPodder -c $QUIET -O $datadir/$name "$url"

			touch $datadir/$name
			echo "$url" &gt;&gt; ordered.log
		fi
		done
	done &lt; bp.conf
EC=0
# Move dynamically created log file to permanent log file:
cat podcast.log &gt;&gt; temp.log || EC=1
cp podcast.log podcast.log.previous || EC=1
sort temp.log | uniq &gt; podcast.log || EC=1
rm temp.log || EC=1
if [ $EC -gt 0 ] ; then
	echo FAILED to update podcast.log file. &gt; /var/tmp/bashpodder.FAIL
	touch /var/tmp/bashpodder.FAIL
	exit 9
fi
# Create an m3u playlist:
ls $datadir | grep -v m3u &gt; $datadir/podcast.m3u

# Misc cleanup
mv */*JPG /home/dan/Pictures/Backgrounds/
</pre>
<p>Most of the changes I have made were to fix problems on my system. &nbsp;One update I made was to better handle a filled up my hard drive - this really got the BashPodder script all confused as to what to download. &nbsp;The script writes a "podcast.log" file that it uses each time it runs to determine if it needs to download a podcast or not. If the podcast URL doesn't exist in the podcast.log file, it downloads it and adds that URL to the file. &nbsp;That works great until the drive fills up and it is unable to update this file. &nbsp;In my case, the log file got erased so when I did free up space, BashPodder had to start over and tried to re-download everything. &nbsp;(Some day I'll document how I fixed that, but not today.)</p>
<p>My changes start at line 13. If the 'magic' ﻿bashpodder.FAIL file exists, it means there was a problem in a previous run and the system needs human intervention.</p>
<p>Line 30 adds a simple date to my log file named "ordered.log". &nbsp;I wanted to keep track of when a file was downloaded, so this helped me track that for later review.</p>
<p>Lines 38 through 50 are a mixture of original and new code.</p>
<ul>
<li>Line 38 tries to pull out the file name that will be used later. &nbsp;Some podcast URLs confuse the parsing done by the parse_enclosure.xsl template, so this helps lines 41 through 45 fix the name if necessary.</li>
<li>Line 47 was modified slightly to use the new name if necessary</li>
<li>Line 49 makes sure the date of the file matches the current system time. &nbsp;The 'pad' script sorts the files by their timestamp so this keeps them accurate.</li>
</ul>
<p>Lines 56 through 64 have a lot of additional error checking done on them. &nbsp;If any one fails, the script creates the ﻿bashpodder.FAIL file mentioned earlier, then exits to let a human fix what's wrong.</p>
<p>Line 69 is a hack, but it works for me. &nbsp;Some URLs I have BashPodder monitor have backgrounds uploaded to them. &nbsp;I have these files moved to my Backgrounds folder rather than manually moving them myself. &nbsp;(I'm lazy, so sue me!)</p>
<p>The parse_enclosure.xsl file I use is un-changed from the official BashPodder version.</p>
<p>My listening is also done at the command line and using <a href="http://www.videolan.org/vlc/">VLC</a>&nbsp;to play the video or audio file. &nbsp;After listening to a nights worth of 20-30 minute podcasts, I could have a number of files and directories to clean up. &nbsp;I wrote my "Play And Delete" script to take care of tha for me.</p>
<pre class="brush: shell">#!/bin/sh
# VLC Options:
OPTIONS="--zoom=2"

clear
if [ -z `which vlc` ] ; then
	echo Could not find vlc: `which vlc`
	exit 1;
fi

FILE=$1
EXT=`echo $FILE | rev | awk -F\. '{ print $1 }' | rev`
echo Playing: $FILE \($EXT\)

# Set the size of the new VLC we open.
#
# Note: if file ends in .mp4, use a different size.
if [ "$EXT" = "mp3" ] ; then
  echo Resizing screen for $EXT extension.
  SIZING='0,0,1100,950,100'
  (sleep 2.0 ; wmctrl -i -r `wmctrl -l | grep VLC | awk '{ print $1 }'` -e $SIZING ) &amp;
else
  echo "Not resizing an $EXT file."
fi

echo RUNNING: vlc $OPTIONS $FILE vlc://quit
vlc $OPTIONS $FILE vlc://quit 2&gt; vlc.err
EC=$?
echo Exit code: $EC
if [ $EC -le 0 ] ; then 
    echo Deleting $FILE
    sleep 2
    rm $FILE
fi
rm -f `dirname $FILE`/*.m3u
rm -f `dirname $FILE`/.directory
rmdir --ignore-fail-on-non-empty `dirname $FILE`/../* 2&gt;/dev/null
</pre>
<p>PAD basically takes a path/filename and tries to play the file with VLC.</p>
<p>Line 6 tries to confirm you have VLC installed and available in the path, otherwise it exits.</p>
<p>Line 12 gets the extension of the file (mp3, mp4, avi, etc) so lines 19-21 can move and re-size the vlc GUI to the lower-left corner of my screen. &nbsp;I don't resize video files, so if it isn't an MP3 I don't do anything.</p>
<p>Line 27 calls the VLC command to play the file.</p>
<p>Lines 28 through 34 monitor the exit code for VLC, and if it exited normally (i.e. got to the end of the podcast), then the script deletes the podcast from the disk. &nbsp;This autocleanup is great, especially for some of the larger video podcasts that can be 200+ MB in size.</p>
<p>Lines 35 through 37 try to do some additional cleanup. &nbsp;Since I don't use an MP3 player, I don't need the M3U files, and I also try to remove all of the empty directories. &nbsp;(BashPodder saves the files into directories named for the year/month/day the download was performed.)</p>
<p>My bp.conf has a lot of additional entries. &nbsp;I won't clutter up this page with it, but if you're interested in what I'm pulling down you're welcome to contact me for a copy. &nbsp;(I'll give you a hint - I'm a big <a href="http://twit.tv/">TWiT.tv</a>&nbsp;fan - Hi Leo, Tom, Iyaz, Sarah, and Steve!)</p>
<p>A big thanks to <a href="http://lincgeek.org/">Linc</a> and his work on the initial BashPodder script. &nbsp;Once I had that framework I was able to add and tweak it to fit my needs - I hope it helps others too.</p>]]></content></entry><entry><title>Speeding up the daily grind...</title><id>http://www.linder.org/blog/2011/12/4/speeding-up-the-daily-grind.html</id><link rel="alternate" type="text/html" href="http://www.linder.org/blog/2011/12/4/speeding-up-the-daily-grind.html"/><author><name>Dan Linder</name></author><published>2011-12-05T03:00:09Z</published><updated>2011-12-05T03:00:09Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>I telecomute for my current job.  Yes, it is nice to be home when the kids get out of school, but it also means that I'm only a minute away from being back at work.  And since my current position is on-call support for our customers, there are evenings that I make multiple trips "to the office" to assist customers.  Making the most of my time matters, so speeding up the time needed to get the job done was important.  One of the biggest pains was restarting the VPN and associated tools after logging off for the day.</p>
<p>For most organizations, telecomuters are a small fraction of the user base and thus a small fraction of the time the IT department has to devote to supporting their unique needs.  In the course of the day, there are a number of resources I need to access (support ticketing system, e-mail, file shares on servers, the Internet, etc).  The documented method that the IT team provides is aimed at the average user who needs to get in from the hotel or on the weekend, but not for those of us who rely on using it 8+ hours a day. As necessity is the mother of invention, I came up with this script to automate my regular login steps on my Windows 7 laptop.</p>
<p>Script named "SetMappings.bat":</p>
<pre class="brush: batch">@echo off
rem Set %USERNAME% to your login ID on the %DOMAIN%...
set VPNNAME="MyCompanyVPN"
set USERNAME={UserName}
set PASSWORD={Password}
set DOMAIN={CompanyDomain}
set PERSISTENT="/PERSISTENT:NO"

set NTPSVR=ntp.MyCompany.com

rasdial %VPNNAME% %USERNAME% %PASSWORD% /domain:%DOMAIN%
echo VPN connection returned: %ERRORLEVEL%

if NOT ERRORLEVEL 800 goto VPNGOOD
rem Errorlevel 800 == failed to connect.
echo Exiting on error %ERRORLEVEL%...
goto EOF
:VPNGOOD

echo Pause for 3 seconds until the VPN settles down..
ping -w 1000 -r 2 1.2.3.4 2>NUL: >NUL:

echo Setting time
net stop W32Time
net start W32Time
w32tm /config /syncfromflags:manual /manualpeerlist:%NTPSVR%
w32tm /config /update
w32tm /register
ping -w 1000 -r 2 1.2.3.4 2>NUL: >NUL:
echo Using NTP server:
w32tm /query /source /verbose

echo "Mapping to a domain controller"
net use \\dc2.MyCompany.com\ipc$ /user:%DOMAIN%\linder %PASSWORD% %PERSISTENT%

echo "Mapping to ex2k3"
net use \\ex2k3.MyCompany.com\ipc$ /user:%DOMAIN%\linder %PASSWORD% %PERSISTENT%

echo Mapping M...
net use M: /delete
net use M: \\MyCompany.com\dfs\data /user:%DOMAIN%\%username% %PERSISTENT% %PASSWORD% 

echo Mapping N...
net use N: /delete
net use N: \\MyCompany.com\dfs\home /user:%DOMAIN%\%username% %PERSISTENT% %PASSWORD%

echo Mapping O...
net use O: /delete
net use O: \\MyCompany.com\dfs\apps /user:%DOMAIN%\%username% %PERSISTENT% %PASSWORD%

echo Mapping P...
net use P: /delete
net use P: \\MyCompany.com\dfs\tools /user:%DOMAIN%\%username% %PERSISTENT% %PASSWORD%

start "Outlook" "c:\Program Files (x86)\Microsoft Office\Office12\OUTLOOK.EXE" /recycle

cd "C:\Program Files (x86)\Avaya\Avaya one-X Communicator\"
start "SoftPhone" "C:\Program Files (x86)\Avaya\Avaya one-X Communicator\onexcui.exe"

cd "%HomePath%"

:EOF
</pre>
<p>Before you can run this on your system, you'll need to configure a couple of things:</p>
<ul>
<li>Configure the VPN and name it "MyCompanyVPN"
<ul>
<li>For configuring the VPN under Windows 7, go to the "Network and Sharing Center" and click on the "Set up a new connection or network.
<li>Choose "Connect to a workplace", and choose "No, create a new connetion".
<li>Choose the "Use my Internet connection", then fill in the remainder of the windows with information provided by your IT department.
<li>The "Destination Name" field needs to match the value in line 3.</li>
</ul>
</li>
<li>Run the batch file as an administrator.
<ul>
<li>To run the batch file as an administrator, open a command prompt as an administrator user by right-clicking on the "Command Prompt" under the Accessories folder, then choosing "Run as administrator".
<li>It will open up in the "C:\Windows\system32\" directory - place the SetMappings.bat file here.</li>
</ul>
</li>
</ul>
<p>Now to explain the script in detail:</p>
<p>Lines 3-9 : The script begins with defining the values used throughout the script so we only have to do it once.  Some people might consider the password stored in the batch file a security risk.  I agree, but the batch file is stored on my laptop which is never out of my posession, has a password to login, is firewalled, and is not sharing anything with the outside world.  No, it's not impervious but the stored password is the method I chose.  If you don't like it, you are free to modify the code to prompt for the password each tiem it is run.</p>
<p>Lines 11-18 : This tells the system to use "rasdial" (<A target=_blank HREF="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/rasdial.mspx?mfr=true">Explaination here</A>) to connect to the named VPN connection setup supplying the name/password for the connection.  If the "rasdial" exits with error code 800, then jump to the end of the script (line 86) and exit.</p>
<p>Line 21 : Assuming IP address 1.2.3.4 does NOT exist, this ping command will pause for three seconds.  The "-r 2" says to retry two times after the initial ping fails to receive a reply after 1000 milliseconds</p>
<p>Lines 23-31 : This section makes sure my laptop clock is in sync with a good known source.  Since the servers at work use an internal NTP server, I make sure my laptop is synchronized with that same server.  This ensures that timestamps on e-mails and meeting invitations are consistent.</p>
<p>Lines 33-57 : My company uses many network drives to store data and other shared resources.  There is a small compiled VisualBasic script that was provided, but it had issues whenever I ran it so I re-implemented the drive mappings using the "net use" command.  Theoretically the mapping of the "IPC$" share (lines 34 and 37) should ensure my login credentials are shared throughout the servers in the domain.  Additionaly, I map the required drive letters manually each time to ensure they are available.</p>
<p>Line 59 : I live most of my day responding to e-mails that customers and co-workers send me.  This line runs Microsoft Outlook for me, the "/recycle" option should ensure that only a single copy of Outlook is started (just in case I had to re-run the script and Outlook was already running).</p>
<p>Line 62 : Since I am remote, I also use a <A target=_blank HREF=http://en.wikipedia.org/wiki/Softphone>softphone</A> so I can talk with customers and co-workers.  This line starts it for me - it prefers to start after the system is completely up and the VPN is stable, running this last helps ensure that.</p>]]></content></entry><entry><title>We all cheat a bit...even teachers!</title><category term="funny"/><category term="security"/><category term="security"/><category term="voting"/><id>http://www.linder.org/blog/2011/11/27/we-all-cheat-a-biteven-teachers.html</id><link rel="alternate" type="text/html" href="http://www.linder.org/blog/2011/11/27/we-all-cheat-a-biteven-teachers.html"/><author><name>Dan Linder</name></author><published>2011-11-28T03:00:54Z</published><updated>2011-11-28T03:00:54Z</updated><summary type="html" xml:lang="en-US"><![CDATA[Need to take a simple poll, but don't have the time to write your own voting software?  Check out GoPollGo.com.]]></summary></entry><entry><title>Brother, can you scan a dime?</title><category term="Brother"/><category term="Linux"/><category term="Ubuntu"/><category term="printer"/><category term="scanner"/><id>http://www.linder.org/blog/2011/11/21/brother-can-you-scan-a-dime.html</id><link rel="alternate" type="text/html" href="http://www.linder.org/blog/2011/11/21/brother-can-you-scan-a-dime.html"/><author><name>Dan Linder</name></author><published>2011-11-21T15:25:54Z</published><updated>2011-11-21T15:25:54Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>I really like my Brother printers. &nbsp;I've had only two Brother printers in the past 6+ years, but that's a fraction of the number of HP DeskJet printers I've had in the 4-5 years previous. &nbsp;For my purposes, they are rock solid and a great bang-for-the-buck especially when it comes to the consumables (i.e. ink or toner).</p>
<p>Last year I started working from home and needed a FAX of some sort. &nbsp;The Brother MFC-295CN was only $60 on Amazon, and was everything I needed:</p>
<ul>
<li>Printer</li>
<li>Scanner</li>
<li>FAX</li>
<li>Network attached</li>
</ul>
<p>My last HP laserjet cost around $100, and was not network attached (the HP JetDirect box was over $100 separately). &nbsp;The Brother is a great little device for an all-in-one.</p>
<p>And the best thing?? &nbsp;Brother is very Linux friendly - a big plus in my book.</p>
<p>Right after I got it a year ago (2010), I jumped through some hoops to get the Scan-to-PC feature to work but it was possible. &nbsp;Recently, I re-installed my workstation with Ubuntu 11.10 and had to re-setup the configuration.</p>
<p>To my plesant suprise, this was extremely easy to setup. &nbsp;Here's what I did:</p>
<ul>
<li>﻿﻿<a href="http://welcome.solutions.brother.com/bsc/public_s/id/linux/en/download_scn.html">http://welcome.solutions.brother.com/bsc/public_s/id/linux/en/download_scn.html</a> 
<ul>
<li>The official Brother drivers. &nbsp;Get the one that you need for your printer.</li>
</ul>
</li>
<li><a href="http://welcome.solutions.brother.com/bsc/public_s/id/linux/en/instruction_scn1.html">http://welcome.solutions.brother.com/bsc/public_s/id/linux/en/instruction_scn1.html</a> 
<ul>
<li>Follow the directions beneath the section where you downloaded the drivers.</li>
</ul>
</li>
</ul>
<p>Here are my steps that I took to install the Brother scanning software under Ubuntu 11.10.</p>
<ol>
<li>Download the drivers from the Brother website.</li>
<li>Install the driver:  
<ul>
<li>﻿sudo dpkg -i /home/dan/Downloads/brscan3-0.2.11-4.amd64.deb</li>
</ul>
</li>
<li>Configure the driver:  
<ul>
<li>brsaneconfig3 &nbsp;-a &nbsp;name=BrotherScanner model=MFC-295CN ip=192.168.1.15</li>
<li>(My printer is at ﻿192.168.1.15)</li>
</ul>
</li>
<li>Try a test scan:<ol>
<li>For this I used "Simple Scan": Applications -&gt; Graphics -&gt; Simple scan.</li>
<li>I placed a document on the scanner, the clicked the "Scan" button.</li>
<li>After ~20 seconds of thinking, the scanner started working and the document appeared on my screen.</li>
</ol></li>
</ol>
<p>I almost feel silly writing this down - it was the same series of steps I would have had to go through if this was an "easy Windows install". &nbsp;It was very easy to configure. &nbsp;Way to go Brother!</p>
<p><span class="full-image-block ssNonEditable"><span><img src="http://www.linder.org/storage/Scanned Document002.jpg?__SQUARESPACE_CACHEVERSION=1321915403669" alt="" /></span></span></p>
<p>Dan</p>
<div></div>
<p>&nbsp;</p>]]></content></entry><entry><title>Fork()s for Thanksgiving</title><category term="Perl"/><category term="Perl"/><category term="fork"/><category term="parallel"/><id>http://www.linder.org/blog/2011/11/20/forks-for-thanksgiving.html</id><link rel="alternate" type="text/html" href="http://www.linder.org/blog/2011/11/20/forks-for-thanksgiving.html"/><author><name>Dan Linder</name></author><published>2011-11-21T03:00:51Z</published><updated>2011-11-21T03:00:51Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>A long time ago I inherited some Perl code to take care of.&nbsp; It's good code, it doesn't stay out late, cleans up after itself most of the time, and does things pretty well without a lot of fanfare.&nbsp; Unfortunatly, that was also a big drawback.</p>
<p>The code was originally written when a "big system" was one with 512MB RAM and two CPUs (note not "two cores" - we're talking two big CPU chips on the motherboard).&nbsp; This code would process incoming data one at a time, storing the data back to a directory structure on the disk.&nbsp; The incoming data was all contained in a single archive file, and the resulting data stored to disk was mostly self contained too.&nbsp; As time went by, the code never had to speed up, thankfully <a href="http://en.wikipedia.org/wiki/Moore%27s_law">Moore's Law</a> kept increasing the speed of the CPUs as the size and volume of incoming data increased.&nbsp; That was, until a customer upgraded to a new quad-core CPU with gobs of RAM and lots of fast hard drives.&nbsp; Everything about the new system was easily eight times the old system; four cores running at 1.2GHz, up from 600MHz, 16 GB RAM, up from 2GB, and a fast SAN drive for the data and not the old SCSI internal disks.&nbsp; Yes, it was a big upgrade in all the key areas except one: the old code.</p>
<p>Don't get me wrong, the old code ran perfect on the new system - but the rate it was processing the incoming data was barely twice the old system.&nbsp; And with the projected growth of the data center, they were expecting to increase the incoming data by ten times over the next 18 months.&nbsp; Someting had to be done - Moore had got us this far, but it was time for a change.</p>
<p>As I described earlier, the data is really a best case scenario for parallel processing.&nbsp; In only one function does the data from one incoming set ever need to interact with pre-existing data.&nbsp; I set about learning as much as I could about the <strong>fork()</strong> subroutine in Perl.</p>
<p>For those who haven't dealt with it, fork() allows your program to clone itself in memory and have two running copies.&nbsp; It's really easy to create a "fork bomb" to bring down some systems if the programer isn't careful.&nbsp; Just remember that right after the fork() subroutine is called, there are two identical copies of your code running in memory.&nbsp; It's up to the programmer to add code right after the fork() to ensure that each copy knows what it's role is.</p>
<p>For anyone wanting some boilerplate fork() code to play with, here's a bit of code that I wrote to demonstrate this:</p>
<p><script type="text/javascript">
     SyntaxHighlighter.all()
</script></p>
<pre class="brush: perl">#!/usr/bin/perl
use strict;
my @array = qw(AA BB CC DD EE FF GG);
my $sleep = 10;
my %children;

for my $A (0..scalar(@array)-1) {
        my $pid = fork();
        if ($pid) {
                # parent
                $children{$pid}=@array[$A];
        } elsif ($pid == 0) {
                # child
                my $X = $sleep*rand();
                my $now = localtime();
                printf "$now Executing %s for %5.3f seconds.\n",@array[$A],$X;
                sleep $X;
                exit(0);
        } else {
                die "couldn't fork: $!\n";
        }
}

my $exited;
while (($exited = wait()) &amp;&amp; ($exited &gt; 0 )) {
        my $now = localtime();
        printf "$now EXITED: $exited(%s)", $children{$exited};
        delete $children{$exited};
        if (scalar %children &gt; 0 ) {
                printf ", waiting for";
                foreach my $B (sort keys(%children)) {
                        printf ": %5i(%s) ",$B, $children{$B};
                }
        }
        printf "\n";
}</pre>
<p>Line 8 is where the magic begins.&nbsp; The call to <strong>fork()</strong> clones the program in memory making a parent and child.&nbsp; The parent copy has the $pid set to the process ID of the child that was just forked, and the child has $pid set to zero.&nbsp; In this example, the parent saves the childs PID in an array for later reference and goes through the for-loop (line 7) until it's forked a child for each element in the array named @array.</p>
<p>Each child does his own thing - he prints that it is going to execute (sleep) for a few seconds, sleeps, then he dies.</p>
<p>While the children are sleeping, the parent watches over them in the while loop at line 25.&nbsp; It's kinda morbid, but the parent uses the <strong>wait()</strong> call to signal when a child exits (dies), then it prints what it knew about the child process, and also prints the list of children it's still waiting for.</p>
<p>When that code is executed, it will produce output something like this:</p>
<blockquote>
<p>$ perl fork_example.pl<br />Mon Apr 20 22:36:25 2009 Executing AA for 0.356 seconds.<br />Mon Apr 20 22:36:25 2009 Executing BB for 9.797 seconds.<br />Mon Apr 20 22:36:25 2009 Executing CC for 4.411 seconds.<br /> Mon Apr 20 22:36:25 2009 Executing DD for 7.816 seconds.<br />Mon Apr 20 22:36:25 2009 Executing EE for 5.170 seconds.<br />Mon Apr 20 22:36:25 2009 Executing FF for 8.632 seconds.<br />Mon Apr 20 22:36:25 2009 Executing GG for 6.502 seconds.<br /> Mon Apr 20 22:36:25 2009 EXITED: 12343(AA), waiting for: 12344(BB) : 12345(CC) : 12346(DD) : 12347(EE) : 12348(FF) : 12349(GG)<br />Mon Apr 20 22:36:29 2009 EXITED: 12345(CC), waiting for: 12344(BB) : 12346(DD) : 12347(EE) : 12348(FF) : 12349(GG)<br /> Mon Apr 20 22:36:30 2009 EXITED: 12347(EE), waiting for: 12344(BB) : 12346(DD) : 12348(FF) : 12349(GG)<br />Mon Apr 20 22:36:31 2009 EXITED: 12349(GG), waiting for: 12344(BB) : 12346(DD) : 12348(FF)<br />Mon Apr 20 22:36:32 2009 EXITED: 12346(DD), waiting for: 12344(BB) : 12348(FF)<br /> Mon Apr 20 22:36:33 2009 EXITED: 12348(FF), waiting for: 12344(BB)<br />Mon Apr 20 22:36:34 2009 EXITED: 12344(BB)</p>
</blockquote>
<p>&nbsp;In my situation, the fork() loop (lines 7..22) were a bit more involved.&nbsp; I added code to limit the number of child processes it would fork at a time - basically keeping track of the active number of children and using <strong>wait()</strong> when it reached the threshold but still had more to process.</p>
<p>The data also had some situations where new incoming data was added to existing data.&nbsp; If two children are processing data that has to update the data on the disk, it's entirely possible for both children to read the data at the same time, add their own bit of data to the mix, and write the file back to disk.&nbsp; The end result would be that one child would end up writing last and overwriting the other childs data.&nbsp; That lead to the use of the flock() command - which has its own quirks and deserves its own space.</p>
<p>So, when you're sitting down to your Thanksgiving dinner remember how usefull the <strong>fork()</strong> is!</p>]]></content></entry></feed>
