<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3185026201834346457</id><updated>2010-03-30T20:52:14.526-05:00</updated><title type='text'>Agave Mountain</title><subtitle type='html'>Bootstrapping a micro-ISV startup from scratch. My views on: startups, bootstrapping a business, software development, small business, consulting, and time management.</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/blog.html'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://feeds.feedburner.com/AgaveMountain'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>212</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-4083127944945679252</id><published>2010-03-16T00:04:00.001-05:00</published><updated>2010-03-16T00:04:32.331-05:00</updated><title type='text'>Mac Pro: the Resurrection</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Two years ago, I purchased a &lt;a href='http://www.agavemountain.com/2008/01/mac-pro-for-windowslinux-development.html'&gt;Mac Pro for development&lt;/a&gt;.  In the first few months, I had problems with  the Mac Pro waking up from sleep.  Randomly, the PC would not have video on boot.  I took it in for service and was totally &lt;a href='http://www.agavemountain.com/2008/04/apple-bar-leaves-much-to-be-desired.html?showComment=1209006000000'&gt;unimpressed by Apple's technical support&lt;/a&gt;.  &lt;br/&gt;&lt;br/&gt;Publicly, Apple claimed that there were no problems with the &lt;a href='http://www.appletell.com/apple/comment/2008-mac-pro-video-card-issues/'&gt;ATI Radeon HD 2600 XT  card&lt;/a&gt;, even though people like me have continually and consistently reported otherwise in  various Apple support forums.  Horror stories abound about people taking in their Mac Pros  under warranty and being given a defective video card multiple times.  Most give up and opt to purchase an "upgrade" video card to make the pain stop. &lt;br/&gt;&lt;br/&gt;As a work around, I disabled sleep and only rebooted sparingly when I had to.  Some later firmware updates made the system much more stable, provided I didn't try to force it to sleep or reboot. &lt;br/&gt;&lt;br/&gt;Well, last week, after I installed Snow Leopard, the video card in my Mac Pro, the ATI Radeon HD 2600 XT, finally died.  No video on boot, no matter how many boots I tried.&lt;br/&gt;&lt;br/&gt;I purchased a new video card and no more problems, in spite of what Apple's "technicians" have told me on numerous occupations. &lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=5fd593d9-807d-8e17-a007-a7a15d185fb8' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-4083127944945679252?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/4083127944945679252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=4083127944945679252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/4083127944945679252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/4083127944945679252'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2010/03/mac-pro-resurrection.html' title='Mac Pro: the Resurrection'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-1566970501464784888</id><published>2010-02-11T23:06:00.001-06:00</published><updated>2010-02-11T23:06:22.618-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reviews'/><title type='text'>Review: The Richest Man in Babylon</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_hrVPPOyDXVE/S3ThzM1qjgI/AAAAAAAAALU/TDNkrm8zB0g/s1600-h/richestmaninbabalyon%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="richestmaninbabalyon" align="left" src="http://lh5.ggpht.com/_hrVPPOyDXVE/S3ThzehLl0I/AAAAAAAAALY/ST43TAjiNOo/richestmaninbabalyon_thumb%5B1%5D.jpg?imgmax=800" width="244" height="244" /&gt;&lt;/a&gt; George S. Clason's classic book entitled, &lt;em&gt;The Richest Man in Babylon&lt;/em&gt; is one of the personal finance classics recommenced by many financial gurus.&amp;#160; &lt;a href="http://www.daveramsey.com"&gt;Dave Ramsey&lt;/a&gt; regularly recommends the book on his radio show. &lt;/p&gt;  &lt;p&gt;The book, originally written in the 1920's, is a collection of financial parables set in ancient Babylon.&amp;#160; Each of the seven short stories relates the adventures of the characters as they are taught how to amass wealth. &lt;/p&gt;  &lt;p&gt;While the language is strange due to the author's attempt to make the stories seem like they came from ancient days, the stories repeatedly hammer home the basics of personal finance, although sometimes in an awkward and repetitious manner. &lt;/p&gt;  &lt;p&gt;The two main tales that I like best are the &amp;quot;Seven Cures for a Lean Purse,&amp;quot; and &amp;quot;The Five Laws of Gold.&amp;quot;&amp;#160; The rest seem to repeat and reinforce the advice given throughout the book. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Seven Cures for a Lean Purse&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The tale, &amp;quot;Seven Cures for a Lean Purse&amp;quot; follows the main character Arkad, who is requested by the king to teach a class to build wealth.&amp;#160; The class was seven days long, and each day a topic was taught.&amp;#160; They are (translated into modern English and summarized): &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Take one-tenth of what you bring in and save it for the future.&amp;#160; This was brought up again and again.&amp;#160; Save 10% of your income before you pay your debts or spend.&amp;#160; This was repeated throughout the book. &lt;/li&gt;    &lt;li&gt;Don't buy frivolous things even if you have the money to pay for them and live on less than you make (after saving 10%).&amp;#160; &lt;/li&gt;    &lt;li&gt;Once you save, invest to make &amp;quot;your gold multiply.&amp;quot;&amp;#160; Conversely, if you don't invest you won't get wealthy. &lt;/li&gt;    &lt;li&gt;Don't invest foolishly; you should only invest in things where the principle is safe.&lt;/li&gt;    &lt;li&gt;Own your own home.&lt;/li&gt;    &lt;li&gt;Insure a future income for your family after you pass on. &lt;/li&gt;    &lt;li&gt;Increase you ability to earn by working hard, looking for opportunities, and educating yourself.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;The Five Laws of Gold&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You should save at least 10% of your earning to create an estate for his family's future.&lt;/li&gt;    &lt;li&gt;If you invest well, you will make money.&lt;/li&gt;    &lt;li&gt;Be cautious in investing. &lt;/li&gt;    &lt;li&gt;Only invest in businesses or purposes that you know.&amp;#160; If you don't understand you could loose your money or get swindled. &lt;/li&gt;    &lt;li&gt;Avoid investments that promise absurdly high returns (if it is too good to be true, it probably is).&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I thought the audio book was reasonably good and it would be perfect to use to teach children about financial topics.&amp;#160; &lt;/p&gt;  &lt;p&gt;However, if you easily bored with stilted old English phrases or repetitive teaching methodologies, you might want to pick another book to read.&amp;#160; &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-1566970501464784888?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/1566970501464784888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=1566970501464784888' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/1566970501464784888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/1566970501464784888'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2010/02/review-richest-man-in-babylon.html' title='Review: The Richest Man in Babylon'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-3912719132570181694</id><published>2010-02-11T22:29:00.001-06:00</published><updated>2010-02-11T22:29:19.167-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reviews'/><title type='text'>Review: Levenger Graphiti Grip 2mm Mechanical Pencil</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_hrVPPOyDXVE/S3TZHJ7iSFI/AAAAAAAAALM/KIu1zRQfO8c/s1600-h/LevengerSide3.jpg"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="LevengerSide" align="right" src="http://lh6.ggpht.com/_hrVPPOyDXVE/S3TZHqS_JuI/AAAAAAAAALQ/8qC1dot4Auo/LevengerSide_thumb1.jpg?imgmax=800" width="244" height="45" /&gt;&lt;/a&gt;I am constantly scribbling notes on paper and post-it notes.&amp;#160; As I age and my memory grows shorter, it is the crutch that I a lean on most to keep my productivity up.&amp;#160; I still rely heavily on the my nearly unreadable scribbles to get me through the week.&lt;/p&gt;  &lt;p&gt;As a result, it doesn't take much to convince me to purchase a new writing instrument; I'm always looking for a good one to add to my collection.&amp;#160; So when I saw the &lt;a href="http://www.levenger.com/PAGETEMPLATES/PRODUCT/Product.asp?Params=category=8-911|level=2-3|pageid=6009"&gt;Levenger Graphiti Grip 2mm Mechanical Pencil&lt;/a&gt; on sale for half price ($14.95, discounted from $38.) I decided to take a risk.&amp;#160; I mean, how bad could it be?&amp;#160; &lt;/p&gt;  &lt;p&gt;Pretty bad, I later found out.&lt;/p&gt;  &lt;p&gt;As I opened the undamaged cardboard box, I immediately noticed the metallic silver zippered tin case had been crushed.&amp;#160; Because the shipping box was undamaged, I suspect it must have been damaged before it was shipped.&amp;#160; The pencil was undamaged, so I tossed the dented case aside.&amp;#160; &lt;/p&gt;  &lt;p&gt;The pencil writes well and is evenly balanced.&amp;#160; The cherry wood barrel and matte chrome finish make it a beautiful pencil and the size of the pencil makes it comfortable to write with. &lt;/p&gt;  &lt;p&gt;There is no sharpener included.&amp;#160; You will have to purchase a separate pencil sharpener that will sharpen the 2mm lead (or use a pocket knife).&lt;/p&gt;  &lt;p&gt;The cap is cheap and often pops off with the slightest jar or friction.&amp;#160; If you drop the pencil, you will have to guess what random direction the end cap traveled.&amp;#160; Also, when advancing the graphite led, the wood barrel slowly works itself loose.&amp;#160; I found myself constantly having to re-tighten the barrel.&amp;#160; This appears to get worse over time. &lt;/p&gt;  &lt;p&gt;Hands down, this was the worst mechanical pencil I have ever owned. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-3912719132570181694?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/3912719132570181694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=3912719132570181694' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/3912719132570181694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/3912719132570181694'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2010/02/review-levenger-graphiti-grip-2mm.html' title='Review: Levenger Graphiti Grip 2mm Mechanical Pencil'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-4596101152716474877</id><published>2010-02-10T10:23:00.001-06:00</published><updated>2010-02-10T10:23:55.128-06:00</updated><title type='text'>PayPal suspends payments to India</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;It just got a little harder to be a freelancer in India, as PayPal is currently the payment processor of choice for Indian freelancers.&lt;br/&gt;&lt;br/&gt;As of January 28th, &lt;a href='http://news.cnet.com/8301-1023_3-10448971-93.html'&gt;PayPal has suspended personal payments&lt;/a&gt; to and from India and transfers to local banks in India.  Today, Anuj Nayar &lt;a href='https://www.thepaypalblog.com/2010/02/update-on-paypal-situation-in-india/'&gt;explained the reason&lt;/a&gt; behind the suspension -- regulators are questioning whether the transfers constitute remittances to India.  Therefore, PayPal has stopped processing personal payments to India. &lt;br/&gt;&lt;br/&gt;That leaves thousands of freelancers with money in their PayPal accounts, but no way to withdraw the money and a resolution that is months away.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=f9937766-1cd6-83d3-9adf-dccadd0db0ac' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-4596101152716474877?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/4596101152716474877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=4596101152716474877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/4596101152716474877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/4596101152716474877'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2010/02/paypal-suspends-payments-to-india.html' title='PayPal suspends payments to India'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-2560991004487901429</id><published>2010-02-09T23:15:00.001-06:00</published><updated>2010-02-09T23:15:20.115-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Announcements'/><title type='text'>Announcements</title><content type='html'>&lt;p&gt;I've been insanely busy lately, but here are a few announcements: &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;We're Moving.&lt;/strong&gt;&amp;#160; We are taking advantage of an opportunity to move into a bigger, more comfortable place.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Blogger shutting down FTP Support.&lt;/strong&gt;&amp;#160; We are currently utilizing the Blogger platform to maintain this blog.&amp;#160; We currently push the blog to our hosting account via FTP.&amp;#160; However, in the near future Blogger will be &lt;a href="http://buzz.blogger.com/2010/01/important-note-to-ftp-users.html"&gt;discontinuing their support of publishing via FTP&lt;/a&gt;, forcing us to make a choice between Blogger's &amp;quot;Custom Domains&amp;quot; or WordPress.&amp;#160; Goodbye Blogger, we will miss you.&amp;#160; Links will probably become broken during the transition.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Goodbye ComCast/Xfinity.&lt;/strong&gt;&amp;#160; Seriously, I still chuckle every time I think of the ComCast customer service agent who tried to talk me into using their phone service but only after: 1) arguing that I didn't really have an outage; 2) telling me to buy a new cable modem from BestBuy; and 3) finally telling me the earliest they could send out a technician was next week.&amp;#160; Goodbye ComCast, you won't be missed.&amp;#160; &lt;/p&gt;  &lt;p&gt;And lastly, we are considering consolidating and bringing our web sites back in-house.&amp;#160; We are doing this for a variety of reasons, including security, faster responses to customer issues, and quite frankly we simply aren't happy with the shared hosting we've received from a number of vendors.&lt;/p&gt;  &lt;p&gt;In any event, this is shaping up to be a interesting year so far.&amp;#160; Hopefully, it will be better than 2009.&amp;#160; &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-2560991004487901429?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/2560991004487901429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=2560991004487901429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/2560991004487901429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/2560991004487901429'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2010/02/announcements.html' title='Announcements'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-4303643745062041071</id><published>2010-02-09T22:39:00.001-06:00</published><updated>2010-02-09T22:39:21.060-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Building a Junk Yard Network Attached Storage (NAS) Server (Part 1)</title><content type='html'>&lt;blockquote&gt;   &lt;p&gt;&lt;img align="right" src="http://drobo.com/images/8disks.gif" width="81" height="134" /&gt;&lt;em&gt;For a while now I have been searching for a NAS (Network-Attached Storage) appliance for my home office -- one that is inexpensive, supports CIF, AFS, Subversion, and above all, is quiet.&lt;/em&gt;&amp;#160; &lt;em&gt;I didn't find one, so I built one.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;For a while I've been starting to bump into the upper limits of my disk storage.&amp;#160; The storage needs of my paperless home office was quickly outgrowing my current disk capacity, causing me to be constantly trolling for files to delete.&amp;#160;&amp;#160; The combined with multiple subversion repositories, VMWare virtual hard drives, developer kits, SDKs and operating system distribution ISO images was quickly consuming my local hard drives resources.&lt;/p&gt;  &lt;p&gt;Still, I resisted the urge to throw down the cash for a NAS appliance. &lt;/p&gt;  &lt;p&gt;However, when my quirky 1TB SimpleTech USB drive (I do not recommended purchasing SimpleTech's external drives by the way) started throwing I/O errors, and I couldn't get it to format, I knew it was time to start searching for something better.&amp;#160; &lt;/p&gt;  &lt;p&gt;My critical data was safely stored on RAID-1 array, but I knew from experience RAID sometimes provides a false sense of security.&amp;#160; With a sense of urgency, I again started looking at NAS appliances.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_hrVPPOyDXVE/S3I4dnqLQEI/AAAAAAAAALE/6AObTjoc_jk/s1600-h/nasprices3.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="nasprices" align="left" src="http://lh5.ggpht.com/_hrVPPOyDXVE/S3I4eF5GvjI/AAAAAAAAALI/LtHYxd1joVU/nasprices_thumb1.png?imgmax=800" width="244" height="148" /&gt;&lt;/a&gt;At first, I looked at a variety of 4-bay NAS appliances.&amp;#160; The least expensive 4+ bay NAS (Promise NS4300N SmartStor) was priced at $292.99, and the most expensive was the ReadyNas 4TB was priced at $1479.99.&lt;/p&gt;  &lt;p&gt;What surprised me most was that the reviews of these appliances have an average three stars (out of five).&amp;#160; Furthermore, in every model I investigated there were complaints about quirky firmware issues, extraordinary disk format times, poor tech support, and above all, poor performance. &lt;/p&gt;  &lt;p&gt;Clearly, there had to be a better way. &lt;/p&gt;  &lt;p&gt;I ultimately ended up salvaging parts from various dead PCs to create an inexpensive &amp;quot;Junk Yard NAS.&amp;quot;&amp;#160; I junked a total of 3 PCs and kept the most modern -- the Althon64 (3800+) powered HP Pavilion a1510n.&amp;#160; The Athlon 64 3800+ came out in 2004 with a frequency of 2.4GHz and 512KB of L2 cache.&amp;#160; Clearly, we aren't going to win any races here.&amp;#160; I also purchased two (2) 2TB drives for an all in cost of $400.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Take 1: Gentoo (Goodbye RAID, Hello Nightly Disk to Disk Backup)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;First, I installed Gentoo.&amp;#160; Within a few hours I had a fully functional, but minimal system.&amp;#160; I installed Gentoo on the first drive and broke the 2 TB drive into three partitions: a boot partition, a swap partition, and a data partition.&amp;#160; &lt;/p&gt;  &lt;p&gt;Next, I started to make a&amp;#160; clone of the system drive.&amp;#160; In the event of a drive failure, I could just pull the drive and use the backup as a boot drive.&amp;#160; This would be especially important when the second drive was in a removable drive tray I could take with me in the event of a fire or other disaster. &lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; dd &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;=/dev/sda of=/dev/sdb&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Unfortunately, I quickly figured out that doing a nightly disk to disk backup (with the dd utility) of a 2TB drive would take weeks at 20MB/second.&amp;#160; A nightly disk to disk backup would be impossible. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Take 2: Gentoo (Goodbye dd, Hello rsync)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next, I used fdisk to parition the second disk.&amp;#160; For convenience, I copied the boot partition: &lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; dd &lt;span style="color: #0000ff"&gt;if&lt;/span&gt;=/dev/sda1 of=/dev/sdb1&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Next, I formatted the data partition, mounted the second disk and then used rsync to copy the contents of the root directory to the second drive:&lt;/p&gt;

