<?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>Andrew Friedl</title>
	<atom:link href="http://www.andrewfriedl.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.andrewfriedl.com</link>
	<description>Analyst/Consultant/Coder</description>
	<lastBuildDate>Tue, 19 Mar 2013 04:32:07 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>How to drop a CLR assembly from SQL Server</title>
		<link>http://www.andrewfriedl.com/2013/03/how-to-drop-a-clr-assembly-from-sql-server/</link>
		<comments>http://www.andrewfriedl.com/2013/03/how-to-drop-a-clr-assembly-from-sql-server/#comments</comments>
		<pubDate>Tue, 19 Mar 2013 04:23:31 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Classic ASP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[CLR]]></category>
		<category><![CDATA[drop assembly]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[stored procedure]]></category>
		<category><![CDATA[TSQL]]></category>

		<guid isPermaLink="false">http://www.andrewfriedl.com/?p=1031</guid>
		<description><![CDATA[Lately I have been spending my evening hours developing stored procedures, scalar and table value functions for SQL server in C#.  It&#8217;s a definite plus to be able to create all the string functions that are &#8220;missing&#8221; from TSQL and simply add them in. One of the tasks that might accompany your CLR for SQL [...]]]></description>
				<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushSql.js"></script>
<p>Lately I have been spending my evening hours developing stored procedures, scalar and table value functions for SQL server in C#.  It&#8217;s a definite plus to be able to create all the string functions that are &#8220;missing&#8221; from TSQL and simply add them in. One of the tasks that might accompany your CLR for SQL Server development is the need to completely remove an assembly from a database on your server.<span id="more-1031"></span></p>
<p>While dropping an assembly is not a difficult process it does require the proper permissions for the user performing the operation and if the assembly being removed contains numerous function and procedure definitions it can be time consuming and tedious work.  The trick to dropping the assembly is to first remove all the procedure and function definitions and then drop the assembly itself and that can be tedious.  Here&#8217;s a little script to help you get that done.</p>
<p><pre class="brush: sql">Declare @asmName varchar(255)
Declare @objName varchar(255)
Declare @objType varchar(255)
Declare @sql varchar(1000)

Select @asmName = 'MyCustomAssembly'

Declare CSR Cursor For
Select C. name as [ObjectName], C.type
From Sys.Assemblies A
Inner Join SYS.ASSEMBLY_MODULES B oN a.assembly_id=B.assembly_id
Inner Join SYS.OBJECTS C ON B.object_id = C.object_id
Where a.name = @asmName

Open CSR

Fetch Next From CSR Into @objName, @objType;
While @@FETCH_STATUS = 0
Begin

	If @objType = 'PC' select @sql = 'DROP PROCEDURE ' + @objName
	If @objType = 'FS' select @sql = 'DROP FUNCTION ' + @objName

	Print @sql

	Fetch Next From CSR Into @objName, @objType;
End;

Close CSR;
Deallocate CSR;

Print 'DROP ASSEMBLY ' + @asmName</pre></p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewfriedl.com/2013/03/how-to-drop-a-clr-assembly-from-sql-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xml, Zip Files and Downloading from the Web</title>
		<link>http://www.andrewfriedl.com/2013/03/xml-zip-files-and-downloading-from-the-web/</link>
		<comments>http://www.andrewfriedl.com/2013/03/xml-zip-files-and-downloading-from-the-web/#comments</comments>
		<pubDate>Fri, 08 Mar 2013 16:15:50 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Dot Net]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[clickbank]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[extract]]></category>
		<category><![CDATA[Ionic.Zip]]></category>
		<category><![CDATA[we]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[zip]]></category>
		<category><![CDATA[zipentry]]></category>
		<category><![CDATA[zipfile]]></category>

		<guid isPermaLink="false">http://www.andrewfriedl.com/?p=1015</guid>
		<description><![CDATA[When I first started programming (on punch cards) I was required to specify my data sources within cryptic JCL statements. These days there is data everywhere you look.  Downloading and unzipping data from "the web" was unheard of "way back then" however it is a common programming task these days.  This brief example gives you the code necessary to get started.]]></description>
				<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushSql.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
