<?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'><id>tag:blogger.com,1999:blog-7616099</id><updated>2010-02-02T14:12:07.275-05:00</updated><title type='text'>Augur's Ramblings</title><subtitle type='html'>Semi-topical babble about Radio, Computers, Linux, Life, the Universe, and Everything.</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://webaugur.com/dave/blogger/atom.xml'/><author><name>Augur</name><uri>http://www.blogger.com/profile/15311831783736073550</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>100</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7616099.post-1281300533166606214</id><published>2010-02-02T14:09:00.002-05:00</published><updated>2010-02-02T14:12:07.283-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Notice...</title><content type='html'>I may not be posting anything for quite some time.  Google has decided to discontinue the service which this website utilizes.  You'll still be able to view existing content but I won't be able to add new content.  Hopefully I'll have time to move everything to a new system some day soon...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-1281300533166606214?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/1281300533166606214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/1281300533166606214'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2010/02/notice.html' title='Notice...'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-3456669851061684673</id><published>2010-01-10T01:20:00.003-05:00</published><updated>2010-01-10T01:37:17.444-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='php102'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>PHP 102: Installing Eclipse IDE for PHP on Ubuntu 9.04</title><content type='html'>&lt;object height="364" width="445"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-Aske9GBtzM&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0x2b405b&amp;amp;color2=0x6b8ab6&amp;amp;hd=1&amp;amp;border=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/-Aske9GBtzM&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0x2b405b&amp;amp;color2=0x6b8ab6&amp;amp;hd=1&amp;amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="364" width="445"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-3456669851061684673?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/3456669851061684673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/3456669851061684673'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2010/01/installing-eclipse-ide-for-php-on.html' title='PHP 102: Installing Eclipse IDE for PHP on Ubuntu 9.04'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-8932551583144303332</id><published>2010-01-09T03:58:00.004-05:00</published><updated>2010-01-18T12:16:44.958-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='php102'/><title type='text'>PHP 102: A Portable Apache+PHP Environment for Debian/Ubuntu</title><content type='html'>The very first thing you need to do to develop for PHP is to setup a development server with PHP installed, of course.  But maybe you're somewhat new to PHP and Apache is a huge, mind numbing universe of options.  All you really want is the ability to run PHP and map hostnames to code, right?  Almost always that's my goal, anyway.&lt;br /&gt;&lt;br /&gt;Well, I've done all the work for you.  Congrats!  Actually, I did it mostly for myself and I'm sharing it with you!  Yay for us!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;What You Need&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A computer with Ubuntu installed and working; I'm using 9.10 as I write this&lt;/li&gt;&lt;li&gt;An Internet Connection&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Scope&lt;/span&gt;&lt;br /&gt;We are going to setup a new, portable Apache server instance on Ubuntu 9.10 that listens on all of your computer's IP addresses and maps the hostnames being requested from that computer to directories on your hard disk.  This means that you can add websites without restarting or reconfiguring Apache in any way.  You just create a new directory and Apache figures it out for you.  Brilliant, no?&lt;br /&gt;&lt;br /&gt;What do I mean by portable?  I mean every configuration file, content and scripts you need to run that entire Apache instance is in one folder that is not part of the operating system.  You can copy that folder to any other Ubuntu/Debian box and execute the script to start it without any modifications of any kind.  All you need is to install Apache2, PHP5 and some other modules.  You aren't even using the init script that Ubuntu provides (because theirs sucks; it even says so in the comments).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Preliminary Setup&lt;/span&gt;&lt;br /&gt;You need to install Apache, PHP and xdebug and then configure things.  Open a terminal (Applications-&gt;Accessories-&gt;Terminal) and run these commands in this order:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;sudo apt-get install php5 libapache2-mod-php5 php5-xdebug  # Install Apache/PHP&lt;br /&gt;&lt;/li&gt;&lt;li&gt;sudo update-rc.d -f apache2 remove  # Disable Apache Service&lt;br /&gt;&lt;/li&gt;&lt;li&gt;sudo /etc/init.d/apache2 stop # Stop Apache Service&lt;br /&gt;&lt;/li&gt;&lt;li&gt;sudo a2enmod php5  # Enable PHP5&lt;br /&gt;&lt;/li&gt;&lt;li&gt;sudo a2enmod vhost_alias # Enable Virtualhost Aliasing&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Environment Preparation&lt;/span&gt;&lt;br /&gt;Now that we have installed, configured and disabled the system-wide Apache instance we need to extract my handy Apache environment and set it up.&lt;br /&gt;&lt;br /&gt;Open a terminal (Applications -&gt; Accessories -&gt; Terminal) and run the following commands:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;# Download the file to your home, extract it to /srv and name it something handy&lt;br /&gt;&lt;/li&gt;&lt;li&gt;cd&lt;/li&gt;&lt;li&gt;wget http://www.webaugur.com/wares/files/apache2-portable-latest.tar.gz&lt;/li&gt;&lt;li&gt;pushd /srv&lt;/li&gt;&lt;li&gt;sudo tar xvzf ~/apache2-portable-latest.tar.gz&lt;/li&gt;&lt;li&gt;sudo mv apache2-portable* development&lt;/li&gt;&lt;li&gt;pushd development&lt;/li&gt;&lt;li&gt;# Run this script as whichever user account is going to be developing code&lt;br /&gt;&lt;/li&gt;&lt;li&gt;bin/fixperms&lt;/li&gt;&lt;li&gt;# start the service&lt;br /&gt;&lt;/li&gt;&lt;li&gt;sudo etc/init.d/apache2 start&lt;/li&gt;&lt;li&gt;# Next we want to symlink it into the init system so it starts up at boot&lt;br /&gt;&lt;/li&gt;&lt;li&gt;sudo ln -s /srv/development/etc/init.d/apache2 /etc/rc2.d/S91apache2-development&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;You should now be able to open &lt;a href="http://localhost/"&gt;http://localhost/&lt;/a&gt; in your browser and see your phpinfo() output.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Adding Content&lt;/span&gt;&lt;br /&gt;I have prepopulated a simple test script into www/localhost/public/index.php so you can see if its working right away.&lt;br /&gt;&lt;br /&gt;The way it works is very simple.  If you point a hostname (either in DNS or in your /etc/hosts file) to any of your computer's IP addresses Apache will serve up content from www/hostname/public.  So, lets say you point www.ilikeapache.foo to your computer.  You will place your content into www/www.ilikeapache.foo/public for Apache to find it.  You can symlink many hostnames to a common directory as needed.  You might create a link called www/ilikeapache.foo that points to www.ilikeapache.foo, for example.  Thus serving up the same content for both host names.  Much less ugly than slaving over hot config files into the wee hours of the morning.  Simply amazing if you have hundreds of hosts pointing to one server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;What you Get&lt;/span&gt;&lt;br /&gt;Here's where you may get a little lost if you're new to all of this.  And I'll show you how to use some of this stuff in future articles.  So just hang tight if you're not sure how all of this works.&lt;br /&gt;&lt;br /&gt;By default, I have configured full on debugging of every kind.  So don't go putting this up on a high traffic site as-is.  I've done it and it'll run the box out of RAM and swap in under an hour and come crashing to the ground.&lt;br /&gt;&lt;br /&gt;Here's a breakdown of useful directories and files in the default config:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;var/log/apache2/access_log - Access log with hostname in the first column&lt;br /&gt;&lt;/li&gt;&lt;li&gt;var/log/apache2/error_log - Regular error log file&lt;/li&gt;&lt;li&gt;var/log/php.log - PHP Error Log  (tail -f var/log/php.log to see errors in realtime)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;var/log/xdebug - PHP xdebug stack traces and cachegrind (memory profiling) dumps&lt;/li&gt;&lt;li&gt;var/spool/mail/ - All outgoing email is intercepted (using bin/mailtrap as the "sendmail" program) and dropped here, one email per (timestamped) file.  Files are stored in a format that can be piped directly into sendmail for real delivery.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;lib/cgi-bin - If you create this directory it will be a common /cgi-bin for all hostnames on this Apache instance.&lt;/li&gt;&lt;li&gt;etc/apache2/include/php5.conf - a symlink that can pointed between debug and production PHP5 config files for quickly moving an instance between production and development.&lt;/li&gt;&lt;li&gt;etc/apache2/sites-templates/ - Examples of how to manually configure a hostname in this setup; both for HTTP and HTTPS.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;etc/apache2/run - PID and lock files for this Apache instance&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Why Oh Why&lt;/span&gt;&lt;br /&gt;Some questions and answers I expect you'll have.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Q: Why do I place content in a hostname/public subdirectory?&lt;br /&gt;A: You should never put your application code in a public directory.  Zend Framework uses the convention of having a directory named "public" that maps URLs into your application code.  I use ZF quite a lot and therefore followed this convention.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Q: Can I run more than one instance of Apache like this?&lt;br /&gt;A: Absolutely, this is why I wrote my own init script.  You can have as many Apache instances as you have IP addresses to give them.  Modify etc/apache2/sites-available/mass-vhost.conf to Listen on a specific IP address instead of all IPs.  You can have one instance on multiple IPs, as well.  Just make sure none of the instances are listening on all IPs (or each other's IPs) or you'll have port conflicts.&lt;/li&gt;&lt;li&gt;Q: How do I move my code and apache instance to another server?&lt;br /&gt;A: Run the setup and preparation steps above on the new host and instead of downloading my copy of the apache-portable just copy your entire directory containing your instance and content from /srv on the current machine to /srv on the new machine.  &lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Troubleshooting and Corrections&lt;/span&gt;&lt;br /&gt;If you run into troubles check the var/log/apache2/error_log for relevant problems.  If you get completely stumped maybe I missed a step.  Feel free to email me with a description of your problem and I'll try to take a look.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Background&lt;/span&gt;&lt;br /&gt;I've been using web servers since 1994.  I started using NCSA HTTPD and later switched to Apache as it become popular.  I was even once part of the first team to port Apache to Windows back in the late 90s.  Neat, huh?  (No, Windows sucks.  It was anything other than neat but it was a challenge.)  I've written modules in C and I even modified the indexer module to support XML back when the XML specs were first being drafted (but my changes admittedly weren't generic enough and someone else did a better job later on).  I've been using Apache since the beginning and I'm continually amazed at its capabilities.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-8932551583144303332?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/8932551583144303332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/8932551583144303332'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2010/01/php-102-portable-apachephp-environment.html' title='PHP 102: A Portable Apache+PHP Environment for Debian/Ubuntu'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-8044862059228887874</id><published>2009-11-28T00:04:00.002-05:00</published><updated>2009-11-28T00:20:46.756-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recipe'/><title type='text'>Pumpkin Pie</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webaugur.com/dave/blogger/uploaded_images/pumpkin-pie-773696.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 265px;" src="http://webaugur.com/dave/blogger/uploaded_images/pumpkin-pie-773694.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Utensils&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Stand mixer&lt;/li&gt;&lt;li&gt;Bowl scraper&lt;/li&gt;&lt;li&gt;Measuring cups&lt;/li&gt;&lt;li&gt;Measuring spoons&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Ingredients&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1 1/4 cups pumpkin puree, canned or fresh&lt;/li&gt;&lt;li&gt;3/4 cup sugar&lt;/li&gt;&lt;li&gt;1/2 teaspoon salt&lt;/li&gt;&lt;li&gt;1/4 teaspoon ground ginger&lt;/li&gt;&lt;li&gt;1 teaspoon ground cinnamon&lt;/li&gt;&lt;li&gt;1 teaspoon all-purpose flour&lt;/li&gt;&lt;li&gt;2 eggs, lightly beaten&lt;/li&gt;&lt;li&gt;1 cup evaporated milk, undiluted&lt;/li&gt;&lt;li&gt;2 tablespoons water&lt;/li&gt;&lt;li&gt;1/2 teaspoon vanilla extract&lt;/li&gt;&lt;li&gt;1 unbaked pastry shell (9-inch)&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Directions&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Combine pumpkin, sugar, salt, spices, and flour in your mixing bowl. Add eggs; mix well. Add evaporated milk, water, and vanilla; mix well. Pour into pastry-lined pie pan.  It is important that you do not mix the pie filling too much or it will split while baking. Bake at 400° for 15 minutes; reduce heat to 350° and bake about 35 minutes longer, or until center is set. Do not overcook the pie or it will split and crack while cooling.  If it &lt;span style="font-style: italic;"&gt;looks&lt;/span&gt; done its probably overcooked.&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Serving Suggestion&lt;/span&gt;&lt;br /&gt;Serve warm with whipped cream and vanilla bean ice cream or cold milk.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-8044862059228887874?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/8044862059228887874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/8044862059228887874'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2009/11/pumpkin-pie.html' title='Pumpkin Pie'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-5639252078666567516</id><published>2009-11-27T23:44:00.004-05:00</published><updated>2009-11-28T00:24:53.206-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recipe'/><title type='text'>Rum Cake</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webaugur.com/dave/blogger/uploaded_images/rum-cake-753973.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 296px;" src="http://webaugur.com/dave/blogger/uploaded_images/rum-cake-753971.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Utensils&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Stand Mixer&lt;/li&gt;&lt;li&gt;Bowl Scraper&lt;/li&gt;&lt;li&gt;Measuring cups&lt;/li&gt;&lt;li&gt;Measuring spoons&lt;/li&gt;&lt;li&gt;Nut Chopper&lt;/li&gt;&lt;li&gt;10 inch tube pan&lt;br /&gt;-or-&lt;br /&gt;12 cup bundt pan&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;&lt;span style="font-weight: bold;font-family:times new roman;font-size:180%;"  &gt;Cake ingredients&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt; 1 cup chopped pecans or walnuts&lt;/li&gt;&lt;li&gt; 18 oz yellow cake mix&lt;/li&gt;&lt;li&gt; 3¾ oz instant vanilla pudding mix&lt;/li&gt;&lt;li&gt; 4 eggs&lt;/li&gt;&lt;li&gt; ½ cup cold water&lt;/li&gt;&lt;li&gt; ½ cup wesson oil&lt;/li&gt;&lt;li&gt; ½ cup Bacardi Select dark rum (80 proof)&lt;/li&gt;&lt;/ul&gt;&lt;pre  style="font-weight: bold;font-family:times new roman;"&gt;&lt;span style="font-size:180%;"&gt;Glaze Ingredients&lt;/span&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li  style="font-family:verdana;"&gt;&lt;span style="font-size:100%;"&gt;¼ &lt;/span&gt;&lt;span style="font-size:100%;"&gt;cup butter&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt; 1 cup granulated sugar&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;½ cup Bacardi dark rum (80 proof)&lt;/span&gt;&lt;/li&gt;&lt;li  style="font-family:times new roman;"&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;¼ cup water&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Cake Directions&lt;/span&gt;&lt;br /&gt;  Preheat oven to 325° F.&lt;br /&gt;  Grease and flour 10 inch tube or 12 cup bundt pan.&lt;br /&gt;  Sprinkle chopped nuts over bottom of pan.&lt;br /&gt;  Beat all cake ingredients together until batter is smooth and silky.&lt;br /&gt;  Pour cake batter over nuts.&lt;br /&gt;  Bake cake for 1 hour.&lt;br /&gt;  Cool then invert on a plate.&lt;br /&gt;  Prick top and sides with a fork to allow cake to absorb the glaze.&lt;br /&gt;  Spoon glaze mixture over the top and sides of the cake until all&lt;br /&gt;  of the glaze is absorbed into the cake.&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Glaze Directions&lt;/span&gt;&lt;br /&gt;  Melt butter in a pan and slowly stir in the water and sugar.&lt;br /&gt;  Boil sugar and water mixture for 5 minutes stirring constantly.&lt;br /&gt;  Remove from heat and stir in rum.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-5639252078666567516?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/5639252078666567516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/5639252078666567516'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2009/11/rum-cake.html' title='Rum Cake'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-168141234055996582</id><published>2009-11-27T21:38:00.003-05:00</published><updated>2009-11-27T23:39:45.377-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recipe'/><title type='text'>Baked Pineapple BBQ Chicken</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webaugur.com/dave/blogger/uploaded_images/pineapple-bbq-chicken-tenders-787273.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 263px;" src="http://webaugur.com/dave/blogger/uploaded_images/pineapple-bbq-chicken-tenders-787261.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Utensils&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;baking dish&lt;/li&gt;&lt;li&gt;knife&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Ingredients&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Frozen chicken tenders or breasts&lt;/li&gt;&lt;li&gt;1 can of pineapple chunks or rings in juice (not syrup)&lt;/li&gt;&lt;li&gt;Bell pepper&lt;br /&gt;-or-&lt;br /&gt;Frozen julienne cut mixed bell peppers&lt;/li&gt;&lt;li&gt;1 small onion&lt;/li&gt;&lt;li&gt;BBQ sauce (see: &lt;a href="http://webaugur.com/dave/blogger/2009/11/poor-mans-barbecue-sauce.html"&gt;Poor Man's Barbecue Sauce&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Directions&lt;/span&gt;&lt;br /&gt;Preheat oven to 350° F.  Arrange diced onion and julienne cut bell peppers into a single layer on the bottom of your baking dish.  Pour a few ounces of the pineapple juice from the can into the baking dish.  Arrange your chicken into a single layer on top of the peppers and onions.  Place the pineapple around the chicken.  Pour the barbecue sauce over everything.  Bake for 90 minutes (or until the chicken is thoroughly cooked) at 350° F.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-168141234055996582?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/168141234055996582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/168141234055996582'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2009/11/baked-pineapple-bbq-chicken.html' title='Baked Pineapple BBQ Chicken'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-1372238036691352886</id><published>2009-11-27T21:05:00.003-05:00</published><updated>2009-11-27T21:34:49.038-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recipe'/><title type='text'>Poor Man's Barbecue Sauce</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webaugur.com/dave/blogger/uploaded_images/poor-man-bbq-sauce-760161.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 249px;" src="http://webaugur.com/dave/blogger/uploaded_images/poor-man-bbq-sauce-760159.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Utensils&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Spoon&lt;/li&gt;&lt;li&gt;Bowl&lt;/li&gt;&lt;li&gt;Sauce Pan&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Ingredients&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;2 cups ketchup&lt;/li&gt;&lt;li&gt;½ cup yellow mustard&lt;/li&gt;&lt;li&gt;¼ cup worchestershire sauce&lt;/li&gt;&lt;li&gt;1 cup dark brown sugar&lt;/li&gt;&lt;li&gt;1 teaspoon kosher salt&lt;/li&gt;&lt;li&gt;1 tablespoon chili powder (optional)&lt;/li&gt;&lt;li&gt;1 tablespoon paprika&lt;/li&gt;&lt;li&gt;1 teaspoon ground black pepper&lt;/li&gt;&lt;li&gt;1 teaspoon lemon juice&lt;br /&gt;-or-&lt;br /&gt;1 teaspoon pineapple juice&lt;/li&gt;&lt;li&gt;1 teaspoon apple cider vinegar&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Stove Top Directions&lt;/span&gt;&lt;br /&gt;I make the sauce on the stove if I plan to use it on cooked food.&lt;br /&gt;&lt;br /&gt;Combine all ingredients into the sauce pan and mix well breaking up any clumps of sugar.  Heat mixture until it just begins to boil.  Reduce the heat slightly and continue cooking the sauce until it thickens; stirring frequently.  Once the sauce reaches your desired thickness its ready to use!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Microwave Directions&lt;/span&gt;&lt;br /&gt;I often use the microwave if I intend to use the sauce for basting.  You may not want the sauce to be very thick if you intend to cook it further.  You mainly just want the sugars to dissolve.&lt;br /&gt;&lt;br /&gt;Combine all ingredients into a microwave safe bowl and mix well breaking up any clumps of sugar.  Heat the mixture until it boils (about 2 minutes).  Remove the sauce and stir it well.  Continue heating the sauce at 50% power until it reaches the desired thickness; stirring frequently. &lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Serving Suggestions&lt;/span&gt;&lt;br /&gt;Goes well with chicken or pork!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-1372238036691352886?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/1372238036691352886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/1372238036691352886'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2009/11/poor-mans-barbecue-sauce.html' title='Poor Man&apos;s Barbecue Sauce'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-4756414095848203300</id><published>2009-11-23T14:19:00.011-05:00</published><updated>2009-11-23T15:31:07.052-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='php102'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP 102: Whitespace Matters!</title><content type='html'>Lets start at the beginning.  Lets start with creating a blank PHP script.  What's one of the most important things to remember when creating a new PHP script?  I'll tell ya: Whitespace Matters!&lt;br /&gt;&lt;br /&gt;You must keep track of your whitespace in PHP scripts.  Why?  HTTP headers cannot be set if you have already "printed" any characters.  Stray spaces before and after  segments will, among other things, prevent you from setting HTTP headers (e.g. session cookies, redirects, and so on).&lt;br /&gt;&lt;br /&gt;This is something I run into over and over and over and over in modifying carelessly written code.  Sometimes this is the work of a well intentioned developer trying to make code "more readable". Worse, this is a problem you won't catch until its too late.  You can code for months or years on a project and never &lt;span style="font-style: italic;"&gt;notice&lt;/span&gt; any problems.  Until one day everything explodes for no obvious reason.  There are huge, massive projects out there that still haven't completely learned this lesson.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Opening Demarcation&lt;/span&gt;&lt;br /&gt;If your script contains only PHP code then it must begin with &amp;lt;?php at the very beginning of the file.  No spaces.  No new lines.  &amp;lt;?php should be the very first characters in your new file.  Don't use asptags &amp;lt;%, don't use shorttags &amp;lt;? or any other cutesy business.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Closing &lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Demarcation&lt;/span&gt;&lt;br /&gt;If your script contains only code and no embedded HTML markup then it &lt;span style="font-style: italic;"&gt;must&lt;/span&gt; &lt;span style="font-style: italic;"&gt;never&lt;/span&gt; include a ?&amp;gt; closing tag.  Never.  Ever.  Yes, of course it'll work.  Don't do it.  Omitting the closing ?&amp;gt; ensures that all trailing whitespace will be in a code segment and not your output buffer.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Good Example&lt;/span&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;function helloWorld(){&lt;br /&gt;  return 'Hello World!';&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;echo helloWorld();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Bad Example&lt;/span&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;function helloWorld(){&lt;br /&gt;  return 'Hello World!';&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;echo helloWorld();&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-4756414095848203300?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/4756414095848203300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/4756414095848203300'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2009/11/php-102-whitespace-matters.html' title='PHP 102: Whitespace Matters!'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-138108324223189995</id><published>2009-09-27T15:23:00.003-04:00</published><updated>2009-09-27T15:58:22.833-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recipe'/><title type='text'>Veggie Tacos</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webaugur.com/dave/blogger/uploaded_images/img_1597-795153.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 213px;" src="http://webaugur.com/dave/blogger/uploaded_images/img_1597-794757.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Utensils&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;measuring cups&lt;/li&gt;&lt;li&gt;knife&lt;/li&gt;&lt;li&gt;skillet&lt;/li&gt;&lt;li&gt;spatula&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Ingredients&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;⅓ cup vegetable oil&lt;/li&gt;&lt;li&gt;pinch kosher salt&lt;br /&gt;&lt;/li&gt;&lt;li&gt;1 cup chopped onions&lt;br /&gt;&lt;/li&gt;&lt;li&gt;⅓ red bell pepper&lt;br /&gt;⅓ yellow bell pepper&lt;br /&gt;⅓ orange bell pepper&lt;br /&gt;               -or-&lt;br /&gt;1 large red bell pepper&lt;br /&gt;&lt;/li&gt;&lt;li&gt;(optional, to taste) Sliced Jalapeños, pickled or fresh (sweet pickled are great)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;6 ounces &lt;a href="http://www.morningstarfarms.com/product_detail.aspx?id=324"&gt;Morning Star Farms Griller Recipe Crumbles&lt;/a&gt;&lt;/li&gt;&lt;li&gt;1 tablespoon chili powder (2 tablespoons if no jalapeños)&lt;/li&gt;&lt;li&gt;1 cup brown rice&lt;/li&gt;&lt;li&gt;1 cup water&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Directions&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Heat up skillet to medium-high and add oil and salt.  Allow oil to heat thoroughly.&lt;/li&gt;&lt;li&gt;Cook onions in hot oil until translucent but don't allow them to caramelize.&lt;/li&gt;&lt;li&gt;Add bell peppers and caramelize onions and peppers.&lt;/li&gt;&lt;li&gt;Add jalapeños and Morning Star crumbles&lt;/li&gt;&lt;li&gt;Thoroughly cook the crumbles.&lt;/li&gt;&lt;li&gt;Add chili powder, rice and water. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Turn temperature down to medium.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Cover and allow rice to absorb the water (5-10 minutes).&lt;/li&gt;&lt;li&gt;Uncover and turn heat up to high and cook until there is no remaining water allowing the rice and other ingredients to brown slightly.&lt;/li&gt;&lt;li&gt;Turn off the heat and enjoy!&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Serving Suggestions&lt;/span&gt;&lt;br /&gt;Heat fresh corn tortillas (made from masa harina not cattle feed) in an iron skillet until they just bubble.  (This takes practice if you've never done it.)  My preference is to then take two cooked tortillas and "glue" them together slightly offset using a bit of queso blanco.   Makes for a slightly larger and more robust taco.  Fold the tortilla(s) and fill with vegetarian beans (no lard), the filling mix we just made and fresh veggies.  You may want to include some shredded cheese.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-138108324223189995?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/138108324223189995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/138108324223189995'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2009/09/veggie-tacos.html' title='Veggie Tacos'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-3211206361777722457</id><published>2009-09-19T11:53:00.007-04:00</published><updated>2009-09-19T12:35:04.258-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='malware'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Fake Windows Antivirus Scams</title><content type='html'>Seems like any time you search for Facebook these days one of the top results sends you to a &lt;span style="font-weight: bold;"&gt;fake anti-malware&lt;/span&gt; website trying to &lt;span style="font-weight: bold;"&gt;trick you to install &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;actual&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; malware&lt;/span&gt;. I suspect it looks pretty convincing to those people using Windows PCs. However, I'm running &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu 9.04&lt;/a&gt; on all of my computers rather than Windows.  Ubuntu is a full &lt;a href="http://en.wikipedia.org/wiki/Unix-like"&gt;UNIX-like operating system&lt;/a&gt; similar to &lt;a href="http://en.wikipedia.org/wiki/Mac_OS_X"&gt;MacOS X&lt;/a&gt; but based on &lt;a href="http://en.wikipedia.org/wiki/Linux"&gt;Linux&lt;/a&gt; instead of Steve Jobs ego.  So these things just look ridiculous to m&lt;span style="font-size:100%;"&gt;e&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  My computers look absolutely nothing like a Windows desktop.&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Fake Warning&lt;/span&gt;&lt;br /&gt;Oh dear, my system must be filled with viruses!  NO!  Oh, wait, right, maybe &lt;span style="font-weight: bold;"&gt;they are lying to me&lt;/span&gt;.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webaugur.com/dave/blogger/uploaded_images/winprot1-770264.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 192px;" src="http://webaugur.com/dave/blogger/uploaded_images/winprot1-770258.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;Fake My Computer Screen&lt;/span&gt;&lt;br /&gt;So, the first thing it does is show you something that looks like the &lt;a href="http://en.wikipedia.org/wiki/Windows_Explorer"&gt;Windows My Computer &lt;/a&gt;screen.  This sticks out like a sore thumb on a non-Windows computer, as you can see.  It has information (IP address, your city, etc) plastered about that claims to be personal information.  Well, there's nothing personal about the info its showing.  It doesn't even bother to try to show you a real view of your own computer.  It just makes everything up.  Close enough to scare most people, I guess.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webaugur.com/dave/blogger/uploaded_images/winprot2-770354.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 192px;" src="http://webaugur.com/dave/blogger/uploaded_images/winprot2-770349.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Fake Infection Detection&lt;/span&gt;&lt;br /&gt;Oh my goodness, it says my computer remains infected despite their best efforts.  I had better let them heal my computer.  Benny Hinn would be proud.  Now, where did I put my electrified microphone and rubber floor mat...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webaugur.com/dave/blogger/uploaded_images/winprot3-721164.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 192px;" src="http://webaugur.com/dave/blogger/uploaded_images/winprot3-721158.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Fake Virus List&lt;/span&gt;&lt;br /&gt;Wow, look at all of those things that Windows security detected.  Wait, Windows security?  On a &lt;a href="http://en.wikipedia.org/wiki/Unix-like"&gt;UNIX system&lt;/a&gt;?  Umm.  I must have let those mushrooms sit in the fridge a little too long.  I'm starting to see things.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webaugur.com/dave/blogger/uploaded_images/winprot4-721261.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 192px;" src="http://webaugur.com/dave/blogger/uploaded_images/winprot4-721255.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;The Real Threat&lt;/span&gt;&lt;br /&gt;Oh, now lookee here.  It wants me to run this handy "removal" tool.  How very nice of it.  My system is offering to run it with &lt;a href="http://www.winehq.org/"&gt;Wine, a Windows program loader for UNIX systems.&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webaugur.com/dave/blogger/uploaded_images/winprot5-799167.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 192px;" src="http://webaugur.com/dave/blogger/uploaded_images/winprot5-799161.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Moral&lt;/span&gt;&lt;br /&gt;Don't run programs that you didn't ask for.  Don't believe what everyone tells you.  Doubly so on the web.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-3211206361777722457?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/3211206361777722457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/3211206361777722457'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2009/09/fake-windows-antivirus-scams.html' title='Fake Windows Antivirus Scams'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-2930279351206672223</id><published>2009-09-10T17:54:00.003-04:00</published><updated>2009-09-10T18:30:19.507-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recipe'/><title type='text'>Crock Pot Barbecue Chicken</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webaugur.com/dave/blogger/uploaded_images/crockpotbbqchicken-773671.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 213px;" src="http://webaugur.com/dave/blogger/uploaded_images/crockpotbbqchicken-773612.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webaugur.com/dave/blogger/uploaded_images/crockpotbbqchicken-773671.jpg"&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Utensils&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Measuring cups&lt;/li&gt;&lt;li&gt;Measuring spoons&lt;/li&gt;&lt;li&gt;Small mixing bowl&lt;/li&gt;&lt;li&gt;Crock pot&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Basic&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt; Ingredients&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1 medium onion, chopped&lt;/li&gt;&lt;li&gt;1½  teaspoons minced garlic&lt;/li&gt;&lt;li&gt;3lbs skinless chicken (boneless if you prefer)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Sauce Ingredients&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;⅔ cup ketchup&lt;/li&gt;&lt;li&gt;⅓ cup packed brown sugar&lt;/li&gt;&lt;li&gt;1 tablespoon chili powder&lt;/li&gt;&lt;li&gt;1 tablespoon lemon juice&lt;/li&gt;&lt;li&gt;1 teaspoon dried basil&lt;/li&gt;&lt;li&gt;½ teaspoon salt&lt;/li&gt;&lt;li&gt;¼ teaspoon pepper&lt;/li&gt;&lt;li&gt;⅛ teaspoon hot sauce&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Thickener Ingredients&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;2 tablespoons cornstarch&lt;/li&gt;&lt;li&gt;3 tablespoons cold water&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Directions&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Basic: place onion and garlic in the bottom of the crock pot and top with chicken.  &lt;/li&gt;&lt;li&gt;Sauce: combine all ingredients in a mixing bowl and pour over the chicken.&lt;/li&gt;&lt;li&gt;Cook on low for 5-6 hours.  &lt;/li&gt;&lt;li&gt;Remove only the chicken from the crock pot.&lt;/li&gt;&lt;li&gt;Thickener: Mix corn starch and water until smooth.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pour thickener mixture into the crock pot and stir until thoroughly mixed.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Cook on high for 15 minutes or until thick.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Serving Suggestions&lt;/span&gt;&lt;br /&gt;Serve chicken over a bed of rice with sauce poured over the top.&lt;br /&gt;&lt;br /&gt;Serve chicken with mashed potatoes and corn or beans.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-2930279351206672223?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/2930279351206672223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/2930279351206672223'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2009/09/crock-pot-barbecue-chicken.html' title='Crock Pot Barbecue Chicken'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-68803797982038256</id><published>2009-08-18T00:44:00.007-04:00</published><updated>2009-08-19T00:06:41.470-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recipe'/><title type='text'>Whole Wheat Bread</title><content type='html'>&lt;a href="http://webaugur.com/dave/blogger/uploaded_images/whole_wheat-795291.jpg"&gt;&lt;img src="http://webaugur.com/dave/blogger/uploaded_images/whole_wheat-795190.jpg" alt="" /&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Utensils&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Measuring cups&lt;/li&gt;&lt;li&gt;Measuring spoons&lt;/li&gt;&lt;li&gt;Small mixer with dough hooks&lt;br /&gt;- or -&lt;br /&gt;Bread machine&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Cooling rack&lt;/li&gt;&lt;li&gt;Small bowl&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pastry brush&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Dough Ingredients&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1 ½ cup warm water&lt;/li&gt;&lt;li&gt;1 tablespoon vegetable oil&lt;/li&gt;&lt;li&gt;3 tablespoons pure honey&lt;/li&gt;&lt;li&gt;½ teaspoon salt&lt;br /&gt;&lt;/li&gt;&lt;li&gt;1 cup whole wheat flour&lt;/li&gt;&lt;li&gt;1 ¼ cup whole wheat pastry flour&lt;/li&gt;&lt;li&gt;1 ¼ cup bread flour (white flour)&lt;/li&gt;&lt;li&gt;⅓ cup wheat gluten flour&lt;/li&gt;&lt;li&gt;2 teaspoons active dry yeast (1 packet red star)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Crust Ingredients&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;⅓ cup melted salted butter&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Mixing Directions&lt;/span&gt;&lt;br /&gt;Place all of the dough ingredients into your mixer or bread machine in the order given.  When adding the yeast make a dimple in the center of the flour and pour the yeast into it.  This prevents the yeast from contacting the water or salt until mixing begins.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Baking Directions&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Oven&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Once the dough has been kneaded and allowed to rise for an hour remove the dough from the mixer bowl or bread machine.  Place onto a lightly floured surface and gently flatten the dough to a bit less than an inch thick.    Shape the dough so it fits your bread pan leaving the top smooth.  Cover the pan loosely with a clean kitchen towel and allow the dough to rise for about one hour.  The top of the dough should have risen to about 1 inch above the top of the pan.&lt;br /&gt;&lt;br /&gt;Bake at 375 F until bread internal temperature reaches 325 F.  For darker crust bake at 400 F but watch it closely.  This should take 25-30 minutes.  If you weren't paying attention and the crust seems burnt don't worry quite yet.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Bread Machine&lt;/span&gt;&lt;br /&gt;Select an appropriate whole grain or french bread program, select crust color and press start.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Finishing the crust&lt;/span&gt;&lt;br /&gt;While the bread is still hot remove it from the bread pan and place on a wire cooling rack.   Melt the salted butter in a small bowl and use the pastry brush to cover the entire loaf of bread in butter.  You won't need more than one coating of butter.  Allow the bread to cool to just above room temperature and place in an air tight container or sealed bag.  After a few hours in a sealed container the crust of the bread will soften.  If your crust seemed burnt then you may find the butter has saved it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Yield&lt;/span&gt;&lt;br /&gt;One 2 pound loaf&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Tips&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If you are using a full size standing mixer with dough hooks you may need to double or triple the recipe and make 2 or 3 loaves in order for the dough hooks to work properly.  Use a bread machine for making single loaves.&lt;/li&gt;&lt;li&gt;Don't bake the bread in the bread machine unless you are in a hurry.  The bread should bake fine but it will likely be lumpy.  For a "perfect" loaf bake one or two loaves in a regular bread pan in a conventional oven.&lt;br /&gt;&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/7616099-68803797982038256?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/68803797982038256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/68803797982038256'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2009/08/whole-wheat-bread.html' title='Whole Wheat Bread'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-2208527004000355077</id><published>2009-08-18T00:30:00.002-04:00</published><updated>2009-08-18T00:35:16.520-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Front Page Change</title><content type='html'>I've changed the "front page" of this website to show only blog posts of general interest.  This, currently, is the only such post.  You can read all of my posts by going to my &lt;a href="http://webaugur.com/dave/blogger/"&gt;blog page&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-2208527004000355077?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/2208527004000355077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/2208527004000355077'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2009/08/front-page-change.html' title='Front Page Change'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-1614758485696370148</id><published>2009-06-08T03:01:00.003-04:00</published><updated>2009-06-08T14:33:54.346-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='movies'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='hdtv'/><category scheme='http://www.blogger.com/atom/ns#' term='hulu'/><category scheme='http://www.blogger.com/atom/ns#' term='tv'/><category scheme='http://www.blogger.com/atom/ns#' term='boxee'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Boxee</title><content type='html'>Here I sit, unable to sleep, watching Fantasy Island on Hulu with &lt;a href="http://boxee.tv/"&gt;Boxee&lt;/a&gt;.  Tattoo was just announcing, "De Plane!  De Plane!"  Tattoo is trying to convince the boss to give him his fantasy.&lt;br /&gt;&lt;br /&gt;I haven't watched live television in about 6 months, I guess.  I got a 34" 1080p HDTV around Christmas.  So I built a Home Theater PC running &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu 8.10&lt;/a&gt; to use with it.  I have a large library of movies and tv shows.  So it made sense that I would organize them with the computer.  As I was looking for software to do that Boxee was becoming popular.  Boxee is definitely beta quality but it is headed in a fantastic direction.  I wish it was better able to integrate online content with local content.  But its so good there's just no point in watching live tv.&lt;br /&gt;&lt;br /&gt;"Let's see some sunshine on that Cherubic face of yours."  -- De Boss, De Boss!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-1614758485696370148?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/1614758485696370148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/1614758485696370148'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2009/06/boxee.html' title='Boxee'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-2558463950175512640</id><published>2009-06-04T18:14:00.003-04:00</published><updated>2009-06-04T18:31:38.680-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>php-imap extension == evil</title><content type='html'>&lt;h2&gt;The Problem&lt;/h2&gt;The &lt;a href="http://us2.php.net/manual/en/book.imap.php"&gt;PHP IMAP&lt;/a&gt; extension relies on &lt;a href="http://www.washington.edu/imap/"&gt;University of Washington's libc-client IMAP&lt;/a&gt; library which appears to be written by kindergarteners. After some review of the source code, UW's IMAP client library appears to have extensive, serious security and stability problems at very fundamental levels.&lt;br /&gt;&lt;br /&gt;I'm seeing segfaults (buffer overflows) performing simple operations like fetching attachments.  Some attachments work fine but others fail; larger files especially.  There are bug reports and CVE entries related to similar issues.  However, upgrading to the supposed "fixed" versions of everything does not make any difference for my specific issue.  It does fix some other issues related to this.  (i.e. the exact same programming errors that appear to affect thousands of lines of code in the UW client.)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;The Solution&lt;/h2&gt;Use one of the many native IMAP class library.  My choice would be &lt;a href="http://framework.zend.com/manual/en/zend.mail.html"&gt;Zend_Mail&lt;/a&gt; as we use &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt; extensively here at work.  Zend_Mail supports a number of other mail protocols in addition to IMAP.  MIME type support is likely much better than other options.  The other logical choice would be &lt;a href="http://pear.php.net/package/Net_IMAP/"&gt;Pear Net_IMAP&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-2558463950175512640?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/2558463950175512640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/2558463950175512640'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2009/06/php-imap-extension-evil.html' title='php-imap extension == evil'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-647007878027840381</id><published>2009-04-09T11:04:00.008-04:00</published><updated>2009-06-04T13:34:19.891-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='cluster'/><title type='text'>MySQL Master-Master-Slave(s) Database Replication</title><content type='html'>I have watched the technology sessions and slideshows explaining how many large websites, such as Google or Facebook, setup their MySQL Databases.  But none have ever gone into the details of how to configure MySQL in such a way.  So I had to tackle that myself.  I am documenting the process here so its hopefully useful to others (and myself when I forget in 6 months).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Overview of the resources involved&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Server farm composed of &lt;a href="http://www.sun.com/servers/x64/x2250/"&gt;Sun Fire x2250&lt;/a&gt; servers&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sun.com/storage/disk_systems/workgroup/2510/"&gt;Sun StorageTek 2510 iSCSI&lt;/a&gt; storage arrays&lt;br /&gt;&lt;/li&gt;&lt;li&gt;All servers run &lt;a href="http://www.redhat.com/cluster_suite/"&gt;Red Hat Enterprise Linux Cluster Suite 5.3&lt;/a&gt;&lt;/li&gt;&lt;li&gt;MySQL 5.1 from &lt;a href="http://blog.famillecollet.com/"&gt;Remi&lt;/a&gt; has been installed (Merci Remi!)&lt;/li&gt;&lt;li&gt;Masters are on bare-metal with a pair of RAID-1 250GB disks, 8 cores, 16GB RAM&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Slaves run as cluster services on RHEL 5.3 backed by the iSCSI arrays, 4 cores, 4GB RAM&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Data Integrity Concerns&lt;/span&gt;&lt;br /&gt;The very first thing you need to consider is that MySQL technically does not support multiple masters.  This is significant because it means that there is no conflict resolution if you write data to both masters.  If you happen to change the same record on both masters they wipe each other's changes out.  MySQL replication works simply by replaying queries from the master on the slave server.&lt;br /&gt;&lt;br /&gt;The safest solution is to simply never write data to both masters.  Although, there are strategies that allow you to safely write to multiple masters.  For example, limit writes to specific tables on each master server.  In my case I use the secondary master as a replication source and hot-spare in case I need to take down the primary master for maintenance.  Using the secondary master as a replication source takes the burden of slave replication off your primary database server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Master Configuration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;We have two masters.  They are identified as 1 and 2.  (Slaves are 11, 12, etc.)&lt;br /&gt;&lt;br /&gt;The very first thing you should do is to run /usr/bin/mysql_secure_installation on each of your masters to set MySQL's root password and other security settings.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Master 1&lt;/span&gt;&lt;br /&gt;Add the following to the [mysqld] section of my.cnf making the appropriate changes and restart mysqld:&lt;div style="margin-left: 4em;"&gt;&lt;code&gt;# primary master server id&lt;br /&gt;server-id=1&lt;br /&gt;auto_increment_offset=1&lt;br /&gt;# total number of master servers&lt;br /&gt;auto_increment_increment=2&lt;br /&gt;# local slave replication options&lt;br /&gt;log-bin=master1-bin&lt;br /&gt;log-slave-updates&lt;br /&gt;# remote master replication options&lt;br /&gt;master-host=master2.yourdomain.com&lt;br /&gt;master-port=3306&lt;br /&gt;master-user=replica&lt;br /&gt;master-password=replic8&lt;br /&gt;master-connect-retry=10&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;Master 2&lt;/span&gt;&lt;br /&gt;Add the following to the [mysqld] section of my.cnf making the appropriate changes and restart mysqld:&lt;div style="margin-left: 4em;"&gt;&lt;code&gt;# secondary master server id&lt;br /&gt;server-id=2&lt;br /&gt;auto_increment_offset=2&lt;br /&gt;# total number of master servers&lt;br /&gt;auto_increment_increment=2&lt;br /&gt;# local slave replication options&lt;br /&gt;log-bin=master2-bin&lt;br /&gt;log-slave-updates&lt;br /&gt;# remote master replication options&lt;br /&gt;master-host=master1.yourdomain.com&lt;br /&gt;master-port=3306&lt;br /&gt;master-user=replica&lt;br /&gt;master-password=replic8&lt;br /&gt;master-connect-retry=10&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Create Replication Accounts&lt;br /&gt;&lt;/span&gt;On both master servers run the following query as root:&lt;div style="margin-left: 4em;"&gt;&lt;code&gt;&lt;strong&gt;mysql&gt;&lt;/strong&gt; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%' IDENTIFIED BY 'replic8';&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Dump/Load Existing Data and start Replication&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;On Master 1&lt;br /&gt;&lt;/span&gt;Prevent writing to the database.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="margin-left: 4em;"&gt;&lt;code&gt;&lt;strong&gt;mysql&gt;&lt;/strong&gt; FLUSH TABLES WITH READ LOCK;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;&lt;strong&gt;mysql&gt;&lt;/strong&gt; SHOW MASTER STATUS\G&lt;br /&gt;*************************** 1. row ***************************&lt;br /&gt;          File: master1-bin.000001&lt;br /&gt;      Position: 254&lt;br /&gt;  Binlog_Do_DB:&lt;br /&gt;Binlog_Ignore_DB:&lt;br /&gt;1 row in set (0.20 sec)&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;Make note of the position and file name.  You &lt;span style="font-style: italic;"&gt;must have&lt;/span&gt; these later.  From a terminal you now need to dump the database for loading onto the slaves.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;div style="margin-left: 4em;"&gt;&lt;code&gt;&lt;strong&gt;bash&gt;&lt;/strong&gt; mysqldump -A -u root -p &amp;gt; master1.sql&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;On Master 2&lt;br /&gt;&lt;/span&gt;Load the data from Master 1 onto Master 2.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;div style="margin-left: 4em;"&gt;&lt;code&gt;&lt;strong&gt;bash&gt;&lt;/strong&gt; mysql -h master2.yourdomain.com -u root -p &amp;lt; master1.sql&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;Enable Master 2 as a slave to Master 1 (refer to master 1's &lt;span style="font-style: italic;"&gt;show master status&lt;/span&gt; above for MASTER_LOG* values)&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;div style="margin-left: 4em;"&gt;&lt;code&gt;&lt;strong&gt;mysql&gt;&lt;/strong&gt; CHANGE MASTER TO&lt;br /&gt;MASTER_HOST='master1.yourdomain.com',&lt;br /&gt;MASTER_USER='replica',&lt;br /&gt;MASTER_PASSWORD='replic8',&lt;br /&gt;MASTER_LOG_FILE='&lt;/code&gt;&lt;code&gt;master1-bin.000001&lt;/code&gt;&lt;code&gt;',&lt;br /&gt;MASTER_LOG_POS=254;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;mysql&gt;&lt;/span&gt; START SLAVE;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;Get the Log Info for Master 2&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;div style="margin-left: 4em;"&gt;&lt;code&gt;&lt;strong&gt;mysql&gt;&lt;/strong&gt; SHOW MASTER STATUS\G&lt;br /&gt;*************************** 1. row ***************************&lt;br /&gt;          File: master2-bin.000005&lt;br /&gt;      Position: 12314580&lt;br /&gt;  Binlog_Do_DB:&lt;br /&gt;Binlog_Ignore_DB:&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;On Master 1&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;Enable Master 1 as a slave to Master 2&lt;span style="font-weight: bold;"&gt; &lt;/span&gt; (refer to master 2's &lt;span style="font-style: italic;"&gt;show master status&lt;/span&gt; above for MASTER_LOG* values) &lt;div style="margin-left: 4em;"&gt;&lt;code&gt;&lt;strong&gt;mysql&gt;&lt;/strong&gt; CHANGE MASTER TO&lt;br /&gt;MASTER_HOST='master2.yourdomain.com',&lt;br /&gt;MASTER_USER='replica',&lt;br /&gt;MASTER_PASSWORD='replic8',&lt;br /&gt;MASTER_LOG_FILE='&lt;/code&gt;&lt;code&gt;master2-bin.000005',&lt;br /&gt;MASTER_LOG_POS=&lt;/code&gt;&lt;code&gt;12314580;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;mysql&gt;&lt;/span&gt; START SLAVE;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Master-Master Setup is complete&lt;/span&gt;&lt;br /&gt;If all you wanted was a master-master setup then you are finished.  Any query executed on master 1 will also be executed on master 2.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Adding Slaves to your Master-Master&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;On Each Slave Follow this Procedure&lt;/span&gt;&lt;br /&gt;Add the following to the [mysqld] section of my.cnf changing the server-id and master settings as appropriate and restart mysqld:&lt;div style="margin-left: 4em;"&gt;&lt;code&gt;# this slave's server-id&lt;br /&gt;server-id=11&lt;br /&gt;# replicate from master 2&lt;br /&gt;master-host=master2.yourdomain.com&lt;br /&gt;master-port=3306&lt;br /&gt;master-user=replica&lt;br /&gt;master-password=replic8&lt;br /&gt;master-connect-retry=10&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;Load the data dump from Master 1, if needed:&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;div style="margin-left: 4em;"&gt;&lt;code&gt;&lt;strong&gt;bash&gt;&lt;/strong&gt; mysql -h slave11.yourdomain.com -u root -p  &amp;lt; master1.sql &lt;/code&gt;&lt;/div&gt;Start Replication from Master 2 to each slave&lt;span style="font-weight: bold;"&gt; &lt;/span&gt; (refer to master 2's &lt;span style="font-style: italic;"&gt;show master status&lt;/span&gt; above for MASTER_LOG* values) &lt;div style="margin-left: 4em;"&gt;&lt;code&gt;&lt;strong&gt;mysql&gt;&lt;/strong&gt; CHANGE MASTER TO&lt;br /&gt;MASTER_HOST='master2.yourdomain.com',&lt;br /&gt;MASTER_USER='replica',&lt;br /&gt;MASTER_PASSWORD='replic8',&lt;br /&gt;MASTER_LOG_FILE='&lt;/code&gt;&lt;code&gt;master2-bin.000005',&lt;br /&gt;MASTER_LOG_POS=&lt;/code&gt;&lt;code&gt;12314580;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;mysql&gt;&lt;/span&gt; START SLAVE;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Master-Master-Slave Setup is Complete&lt;/span&gt;&lt;br /&gt;Congratulations, you are done with the server configuration!  You may verify this by inserting or updating records on Master 1 and then verifying that the change is made on Master 1 and all of your slaves.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Client Access Considerations&lt;/span&gt;&lt;br /&gt;To take full advantage of this configuration your client applications will need to be written in such a way that they perform all critical writes (that is, writing data that you want to keep) on Master 1.  Also consider that some or all reads immediately following a write may need to come from the master.  This is because it can take a few seconds for the slaves to synchronize with Master 1.  This is what we call a "dirty" read.  Clients performing only reads or creating temporary tables for use with those reads can access your pool of slaves and never touch the master.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Examples&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Generate query-intense reports on dedicated slaves.&lt;/li&gt;&lt;li&gt;A portal page that doesn't need up-to-the-second data.&lt;/li&gt;&lt;li&gt;Statistics calculations can be performed on the slaves.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Enforcing Safe Practices&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;You would be well advised to GRANT only SELECT privileges to clients accessing your tables via a slave.  This way a rogue client application cannot manipulate upstream data on the slave.  Any changes made on the slave would not be known to any other slave nor the masters.  This could be a devastatingly bad situation to find yourself in.  Please think through these issues before you implement your clients.&lt;br /&gt;You almost certainly will want to allow clients to create temporary tables, though.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Advanced Stuff&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;MySQL doesn't require slave tables to have the same schema as masters, either.  This allows you to do interesting things like create your master database tables as InnoDB tables with full referential integrity and foreign keys while creating your slave tables as high performance MyISAM tables.  You can create different indexing strategies on the slaves to fine-tune specific slaves to specific tasks such as report generation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-647007878027840381?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/647007878027840381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/647007878027840381'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2009/04/mysql-master-master-slaves-database.html' title='MySQL Master-Master-Slave(s) Database Replication'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-7482471032319493428</id><published>2009-03-20T16:06:00.003-04:00</published><updated>2009-04-16T17:44:09.208-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='cluster'/><category scheme='http://www.blogger.com/atom/ns#' term='red hat enterprise linux'/><category scheme='http://www.blogger.com/atom/ns#' term='dhcp'/><title type='text'>Red Hat Enterprise Linux Cluster Suite 5.2 DHCP Problems</title><content type='html'>Well, I learned another valuable clustering lesson today.  Manually assign all of your IP addresses and do not rely on DHCP.  I'd still suggest you have the IPs statically assigned on the DHCP server but don't rely on it at all.&lt;br /&gt;&lt;br /&gt;Yesterday I rebooted all of the machines in the cluster simultaneously after making some extensive modifications to the iSCSI configuration on them all.  (I'm using cluster-ssh to manage them all simultaneously.)  All of the machines went down at exactly the same time and came up at exactly the same time.  (They are identical hardware with identical software, afterall.)&lt;br /&gt;&lt;br /&gt;Today, for whatever reason, when all of the leases expired at roughly the same time they didn't renew quickly enough.  I walked out of a meeting this afternoon to all of the cluster nodes reporting "Quorum dissolved" and all services on the cluster were failed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-7482471032319493428?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/7482471032319493428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/7482471032319493428'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2009/03/red-hat-enterprise-linux-cluster-suite_20.html' title='Red Hat Enterprise Linux Cluster Suite 5.2 DHCP Problems'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-9105609968864070575</id><published>2009-03-11T16:58:00.006-04:00</published><updated>2009-03-11T17:45:10.619-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='cluster'/><category scheme='http://www.blogger.com/atom/ns#' term='red hat enterprise linux'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Red Hat Enterprise Linux Cluster Suite 5.2 Relocate Problems</title><content type='html'>&lt;span style="font-size:130%;"&gt;Gist of it all&lt;/span&gt;&lt;br /&gt;So, I've been fighting mind bending failover problems on our new compute cluster at work for the past week.  I can summarize the solution to service failover problems in one sentence:&lt;br /&gt;  Don't use Red Hat's cluster service scripts, evar.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;How it actually works&lt;/span&gt;&lt;br /&gt;Apache's script (apache.sh) in RHEL 5.2 sends a TERM signal to Apache, waits N seconds (0 by default for Luci/Ricci, 20 for sys-config-cluster) and then proclaims that Apache has failed to shutdown if its still running.  This type of failure is fatal for the cluster service.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;How it should work&lt;/span&gt;&lt;br /&gt;The standard apache init scripts (/etc/rc.d/init.d/httpd) do the right thing, more or less.  The parent process is sent the TERM signal, waits 10 seconds and if its still running sends the KILL signal.  That may seem harsh but this is a web server for crying out loud.  There's no real chance of data corruption if you KILL the web server.  If something goes horribly wrong and Apache needs to move to another machine I'm quite happy with Billy Bob having to retype a form or resume his download.  That affects only Billy Bob.  Bringing down the service for the entire world, in comparison, seems like a very bad solution.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Rant&lt;/span&gt;&lt;br /&gt;Red Hat has spent years developing this clustering software.  Its fairly good and seems reasonably well written.  Its a shame they only spent 5 minutes writing the service scripts.  The stock init scripts are infinitely better written but won't work in a clustered environment.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Solution&lt;/span&gt;&lt;br /&gt;So, my advice, spend 20 minutes and write your own userscript for each service.  If a service is important enough to be on a cluster you can afford to spend the time to write your own script to start and stop it.  If you don't know how to write shell scripts and you're managing a cluster then do everyone a favor and seek employment at McDonalds.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Howto&lt;/span&gt;&lt;br /&gt;User scripts for the cluster are simply &lt;a href="http://refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html"&gt;LSB compliant init scripts&lt;/a&gt;.  I advise you to not waste much time trying trying to hack the /etc/rc.d/init.d scripts to work within the cluster.  You can do so but you'll end up stripping out most of it.  You may wish to source the /etc/rc.d/init.d/functions file, though.  But you will need to pass the pid filename to every single function you call.  (Read the functions script to see which options to pass to each function.  daemon, killproc, and status functions are most useful for starting, stopping and checking status respectively.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-9105609968864070575?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/9105609968864070575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/9105609968864070575'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2009/03/red-hat-enterprise-linux-cluster-suite.html' title='Red Hat Enterprise Linux Cluster Suite 5.2 Relocate Problems'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-3209591218697035469</id><published>2008-11-04T06:13:00.000-05:00</published><updated>2008-11-04T18:15:19.757-05:00</updated><title type='text'>Vote</title><content type='html'>Uncle Sam needs you...to vote!!!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webaugur.com/dave/blogger/uploaded_images/Photo_11-749758.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 203px; height: 320px;" src="http://webaugur.com/dave/blogger/uploaded_images/Photo_11-749731.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-3209591218697035469?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/3209591218697035469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/3209591218697035469'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2008/11/vote.html' title='Vote'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-580747528422462885</id><published>2008-11-03T15:01:00.006-05:00</published><updated>2008-11-03T16:09:10.960-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Beware DVDs, CDs created on Windows Vista</title><content type='html'>Windows Vista uses a new DVD/CD format that nothing else supports.  So, if you are making DVDs or CDs for friends on a Windows Vista machine then your friends probably won't be able to read it unless you've manually changed the disc writer settings to "Mastered" each time you burn a disc.&lt;br /&gt;&lt;br /&gt;This is, of course, standard operating procedure for Microsoft: Introduce some new whizbang format (documents, disks, etc) into their latest products in an attempt to force the rest of the world to use their latest software.  I don't care how much better someone at Microsoft thinks it is...  If the rest of the world can't read the disc its nothing more than a worthless piece of aluminum foil glued to a coaster.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt; &lt;a href="http://www.ubuntu.com/getubuntu/download"&gt;Ubuntu Linux 8.10&lt;/a&gt; can read LiveFS formatted discs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-580747528422462885?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/580747528422462885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/580747528422462885'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2008/11/beware-dvds-cds-created-on-windows.html' title='Beware DVDs, CDs created on Windows Vista'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-627002862164069</id><published>2008-08-27T00:15:00.003-04:00</published><updated>2008-11-03T15:18:53.941-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cats'/><category scheme='http://www.blogger.com/atom/ns#' term='memories'/><title type='text'>Farewell Furball</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webaugur.com/dave/blogger/uploaded_images/sd820002-797537.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://webaugur.com/dave/blogger/uploaded_images/sd820002-797528.jpg" alt="" border="0" /&gt;&lt;/a&gt;Well, my mother's cat "pookie" went into renal failure from diabetes yesterday.  He lived a long, full life and seemed quite happy for most of it.  The old guy will certainly be missed.&lt;br /&gt;&lt;br /&gt;So long and thanks for all the fish...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-627002862164069?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/627002862164069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/627002862164069'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2008/08/farewell-furball.html' title='Farewell Furball'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-7151899348903269935</id><published>2008-08-25T16:01:00.003-04:00</published><updated>2008-11-03T15:16:35.533-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Linux &amp; Vista Slow Internet</title><content type='html'>If you are seeing slow Internet speeds under Linux (2.6.17 or newer) or Windows Vista make sure your router supports RFC 1323. If it does not then this is likely your problem.  To fix it, upgrade or replace your router.  RFC 1323 is a performance enhancement for TCP/IP networking which LInux and Vista support.  Unfortunately, it seriously hurts performance if the network hardware doesn´t support it properly (or at all).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-7151899348903269935?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/7151899348903269935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/7151899348903269935'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2008/08/linux-vista-slow-internet.html' title='Linux &amp;amp; Vista Slow Internet'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-255064544593458998</id><published>2008-07-20T07:38:00.003-04:00</published><updated>2008-11-03T15:19:41.373-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Web Development Resources</title><content type='html'>&lt;div&gt;I have been working on a &lt;a href="http://sites.google.com/a/webaugur.com/web-development/"&gt;web development resources listing&lt;/a&gt; for tools and services I use every day.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;It can be found at: &lt;a href="http://sites.google.com/a/webaugur.com/web-development/"&gt;http://sites.google.com/a/webaugur.com/web-development&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-255064544593458998?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/255064544593458998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/255064544593458998'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2008/07/web-development-resources.html' title='Web Development Resources'/><author><name>David L Norris</name><uri>http://www.blogger.com/profile/11214340866689612725</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12485254931484629199'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-6278392982168925861</id><published>2008-07-17T12:31:00.005-04:00</published><updated>2008-07-20T05:04:22.663-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='censored'/><category scheme='http://www.blogger.com/atom/ns#' term='family'/><title type='text'>Family</title><content type='html'>Well, some family members are upset about me publishing public domain information about deceased family members exported from the 1998 Family Tree Maker CDs and federal government's master death file (aka &lt;a href="http://ssdi.rootsweb.ancestry.com/"&gt;Social Security Death Index&lt;/a&gt;).  I'm not going to censor bits and pieces of publicly available information for one or two people.  I have much better things to do with my time.  So I have removed absolutely everything.&lt;br /&gt;&lt;br /&gt;These very same people don't invite me to family events, don't let me know when loved ones pass away or if I somehow end up at a family event they make snide comments about me being there.&lt;br /&gt;&lt;br /&gt;Its a real shame, too.  I've met more family members by publicly posting old family photos than I ever met through direct interaction with relatives.  Its telling that I've learned more about my family history from my father's uncle's grandson's ex-wife, whom I've never met, than my own relatives.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-6278392982168925861?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/6278392982168925861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/6278392982168925861'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2008/07/family.html' title='Family'/><author><name>Augur</name><uri>http://www.blogger.com/profile/15311831783736073550</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09837034707052073423'/></author></entry><entry><id>tag:blogger.com,1999:blog-7616099.post-5034627208789879964</id><published>2008-04-12T08:43:00.002-04:00</published><updated>2008-11-03T15:18:35.591-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='volunteer'/><category scheme='http://www.blogger.com/atom/ns#' term='ham radio'/><title type='text'>15k 500 Festival Mini Marathon</title><content type='html'>&lt;p class="mobile-photo"&gt;&lt;a href="http://webaugur.com/dave/blogger/uploaded_images/Photo003-739737-739752.jpg"&gt;&lt;img src="http://webaugur.com/dave/blogger/uploaded_images/Photo003-739737-739749.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="mobile-photo"&gt;&lt;a href="http://webaugur.com/dave/blogger/uploaded_images/Photo004-739777-739795.jpg"&gt;One of the first runners blurs past mile marker 2.&lt;/a&gt;&lt;/p&gt; &lt;p class="mobile-photo"&gt;&lt;a href="http://webaugur.com/dave/blogger/uploaded_images/Photo000-739596-739617.jpg"&gt;&lt;img src="http://webaugur.com/dave/blogger/uploaded_images/Photo000-739596-739613.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p class="mobile-photo"&gt;&lt;a href="http://webaugur.com/dave/blogger/uploaded_images/Photo001-739646-739663.jpg"&gt;&lt;img src="http://webaugur.com/dave/blogger/uploaded_images/Photo001-739646-739659.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p class="mobile-photo"&gt;&lt;a href="http://webaugur.com/dave/blogger/uploaded_images/Photo002-739688-739705.jpg"&gt;&lt;img src="http://webaugur.com/dave/blogger/uploaded_images/Photo002-739688-739701.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="mobile-photo"&gt;&lt;a href="http://webaugur.com/dave/blogger/uploaded_images/Photo004-739777-739795.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="mobile-photo"&gt;&lt;a href="http://webaugur.com/dave/blogger/uploaded_images/Photo_04-739471-739568.jpg"&gt;&lt;img src="http://webaugur.com/dave/blogger/uploaded_images/Photo_04-739471-739563.jpg" alt="" border="0" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="mobile-photo"&gt;&lt;a href="http://webaugur.com/dave/blogger/uploaded_images/Photo_04-739471-739568.jpg"&gt;Tail end approaches mile marker 1.&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7616099-5034627208789879964?l=webaugur.com%2Fdave%2Fblogger%2Findex.html' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/5034627208789879964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7616099/posts/default/5034627208789879964'/><link rel='alternate' type='text/html' href='http://webaugur.com/dave/blogger/2008/04/15k-500-festival-mini-marathon.html' title='15k 500 Festival Mini Marathon'/><author><name>Augur</name><uri>http://www.blogger.com/profile/15311831783736073550</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09837034707052073423'/></author></entry></feed>