&lt;p&gt;rsync -ax --delete --force --exclude /mnt/mirror / /mnt/mirror/&lt;/p&gt;

&lt;p&gt;Lastly, I setup a nightly cron script to copy the system disk to the backup disk.&amp;#160; It worked flawlessly for several weeks until I decided to try out FreeNAS (see the next part).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-4303643745062041071?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/4303643745062041071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=4303643745062041071' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/4303643745062041071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/4303643745062041071'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2010/02/building-junk-yard-network-attached.html' title='Building a Junk Yard Network Attached Storage (NAS) Server (Part 1)'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-6889809232429839802</id><published>2010-01-27T15:48:00.001-06:00</published><updated>2010-01-27T15:48:56.023-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal Finance'/><title type='text'>SEC votes to allow Money Market Funds to keep your money indefinitely</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Money Market accounts aren't as safe as they used to be.  The SEC voted today to allow Money Markets Funds to suspend redemptions from Money Market accounts:&lt;br/&gt;&lt;blockquote&gt;&lt;a href='http://www.zerohedge.com/article/government-your-legal-right-redeem-your-money-market-account-has-been-denied'&gt;Zero Hedge discussed a month &lt;/a&gt;ago the disastrous prospects of what would happen if the new proposal contemplated by the SEC, which would allow the suspension of redemptions from Money Market Funds, were to pass. Well, in a nearly unanimous vote, Money Market Funds now have the ability to suspend redemptions, courtesy of the SEC's just passed 4-1 vote. This explains the negative rate on bills: at this point, should there be another meltdown, money market investors will not, &lt;strong&gt;repeat not&lt;/strong&gt;, be able to withdraw their money purely on the whim of Mary Schapiro. As the SEC noted: "&lt;strong&gt;&lt;span&gt;We understand that suspending &lt;span&gt;redemptions&lt;/span&gt; may impose hardships on investors who rely on their ability to redeem shares." &lt;/span&gt;&lt;/strong&gt;Too bad investors' hardships considerations ended up being completely irrelevant. (Source: &lt;a href='http://www.zerohedge.com/article/suspending-money-market-redemptions-now-legel-sec-approves-new-money-market-regulation-4-1-v'&gt;ZeroHedge&lt;/a&gt;).&lt;br/&gt;&lt;/blockquote&gt;In layman's terms, a simple example: you have a money market account and faithfully deposit money in it to save for a house, college, or for retirement.  When it comes to take the money out the money out, the bank can say sorry we have suspended redemptions.  We will give you the money... someday.  The question is will someday ever come?&lt;br/&gt;&lt;br/&gt;Don't think it can happen?  There have been a rash of hedge funds that have suspended redemptions, only promising that someday they will return the money.  In some cases investors have been locked out well over a year.  &lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.zerohedge.com/article/government-your-legal-right-redeem-your-money-market-account-has-been-denied'&gt;&lt;br/&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=668bbfc2-d12e-8786-b7b2-668739ef9db6' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-6889809232429839802?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/6889809232429839802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=6889809232429839802' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/6889809232429839802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/6889809232429839802'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2010/01/sec-votes-to-allow-money-market-funds.html' title='SEC votes to allow Money Market Funds to keep your money indefinitely'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-8074063557158995340</id><published>2010-01-20T21:20:00.001-06:00</published><updated>2010-01-20T21:21:23.703-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>[subversion]: How to revert a bad commit</title><content type='html'>&lt;p&gt;Sooner or later, you are going to have to &amp;quot;undo&amp;quot; a commit.&amp;#160; Maybe your coworker checked in buggy code before heading out the door for their vacation, or maybe you didn't have enough coffee yet.&amp;#160; Whatever the reason, sooner or later you will have to deal with this issue.&lt;/p&gt;  &lt;p&gt;Which leads us to the question: how do you undo or revert a bad commit? &lt;/p&gt;  &lt;p&gt;If you are barely fluent with subversion, you might opt for the brute force method:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;checkout the previous version, rename the files in question;&lt;/li&gt;    &lt;li&gt;checkout the latest revision;&lt;/li&gt;    &lt;li&gt;copy the older modified (renamed) files on top of the newer ones; &lt;/li&gt;    &lt;li&gt;and finally check in the newer copy.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Tedious.&amp;#160; Especially if there are many files in different directories.&amp;#160; &lt;/p&gt;  &lt;p&gt;There has to be a better way...&amp;#160; &lt;/p&gt;  &lt;p&gt;Well, there is.&amp;#160; You can easily merge your copy with the previous version and then commit the changes back -- with one command.&amp;#160; Here's how.&lt;/p&gt;  &lt;p&gt;First pick out the revisions you want to use.&amp;#160; List the revisions with the log command:&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; svn log --limit 5&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Next merge and then commit (replace the bracket text with your own):&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; svn merge -r [current version]:[previous version] [repository url]&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; svn commit -m &lt;span style="color: #006080"&gt;&amp;quot;Reverting and going back to previous version.&amp;quot;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Done.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-8074063557158995340?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/8074063557158995340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=8074063557158995340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/8074063557158995340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/8074063557158995340'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2010/01/subversion-how-to-revert-bad-commit.html' title='[subversion]: How to revert a bad commit'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-3292556338416271861</id><published>2010-01-13T14:20:00.001-06:00</published><updated>2010-01-13T14:20:59.783-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Announcements'/><title type='text'>2010 Holiday Schedule</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Happy belated New Year to everyone.  &lt;br/&gt;&lt;br/&gt;I sincerely hope everyone had a good year, although I suspect many of you happy to start a new year and leave 2009 behind. &lt;br/&gt;&lt;br/&gt;Looking forward, I will soon be announcing the hiring employee #2, new equipment, and our first product launch.  &lt;br/&gt;&lt;br/&gt;Additionally, I would like to announce our offices will be closed on the following dates:&lt;br/&gt;&lt;br/&gt;Monday, May 31, 2010 - Memorial Day&lt;br/&gt;Monday, July 5, 2010 - Independence Day (Observed)&lt;br/&gt;Monday, September 6, 2010 - Labor Day&lt;br/&gt;Thursday, November 25, 2010 - Thanksgiving&lt;br/&gt;Friday, November 26 - Day after Thanksgiving&lt;br/&gt;Friday, December 24, 2010 - Christmas Eve&lt;br/&gt;Monday, December 27, 2010 - Christmas Day (Observed)&lt;br/&gt;&lt;br/&gt;Good luck and best wishes in the New Year! &lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=f2e05ebe-4bc9-8547-936b-fed1b382df9d' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-3292556338416271861?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/3292556338416271861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=3292556338416271861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/3292556338416271861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/3292556338416271861'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2010/01/2010-holiday-schedule.html' title='2010 Holiday Schedule'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-8277587575549383928</id><published>2009-12-10T13:40:00.001-06:00</published><updated>2009-12-10T13:40:55.615-06:00</updated><title type='text'>Google Voice is not good with Indian accents.</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;div class='gc-message-message-display'&gt;                                      &lt;span class='gc-word-high' id='1-0'&gt;This morning I logged into Google Voice and started deleting old voice mail messages.  This was the Google interpretation of a telemarketer trying to sell me outsourcing services in India: &lt;br/&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span class='gc-word-high' id='1-0'&gt;Yes,&lt;/span&gt;   &lt;span class='gc-word-high' id='1-1'&gt;good&lt;/span&gt;   &lt;span class='gc-word-high' id='1-2'&gt;morning,&lt;/span&gt;   &lt;span class='gc-word-high' id='1-3'&gt;this&lt;/span&gt;   &lt;span class='gc-word-high' id='1-4'&gt;message&lt;/span&gt;   &lt;span class='gc-word-high' id='1-5'&gt;for&lt;/span&gt;   &lt;span class='gc-word-high' id='1-6'&gt;mister&lt;/span&gt;   &lt;span class='gc-word-high' id='1-7'&gt;stoner.&lt;/span&gt;   &lt;span class='gc-word-med2' id='1-8'&gt;I'm&lt;/span&gt;   &lt;span class='gc-word-med1' id='1-9'&gt;calling&lt;/span&gt;   &lt;span class='gc-word-med1' id='1-10'&gt;from&lt;/span&gt;   &lt;span class='gc-word-med1' id='1-11'&gt;sharp&lt;/span&gt;   &lt;span class='gc-word-med1' id='1-12'&gt;on&lt;/span&gt;   &lt;span class='gc-word-med1' id='1-13'&gt;purpose.&lt;/span&gt;&lt;span class='gc-word-med1' id='1-14'&gt;Possible&lt;/span&gt;   &lt;span class='gc-word-med2' id='1-15'&gt;of&lt;/span&gt;   &lt;span class='gc-word-med2' id='1-16'&gt;the&lt;/span&gt;   &lt;span class='gc-word-med2' id='1-17'&gt;time&lt;/span&gt;   &lt;span class='gc-word-high' id='1-18'&gt;and&lt;/span&gt;   &lt;span class='gc-word-med1' id='1-19'&gt;reason&lt;/span&gt;   &lt;span class='gc-word-med1' id='1-20'&gt;for&lt;/span&gt;   &lt;span class='gc-word-med1' id='1-21'&gt;discourse&lt;/span&gt;   &lt;span class='gc-word-med1' id='1-22'&gt;Kazakhstan&lt;/span&gt;   &lt;span class='gc-word-med1' id='1-23'&gt;a&lt;/span&gt;   &lt;span class='gc-word-med1' id='1-24'&gt;gross&lt;/span&gt;   &lt;span class='gc-word-med1' id='1-25'&gt;job&lt;/span&gt;   &lt;span class='gc-word-med1' id='1-26'&gt;is&lt;/span&gt;   &lt;span class='gc-word-med1' id='1-27'&gt;not&lt;/span&gt;   &lt;span class='gc-word-med1' id='1-28'&gt;suspenders&lt;/span&gt;&lt;span class='gc-word-med1' id='1-29'&gt;battles.&lt;/span&gt;   &lt;span class='gc-word-high' id='1-30'&gt;Could&lt;/span&gt;   &lt;span class='gc-word-high' id='1-31'&gt;you&lt;/span&gt;   &lt;span class='gc-word-high' id='1-32'&gt;please&lt;/span&gt;   &lt;span class='gc-word-high' id='1-33'&gt;give&lt;/span&gt;   &lt;span class='gc-word-high' id='1-34'&gt;us&lt;/span&gt;   &lt;span class='gc-word-high' id='1-35'&gt;a&lt;/span&gt;   &lt;span class='gc-word-high' id='1-36'&gt;call.&lt;/span&gt;   &lt;span class='gc-word-high' id='1-37'&gt;At&lt;/span&gt; (xxx) xxx-xxxx.     &lt;span class='gc-word-med1' id='1-39'&gt;Again,&lt;/span&gt;   &lt;span class='gc-word-med2' id='1-40'&gt;the&lt;/span&gt;   &lt;span class='gc-word-high' id='1-41'&gt;phone&lt;/span&gt;   &lt;span class='gc-word-high' id='1-42'&gt;number&lt;/span&gt;   &lt;span class='gc-word-med2' id='1-43'&gt;is&lt;/span&gt;&lt;a class='gc-message-mni' title='Call (305) 324-6262' href='javascript://'&gt;(XXX) XXX-XXXX&lt;/a&gt;.     &lt;span class='gc-word-med2' id='1-45'&gt;Thank&lt;/span&gt;   &lt;span class='gc-word-high' id='1-46'&gt;you.&lt;/span&gt;&lt;/blockquote&gt;                                             &lt;/div&gt;LOL.  &lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=04eb5f77-4a7f-8b14-8a11-94a749e48a87' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-8277587575549383928?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/8277587575549383928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=8277587575549383928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/8277587575549383928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/8277587575549383928'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/12/google-voice-is-not-good-with-indian.html' title='Google Voice is not good with Indian accents.'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-6842257649758213371</id><published>2009-11-13T00:13:00.001-06:00</published><updated>2009-11-13T00:13:01.854-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>[How-to:] Merging Git Repositories</title><content type='html'>&lt;p&gt;For a few months now, I have been slowly converting my subversion repositories into full fledged git repositories.&amp;#160; At first, I used git as a front end to various subversion repositories until I became convinced that git was stable and robust enough for my needs.&lt;/p&gt;  &lt;p&gt;However, before the conversion I had to answer some philosophical questions about how I wanted my files organized.&amp;#160; Should I have one or more large repositories, or dozens of smaller repositories?&amp;#160;&amp;#160; How should I organize the projects?&amp;#160; On a per client basis?&amp;#160; Categorically?&amp;#160; Topically? &lt;/p&gt;  &lt;p&gt;I currently have several subversion repositories based on broad topical categories, like &amp;quot;business&amp;quot;, &amp;quot;personal&amp;quot;, or &amp;quot;archive.&amp;quot;&amp;#160; Files were further categorized into more specialized categories until they drilled down to the final category.&amp;#160; As a benefit to this structure, I can checkout just the directories I need at the moment, make the changes, then delete my local checkout when I am finished. &lt;/p&gt;  &lt;p&gt;I could certainly go forward with this approach, and clone the repositories directly into one or more gargantuan git repositories.&amp;#160; But is this this the best way?&amp;#160; In my opinion it isn't, so I decided to break apart the large subversion repositories into smaller, topically organized git repositories. &lt;/p&gt;  &lt;p&gt;Further, from my experiments with working with very large repositories, when a git repository gets past 7GB, you start running into memory issues, primarily when cloning and packing the repository (if you are cloning an already packed repository, then you are fine).&amp;#160;&amp;#160; In the future, as more operating systems cross the 64-bit 4GB memory limitation this will be less of an issue.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Bring out your dead.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In GTD, you have a physical file labeled, &amp;quot;dead&amp;quot; where you put reference files that are no longer needed, but are just too important to throw away.&amp;#160; They are just dead space that await their fate.&amp;#160; At some interval, such as every year, you clean out the dead file and throw away or re-file. &lt;/p&gt;  &lt;p&gt;Likewise, I created a dead.git repository that I stuff client files (time sheets, invoices, quotes, contracts, etc), that I don't need to actively reference anymore -- but are still useful.&amp;#160; Once a year I will merge them into my archive, which I lovely named tomb.git. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Get it? tomb houses dead bodies... I'm so clever.&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Which brings me to merging.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I need to move the entire contents (with history) to another repository. &lt;/p&gt;  &lt;p&gt;I have two repositories: 1) tomb.git and 2) source_archive.git.&amp;#160; I want to merge the contents of source_archive.git into tomb.git. &lt;/p&gt;  &lt;p&gt;The process is relatively simple.&amp;#160; First, we fetch a copy of the master branch from the source archive repository into a newly created branch named &amp;quot;sourcemerge.&amp;quot;&amp;#160; Issuing a 'git branch' shows that the new branch has been created:&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; $ cd tomb.git&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; $ git fetch ../source_archive.git master:sourcemerge&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; From ../source-archive&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;  * [&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; branch]      master     -&amp;gt; sourcemerge&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; $ git branch&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; * master&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;   sourcemerge&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Next, we checkout out the newly created branch:&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; $ git checkout -f sourcemerge&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; Checking &lt;span style="color: #0000ff"&gt;out&lt;/span&gt; files: 100% (20975/20975), done.&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; Switched to branch &lt;span style="color: #006080"&gt;&amp;quot;sourcemerge&amp;quot;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now, everything should be there from the old repository.&amp;#160; You can check with gitk to see the history has been pulled in.&amp;#160; Next, we have to jump back to the master and merge:&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; $ git checkout -f master&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; Checking &lt;span style="color: #0000ff"&gt;out&lt;/span&gt; files: 100% (20975/20975), done.&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; Switched to branch &lt;span style="color: #006080"&gt;&amp;quot;master&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt; $ git merge sourcemerge&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;See?&amp;#160; It is dead simple.&amp;#160; You can now delete the temporary branch.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-6842257649758213371?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/6842257649758213371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=6842257649758213371' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/6842257649758213371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/6842257649758213371'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/11/how-to-merging-git-repositories.html' title='[How-to:] Merging Git Repositories'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-6181763431542964235</id><published>2009-10-18T14:26:00.001-05:00</published><updated>2009-10-18T14:26:02.803-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scams'/><title type='text'>US Bank ATM deposit + Double Hold = Major Headache</title><content type='html'>&lt;blockquote&gt;   &lt;p&gt;Usually, whenever I hear the anguished complaints of evil banks slamming people with onerous overdraft charges, I'm first to roll my eyes and say &lt;em&gt;you should be more responsible with your money&lt;/em&gt;.&amp;#160; After all, I have canceled most of my credit cards, paid off all of our debt, and am frugal.&amp;#160; &lt;em&gt;That would never happen to me.&lt;/em&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Last weekend, I deposited my monthly paycheck at the local US Bank branch-- as an ATM deposit.&amp;#160; This would turn out to be one of the biggest banking mistakes I have ever made.&amp;#160; It turned into a bitter life lesson and a week long headache.&amp;#160; If you are contemplating making a deposit at the ATM, don't do it. &lt;/p&gt;  &lt;p&gt;It wasn't until my debit card was denied (Tuesday) at a merchant that I got a hint that something was wrong.&amp;#160; The actual worlds the clerk used were: &amp;quot;&lt;em&gt;the bank told us not to honor your card.&lt;/em&gt;&amp;quot;&amp;#160; Embarrassed, I paid with cash and left. &lt;/p&gt;  &lt;p&gt;As I logged onto the bank's online portal, I was shocked to find out that my account was now negative, to the tune of over two thousand dollars.&amp;#160; Not only had the deposit been reversed, but &lt;strong&gt;an additional amount of money equal to the face amount of the check had been removed from my account&lt;/strong&gt;.&amp;#160; In banking parlance, a had a &lt;strong&gt;double hold &lt;/strong&gt;on my funds.&lt;/p&gt;  &lt;p&gt;No problem.&amp;#160; I would just call and have the hold removed from the account before any damage was done.&amp;#160; I fully expected that the issue would be resolved within an hour, based on my interactions with other national banks like Bank of America, Bank One (now Chase), and local banks that I have had dealings with.&amp;#160; Any other time I have had a problem with a bank hold, I've been able to get them removed immediately.&amp;#160; So I picked up the phone and began the adventure.&lt;/p&gt;  &lt;p&gt;My first call was to the local branch where I deposited the check.&amp;#160; &lt;/p&gt;  &lt;p&gt;Teller #1 told me that there was nothing she could do and that I should just call back in a few days.&amp;#160; I insisted on speaking to someone else.&amp;#160; She transferred me to Robert.&amp;#160; &lt;/p&gt;  &lt;p&gt;Robert calmly and nonchalantly explained that the deposited check must have been rejected by the ATM department, and that because of federal law that they had to put a hold on my account.&amp;#160; &amp;quot;They deal with a lot of check fraud,&amp;quot; he offered.&amp;#160; He also stated that they would mail it to me.&amp;#160; When I asked how long that would take, he said &amp;quot;...up to three weeks.&amp;quot;&amp;#160; I was dumbstruck.&amp;#160; As I recovered, I asked about the overdraft fees that were inevitable.&amp;#160; &amp;quot;We &lt;em&gt;might&lt;/em&gt; refund those overdraft fees.&amp;quot;&amp;#160;&amp;#160; He recommended calling back in a few days to get the overdrafts reversed.&lt;/p&gt;  &lt;p&gt;At that point I started to get mad.&amp;#160; For three weeks they are going to hold my paycheck and slap me with overdrafts that you &lt;em&gt;might refund&lt;/em&gt;?&amp;#160; WTF?&amp;#160; I don't think so.&amp;#160; I calmly (as I could) explained that we have two separate issues: 1) for whatever reason the bank has my check and I want it back as soon as possible, and 2) US Bank has placed a hold on the money that was in my account before the check was deposited.&amp;#160; Making the deposit has become punitive.&amp;#160; I want the hold removed immediately.&amp;#160; He suggested I call the 1 800 number to see if they could track down the check in the &amp;quot;ATM vault.&amp;quot;&lt;/p&gt;  &lt;p&gt;After several more phone calls, I was given the bad news: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The ATM deposit was rejected, and the check was going to be mailed to me (.. and according to the personal banker, it might take up to two weeks to reach me; in fact it took a total of six days); &lt;/li&gt;    &lt;li&gt;Before the ATM deposit was rejected, a hold equal to the face amount of the check was placed on my account. &lt;/li&gt;    &lt;li&gt;When the pending deposit was reversed, the bank's computers debited my pre-deposit money, placing a &amp;quot;double hold&amp;quot; on my money.&amp;#160;&amp;#160; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Frantically, I tried to get the pre-deposit balance restored.&amp;#160; Every person I spoke to at the branch, or the regional banking center flatly stated it was an issue due to:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The timing of the deposit and the Columbus day holiday; and/or&lt;/li&gt;    &lt;li&gt;&amp;quot;Federal law&amp;quot; requires it to be this way; and/or&lt;/li&gt;    &lt;li&gt;&amp;quot;they&amp;quot; are picky with ATM deposits because &amp;quot;there is a lot of check fraud in the ATMs.&amp;quot; (usually there is a pause here, almost as if they are waiting for me to say, &amp;quot;&lt;em&gt;you got me... boy you guys are good.&lt;/em&gt;&amp;quot;&amp;#160; WTF?). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Each one of the bankers was sympathetic, readily admitting that it was a bank error -- but there was nothing they could do to to fix it.&amp;#160; The holds would &amp;quot;drop off&amp;quot; my account in a day or so anyway, and at best they could only do a &amp;quot;memo&amp;quot; credit that wouldn't appear until the next day. &lt;/p&gt;  &lt;p&gt;The next day I login and saw that the hold was removed and my balance was positive once again.&amp;#160; I saw that a check I wrote to TCF bank was rejected and paid.&amp;#160; I called US Bank and spoke to Robert who told me, &amp;quot;the normally don't refund charges at other banks.&amp;quot;&amp;#160; Nice.&amp;#160; &lt;/p&gt;  &lt;p&gt;On Thursday, I logged in to see that debit card transactions that had been swiped up to five days earlier are now approved, each one kicking off a $19 overdraft -- seven in total, for a total sum of $133 in overdrafts.&amp;#160; All of the transactions were immediately processed when the account was negative.&amp;#160; I had to call back once again and talk to Robert who said they would take care of the overdraft charges. &lt;/p&gt;  &lt;p&gt;On Friday, I took the paycheck and went into the bank to cash it.&amp;#160; Not deposit it, but cash it.&amp;#160; The teller took the check and disappeared.&amp;#160; As I looked over, the teller was talking with Maria (one of the people I spoke to on the phone).&amp;#160; I was expecting her to come out an apologize.&amp;#160; No apology.&amp;#160; The teller just needed special approval to give me the cash.&lt;/p&gt;  &lt;p&gt;On Saturday, I went to TCF bank to inquire about the check I wrote out for cash to deposit in our new savings account.&amp;#160; No fee was charged, but an extended hold was placed on the money because US Bank denied the first attempt at satisfying the check.&amp;#160; In order to remove the hold, I had to drive back to US Bank and get the branch manager to write up a letter that basically said they paid the check and the funds are in the bank. &lt;/p&gt;  &lt;h3&gt;Post Mortem&lt;/h3&gt;  &lt;p&gt;So this morning I took a moment to recount this story and to reflect on what went wrong and what I could have done better to resolve it.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ATM deposit = check fraud.&lt;/strong&gt;&amp;#160; Unless you are committing check fraud, there is no reason to deposit a check in an ATM.&amp;#160; Every single bank representative associated ATM deposits with check fraud.&amp;#160; There are even classes on how to &lt;a href="http://www.rmahq.org/RMA/RMAUniverse/EventInfoandRegistration/coursedescription?EID=UREFA"&gt;reject ATM claims&lt;/a&gt;.&amp;#160; When I dropped the words &amp;quot;ATM deposit&amp;quot; from my introductory monologue (each time I talked to yet another person) they responded much more favorably. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ATM deposits can take months to resolve.&lt;/strong&gt;&amp;#160; Chase bank has a complaint form that mentions a timeframe of &lt;a href="https://www.chase.com/cm/shared/crb/file/document/atm_deposit_claim_form.pdf"&gt;120 days after money goes missing&lt;/a&gt;.&amp;#160; Amazing.&amp;#160; There are some interesting stories on the Internet that stretch over the course of weeks to resolve. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Banks are mercenary about overdrafts.&lt;/strong&gt;&amp;#160; Debit card transactions that took place over the scope of the week were suddenly all processed immediately when the account was negative.&amp;#160; Even though they were refunded, I have no doubt that the transactions are reordered and processed to the bank's advantage.&amp;#160; Even more surprisingly was that a hold on funds in the account would cause this financial carnage. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;You want to complain?&lt;/strong&gt;&amp;#160; Several times I asked for what regulator I should complain to.&amp;#160; Not once did any U.S. Bank employee give me a name, telephone number, or even the name of a regulator agency to complain to.&amp;#160; I would ask is it the office of the comptroller of currency?&amp;#160; Fed?&amp;#160; They would change the subject immediately.&amp;#160;&amp;#160; Answer: for national banks is the &lt;a href="http://www.occ.treas.gov/customer.htm"&gt;Comptroller of the Currency&lt;/a&gt; (and the state regulator body)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Figure out if the person has the authority to fix the problem. If not, find someone who does.&lt;/strong&gt;&amp;#160; After thinking about it, and reviewing my notes, it dawned on me that I got trapped in mired in a layer of customer service agents that don't have the power to correct the issue.&amp;#160; I should have immediately asked to speak with the branch manager and escalated from there.&amp;#160; I allowed the financial automatons to investigate and call back.&amp;#160; The end result was a call at 4:30 PM saying there was nothing else they could do.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Cash is king.&lt;/strong&gt;&amp;#160; Seriously, I now understand why people in the 1930's hated bankers and buried their money in coffee cans. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-6181763431542964235?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/6181763431542964235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=6181763431542964235' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/6181763431542964235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/6181763431542964235'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/10/us-bank-atm-deposit-double-hold-major.html' title='US Bank ATM deposit + Double Hold = Major Headache'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-4152811300008013085</id><published>2009-09-14T21:04:00.001-05:00</published><updated>2009-09-14T21:04:15.766-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Gentoo: Recovering from installing a bad kernel</title><content type='html'>&lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Arguably, Gentoo is the best Linux distribution available.&amp;#160; If you have patience and don't mind tweaking you can have a system that is built from the ground up with only the features you want with a minimum of what you don't.&amp;#160; However, for new users, it can be intimidating.&amp;#160; &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;The price of being able to build a system and kernel with exactly the features you want (my kernel is down to 3.1MB), there are some pain points.&amp;#160; The biggest headache is that after spending time configuring the kernel and you reboot only to get a kernel panic.&amp;#160; Here is how to get back to recompile the kernel.&amp;#160; &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Insert the CDROM and boot.&amp;#160; At the livecd prompt remount your drives (swap out sda with your device):&lt;/p&gt; &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;pre class="csharpcode"&gt;# swapon /dev/sda2
# mount /dev/sda3 /mnt/gentoo
# mount /dev/sda1 /mnt/gentoo/boot&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Next, mount the proc and dev mount points, and then change root:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev
# chroot /mnt/gentoo /bin/bash
# env-update
&amp;gt;&amp;gt; Regenerating /etc/ld.so.cache...
# source /etc/profile&lt;/pre&gt;