<p>When I first started programming (on punch cards) I was required to specify my data sources within cryptic JCL statements. These days there is data everywhere you look.  Downloading and unzipping data from &#8220;the web&#8221; was unheard of &#8220;way back then&#8221; however it is a common programming task these days.</p>
<p>When it comes to data found on the internet it is commonly offered through one of three basic services: Streamed (aka Web Service) , FTP or HTTP download. Data offered using each type of service has it&#8217;s own set of methods for retrieval. </p>
<p>This brief example shows how to download, extract and process a zip file from ClickBank that contains Xml formatted data related to electronic goods and services.  If you&#8217;re into affiliate marketing this may be of interest to you.<span id="more-1015"></span></p>
<p>The code is more or less self explanatory.</p>
<p><pre class="brush: csharp">using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Xml;

using Ionic.Zip;

namespace ProcessClickBank
{
    class Program
    {
        static void Main(string[] args)
        {
            // Build file names and paths
            string targetName = &quot;{0}_marketplace_feed_v2.xml.zip&quot;;
            targetName = string.Format(targetName,DateTime.Now.ToString(&quot;yyyyMMdd&quot;));
            string targetPath = @&quot;c:\dev\data\clickbank\&quot; + targetName;

            // Download the clickbank Xml file
            DownloadFile(targetPath);

            Console.WriteLine(&quot;Loading Xml: {0}&quot;, DateTime.Now);
            using (FileStream fsInput = new FileStream(targetPath, 
                FileMode.Open, FileAccess.Read, FileShare.Read)
                )
            {
                // Locate the proper ZipEntry and open a readable stream
                ZipFile zipFile = new ZipFile(targetPath);
                ZipEntry zipEntry = zipFile.Entries.Single&lt;ZipEntry&gt;(
                    item =&gt; string.Compare(item.FileName,&quot;marketplace_feed_v2.xml&quot;,true) == 0
                    );
                if (zipEntry == null)
                {
                    Console.WriteLine(&quot;Missing ZipEntry 'marketplace_feed_v2.xml'&quot;);
                    return;
                }

                // Parse the xml data
                XmlDocument doc = null;

                using (Ionic.Crc.CrcCalculatorStream zipEntryStream = zipEntry.OpenReader())
                {
                    XmlReaderSettings xmlSettings = new XmlReaderSettings();
                    xmlSettings.XmlResolver = null;
                    xmlSettings.DtdProcessing = DtdProcessing.Ignore;
                    XmlReader xmlReader = XmlReader.Create(zipEntryStream, xmlSettings);

                    doc = new XmlDocument();
                    doc.Load(xmlReader);
                }

                Console.WriteLine(&quot;Completed Xml: {0}&quot;, DateTime.Now);

                ProcessData(doc);
            }

            Console.WriteLine(&quot;Done: {0}&quot;, DateTime.Now);
            Console.ReadLine();
        }

