<?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>Adrian Otto&#039;s Blog</title>
	<atom:link href="http://adrianotto.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://adrianotto.com</link>
	<description>For those who care about technical details</description>
	<lastBuildDate>Thu, 18 Apr 2013 08:18:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>What is CAMP?</title>
		<link>http://adrianotto.com/2013/04/what-is-camp/</link>
		<comments>http://adrianotto.com/2013/04/what-is-camp/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 08:18:45 +0000</pubDate>
		<dc:creator>Adrian Otto</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://adrianotto.com/?p=693</guid>
		<description><![CDATA[Today I presented a Ligning Talk at the OpenStack Dedign Summit in Portland, OR. This is a 5 minute presentation that allows for a quick introduction to a topic. Although there was an unfortunate A/V malfunction, I did have these slides prepared for the talk. CAMP is an open standards effort in OASIS that is [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-692 alignright" title="camp" src="http://cdn.adrianotto.com/wp-content/uploads/2013/04/camp-300x196.png" alt="" width="300" height="196" />Today I presented a Ligning Talk at the <a title="Openstack Design Summit" href="http://www.openstack.org/summit" target="_blank">OpenStack Dedign Summit</a> in Portland, OR. This is a 5 minute presentation that allows for a quick introduction to a topic. Although there was an unfortunate A/V malfunction, I did have <a title="CAMP Slides" href="http://cdn.adrianotto.com/wp-content/uploads/2013/04/OSD_Portland_2013_CAMP_Lightning_Talk.pdf">these slides</a> prepared for the talk.</p>
<p><a title="CAMP" href="https://www.oasis-open.org/committees/camp" target="_blank">CAMP</a> is an open standards effort in <a title="OASIS" href="https://www.oasis-open.org/" target="_blank">OASIS</a> that is expected to enter public review in the fall of 2013. I serve as one of the members of the editing team for <a title="CAMP specification v.CSD02" href="http://docs.oasis-open.org/camp/camp-spec/v1.1/csd02/camp-spec-v1.1-csd02.html" target="_blank">the CAMP specification</a>, and have presented it at a few different events. The thing that excites me about this standard is that it offers a practical path to portability of cloud applications between public and private clouds, and even between different public clouds. See <a href="http://cdn.adrianotto.com/wp-content/uploads/2013/04/OSD_Portland_2013_CAMP_Lightning_Talk.pdf" target="_blank">the presentation</a> for details about what this standard is, and what it&#8217;s not.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrianotto.com/2013/04/what-is-camp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>No Such Thing as Private Beta</title>
		<link>http://adrianotto.com/2013/02/no-such-thing-as-private-beta/</link>
		<comments>http://adrianotto.com/2013/02/no-such-thing-as-private-beta/#comments</comments>
		<pubDate>Tue, 12 Feb 2013 17:43:28 +0000</pubDate>
		<dc:creator>Adrian Otto</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://adrianotto.com/?p=674</guid>
		<description><![CDATA[I have the distinct privilege of seeing a lot of fresh new technological developments in software. While a software product or hosted service is being developed it goes through a series of different maturity levels before it becomes production quality. Practically all software code has bugs (defects) in it, and the more code there is, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-683" title="beta" src="http://cdn.adrianotto.com/wp-content/uploads/2013/02/beta.jpg" alt="" width="143" height="127" />I have the distinct privilege of seeing a lot of fresh new technological developments in software. While a software product or hosted service is being developed it goes through a series of different maturity levels before it becomes production quality. Practically all software code has bugs (defects) in it, and the more code there is, and the more complex it is, the more bugs there will be.</p>
<p>The first stage of software maturity is <strong>Development</strong>. This is the point where the software works for the first time, and has unknown quality. Not much testing has happened yet, and you should not be surprised to find bugs, or even see the program fail completely.</p>
<p>The next stage is <strong>Experimental</strong>, or Proof-of-Concept. This is the point where the software works, and all of the <a title="Unit Testing" href="http://en.wikipedia.org/wiki/Unit_testing" target="_blank">unit tests</a> pass. The quality of the software depends on the quality and code coverage of the unit tests. No documentation exists yet.</p>
<p>The next stage is <strong>Alpha</strong>. This means that the software is feature complete and ready for people to try using it to verify that it does what it&#8217;s supposed to. It is ready for a limited &#8220;Preview Release&#8221; of the software to a list of users who will try it and produce feedback. At this stage documentation is limited, and is usually the version written by the software developers themselves.</p>
<p>Next comes <strong>Beta</strong>. This means that the software developers feel that the software is done, and that there are no more significant changes to make. They identify a version called a &#8220;Release Candidate&#8221; It&#8217;s ready for a large population of public users to run the software on a wide variety of situations and setups. Some documentation may be provided, but it usually still a work-in-progress by this point. This is really the last chance to catch any serious bugs before the software is labeled &#8220;Stable&#8221;. Beta quality software is usually provided for a limited time free of charge.</p>
<p>Finally comes <strong>Stable</strong>. This is when a version is considered a &#8220;Release&#8221; or GA. This means that the software has performed well with no major issues for a considerable user population over a reasonable length of time. There is complete documentation for the software, and for the support teams responsible for it. Every product development group has different standards for what Stable means, and what quality a Release needs to be. Some are better than others. People are expected to pay for Stable software and services.</p>
<p>Now, here is something that a lot of companies do. When they have a solution that is <strong>Experimental</strong> or <strong>Alpha</strong> quality, and they don&#8217;t have the resources to test it completely themselves, they do a form of a release that is <em>inappropriately</em> named a &#8220;Private Beta&#8221;. This is a misleading oxymoron of a name that really means &#8220;the software has not been completely tested yet, but it passes unit tests.&#8221; The correct term for the release of something at this quality level is <strong>Preview Release</strong> which indicates that the software may not yet have achieved Stable quality.</p>
<p>If you are a software development manager, or en entrepreneur who produces software, please remember this advice: <em>There is no such thing as a Private Beta</em>. If it needs to be <em>Private</em> or <em>Limited</em>, then it&#8217;s not Beta quality yet. If it&#8217;s Beta, then it&#8217;s ready for unlimited use by the public. If your software is still Experimental or Alpha quality at the time you want to release it, then call it a &#8220;Preview Release&#8221; to be truthful about its quality.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrianotto.com/2013/02/no-such-thing-as-private-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ET Phone Home and Android in Space</title>
		<link>http://adrianotto.com/2013/02/et-phone-home-and-android-in-space/</link>
		<comments>http://adrianotto.com/2013/02/et-phone-home-and-android-in-space/#comments</comments>
		<pubDate>Sun, 10 Feb 2013 17:01:15 +0000</pubDate>
		<dc:creator>Adrian Otto</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://adrianotto.com/?p=660</guid>
		<description><![CDATA[Yes, I&#8217;m talking about an Android in space. No, I&#8217;m not talking about Star Trek. This Android is the kind of cell phone you carry in your pocket, and will be launched from Earth in a few weeks. Check out the BBC article about it. You might have heard news recently about the open source [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cdn.adrianotto.com/wp-content/uploads/2013/02/StarTrek.jpg"><img class="alignleft size-full wp-image-671" title="StarTrek" src="http://cdn.adrianotto.com/wp-content/uploads/2013/02/StarTrek.jpg" alt="" width="116" height="157" /></a>Yes, I&#8217;m talking about an Android in space. No, I&#8217;m not talking about Star Trek. This <a title="Android" href="http://www.android.com/" target="_blank">Android</a> is the kind of cell phone you carry in your pocket, and will be launched from Earth in a few weeks. Check out the <a title="BBC Article" href="http://www.bbc.co.uk/news/science-environment-21361204" target="_blank">BBC article</a> about it.</p>
<p>You might have heard news recently about the open source Linux operating system being used to control state of the art spacecraft and satellites. A new Linux driven satellite is being sent up soon that will have an Android phone on it. There is certainly an appeal to the open source nature of Android and its apps. Do you think the phone will hold up in the harsh environment of space?<a href="http://cdn.adrianotto.com/wp-content/uploads/2013/02/android.png"><img class="size-full wp-image-665 alignright" title="Android Logo" src="http://cdn.adrianotto.com/wp-content/uploads/2013/02/android.png" alt="" width="160" height="160" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://adrianotto.com/2013/02/et-phone-home-and-android-in-space/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why HTTP Basic Auth is Bad</title>
		<link>http://adrianotto.com/2013/02/why-http-basic-auth-is-bad/</link>
		<comments>http://adrianotto.com/2013/02/why-http-basic-auth-is-bad/#comments</comments>
		<pubDate>Thu, 07 Feb 2013 00:39:28 +0000</pubDate>
		<dc:creator>Adrian Otto</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://adrianotto.com/?p=647</guid>
		<description><![CDATA[The most simple way to restrict access to a resource on a web server is to use a method called HTTP Basic Authentication. This dates back to the 1996 definition of HTTP/1.0 which became the first widely accepted authentication scheme. This approach was not as secure as other schemes that were developed later. The current [...]]]></description>
			<content:encoded><![CDATA[<p>The most simple way to restrict access to a resource on a web server is to use a method called <a title="HTTP Basic Auth" href="http://en.wikipedia.org/wiki/Basic_access_authentication" target="_blank">HTTP Basic Authentication</a>. This dates back to the <a title="RFC-1945" href="http://tools.ietf.org/html/rfc1945" target="_blank">1996 definition of HTTP/1.0</a> which became the first widely accepted authentication scheme. This approach was not as secure as other schemes that were developed later. The current prevailing mechanism is to use <a title="Token Based Authentication" href="http://developergeeks.com/article/18/introduction-to-token-based-authentication" target="_blank">token based authentication</a>. The token is either provided by the web server, or a dedicated <a title="Openstack Keystone" href="http://wiki.openstack.org/Keystone">authentication service</a>.  The client either stores the token in a cookie value kept in the web browser, or sends it in specific HTTP request header for each web request. This is the prevailing method of authentication for cloud API services today. Another popular one is <a title="OAuth" href="http://oauth.net/" target="_blank">OAuth</a>.</p>
<p>I don&#8217;t like HTTP Basic Auth for a number of different reasons, and have avoided it for many years. When asked by a colleague today why I don&#8217;t like it, I began thinking of all the reasons why. Here is the full list:</p>
<p>1) HTTP Basic is less secure than a token based system because the username and password credentials are carried by every single request between the client and the server. Username and password credentials do not typically expire, and if they do, it&#8217;s not very often. Using a token allows the token to be regularly expired (typically in a number of minutes), and the actual account credentials are only ever transmitted between the client and the authentication service to acquire the valid token to start with, and upon expiration.</p>
<p>2) HTTP Basic is typically protected by routing all content over <a title="SSL" href="http://en.wikipedia.org/wiki/Secure_Sockets_Layer" target="_blank">SSL</a>/<a title="TLS" href="http://en.wikipedia.org/wiki/Transport_Layer_Security" target="_blank">TLS protocols.</a> Although SSL/TLS is assumed to be secure, it is possible to defeat their security, and it&#8217;s better not to depend on it for every request.</p>
<p>3) The effective attack surface for a system that supports HTTP Basic is much bigger than one that uses tokens issued from a central auth service.</p>
<ul>
<li>With HTTP Basic Auth, each web server needs to be able to validate usernames and passwords. This means that it must have a copy of the password hashes, or that it must have access to a remote system that can validate them. An attacker need only compromise any one of the service endpoints in order to intercept the credentials and potentially re-exploit a given account even after a significant period of time has elapsed.</li>
<li>The amount of server-side source code that could contain bugs that are vulnerable to security exploits will continue to grow over time as the system grows and new features are added, whereas if the auth service is standardized and centralized, it can be more easily protected, is less subject to change, and does not need to be scaled out to the same extent.</li>
</ul>
<p>4) For performance reasons, security credentials may need to be cached on the servers that handle high volumes of requests. This raises another set of concerns about keeping the cached data secure, and adds complexity to operational tasks such as the revocation of access to an account. If account information is widely cached, it may be complicated to remove it everywhere.</p>
<p>5) Systems that use token based authentication could offer a service over HTTP that does not use SSL/TLS for high performance use cases where the overhead of encryption is not acceptable. Special encrypted read-only tokens could be issued for this purpose. Such tokens could be carried in web browsers using cookies. With HTTP Basic, special read-only accounts would be needed to produce the equivalent. Automated password expiration in that case would be awkward, and usually impractical.</p>
<p>6) For web use cases, there is no good way to allow a web user to &#8220;log out&#8221; of an HTTP Basic Auth session. Although there are some <a title="Convouleted Workaround" href="http://stackoverflow.com/questions/6277919/logging-a-user-out-when-using-http-basic-authentication" target="_blank">convoluted</a> and <a title="Stupid Workadound" href="http://www.mavensecurity.com/documents/BasicAuthLogOut.pdf" target="_blank">stupid workarounds</a>, the only reliable method is to ask users to quit their web browser in order to log out. Yuck!</p>
<p>If there is any doubt, please don&#8217;t use HTTP Basic Auth. I&#8217;m asking you nicely.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrianotto.com/2013/02/why-http-basic-auth-is-bad/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Does SSD Power Savings Pay for Itself?</title>
		<link>http://adrianotto.com/2013/01/ssd-power-savings-pays-for-itself/</link>
		<comments>http://adrianotto.com/2013/01/ssd-power-savings-pays-for-itself/#comments</comments>
		<pubDate>Tue, 08 Jan 2013 21:09:51 +0000</pubDate>
		<dc:creator>Adrian Otto</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://adrianotto.com/?p=609</guid>
		<description><![CDATA[I wanted to determine how much power savings solid state storage (SSD) drives would offer over ordinary SATA hard drives. At first, I considered running a hardware experiment of my own, but changed my mind when a colleague of mine showed me that Tom&#8217;s Hardware already has benchmarks for SSD and benchmarks for SATA drives [...]]]></description>
			<content:encoded><![CDATA[<p>I wanted to determine how much power savings solid state storage (SSD) drives would offer over ordinary SATA hard drives. At first, I considered running a hardware experiment of my own, but changed my mind when a colleague of mine showed me that Tom&#8217;s Hardware already has <a title="SSD Benchmarks" href="http://www.tomshardware.com/charts/ssd-charts-2012/benchmarks,129.html" target="_blank">benchmarks for SSD</a> and <a title="SATA Benchmarks" href="http://www.tomshardware.com/charts/hdd-charts-2012/benchmarks,134.html" target="_blank">benchmarks for SATA</a> drives that reflect power consumption under different workloads. Each of the benchmarks has data for between 50 and 85 hard drives in a similar class, so I took averages of each of the classes, and produced a comparison chart:</p>
<p style="text-align: center;"><a href="http://cdn.adrianotto.com/wp-content/uploads/2013/01/SSD-vs-SATA-Power-Consumption.png"><img class="aligncenter size-large wp-image-610" title="SSD-vs-SATA-Power-Consumption" src="http://cdn.adrianotto.com/wp-content/uploads/2013/01/SSD-vs-SATA-Power-Consumption-1024x650.png" alt="" width="574" height="364" /></a></p>
<p style="text-align: left;">The workloads shown are:</p>
<ul>
<li>Idle: Power consumption after 10 minutes of system idle</li>
<li>Read: The system streaming an HD movie file</li>
<li>Database: While running a database benchmark (mixed read/write)</li>
<li>Max Write: Maximum Write Throughput of the drive</li>
</ul>
<p>I already knew that SSD drives used less power than rotational drives when idle/reading, but what surprised me is how much power savings they offer when under mixed and heavy write workloads. I think that a typical server would have about 50% idle time, and about 50% mixed use in a typical production workload. If that assumption is true, then the power consumption comparison would look something like this:</p>
<p style="text-align: center;"><a href="http://cdn.adrianotto.com/wp-content/uploads/2013/01/SSD-vs-SATA-Power-Consumption-Typical.png"><img class="aligncenter size-full wp-image-617" title="SSD-vs-SATA-Power-Consumption-Typical" src="http://cdn.adrianotto.com/wp-content/uploads/2013/01/SSD-vs-SATA-Power-Consumption-Typical.png" alt="" width="522" height="272" /></a></p>
<p style="text-align: left;"><img class="alignright size-full wp-image-621" title="54X" src="http://cdn.adrianotto.com/wp-content/uploads/2013/01/54X.png" alt="" width="251" height="116" />This tells us that SSD drives are <strong>5.4 times more energy efficient</strong> than ordinary SATA drives. There is a 5.24 Watt difference in power consumption between them. The more idle your servers are, the more dramatic this difference will be. Most enterprise workloads are surprisingly idle, so this should actually be a conservative picture of the actual difference. This convinced me that today&#8217;s SSD drives do in fact use a lot less power than SATA drives. The SSD drives also cost a lot more. There have been plenty of studies on the relative performance of SSD versus SATA for various workloads, and there are clear performance advantages to using them for a variety of reasons. Rather than look at that some more, I decided to pursue the answer to a question that your CFO would like to know:</p>
<p style="text-align: left;"><em><strong>Can the additional cost of SSD drives be offset by energy savings alone?</strong></em></p>
<p style="text-align: left;">To judge the cost savings, imagine you have a room full of servers. Let&#8217;s say you have 500 servers running in a single data center, and you want to remove all SATA drives and replace them with SSD drives to conserve power, and allow you to maybe pack in some more servers before you build a new data center. Let&#8217;s see how this would work. If you assume that each sever consumes 250 Watts of power, and that each one has 4 hard drives installed in it on average, then perhaps you could save 5.24 x 4 = 20.96 Watts for each server or 20,960 Watts for your data center.</p>
<p style="text-align: left;"><a title="Electricity Costs" href="http://michaelbluejay.com/electricity/cost.html">Electricity costs vary</a> depending on where you buy it, and how much you buy. In Los Angeles, <a title="Los Angeles Electricity Costs" href="http://www.bls.gov/ro9/cpilosa_energy.htm" target="_blank">prices are about $0.20 per Kilowatt Hour</a>. If you have a data center that pays a lot less, then the savings will be less dramatic for you. Your servers run 24 x 7 x 365, so the total annual electricity to buy for our example data center is:</p>
<p style="text-align: left;">250 Watts x 24 x 365 x 500 Servers = 1,095,000,000 / 1000 = 1,095,000 Kilowatt Hours</p>
<p style="text-align: left;">1,095,000 Kilowatt Hours @ $0.20 each = $219,000 annually</p>
<p style="text-align: left;">It my actually cost more than this to both power and cool the equipment, but the savings ratios are the same regardless. The costs are directly proportional to the power consumption.</p>
<p style="text-align: left;">Your SSD hard drives in this scenario would save you about:</p>
<p style="text-align: left;">20.96 Watts x 24 x 365 x 500 Servers / 1000 = 91,805 Kilowatt Hours</p>
<p style="text-align: left;">91,805 Kilowatt Hours @ $0.20 = $18,361 annually</p>
<p style="text-align: left;">If your hard drives last you five years, then that&#8217;s about $127,195 in electricity cost savings over the life of the equipment. If you picked SSD hard drives that <a title="Price vs. Performance for SSD Drives" href="http://www.tomshardware.com/charts/ssd-charts-2012/Performance-per-Watt,2815.html" target="_blank">cost about $250 each</a>, then you would have spent:</p>
<p style="text-align: left;">500 Servers x 4 SSD Drives x $250 = $500,000</p>
<p style="text-align: left;">Guess what&#8230; the savings over 5 years by using SSD drives exclusively instead of SATA <strong>does not</strong> justify the cost of the drives to begin with. Perhaps if you could source SSD drives at $62 each, then you might have a compelling reason to switch to SSD technology for power savings. When you buy power in large volumes, it can cost less, so that can widen the price gap further. I suppose this is why we don&#8217;s see SATA drives piling up in dumpsters across the country. You can perform your own analysis for your particular situation. <strong style="text-align: left;"></strong></p>
<p style="text-align: left;">Data centers are expensive to build. The most expensive parts of them are the power and cooling infrastructure.<img class="size-full wp-image-629 alignleft" title="1-2-3-Reasons-for-SSD" src="http://cdn.adrianotto.com/wp-content/uploads/2013/01/1-2-3-Reasons-for-SSD.png" alt="" width="311" height="272" /> If your data center is &#8220;full&#8221; because your power/cooling capacity is maxed out, you can swap out your SATA hard drives for SSD drives. You may reclaim about 8% of your power capacity allowing you to add more servers. Less power consumption means less heat produced, so it&#8217;s like getting a bigger data center. In my example above, there would be enough power capacity freed up to allow <strong>40 more servers</strong> to be installed at the original power consumption level. The additional capacity afforded to you by using SSD drives may be worth a small fortune to you.</p>
<p style="text-align: left;">There are at least three good reasons for using SSD drives in servers. I suggest giving it some serious consideration.</p>
<p style="text-align: left;"><strong>Reasons why NOT to switch to SSD drives</strong></p>
<ol>
<li>If you need a lot of storage. The cost per GB of the SSD storage is considerably higher than the cost per GB of SATA storage, even considering the performance and power savings.</li>
<li>If you are constantly writing to the hard drives over and over. SSD drives to have a limited duty cycle, and in general may be less durable than regular hard drives. Eventually they do wear out, just for different reasons than drives with moving parts. However, most of the drives that are on the market today are rated for MTBF durability that&#8217;s comparable to what traditional hard drives offer.</li>
<li>You run your data center on solar power (yeah, sure you do). Seriously, if your cost for power is dirt cheap, and you need a lot of storage, then regular hard drives may be a better value for you.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://adrianotto.com/2013/01/ssd-power-savings-pays-for-itself/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Openstack Presentation</title>
		<link>http://adrianotto.com/2012/06/openstack-presentation/</link>
		<comments>http://adrianotto.com/2012/06/openstack-presentation/#comments</comments>
		<pubDate>Fri, 08 Jun 2012 17:59:48 +0000</pubDate>
		<dc:creator>Adrian Otto</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://adrianotto.com/?p=593</guid>
		<description><![CDATA[Last night I presented to the Los Angeles chapter of the UNIX Users Association of Southern California group. The event was held in Culver City, attended by 35 members of the UUASC and Openstack-LA meetup groups. There was a 45 minute long Q&#38;A session, which shows just how interested people are in OpenStack and what it [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.openstack.org"><img class="alignright size-full wp-image-356" title="OpenStack" src="http://cdn.adrianotto.com/wp-content/uploads/2010/09/openstacklogo.jpg" alt="" width="290" height="299" /></a>Last night I presented to the Los Angeles chapter of the <a title="UUASC" href="http://uuasc.org/" target="_blank">UNIX Users Association of Southern California</a> group. <a title="Meetup Event" href="http://www.meetup.com/UUASC26/events/62932982/" target="_blank">The event</a> was held in Culver City, attended by 35 members of the <a title="UUASC" href="http://www.meetup.com/UUASC26/" target="_blank">UUASC</a> and <a title="OpenStack-LA" href="http://www.meetup.com/OpenStack-LA/" target="_blank">Openstack-LA</a> meetup groups. There was a 45 minute long Q&amp;A session, which shows just how interested people are in <a title="Openstack" href="http://www.openstack.org" target="_blank">OpenStack</a> and what it means for cloud computing. I have also posted my slides from the talk. Just click on the title slide below to download them in PDF format.</p>
<p><a href="http://www.aotto.com/pdf/OpenStack_UUASC-LA_2012-06-07.pdf"><img class="size-full wp-image-598 alignleft" title="Openstack Presentation Slides" src="http://cdn.adrianotto.com/wp-content/uploads/2012/06/Screen-shot-2012-06-08-at-10.56.18-AM.png" alt="" width="270" height="206" /></a></p>
<p><a href="http://www.meetup.com/UUASC26/events/62932982/"><img class="alignnone size-full wp-image-602" title="Openstack Presentation Rating" src="http://cdn.adrianotto.com/wp-content/uploads/2012/06/Screen-shot-2012-06-08-at-11.00.25-AM.png" alt="Openstack Presentation Rating" width="171" height="27" /></a></p>
<p>The talk appears to be getting good ratings, so I may give similar presentations to other groups, or speak more about related topics with UUASC. If you attended this talk and want to make suggestions for topics to consider for the next one, please comment below.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://adrianotto.com/2012/06/openstack-presentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to shrink a Windows VM in XenServer</title>
		<link>http://adrianotto.com/2012/04/how-to-shrink-a-windows-vm-in-xenserver/</link>
		<comments>http://adrianotto.com/2012/04/how-to-shrink-a-windows-vm-in-xenserver/#comments</comments>
		<pubDate>Sun, 08 Apr 2012 00:02:36 +0000</pubDate>
		<dc:creator>Adrian Otto</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://adrianotto.com/?p=584</guid>
		<description><![CDATA[When I was told that you could only grow (not shrink) the storage volume for a running Windows VM in XenCenter, I took that as a challenge. Guess what, there is a way to shrink it! Here is how: Use XenCenter to add a new disk to the existing VM, making it the size you [...]]]></description>
			<content:encoded><![CDATA[<p>When I was told that you could only grow (not shrink) the storage volume for a running Windows VM in XenCenter, I took that as a challenge. Guess what, there is a way to shrink it! Here is how:</p>
<ol>
<li>Use XenCenter to add a new disk to the existing VM, making it the size you want to srink the current server to.</li>
<ul>
<li>Select the VM from the list on the right, click Storage.</li>
<li>Click &#8220;Add&#8230;&#8221; and create the new volume the size you want it.</li>
</ul>
<li>Log into the VM, (you can use the Console tab in XenCenter) and start &#8216;Disk Management&#8217; and Initialize the new disk.</li>
<ul>
<li>You can find it in Start-&gt;Administrative Tools-&gt;Computer Management.</li>
<li>Click on the new disk. Mine showed up as &#8220;Disk 1, Unknown&#8230; Not Initialized&#8221;.</li>
<li>If you click on the words &#8220;Not Initialized&#8221; it will be selected.</li>
<li>Next select Action-&gt;All Tasks-&gt;Initialize Disk. Select MBR and OK.</li>
</ul>
<li>Format a new partition on your new volume (you might be able to skip this step, did not try).</li>
<ul>
<li>Right click on the black &#8220;Unallocated&#8221; partition.</li>
<li>Select &#8220;New Simple Volume&#8221;.</li>
<li>Click Next twice, the size will be defaulted to the full disk, and specify a new drive letter.</li>
<li>In my example, I use E:\.</li>
<li>Format as NTFS using Quick Format, and click Finish.</li>
<li>Once you see formatting finish, and the new partition turns blue and is marked &#8220;Healthy&#8221; (Primary Partition). Proceed to the next step.</li>
</ul>
<li>In the VM, download and run XenConvert.</li>
<ul>
<li>I used version 2.4.1.</li>
<li>It requires Microsoft .NET v4.0, so you may need to download that from Microsoft and install it before running XenConvert.</li>
</ul>
<li>Start XenConvert and select From: Volume and To: Volume.</li>
<ul>
<li>Set the Source Volume to your boot drive (C:).</li>
<li>Set the Destination Volume to your new drive (E:).</li>
<li>Say &#8220;Yes&#8221; to the warning about losing free space.</li>
<li>Click Convert, and accept the warning about erasing data on your Destination volume (E:)</li>
<li>Go have a coffee, or something, and come back later.</li>
</ul>
<li>When XenConvert is finished, use &#8220;Disk Management&#8221; again in the VM to activate the new partition.</li>
<ul>
<li>Right Click the new partition and select &#8220;Mark Partition As Active&#8221;.</li>
</ul>
<li>Shut down the VM.</li>
<ul>
<li>I did this from inside the VM using Start-&gt;Shut down.</li>
</ul>
<li>Now re-order the drives on the VM so the new drive is in position 0.</li>
<ul>
<li>In XenCenter, select the VM, and select the Storage tab.</li>
<li>Detach the original drive by selecting it and clicking the &#8220;Detach&#8221; button.</li>
<li>Select the new drive, and click Properties, and set the Position to 0.</li>
</ul>
<li>Now you can boot the VM and voila! It&#8217;s now srunken to the size you wanted.</li>
<ul>
<li>If it all works the way you want it you can go delete the original drive in XenCenter to reclaim the space.</li>
</ul>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://adrianotto.com/2012/04/how-to-shrink-a-windows-vm-in-xenserver/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Maximizing Elasticity in the Cloud</title>
		<link>http://adrianotto.com/2011/10/maximizing-elasticity-in-the-cloud/</link>
		<comments>http://adrianotto.com/2011/10/maximizing-elasticity-in-the-cloud/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 14:35:33 +0000</pubDate>
		<dc:creator>Adrian Otto</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[Cassandra]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[scalability]]></category>

		<guid isPermaLink="false">http://adrianotto.com/?p=571</guid>
		<description><![CDATA[Running a production application in the cloud can be great because it&#8217;s possible to add and remove servers from a cluster dynamically using a provisioning API. These automatic additions and removals can be triggered by system utilization levels that you measure, such as concurrent network connections, memory utilization, or CPU utilization. When you need more [...]]]></description>
			<content:encoded><![CDATA[<p>Running a production application in the cloud can be great because it&#8217;s possible to add and remove servers from a cluster dynamically using a provisioning API. These automatic additions and removals can be triggered by system utilization levels that you measure, such as concurrent network connections, memory utilization, or CPU utilization. When you need more capacity, you can add more servers, and when they are not needed anymore, you simply turn them back off. You only pay for the time those servers were running, so it&#8217;s more economic than having a large number of servers deployed all the time.</p>
<p>Most simple web clusters rely on a single database sever that all the application servers connect to. This way, all of the application servers have concurrent access to the same data. This can be problematic in the elastic use case when workloads increase, and more servers are added to the cluster. If the work is bottle-necked on storing or accessing data in the database server, adding additional application servers will not help. It will actually make the problem worse.</p>
<p>I spoke on a panel at Zendcon yesterday, which was covered in an <a title="Infoworld Article" href="http://www.infoworld.com/d/cloud-computing/security-remains-top-concern-cloud-app-builders-176707" target="_blank">Infoworld article</a> where my remarks were published. The article says:</p>
<blockquote><p>Panelists also debated use of SQL and database connectivity in clouds. SQL as a design pattern for storage &#8220;is not ideal for cloud applications,&#8221; said Adrian Otto, senior technical strategist for Rackspace Cloud. Afterward, he described SQL issues as &#8220;typically the No. 1 bottleneck&#8221; to elasticity in the cloud. With elasticity, applications use more or fewer application servers based on demand. Otto recommended that developers who want elasticity should have a decentralized data model that scales horizontally. &#8220;SQL itself isn&#8217;t the problem. The problem is row-oriented data in an application,&#8221; which causes performance bottlenecks, said Otto.</p></blockquote>
<p>The author Paul Krill did a good job here of accurately reporting my position on this subject. Data stored in databases are arranged in tables of rows and columns. A new piece of data adds a new row. Each row has multiple columns that separate fields of a single record of data in the table. The truth is that most web applications work very well with this data design pattern. Those should continue to use SQL databases with row oriented data. However, there are some applications where data may be arranged differently to make reading the data more efficient.</p>
<p>If you have a big table of data, and you want to pull out just a little bit of it using a query, the database server must determine the location of that data in the table by consulting the table&#8217;s index, and return the desired portion that matches the constraints given in the query. This makes the reading of data relatively expensive from a computational perspective. If data were instead arranged in lots of columns instead, it could be retrieved more efficiently, and the data could be more easily distributed over a larger number of servers yielding the horizontal scalability that cloud applications want. This works very well in cases where the number of reads are very high, but the data is not updated very frequently in proportion to the reads.</p>
<p>Let&#8217;s use a blog application as an example. Blog posts are written once, and maybe updated a few times, possibly once each time a comment is submitted. However, on a busy web site, a blog post may be read millions of times. If the posts were stored in a column oriented storage system like <a title="Cassandra" href="http://cassandra.apache.org/" target="_blank">Cassandra</a>, they could be quickly and easily retrieved using the id number of the blog post. The listing of recent blog posts can also be arranged in a column so that the front page of the blog site with the listing of the articles can be generated. Using this approach requires that the data be properly arranged as it&#8217;s stored, putting the computational burden on the (infrequent) write rather than on the (frequent) read.</p>
<p>Using a distributed system to store data in columns allows the data to be evenly distributed over an arbitrary number of servers, eliminating the central data bottleneck. Adding more servers in the correct proportion of application servers and storage servers can result in true horizontal scalability, meaning that the capacity increases as a direct proportion of how many servers are in the cluster.</p>
<p>Why doesn&#8217;t everyone do this already? For some good reasons:</p>
<ol>
<li>The concept of running applications in clouds is still relatively new. The related technology is still maturing.</li>
<li>Existing software tends to use SQL already. If you want to use an existing CMS platform, chances are it will require a central SQL database.</li>
<li>Most heavy-read workloads can be scaled well using data caching techniques. If applications don&#8217;t write data very often, it may not be necessary to scale beyond a single database server.</li>
<li>You must anticipate exactly how the application will use the data, and arrange it just right.</li>
<li>It may be harder to analyze the data. Once your data is arranged in a column store, you may not be able to query it in arbitrary ways. You may only be able to pull it out using it&#8217;s id numbers, or by systematically scanning all of it to find the parts you want.</li>
<li>Distributed data storage (aka: NoSQL) systems like Cassandra, Hbase, Redis, etc. are complicated, and there is a considerable learning curve associated with setting them up and maintaining them. In some cases these systems are not as good in terms of data durability or data consistency as the prevailing SQL database systems. These tradeoffs can be difficult to navigate.</li>
<li>Today&#8217;s software developers are very familiar with SQL as a data storage and access paradigm. They can very quickly develop software that relies on the ACID qualities of a SQL database.</li>
</ol>
<p>If you have an application that you want to deploy into a cloud, and you want it to be very elastic, you should think about the subject of how you arrange your data. If you use a centralized data design, you will probably have scalability bottlenecks when you add lots of servers. You should aim to decentralize the data in a way that you can easily add more servers to horizontally scale the environment, and not stumble on the limits of the database server. This is particularly important in situations where you need the application to write a lot of data, and a cache is not a suitable solution for you.</p>
<p>Over time, the reasons why not to use column oriented data will begin to shrink, and better tools and services will make it easier to do. Until then, I suggest that you carefully consider if you need maximum elasticity. If not, then it&#8217;s perfectly appropriate to keep using the same centralized row-oriented data paradigm. Use a cache like memcached in cases where you have heavy reads, and when it&#8217;s acceptable to show slightly outdated information to readers. The truth is that traditional solutions work really well for most web applications. However, if you have one of the more unique situations where you need true horizontal scalability, take a good look at a different arrangement for your data, and the systems and tools to make that possible for you in the cloud.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrianotto.com/2011/10/maximizing-elasticity-in-the-cloud/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Better Luhn Formula CC Validator for PHP</title>
		<link>http://adrianotto.com/2011/10/better-luhn-formula-validator-for-php/</link>
		<comments>http://adrianotto.com/2011/10/better-luhn-formula-validator-for-php/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 04:33:31 +0000</pubDate>
		<dc:creator>Adrian Otto</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://adrianotto.com/?p=527</guid>
		<description><![CDATA[I was doing some work integrating with a payment gateway in a PHP application, and decided it would be a good idea to validate credit card numbers using a Luhn Algorithm formula prior to forwarding them to the payment gateway for processing. I looked for existing PHP ones, and found a few. The more I [...]]]></description>
			<content:encoded><![CDATA[<p>I was doing some work integrating with a payment gateway in a PHP application, and decided it would be a good idea to validate credit card numbers using a <a href="http://en.wikipedia.org/wiki/Luhn_algorithm" title="Luhn Algorithm" target="_blank">Luhn Algorithm</a> formula prior to forwarding them to the payment gateway for processing. I looked for existing PHP ones, and found a few.</p>
<p>The more I <a href="http://javier.rodriguez.org.mx/index.php/2005/12/26/luhn-algorithm-in-php" target="_blank" title="Bad Example">found</a> the less I liked any of them. Some of them actually had bugs or typos and did not work at all, and most of them would incorrectly validate a credit card number that was all zeros.</p>
<p>I wrote my own that I&#8217;m pretty happy with. It&#8217;s a good deal more efficient that most that I found. It does not repeat the same math on the same figures like some of them out there do.</p>
<div style="font-size: 0.8em"><code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php</p>
<p></span><span style="color: #FF0000">/*<br />
&nbsp;*&nbsp;&nbsp;&nbsp;Copyright&nbsp;2011&nbsp;Adrian&nbsp;Otto<br />
&nbsp;*<br />
&nbsp;*&nbsp;&nbsp;&nbsp;Licensed&nbsp;under&nbsp;the&nbsp;Apache&nbsp;License,&nbsp;Version&nbsp;2.0&nbsp;(the&nbsp;"License");<br />
&nbsp;*&nbsp;&nbsp;&nbsp;you&nbsp;may&nbsp;not&nbsp;use&nbsp;this&nbsp;file&nbsp;except&nbsp;in&nbsp;compliance&nbsp;with&nbsp;the&nbsp;License.<br />
&nbsp;*&nbsp;&nbsp;&nbsp;You&nbsp;may&nbsp;obtain&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;License&nbsp;at<br />
&nbsp;*<br />
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.apache.org/licenses/LICENSE-2.0<br />
&nbsp;*<br />
&nbsp;*&nbsp;&nbsp;&nbsp;Unless&nbsp;required&nbsp;by&nbsp;applicable&nbsp;law&nbsp;or&nbsp;agreed&nbsp;to&nbsp;in&nbsp;writing,&nbsp;software<br />
&nbsp;*&nbsp;&nbsp;&nbsp;distributed&nbsp;under&nbsp;the&nbsp;License&nbsp;is&nbsp;distributed&nbsp;on&nbsp;an&nbsp;"AS&nbsp;IS"&nbsp;BASIS,<br />
&nbsp;*&nbsp;&nbsp;&nbsp;WITHOUT&nbsp;WARRANTIES&nbsp;OR&nbsp;CONDITIONS&nbsp;OF&nbsp;ANY&nbsp;KIND,&nbsp;either&nbsp;express&nbsp;or&nbsp;implied.<br />
&nbsp;*&nbsp;&nbsp;&nbsp;See&nbsp;the&nbsp;License&nbsp;for&nbsp;the&nbsp;specific&nbsp;language&nbsp;governing&nbsp;permissions&nbsp;and<br />
&nbsp;*&nbsp;&nbsp;&nbsp;limitations&nbsp;under&nbsp;the&nbsp;License.<br />
&nbsp;*/</p>
<p></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">luhn_validate</span><span style="color: #007700">(</span><span style="color: #0000BB">$s</span><span style="color: #007700">)&nbsp;{<br />
&nbsp;&nbsp;if(</span><span style="color: #0000BB">0</span><span style="color: #007700">==</span><span style="color: #0000BB">$s</span><span style="color: #007700">)&nbsp;{&nbsp;return(</span><span style="color: #0000BB">false</span><span style="color: #007700">);&nbsp;}&nbsp;</span><span style="color: #FF0000">//&nbsp;Don't&nbsp;allow&nbsp;all&nbsp;zeros<br />
&nbsp;&nbsp;</span><span style="color: #0000BB">$sum</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />
&nbsp;&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">=</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$s</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000">//&nbsp;Find&nbsp;the&nbsp;last&nbsp;character<br />
&nbsp;&nbsp;</span><span style="color: #007700">while&nbsp;(</span><span style="color: #0000BB">$i</span><span style="color: #007700">--&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)&nbsp;{&nbsp;</span><span style="color: #FF0000">//&nbsp;Iterate&nbsp;all&nbsp;digits&nbsp;backwards<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$sum</span><span style="color: #007700">+=</span><span style="color: #0000BB">$s</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">];&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000">//&nbsp;Add&nbsp;the&nbsp;current&nbsp;digit<br />
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;the&nbsp;digit&nbsp;is&nbsp;even,&nbsp;add&nbsp;it&nbsp;again.&nbsp;Adjust&nbsp;for&nbsp;digits&nbsp;10+&nbsp;by&nbsp;subtracting&nbsp;9.<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">==(</span><span style="color: #0000BB">$i</span><span style="color: #007700">%</span><span style="color: #0000BB">2</span><span style="color: #007700">))&nbsp;?&nbsp;(</span><span style="color: #0000BB">$s</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">4</span><span style="color: #007700">)&nbsp;?&nbsp;(</span><span style="color: #0000BB">$sum</span><span style="color: #007700">+=(</span><span style="color: #0000BB">$s</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">]-</span><span style="color: #0000BB">9</span><span style="color: #007700">))&nbsp;:&nbsp;(</span><span style="color: #0000BB">$sum</span><span style="color: #007700">+=</span><span style="color: #0000BB">$s</span><span style="color: #007700">[</span><span style="color: #0000BB">$i</span><span style="color: #007700">])&nbsp;:&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;<br />
&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;return&nbsp;(</span><span style="color: #0000BB">0</span><span style="color: #007700">==(</span><span style="color: #0000BB">$sum</span><span style="color: #007700">%</span><span style="color: #0000BB">10</span><span style="color: #007700">))&nbsp;;<br />
}&nbsp;</p>
<p></span><span style="color: #0000BB">?&gt;</span><br />
</span><br />
</code></div>
<p>The function contains 7 lines of code. Can you make this function better without making it harder to read and understand? Please let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrianotto.com/2011/10/better-luhn-formula-validator-for-php/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>I&#8217;m Paranoid, just like you!</title>
		<link>http://adrianotto.com/2011/10/im-paranoid-just-like-you/</link>
		<comments>http://adrianotto.com/2011/10/im-paranoid-just-like-you/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 00:04:05 +0000</pubDate>
		<dc:creator>Adrian Otto</dc:creator>
				<category><![CDATA[Cloud]]></category>

		<guid isPermaLink="false">http://www.adrianotto.com/?p=13</guid>
		<description><![CDATA[By: Adrian Otto Over the years I’ve administered email systems that provided service to thousands of end user’s mailboxes. In the early years in the 1990’s most woes of a mail system administrator were about how to instrument the setting up of email accounts and related client settings, and changing passwords when they were forgotten [...]]]></description>
			<content:encoded><![CDATA[<p>By: Adrian Otto</p>
<p>Over the years I’ve administered email systems that provided service to thousands of end user’s mailboxes. In the early years in the 1990’s most woes of a mail system administrator were about how to instrument the setting up of email accounts and related client settings, and changing passwords when they were forgotten by end users.</p>
<p>As the internet became more and more commercialized, spam exploded in our face. Everyone hates spam. Mail administrators hate it with a passion. They are doing everything they can to try and fight it&#8230; they filter, they black-hole, they tattle to abuse@whatever.com about it. Sometimes their own users send spam, and they get black-holed and need to jump through hoops to undo the damage.</p>
<p>At the time I reached my breaking point I managed email for about a dozen domain names, probably about two hundred mailboxes in total. I hated it. I hated every waking moment of it. The RBL’s that worked one day did not work the next. I’m convinced that e-mail system administration is the nastiest dirtiest job there is for a sysadmin.</p>
<p>People kept suggesting to me that I outsource email, which I shrugged off. I had problems with outsourcing:</p>
<p style="padding-left: 30px;"><strong>1) I’m Paranoid about Uptime.<br />
</strong></p>
<p style="padding-left: 30px;">It’s hard for me to trust other people, let alone trust a company. And trusting a company with something as important as my email??? No way. I’m a control freak, and I was going to keep control at all costs. Yes, I hated email system administration. I wasn’t even a sysadmin any more, but I still did it just so that I could control it. It needed to be highly available. I simply could not trust anyone to do it better than me.</p>
<p style="padding-left: 30px;"><strong>2) I’m Paranoid about Security.<br />
</strong></p>
<p style="padding-left: 30px;">Although email is inherently an insecure communication mechanism, all sorts of highly sensitive information is in there anyway. What would happen if a competitor would somehow get control of our email and read it. They could learn all of our secrets. No way, I’m keeping control of the security so that I know it’s locked down as much as humanly possible.</p>
<p style="padding-left: 30px;"><strong>3) I’m Paranoid about Reliability and Control.<br />
</strong></p>
<p style="padding-left: 30px;">If something goes wrong, I want to be able to fix it quick. If I host it, I have full control of everything in the system. I can find what’s wrong and fix it fast. I’m really good at that.</p>
<p>I became a source code contributor for an open source email filtering system called bogofilter that uses Bayes filters to learn what’s spam and what’s not and filter based on that. I thought my spam filtering setup was the bomb! It worked great!</p>
<p>I got busier and busier with my work. I administered my email systems less and less. The better they worked, the less I would work on them because I had other fish to fry. The spammers got smarter and smarter, and soon enough my super cool spam filtering setup was becoming less and less effective.</p>
<p>So in 2006 something happened. I got super frustrated with spam administration. I was tired of having to keep finding or inventing better mouse traps to trap that nasty spam. So I thought to myself&#8230; There is an unlimited desire to send spam. Why? Because it works. If it did not work, the spammers would not be so determined to keep doing it. They are doing everything they can to outsmart you to get mail in your inbox. They keep getting smarter and smarter.</p>
<p>I thought some more&#8230; It’s like viruses. The hackers keep making better viruses, and the virus scanner software companies keep making their virus scanners better to clean them up and block them out. I needed something like virus scan, but for my email. I thought about all the technical ways to do it. I started hunting the web to find answers. I just wanted SOMEONE&#8230; anyone to handle this spam nonsense for me.</p>
<p>In the process, I stumbled across a company called “Webmail.us” (Later acquired by <a href="http://www.rackspace.com" target="_blank">Rackpace</a> and now called “<a href="//www.rackspace.com/email_hosting" target="_blank">Rackspace Email</a>”). They had a great web site, said (at the time) they had 700,000 mailboxes in service. They had a complete spam filtering solution built in. The mailbox hosting was cheap. So cheap I could not ignore it. They were charging less for complete hosting of mailboxes than I was willing to pay for outsourced spam filtering.</p>
<p>In 2006 I did an experiment. I put my own domain name where I get my home email on webmail.us to see how it worked. I told myself that if it worked really well that I might switch all my email over to it, and wash my hands of email sysadmin work and all the spam nonsense that goes along with it. I did it for a month. It worked great. It was fast, it never went down. I got no spam. I was thrilled!</p>
<p><strong>I did the unthinkable. I outsourced my email!</strong></p>
<p>One by one I migrated all of my domains, and all my mail users over to the hosted system. I have never looked back. The system has been rock solid. The few problems I’ve seen over the past three years have been really minor, and solved more quickly than I would have been able to solve using my own systems. I had been converted.</p>
<p>I was so happy to finally be free of all the nuisance of administering email and spam filtering systems. It was great. Years later I ended up working with Rackspace, and told them the story of how I used and loved the email platform. I later met the people behind the system, and it was no wonder that it works as well as it does.</p>
<p><strong>If you are still administering your own email&#8230;</strong> especially if you are running an Exchange system in your own office building. You need to take a serious look in the mirror and ask yourself why you are not outsourcing it to <a href="//www.rackspace.com/email_hosting" target="_blank">Rackspace Email</a>. The truth is:</p>
<p style="padding-left: 30px;">1) It’s more expensive to host it internally. Run the numbers.<br />
2) Your uptime it a lot worse. Measure it.<br />
3) Your security is no stronger. Audit it.<br />
4) You are paranoid, just like me. Yes, you are.</p>
<p>You trust your bank with your money. You trust your phone company not to spy on all your phone calls. You do this stuff without worrying about it. These things are much bigger leaps of trust than outsourcing your email.</p>
<p>From me to you&#8230; do yourself a favor. Run the same experiment I did. You’ll be delighted. I work for Rackspace now, so my view is corrupt, right? Don&#8217;t take my word for it, because you&#8217;re paranoid. Just try it and see.</p>
]]></content:encoded>
			<wfw:commentRss>http://adrianotto.com/2011/10/im-paranoid-just-like-you/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced
Database Caching using disk: basic
Object Caching 553/661 objects using disk: basic
Content Delivery Network via cdn.adrianotto.com

Served from: adrianotto.com @ 2013-05-21 01:02:43 -->