&lt;p&gt;Now you can work on getting the kernel. &lt;/p&gt;

&lt;pre class="csharpcode"&gt;# cd /usr/src/linux
# make menuconfig
make &amp;amp;&amp;amp; make modules_install
make install

(change the grub.conf file)
exit
umount /mnt/gentoo/proc /mnt/gentoo/dev /mnt/gentoo
reboot&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&lt;/p&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-4152811300008013085?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/4152811300008013085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=4152811300008013085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/4152811300008013085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/4152811300008013085'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/09/gentoo-recovering-from-installing-bad.html' title='Gentoo: Recovering from installing a bad kernel'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-3170853903710480</id><published>2009-09-08T23:45:00.001-05:00</published><updated>2009-09-08T23:45:58.311-05:00</updated><title type='text'>Stock Market Crash Ahead?</title><content type='html'>&lt;p&gt;CNN and the mainstream media are hyping the stock market.&amp;#160; Analysts and shills prophetically saying the economy is recovering. &lt;/p&gt;  &lt;p&gt;I don't see it.&amp;#160; I've been 100% in cash... and am still pessimistic. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Insiders are Selling&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In the last several weeks, corporate insiders (corporate executives and directors) have been heavily selling their company's stock, so much that it is attracting attention:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The last time insider selling was as high as it is now was in the period from late 2006 to late 2007. It was right after that insider-selling surge that the stock market began its long painful decline, says Charles Biderman, CEO of TrimTabs, an independent institutional research firm. (Source: &lt;a href="http://www.time.com/time/business/article/0,8599,1920635,00.html?iid=tsmodule"&gt;Time Magazine&lt;/a&gt;)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Credit Contraction Continues&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Today, &lt;a href="http://www.market-ticker.org/archives/1417-FLASH-Consumer-Credit-RECORD-Contraction.html"&gt;Karl Denniger&lt;/a&gt; pointed out that consumer credit has posted a record contraction, beating the Fed's estimates: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;*U.S. JULY CONSUMER CREDIT WAS FORECAST TO DROP BY $4 BILLION     &lt;br /&gt;*U.S. JULY CREDIT CARD, OTHER REVOLVING DEBT FALLS $6.1 BLN      &lt;br /&gt;*U.S. JULY NON-REVOLVING BORROWING FALLS RECORD $15.4 BILLION      &lt;br /&gt;*U.S. JUNE CREDIT FALLS $15.5 BLN, REVISED FROM $10.3 BLN DROP      &lt;br /&gt;*U.S. JULY CONSUMER CREDIT FALLS RECORD $21.6 BILLION, FED SAYS &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Banking Crisis Will Worsen&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Dan at The &lt;a href="http://thefundamentalview.blogspot.com/2009/09/banking-crisis-will-worsen.html"&gt;Fundamental View sums why the crisis will worsen&lt;/a&gt;: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Floyd Norris of the New York Times reported on Friday that 1 in 6 of all construction loans were in trouble.&amp;#160; He cited reports filed by banks with the FDIC at the end of June.&amp;#160; The figure is pegged at half a trillion dollars.&amp;#160; His piece titled &lt;a href="http://www.nytimes.com/2009/09/05/business/economy/05charts.html?ref=business"&gt;Construction Loans Falter, a Bad Omen for Banks&lt;/a&gt; provides some further insight into this&amp;#160; looming problem for the banks.&amp;#160; He states: &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Foresight estimates the biggest problems are in loans for condominium construction, with 38 percent of all construction loans troubled. Mr. Anderson says even that might be an understatement. He pointed to Corus Bank, a Chicago institution that specialized in condo loans. Its latest report shows that its capital is gone and that it expects losses on two-thirds of its construction loans. [emphasis mine] &lt;/p&gt;    &lt;p&gt;Let's re-cap [last] week&amp;#8217;s news. &lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Unemployment rises beyond the worst-case scenarios of the bank stress tests;       &lt;br /&gt;FDIC Chairperson Bair stated a couple days ago that commercial real estate will be the leader of the next wave of bank closures;&lt;/li&gt;      &lt;li&gt;1 in 6 construction loans pegged at half a trillion dollars are in jeopardy of defaulting&lt;/li&gt;      &lt;li&gt; Prime mortgages are now defaulting at higher rates;&lt;/li&gt;      &lt;li&gt; China is making noise about derivatives;&lt;/li&gt;      &lt;li&gt; Record food stamps being issued;&lt;/li&gt;      &lt;li&gt; Many families falling below the poverty line&lt;/li&gt;   &lt;/ul&gt; &lt;/blockquote&gt;  &lt;p&gt;So does this mean I should short every stock, or buy puts?&amp;#160; Not so fast.&amp;#160; Computer trading is responsible for near 70% of the market volume.&amp;#160; Without real buyers and sellers the stocks can be manipulated as the banks pump the stocks by selling between themselves until some sucker comes in... &lt;/p&gt;  &lt;p&gt;It will be an interesting Winter.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-3170853903710480?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/3170853903710480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=3170853903710480' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/3170853903710480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/3170853903710480'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/09/stock-market-crash-ahead.html' title='Stock Market Crash Ahead?'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-6465531245703856880</id><published>2009-09-05T12:52:00.001-05:00</published><updated>2009-09-05T12:56:27.500-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Nerdy'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='Consulting'/><title type='text'>[Perl] Search and Replace Copyright in Source Code</title><content type='html'>&lt;p&gt;Without getting into a debate over the legalities and application of copyright law, it was necessary to change the company name in the copyright statement in a large swath of code (the company had been purchased, then resold).&lt;/p&gt;  &lt;p&gt;For the record, let me say that programmers, IT administrators and managers generally make poor lawyers.&amp;#160; This probably has something to do with the total lack of legal education and training. &lt;/p&gt;  &lt;p&gt;This simple problem has a very elegant solution, which can be accomplished with a one line Perl program, executed from the command line.&lt;/p&gt;  &lt;p&gt;As I put forth the solution, it was dismissed. &lt;/p&gt;  &lt;p&gt;Over the next few weeks, the conversation turned.&amp;#160; Time was spent trying to develop an Ant script that would check and modify the code at build time.&amp;#160; Next, building an Eclipse plugin was investigated.&amp;#160; Finally, a developer had found an article on the Internet suggesting you should never, ever change the copyright text.&lt;/p&gt;  &lt;p&gt;I never heard anything about it after that. &lt;/p&gt;  &lt;p&gt;In any event, here is the solution.&amp;#160; The problem is that spread throughout thousands of files are these textual statements that need to be normalized:&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; Copyright &amp;#169; 1983 Umbrella Corporation; All rights reserved.&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; Copyright 1923 Umbrella Corporation; All rights reserved.&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; Copyright 2050 Umbrella Inc.; All rights reserved.&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; Copyright 1234 Umbrella LLC  &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The easiest way is to use Perl.&amp;#160; With Perl we can search and replace with a regular expression in a file.&amp;#160; For example, lets say I want to replace &amp;quot;hello&amp;quot; with &amp;quot;hello world&amp;quot; in myfile.java.&amp;#160; Easy:&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; Perl &amp;#8211;pi &amp;#8211;w &amp;#8211;e &amp;#8216;s/hello/Hello world/g&amp;#8217; myfile.java&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;We can easily search and replace text in one file, we just need to build a regular expression that will match the copyright statements, and replace it the &amp;quot;correct&amp;quot; one.&amp;#160; Also, we use find to find all of the files we need to do the search and replace and use xargs to format them for the command line.&lt;/p&gt;