        static void DownloadFile(string targetPath)
        {
            Console.WriteLine(&quot;Starting download: {0}&quot;, DateTime.Now);
            WebClient client = new WebClient();
            client.DownloadFile(@&quot;https://accounts.clickbank.com/feeds/marketplace_feed_v2.xml.zip&quot;, targetPath);
            Console.WriteLine(&quot;Completed download: {0}&quot;, DateTime.Now);
        }

        static void ProcessData(XmlDocument doc)
        {
            Console.WriteLine(&quot;Processing Data: {0}&quot;, DateTime.Now);
            //----------------------------
            // Process ClickBank data here
            // ---------------------------
            Console.WriteLine(&quot;Processing Done: {0}&quot;, DateTime.Now);
        }
    }
}
</pre></p>
<p>That&#8217;s all there is to it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewfriedl.com/2013/03/xml-zip-files-and-downloading-from-the-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing posts from a single WordPress category</title>
		<link>http://www.andrewfriedl.com/2013/01/writing-posts-from-a-single-wordpress-category/</link>
		<comments>http://www.andrewfriedl.com/2013/01/writing-posts-from-a-single-wordpress-category/#comments</comments>
		<pubDate>Sun, 27 Jan 2013 22:16:02 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[category posts]]></category>
		<category><![CDATA[pages loop]]></category>
		<category><![CDATA[posts loop]]></category>
		<category><![CDATA[the loop]]></category>
		<category><![CDATA[wordpress loop]]></category>

		<guid isPermaLink="false">http://www.andrewfriedl.com/?p=990</guid>
		<description><![CDATA[A question often asked by WordPress authors is how to write out one or more posts from a single category of posts to a page on their website &#8211; preferably using a short code.  While there are a number of individual plugins that address this functionality I submit that you can&#8217;t get more bang for [...]]]></description>
				<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushSql.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<p>A question often asked by WordPress authors is how to write out one or more posts from a single category of posts to a page on their website &#8211; preferably using a short code.  While there are a number of individual plugins that address this functionality I submit that you can&#8217;t get more bang for the buck than to use the free <strong>Kazoo Templated Content</strong> plugin.<span id="more-990"></span></p>
<p>The Kazoo plugin allows you to access data using the WordPress API by typing simple mini-templates right into the page or post you are working on.  When the page or post is viewed Kazoo retrieves that data from WordPress and writes it out according to the style and structure of the mini-template.  You get the data you want from WordPress, when you want it, where you want it and in exactly the structure and style that you want all without a writing a line PHP or resorting to custom page templates.</p>
<p>Here&#8217;s Kazoo template that writes out posts from a specific category of posts using the getposts template tag.</p>
<p><pre class="brush: xml">[ kazoo ]
&lt;!--{getposts|category_name=Wordpress&amp;orderby=post_date&amp;order=ASC}--&gt;
&lt;!--{post}--&gt;&lt;div&gt;&lt;!--{subst}--&gt;
&lt;h3&gt;{{post_title}}&lt;/h3&gt;
Author {{post_author}}, {{post_date}} {{post_time}}, Comments ({{comment_count}})&lt;br/&gt;
&lt;a href=&quot;{{post_permalink}}&quot;&gt;Link&lt;/a&gt;&lt;br/&gt;
&lt;hr&gt;{{post_content}}
&lt;!--{/subst}--&gt;&lt;/div&gt;
&lt;!--{/post}--&gt;
&lt;!--{else}--&gt;
There are no posts at this time.&lt;br/&gt;
&lt;!--{/else}--&gt;
&lt;!--{/getposts}--&gt;
[ /kazoo ]</pre></p>
<p>If you have the Kazoo Plugin installed and enabled you can include this handy mini-template while you&#8217;re entering page or post content and when the page is viewed Kazoo will write out posts from the category specified. Be sure to change the category from mine to one of your own and be sure you are in HTML mode when entering the mini-template.</p>
<p>So why would you use Kazoo rather than some other plugin?  Because Kazoo allows you to query pages, <a title="RSS Feed from Amazon with affiliate links" href="/popular-books/wordpress/" target="_blank">external RSS feeds</a> and other WordPress data.  It allows you to include or exclude content based on who is logged in and what access level they have, or whether you&#8217;re viewing the home page, post page, and a number of other conditions.  Kazoo provides the functionality of more than just one plugin and it allows you to style the output in whatever way you want.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewfriedl.com/2013/01/writing-posts-from-a-single-wordpress-category/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Updated books pages</title>
		<link>http://www.andrewfriedl.com/2013/01/updated-books-pages/</link>
		<comments>http://www.andrewfriedl.com/2013/01/updated-books-pages/#comments</comments>
		<pubDate>Wed, 09 Jan 2013 02:40:39 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[amazon.com]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[kazoo]]></category>
		<category><![CDATA[templates]]></category>

		<guid isPermaLink="false">http://www.andrewfriedl.com/?p=981</guid>
		<description><![CDATA[I&#8217;ve updated the books pages to reflect the most popular books being sold by Amazon. Check them out under the books menu. Each page was created using the Kazoo plugin using a small inline template and the wp_feed template tag.]]></description>
				<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushSql.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<p>I&#8217;ve updated the books pages to reflect the most popular books being sold by Amazon.  Check them out under the books menu.  Each page was created using the Kazoo plugin using a small inline template and the wp_feed template tag.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewfriedl.com/2013/01/updated-books-pages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Since we&#8217;re still here&#8230;</title>
		<link>http://www.andrewfriedl.com/2012/12/sincewere-still-here/</link>
		<comments>http://www.andrewfriedl.com/2012/12/sincewere-still-here/#comments</comments>
		<pubDate>Fri, 21 Dec 2012 14:53:53 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[apocalypse]]></category>
		<category><![CDATA[doomsday]]></category>
		<category><![CDATA[end of the world]]></category>
		<category><![CDATA[mayan]]></category>

		<guid isPermaLink="false">http://www.andrewfriedl.com/?p=922</guid>
		<description><![CDATA[I just thought I&#8217;d wish everyone a happy post Mayan apocalypse. Now that you&#8217;re still here with work to get done visit the download section and snag some source code to make your programming life easier and don&#8217;t forget to prepare for Y3K.  ;-) It&#8217;s sooner than you think.]]></description>
				<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushSql.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<p>I just thought I&#8217;d wish everyone a happy post Mayan apocalypse.</p>
<p><span id="more-922"></span></p>
<p>Now that you&#8217;re still here with work to get done visit the download section and snag some source code to make your programming life easier and don&#8217;t forget to prepare for Y3K.  ;-) It&#8217;s sooner than you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewfriedl.com/2012/12/sincewere-still-here/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Read and transform csv, fixed, OleDb, and SQL data easily.</title>
		<link>http://www.andrewfriedl.com/2012/08/read-and-transform-csv-fixed-oledb-and-sql-data-easily/</link>
		<comments>http://www.andrewfriedl.com/2012/08/read-and-transform-csv-fixed-oledb-and-sql-data-easily/#comments</comments>
		<pubDate>Tue, 07 Aug 2012 18:59:02 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Dot Net]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[csv reader]]></category>
		<category><![CDATA[datetime]]></category>
		<category><![CDATA[DBnull]]></category>
		<category><![CDATA[delimited text]]></category>
		<category><![CDATA[fixed width]]></category>
		<category><![CDATA[OleDb]]></category>
		<category><![CDATA[transform]]></category>

		<guid isPermaLink="false">http://www.andrewfriedl.com/?p=896</guid>
		<description><![CDATA[Whenever I find myself reading data from fixed width text, csv files, delimited files or other data source I almost always find myself performing data transformation and validation at the same time. Wouldn&#8217;t it would be nice to have a .NET assembly that allowed you to read data from all the usual sources and easily [...]]]></description>
				<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushSql.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<p>Whenever I find myself reading data from fixed width text, csv files, delimited files or other data source I almost always find myself performing data transformation and validation at the same time.</p>
<p>Wouldn&#8217;t it would be nice to have a .NET assembly that allowed you to read data from all the usual sources and easily perform complex data transformations at the same time?  Well now you can.<span id="more-896"></span></p>
<p>IncreLogic.ETL is a library of code that provides a common interface for reading data  from a wide variety of different sources including:</p>
<ul>
<li>Delimited text (csv)</li>
<li>Fixed width text</li>
<li>OleDb</li>
<li>SqlServer</li>
<li>SQLite</li>
<li>Mixed record format.</li>
</ul>
<p>While there are other libraries that also read from these sources including the basic .net assemblies themselves few if any provide the ability to perform transformations on the data while you are reading it and fewer still provide this functionality the same way across every source.  IncreLogic.ETL does all this and more.</p>
<p>Using IncreLogic.ETL you can create sophisticated sets of transformations and apply them to any of the supported formats.  You can store your transforms and even your entire  data source definition to XML and retrieve it later allowing you to share a single definition across the enterprise.</p>
<p>IcreLogic.ETL supports simple transformations like testing for DBNull and Empty String but it also provides for more structured  transformations like:</p>
<ul>
<li>If-Then-Else</li>
<li>Switch-Case</li>
<li>Serial Lists of Transforms</li>
<li>Parallel List of Transforms</li>
<li>Cyclic Transforms</li>
<li>Try-Catch-Finally</li>
</ul>
<p>There are transformations to provide for almost an tasks you might need including:</p>
<ul>
<li>Auto Number</li>
<li>Boolean tests (see If-Then-Else)</li>
<li>Empty, Null, DBNull substitution</li>
<li>Numeric Formatting for any number type and DateTime.</li>
<li>DateTime and Numeric Parsing</li>
<li>Trim, Truncate, Crop, Substitute, Padding</li>
<li>Character Extraction and Scrubbing</li>
<li>Numeric, DateTime and other conversions.</li>
<li>Random number generation</li>
<li>Stack based Variable Store, Retrieve and Substitute.</li>
</ul>
<p>There are over 150 data transformations  included that when combined with the structured transforms allow you to create sophisticated and highly complex transformations that can be stored in XML and shared throughout the enterprise.</p>
<p>IncreLogic ETL is available for FREE under the GPL2 license on the downloads page.  Happy Coding!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewfriedl.com/2012/08/read-and-transform-csv-fixed-oledb-and-sql-data-easily/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An SFTP test server you can run on your desktop</title>
		<link>http://www.andrewfriedl.com/2012/06/an-sftp-test-server-you-can-run-on-your-desktop/</link>
		<comments>http://www.andrewfriedl.com/2012/06/an-sftp-test-server-you-can-run-on-your-desktop/#comments</comments>
		<pubDate>Tue, 26 Jun 2012 03:57:16 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Dot Net]]></category>
		<category><![CDATA[SFTP client]]></category>
		<category><![CDATA[SFTP Server]]></category>
		<category><![CDATA[SFTP test server]]></category>
		<category><![CDATA[sftp testing]]></category>
		<category><![CDATA[TinySSFTP]]></category>

		<guid isPermaLink="false">http://www.andrewfriedl.com/?p=877</guid>
		<description><![CDATA[A few months ago I was working on a file transfer client that required SFTP.  I quickly learned that one of the challenges of building an SFTP client is finding an SFTP server you can test your code against.  If you have faced this problem or might be facing this problem in the future then [...]]]></description>
				<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushSql.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<p>A few months ago I was working on a file transfer client that required SFTP.  I quickly learned that one of the challenges of building an SFTP client is finding an SFTP server you can test your code against.  If you have faced this problem or might be facing this problem in the future then you will want to have a look at TinySSFTP.<span id="more-877"></span></p>
<p>After several days of scouring the internet looking for a free SFTP server to test my code against I had found nothing.  I&#8217;m not saying there are no free SFTP servers out there but I didn&#8217;t find any &#8211; not a single one.  Even the vendors selling SFTP components for .NET don&#8217;t seem to offer anything for their customers.</p>
<p>When hope seemed lost I stumbled across the <strong>sftps-lite</strong> project from <a title="Nuane.com and SFTP-lite" href="http://nuane.com/sftp-lite/" target="_blank">nuane.com</a>.  This helpful bit of code implemented a small command line SFTP server.   It was a major find and it was nice but I found myself wanting more features.</p>
<div id="attachment_878" class="wp-caption alignleft" style="width: 369px"><a href="http://www.andrewfriedl.com/wp-content/uploads/2012/06/TinySSFTP.png"><img class="size-full wp-image-878" title="TinySSFTP" src="http://www.andrewfriedl.com/wp-content/uploads/2012/06/TinySSFTP.png" alt="Image of TinySSFTP" width="359" height="188" /></a><p class="wp-caption-text">TinySFTP &#8211; SFTP Server for your Desktop</p></div>
<p>So with a little coding TinySSFTP was born and with it you can:</p>
<ul>
<li>Create an SFTP test server just about anywhere, anytime.</li>
<li>Start and stop the server with the press of a button</li>
<li>Select the port to listen on</li>
<li>Have test logins, passwords and folders within an XML config file.</li>
<li>Not bother running an SFTP server as a service.</li>
</ul>
<p>While I&#8217;m fairly certain the server functionality is not 100% complete it allowed me to do some pretty thorough testing of my SFTP client software.  With it I was able to connect, test for, create and change directories, test for, upload and delete files, retrieve directory listings and disconnect.  Not bad for free code.</p>
<p>So while you might expect that companies selling $200 and higher SFTP libraries would offer something in the way of a test server I find that most of them do not.  If you&#8217;re working for a larger company you may have an SFTP server you can test with.  For smaller shops and individual developers TinySSFTP may be a useful tool for your toolbox.</p>
<p>You can find the TinySSFTP code project on the <a title="Download TinySSFTP" href="/downloads/">downloads</a> page.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewfriedl.com/2012/06/an-sftp-test-server-you-can-run-on-your-desktop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WP-Bot-Content</title>
		<link>http://www.andrewfriedl.com/2012/05/wp-bot-content/</link>
		<comments>http://www.andrewfriedl.com/2012/05/wp-bot-content/#comments</comments>
		<pubDate>Thu, 31 May 2012 21:45:30 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[ask]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[conditional]]></category>
		<category><![CDATA[content]]></category>
		<category><![CDATA[external links]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[msn bot]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.andrewfriedl.com/?p=871</guid>
		<description><![CDATA[If you&#8217;ve ever thought about adding or removing content based upon who or what (as in major search engine) was &#8220;viewing&#8221; your content then the WP-Bot-Content plugin for WordPress may interest you. WP-Bot-Content (WBC) is a new plugin that allows you to hide or show blocks of content based upon three basic types (or entity) [...]]]></description>
				<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushSql.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<p>If you&#8217;ve ever thought about adding or removing content based upon who or what (as in major search engine) was &#8220;viewing&#8221; your content then the WP-Bot-Content plugin for WordPress may interest you.<span id="more-871"></span></p>
<p>WP-Bot-Content (WBC) is a new plugin that allows you to hide or show blocks of content based upon three basic types (or entity) of viewers: bots, users, and guests.  While there are other plugins that may do this WBC allows you to specify with a single short code the manner in which a block of content is handled for all three client types and they can all be handled differently.</p>
<p>One of the more interesting  features of the plugin is the ability to strip external links from content when a bot is viewing your site &#8211; something which may increase the content&#8217;s value in the eyes of major search engines.  Another interesting feature  is that you can receive an email notification when any one of the entity types browse the content.  All this using only a simple short code.</p>
<p>The plugin is free and you can get it from the downloads section.  Happy Blogging!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewfriedl.com/2012/05/wp-bot-content/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordBase Word Database Software Released</title>
		<link>http://www.andrewfriedl.com/2011/12/wordbase-word-database-software-released/</link>
		<comments>http://www.andrewfriedl.com/2011/12/wordbase-word-database-software-released/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 03:07:43 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Dot Net]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[Extol]]></category>
		<category><![CDATA[word database]]></category>
		<category><![CDATA[word list]]></category>
		<category><![CDATA[WordBase]]></category>

		<guid isPermaLink="false">http://www.andrewfriedl.com/?p=647</guid>
		<description><![CDATA[Hot off the press is the WordBase 1.0 library for .Net 4.0. WordBase is a C# library that allows you to compile word lists into compressed libraries and have them available for loading and searching. The code provides for compiling sorted lists of words into tightly compressed files. The results are highly compacted word libraries [...]]]></description>
				<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushSql.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<p><img class="alignleft size-thumbnail wp-image-654" title="word-list" src="http://www.andrewfriedl.com/wp-content/uploads/2011/12/positive-word-list.2jpg-150x150.jpg" alt="" width="150" height="150" />Hot off the press is the WordBase 1.0 library for .Net 4.0. WordBase is a C# library that allows you to compile word lists into compressed libraries and have them available for loading and searching. The code provides for compiling sorted lists of words into tightly compressed files. The results are highly compacted word libraries that can be loaded whenever large lists of common or proper nouns (or libraries containing both) are required.<span id="more-647"></span></p>
<p>WordBase provides custom cursor objects that allow you to forward and reverse scroll through words within a library. You can pinpoint the record containing a given word or the exact location of a word. If a WordBase library contains both common and proper nouns you can search each list individually or both at the same time. WordBase is handy for dealing with lists of searchable words.</p>
<p>WordBase was originally created (in VB4) to supply multiple forward and reverse and even random cursors over words which were combined with numbers and other data to create very real looking personal data which was then submitted to web applications used by online scammers. WordBase was used to submit over a million faux records to PayPal scammers, bank account phishers other such degenerates.</p>
<p>Legitimate uses for this library would be to create generic records containing real words for database testing or for testing web applications. The WordBase library may be used freely in any application in any way you care to use it. You can find WordBase in the downloads section. The zip file includes all required DLL&#8217;s and several useful compiled word lists.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewfriedl.com/2011/12/wordbase-word-database-software-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Affiliate htaccess</title>
		<link>http://www.andrewfriedl.com/2011/02/affiliate-htaccess/</link>
		<comments>http://www.andrewfriedl.com/2011/02/affiliate-htaccess/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 02:21:49 +0000</pubDate>
		<dc:creator>Andrew</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.andrewfriedl.com/?p=158</guid>
		<description><![CDATA[Some time ago I was trying out a new plug-in for WordPress on my test site.  It turns out the plug-in was not only a waste of time but it created a security hole on my hosting account. Locating the problem and patching things up was not difficult and fortunately the hacker who found the [...]]]></description>
				<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushSql.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCSharp.js"></script>
            <script type="text/javascript" src="http://www.andrewfriedl.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<p>Some time ago I was trying out a new plug-in for WordPress on my test site.  It turns out the plug-in was not only a waste of time but it created a security hole on my hosting account. Locating the problem and patching things up was not difficult and fortunately the hacker who found the security breach was more interested in posting affiliate links than being destructive.</p>
<p>Thankfully I did not have to restore my sites from the latest backup.  The only problem was that there were now hundreds of links recorded on the web all pointing to various folders on my sites that would return now be returning 404 pages.<span id="more-158"></span></p>
<p>Undesirable inbound links have long half lives and months later I was amazed to find the hacker&#8217;s affiliate link traffic still pounding my websites to the tune of 800 plus page views per day.  It was aggravating to have this traffic robbing me of bandwidth.  Then a thought occurred to me.  While I could not stop the flow of traffic I could redirect it.   Perhaps this was an opportunity after all.</p>
<p>So the question became how to redirect all the inbound links?  There had been at least fifty different affiliate pages placed in each and every folder created by the hacker and there were eight folders.  There was no way to mimic all of the pages as they had all been deleted and anyway the work involved would be prohibitive.  I needed to redirect every page request within a given folder without having a unique page for every request.</p>
<p>It turns out this is very easy.  You can redirect inbound traffic using an .htaccess file.  So I recreated the individual folders and placing an .htaccess file inside each one to forward all traffic requested of the directory to a new link of my own choosing.  Being interested in affiliate marketing myself I signed up to promote some interesting products on Clickbank and routed all the traffic to those products with my affiliate links.  So while I cannot stem the tide of the inbound calls to my websites I can at least redirect them to some very fine products that can be purchased.  Who knows, maybe one of the hundreds of daily page requests will generate some cash flow.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrewfriedl.com/2011/02/affiliate-htaccess/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
