<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss 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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"  xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>SoftwareProjects - Internet Marketing and Web Development</title>
	<link>http://www.softwareprojects.com/images/logo.png</link>
	<description>Internet Marketing and Web Development</description>

	<generator>http://www.softwareprojects.com</generator>
	<language>en</language>

		<copyright>SoftwareProjects Inc</copyright>
		<managingEditor>support@softwareprojects.com (Adrian Singer)</managingEditor>
		<webMaster>support@softwareprojects.com</webMaster>
		<category>SoftwareProjects</category>
		<ttl>3000</ttl>

		<image>
			<url>http://www.softwareprojects.com/images/logo.png</url>
			<title>SoftwareProjects - Internet Marketing and Web Development</title>
			<link>http://www.softwareprojects.com/images/logo.png</link>
			<width>142</width>
			<height>55</height>

		</image>

<item>
<title><![CDATA[Tracking Retention in Google Analytics]]></title>
<link>http://www.softwareprojects.com/resources/analytics-plan-monitor-control/t-tracking-retention-in-google-analytics-2063.html</link>
<pubDate>Tue, 29 Jan 2013 21:02:10 GMT</pubDate>
<dc:creator><![CDATA[Mike Peters]]></dc:creator>
<category><![CDATA[Analytics: Plan - Monitor - Control]]></category>
<guid isPermaLink="false">http://www.softwareprojects.com/resources/analytics-plan-monitor-control/t-tracking-retention-in-google-analytics-2063.html</guid>
<description><![CDATA[Tracking <b>retention rates</b> or cohort analysis, is the best way to visualize your site's addict-ability.  <br />
<br />
User retention tends to be an area where people pay the least amount of attention, but I think is one of the most important to monitor.  I would argue that the single most telling metric for a great product is how many of them become dedicated, repeat users. <br />
<br />
If you fail to retain users over time, traffic will never generate a "snow ball" effect.  Your glass-ceiling becomes limited to the arbitrage difference between the cost of traffic and ad revenues.<br />
<br />
Focus on continually improving your retention rates and you'll be well on your way to building a mega successful site.  <br />
<br />
First step is to monitor your retention rate numbers.  As they say - "What doesn't get measured, Doesn't get done".  <br />
<br />
The goal is to have the data you need to generate a cohort report like this one:<br />
<br />
<img src="http://www.softwareprojects.com/blogimages/0abf0f7f19.png" border="0" alt="" /><br />
<br />
In this post, I'll describe how to use Google Analytics, for  cohort analysis.<br />
<br />
<b>Don't be fooled by Google's Returning visitors numbers</b><br />
<br />
Google Analytics appears to provide information about visitor retention through the New vs. Returning visitors report.<br />
<br />
That report shows you the proportion of returning visitors.  You could set your date range for January, note the percentage of returning visitors, and then set the date range for February, hoping that the percentage of returning visitors has increased.  <br />
<br />
But what happens if you retain all your January visitors, but drive a ton of new visitors to the site in February?  Your proportion of returning-to-new visitors will go down even though you're retaining visitors!<br />
<br />
Additionally, if your funnel involves users leaving the site (to "Facebook-Connect" for example), Google Analytics could confuse that with a user leaving the site.<br />
<br />
<b>Tagging visitors</b><br />
<br />
For proper cohort analysis, we need a way to "tag" users, segmenting them into groups based on the date of first visit.<br />
<br />
We'll then be able to look at the group of new users generated on  a given month and see how long they stuck around:<br />
<br />
<img src="http://www.softwareprojects.com/blogimages/fc6a4e405b.png" border="0" alt="" /><br />
<br />
Google Analytics custom variables and events, lets us put it all together.<br />
<br />
<b>Step 1 - Install Google Analytics</b><br />
<br />
Signup for <a href="http://www.google.com/analytics/" target="_blank">Google Analytics</a> (it's free) and create an account for your site.<br />
<br />
Add the Google Analytics code to all pages on your site.<br />
<br />
Generally this means adding the code to your footer include file.<br />
<br />
<b>Step 2 - Pulse script</b><br />
<br />
Save this script under the root folder of your site:<br />
<br />
pulse.php<br />
<div style="margin:10px;  padding:4px; border:1px inset; background-color: #FDF8EB">

	<span style="margin:0px; width:550px; padding:4px;  overflow:auto; "><font face="courier new">  <br />putenv</span><span style="color: #006600">(</span><span style="color: #CC0000">'TZ=America/New_York'</span><span style="color: #006600">);<br /></span><span style="color: #0000CC">header</span><span style="color: #006600">(</span><span style="color: #CC0000">'Content-type: application/json'</span><span style="color: #006600">);<br /><br />die(</span><span style="color: #CC0000">"if(typeof pulseCallback=='function')"</span><span style="color: #006600">.<br /></span><span style="color: #CC0000">' pulseCallback({"pulse":"'</span><span style="color: #006600">.</span><span style="color: #0000CC">date</span><span style="color: #006600">(</span><span style="color: #CC0000">'Y-m-d'</span><span style="color: #006600">).</span><span style="color: #CC0000">'"});'</span><span style="color: #006600">);  </span><span style="color: #0000CC"></font></span></div>
<br />
Note that I'm assuming your server supports PHP.  If you're using a different server-side scripting language, find a geek who can help or <a href="http://www.softwareprojects.com/support_email.php" target="_blank">contact us</a>.<br />
<br />
<b>Step 3 - Store custom variable in Google Analytics</b><br />
<br />
Add this javascript code to the footer of all pages: <br />
<div style="margin:20px; margin-top:5px">
	<div class="smallfont" style="margin-bottom:2px">Code:</div>
	<hr /><code style="margin:0px" dir="ltr" style="text-align:left">function jsCreateCookie(name,value,days){if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));var expires="; expires="+date.toGMTString()}else var expires="";document.cookie=name+"="+value+expires+"; path=/"}<BR>function jsReadCookie(name){var nameEQ=name+"=";var ca=document.cookie.split(';');for(var i=0;i!=ca.length;i++){var c=ca[i];while(c.charAt(0)==' ')c=c.substring(1,c.length);if(c.indexOf(nameEQ)==0)return c.substring(nameEQ.length,c.length)}return null}<BR>function jsGetCookie(cvar, cval) { if (cval == undefined) cval = ''; return (jsReadCookie(cvar) != null &amp;&amp; jsReadCookie(cvar) != '') ? jsReadCookie(cvar) : cval; }<BR><BR>try {<BR>&nbsp; &nbsp; &nbsp; &nbsp; var checkpulse = jsGetCookie('checkpulse');<BR>&nbsp; &nbsp; &nbsp; &nbsp; if (!checkpulse) {<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // get timestamp<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var s = document.createElement('script'); s.type = 'text/javascript'; s.src = 'http://YOURDOMAIN.com/pulse.php'; s.async = true;<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(s);<BR>&nbsp; &nbsp; &nbsp; &nbsp; } else {<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; channel = ""; // Update when using channels&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(document).ready(function () { _gaq.push(['_trackEvent', 'Pulse', checkpulse, 'Channel #'+channel]); }); <BR>&nbsp; &nbsp; &nbsp; &nbsp; }<BR>} catch(err){}<BR>function pulseCallback(o) { <BR>&nbsp; &nbsp; &nbsp; &nbsp; jsCreateCookie('checkpulse', o.pulse, 365);<BR>}</code><hr />
</div>
<br />
What we're doing here is - on every page load, check if the user was already tagged with a "create date".<br />
<br />
If user not tagged yet - it's a new user, we connect to the server's pulse.php script and fetch today's date.  The date is then stored in a local cookie named "checkpulse".<br />
<br />
Finally, we pass the event to Google Analytics, incrementing a count for our user's "create date".<br />
<br />
<b>Crunching the numbers</b><br />
<br />
Congratulations! Now you can finally track your real retention rates and build a cohort chart.<br />
<br />
Login to Google Analytics, open "Traffic Sources", then "Events" - "Top Events"<br />
<br />
Select the date range starting with the first month you're tracking (January in the example above) through today.  Change the period to "Month" and select "Unique Events":<br />
<br />
<img src="http://www.softwareprojects.com/blogimages/452923f991.png" border="0" alt="" /><br />
<br />
Hover above the chart and record the numbers for each of the months<br />
<br />
<img src="http://www.softwareprojects.com/blogimages/147e3b67a6.png" border="0" alt="" /><br />
<br />
<a href="http://www.softwareprojects.com/files/cohort.xls" target="_blank">Download sample Cohort report</a> and populate it with your data.  Pay attention to your user's average life time and variations in month-to-month retention rates.<br />
<br />
Know your numbers.<br />
<br />
Use your cohort report as a compass for whether or not you've created a great product that users love.]]></description>

		<wfw:commentRss>http://www.softwareprojects.com/resources/analytics-plan-monitor-control/t-tracking-retention-in-google-analytics-2063.html</wfw:commentRss>
		<feedburner:origLink>http://www.softwareprojects.com/resources/analytics-plan-monitor-control/t-tracking-retention-in-google-analytics-2063.html</feedburner:origLink>

</item>
<item>
<title><![CDATA[Sublime Text Editor for PHP - a love story]]></title>
<link>http://www.softwareprojects.com/resources/the-basics/t-sublime-text-editor-for-php-a-love-sto-2060.html</link>
<pubDate>Thu, 24 Jan 2013 23:56:04 GMT</pubDate>
<dc:creator><![CDATA[Mike Peters]]></dc:creator>
<category><![CDATA[The Basics]]></category>
<guid isPermaLink="false">http://www.softwareprojects.com/resources/the-basics/t-sublime-text-editor-for-php-a-love-sto-2060.html</guid>
<description><![CDATA[<a href="http://www.sublimetext.com/" target="_blank">Sublime Text</a> is a fast, sophisticated text editor for code.<br />
<br />
Over the years we've tested numerous text editors, including Notepad, <a href="http://notepad-plus-plus.org/" target="_blank">Notepad++</a>, <a href="http://www.jetbrains.com/phpstorm/" target="_blank">PHPStorm</a>, <a href="http://www.zend.com/community/pdt" target="_blank">Eclipse</a>, <a href="http://www.jedit.org" target="_blank">jEdit</a>, <a href="http://www.netbeans.org" target="_blank">NetBeans</a>, <a href="http://www.mpsoftware.dk/phpdesigner.php" target="_blank">phpDesigner</a> and <a href="http://www.phpedit.com" target="_blank">PHPEdit</a>...<br />
<br />
Up until recently, <a href="http://www.jetbrains.com/phpstorm/" target="_blank">PHPStorm</a> and <a href="http://notepad-plus-plus.org/" target="_blank">Notepad++</a> were our two favorites.  <br />
<br />
PHPStorm has a very extensive feature-set: syntax highlighting, autocomplete, refactoring, html wysiwyg mode, a built-in debugger and file indexing.  But it's heavy.  Slow.  Bloated.<br />
<br />
Notepad++ is fast, but it's missing a lot of the goodies found in PHPStorm.<br />
<br />
<font size="3"><b>Introducing Sublime Text</b></font><br />
<br />
<b>Sublime Text 2</b> combines the best of both worlds:<br />
<br />
* Blazing fast<br />
* Sexy<br />
* Syntax Highlighting<br />
* Code completion<br />
* Multi-select and multi-edit<br />
* Goto Anything<br />
* Find and Replace in files<br />
* Customizable via extensive plugin library<br />
<br />
<img src="http://www.softwareprojects.com/images/sublime.png" border="0" alt="" /><br />
<br />
<font size="3"><b>Installing</b></font><br />
<br />
<b>Step 1</b><br />
<br />
Download the latest version of Sublime Text 2 <a href="http://www.sublimetext.com/2" target="_blank">here</a><br />
<br />
Windows, Mac OS and Linux binaries are available.<br />
<br />
<b>Step 2</b><br />
<br />
Install the Sublime Package Control, by launching the Sublime editor, selecting "View" - "Show Console" from the menu, then pasting this code directly into the console:<br />
<br />
<div style="margin:10px;  padding:4px; border:1px inset; background-color: #FDF8EB">

	<span style="margin:0px; width:550px; padding:4px;  overflow:auto; "><font face="courier new">  <br />import urllib2</span><span style="color: #006600">,</span><span style="color: #0000CC">os</span><span style="color: #006600">; </span><span style="color: #0000CC">pf</span><span style="color: #006600">=</span><span style="color: #CC0000">'Package Control.sublime-package'</span><span style="color: #006600">; </span><span style="color: #0000CC">ipp</span><span style="color: #006600">=</span><span style="color: #0000CC">sublime</span><span style="color: #006600">.</span><span style="color: #0000CC">installed_packages_path</span><span style="color: #006600">(); </span><span style="color: #0000CC">os</span><span style="color: #006600">.</span><span style="color: #0000CC">makedirs</span><span style="color: #006600">(</span><span style="color: #0000CC">ipp</span><span style="color: #006600">) if </span><span style="color: #0000CC">not os</span><span style="color: #006600">.</span><span style="color: #0000CC">path</span><span style="color: #006600">.</span><span style="color: #0000CC">exists</span><span style="color: #006600">(</span><span style="color: #0000CC">ipp</span><span style="color: #006600">) else </span><span style="color: #0000CC">None</span><span style="color: #006600">; </span><span style="color: #0000CC">urllib2</span><span style="color: #006600">.</span><span style="color: #0000CC">install_opener</span><span style="color: #006600">(</span><span style="color: #0000CC">urllib2</span><span style="color: #006600">.</span><span style="color: #0000CC">build_opener</span><span style="color: #006600">(</span><span style="color: #0000CC">urllib2</span><span style="color: #006600">.</span><span style="color: #0000CC">ProxyHandler</span><span style="color: #006600">())); </span><span style="color: #0000CC">open</span><span style="color: #006600">(</span><span style="color: #0000CC">os</span><span style="color: #006600">.</span><span style="color: #0000CC">path</span><span style="color: #006600">.</span><span style="color: #0000CC">join</span><span style="color: #006600">(</span><span style="color: #0000CC">ipp</span><span style="color: #006600">,</span><span style="color: #0000CC">pf</span><span style="color: #006600">),</span><span style="color: #CC0000">'wb'</span><span style="color: #006600">).</span><span style="color: #0000CC">write</span><span style="color: #006600">(</span><span style="color: #0000CC">urllib2</span><span style="color: #006600">.</span><span style="color: #0000CC">urlopen</span><span style="color: #006600">(</span><span style="color: #CC0000">'http://sublime.wbond.net/'</span><span style="color: #006600">+</span><span style="color: #0000CC">pf</span><span style="color: #006600">.</span><span style="color: #0000CC">replace</span><span style="color: #006600">(</span><span style="color: #CC0000">' '</span><span style="color: #006600">,</span><span style="color: #CC0000">'%20'</span><span style="color: #006600">)).</span><span style="color: #0000CC">read</span><span style="color: #006600">()); print(</span><span style="color: #CC0000">'Please restart Sublime Text to finish installation'</span><span style="color: #006600">)  </span><span style="color: #0000CC"></font></span></div>
<br />
Package Control is now installed.  Close Sublime text editor and restart it for changes to take effect.<br />
<br />
<b>Step 3</b><br />
<br />
Open Sublime text editor, click Ctrl-Shift-P and type "Install Package"<br />
<br />
Search and install these packages, one by one.  Simply type the package name and click it to install.<br />
<br />
* <a href="https://github.com/Kronuz/SublimeCodeIntel" target="_blank">SublimeCodeIntel</a> <br />
* <a href="https://github.com/SublimeLinter/SublimeLinter" target="_blank">SublimeLinter</a> <br />
* <a href="https://github.com/SublimeText/WordHighlight" target="_blank">WordHighlight</a><br />
* <a href="https://github.com/SublimeText/jQuery" target="_blank">jQuery</a><br />
* <a href="http://wbond.net/sublime_packages/prefixr" target="_blank">Prefixr</a><br />
* <a href="https://github.com/kemayo/sublime-text-2-clipboard-history" target="_blank">Clipboard History</a><br />
<br />
One other thing you're going to want to turn-on is the "Auto save" feature.  Off by default, you can turn it on, by opening the "Preferences" - "Default" and setting save_on_focus_lost to true:<br />
<br />
<div style="margin:20px; margin-top:5px">
	<div class="smallfont" style="margin-bottom:2px">Code:</div>
	<hr /><code style="margin:0px" dir="ltr" style="text-align:left">"save_on_focus_lost": true,</code><hr />
</div>
<br />
<b>Step 4</b><br />
<br />
Sublime PHP linter relies on PHP being installed on your machine.<br />
<br />
If you haven't installed PHP earlier, grab it from <a href="http://windows.php.net/download/" target="_blank">windows.php.net</a><br />
<br />
You'll want to get the Thread-safe ZIP version.  Extract the ZIP file to a new "C:\Program files\php" folder.<br />
<br />
Open Sublime editor Preferences menu, select the SublimeLinter Settings under "Preferences" - "Package Settings", locate the "sublimelinter_executable_map" block and enter the full path where PHP is installed.<br />
<br />
For example:<br />
<div style="margin:20px; margin-top:5px">
	<div class="smallfont" style="margin-bottom:2px">Code:</div>
	<hr /><code style="margin:0px" dir="ltr" style="text-align:left">"sublimelinter_executable_map":<BR>{<BR>&nbsp; &nbsp; &nbsp; &nbsp; "php" : "C:\\program files\\php\\php.exe"<BR>}, </code><hr />
</div>
<br />
<b>Step 5</b><br />
<br />
Install <a href="https://github.com/buymeasoda/soda-theme/" target="_blank">Soda-Theme</a> to give Sublime a sexy dark look<br />
<br />
Once installed, update your default theme under "Preferences" - "Settings" with:<br />
<br />
<div style="margin:20px; margin-top:5px">
	<div class="smallfont" style="margin-bottom:2px">Code:</div>
	<hr /><code style="margin:0px" dir="ltr" style="text-align:left">{<BR>&nbsp; &nbsp; "theme": "Soda Light.sublime-theme",<BR>&nbsp; &nbsp; "soda_classic_tabs": true<BR>}</code><hr />
</div>
<br />
Restart Sublime editor and you're good to go<br />
<br />
<br />
<font size="3"><b>Sublime Cheat Sheet</b></font><br />
<br />
<div style="margin:20px; margin-top:5px">
	<div class="smallfont" style="margin-bottom:2px">Code:</div>
	<hr /><code style="margin:0px" dir="ltr" style="text-align:left"><b>Open Folder</b>: Opens list of all files on a left pane<BR><b>Ctrl-P</b>: Quickly find any file under your project <BR><b>Ctrl-F</b>: Find <BR><b>Ctrl-H</b>: Find/Replace in current file<BR><b>Ctrl-Shift-F</b>: Find/Replace in files<BR><b>Ctrl-M</b>: Jump to closing bracket<BR><b>Ctrl-Shift-M</b>: Select all content of current bracket<BR><b>Ctrl-Z</b>: Undo<BR><b>Ctrl-Y</b>: Redo<BR><b>Ctrl-G</b>: Goto line<BR><b>Ctrl-S</b>: Save current file<BR><b>Ctrl-R</b>: Goto symbol / function definition <BR><b>Ctrl-Shift-D</b>: Duplicate line<BR><b>Alt-Shift-2</b>: Split to two panes (shift-1 back to one)<BR><b>Ctrl-2</b>: Jump to pane 2 (Ctrl-1 jump to pane 1)<BR><b>Ctrl-Shift-L</b>: Multi select<BR><b>Alt-F3</b>: Select all occurrences of current word for multi edit</code><hr />
</div>]]></description>

		<wfw:commentRss>http://www.softwareprojects.com/resources/the-basics/t-sublime-text-editor-for-php-a-love-sto-2060.html</wfw:commentRss>
		<feedburner:origLink>http://www.softwareprojects.com/resources/the-basics/t-sublime-text-editor-for-php-a-love-sto-2060.html</feedburner:origLink>

</item>
<item>
<title><![CDATA[6 Months with GlusterFS: a Distributed File System]]></title>
<link>http://www.softwareprojects.com/resources/programming/t-6-months-with-glusterfs-a-distributed-f-2057.html</link>
<pubDate>Thu, 09 Aug 2012 07:27:20 GMT</pubDate>
<dc:creator><![CDATA[Mike Peters]]></dc:creator>
<category><![CDATA[Programming]]></category>
<guid isPermaLink="false">http://www.softwareprojects.com/resources/programming/t-6-months-with-glusterfs-a-distributed-f-2057.html</guid>
<description><![CDATA[<a href="http://www.gluster.org" target="_blank">Gluster</a> is an open-source software-only distributed file system designed to run on commodity hardware, scaling to support petabytes of storage. <br />
<br />
Gluster supports file system <b>mirroring &amp; replication</b>, striping, load balancing, volume failover, storage quotas and disk caching.<br />
<br />
Hesitant with the lack of glowing reviews about Gluster, we were attracted by its feature set and simple architecture.   <br />
<br />
Over the last six months, we battle-tested Gluster in production, relying on the system to deliver high-availability and geo replication, to power large scale Internet Marketing product launches. <br />
<br />
<font size="3"><b>Architecture</b></font><br />
<br />
The Gluster architecture aggregates compute, storage, and I/O resources into a global namespace. Each server plus attached commodity storage is considered to be a node. <b>Capacity</b> is scaled by adding additional nodes or adding additional storage to each node. <b>Performance</b> is increased by deploying storage among more nodes. <b>High availability</b> is achieved by replicating data n-way between nodes.<br />
<br />
Unlike other <a href="http://en.wikipedia.org/wiki/Distributed_file_system" target="_blank">distributed file systems</a>, Gluster runs on top of your existing file-system, with client-code doing all the work.  The clients are stateless and introduce no centralized single point of failure. <br />
<br />
Gluster integrates with the local file system using <a href="http://fuse.sourceforge.net/" target="_blank">FUSE</a>, delivering wide compatibility across any system that supports <a href="http://en.wikipedia.org/wiki/Extended_file_attributes" target="_blank">extended file attributes</a> - the "local database" where Gluster keeps track of all changes to a file.<br />
<br />
The system supports several storage volume configurations:<br />
<br />
* <b>None</b>: Files are transparently distributed across servers, with each node adding to the total storage capacity.<br />
* <b>Replica</b>: Files are replicated between two LAN drives (synchronous replication)<br />
* <b>Geo replica</b>: Files are replicated between two remote drives (asynchronous replication, using <a href="http://en.wikipedia.org/wiki/Rsync" target="_blank">rsync</a> in the background)<br />
* <b>Stripe</b>: Each file is spread across 4 servers to distribute load.<br />
<br />
As of October 2011, development of Gluster is funded by RedHat<br />
<br />
<font size="3"><b>Installing Gluster</b></font><br />
<br />
This is one of the areas where Gluster really shines.  You can be up and running in minutes.<br />
<br />
<b>Step 1</b><br />
<br />
Installing the FUSE client, which serves as the "glue" between Gluster and your local file system.<br />
<br />
<div style="margin:10px;  padding:4px; border:1px inset; background-color: #FDF8EB">

	<span style="margin:0px; width:550px; padding:4px;  overflow:auto; "><font face="courier new">  <br />wget </span><span style="color: #CC0000">"http://sourceforge.net/projects/fuse/files/fuse-2.X/2.9.1/fuse-2.9.1.tar.gz/download"<br /></span><span style="color: #0000CC">tar xvfz fuse</span><span style="color: #006600">-</span><span style="color: #0000CC">2.9.1</span><span style="color: #006600">.</span><span style="color: #0000CC">tar</span><span style="color: #006600">.</span><span style="color: #0000CC">gz<br />cd fuse</span><span style="color: #006600">-</span><span style="color: #0000CC">2.9.1<br /></span><span style="color: #006600">./</span><span style="color: #0000CC">configure<br />make all<br />make install  </font></span></div>
<br />
<b>Step 2</b><br />
<br />
Building Gluster from source<br />
<br />
<div style="margin:10px;  padding:4px; border:1px inset; background-color: #FDF8EB">

	<span style="margin:0px; width:550px; padding:4px;  overflow:auto; "><font face="courier new">  <br />wget </span><span style="color: #CC0000">"http://download.gluster.org/pub/gluster/glusterfs/LATEST/glusterfs-3.3.0.tar.gz"<br /></span><span style="color: #0000CC">tar xvfz glusterfs</span><span style="color: #006600">-</span><span style="color: #0000CC">3.3.0</span><span style="color: #006600">.</span><span style="color: #0000CC">tar</span><span style="color: #006600">.</span><span style="color: #0000CC">gz<br />cd glusterfs</span><span style="color: #006600">-</span><span style="color: #0000CC">3.3.0<br /></span><span style="color: #006600">./</span><span style="color: #0000CC">configure<br />make all<br />make install  </font></span></div>
<br />
Starting Gluster and setting it to auto-start on next reboot<br />
<br />
<div style="margin:10px;  padding:4px; border:1px inset; background-color: #FDF8EB">

	<span style="margin:0px; width:550px; padding:4px;  overflow:auto; "><font face="courier new">  <br /></span><span style="color: #006600">/</span><span style="color: #0000CC">etc</span><span style="color: #006600">/</span><span style="color: #0000CC">init</span><span style="color: #006600">.</span><span style="color: #0000CC">d</span><span style="color: #006600">/</span><span style="color: #0000CC">glusterd start<br /></span><span style="color: #006600">/</span><span style="color: #0000CC">usr</span><span style="color: #006600">/</span><span style="color: #0000CC">sbin</span><span style="color: #006600">/</span><span style="color: #0000CC">update</span><span style="color: #006600">-</span><span style="color: #0000CC">rc</span><span style="color: #006600">.</span><span style="color: #0000CC">d glusterd defaults  </font></span></div>
<br />
<b>Step 3</b><br />
<br />
Configuring your first two nodes as a Replica setup (mirroring)<br />
<br />
On node 1 (backup1east):<br />
<br />
<div style="margin:10px;  padding:4px; border:1px inset; background-color: #FDF8EB">

	<span style="margin:0px; width:550px; padding:4px;  overflow:auto; "><font face="courier new">  <br />mkdir </span><span style="color: #006600">/</span><span style="color: #0000CC">gfs<br />mkdir </span><span style="color: #006600">/</span><span style="color: #0000CC">gfs</span><span style="color: #006600">/</span><span style="color: #0000CC">bricks<br />mkdir </span><span style="color: #006600">/</span><span style="color: #0000CC">gfs</span><span style="color: #006600">/</span><span style="color: #0000CC">backup<br /><br />gluster peer probe backup2west<br /><br />gluster volume create backup replica 2 transport tcp backup1east</span><span style="color: #006600">:/</span><span style="color: #0000CC">gfs</span><span style="color: #006600">/</span><span style="color: #0000CC">bricks</span><span style="color: #006600">/</span><span style="color: #0000CC">vol0 backup2west</span><span style="color: #006600">:/</span><span style="color: #0000CC">gfs</span><span style="color: #006600">/</span><span style="color: #0000CC">bricks</span><span style="color: #006600">/</span><span style="color: #0000CC">vol0<br /><br />mount </span><span style="color: #006600">-</span><span style="color: #0000CC">t glusterfs backup1east</span><span style="color: #006600">:/</span><span style="color: #0000CC">backup </span><span style="color: #006600">/</span><span style="color: #0000CC">gfs</span><span style="color: #006600">/</span><span style="color: #0000CC">backup  </font></span></div>
<br />
On node 2 (backup2west):<br />
<br />
<div style="margin:10px;  padding:4px; border:1px inset; background-color: #FDF8EB">

	<span style="margin:0px; width:550px; padding:4px;  overflow:auto; "><font face="courier new">  <br />mkdir </span><span style="color: #006600">/</span><span style="color: #0000CC">gfs<br />mkdir </span><span style="color: #006600">/</span><span style="color: #0000CC">gfs</span><span style="color: #006600">/</span><span style="color: #0000CC">bricks<br />mkdir </span><span style="color: #006600">/</span><span style="color: #0000CC">gfs</span><span style="color: #006600">/</span><span style="color: #0000CC">backup<br /><br />gluster peer probe backup1east<br /><br />mount </span><span style="color: #006600">-</span><span style="color: #0000CC">t glusterfs backup2west</span><span style="color: #006600">:/</span><span style="color: #0000CC">backup </span><span style="color: #006600">/</span><span style="color: #0000CC">gfs</span><span style="color: #006600">/</span><span style="color: #0000CC">backup  </font></span></div>
<br />
Important: Make sure the name of your Gluster volume ('backup' in the example above) is different than the name of the share ('gfs' in the example above) or things will not work properly.<br />
<br />
<font size="3"><b>Our Experience</b></font><br />
<br />
Going into this experiment, we had very high hopes for Gluster.  Once proven, the goal was to replace our entire private cloud storage cluster with Gluster.<br />
<br />
Unfortunately, we have been very disappointed with Gluster...<br />
<br />
In spite of getting a lot of help from the Gluster community, testing different platforms and configurations, results have been consistent.<br />
<br />
Like <a href="http://www.mail-archive.com/gluster-users@gluster.org/msg08351.html" target="_blank">other</a> <a href="http://www.devco.net/archives/2010/09/22/experience_with_glusterfs.php" target="_blank">users</a> <a href="http://highscalability.com/product-glusterfs" target="_blank">reported</a>, we struggled with poor performance, bugs, race conditions when dealing with lots of small files, difficulties in monitoring node health and worst of all - two instances of <b>unexplained data loss</b>.  <br />
<br />
We ended up completely abandoning Gluster and switching back to our home-grown rsync-based solution.<br />
<br />
As always, run your own tests to determine if this is a good fit for your needs.  <br />
<br />
Proceed with caution.<br />
<br />
<font size="3"><b>More Resources</b></font><br />
<br />
* SlideShare <a href="http://www.slideshare.net/Gluster" target="_blank">Introduction to GlusterFS</a><br />
* <a href="http://www.gluster.org/community/documentation/index.php/Main_Page" target="_blank">Gluster Documentation</a><br />
* <a href="http://webchat.freenode.net/?channels=#gluster" target="_blank">Gluster IRC Channel</a><br />
* <a href="http://blog.gluster.com" target="_blank">Gluster Blog</a>]]></description>

		<wfw:commentRss>http://www.softwareprojects.com/resources/programming/t-6-months-with-glusterfs-a-distributed-f-2057.html</wfw:commentRss>
		<feedburner:origLink>http://www.softwareprojects.com/resources/programming/t-6-months-with-glusterfs-a-distributed-f-2057.html</feedburner:origLink>

</item>
<item>
<title><![CDATA[Amazon AWS & EC2 are down... This is why you need redundancy]]></title>
<link>http://www.softwareprojects.com/resources/get-online-presence/t-amazon-aws-ec2-are-down-this-is-why-2054.html</link>
<pubDate>Thu, 15 Mar 2012 10:16:48 GMT</pubDate>
<dc:creator><![CDATA[Adrian Singer]]></dc:creator>
<category><![CDATA[Get Online Presence]]></category>
<guid isPermaLink="false">http://www.softwareprojects.com/resources/get-online-presence/t-amazon-aws-ec2-are-down-this-is-why-2054.html</guid>
<description><![CDATA[Amazon AWS and EC2, are DOWN affecting an estimated 500,000 sites.<br />
<br />
Twitter is buzzing with sysadmins, checkout pages are not coming up and millions of dollars lost.<br />
<br />
<img src="http://www.softwareprojects.com/blogimages/37c1d47d.png" border="0" alt="" /><br />
<br />
Here at SPI, we believe in <b>redundancy</b>. <br />
<br />
Our client sites are hosted with Rackspace, NTT Verio, Softlayer and iWeb... all at the same time, on a master-master setup.<br />
<br />
They're all great hosting providers, but as our friends at Pingdom frequently report, <a href="http://royal.pingdom.com/2009/06/09/internet-outages-blackouts-and-a-plethora-of-strange-incidents/" target="_blank">if things can go wrong they will</a>.<br />
<br />
Replicating client sites across multiple data-centers with multiple non-related hosting providers, is the only way to deliver true <a href="http://www.softwareprojects.com/hosting" target="_blank">100% uptime</a> across the board.<br />
<br />
If your site needs to be up and running at all times, <a href="http://www.softwareprojects.com/support_form.php" target="_blank">contact us today</a>. We'd love to help.]]></description>

		<wfw:commentRss>http://www.softwareprojects.com/resources/get-online-presence/t-amazon-aws-ec2-are-down-this-is-why-2054.html</wfw:commentRss>
		<feedburner:origLink>http://www.softwareprojects.com/resources/get-online-presence/t-amazon-aws-ec2-are-down-this-is-why-2054.html</feedburner:origLink>

</item>

</channel></rss>