<?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>Seocracy.com &#187; Tips &amp; Tricks</title>
	<atom:link href="http://seocracy.com/category/tips-tricks/feed/" rel="self" type="application/rss+xml" />
	<link>http://seocracy.com</link>
	<description>A blog about technical SEO, Ruby, Web Apps, and more</description>
	<lastBuildDate>Wed, 28 Apr 2010 21:47:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Detecting anomalous spikes in a line graph via sub-sampling and standard deviation</title>
		<link>http://seocracy.com/2010/04/detecting-anomalous-spikes-in-a-line-graph-via-sub-sampling-and-standard-deviation/</link>
		<comments>http://seocracy.com/2010/04/detecting-anomalous-spikes-in-a-line-graph-via-sub-sampling-and-standard-deviation/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 21:47:09 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[ruby/rails]]></category>

		<guid isPermaLink="false">http://seocracy.com/?p=372</guid>
		<description><![CDATA[Woah, what a title&#8230;
What I want to talk about isn&#8217;t as complicated as it sounds. Basically, in collecting daily site specific metrics for the purposes of SEO, you sometimes get some bad data from your third-party sources.
These bad data points can skew your graphs and make it almost impossible to visually derive any useful information [...]]]></description>
			<content:encoded><![CDATA[<p>Woah, what a title&#8230;</p>
<p>What I want to talk about isn&#8217;t as complicated as it sounds. Basically, in collecting daily site specific metrics for the purposes of SEO, you sometimes get some bad data from your third-party sources.</p>
<p>These bad data points can skew your graphs and make it almost impossible to visually derive any useful information from them.</p>
<p>For example:</p>
<p style="text-align: center;"><a href="http://seocracy.com/wp-content/uploads/2010/04/indexed_before.png"><img class="size-full wp-image-373  aligncenter" style="margin-top: 0px; margin-bottom: 0px;" title="Indexed pages" src="http://seocracy.com/wp-content/uploads/2010/04/indexed_before.png" alt="Indexed Pages - before" width="491" height="169" /></a></p>
<p style="text-align: center;">
<p style="text-align: left; ">The graph above (click to expand) shows the number of pages for a 6 month date range. In early January the data spikes dramatically upwards. This is clearly an anomaly, as the day after, the data is back in its normal range. The trouble here is that this anomalous point skews the entire graph, making it impossible to derive any real insights from it. The above graph is rendered useless by that one piece of anomalous data.</p>
<p style="text-align: left; ">Here is the same graph WITHOUT that one bad piece of data (click to expand)</p>
<p style="text-align: center; "><a href="http://seocracy.com/wp-content/uploads/2010/04/indexed_after.png"><img class="size-full wp-image-380 aligncenter" title="indexed_after" src="http://seocracy.com/wp-content/uploads/2010/04/indexed_after.png" alt="indexed_after" width="529" height="167" /></a></p>
<p style="text-align: center; ">
<p style="text-align: left; ">It&#8217;s amazing how one bad data point can skew your entire graph, isn&#8217;t it? Now we have an image that is useful!</p>
<p style="text-align: left; ">
<p style="text-align: left; ">Here&#8217;s some (hackish &amp; sketchy) code to identify these statistical anomalies and replace them:</p>
<p style="text-align: left; ">
<p><script src="http://gist.github.com/382699.js"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://seocracy.com/2010/04/detecting-anomalous-spikes-in-a-line-graph-via-sub-sampling-and-standard-deviation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Quick and painless geo-location</title>
		<link>http://seocracy.com/2010/03/quick-and-painless-geo-location/</link>
		<comments>http://seocracy.com/2010/03/quick-and-painless-geo-location/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 19:30:13 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Random!]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tips & Tricks]]></category>

		<guid isPermaLink="false">http://seocracy.com/?p=363</guid>
		<description><![CDATA[Hey all,
I wanted to post up a quick tip for you all, since I often hear people asking about how they can implement geo-location in their landing pages.
Alot of people recommend MaxMind or some other geoIP database, but really, thats a pain in the ass&#8230;there is a much easier way to do it.
On your landing [...]]]></description>
			<content:encoded><![CDATA[<p>Hey all,<br />
I wanted to post up a quick tip for you all, since I often hear people asking about how they can implement geo-location in their landing pages.</p>
<p>Alot of people recommend MaxMind or some other geoIP database, but really, thats a pain in the ass&#8230;there is a much easier way to do it.</p>
<p>On your landing page, just include the following in header.</p>
<p style="padding-left: 30px;">&lt;script type=&#8221;text/javascript&#8221; src=&#8221;http://www.google.com/jsapi&#8221;&gt;&lt;/script&gt;</p>
<p>This script will calculate your visitors location for you&#8230;.and all you have to do is pull the ClientLocation variable!<br />
For example, if I wanted to display a popup with the users city:</p>
<p style="padding-left: 30px;">alert(google.loader.ClientLocation['address']['city'])</p>
<p>Seriously, its THAT SIMPLE.</p>
<p>Have fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://seocracy.com/2010/03/quick-and-painless-geo-location/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Amazon S3 bucket limit</title>
		<link>http://seocracy.com/2009/08/amazon-s3-bucket-limit/</link>
		<comments>http://seocracy.com/2009/08/amazon-s3-bucket-limit/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 09:33:53 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ruby/rails]]></category>

		<guid isPermaLink="false">http://seocracy.com/?p=321</guid>
		<description><![CDATA[
So, today I learned that Amazon S3 limits the amount of buckets you are allowed to have at any one time. This was a HUGE pain in the ass for me, as I just rewrote my S3 caching libraries to separate my caching into daily buckets.

The idea I had was that I would keep 30 [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-320 alignnone" title="I CALL SHENANIGANS ON AMAZON S3!!!" src="http://seocracy.com/wp-content/uploads/2009/08/theybestealinmybucket.jpg" alt="theybestealinmybucket" width="640" height="340" /></p>
<p>So, today I learned that Amazon S3 limits the amount of buckets you are allowed to have at any one time. This was a HUGE pain in the ass for me, as I just rewrote my S3 caching libraries to separate my caching into daily buckets.</p>
<p><img class="alignnone size-full wp-image-328" title="headesk" src="http://seocracy.com/wp-content/uploads/2009/08/headesk1.png" alt="headesk" width="614" height="314" /></p>
<p>The idea I had was that I would keep 30 days worth of buckets before automatically shuffling all those buckets into long term archival at the end of each month.</p>
<p>You see, Amazon S3 doesn&#8217;t allow for folders within buckets (not technically, I&#8217;ll get to that later), and I think it&#8217;s bloody ridiculous for me to store the ~15 millions xml cache files I need daily access to in just one massive bucket. So, I thought my plan to create daily buckets was pretty damn good. Apparently Amazon disagrees, as hey have set a limit on the number of buckets I can have associated with my account (FYI, I have ~90 buckets right now and that&#8217;s where the limit is).</p>
<p>So, I&#8217;ve been looking into my options, and I have decided that I&#8217;m going to have to go back to my original set up of storing all 15 million (and growing) xml files in one bucket. As some of you may know, S3 GUIs like S3Fox are able to show sub-folders within buckets, so I figure I will go this route. My first step was to take a crack at the Ruby S3 library from Amazon (<strong>not</strong> the AWS gem, which is crap for multi threaded environments) to see how I can create folders within buckets. Turns out, you can&#8217;t. At least, not out of the box. You see, AmazonS3 doesn&#8217;t actually SUPPORT sub-folders within buckets.</p>
<p>Stupid, right? I know.</p>
<p>So, how does S3Fox do it? It turns out they create virtualized folders by creating a special object that acts as a folder, then you access your stored objects by appending that folder object name to the actual file key. For a directory named &#8220;/foo&#8221;, you would create an object with the key &#8220;foo_$folder$&#8221;. Then, to get a directory listing of all files stored under the foo path, you just query S3 for objects with keys that start with &#8220;/foo&#8221;, and you ignore any objects that end with &#8220;_$folder$&#8221;.</p>
<p>I&#8217;m about to waste my day setting this up, and I&#8217;m none to happy about it. It seems like a hackish and shitty work around for an obvious service flaw. I&#8217;m sure there is some technically-reasonable answer for why Amazon has set an arbitrary limit for buckets and also why they don&#8217;t allow you to create folders, but I don&#8217;t know what it is. Anyone have any answers?</p>
<p>Hat-Tip the <a href="http://deadprogrammersociety.blogspot.com/2008/01/making-s3-folders-in-ruby.html" target="_blank">Dead Programmer Society</a> for the code to create virtualized folders in S3.</p>
]]></content:encoded>
			<wfw:commentRss>http://seocracy.com/2009/08/amazon-s3-bucket-limit/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Rails: Mysql::Error: Lost connection</title>
		<link>http://seocracy.com/2009/05/rails-mysqlerror-lost-connection/</link>
		<comments>http://seocracy.com/2009/05/rails-mysqlerror-lost-connection/#comments</comments>
		<pubDate>Thu, 28 May 2009 15:13:01 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[ruby/rails]]></category>
		<category><![CDATA[mysql error]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://seocracy.com/?p=302</guid>
		<description><![CDATA[One of my in development projects was getting triggering a ton of &#8220;Mysql::Error: Lost connection&#8221; errors recently, and I couldn&#8217;t figure out the root cause of it.
There are many of different reasons why this error can occur, and in my case, it was a reason that no one else has written about (that I could [...]]]></description>
			<content:encoded><![CDATA[<p>One of my in development projects was getting triggering a ton of &#8220;Mysql::Error: Lost connection&#8221; errors recently, and I couldn&#8217;t figure out the root cause of it.</p>
<p>There are many of different reasons why this error can occur, and in my case, it was a reason that no one else has written about (that I could find), so I figured I&#8217;d post up the cause of my problem (and the solution).</p>
<p>This application was on a shared development server with a few other applications. They all used the same mySQL server. One of my other applications had a corruption in a few of its tables, and whenever this application was called, it would crash the mySQL server, triggering a &#8220;Mysql::Error: Lost connection&#8221; for all my other applications connected to the mySQL server at that same time. </p>
<p>I tracked down this issue by check the mysql logs, and then I simply reloaded last nights backup of the corrupt database, and everything was fine! It just goes to show you how important it is to always perform regular backups of your databases.</p>
<p>I hope this helps someone!</p>
]]></content:encoded>
			<wfw:commentRss>http://seocracy.com/2009/05/rails-mysqlerror-lost-connection/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Updated Google Analytics Keyword Extractor</title>
		<link>http://seocracy.com/2009/04/updated-google-analytics-keyword-extractor/</link>
		<comments>http://seocracy.com/2009/04/updated-google-analytics-keyword-extractor/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 13:34:27 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Google Hacking]]></category>
		<category><![CDATA[Link-Love]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Tools & Applications]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[gattica gem]]></category>
		<category><![CDATA[keywords]]></category>
		<category><![CDATA[organic]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[statistics]]></category>

		<guid isPermaLink="false">http://seocracy.com/?p=298</guid>
		<description><![CDATA[OK,  I&#8217;ll admit, my last post was downright shameful&#8230;
The code was poorly presented, and poorly formatted. It wasn&#8217;t at ALL my normal caliber of work, so I went ahead and rewrote the concept into a tighter little wrapper.
I am using the Gattica gem to interact with the Google Analytics API.
This little script provides a wrapper [...]]]></description>
			<content:encoded><![CDATA[<p>OK,  I&#8217;ll admit, my last post was downright shameful&#8230;</p>
<p>The code was poorly presented, and poorly formatted. It wasn&#8217;t at ALL my normal caliber of work, so I went ahead and rewrote the concept into a tighter little wrapper.</p>
<p>I am using the <a href="http://github.com/cannikin/gattica/tree/master" target="_blank">Gattica gem</a> to interact with the Google Analytics API.</p>
<p>This little script provides a wrapper around the gem that easily allows you to extract your sites organic keywords and sort them based on the number of unique entrances to your site via each keyword.</p>
<p><script src="http://gist.github.com/104452.js"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://seocracy.com/2009/04/updated-google-analytics-keyword-extractor/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dynamic Alt-Tags</title>
		<link>http://seocracy.com/2009/01/dynamic-alt-tags/</link>
		<comments>http://seocracy.com/2009/01/dynamic-alt-tags/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 21:58:23 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tips & Tricks]]></category>

		<guid isPermaLink="false">http://seocracy.com/?p=222</guid>
		<description><![CDATA[Note: This post builds off of ideas presented in past blog posts, like String Permutation.
&#8212;&#8212;&#8212;

I was recently doing a little friendly consulting for a friend of mine who runs a membership based adult-site.
Basically he was converting well but not getting alot of traffic, so we took some time to look over his sites layout and [...]]]></description>
			<content:encoded><![CDATA[<address>Note: This post builds off of ideas presented in past blog posts, like <a title="string permutations" href="http://seocracy.com/2008/06/fun-with-string-permutations/" target="_blank">String Permutation.</a></address>
<address>&#8212;&#8212;&#8212;<br />
</address>
<p>I was recently doing a little friendly consulting for a friend of mine who runs a membership based adult-site.</p>
<p>Basically he was converting well but not getting alot of traffic, so we took some time to look over his sites layout and went over some basic SEO best-practices.</p>
<p>One of the things that he really needed to improve on was the layouts of his images. I mean, with a site like this, images are way more prevalent than content&#8230;his design is hugely image intensive, and there are literally hundreds of individual preview galleries that could potentially act as great landing pages for each individual sub-niche&#8230;</p>
<p>I was advising him that he should be working on keyword rich, unique captions and alt-tags for his images, and his complaint was that there are so many images that it would be a huge pain in the ass to go through and create captions/ALTs for each one. So, we decided that the best thing to do in this case would be to create a simple function that dynamically builds unique captions and ALT text for him.</p>
<p>Basically, what we did was build 10 different sets of four-to-five <a title="definition of array" href="http://en.wikipedia.org/wiki/Array" target="_blank">arrays</a> containing various keywords that we could randomly choose from in building a complete string. We then set the function to dynamically choose one of the array sets, so that each caption/ALT didn&#8217;t have the exact same format.</p>
<p>In building each array set, we started with a sentence structure he wanted to use, and then expanded each word out into it&#8217;s own array.</p>
<p>Example: (I normally keep this blog PG13, so please excuse the dirty words, but I&#8217;m using an example relevant to the adult industry)</p>
<p><strong>ARRAY1. Sentence structure:<br />
&#8220;Download &lt;model_name&gt;&#8217;s private sex video&#8221;</strong></p>
<p>array1a = [download,check out,view,see,get,look at]<br />
array2b = [private,personal,intimate]<br />
array3c = [sex,solo,masturbation,jerk-off,porn]<br />
array4d = [video,film,clip,download,stream,flick,vid,picture]</p>
<p><strong>ARRAY2. Sentence structure:<br />
&#8220;&lt;model_name&gt; has tons of hot videos&#8221;</strong></p>
<p>array2a = [has,uploads,provides,creates,films,makes]<br />
array2b = [tons of, lots of, many of, hundreds of, a lot of, loads of]<br />
array2c = [hot, sexy, steamy, erotic, raunchy, amazing, mind-blowing]<br />
array4d = [videos,films,clips,downloads,streams,flicks,vids,pictures]</p>
<p>ARRAY3&#8230;etc..ARRAY4&#8230;.etc&#8230;..all the way to TEN different sets of arrays.</p>
<p>The above is just an example&#8230;.in a real production usage, I would recommend no less than 10-15 words PER array.</p>
<p>Then, for each caption and each alt, the webpage calls the function which randomly chooses one of the 10 array sets and uses it to build a dynamic string.</p>
<p>Once you&#8217;ve randomly selected one of the 10 array sets to use, you&#8217;d build the dynamic string like this:</p>
<pre><strong><span style="color: #000000;">dynamic_string = array1a[rand(array1a.length)]." ".model_name."'s ".array1b[rand(array1b.length)]." ".array1c[rand(array1c.length)]." ".array1d[rand(array1d.length)];</span></strong></pre>
<p>So, this function might return the following: &#8220;download Jenny&#8217;s intimate sex video&#8221; OR &#8220;checkout Suzie&#8217;s private porn clip&#8221; OR etc, etc etc</p>
<p>Using this simple and well-documented technique, the site owner was able to create keyword rich, dynamic captions/ALTs for every single picture in his hundreds of preview galleries. He was able to keep his image-rich site design and still put lots of great content into it without making it look like keyword spam, and all without going through the back-breaking effort of manually writing content.</p>
<p>Two closing notes fore you all to think about:</p>
<p>1)You can use your favorite keyword/synonym tools and even search query logs to build massive lists of your relevant keywords. Then you just need to take some time to scan through them and group and sort them into relevant sets.</p>
<p>2)This technique is very useful for anchor text as well <img src='http://seocracy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://seocracy.com/2009/01/dynamic-alt-tags/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Fun with String Permutations</title>
		<link>http://seocracy.com/2008/06/fun-with-string-permutations/</link>
		<comments>http://seocracy.com/2008/06/fun-with-string-permutations/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 00:00:00 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[Tips & Tricks]]></category>

		<guid isPermaLink="false">http://127.0.0.1/seocracy/?p=76</guid>
		<description><![CDATA[Finding all possible permutations of a group of arrays]]></description>
			<content:encoded><![CDATA[<p id="r55u">So, I&#8217;ve been kicking around some new concepts for <a href="http://datapresser.com" target="_blank">Datapresser&#8217;s Content Generation</a>,</span> based on something called String Permutations.</span></p>
<p id="r55u0">
</span></p>
<p id="r55u2"> For example, lets say I had four word groups:</span></p>
<p id="r55u5">- pronouns (my, your, his, her, our)</span></p>
<p id="r55u6">- subjects (goat, sailboat, cabin)</span></p>
<p id="z75f">- conjunctions (is, is usually, is always)</span></p>
<p id="o:1m">- adjectives (stinky, leaking, clean)</span></p>
<p id="veio">
</span></p>
<p id="veio1">By analyzing all the possible permutations of these 4 word groups, we can see exactly how much content we can spin from it, and what all the possible permutations are.</span></p>
<p id="puac">
</span></p>
<p id="puac1">In this case, there are 135 possible permutations:</span></p>
<blockquote><p><span style="font-size: xx-small;">my goat is stinky</span></span><br />
<span style="font-size: xx-small;">my goat is leaking</span></span><br />
<span style="font-size: xx-small;">my goat is clean</span></span><br />
<span style="font-size: xx-small;">my goat is usually stinky</span></span><br />
<span style="font-size: xx-small;">my goat is usually leaking</span></span><br />
<span style="font-size: xx-small;">my goat is usually clean</span></span><br />
<span style="font-size: xx-small;">my sailboat is usually leaking</span></span><br />
<span style="font-size: xx-small;">my sailboat is usually clean</span></span><br />
<span style="font-size: xx-small;">our cabin is always leaking</span></span><br />
<span style="font-size: xx-small;">our cabin is always clean</span></span><br />
<span style="font-size: xx-small;">etc&#8230;etc&#8230;.etc&#8230;..</span></span></p></blockquote>
<p>The possible applications of string permutation become apparent when you consider a real-world example, like creating headlines:</span></p>
<blockquote><p><span style="font-size: xx-small;">So You Want To Meet a Girl<br />
</span><span style="font-size: xx-small;">So You Want To Get A Date<br />
</span><span style="font-size: xx-small;">So You Want To Ask Out A Woman<br />
</span><span style="font-size: xx-small;">So You Want To Ask A Woman Out<br />
</span><span style="font-size: xx-small;">So You Want To Get Started Dating<br />
</span><span style="font-size: xx-small;">Learn How To Meet a Girl<br />
</span><span style="font-size: xx-small;">Learn How To Get A Date<br />
</span><span style="font-size: xx-small;">Learn How To Ask Out A Woman<br />
</span><span style="font-size: xx-small;">Learn How To Ask A Woman Out<br />
</span><span style="font-size: xx-small;">Learn How To Get Started Dating<br />
</span><span style="font-size: xx-small;">Find Out The Way To Meet a Girl<br />
</span><span style="font-size: xx-small;">Find Out The Way To Get A Date<br />
</span><span style="font-size: xx-small;">Find Out The Way To Ask Out A Woman<br />
</span><span style="font-size: xx-small;">Find Out The Way To Ask A Woman Out<br />
</span><span style="font-size: xx-small;">Find Out The Way To Get Started Dating<br />
</span><span style="font-size: xx-small;">It&#8217;s Easy To Learn How To Meet a Girl<br />
</span><span style="font-size: xx-small;">It&#8217;s Easy To Learn How To Get A Date<br />
</span><span style="font-size: xx-small;">It&#8217;s Easy To Learn How To Ask Out A Woman<br />
</span><span style="font-size: xx-small;">It&#8217;s Easy To Learn How To Ask A Woman Out<br />
</span><span style="font-size: xx-small;">It&#8217;s Easy To Learn How To Get Started Dating</span></p></blockquote>
<p>When I first started analyzing the possible permutations of some of my madlib scripts, I was so astounded by the numbers that I assumed I had made a mistake in my coding. After I did the math manually, I realized that I had it right, but the numbers were still astounding. </span></p>
<p>I have one relatively short madlib script that outputs around 150 words. However, once you take into account number of possible rows in each database it draws from, plus the numerous wildcard sets, that script has approx 42311189564227584000 possible unique permutations.</span></p>
<p>To give you an idea of how steep the corelation is between input and output, here are some numbers.</span></p>
<p>Each line represents one word group.<br />
<span style="font-size: xx-small;">10 <span style="background-color: #ffff00">&lt;&#8211; first group has 10 words</span><br />
20 <span style="background-color: #ffff00">&lt;&#8211; second group has 2 </span></span></span><span style="font-size: xx-small;"><span style="background-color: #ffff00">words</span></span></span><span style="font-size: xx-small;"><br />
100 <span style="background-color: #ffff00">&lt;&#8211; third group has 5 </span></span></span><span style="font-size: xx-small;"><span style="background-color: #ffff00">words</span></span></span><span style="font-size: xx-small;"><br />
1300 <span style="background-color: #ffff00">&lt;&#8211; fourth group has 13 </span></span></span><span style="font-size: xx-small;"><span style="background-color: #ffff00">words</span></span></span><span style="font-size: xx-small;"><br />
20800 <span style="background-color: #ffff00">&lt;&#8211; etc etc etc</span><br />
166400<br />
998400<br />
10982400<br />
54912000<br />
219648000<br />
1537536000<br />
4612608000<br />
27675648000<br />
110702592000<br />
332107776000<br />
996323328000<br />
3985293312000<br />
15941173248000<br />
95647039488000<br />
382588157952000<br />
2295528947712000<br />
9182115790848000<br />
36728463163392000<br />
110185389490176000<br />
330556168470528000<br />
1322224673882112000<br />
5288898695528448000<br />
10577797391056896000<br />
42311189564227584000<br />
</span></span></p>
<p> For all you programmers out there, here is how I am calculating permutations (this needs to be threaded to have any production application):</span></p>
<p><span style="background-color: #ffff00; font-size: x-small;"> <span style="font-size: xx-small;">class Array</span></span><br />
<span style="font-size: xx-small;"> <span style="background-color: #ffff00">def sequence(i = 0, *a)</span></span></span><br />
<span style="font-size: xx-small;"> <span style="background-color: #ffff00">return [a] if i == size</span></span></span><br />
<span style="font-size: xx-small;"> <span style="background-color: #ffff00">self[i].map {|x|</span></span></span><br />
<span style="font-size: xx-small;"> <span style="background-color: #ffff00">sequence(i+1, *(a + [x]))</span></span></span><br />
<span style="font-size: xx-small;"> <span style="background-color: #ffff00">}.inject([]) {|m, x| m + x} </span></span></span><br />
<span style="font-size: xx-small;"> <span style="background-color: #ffff00">end</span></span></span><br />
<span style="font-size: xx-small;"> <span style="background-color: #ffff00">end</span></span></span></p>
<p><span style="font-size: xx-small;"><span style="background-color: #ffff00"> input = [<br />
["my","your","her","his","our"],<br />
["goat","sailboat","cabin"],<br />
["is","is usually","is always"],<br />
["stinky","leaking","clean"]<br />
]</span></span></span></p>
<p><span style="font-size: xx-small;"><span style="background-color: #ffff00">output = input.sequence</span></span></span></p>
<p><span style="font-size: xx-small;"> <span style="background-color: #ffff00">p output.length</span></span></span><br />
<span style="font-size: xx-small;"> <span style="background-color: #ffff00">p output</span></span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://seocracy.com/2008/06/fun-with-string-permutations/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Stuffing website inputs: A technique for gaining backlinks.</title>
		<link>http://seocracy.com/2008/05/stuffing-website-inputs-a-technique-for-gaining-backlinks/</link>
		<comments>http://seocracy.com/2008/05/stuffing-website-inputs-a-technique-for-gaining-backlinks/#comments</comments>
		<pubDate>Fri, 23 May 2008 00:00:00 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tips & Tricks]]></category>

		<guid isPermaLink="false">http://127.0.0.1/seocracy/?p=72</guid>
		<description><![CDATA[A simple and easy to automate method for gaining backlinks.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been a very bad blogger, I know.</span></p>
<p> </span></p>
<p>It has been almost a month since I last posted, but I have a good excuse: Datapresser. I have been coding and designing the new version for the past few weeks. I&#8217;m not too far behind schedule, and should be able to launch it live by the end of the month. I know alot of you who are members have been patiently waiting for it, and since the forums are busted, I know you havent been able to post and vent your rage at me for being late with the new release. I apologize. Check your emails for a status update and hang tight, because the wait will be worth it. (A new forum is coming too! Scouts Honor!) </span></p>
<p> </span></p>
<p>Apologies aside, it is shaping up to be pretty spectacular. I&#8217;m not quite ready to let the cat out of the bag yet, but I will soon share some video and some screenshots with everyone, so expect that to come within a few weeks. </span></p>
<p> </span></p>
<p>OK, since that&#8217;s out of the way, let&#8217;s get down to business, shall we? </span></p>
<p> </span></p>
<p>Today, I&#8217;d like to talk about backlinks. Specifically, I&#8217;d like to introduce a method for getting some easy backlinks.  This is something that I&#8217;ve always considered fairly obvious, but I was discussing it recently with a friend of mine who had never considered it. In light of that, I figured I might as well spill my guts to the rest of you in hopes that you may also benefit from this advice.</span></p>
<p> </span></p>
<p>We all know about XSS, of course. We know that unsanitized user input can leave a website open to malicious attacks or to less malicious exploitations for garnering backlinks. There has been much back and forth discussion about whether or not links gained through XSS have any staying power (or any power at all, for that matter). <a href="http://www.cambrianhouse.com/?login=login&amp;login_email=%22%3E%3Ca+href%3D%22http%3A%2F%2Fwww.seocracy.com%22%3ESeocracy.com+-+Do+as+I+say%2C+not+as+I+do%3C%2Fa%3E&amp;login_password=password&amp;submit=Login" target="_blank">Here is an example</a>. (<em>By the way, I disclosed this vulnerability to the owners of that site over 6 months ago, so I have no issue showing everyone here.</em>) Now, since XSS isn&#8217;t really what I want to focus on in this post, I don&#8217;t want to get into the issue of whether or not these sorts of links are worth anything. If you are all really curious, keep on eye on that link and see if it gets indexed. (Keep in mind, even though a link might show up in Yahoo, that doesnt mean it is worth anything.)</span></p>
<p> </span></p>
<p>I wanted to show you this as a first example because this type of XSS is simply an advanced facet of a really simple technique: gaining backlinks by stuffing inputs. </span></p>
<p>Here is an example of stuffing an input: <a href="http://www.quantcast.com/profile/no-data-for-site?domain=www.seocracy.com" target="_blank">Quantcast</a></span></p>
<p> </span></p>
<p>So, by now, are ya pickin&#8217; up what I&#8217;m puttin&#8217; down? This kind of stuff CAN get indexed (with a little effort on your part). You can focus on getting these pages indexed through whatever means you have at your disposal (linking from your database sites and farm sites, submitting these links to shady directories, throwing them up on link dumps like <a href="http://tinyurl.com/24gkol" target="_blank">twemes</a>, etcetera.) </span></p>
<p> </span></p>
<p><em>(As a side note, Irish Wonder recently posted about another very effective use of quantcast that <a href="http://www.irishwonder.syndk8.co.uk/2008/05/04/quantcast-closes-the-backdoor/" target="_blank">no longer works</a>. The method Irish Wonder talks about was particularly golden because it was quick and easy to create profile pages that were well linked to from other pages on the Quantcast site, whereas what I&#8217;ve shown you results in orphaned pages that you&#8217;ll have to link to and index yourself. Thanks to <a href="http://www.nickycakes.com" target="_blank">NickyCakes</a> for setting me straight on this point. <img src='http://seocracy.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />   ) </em></span></p>
<p> </span></p>
<p>Do you see the potential in this? There are thousands upon thousands of sites out there that do this sort of thing, and it couldn&#8217;t be easier to automate them. All you have to do is compile a database of each target-site to exploit, run your list of your own sites through each target-site, save the resulting URL and then get those URLs indexed. Free Backlinks; maybe not high quality backlinks, but free nonetheless.</span></p>
<p> </span></p>
<p>I have given you all a simple example here, but it is certainly not the cream of the crop. This requires some research on your part and some patience. No links are treated equally, and I often question just how many of the links I make through this method are actually worth anything. That said, I feel that it is really such a simple automated process that even if some of the links are junk, it is still worth the minimal effort I put into it. </span></p>
<p>Here is what I do: I have a folder on my toolbar that I throw exploitable urls into as I come across them. Every so often, I&#8217;ll go through each link in that folder and I&#8217;ll check out the robots.txt and the on-page tags to make sure its a valid target. If it passes inspection, I insert it into a database with all the others. At this point, when I start a new site, I can easily run it through each exploitable site in the database and take the resulting list of URLs and then set them up to be auto posted as backlinks on some blogs in my farms.</span></p>
<p>The result? Links. Whether or not they are great quality links really isnt the question. Even junk backlinks have a use (eg: obfuscating the rest of your sites backlinks to prevent espionage.)</span></p>
]]></content:encoded>
			<wfw:commentRss>http://seocracy.com/2008/05/stuffing-website-inputs-a-technique-for-gaining-backlinks/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Finding Recent Proxy Lists</title>
		<link>http://seocracy.com/2008/04/finding-recent-proxy-lists/</link>
		<comments>http://seocracy.com/2008/04/finding-recent-proxy-lists/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 00:00:00 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Tips & Tricks]]></category>

		<guid isPermaLink="false">http://127.0.0.1/seocracy/?p=71</guid>
		<description><![CDATA[A quick Google Dork to return recent lists of proxies in Googles index]]></description>
			<content:encoded><![CDATA[<p>I touched on this topic a long time ago with a post called <a href="../../posts/show/11-Dude-where-s-my-proxy-" target="_blank">Dude Wheres My Proxy?!?</a></span></p>
<p> </span></p>
<p>But I wanted to show you guys another quick google dork to take that search to the next level:</span></p>
<p> </span></p>
<p><a href="http://www.google.com/search?q=%2B%22%3A8080%22+%2B%22%3A3128%22+%2B%22%3A80%22+filetype%3Atxt&amp;as_qdr=m" target="_blank">This Google Query</a> will return all proxy lists added to the index in the past month (or past week or whatever you want)</span></p>
<p>This is still not a perfect way to find new proxies to use, since the lists are public they are full of either outdated or dead or already flagged proxies. By using the date modifier in your google search, you can at least try to eliminate as many old outdated proxy lists as possible.</span></p>
<p> </span></p>
<p>Run these through your proxy checker script and away you go!</span></p>
<p> </span></p>
<p> </span></p>
]]></content:encoded>
			<wfw:commentRss>http://seocracy.com/2008/04/finding-recent-proxy-lists/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Finding FREE Keyword Focused Content</title>
		<link>http://seocracy.com/2008/04/finding-free-keyword-focused-content/</link>
		<comments>http://seocracy.com/2008/04/finding-free-keyword-focused-content/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 00:00:00 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://127.0.0.1/seocracy/?p=70</guid>
		<description><![CDATA[Leveraging the conversational web for keyword focused content]]></description>
			<content:encoded><![CDATA[<p>At this exact moment, there are a staggering number of conversations taking place on the web.  People are talking, man! And they&#8217;re talking about STUFF! Real STUFF! Like Cars, and Toothpaste, and Shoes, and Credit Cards!! <em>AMAZING</em>, eh?</span></p>
<p> </span></p>
<p>OK, so maybe it&#8217;s not totally amazing, but what IS amazing is that you can leverage all these free conversations for content.</span></p>
<p> </span></p>
<p>For the sake of this post, I hacked up a quick and dirty sample that scrapes summize.com to deliver keyword focused chunks of content for you to use however you see fit. This is programmed in Ruby, using the Mechanize Gem (my favorite gem for scraping). </span></p>
<p> </span></p>
<p>Let&#8217;s say we&#8217;re promoting an offer for a credit check, or something of that nature. Naturally, we&#8217;ll want some content that is focused around the keyphrase &#8220;credit check&#8221; </span></p>
<blockquote><p><span style="background-color: #ffff00">require &#8216;rubygems&#8217;</span><br />
<span style="background-color: #ffff00">require &#8216;mechanize&#8217;</span></p>
<p><span style="background-color: #ffff00">agent = WWW::Mechanize.new</span><br />
<span style="background-color: #ffff00">agent.user_agent_alias = &#8220;Windows Mozilla&#8221;</span></p>
<p><span style="background-color: #ffff00">query = &#8220;credit check&#8221;</span><br />
<span style="background-color: #ffff00">doc = agent.get(&#8221;http://summize.com/search?q=#{query}&#8221;)</span></p>
<p><span style="background-color: #ffff00">messages = doc.search(&#8221;div.msg&#8221;)</span></p>
<p><span style="background-color: #ffff00">for message in messages</span><br />
<span style="background-color: #ffff00">message.search(&#8221;a&#8221;).remove</span><br />
<span style="background-color: #ffff00">content = message.search(&#8221;span&#8221;)</span><br />
<span style="background-color: #ffff00">puts content.inner_text</span><br />
<span style="background-color: #ffff00">end</span></p></blockquote>
<p>And the output from this little chunk of ruby coolness?</span></p>
<blockquote><p>Having a crappy Saturn experience.  Salesperson won&#8217;t check other dealers for cars.  Won&#8217;t let me fax credit ap.  2 hrs to pick up the car?<br />
I always lose the new activations to the credit check.<br />
pending credit check&#8230;. im fucking moving!!!!!!!!!<br />
Audio Visual: No credit check contract mobiles sony ericsson,nokia,samsung,motorola order online at..<br />
After waiting 3 fucking weeks my $50 check from ACE credit group. Gave $10 to Teresa since I owe her and kept the rest.<br />
My credit union&#8217;s web site is back up. Sadly no rebate check. Didn&#8217;t really expect it today based on my SSN.<br />
I&#8217;m debating wether I should walk up to Court St. to drop off a check at the Credit Union&#8230;.<br />
I&#8217;ll check out the Wings over Col. next week, new month, new credit card bill. <img src='http://seocracy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Shade on the Canal in Canal Win. has good wings<br />
Boo.. just short of getting my rebate check today&#8230;I really wanted to stimulate the economy by lowering my credit card debt too&#8230;oh wait..<br />
cash or check only.  they don&#8217;t take credit or debit.  we found that one out the hard way.</p></blockquote>
<p>Yup. Free content. </span></p>
<p>This content shouldn&#8217;t form the foundation of your sites text, but it is the perfect kind of stuff to put in a sidebar. This is good content to round out your existing pages in a relevant and unique way. I&#8217;d suggest putting this sort of content in a side bar, and making it look just like some kind of widget.</span></p>
<p>BTW, I should have mentioned: Summize has an API. http://summize.com/api</p>
]]></content:encoded>
			<wfw:commentRss>http://seocracy.com/2008/04/finding-free-keyword-focused-content/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