&lt;p&gt;For example, to change the copyright year (&amp;quot;Copyright nnnn&amp;quot; to &amp;quot;Copyright 2009&amp;quot;) you would use:&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; perl -pi -w -e &lt;span style="color: #006080"&gt;'s/Copyright \d+/Copyright 2009/g;'&lt;/span&gt; \&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; `find -name &lt;span style="color: #006080"&gt;&amp;quot;*.java&amp;quot;&lt;/span&gt; | xargs`&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;To change the company name:&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; perl -pi -w -e &lt;span style="color: #006080"&gt;'s/Umbrella LLC/Umbrella Corporation/g'&lt;/span&gt; \&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; `find -name &lt;span style="color: #006080"&gt;&amp;quot;*.java&amp;quot;&lt;/span&gt; | xargs`&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Of course, these are just simple examples.&amp;#160; You will have to write a better regular expression and might have to take several stabs at it, but it isn't a three week issue.&amp;#160; &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-6465531245703856880?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/6465531245703856880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=6465531245703856880' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/6465531245703856880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/6465531245703856880'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/09/perl-search-and-replace-copyright-in.html' title='[Perl] Search and Replace Copyright in Source Code'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-3186176575031561425</id><published>2009-09-05T11:55:00.001-05:00</published><updated>2009-09-05T11:55:49.053-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><title type='text'>[subversion] Using patches to manage temporary coding changes</title><content type='html'>&lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;You are deep into making a fix in the code.&amp;#160; You haven't checked in your code for a while when your client says, &amp;quot;I need a quick fix... now.&amp;quot;&amp;#160; If you check in the incomplete code it would cause some breakage.&amp;#160; What do you do?&amp;#160; Checkout the project again into a fresh directory?&amp;#160; Create a branch for your code?&amp;#160; ... None of the above. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Git has a phenomenal feature that allows you to &amp;quot;stash&amp;quot; your current changes and recover them later.&amp;#160; It takes your uncommitted changes and saves the, and reverts the code back to the previous state.&amp;#160; This is extremely helpful when someone interrupts you in the middle of code changes, but you don't want to commit your work to the repository yet.&amp;#160; You can generate a patch, saving your temporary work, and revert/checkout the fresh code from the repository.&lt;/p&gt;  &lt;p&gt;You can replicate this functionality with subversion by generating and applying a patch files. &lt;/p&gt;  &lt;p&gt;Creating a patch is painless.&amp;#160; All you need to do is use the 'svn diff' command.&amp;#160; Just make sure you added any new files to svn before making the patch:&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; svn diff &amp;gt; mypatch.patch&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;It's a good thing to note that you can email your client/coworker with the patch and they can try out your fixes.&amp;#160; This is a good way to have fixes verified before checking them in.&amp;#160; &lt;/p&gt;

