<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>StephenCuppett.com &#187; Development</title>
	<atom:link href="http://cuppett.wordpress.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://cuppett.wordpress.com</link>
	<description>Helpful Notes and Major Milestones</description>
	<lastBuildDate>Sat, 26 Jun 2010 00:52:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='cuppett.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/8090a371ba83a6b6e4ebc1eb27007f2f?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>StephenCuppett.com &#187; Development</title>
		<link>http://cuppett.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://cuppett.wordpress.com/osd.xml" title="StephenCuppett.com" />
	<atom:link rel='hub' href='http://cuppett.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Default PostgreSQL String Sort Order Bites Me in the SAS</title>
		<link>http://cuppett.wordpress.com/2010/06/22/default-postgresql-string-sort-order-bites-me-in-the-sas/</link>
		<comments>http://cuppett.wordpress.com/2010/06/22/default-postgresql-string-sort-order-bites-me-in-the-sas/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 14:23:34 +0000</pubDate>
		<dc:creator>cuppett</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Research]]></category>

		<guid isPermaLink="false">http://cuppett.wordpress.com/?p=118</guid>
		<description><![CDATA[Sometime during the development of an internal PHP and SAS mixed application, I&#8217;ve had some interesting transitions. Notably: MySQL -&#62; PostgreSQL ACCESS/MYSQL -&#62; ACCESS/ODBC (MySQL) -&#62;ACCESS/ODBC (pgODBC) -&#62; ACCESS/ODBC (DataDirect 64-bit) LATIN1 -&#62; UTF-8 SAS 9.1.3 -&#62; SAS 9.2 Most of these transitions went pretty straightforward.  However, one bug got introduced somewhere along the way [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=118&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Sometime during the development of an internal PHP and SAS mixed application, I&#8217;ve had some interesting transitions. Notably:</p>
<ul>
<li>MySQL -&gt; PostgreSQL</li>
<li>ACCESS/MYSQL -&gt; ACCESS/ODBC (MySQL) -&gt;ACCESS/ODBC (pgODBC) -&gt; ACCESS/ODBC (DataDirect 64-bit)</li>
<li>LATIN1 -&gt; UTF-8</li>
<li>SAS 9.1.3 -&gt; SAS 9.2</li>
</ul>
<p>Most of these transitions went pretty straightforward.  However, one bug got introduced somewhere along the way and I just couldn&#8217;t ever seem to figure out what would cause it.</p>
<p>For some reason, to download a list of features to get real ID numbers and then match by name, this wouldn&#8217;t work:</p>
<div style="margin-left:40px;"><span style="font-family:monospace;">PROC SORT data=PG.features(RENAME=(id=feature_id name=feature_name)) out=features;</span><br style="font-family:monospace;" /><span style="font-family:monospace;"> LABEL feature_id=&#8221;feature_id&#8221;;</span><br style="font-family:monospace;" /><span style="font-family:monospace;"> BY feature_name;</span><br style="font-family:monospace;" /><span style="font-family:monospace;"> WHERE release_id=&amp;release_id;</span><br style="font-family:monospace;" /><span style="font-family:monospace;">RUN;</span><br style="font-family:monospace;" /><br />
<span style="font-family:monospace;">DATA folders(KEEP=feature_id name);</span><br style="font-family:monospace;" /><span style="font-family:monospace;"> MERGE folders(IN=in1) features(IN=in2);</span><br style="font-family:monospace;" /><span style="font-family:monospace;"> BY feature_name;</span><br style="font-family:monospace;" /><span style="font-family:monospace;"> IF in1;</span><br style="font-family:monospace;" /><span style="font-family:monospace;"> IF in2;</span><br style="font-family:monospace;" /><span style="font-family:monospace;">RUN;</span></div>
<p>I&#8217;d get bizarre errors out of SAS that the list wasn&#8217;t sorted.  Whenever it occurred, I&#8217;d inspect the resultant (and intermediate) datasets, and everything seemed sorted just fine.  Instead, I had to have something like this:</p>
<div style="margin-left:40px;"><span style="font-family:monospace;">/* Downloading the features for this release */</span><br style="font-family:monospace;" /><span style="font-family:monospace;">PROC SORT data=PG.features(RENAME=(id=feature_id name=feature_name)) out=features;</span><br style="font-family:monospace;" /><span style="font-family:monospace;">LABEL feature_id=&#8221;feature_id&#8221;;</span><br style="font-family:monospace;" /><span style="font-family:monospace;">BY feature_name;</span><br style="font-family:monospace;" /><span style="font-family:monospace;">WHERE release_id=&amp;release_id;</span><br style="font-family:monospace;" /><span style="font-family:monospace;">RUN;</span><br style="font-family:monospace;" /><br />
<span style="font-family:monospace;">/* 9.2 workaround?  For some reason if I sort on a RENAME or don&#8217;t, then try to */</span><br style="font-family:monospace;" /><span style="font-family:monospace;">/* MERGE after RENAME on a sorted field, it won&#8217;t work. */</span><br style="font-family:monospace;" /><span style="font-family:monospace;">PROC SORT data=features;</span><br style="font-family:monospace;" /><span style="font-family:monospace;">BY feature_name;</span><br style="font-family:monospace;" /><span style="font-family:monospace;">RUN;</span><br style="font-family:monospace;" /><br />
<span style="font-family:monospace;">PROC SQL;</span><br style="font-family:monospace;" /><span style="font-family:monospace;">CREATE INDEX feature_name ON<br />
features(feature_name);</span><br style="font-family:monospace;" /><span style="font-family:monospace;"> </span></div>
<div style="margin-left:40px;"><span style="font-family:monospace;">DATA folders(KEEP=feature_id name);</span><br style="font-family:monospace;" /><span style="font-family:monospace;">MERGE folders(IN=in1) features(IN=in2);</span><br style="font-family:monospace;" /><span style="font-family:monospace;">BY feature_name;</span><br style="font-family:monospace;" /><span style="font-family:monospace;">IF in1;</span><br style="font-family:monospace;" /><span style="font-family:monospace;">IF in2;</span><br style="font-family:monospace;" /><span style="font-family:monospace;">RUN;</span></div>
<p>You can clearly see my frustration (and the blaming of my employer&#8217;s own software over Postgres) in the comments.  In addition, I probably overkilled the solution by re-sorting and then also creating an index, but it did make the problem go away.</p>
<p>Eventually, I got another bug report from a user with the phrasing, &#8220;Incorrect sorting within letter group in Features table&#8221;.  That led me to this entry in the Postgres wiki:</p>
<p><a href="http://wiki.postgresql.org/wiki/FAQ#How_do_I_change_the_sort_ordering_of_textual_data.3F" target="_blank">http://wiki.postgresql.org/wiki/FAQ#How_do_I_change_the_sort_ordering_of_textual_data.3F</a></p>
<p>I discovered SAS sorts strings based on rules found in &#8220;C&#8221; locale collation. Even though I read some documentation attributing the default LC_COLLATE setting as &#8220;C&#8221;, in fact, for my database, it was set to &#8220;en_US.UTF-8&#8243;. What this basically means is when sorting the following list:</p>
<ul>
<li>GLMMOD : Tests</li>
<li>GLM : ODS Graphics</li>
<li>GLM : Checklist</li>
<li>GLMMOD : Checklist</li>
</ul>
<p>You&#8217;ll get:</p>
<ol>
<li>GLM : Checklist</li>
<li>GLMMOD : Checklist</li>
<li>GLMMOD : Tests</li>
<li>GLM : ODS Graphics</li>
</ol>
<p>Which seems incorrect at first, until you realize it sorts disregarding whitespace and special characters.  However, SAS and &#8220;C&#8221; locale collation sort like this:</p>
<ol>
<li>GLM : Checklist</li>
<li>GLM : ODS Graphics</li>
<li>GLMMOD : Checklist</li>
<li>GLMMOD : Tests</li>
</ol>
<p>Because PROC SORT and other SAS mechanisms issue and rely on native database commands for some operations, this behavior can produce results in ordering undesirable for SAS.  SAS actually performed very admirably by delegating the sorting to the database, setting the appropriate flags on the dataset, but then still catch the match merge problem at runtime!</p>
<p>Long story short, when using PostgreSQL with SAS, it&#8217;s probably a good idea to make sure the database is created with the correct setting for LC_COLLATE. If it is not, you may end up with crazy gyrations like mine in your code.  Luckily for me, it&#8217;s a fixable scenario whereby the database only needs dumped, then restored after it has been recreated with the desired collation.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cuppett.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cuppett.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cuppett.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cuppett.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cuppett.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cuppett.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cuppett.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cuppett.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cuppett.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cuppett.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cuppett.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cuppett.wordpress.com/118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cuppett.wordpress.com/118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cuppett.wordpress.com/118/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=118&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cuppett.wordpress.com/2010/06/22/default-postgresql-string-sort-order-bites-me-in-the-sas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5694926c74062291abf731e716300b56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cuppett</media:title>
		</media:content>
	</item>
		<item>
		<title>Using SOAP (non-REST) web services with CakePHP</title>
		<link>http://cuppett.wordpress.com/2009/07/27/using-soap-non-rest-web-services-with-cakephp/</link>
		<comments>http://cuppett.wordpress.com/2009/07/27/using-soap-non-rest-web-services-with-cakephp/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 01:51:01 +0000</pubDate>
		<dc:creator>cuppett</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Research]]></category>

		<guid isPermaLink="false">http://www.stephencuppett.com/wordpress/?p=47</guid>
		<description><![CDATA[I recently had a need to support a complex SOAP web service from CakePHP.  Cake provides some built-in support for REST based web services; however, this situation required more.  This post should show how to set this up on your own projects and still utilize all your normal controller and model goodness without too much screwing around.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=47&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I recently had a need to support a complex SOAP web service from <a href="http://cakephp.org/">CakePHP</a>.  Cake provides some built-in support for REST based web services; however, this situation required more.  This post should show how to set this up on your own projects and still utilize all your normal controller and model goodness without too much screwing around.</p>
<p>Pleas see <a href="http://www.stephencuppett.com/downloads/soap_cakephp.tar">this attachment</a> for the source code described in this article.</p>
<p>The method I will outline here requires the php-soap module.</p>
<p>First, the WSDL.  For my project, I started with a WSDL created in another tool.  My WSDL specifies a slightly different object set than my CakePHP application.  I&#8217;m sure with PHP5 and some finessing of the Model classes, you could probably use the same set; however, it was easy enough to just create some really vanilla objects to house the transport objects and use those to communicate with the webservice.  Both the WSDL and the receiving controller are present in the attachment.</p>
<p>What you will notice is that the *DTO objects defined in the controller file reciprocate the structure of the objects in the WSDL and the methods also are represented in the controller.  I put them in the controller file because it wasn&#8217;t really obvious to me where in Cake&#8217;s structure &#8220;outside code&#8221; should really go.  I have a separate configs.inc.php I pull in up the class hierarchy, but that&#8217;s about as non-conventional as I want to get.  Also, this controller is dedicated to just handling webservice requests and I only need these *DTO objects in that case, so locality wins and they are here.  No real engineering genius here, their structure mimics what is defined in the WSDL file.</p>
<p>The real magic is in the controller.  The controller&#8217;s <code>remote()</code> method is what handles the POST from the web via the port binding in the WSDL file.  The <code>remote()</code> function sets up some of the basic stuff for SoapServer and is easily identified in the PHP manual.  It&#8217;s even pretty easy to deduce we&#8217;re going to need to use <code>SoapServer-&gt;setClass()</code> somewhere and plug the name of our Controller in.   However, there was one tidbit in the comments section of the manual regarding <code><a href="http://www.php.net/manual/en/soapserver.setobject.php">SoapServer-&gt;setObject()</a></code>.  It wasn&#8217;t documented (at the time), but after experimenting and looking at the PHP source, it does exactly what we need here, sets the handling class to an instantiated (aka existing) class object instead of trying to spawn a new one.  Because we are already inside the CakePHP framework and running the <code>remote()</code> function, we already have the variables we want from <code>beforeFilter()</code>, we have our models loaded up, we may even have a user context from mod_auth_something.  Perfect!!!  So, we tell SoapServer to use our instantiated Controller.  Once the *DTO classes are mapped and SoapServer is configured, it&#8217;s as simple as having it handle STDIN to tickle the rest of the methods in your Controller with the parameters populated.  Two more tricks/problems remain:  debug level &amp; autoRender.</p>
<p>First, debug level.  There&#8217;s bound to be a way around it; however, since I test with a web service client, when I do have a problem, I have to debug with lots of <code>$this-&gt;log()</code> calls.  Turning up debugging to 1 or 2 is problematic because then CakePHP doesn&#8217;t spit back properly formed XML to the web service client and usually the client takes a SoapFault when that happens.  I stick to debug level of 0 during development and deployment wrt the web service stuff.</p>
<p>Second, autoRender.  Because SoapServer does the actual outputting of XML response to the client, I set the layout in the Controller to Ajax and also explicitly call <code>exit()</code> at the end of the <code>remote()</code> method.  This ensures that CakePHP doesn&#8217;t send back a &#8220;Missing View&#8221;, half rendered <code>$layout</code>, or any other kind of automatic goodies.</p>
<p>I hope this article is helpful for anybody who might want/need to integrate a more elegant/esoteric webservice into their CakePHP architectures.  I&#8217;m sure there are probably cleaner ways to put this into custom View classes, utilize Components, etc&#8230; however, this was a straightforward approach I found has been working really well for one of my applications.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cuppett.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cuppett.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cuppett.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cuppett.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cuppett.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cuppett.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cuppett.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cuppett.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cuppett.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cuppett.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cuppett.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cuppett.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cuppett.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cuppett.wordpress.com/47/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=47&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cuppett.wordpress.com/2009/07/27/using-soap-non-rest-web-services-with-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5694926c74062291abf731e716300b56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cuppett</media:title>
		</media:content>
	</item>
		<item>
		<title>HowTo: PostgreSQL &#8211; Adding more values to an ENUM type</title>
		<link>http://cuppett.wordpress.com/2008/12/18/howto-postgresql-adding-more-values-to-an-enum-type/</link>
		<comments>http://cuppett.wordpress.com/2008/12/18/howto-postgresql-adding-more-values-to-an-enum-type/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 17:40:42 +0000</pubDate>
		<dc:creator>cuppett</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Research]]></category>

		<guid isPermaLink="false">http://www.stephencuppett.com/wordpress/?p=29</guid>
		<description><![CDATA[I recently had trouble manipulating an ENUM field I had created in PostgreSQL.  I couldn&#8217;t find any suggestions or samples easily on Google or in the manual and was able to get it to work, so I post it here.  The basic premise is there is an ENUM field type created, I need more possible [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=29&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I recently had trouble manipulating an ENUM field I had created in PostgreSQL.  I couldn&#8217;t find any suggestions or samples easily on Google or in the manual and was able to get it to work, so I post it here.  The basic premise is there is an ENUM field type created, I need more possible values and to preserve the existing values I already have to keep code working.</p>
<p>Initial creation of the type and table:</p>
<p><code>CREATE TYPE var_type AS ENUM('text', 'number', 'date', 'boolean');</p>
<p>CREATE TABLE custom_fields (<br />
    id bigserial PRIMARY KEY,<br />
    name varchar(50) NOT NULL,<br />
    pdf_type var_type NOT NULL<br />
);</code></p>
<p>Running with this table for some time, invariably, new rows are created and there&#8217;s now a migration consideration.  As long as you are not using the table column as a reference in a foreign key, the following should work to preserve the data, drop and re-create the type.</p>
<p>The following creates a new column to hold the original text value:</p>
<p><code>ALTER TABLE custom_fields ADD COLUMN type_text varchar(15);<br />
UPDATE custom_fields SET type_text = pdf_type::text;</code></p>
<p>We, then, need to drop the existing type and re-create it with the new values we want.  CASCADE automatically drops columns that depend on the type:</p>
<p><code>DROP TYPE var_type CASCADE;<br />
CREATE TYPE var_type AS ENUM('text', 'number', 'date', 'boolean', 'list');</code></p>
<p>This last part was what I couldn&#8217;t figure out without thinking a little more.  When you add it back, you have to cast the varchar column back into the ENUM type.  I had tried a variety of concoctions here before getting this to work:</p>
<p><code>ALTER TABLE custom_fields ADD COLUMN pdf_type var_type;<br />
UPDATE custom_fields SET pdf_type = type_text::var_type;<br />
ALTER TABLE custom_fields ALTER pdf_type SET NOT NULL;<br />
ALTER TABLE custom_fields DROP COLUMN type_text;</code></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cuppett.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cuppett.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cuppett.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cuppett.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cuppett.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cuppett.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cuppett.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cuppett.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cuppett.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cuppett.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cuppett.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cuppett.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cuppett.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cuppett.wordpress.com/29/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=29&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cuppett.wordpress.com/2008/12/18/howto-postgresql-adding-more-values-to-an-enum-type/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5694926c74062291abf731e716300b56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cuppett</media:title>
		</media:content>
	</item>
		<item>
		<title>Web log anonymizer</title>
		<link>http://cuppett.wordpress.com/2008/06/03/web-log-anonymizer/</link>
		<comments>http://cuppett.wordpress.com/2008/06/03/web-log-anonymizer/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 01:48:49 +0000</pubDate>
		<dc:creator>cuppett</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Research]]></category>

		<guid isPermaLink="false">http://www.stephencuppett.com/wordpress/2008/06/03/web-log-anonymizer/</guid>
		<description><![CDATA[I recently had need to anonymize the IP addresses in an Apache access log.  It seemed like a simple task; however, there weren&#8217;t any really good code samples out there directly for it.  It&#8217;s a pretty simple exercise; however, given there wasn&#8217;t anything readily available, I figured I&#8217;d post it here so others might make [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=22&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I recently had need to anonymize the IP addresses in an Apache access log.  It seemed like a simple task; however, there weren&#8217;t any really good code samples out there directly for it.  It&#8217;s a pretty simple exercise; however, given there wasn&#8217;t anything readily available, I figured I&#8217;d post it here so others might make use of it.  The only requirement it really had was to be able to process large logs rather fast and to maintain the same IP address mappings for multiple entries in the logs in order to preserve the actual traffic data as it relates to sessions.  With a little more work, I&#8217;m sure it could select random IP addresses in the same geo as the original one whereas this will probably evenly distribute the IPs across the globe (skewed for actual ownership of the ranges).</p>
<p>So here are the few lines of Perl that got the job done:</p>
<blockquote>
<pre>#!/usr/bin/perl
if ($#ARGV + 1 &lt; 1) {
        print "\n\tUsage:\n";
        print "\t------\n\n";
        print "\tperl log_anonymize.pl file1 [file2 [file3 [...]]]\n\n";
        die "Please specify at least one file to use this script.\n\n";
}

my %forward = ();
my %reverse = ();

foreach (@ARGV) {
        open(ORIG, $_)
          or die "Failed to open input file for reading.";
        open(ANON, "+&gt;", $_.".anon")
          or die "Failed to open destination file for writing.";
        while (&lt;ORIG&gt;) {
                if (/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/) {
                        if (!($forward-&gt;{$1})) {
                                $newIp = getNewIp();
                                while ($reverse-&gt;{$newIp}) {
                                        $newIp = getNewIp();
                                }
                                print "New mapping created: $1 -&gt; $newIp\n";
                                $forward-&gt;{$1} = $newIp;
                                $reverse-&gt;{$newIp} = $1;
                        }
                        $repl = $forward-&gt;{$1};
                        $_ =~ s/$1/$repl/;
                }
                print ANON $_;
        }
        close(ORIG);
        close(ANON);
}

exit 0;

sub getNewIp {
        return int(rand(256)) . "." . int(rand(256)) . "." . int(rand(256)) . "." . int(rand(256));
}</pre>
</blockquote>
<p>It is fairly straightforward.  You invoke the Perl script with one or more arguments.  Every argument should be a path to an access log.  For each file, a new file of the same name and &#8220;.anon&#8221; appended gets created.  Across all those files, the script maintains an internal hash of the IPs it has mapped to a new, random IP address and will re-use those mappings as they are encountered.  It spits out a little message when the mappings occur so you could do some counts using &#8216;wc&#8217; or something similar to see how many you had&#8230; or you could make it output a count at the end, it&#8217;s pretty simple to do either.</p>
<p>So that&#8217;s it, easy web log anonymizing via random IP address remapping.</p>
<p><code></code></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cuppett.wordpress.com/22/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cuppett.wordpress.com/22/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cuppett.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cuppett.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cuppett.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cuppett.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cuppett.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cuppett.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cuppett.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cuppett.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cuppett.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cuppett.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cuppett.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cuppett.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cuppett.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cuppett.wordpress.com/22/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=22&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cuppett.wordpress.com/2008/06/03/web-log-anonymizer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5694926c74062291abf731e716300b56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cuppett</media:title>
		</media:content>
	</item>
		<item>
		<title>Received SAS Certified Advanced Programmer Credential for SAS 9</title>
		<link>http://cuppett.wordpress.com/2007/11/15/19/</link>
		<comments>http://cuppett.wordpress.com/2007/11/15/19/#comments</comments>
		<pubDate>Thu, 15 Nov 2007 15:02:17 +0000</pubDate>
		<dc:creator>cuppett</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.stephencuppett.com/wordpress/2007/11/15/19/</guid>
		<description><![CDATA[After 9 months with SAS, I now have passed the advanced programmer certification exam for SAS 9 on November 8, 2007. You can find details about the credential here. SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=19&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>After 9 months with SAS, I now have passed the advanced programmer certification exam for SAS 9 on November 8, 2007.  You can find details about the credential <a href="http://support.sas.com/certify/creds/credprog.html">here</a>.</p>
<p><img src="http://www.stephencuppett.com/images/sas/adv_small.jpg" alt="SAS Certified Advanced Programmer for SAS 9" width="426" height="90" /></p>
<p><span style="font-family:HelveticaNeue-Roman;font-size:xx-small;">SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. ® indicates USA registration.</span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cuppett.wordpress.com/19/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cuppett.wordpress.com/19/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cuppett.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cuppett.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cuppett.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cuppett.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cuppett.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cuppett.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cuppett.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cuppett.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cuppett.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cuppett.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cuppett.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cuppett.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cuppett.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cuppett.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=19&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cuppett.wordpress.com/2007/11/15/19/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5694926c74062291abf731e716300b56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cuppett</media:title>
		</media:content>

		<media:content url="http://www.stephencuppett.com/images/sas/adv_small.jpg" medium="image">
			<media:title type="html">SAS Certified Advanced Programmer for SAS 9</media:title>
		</media:content>
	</item>
		<item>
		<title>Received SAS Certified Base Programmer Credential for SAS 9</title>
		<link>http://cuppett.wordpress.com/2007/10/24/received-sas-certified-base-programmer-credential-for-sas-9/</link>
		<comments>http://cuppett.wordpress.com/2007/10/24/received-sas-certified-base-programmer-credential-for-sas-9/#comments</comments>
		<pubDate>Wed, 24 Oct 2007 16:37:40 +0000</pubDate>
		<dc:creator>cuppett</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://www.cuppett.com/wordpress/2007/10/24/received-sas-certified-base-programmer-credential-for-sas-9/</guid>
		<description><![CDATA[After working at SAS for 8 months, I passed the base programmer certification exam for SAS 9 on October 17, 2007.  You can find details about the credential here. SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=18&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>After working at SAS for 8 months, I passed the base programmer certification exam for SAS 9 on October 17, 2007.  You can find details about the credential <a href="http://support.sas.com/certify/creds/credprog.html">here</a>.</p>
<p><img style="width:426px;height:90px;" title="SAS Certified Base Programmer for SAS 9" src="http://www.stephencuppett.com/images/sas/base_small.jpg" alt="SAS Certified Base Programmer for SAS 9" width="426" height="90" /></p>
<p><span style="font-family:HelveticaNeue-Roman;font-size:xx-small;">SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. ® indicates USA registration.</span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cuppett.wordpress.com/18/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cuppett.wordpress.com/18/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cuppett.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cuppett.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cuppett.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cuppett.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cuppett.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cuppett.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cuppett.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cuppett.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cuppett.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cuppett.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cuppett.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cuppett.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cuppett.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cuppett.wordpress.com/18/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=18&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cuppett.wordpress.com/2007/10/24/received-sas-certified-base-programmer-credential-for-sas-9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5694926c74062291abf731e716300b56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cuppett</media:title>
		</media:content>

		<media:content url="http://www.stephencuppett.com/images/sas/base_small.jpg" medium="image">
			<media:title type="html">SAS Certified Base Programmer for SAS 9</media:title>
		</media:content>
	</item>
		<item>
		<title>Migrating from V1R7 or previous Firewall Technologies releases to z/OS CommServer IPSec</title>
		<link>http://cuppett.wordpress.com/2006/10/11/migrating-from-v1r7-or-previous-firewall-technologies-releases-to-zos-commserver-ipsec/</link>
		<comments>http://cuppett.wordpress.com/2006/10/11/migrating-from-v1r7-or-previous-firewall-technologies-releases-to-zos-commserver-ipsec/#comments</comments>
		<pubDate>Thu, 12 Oct 2006 01:15:01 +0000</pubDate>
		<dc:creator>cuppett</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.cuppett.com/wordpress/?p=14</guid>
		<description><![CDATA[During the course of my work, I have created an add-on to the Communications Server V1R7 NSCA GUI that allows the migration of definitions from Firewall Technologies to the new policy-based IP Security. I also helped author the accompanying guide that explains its usage and the limitations/capabilities of the tool.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=14&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>During the course of my work, I have created an add-on to the Communications Server V1R7 NSCA GUI that allows the migration of definitions from Firewall Technologies to the new policy-based IP Security.  I also helped author the accompanying guide that explains its usage and the limitations/capabilities of the tool.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cuppett.wordpress.com/14/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cuppett.wordpress.com/14/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cuppett.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cuppett.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cuppett.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cuppett.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cuppett.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cuppett.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cuppett.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cuppett.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cuppett.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cuppett.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cuppett.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cuppett.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cuppett.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cuppett.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=14&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cuppett.wordpress.com/2006/10/11/migrating-from-v1r7-or-previous-firewall-technologies-releases-to-zos-commserver-ipsec/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5694926c74062291abf731e716300b56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cuppett</media:title>
		</media:content>
	</item>
		<item>
		<title>Have your computer tell you when your home IP address changes!</title>
		<link>http://cuppett.wordpress.com/2006/10/11/have-your-computer-tell-you-when-your-home-ip-address-changes/</link>
		<comments>http://cuppett.wordpress.com/2006/10/11/have-your-computer-tell-you-when-your-home-ip-address-changes/#comments</comments>
		<pubDate>Thu, 12 Oct 2006 01:10:09 +0000</pubDate>
		<dc:creator>cuppett</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.cuppett.com/wordpress/?p=13</guid>
		<description><![CDATA[I thought I would post a link to something I created in the past. I wrote a daemon with an extendable API that allows you to receive updates and/or update something else such as DNS or a webpage when your home computers public IP (or WAN) address is changed. This can happen for any number [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=13&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I thought I would post a link to something I created in the past.  I wrote a daemon with an extendable API that allows you to receive updates and/or update something else such as DNS or a webpage when your home computers public IP (or WAN) address is changed.  This can happen for any number of reasons such as an ISP change of infrastructure, regular DHCP release and renew, as well as just because ISPs sell you dynamic addresses and therefore it may change so you don&#8217;t run publicly accessible services from home.  Whatever the reason, if you&#8217;d like to still be able to access your assets at home when your public IP address is volatile, here is a tool you can use:</p>
<p><a href="http://alphaworks.ibm.com/tech/namma" target="_blank">http://alphaworks.ibm.com/tech/namma</a></p>
<p>In addition, I tend to try and use whatismyip.com in conjunction with this tool (the available, already written plugins need a public web-site that reports the IP address it sees); however, it tends to limit how many times a day you can check.  I have created a simple page that lets you get that information:</p>
<p><a href="http://www.cuppett.com/ip.php" target="_blank">http://www.cuppett.com/ip.php</a></p>
<p>Enjoy!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/cuppett.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/cuppett.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cuppett.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cuppett.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cuppett.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cuppett.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/cuppett.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/cuppett.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/cuppett.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/cuppett.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cuppett.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cuppett.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cuppett.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cuppett.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cuppett.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cuppett.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cuppett.wordpress.com&amp;blog=13577359&amp;post=13&amp;subd=cuppett&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://cuppett.wordpress.com/2006/10/11/have-your-computer-tell-you-when-your-home-ip-address-changes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5694926c74062291abf731e716300b56?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cuppett</media:title>
		</media:content>
	</item>
	</channel>
</rss>