<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TechRawr</title>
	<atom:link href="http://www.techrawr.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.techrawr.com</link>
	<description></description>
	<lastBuildDate>Sat, 10 Apr 2010 08:58:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Normalize Accept-Encoding Headers via HAProxy for Squid Cache</title>
		<link>http://www.techrawr.com/2010/04/10/normalize-accept-encoding-headers-haproxy-squid-cache/</link>
		<comments>http://www.techrawr.com/2010/04/10/normalize-accept-encoding-headers-haproxy-squid-cache/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 08:58:32 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Load Balancing]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[haproxy]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[squid]]></category>

		<guid isPermaLink="false">http://www.techrawr.com/?p=149</guid>
		<description><![CDATA[I noticed that when browsing one of our heavy traffic website&#8217;s under different browsers, I would see completely separate versions of a page depending on which browser I used. We use a cluster of Squid servers to cache the many pages of this particular website, but I believed the only thing that needed to happen [...]]]></description>
			<content:encoded><![CDATA[<p>I noticed that when browsing one of our heavy traffic website&#8217;s under different browsers, I would see completely separate versions of a page depending on which browser I used. We use a cluster of Squid servers to cache the many pages of this particular website, but I believed the only thing that needed to happen was to configure the HAProxy load balancer to balance requests based on URI so each page would always be served by the same Squid server (to optimize hit rate). Apparently not so!</p>
<p>So&#8230; what&#8217;s the deal?</p>
<p>Apparently, the <strong>Vary: Encoding</strong> header passed by Squid, in response to the browser requests, is used to make sure browsers receive only pages with encoding, if any, that they support. So, for example, Firefox would tell Squid that it accepts &#8220;gzip,deflate&#8221; as encoding methods, while Chrome was telling Squid it accepts &#8220;gzip,deflate,sdch&#8221;. Internet Explorer was only different from Firefox by a single space (&#8220;gzip, deflate&#8221;), but that was enough for Squid to cache and serve a completely separate object. I felt like this was a waste of resources. The &#8220;Big 3&#8243; browsers all support gzip and deflate (among other things), so in order to further optimize performance (and hit rate), I decided to normalize the <strong>Accept-Encoding</strong> headers.</p>
<p>My first attempt was to do something on the Squid servers themselves. However, the &#8220;hdr_replace&#8221; function I looked into did not have any impact on how Squid actually handles those requests, so I could hdr_replace all day long and each browser would still see separate cache objects for each individual page.</p>
<p>The alternative was to use HAProxy, but it turns out this works well! After a bit of reading, I found the &#8220;reqirep&#8221; function that allows one to rewrite any header passed down through the back-end servers. It uses regular expressions to do the deed, and after some testing/serverfaulting/luck I ended up adding the following command to the HAProxy backend configuration:</p>
<p>    <code>reqirep ^Accept-Encoding:\ gzip[,]*[\ ]*deflate.* Accept-Encoding:\ gzip,deflate</code></p>
<p>This regex will match for IE (gzip, deflate), Chrome (gzip,deflate,sdhc), and Firefox (gzip,deflate). It should also be noted that Googlebot uses the same header as Firefox. I didn&#8217;t bother looking into other browsers, as I was most concerned with the major browsers. If someone wants to contribute a better Regex to get the job done, let me know!</p>
<p>An additional reason normalized Accept-Encoding headers are good is that your cache will be primed much more quickly if everybody that visits your website are retrieving the same version of a page. Less work on your web server farm, database servers, and all that. </p>
<p>Speed is good. Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techrawr.com/2010/04/10/normalize-accept-encoding-headers-haproxy-squid-cache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Search Gets a Facelift</title>
		<link>http://www.techrawr.com/2010/03/22/google-search-gets-a-facelift/</link>
		<comments>http://www.techrawr.com/2010/03/22/google-search-gets-a-facelift/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 22:33:12 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Cool]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.techrawr.com/?p=141</guid>
		<description><![CDATA[I was trying to be productive and did a quick Google search when I noticed that the SERPs (search engine results pages) had just gotten a facelift. Apparently not everyone is seeing this yet, so Google is probably slow-releasing these changes, but here is a preview! Screen-shot #1 shows the new, clean header with side [...]]]></description>
			<content:encoded><![CDATA[<p>I was trying to be productive and did a quick Google search when I noticed that the SERPs (search engine results pages) had just gotten a facelift. Apparently not everyone is seeing this yet, so Google is probably slow-releasing these changes, but here is a preview!</p>
<p>Screen-shot #1 shows the new, clean header with side navigation:</p>
<p><a href="http://www.techrawr.com/wp-content/uploads/2010/03/2010-03-22_1530_001.png"><img src="http://www.techrawr.com/wp-content/uploads/2010/03/2010-03-22_1530_001-300x116.png" alt="" title="Google Facelift #1" width="300" height="116" class="alignnone size-medium wp-image-143" /></a></p>
<p>This second screen-shot shows the updated (and more colorful) pagination:</p>
<p><a href="http://www.techrawr.com/wp-content/uploads/2010/03/2010-03-22_1530.png"><img src="http://www.techrawr.com/wp-content/uploads/2010/03/2010-03-22_1530-300x74.png" alt="" title="Google Facelift #2" width="300" height="74" class="alignnone size-medium wp-image-142" /></a></p>
<p>I like it. It appears that location-based search will play a larger role in upcoming search results, as the currently set location is directly under the search box. </p>
<p>Sorry, China, but you probably won&#8217;t get to see the new style anytime soon. :/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techrawr.com/2010/03/22/google-search-gets-a-facelift/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Install SQL Server Management Studio 2005 on Vista 64-bit</title>
		<link>http://www.techrawr.com/2010/03/22/how-to-install-sql-server-management-studio-2005-on-vista-64-bit/</link>
		<comments>http://www.techrawr.com/2010/03/22/how-to-install-sql-server-management-studio-2005-on-vista-64-bit/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 09:55:52 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Vista 64-bit]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[ssms2005]]></category>
		<category><![CDATA[uac]]></category>
		<category><![CDATA[vista]]></category>
		<category><![CDATA[x64]]></category>

		<guid isPermaLink="false">http://www.techrawr.com/?p=137</guid>
		<description><![CDATA[If you have tried to install the 64-bit version of SQL Server Management Studio on Vista 64-bit, then you have probably run into the following error: Product: Microsoft SQL Server Management Studio Express &#8212; The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code [...]]]></description>
			<content:encoded><![CDATA[<p>If you have tried to install the 64-bit version of SQL Server Management Studio on Vista 64-bit, then you have probably run into the following error:</p>
<blockquote><p>Product: Microsoft SQL Server Management Studio Express &#8212; The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 29506.</p></blockquote>
<p>The problem is that User Access Controls (UAC) interferes with the installation process and causes it to fail. In order to get around the UAC issue, follow these few simple steps:</p>
<ol>
<li>Save the SQL Server Management Studio MSI file to, say, &#8220;C:\temp&#8221;</li>
<li>Go to Start > All Programs > Accessories</li>
<li>Right-click on &#8220;Command Prompt&#8221;, and click &#8220;Run as Administrator&#8221;</li>
<li>Once you open the command prompt, browse to &#8220;C:\temp&#8221;</li>
<li>Run the MSI file by typing in the name of the file and hitting Enter</li>
</ol>
<p>The installation will run using the administrator privileges inherited by the command prompt.</p>
<p>You should now be free of any error code 29506. Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techrawr.com/2010/03/22/how-to-install-sql-server-management-studio-2005-on-vista-64-bit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Delete Duplicate Rows/Records in MySQL Table</title>
		<link>http://www.techrawr.com/2010/03/22/delete-duplicate-rows-mysql-table/</link>
		<comments>http://www.techrawr.com/2010/03/22/delete-duplicate-rows-mysql-table/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 08:45:14 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Database Servers]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[query]]></category>

		<guid isPermaLink="false">http://www.techrawr.com/?p=133</guid>
		<description><![CDATA[Most articles on removing duplicate rows from a MySQL table involve 3 steps, but the following query is what I use for purging dupe records in one simple query. DELETE FROM `myTable` WHERE id NOT IN (SELECT t1.id FROM (SELECT id, groupByColumn FROM `myTable` ORDER BY id DESC) as t1 GROUP BY t1.groupByColumn) - &#8220;myTable&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Most articles on removing duplicate rows from a MySQL table involve 3 steps, but the following query is what I use for purging dupe records in one simple query. </p>
<p><em>DELETE FROM `myTable` WHERE id NOT IN (SELECT t1.id FROM (SELECT id, groupByColumn FROM `myTable` ORDER BY id DESC) as t1 GROUP BY t1.groupByColumn)</em></p>
<p>- &#8220;myTable&#8221; is the name of the table with duplicate rows<br />
- &#8220;id&#8221; is the name of the primary key identifier in &#8220;myTable&#8221;<br />
- &#8220;groupByColumn&#8221; is the name of the column used to differentiate records as duplicates</p>
<p>Example: Table of Videos with the duplicate match being made on the &#8220;title&#8221; field.</p>
<p>DELETE FROM `videos` WHERE id NOT IN (SELECT t1.id FROM (SELECT id, title FROM `videos` ORDER BY id DESC) as t1 GROUP BY t1.title)</p>
<p>It&#8217;s a good SQL query to save or bookmark for those times when you need do some maintenance or cleanup during development.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techrawr.com/2010/03/22/delete-duplicate-rows-mysql-table/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using the ACL in HAProxy for Load Balancing Named Virtual Hosts</title>
		<link>http://www.techrawr.com/2009/09/18/using-the-acl-in-haproxy-for-load-balancing-named-virtual-hosts/</link>
		<comments>http://www.techrawr.com/2009/09/18/using-the-acl-in-haproxy-for-load-balancing-named-virtual-hosts/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 02:00:28 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Load Balancing]]></category>
		<category><![CDATA[Web Servers]]></category>
		<category><![CDATA[haproxy]]></category>
		<category><![CDATA[virtual hosts]]></category>

		<guid isPermaLink="false">http://blog.mattbeckman.com/?p=115</guid>
		<description><![CDATA[Until recently, I wasn&#8217;t aware of the ACL system in HAProxy, but once I found it I realized that I have been missing a very important part of load balancing with HAProxy! While the full configuration settings available for the ACL are listed in the configuration doc, the below example includes the basics that you&#8217;ll [...]]]></description>
			<content:encoded><![CDATA[<p>Until recently, I wasn&#8217;t aware of the ACL system in HAProxy, but once I found it I realized that I have been missing a very important part of load balancing with HAProxy!</p>
<p>While the full configuration settings available for the ACL are listed in the <a href="http://haproxy.1wt.eu/download/1.3/doc/configuration.txt">configuration doc</a>, the below example includes the basics that you&#8217;ll need to build an HAProxy load balancer that supports multiple host headers.</p>
<p>Here is a quick example haproxy configuration file that uses ACLs:</p>
<pre>global
    log 127.0.0.1 local0
    log 127.0.0.1 local1 notice
    maxconn 4096
    user haproxy
    group haproxy
    daemon

defaults
    log global
    mode http
    option httplog
    option dontlognull
    retries 3
    option redispatch
    maxconn 2000
    contimeout 5000
    clitimeout 50000
    srvtimeout 50000

<strong>frontend http-in
    bind *:80
    acl is_www_example_com hdr_end(host) -i example.com
    acl is_www_domain_com hdr_end(host) -i domain.com

    use_backend www_example_com if is_www_example_com
    use_backend www_domain_com if is_www_domain_com
    default_backend www_example_com</strong>

backend www_example_com
    balance roundrobin
    cookie SERVERID insert nocache indirect
    option httpchk HEAD /check.txt HTTP/1.0
    option httpclose
    option forwardfor
    server Server1 10.1.1.1:80 cookie Server1
    server Server2 10.1.1.2:80 cookie Server2

backend www_domain_com
    balance roundrobin
    cookie SERVERID insert nocache indirect
    option httpchk HEAD /check.txt HTTP/1.0
    option httpclose
    option forwardfor
    server Server1 192.168.5.1:80 cookie Server1
    server Server2 192.168.5.2:80 cookie Server2
</pre>
<p>In HAProxy 1.3, the ACL rules are placed in a &#8220;frontend&#8221; and (depending on the logic) the request is proxied through to any number of &#8220;backends&#8221;. You&#8217;ll notice in our frontend entitled &#8220;http-in&#8221; that I&#8217;m checking the host header using the hdr_end feature. This feature performs a simple check on the host header to see if it ends with the provided argument. </p>
<p>You can find the rest of the Layer 7 matching options by searching for &#8220;7.5.3. Matching at Layer 7&#8243; in the configuration doc I linked to above. A few of the options I didn&#8217;t use but you might find useful are path_beg, path_end, path_sub, path_reg, url_beg, url_end, url_sub, and url_reg. The *_reg commands allow you to perform RegEx matching on the url/path, but there is the usual performance consideration you need to make for RegEx (especially since this is a load balancer). </p>
<p>The first &#8220;use_backend&#8221; that matches a request will be used, and if none are matched, then HAProxy will use the &#8220;default_backend&#8221;. You can also combine ACL rules in the &#8220;use_backend&#8221; statements to match one or more rules. See the configuration doc for more helpful info.</p>
<p>If you&#8217;re looking to use HAProxy with SSL, that requires a different approach, and I&#8217;ll blog about that soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techrawr.com/2009/09/18/using-the-acl-in-haproxy-for-load-balancing-named-virtual-hosts/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Generate a PKCS #12 (PFX) Certificate from Win32 CryptoAPI PRIVATEKEYBLOB</title>
		<link>http://www.techrawr.com/2009/07/30/generate-a-pkcs12-certificate-from-win32-cryptoapi-privatekeyblob/</link>
		<comments>http://www.techrawr.com/2009/07/30/generate-a-pkcs12-certificate-from-win32-cryptoapi-privatekeyblob/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 07:36:09 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[OpenSSL]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[cygwin]]></category>
		<category><![CDATA[pkcs12]]></category>
		<category><![CDATA[privatekeyblob]]></category>

		<guid isPermaLink="false">http://blog.mattbeckman.com/?p=94</guid>
		<description><![CDATA[We had an accounting system that used a Microsoft Win32 CryptoAPI blob to encrypt/decrypt credit card information for recurring customer information. It was time for an upgrade to .NET land. Keith, the lead developer for this project, decided it would be beneficial to switch to x509 certificates for improved key management (and I wasn&#8217;t going [...]]]></description>
			<content:encoded><![CDATA[<p>We had an accounting system that used a Microsoft Win32 CryptoAPI blob to encrypt/decrypt credit card information for recurring customer information. It was time for an upgrade to .NET land. <a href="http://www.garagecommerce.com">Keith</a>, the lead developer for this project, decided it would be beneficial to switch to x509 certificates for improved key management (and I wasn&#8217;t going to argue). </p>
<p>So what we physically used to encrypt/decrypt cards in the legacy system was a <a href="http://msdn.microsoft.com/en-us/library/aa387401%28VS.85%29.aspx">PRIVATEKEYBLOB</a> and our ultimate goal was to use a certificate in the <a href="http://en.wikipedia.org/wiki/PKCS">PKCS #12</a> format. My system at the office is Windows XP, and I wanted to use OpenSSL to accomplish the task of converting the private key blob to something more suitable for our new system, but I didn&#8217;t want to transmit any of our top secret keys across the VPN or even across the network for that matter.</p>
<p>OpenSSL did not begin supporting PRIVATEKEYBLOB as an acceptable format until 1.0.0 Beta, but 0.9.8h was the only Windows binary readily available. So I grabbed the OpenSSL source (<a href="http://www.openssl.org/source/">here</a>) and compiled it using GCC within Cygwin. If you don&#8217;t have Cygwin (get it <a href="http://www.cygwin.com/setup.exe">here</a>), it&#8217;s very easy to get started, and you can select from a large variety of Linux packages during setup. So, during setup, look for GCC and make sure you enable it.</p>
<p>Here&#8217;s how to compile OpenSSL 1.0.0 Beta on your native Linux environment or with Cygwin:</p>
<p>[code lang="bash"]$> cd /usr/local/<br />
$> wget http://www.openssl.org/source/openssl-1.0.0-beta3.tar.gz<br />
$> tar -xzf openssl-1.0.0-beta3.tar.gz<br />
$> cd openssl<br />
$> ./config &#038;&#038; make &#038;&#038; make install &#038;&#038; make clean[/code]</p>
<p>If something broke during install, check the online docs, or re-run Cygwin setup to make sure you selected the gcc toolset. I&#8217;ll assume from this point forward you are using OpenSSL 1.0 in either a native Linux or a Cygwin environment. If you aren&#8217;t sure, start OpenSSL and type &#8220;version&#8221; to check your ::drumroll please:: version number.</p>
<p>Let&#8217;s get started.</p>
<p>The OpenSSL command below will take your PRIVATEKEYBLOB and output an RSA private key in PEM format. Please note the use of &#8220;MS\ PRIVATEKEYBLOB&#8221; instead of the alternative &#8220;PRIVATEKEYBLOB&#8221;. Backspace is required to escape the blank space after &#8220;MS&#8221; in Linux when passed as a parameter on the command line. So, if all goes well, you should have a PEM file. If it doesn&#8217;t, try specifying a different input form (e.g. DER or PRIVATEKEYBLOB instead of MS\ PRIVATEKEYBLOB).</p>
<p>[code lang="bash"]$> openssl rsa -inform MS\ PRIVATEKEYBLOB -outform PEM -in private.pvk -out private.pem[/code]</p>
<p>Now that we have a PEM file with an RSA private key, we can generate a new certificate based on that private key (command below). This will generate an x509 certificate valid for 5 years. Once you run this you&#8217;ll be prompted with the usual country/state/city/company information, but what you specify there is up to you. I would recommend adding a passkey when it prompts you at the end</p>
<p>[code lang="bash"]$> openssl req -new -x509 -key private.pem -out newcert.crt -days 1825[/code]</p>
<p>If all continues to go well, you should have a private key in PEM format and your brand new certificate. One last command is needed to generate the PKCS #12 (aka PFX) certificate bundle.</p>
<p>[code lang="bash"]$> openssl pkcs12 -export -in newcert.crt -inkey private.pem -name "My Certificate" -out myCert.p12[/code]</p>
<p>If you didn&#8217;t receive any errors, then congratulations! You can now import this PKCS12 bundle into any Windows certificate repository and no longer need to hard code blobs into your code.</p>
<p>Hope this helps save someone a few hours time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techrawr.com/2009/07/30/generate-a-pkcs12-certificate-from-win32-cryptoapi-privatekeyblob/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to Copy or Move a Joomla Website</title>
		<link>http://www.techrawr.com/2009/06/19/how-to-copy-move-clone-transfer-joomla-website/</link>
		<comments>http://www.techrawr.com/2009/06/19/how-to-copy-move-clone-transfer-joomla-website/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 09:08:07 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Cloud Hosting]]></category>
		<category><![CDATA[Joomla!]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web Servers]]></category>
		<category><![CDATA[back-tick]]></category>
		<category><![CDATA[clone]]></category>
		<category><![CDATA[copy]]></category>
		<category><![CDATA[joomla]]></category>
		<category><![CDATA[move]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[transfer]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://blog.mattbeckman.com/?p=76</guid>
		<description><![CDATA[Intro If you manage one or more Joomla websites, eventually you&#8217;ll have to move them elsewhere. It&#8217;s pretty much fact. Performance requirements will change, you&#8217;ll find better pricing elsewhere, your dedicated server died, etc. There are a few options most people have to choose from: FTP client and phpMyAdmin method (aka the long, boring method) SSH/Shell [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Intro</strong></p>
<p>If you manage one or more Joomla websites, eventually you&#8217;ll have to move them elsewhere. It&#8217;s pretty much fact. Performance requirements will change, you&#8217;ll find better pricing elsewhere, your dedicated server died, etc.</p>
<p>There are a few options most people have to choose from:</p>
<ul>
<li>FTP client and phpMyAdmin method (aka the long, boring method)</li>
<li>SSH/Shell method (aka the cool, quick method)</li>
<li>PHP system() method (aka middle of the road and kind of fun method)</li>
<li>Joomla &#8220;clone&#8221; component (your mom could do it)</li>
</ul>
<p><strong>Move Joomla with an FTP Client and phpMyAdmin</strong></p>
<ol>
<li>Download the entire Joomla website via FTP client (you&#8217;re using S-FTP to connect, right?)</li>
<li>Use phpMyAdmin to export a SQL dump of your database</li>
<li>Upload the entire Joomla website via FTP client</li>
<li>Use phpMyAdmin on the new server to import the SQL dump from the old website</li>
<li>Update configuration.php:
<ol>
<li>Update the MySQL database credentials</li>
<li>Update the tmp/logs path</li>
<li>If you use FTP Layer, update the credentials</li>
</ol>
</li>
<li>Update .htaccess to match any changed server requirements</li>
</ol>
<p>Easy and straightforward. Long, slow process, but any Jr. Network Admin  could handle this for you if you don&#8217;t want to get your hands dirty.</p>
<p><strong>Clone Joomla with SSH (shell) Access</strong></p>
<ol>
<li>Login to your server via SSH</li>
<li>Browse to your Joomla website root</li>
<li>Run these commands:<br />
[code lang="bash"]tar -czf ../backup-example-com-20090619.tar.gz .</p>
<p>mv ../backup-example-com-20090619.tar.gz ./</p>
<p>mysqldump -u yourUsername -p -h yourMySQLHostname yourDatabaseName > backup-example-com-20090619.sql[/code]</li>
<li>Do you need to move this to a remote server or another location on the same server?
<ol>
<li>Local Path
<ol>
<li>Copy both backup files to the new website root</li>
<li>Browse to the new Joomla website root</li>
</ol>
</li>
<li>Remote Path
<ol>
<li>Login to remote server via SSH</li>
<li>Browse to the new Joomla website root</li>
<li>Use wget to download the archive and SQL dump to this server:<br />
[code lang="bash"]wget http://www.example.com/backup-example-com-20090619.tar.gz<br />
wget http://www.example.com/backup-example-com-20090619.sql[/code]</li>
</ol>
</li>
</ol>
</li>
<li>Run this command:<br />
[code lang="bash"]tar -xzf backup-example-com-20090619.tar.gz[/code]</li>
<li>Run this command (assuming you have made a new, blank database)<br />
[code lang="bash"]mysql -u yourNewUsername -p -h yourNewMySQLHost yourNewDatabase  < backup-example-com-20090619.sql[/code]</li>
<li>Update configuration.php &amp; .htaccess as shown in the first example</li>
</ol>
<p>More complicated (obviously), but if you like doing things the <span style="text-decoration: line-through;">hard</span> fun way, then it's a great way to go.</p>
<p><strong>Using PHP's system() or back-tick Commands to Copy Joomla Website</strong></p>
<p>I wasn't made aware of this method until after I started managing a whole slew of websites in a <a href="http://www.scalemysite.com" target="_blank">cloud hosting</a> platform (<a title="Scale My Site Cloud Hosting" href="http://www.scalemysite.com" target="_blank">Scale My Site</a>). Cloud hosting (and many shared hosting platforms) do not provide access to SSH because it's simply not feasible. Cloud hosting in particular due to your website running across hundreds of different server nodes. You can perform the same functions as the SSH procedure above using system execution commands in PHP.</p>
<ol>
<li>Create a new file called <strong>copy</strong><strong>-me.php</strong></li>
<li>Write the following code into this file:<br />
[code lang="php"]echo `tar -czf ../backup-example-com-20090619.tar.gz . &#038;&#038; mv ../backup-example-com-20090619.tar.gz ./`;<br />
echo `mysqldump -u yourUsername -p -h yourMySQLHostname yourDatabaseName > backup-example-com-20090619.sql`;[/code]</li>
<li>Execute the PHP file by accessing it from a browser:<br />
<strong>Browser&gt; http://www.example.com/copy-me.php </strong></li>
<li>Create a new file on the destination website called <strong>update-me.</strong><strong>php</strong></li>
<li>Write the following code into this file:<br />
[code lang="php"]echo `wget http://www.example.com/backup-example-com-20090619.tar.gz`;<br />
echo `wget http://www.example.com/backup-example-com-20090619.sql`;<br />
echo `tar -xzf backup-example-com-20090619.tar.gz`;<br />
echo `mysql -u yourNewUsername -p -h yourNewMySQLHost yourNewDatabase  < backup-example-com-20090619.sql`;[/code]</li>
<li><strong><span style="font-style: normal;"><span style="font-weight: normal;">Execute the PHP file by accessing it from your browser:<br />
</span>Browser&gt; http://www.exampleDestination.com/update-me.php </span></strong></li>
<li>Update the configuration.php and .htaccess files as needed</li>
</ol>
<p>Cool, huh?</p>
<p><strong>Use a Backup or Clone Component from Joomla Extension Directory</strong></p>
<p>If you prefer not to do anything yourself, and want to keep it as simple as possible, then a backup component from the JED is the way to go:</p>
<p><a href="http://extensions.joomla.org/extensions/access-&amp;-security/backup">http://extensions.joomla.org/extensions/access-&amp;-security/backup</a></p>
<p>I have only used one of those components before, and I found that there were a few bugs needing to be worked out, and it ended up taking more time to do the backup, move, and clone that I needed to do than when I did so manually.</p>
<p><strong>Foreward</strong></p>
<p>There are shortcuts you can take here depending on your environment. For instance, you never need to create archives at all, as you can pipe the mysqldump output directly to another mysql command (with the new database's credentials). However, I prefer to use archives and solid files especially when using PHP-based method, because you could end up accidentaly accessing the cloner file and wiping an existing MySQL database (if you aren't careful). So, on top of all this, I'd recommend removing the update-me and copy-me files after using them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techrawr.com/2009/06/19/how-to-copy-move-clone-transfer-joomla-website/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improve Scalability and Performance in ASP.NET Apps</title>
		<link>http://www.techrawr.com/2009/03/17/improve-scalability-and-performance-in-aspnet-apps/</link>
		<comments>http://www.techrawr.com/2009/03/17/improve-scalability-and-performance-in-aspnet-apps/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 05:13:00 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web Servers]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[optimizing]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[scaling]]></category>

		<guid isPermaLink="false">http://blog.mattbeckman.com/?p=68</guid>
		<description><![CDATA[If you&#8217;re looking to scale out ASP.NET applications, here is an interesting article that goes into length on important aspects to improve performance for .NET applications in high-traffic environments. The article covers the following topics: Optimizing the ASP.NET pipeline system ASP.NET, AJAX caching, and what you need to know Deploying ASP.NET from a staging to [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re looking to scale out ASP.NET applications, here is an interesting article that goes into length on important aspects to improve performance for .NET applications in high-traffic environments.</p>
<ul>The article covers the following topics:</p>
<li>Optimizing the ASP.NET pipeline system</li>
<li>ASP.NET, AJAX caching, and what you need to know</li>
<li>Deploying ASP.NET from a staging to a production environment</li>
<li>Optimizing the ASP.NET process configuration</li>
<li>Using a Content Delivery Network (CDN) with your ASP.NET apps</li>
<li>ASP.NET 2.0 Membership tables</li>
<li>Progressive UI loading for a smoother, end-user, browser experience</li>
<li>Optimizing ASP.NET 2.0 Profile provider</li>
</ul>
<p>Original article: <a href="http://www.howtocode.net/web-development/asp-net/10-asp-net-performance-and-scalability-secrets">Performance &#038; Scalability in ASP.NET</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.techrawr.com/2009/03/17/improve-scalability-and-performance-in-aspnet-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recovery.gov Search Engine Conspiracy?</title>
		<link>http://www.techrawr.com/2009/02/19/recoverygov-search-engine-conspiracy/</link>
		<comments>http://www.techrawr.com/2009/02/19/recoverygov-search-engine-conspiracy/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 20:14:34 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[government]]></category>
		<category><![CDATA[oops]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://blog.mattbeckman.com/?p=64</guid>
		<description><![CDATA[CNET reports that the new government website Recovery.gov has been using a special file to prevent being indexed by search engines. The robots.txt file, which has since been removed, contained the following code to prevent Google, Yahoo, and other reputable search engines from indexing any of it&#8217;s content: # Deny all search bots, web spiders [...]]]></description>
			<content:encoded><![CDATA[<p>CNET reports that the new government website <a rel="nofollow" href="http://www.recovery.gov">Recovery.gov</a> has been using a special file to prevent being indexed by search engines. The robots.txt file, which has since been removed, contained the following code to prevent Google, Yahoo, and other reputable search engines from indexing any of it&#8217;s content:</p>
<p><code># Deny all search bots, web spiders<br />
User-agent: *<br />
Disallow: /</code></p>
<p>The website hailed by Obama and driven by the motivation to have a &#8220;transparent&#8221; government is attempting to hide the content on it&#8217;s website? Seems kind of fishy to me.</p>
<p>Personally, I believe it&#8217;s a simple mistake on the part of the developers, and that disallowing search engine traffic via robots.txt is a common practice. However, I think it&#8217;s a topic worthy of discussion.</p>
<p>Original CNET article <a href="http://news.cnet.com/8301-13739_3-10167373-46.html?part=rss&#038;subj=news&#038;tag=2547-1_3-0-5" rel="nofollow">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techrawr.com/2009/02/19/recoverygov-search-engine-conspiracy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cloud Hosting &#8211; Scaling Websites the Easy Way</title>
		<link>http://www.techrawr.com/2009/02/02/cloud-hosting-scaling-websites-the-easy-way/</link>
		<comments>http://www.techrawr.com/2009/02/02/cloud-hosting-scaling-websites-the-easy-way/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 09:31:03 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Cloud Hosting]]></category>
		<category><![CDATA[Database Servers]]></category>
		<category><![CDATA[File Servers]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[Web Servers]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[scaling]]></category>

		<guid isPermaLink="false">http://blog.mattbeckman.com/?p=55</guid>
		<description><![CDATA[One often has to make a choice when it comes to website hosting. You weigh the variables and decide on the best solution for your hosting needs. Cloud hosting makes this decision a WHOLE lot easier. Let&#8217;s break it down. Price. You want to get the best deal possible. Shared hosting probably comes to mind [...]]]></description>
			<content:encoded><![CDATA[<p>One often has to make a choice when it comes to website hosting. You weigh the variables and decide on the best solution for your hosting needs. Cloud hosting makes this decision a WHOLE lot easier. Let&#8217;s break it down.</p>
<p><strong>Price.</strong> You want to get the best deal possible. Shared hosting probably comes to mind first. In the classic sense, shared hosting means a company has a server, and they load as many websites onto this server in order to make the most profit from one server. Sometimes, this can mean hundreds of websites on one box. One box&#8230; susceptible to the same physical hardware limitations as any other server. Sure, they might even include RAID, redundant power supplies, and a lot of disk space.</p>
<p>However, what happens when your website actually starts getting traffic? I had an experience where my company put their trust in a shared hosting company (*cough* Dreamhost *cough*). When it came down to it, one of our websites had a lot of visitors one evening, and after battling to keep things running smoothly, the host ultimately disabled our website via renaming the index file to index.php_disabled_by_host. Seriously? So much for saving money and &#8220;unlimited&#8221; space and bandwidth&#8230; which brings me to my next point.</p>
<p><strong>Scalability.</strong> If you have a website that has outgrown shared hosting, what is your next move? Many people consider purchasing dedicated equipment for their website. A dedicated server is usually the first move. Not enough? Scaling out from this point then usually requires the purchase of another dedicated server and a load balancer, then it just gets pricier from there with a dedicated database server, file servers, caching servers, and more to handle growing traffic and load. We&#8217;re talking a significant amount of expenses just to get the ability to scale. </p>
<p><a href="http://www.scalemysite.com/">Scale My Site</a> is the answer. The concept of a cloud host is that it takes the best of the scalable, dedicated world and lets you just pay for what you use. You put your website in the cloud and instantly your application is scaled across multiple webservers. Your files are stored on a redundant SAN mirrored across many physical drives. Database queries are performed on powerful, multi-node database clusters. You don&#8217;t have to think about &#8220;how am I going to handle all of that traffic?&#8221; because it just happens automatically. You no longer have to think about &#8220;do I need a Windows or Linux based account?&#8221;. It doesn&#8217;t matter. You can run ASP.NET applications side-by-side PHP web sites. It&#8217;s the cloud that doesn&#8217;t mind &#8211; it&#8217;s cool with whatever you want to do. I highly recommend checking out Ninja Systems, the <a href="http://www.scalemysite.com/">cloud hosting</a> company, if you are serious about scaling your website, and if you don&#8217;t want to waste your time recreating another scalable infrastructure that you need to manage yourself.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techrawr.com/2009/02/02/cloud-hosting-scaling-websites-the-easy-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