&lt;p&gt;Next, you can revert everything and start over:&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; svn revert -R&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Now you can do any quick and dirty fixes.&amp;#160; When you are done, simply apply the patch to bring your code back to the state where you left off:&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; patch -p0 &amp;lt; mypatch.patch&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Done.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-3186176575031561425?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/3186176575031561425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=3186176575031561425' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/3186176575031561425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/3186176575031561425'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/09/subversion-using-patches-to-manage.html' title='[subversion] Using patches to manage temporary coding changes'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-6228910095318844435</id><published>2009-09-01T00:47:00.001-05:00</published><updated>2009-09-01T00:47:06.019-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal Finance'/><title type='text'>We are now debt free...</title><content type='html'>&lt;p&gt;Today, I wrote the last check and licked the last stamp; I'm proud to announce that we are now 100% debt free.&lt;/p&gt;  &lt;p&gt;I had to make a choice: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;I could liquidate all of our savings and pay off all of our debt, and potentially risk a catastrophic personal financial meltdown if I lost my job (I am required to pay unemployment taxes, but I don't qualify for unemployment benefits because I'm self-employed); or&lt;/li&gt;    &lt;li&gt;I could pay the minimum payments and try to build a larger emergency fund, and only then should I work to slash our debt. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I decided to slash and burn.&amp;#160; With the exception a $1,000 emergency fund, I have liquidated and closed every account I could get my hands on and poured the money into paying off the debt.&lt;/p&gt;  &lt;p&gt;Next, we are going to be saving 3-6 months of expenses and start saving for a house.&lt;/p&gt;  &lt;p&gt;I was in a mood to celebrate.&amp;#160; I remembered that I had a $5 &amp;quot;cash register&amp;quot; certificate that was due to expire today.&amp;#160; My plan was simple: get some free stuff, Chinese take out and maybe a $1 RedBox DVD rental...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Cheaper is Not Always Better&lt;/strong&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_hrVPPOyDXVE/Spy1V6MoTzI/AAAAAAAAAKk/u0D0m9z8aK4/s1600-h/motivatora9584929cb7808de3505662388bdd087f4a3ed00%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="motivatora9584929cb7808de3505662388bdd087f4a3ed00" align="right" src="http://lh5.ggpht.com/_hrVPPOyDXVE/Spy1WaFDhKI/AAAAAAAAAKo/gI9n0rsbdD8/motivatora9584929cb7808de3505662388bdd087f4a3ed00_thumb%5B1%5D.jpg?imgmax=800" width="244" height="196" /&gt;&lt;/a&gt;... At &lt;a href="http://www.walgreens.com/default.jsp"&gt;Walgreen's pharmacy&lt;/a&gt;, I picked up a some Clubman Lilac Vegetal aftershave, which was marked down to $2.19 on clearance (from approximately $8).&amp;#160; &lt;/p&gt;  &lt;p&gt;Now, I know what you are thinking.&amp;#160; &lt;em&gt;Eight dollars for aftershave?&amp;#160; That is some expensive stuff&lt;/em&gt;...&amp;#160; Figuring in the $5 certificate, it was essentially &lt;em&gt;free&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;The question is, what does $2 aftershave smell like?&lt;/p&gt;  &lt;p&gt;After smelling the aftershave, I can honestly that free was too expensive.&amp;#160; It smelled like cat urine from a cat that has a bladder infection, after it was ravaged by a skunk.&amp;#160; Truly, it is a fragrance for people who hate themselves and everyone around them.&lt;/p&gt;  &lt;p&gt;I would package it up as a potential frugal Christmas gift, but I don't know anyone that I hate that much. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-6228910095318844435?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/6228910095318844435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=6228910095318844435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/6228910095318844435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/6228910095318844435'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/09/we-are-now-debt-free.html' title='We are now debt free...'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-1036934363529932036</id><published>2009-06-30T11:50:00.001-05:00</published><updated>2009-06-30T11:50:48.177-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>Screen Utility (and my .screenrc)</title><content type='html'>&lt;p&gt;Screen is a fantastic utility which is best described as a &lt;em&gt;terminal multiplexer&lt;/em&gt;.&amp;#160; It comes standard in most modern Unix-based operating systems (e.g. Linux, MacOS X, BSD).&amp;#160; Simply stated it is one of the most useful utilities I have discovered and is a powerful tool in the hands of a console warrior. &lt;/p&gt;  &lt;p&gt;In a nutshell: you can run any number of console-based applications within a single terminal.&amp;#160; I usually fire up one terminal and then ssh to various hosts.&amp;#160; But one of the best features is the ability to decouple the terminal emulator from the running programs.&amp;#160; This means you can log out or loose your session accidentally and you can come right back to where you are. &lt;/p&gt;  &lt;p&gt;This if fantastic for embedded development.&amp;#160; I ssh to a workstation (Linux) attached to the embedded console over a USB serial port.&amp;#160; This is running 24 hours a day monitoring the embedded system.&amp;#160; I ssh to the workstation and use screen to reattach to the running serial console. I wrote about this &lt;a href="http://www.agavemountain.com/2009/03/using-screen-utility-to-connect-to.html"&gt;HERE&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Basic screen commands&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Control-A Control-C will create a new session/shell.&lt;/p&gt;  &lt;p&gt;Control-A Control-n (where n is the session number, 0-n) will switch you to that shell. &lt;/p&gt;  &lt;p&gt;Control-A Control-D will detach. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;My .screenrc&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;The only draw back is that the standard .screenrc configuration file is blank which leaves you with no visual indication of whether or not screen is running. &lt;/p&gt;  &lt;p&gt;Here is the contents of my ~/.screenrc file which will setup a caption at the bottom of the terminal session which will tell you the host, time, and other session information. &lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; termcapinfo xterm|xterms|xs|rxvt ti@:te@&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; caption always &lt;span style="color: #006080"&gt;&amp;quot;%H %c | %x-w%{=}%n-%t%{-}w&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; shell -/bin/bash&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-1036934363529932036?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/1036934363529932036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=1036934363529932036' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/1036934363529932036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/1036934363529932036'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/06/screen-utility-and-my-screenrc.html' title='Screen Utility (and my .screenrc)'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-6648253622996129967</id><published>2009-06-30T00:31:00.001-05:00</published><updated>2009-06-30T00:31:11.002-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal Finance'/><title type='text'>Back to Zero.</title><content type='html'>&lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Whenever I tell anyone that I have liquidated our savings to pay off debt I get the same response: why?&amp;#160; I mean, in a risky recessionary environment why would you take accumulated savings and pay down unsecured debt?&amp;#160; To become debt free, that's why. &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;img align="right" src="http://www.demotivateus.com/posters/common-sense-demotivational-poster.jpg" width="252" height="202" /&gt;In April, I publicly declared that my financial goal was to &lt;a href="http://www.agavemountain.com/2009/04/my-financial-goal-for-2009-100-debt.html"&gt;become debt free this year&lt;/a&gt;, and wipe away the debt that we accumulated when my wife went back to get her second degree and thousands of dollars worth of diagnostic medical tests (only to find out that I am entirely 100% healthy).&amp;#160; &lt;/p&gt;  &lt;p&gt;On the plus side, after the X-rays, being shot up with radioactive iodine, and fed into a spinning, clacking CT scanner, I've decided that I will never set foot into a hospital again, unless it is to watch my child being born.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;So here I am, three months later, our medical debt is entirely paid off, we now own our vehicles free-and-clear, and I'm down to two credit cards.&amp;#160; And not a moment too soon. &lt;/p&gt;  &lt;p&gt;Crazy, huh?&amp;#160; Even financial guru &lt;a href="http://www.hulu.com/watch/19681/suze-orman"&gt;Suze Orman&lt;/a&gt; has shifted her financial advice to do exactly opposite of what I am trying to accomplish -- her advice now is to pay the minimum payments on all your credit cards and pile up cash, because of the uncertain future.&amp;#160; But soon people who follow her advice will be facing loan-shark interest rates, enhanced fees, and higher minimum payments. &lt;/p&gt;  &lt;p&gt;This week, I have received not one, but three letters from financial companies informing me that for a variety of reasons, my credit card rates are being increased.&amp;#160; Rate-jacking is now rampant and even &amp;quot;good&amp;quot; customers are getting slammed with arbitrary fees.&amp;#160; &lt;/p&gt;  &lt;p&gt;Two of my business cards were preemptively closed by their issuers; one was never activated and the other was my OfficeMax corporate card (HSBC closed them all).&amp;#160; I received a $15 coupon (off $50 purchase) from OfficeMax as a consolidation prize. &lt;/p&gt;  &lt;p&gt;Personally, I have bank fee fatigue; I have developed a permanent aversion to credit.&amp;#160; I'm in the process of closing every charge and credit card I can.&amp;#160;&amp;#160; Credit score be damned.&amp;#160; Never again.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Baby Steps&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;So, I'm three months into the process and our first ever budget was a disaster.&amp;#160; This was expected.&amp;#160; It takes a few&amp;#160; months to get enough practice to make a decent budget. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Step 0: &lt;/strong&gt;&lt;strong&gt;&lt;a href="http://www.hulu.com/watch/1389/saturday-night-live-dont-buy-stuff"&gt;Stop buying stuff you can't afford&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt;.&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;Check.&amp;#160; &lt;/em&gt;Before the recession, I had been shopping for a Cessna 172 and got pre-approved for a loan.&amp;#160; Now, I will have to save up enough to pay cash.&amp;#160; Someday...&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Step 1:&amp;#160; build up a $1,000 cash emergency reserve fund.&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;Check. &lt;/em&gt;This was easy since we already had some savings.&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Step 2: Aggressively pay off debt with the &amp;quot;debt snowball&amp;quot; method.&lt;/strong&gt;&amp;#160; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Step 2 involves listing your (non-mortgage) debts from smallest to largest, and aggressively paying each debt off in order.&amp;#160; I hate to admit it, but I was stunned when I added up all of our debts -- out of sight, out of mind as they say.&amp;#160; &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;I paid off and &lt;a href="http://www.agavemountain.com/2009/02/american-express-continues-to-slash.html"&gt;canceled my American Express ONE card&lt;/a&gt; and closed the attached savings account. &lt;/li&gt;    &lt;li&gt;I had one card because it offered the best foreign currency conversion rate (not any more, now they are charging a conversion fee plus a 3%).&amp;#160; They are also now charging foreign currency conversion fees on transactions handled &lt;em&gt;in U.S. currency and in the United States&lt;/em&gt; for foreign companies.&amp;#160; Paid off and canceled.&lt;/li&gt;    &lt;li&gt;Another gave two frequent flier miles per dollar.&amp;#160; Now the rate is 1 mile per dollar and they refused to waive the $85 annual fee.&amp;#160; I canceled my personal and business cards. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The goal is the pay off your debt as fast as possible:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;If you have stocks or savings, liquidate them and use that money to pay off the debt; and&lt;/li&gt;    &lt;li&gt;If you are making contributions for IRAs, 401ks, 529s, or other savings, you stop and use that money to pay off debt; and&lt;/li&gt;    &lt;li&gt;Find additional streams of income to help pay off the debts.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The first smallest debt gets paid first and all other debts get the minimum payment.&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Step 3: build up a 3-6 month emergency fund.&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This would be next. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Miscellaneous Financial Tips&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Quicken Online (free) sucks. It is without a doubt one of the worst financial web sites ever created.&amp;#160; It is a feature limited service (probably) designed to get you to purchase Intuit's other products.&amp;#160; However, after a few days it would not interface with my bank.&amp;#160; Now all the transactions are duplicated.&amp;#160; The balance appears right but the transactions below are all duplicated.&amp;#160; Void checks disappear from the system.&amp;#160; Seriously, use mint if you are looking for a free online service (and have no problems with divulging your intimate personal details to a company). &lt;/li&gt;    &lt;li&gt;My wife and I now share a single checkbook.&amp;#160; We used to have separate checkbooks, but not any longer.&amp;#160; It makes reconciling the accounts so much easier.&amp;#160; &lt;/li&gt;    &lt;li&gt;No more online statements.&amp;#160; Financial companies save tons of money by not sending you statements in the mail, but pass none of those savings on to you.&amp;#160; In fact, if you are anything like me, I'm willing to bet that you've lost one or more of those precious emails saying &amp;quot;your statement is ready,&amp;quot; and have gotten hit with a late charge.&amp;#160; I guess that is your bonus for &amp;quot;helping the environment.&amp;quot;&amp;#160; Been there, done that, got the T-shirt.&amp;#160; Not anymore, I always request a paper statement. &lt;/li&gt;    &lt;li&gt;I now pay bills the old fashioned way -- with a pen, checks, envelopes and stamps, usually on a Saturday morning.&amp;#160; It forces us to go over the bills deliberately and it is a painful enough that it helps renew our commitment to being debt (and bill) free as soon as possible.&lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-6648253622996129967?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/6648253622996129967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=6648253622996129967' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/6648253622996129967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/6648253622996129967'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/06/back-to-zero.html' title='Back to Zero.'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-1184383669460737606</id><published>2009-04-26T15:25:00.001-05:00</published><updated>2009-04-26T15:25:42.967-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Announcements'/><title type='text'>Spammers are forging e-mail to appear from this domain</title><content type='html'>&lt;p&gt;A spammer is sending spam with forged headers to appear as if the email originated from user accounts at this domain.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;As of three minutes ago, I am receiving bounced messages from a variety of e-mail addresses.&amp;#160; Looking at the bounced e-mail headers, these messages are originating from the following IP address: 122.46.104.49.&amp;#160; That IP address is located in Seoul, Republic of Korea (Powercomm ISP).&lt;/p&gt;  &lt;p&gt;Thankfully, the flood of e-mail bounces have stopped.&amp;#160; &lt;/p&gt;  &lt;p&gt;If you have received any of these e-mails, they did not originate from our servers, nor did they pass through our e-mail servers. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-1184383669460737606?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/1184383669460737606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=1184383669460737606' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/1184383669460737606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/1184383669460737606'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/04/spammers-are-forging-e-mail-to-appear.html' title='Spammers are forging e-mail to appear from this domain'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-4161399587430248261</id><published>2009-04-08T22:41:00.001-05:00</published><updated>2009-04-08T22:41:44.075-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac OS X'/><title type='text'>How to recursively delete files and directories (*.svn) with find and xargs</title><content type='html'>&lt;p&gt;Every once in a while, I want to delete some files from a set of directories.&amp;#160; Under windows you do a file search, select everything with CTRL-A and delete.&amp;#160; It is every bit as simple under Linux and OS X.&amp;#160; &lt;/p&gt;  &lt;p&gt;For example, let's say you want to tar up or merge directories that are checked out of a subversion repository.&amp;#160; If you just tar up the files, you will have extra copies of every single file making the tarball needlessly large.&amp;#160; Not good.&amp;#160; Or maybe you want to delete those .DS_Store files that OS X craps all over your hard drives. &lt;/p&gt;  &lt;p&gt;Here's how to do it.&amp;#160; Use the find command to find the .svn directories and pipe the output to the xargs utilities to merge the output into something the rm command can use.&amp;#160; This can be used to quickly delete other files patterns, but be very careful (for obvious reasons):&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; rm -rf `find . -name &lt;span style="color: #006080"&gt;&amp;quot;*.svn&amp;quot;&lt;/span&gt; | xargs`&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Simple. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-4161399587430248261?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/4161399587430248261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=4161399587430248261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/4161399587430248261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/4161399587430248261'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/04/how-to-recursively-delete-files-and.html' title='How to recursively delete files and directories (*.svn) with find and xargs'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-1457991179679863957</id><published>2009-04-06T23:52:00.001-05:00</published><updated>2009-04-06T23:52:48.579-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business'/><category scheme='http://www.blogger.com/atom/ns#' term='Personal Finance'/><title type='text'>My Financial Goal for 2009: 100% Debt Free (forever)</title><content type='html'>&lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Tonight while reconciling bank statements and pulling together the documents necessary to file my taxes, I decided to cut up my credit cards and work towards the weighty goal of being debt free, forever.&lt;/em&gt;&amp;#160; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I often listen to &lt;a href="http://www.daveramsey.com/"&gt;Dave Ramsey's&lt;/a&gt; podcast via iTunes. &lt;/p&gt;  &lt;p&gt;On the podcast (which is a syndication of his on-air radio show), &lt;a href="http://en.wikipedia.org/wiki/Dave_ramsey"&gt;Dave Ramsey&lt;/a&gt; espouses dead simple advice and counsels live callers who range for jubilant (newly debt free) to destitute and fearful. His roadmap to financial prosperity is shockingly simple: cut up your credit cards, budget, live within your means, ignore your FICO score, pay off your mortgage and save like &lt;a href="http://en.wikipedia.org/wiki/Scrooge_McDuck"&gt;Scrooge McDuck&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;At first, I found his plain talking advice to be fanatical, but it was the callers who were facing horrible financial woes that kept me listening -- the human financial train wrecks.&amp;#160; And they piled up every day, asking for advice on how to sort out their lives.&amp;#160; &lt;/p&gt;  &lt;p&gt;I listened to stunned and grieving widows ask for basic financial advice and children swindled out of their inheritance by step parents who left multigenerational family businesses to their children (cutting out the rightful and intended heirs).&amp;#160; I paid attention to the poor trusting souls who cosigned loans for their irresponsible children or friends, only to find themselves harassed by bill collectors.&amp;#160; I also snorted at the callers who bought houses and cars they could never afford, ran up massive credit card debt, and they asked if they should file bankruptcy.&amp;#160;&amp;#160; It was always there: job losses, death, unforeseen medical crises, divorce, greed, financial gluttony, avarice, family infighting, and the ultimate reckoning. &lt;/p&gt;  &lt;p&gt;And as I continued to listen, he started to make more sense. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Pay off your mortgage?&lt;/em&gt;&amp;#160; Bah, what about the tax deduction?&amp;#160; Oh... the calculator agrees with Ramsey.&amp;#160; You will save more money by paying off your mortgage in interest than you will by deducting the interest on your tax return.&amp;#160; Why are all the other financial &amp;quot;gurus&amp;quot; lying? &lt;/p&gt;  &lt;p&gt;&lt;em&gt;But what about my FICO score?&lt;/em&gt;&amp;#160; Since I'm a small business owner and derive all of my income from my Sub-S Corp, I will have to go through manual underwriting for a mortgage or major purchase anyway.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;But what about the credit card rewards?&lt;/em&gt;&amp;#160; I've already been burned by Capital One who modified their &amp;quot;no hassle&amp;quot; rewards program after I accrued the points, making the reward program nearly worthless.&amp;#160; American Express dutifully deposited my 1% cash rebate into my savings account, but then cut the savings interest rate, &lt;a href="http://www.agavemountain.com/2009/02/american-express-continues-to-slash.html"&gt;lowered my limit, and jacked up my interest rate&lt;/a&gt;.&amp;#160; CitiBank notified me this week that they are decreasing the mileage earned per dollar spent on my card, at the same time the airline is making it more difficult to redeem free tickets. &lt;/p&gt;  &lt;p&gt;And so on... until each of my objections and rationalizations were killed by rational thought over time.&amp;#160; Slowly, I came to realize that cash was the way to go, especially in these turbulent times.&lt;/p&gt;  &lt;p&gt;So, my financial goal for this year is simple -- through financial self depravation, pay off all of our debt and forever leave credit cards behind in my personal and business life. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-1457991179679863957?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/1457991179679863957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=1457991179679863957' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/1457991179679863957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/1457991179679863957'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/04/my-financial-goal-for-2009-100-debt.html' title='My Financial Goal for 2009: 100% Debt Free (forever)'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-4696819676402614985</id><published>2009-04-05T14:11:00.001-05:00</published><updated>2009-04-05T14:11:20.759-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone SDK'/><title type='text'>Apple and Stanford to offer free iPhone development courses</title><content type='html'>&lt;p&gt;It was announced this week that Stanford would offer a free developer course through iTunes U.&amp;#160; More specifically, Stanford will offer the video and course materials from Stanford's undergraduate iPhone app development course.&amp;#160; The course was created through a partnership between Apple and Stanford.&lt;/p&gt;  &lt;p&gt;The first video was uploaded to iTunes on Friday. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-4696819676402614985?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/4696819676402614985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=4696819676402614985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/4696819676402614985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/4696819676402614985'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/04/apple-and-stanford-to-offer-free-iphone.html' title='Apple and Stanford to offer free iPhone development courses'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-8818178907053246987</id><published>2009-03-31T06:17:00.001-05:00</published><updated>2009-03-31T06:17:38.173-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Announcements'/><title type='text'>16,906 miles, 4 cities, and 2 more passport stamps</title><content type='html'>&lt;p&gt;I can honestly say that it is good to be back home, especially after a tortuous eleven hour long-haul economy flight from Tokyo to Chicago.&amp;#160;&amp;#160; The end result of my last trip: 16,905 miles, 4 cities, and two new passport stamps.&amp;#160; I now have banked a total of 213,207 frequent flier miles and am on track to earn gold elite status on American Airlines this year (the &amp;quot;hard&amp;quot; way).&lt;/p&gt;  &lt;p&gt;This trip, I switched out my T-Mobile SIM for a foreign SIM and left the laptop at home.&amp;#160; For one week, I didn't even check my email and or voicemail.&amp;#160; It was relaxing to say the least.&lt;/p&gt;  &lt;p&gt;My iPod saved my sanity.&amp;#160; I assumed that since the Japan Airlines flight segments were in a 747-400, that the video/entertainment system was going to be horrible and it was.&amp;#160; If I had to watch James Bond Quantum of Solace one more times I would poke my eyes out with chopsticks.&amp;#160; &lt;/p&gt;  &lt;p&gt;Before I left, I purchased the first season of Stargate SG-1, a rental movie, and a book with the Amazon Kindle application.&amp;#160; I don't know if I would have made it without those distractions.&amp;#160; &lt;/p&gt;  &lt;p&gt;Dead tired tired, I crashed early and woke up at 1 am.&amp;#160; I've been up ever since trying working through my inbox, paying bills and responding to emails (I've jumped on the GTD bandwagon).&amp;#160; My shredder has been noisily chewing up the never ending stream of credit card solicitations, and mail.&amp;#160; &lt;/p&gt;  &lt;p&gt;I'm now ready to go back to work and will be in very early, a rarity for me.&amp;#160; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;My schedule was changed to include a stopover in Tokyo.&amp;#160; Next time, I'm going avoid a stop over in Tokyo and try to fly straight through.&amp;#160; Tokyo is just too expensive and too difficult to get around in without knowing some Japanese.&lt;/li&gt;    &lt;li&gt;The Hilton Narita (Tokyo) charges 11000 yen (online reservation) for a room.&amp;#160; Wait and reserve at the airport hotel desk, and the price is only 7900 yen.&amp;#160; Free shuttle to/from the airport.&amp;#160; A taxi to the local mall is expensive -- $20 each way.&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://boardingarea.com/blogs/loyaltytraveler/2009/03/19/american-airlines-double-eqm-through-june-15-2009/"&gt;American Airlines Double EQM (Elite Qualifying Miles).&lt;/a&gt;&amp;#160; Registration code: DBEQM.&amp;#160; Register and fly between March 18 through July 15, 2009 and elite qualifying miles are doubled.&amp;#160; Considering that I already have racked up 17k EQMs so far this year, this puts me on track to earn Gold elite status on American Airlines this year (without any mileage runs).&amp;#160; &lt;/li&gt;    &lt;li&gt;I bough an iPod tip for my iGo battery charger (consumes AA batteries).&amp;#160; The eleven hour flight required four AA batteries.&amp;#160; This is now part of my essential travel gear. &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-8818178907053246987?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/8818178907053246987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=8818178907053246987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/8818178907053246987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/8818178907053246987'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/03/16906-miles-4-cities-and-2-more.html' title='16,906 miles, 4 cities, and 2 more passport stamps'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3185026201834346457.post-2257639698500817554</id><published>2009-03-18T10:06:00.003-05:00</published><updated>2009-03-18T10:06:58.910-05:00</updated><title type='text'>Using screen utility to connect to serial devices</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Since I've discovered the screen utility, I've stopped using minicom to connect to attached embedded devices over serial.  This works under OS X and Linux. The real bonus is that I can disconnect from the remote workstation and reattach when I need to. &lt;br/&gt;&lt;br/&gt;For example, to connect to a serial device (over a USB doggle) at 155200 baud: &lt;br/&gt;&lt;br/&gt;$ screen /dev/ttyUSB0 115200&lt;br/&gt;&lt;br/&gt;Now if I disconnect from the workstation this is attached to I can reattach to the screen session:&lt;br/&gt;&lt;br/&gt;$ screen -list&lt;br/&gt;&lt;br/&gt;There is a screen on:&lt;br/&gt;        9514.pts-0.twc-joe      (Dettached)&lt;br/&gt;1 Socket in /var/run/screen/S-root.&lt;br/&gt;&lt;br/&gt;I can reattach to the session and resume where I left off:&lt;br/&gt;&lt;br/&gt;$ screen -r 9514.pts-0.twc-joe&lt;br/&gt;&lt;br/&gt;#/&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=0e5e6b0b-8b36-421d-a965-997393c6d2dc' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3185026201834346457-2257639698500817554?l=www.agavemountain.com%2Fblog.html' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/2257639698500817554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3185026201834346457&amp;postID=2257639698500817554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/2257639698500817554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3185026201834346457/posts/default/2257639698500817554'/><link rel='alternate' type='text/html' href='http://www.agavemountain.com/2009/03/using-screen-utility-to-connect-to.html' title='Using screen utility to connect to serial devices'/><author><name>Joe Turner</name><uri>http://www.blogger.com/profile/12587536207539849077</uri><email>joe@agavemountain.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13307673888220622955'/></author><thr:total>0</thr:total></entry></feed>