<?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>Neural Core Dump &#187; Internet</title>
	<atom:link href="http://www.jeffdarlington.com/category/technology/internet/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jeffdarlington.com</link>
	<description>The personal blog of Jeffrey T. Darlington, creator of General Protection Fault</description>
	<lastBuildDate>Sat, 24 Jul 2010 19:00:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>set_bugs = 0;</title>
		<link>http://www.jeffdarlington.com/2009/02/10/set-bugs-equal-zero/</link>
		<comments>http://www.jeffdarlington.com/2009/02/10/set-bugs-equal-zero/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 17:21:33 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[GPF]]></category>
		<category><![CDATA[Help Desk]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/?p=196</guid>
		<description><![CDATA[This week an couple errors were reported in the custom CMS application I built at work a couple years ago. I haven&#8217;t touched this code in at least a year, so it took me bit to swap some mental virtual memory and recall how everything worked. I&#8217;m not sure if these &#8220;bugs&#8221; were something new [...]]]></description>
			<content:encoded><![CDATA[<p>This week an couple errors were reported in the custom <a title="Content Management System article on Wikipedia" href="http://en.wikipedia.org/wiki/Content_management_system">CMS</a> application I built at work a couple years ago. I haven&#8217;t touched this code in at least a year, so it took me bit to swap some mental virtual memory and recall how everything worked. I&#8217;m not sure if these &#8220;bugs&#8221; were something new that had manifested themselves after a recent platform upgrade or design flaws that had been there since the beginning only to be recently noticed. None of that really matters for the sake of this post, however. Suffice it to say there were two problems, one of which was likely to be entirely my fault but relatively easy to fix with a little bit of <a title="C# (programming language) article on Wikipedia" href="http://en.wikipedia.org/wiki/C_Sharp_(programming_language)">C#</a> hacking.</p>
<p>The other problem was a bit obscure. The application is built in <a title="ASP.NET article on Wikipedia" href="http://en.wikipedia.org/wiki/ASP.NET">ASP.NET</a> 2.0 and written entirely in C#. It also makes use of <a title="Microsoft" href="http://www.microsoft.com/">Microsoft</a>&#8216;s <a title="AJAX (programming) article on Wikipedia" href="http://en.wikipedia.org/wiki/Ajax_(programming)">AJAX</a> Toolkit for ASP.NET to &#8220;pretty up&#8221; some of the interface interactions. Unfortunately, one particular user began to experience problems with the system recently. Since she&#8217;s the project manager, needless to say the problem was escalated to top priority with little to no delay. To make things more difficult, the problem was especially cryptic. In true Microsoft fashion, the pop-up <a title="JavaScript article on Wikipedia" href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a> error dialog offered little to no useful information:</p>
<blockquote><p>Sys.WebForms.PageRequestManagerServerErrorException: An unknown error occurred while processing the request on the server. The status code returned from the server was: 500</p></blockquote>
<p><a title="Google" href="http://www.google.com/">Google</a>, of course, is my friend and found <a title="Google search for PageRequestManagerServerErrorException" href="http://www.google.com/search?q=PageRequestManagerServerErrorException">no shortage of pages</a> where this turned up. The odd thing was that none of the purported causes for the error were anything that I was using.</p>
<p>After much searching, I finally happened upon <a title="Andornot Developers' Blog: ASP.NET AJAX and Sys.Webforms.PageRequestManagerServerErrorException" href="http://www.andornot.com/about/developerblog/2007/07/aspnet-ajax-and-syswebformspagerequestm.aspx">this site</a>. It seems Ted Jardine hit the same problem I did. He had narrowed it down to something to do with the .NET session, which he wasn&#8217;t really using but I was using extensively. What I found most interesting was his solution:</p>
<blockquote><p>So, based on one of the comments in one of the above posts, even though I&#8217;m not touching session on one of the problem pages, I tried a hack in one of the problem page&#8217;s Page_Load:</p>
<p>Session["FixAJAXSysBug"] = true;</p>
<p>And lo and behold, we&#8217;re good to go!</p></blockquote>
<p>I followed the various links he provided—as well as <a title="Google search for FixAJAXSysBug" href="http://www.google.com/search?q=FixAJAXSysBug">Googling for &#8220;FixAJAXSysBug&#8221;</a> itself—and found lots more anecdotal evidence to support its usefulness. I applied this &#8220;fix&#8221; to the common header of the application to make sure it took affect everywhere and, so far, all reports seem to indicate its success.</p>
<p>Needless to say, I was instantly reminded of <a title="GPF Archive: Wednesday, January 31, 2001" href="http://www.gpf-comics.com/archive.php?d=20010131">this GPF strip</a> from the crossover with <a title="Help Desk" href="http://ubersoft.net/">Help Desk</a>. I can&#8217;t remember now if that joke was my idea or Chris Wright&#8217;s. It doesn&#8217;t matter now, really&#8230; it audacity is as brilliant now as it was eight years ago. The idea of setting a simple Boolean flag to &#8220;turn off bugs&#8221; is something I will always find hilarious.</p>
<p>Now if only <em>all</em> Microsoft bugs were so easy to fix&#8230;.</p>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2009/02/10/set-bugs-equal-zero/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>When it rains, it pours&#8230;</title>
		<link>http://www.jeffdarlington.com/2009/01/20/when-it-rains-it-pours/</link>
		<comments>http://www.jeffdarlington.com/2009/01/20/when-it-rains-it-pours/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 14:50:39 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[GPF]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Athena]]></category>
		<category><![CDATA[Demeter]]></category>
		<category><![CDATA[Diana]]></category>
		<category><![CDATA[hard drive]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[schedule]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/?p=188</guid>
		<description><![CDATA[Here&#8217;s a clarification of my recent Tweet about Diana. Sometime over the weekend Diana, our primary Linux box that serves as the backbone of our home network (DNS, file server, internal Web server, SSH gateway, SVN repository server, etc.), gave up the ghost. I only discovered this yesterday evening, so I haven&#8217;t had much time [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a clarification of <a title="Twitter / Jeff Darlington" href="http://twitter.com/jeffdarlington/status/1131618568">my recent Tweet</a> about Diana. Sometime over the weekend Diana, our primary Linux box that serves as the backbone of our home network (DNS, file server, internal Web server, SSH gateway, SVN repository server, etc.), gave up the ghost. I only discovered this yesterday evening, so I haven&#8217;t had much time to diagnose the problem. It&#8217;s almost certainly a hardware issue. I&#8217;m thinking it&#8217;s the power supply or the motherboard, as when I try to power her up, nothing happens. The power light comes on, I can watch the CPU fan twitch like it wants to start spinning, but otherwise nothing else visible occurs. No output makes its way to the monitor so there are no error messages to follow.</p>
<p>At this point, I&#8217;m not sure of the status of the hard drives. My hope is that they&#8217;re fine; the obvious problem appears to be occurring before they even start to spin, as if they&#8217;re not getting any power (and that&#8217;s why I suspect it&#8217;s a power supply issue). The good news is that Demeter, her predecessor, has been sitting idle and collecting dust and has since been rapidly pressed back into service. I should be able to slip Diana&#8217;s disks into Demeter, check their integrity, and hopefully recover the data. That&#8217;s the core thing right now, getting the data off; hardware is replaceable, data is not. The only hitch is that Demeter is old enough that I&#8217;m not sure her BIOS will read Diana&#8217;s larger disks. Demeter&#8217;s current HD is already larger than her BIOS supports, though, and Linux seems to work fine in this situation, so I&#8217;m hoping that won&#8217;t be a problem. A worst-case scenario might be to throw a live Linux distro into Athena, our current &#8220;alpha&#8221; Windows XP desktop, and try to grab the data that way. (Diana&#8217;s disks are in ext3, which obviously Windows can&#8217;t read.) Both Demeter and Diana have EIDE drives while Athena uses SATA, but I&#8217;m almost certain Athena also has legacy EIDE on the motherboard somewhere; if not, I&#8217;m hosed there.</p>
<p>Why might this be a concern to you? Well, for one thing, Diana was one of several redundant backup locations for storing my my high-resolution original strips. Fortunately, everything from Year Nine and back has already been backed up to multiple DVDs stored in multiple physical locations, while Year Ten&#8217;s files are stored across three redundant drives (two in separate physical machines and one external USB drive). More importantly, Diana was my SVN repository server, housing all the source code for the GPF site. I have working copies of that repository in multiple locations so I&#8217;m not hurting there, but with the repository down I&#8217;m stuck manually keeping those working copies in sync. The biggest problem that may affect you guys is the humongous time sink this will be for me to repair/replace Diana and get all our internal mechanisms working again. With my day job, two hours of commute, and toddler patrol vying for my time, my comic production schedule is severely squeezed as it is. This is probably going to impact that buffer I was forced to take a hiatus in December to reclaim as I wasn&#8217;t able to increase my production, just maintain the status quo.</p>
<p>For those of you who might care, I&#8217;ll post updates here when I can. More frequent cries of frustration will likely come through the <a title="Twitter / Jeff Darlington" href="http://twitter.com/jeffdarlington">Twitter feed</a>. If the comic will be severely impacted, you&#8217;ll get something in the <a title="GPF News" href="http://www.gpf-comics.com/news/">GPF News</a>. So keep watching those RSS feeds.</p>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2009/01/20/when-it-rains-it-pours/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generating XML Sitemaps for MediaWiki</title>
		<link>http://www.jeffdarlington.com/2008/08/22/generating-xml-sitemaps-for-mediawiki/</link>
		<comments>http://www.jeffdarlington.com/2008/08/22/generating-xml-sitemaps-for-mediawiki/#comments</comments>
		<pubDate>Sat, 23 Aug 2008 01:40:19 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[GPF]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[sitemap]]></category>
		<category><![CDATA[wiki]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/?p=154</guid>
		<description><![CDATA[Not long ago, I took advantage of a nifty WordPress plugin to enable XML sitemaps for the blog. For those who&#8217;ve never heard of XML sitemaps (I hadn&#8217;t for quite a while), they are little XML files in a specific format that give search engines like Google hints on how to index your site. They [...]]]></description>
			<content:encoded><![CDATA[<p>Not long ago, I took advantage of a <a title="Google (XML) Sitemaps Generator for WordPress" href="http://www.arnebrachhold.de/redir/sitemap-home/">nifty WordPress plugin</a> to enable <a title="sitemaps.org" href="http://www.sitemaps.org/">XML sitemaps</a> for the blog. For those who&#8217;ve never heard of XML sitemaps (I hadn&#8217;t for quite a while), they are little XML files in a specific format that give search engines like <a title="Google" href="http://www.google.com/">Google</a> hints on how to index your site. They don&#8217;t necessarily improve your search rankings per se, but they help the search engine better decide what to index, when it was last updated, relative priorities of different pages, etc. You then throw a special line into your <a title="The Web Robots Pages" href="http://www.robotstxt.org/">robots.txt</a> file or directly submit the file to the search engine to let it know the file is available. Once the engine knows about it, it will check it periodically to optimize how the site is indexed.</p>
<p>The plugin, of course, makes this ridiculously easy for <a title="WordPress" href="http://wordpress.org/">WordPress</a>. However, <a title="General Protection Fault" href="http://www.gpf-comics.com/">GPF</a> gets orders of magnitude higher traffic than the blog does, so finding a way to generate sitemaps there would be ideal. I toyed with the idea for a while until I finally sat down, examined the sitemap specification, and figured out how to roll my own code. It now successfully runs via cron each morning and gives a pretty thorough census of what&#8217;s available on the GPF server. The problem is that the GPF site is divided into several parts that are largely autonomous and self-contained:</p>
<ul>
<li>The archive, of course, is the main bread and butter.  This is what people come to see, so it is vitally important to get everything represented, especially since the archive is entirely dynamic PHP. I count the main index page as part of the archive, as it displays the latest strip.</li>
<li>The <a title="GPF Forum" href="http://www.gpf-comics.com/forum/">forum</a> is self-contained because it uses a third-party application: <a title="phpBB" href="http://www.phpbb.com/">phpBB</a>. I decided long ago to discourage spamming by blocking search engines from indexing the forum, relying on the forum&#8217;s internal search capabilities for users who want to find things. Since search engines were being blocked anyway, I decided the forum didn&#8217;t need a sitemap; that would just be a waste of processing time.</li>
<li>The <a title="The Official GPF Wiki" href="http://www.gpf-comics.com/wiki/">wiki</a>, however, is slowly becoming a vital part of the site. It replaces the old cast pages and adds tons more GPF metadata in a convenient, easily searchable form. I wanted to make sure that got included too.  The GPF Wiki runs <a title="MediaWiki" href="http://www.mediawiki.org/">MediaWiki</a>, the same software that powers <a title="Wikipedia" href="http://www.wikipedia.org/">Wikipedia</a>.  As far as I know, MediaWiki does not include any internal mechanism for generating XML sitemaps nor are there any extensions to do so.  (I could easily be wrong, however; I&#8217;ll admit my research on this was extremely limited.)</li>
<li>Then there&#8217;s everything else. The GPF site beyond the two pre-packaged items above is completely custom-built PHP, so there&#8217;s no one to blame for that mess but myself.</li>
</ul>
<p>Ignoring the forum, that left me three major sub-projects for creating sitemaps. It&#8217;s easy enough to segregate these into separate files and tie them together using a &#8220;sitemap index&#8221; file, so that wasn&#8217;t a problem.  The archive would just be a formatted dump of the archive database, deriving approximate update times from the posting date. The bulk of the rest of the site could be done by stepping through the file structure of the site and taking note of every HTML or PHP file and its last modification time (conveniently ignoring certain files and directories that don&#8217;t need to be counted, like access-restricted Premium pages). And that leaves the wiki.</p>
<p>I managed to come up with a decent wiki sitemap routine that I thought I&#8217;d share, just in case someone else might be interested. Of course, it&#8217;s not likely to be useful for massive wikis like Wikipedia—<a title="sitemaps.org FAQ" href="http://www.sitemaps.org/faq.php#faq_sitemap_size">sitemaps are restricted to 10MB in size and 50,000 URLs</a>—but something small like the GPF Wiki would be easy to submit and index. It was built using MediaWiki 1.12.0; I am uncertain what database changes may be needed for older or newer versions. Here&#8217;s my current process:</p>
<p>I only want to index relevant pages, including category pages. The relevant database table for this is &#8220;page&#8221;. (How&#8230; convenient). Unfortunately, this table also contains things like redirects and images. Each image has its own &#8220;page&#8221; assigned to it; try clicking on an image in Wikipedia or in the GPF Wiki to see what I mean. The time stamp of the latest revision, however, is stored in the &#8220;revision&#8221; table, joined to the page table by the latest revision ID number. So a good starting bit of SQL would be:</p>
<blockquote><p><code>select p.page_title, r.rev_timestamp from page p, revision r where p.page_latest = r.rev_id and p.page_is_redirect = 0 and p.page_title not like '%.gif' and p.page_title not like '%.png' and p.page_title not like '%.jpg';</code></p></blockquote>
<p>Unfortunately, this also returns a few meta pages like the sidebar and editing pages. Before selecting, I define a look-up hash of titles I want to avoid and as I loop through the results I just skip those.</p>
<p>The title, of course, is both the displayed title and the input portion of the URL that uniquely identifies the page. Thus, knowing the base URL (<code>http://www.gpf-comics.com/wiki/</code>) I can easily reconstruct the public URL of any article from the title. As with Wikipedia links, spaces have already been converted to underscores, but the rest of the string needs to be be URL encoded. This is easy enough, so we can quickly build the full URL as required by the XML schema.</p>
<p>The time stamp is a little bit tougher. MediaWiki stores time stamps as a 14-digit number in <em>YYYYMMDDHHMMSS</em> format, always in UTC time. In Perl (in which almost all my crons are coded) this is easy enough to break apart and turn into a UNIX time stamp. I then output the date in W3C ISO 8601 format as required by the schema. A sample of a resulting entry would be:</p>
<blockquote>
<pre>&lt;url&gt;
   &lt;loc&gt;http://www.gpf-comics.com/wiki/Nick&lt;/loc&gt;
   &lt;lastmod&gt;2008-08-22T06:00:07Z&lt;/lastmod&gt;
   &lt;changefreq&gt;monthly&lt;/changefreq&gt;
   &lt;priority&gt;0.3&lt;/priority&gt;
&lt;/url&gt;</pre>
</blockquote>
<p>Change frequency and priority are purely guesses and fudges for mine. According to the sitemap specification, priorities are purely relative to other parts of the site. I rated the wiki pages as relatively low since the wiki at GPF is considered a &#8220;supporting&#8221; page and subordinate to things like the archive. As for change frequency, the sitemap specification includes a number of predefined choices (hourly, daily, weekly, monthly, etc.). Monthly was a purely off-the-cuff guess; some pages may update more or less frequently, but monthly would be a good average. It is entirely possible to rate select pages as higher priority or frequency than others, but I decided to take the easy route and rate everything the same. To apply different values, you just need to pay special attention to the title and assign a non-default value when that title crops up.</p>
<p>Well, I hope someone out there might find this helpful. I&#8217;m not sure if it really helps anyone find anything at GPF, but it was a fun little exercise nonetheless.</p>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2008/08/22/generating-xml-sitemaps-for-mediawiki/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Look, Ma! I&#8217;m on Security Now!</title>
		<link>http://www.jeffdarlington.com/2008/07/14/look-ma-im-on-security-now/</link>
		<comments>http://www.jeffdarlington.com/2008/07/14/look-ma-im-on-security-now/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 14:54:52 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[cookie]]></category>
		<category><![CDATA[DoubleClick]]></category>
		<category><![CDATA[podcast]]></category>
		<category><![CDATA[Security Now]]></category>
		<category><![CDATA[Steve Gibson]]></category>
		<category><![CDATA[TWiT]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/?p=148</guid>
		<description><![CDATA[I hope to post more on this when there&#8217;s more data to post, but I thought I&#8217;d throw up a quick note stating that the latest episode of the Security Now! &#8220;netcast&#8221; features a question posed by yours truly. (The best part was listening to Leo Laporte stumble over my long-winded rambling. ) The high-quality [...]]]></description>
			<content:encoded><![CDATA[<p>I hope to post more on this when there&#8217;s more data to post, but I thought I&#8217;d throw up a quick note stating that the <a title="Security Now! #152 (TWiT.tv)" href="http://twit.tv/sn152">latest episode of the Security Now! &#8220;netcast&#8221;</a> features a question posed by yours truly. (The best part was listening to Leo Laporte stumble over my long-winded rambling. <img src='http://www.jeffdarlington.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) The high-quality version of the show can be found at the previous link; a low-bandwidth version as well as a text-only transcript can be found at the <a title="Security Now! #152 (GRC.com)" href="http://www.grc.com/sn/sn-152.htm">corresponding page at GRC.com</a>. A search in the transcript for &#8220;Darlington&#8221; will take you to the beginning of my question; in the netcast, it starts around 38 minutes, 22 seconds in. (Of course, I encourage everyone to read/listen to the entire thing.)</p>
<p>For the full effect, though, you&#8217;ll also need to listen to/read the previous two non-Q&amp;A episodes of the show, <a title="Security Now! #149 (TWiT.tv)" href="http://twit.tv/sn149">#149</a> and <a title="Security Now! #151 (TWiT.tv)" href="http://twit.tv/sn151">#151</a>. (Low-bandwidth and trascriptions can be found <a title="Security Now! #149 (GRC.com)" href="http://www.grc.com/sn/sn-149.htm">here</a> and <a title="Security Now! #151 (GRC.com)" href="http://www.grc.com/sn/sn-151.htm">here</a>.) The entire dialog concerns the recent trend of <a title="Internet service provider article on Wikipedia" href="http://en.wikipedia.org/wiki/Internet_service_provider">ISPs</a> selling out their customers to allow third-party advertisers to come in and install hardware at the ISP to facilitate tracking the ISPs&#8217; customers&#8217; surfing habits across sites. While the ad companies in question claim to not be recording personally identifyable information about the ISPs&#8217; customers, the capability is there and the possibilities for abuse are enormous. It brings back many shades of the <a title="DoubleClick article on Wikipedia" href="http://en.wikipedia.org/wiki/DoubleClick">DoubleClick</a> controversies of the late 1990s-early 2000s, only much more ominous. I provided a unqiue standpoint to the discussion: that of a Web developer hosting a site and encountering similiar mysterious &#8220;first party&#8221; cookies set for my domain but not set by me.</p>
<p>The full body my question is present, but I&#8217;m not completely satisfied with the answer. <img src='http://www.jeffdarlington.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Let&#8217;s just say I think Steve Gibson made an assumption about the <a title="General Protection Fault" href="http://www.gpf-comics.com/">GPF</a> site that&#8217;s not 100% true. I&#8217;ve replied to his response with additional information. I don&#8217;t necessarily expect another response (he does, after all, have his own agenda to follow on <em>his</em> show), and even if he does it will likely be in episode #154, the next scheduled Q&amp;A episode. If anyone is interested, I&#8217;ll post updates if and when this occurs. If I don&#8217;t get a response, I&#8217;ll post my response here, especially since it contains some disturbing observations about &#8220;first party&#8221; cookies that have mildly paranoid folks like me nervous. (I&#8217;d hate to see what it does to <em>really</em> paranoid people.)</p>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2008/07/14/look-ma-im-on-security-now/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ICANN get behind &#8220;gpf.comics&#8221;&#8230;</title>
		<link>http://www.jeffdarlington.com/2008/07/01/icann-get-behind-gpf-dot-comics/</link>
		<comments>http://www.jeffdarlington.com/2008/07/01/icann-get-behind-gpf-dot-comics/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 13:18:42 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Webcomics]]></category>
		<category><![CDATA[cybersquatting]]></category>
		<category><![CDATA[domain]]></category>
		<category><![CDATA[ICANN]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/?p=146</guid>
		<description><![CDATA[So ICANN, the organization that oversees the doling out of domain names on the Internet, has approved the relaxation of the rules for top-level domains (TLDs) to allow for arbitrary TLDs for whoever has the money and technical capability to grab it. If things go according to plan, by the middle of next year you [...]]]></description>
			<content:encoded><![CDATA[<p>So <a title="Internet Corporation for Assigned Names and Numbers" href="http://www.icann.org/">ICANN</a>, the organization that oversees the doling out of domain names on the Internet, has <a title="ICANN: Biggest Expansion in gTLDs Approved for Implementation" href="http://www.icann.org/en/announcements/announcement-4-26jun08-en.htm">approved the relaxation of the rules for top-level domains</a> (TLDs) to allow for arbitrary TLDs for whoever has the money and technical capability to grab it. If things go according to plan, by the middle of next year you may be able to just type into your browser something like <code>http://search.google/</code> rather than <code>http://www.google.com/</code>, or perhaps you&#8217;d rather <code>http://drink.coke/</code> or <code>http://drive.ford/</code> or even <code>http://have.crazy.monkey.sex/</code>.</p>
<p>To quote virtually ever character in the <a title="Star Wars.Com" href="http://www.starwars.com/"><em>Star Wars</em></a> universe, I have a bad feeling about this.</p>
<p>I am <em>so</em> sitting on the fence on this one. My initial gut reaction is this <em>can&#8217;t</em> be a good thing. I know far too many non-techies who are confused by Internet addressing as it is, so let&#8217;s confuse them some more by adding even <em>more</em> things for them to figure out. JD Fraizer over at User Friendly <a title="User Friendly: June 28, 2008" href="http://ars.userfriendly.org/cartoons/?id=20080628">hit the nail on the head</a>; anyone who has ever used <a title="Usenet article on Wikipedia" href="http://en.wikipedia.org/wiki/Usenet">Usenet</a> is probably rolling their eyes a lot more lately. The potential for <a title="Cybersquatting article on Wikipedia" href="http://en.wikipedia.org/wiki/Cybersquatting">cybersquatting</a> and trademark dilution is enormous. ICANN insists that an &#8220;objection-based mechanism&#8221; will be in place to prevent such things, but how much red tape (and legal dollars) will someone have to go through to protect their brand? Every day that a squatter sits on a domain equates to valuable time, money, and reputation that can be lost, something big corporations may be able to wait out but little guys like me can&#8217;t afford. It&#8217;s been hard enough right now for me to keep up with all the variants of <code>gpf-comics.something</code> out there. And let&#8217;s not get into the discussion of what &#8220;offensive&#8221; TLDs  creative individuals might come up with&#8230;.</p>
<p>Of course, it&#8217;s not like I&#8217;m going to be registering <code>.gpf</code> anytime soon anyway. I suppose that&#8217;s one thing ICANN did right: to create your own TLD, you&#8217;ll need a truck load of money first. The <a title="CBC: World of web names now wide open, June 26, 2008" href="http://www.cbc.ca/world/story/2008/06/26/internet-domain.html">CBC is reporting</a> an estimated $100,000 per TLD—I have no idea if that&#8217;s Canadian dollars or not—but ICANN only says for now that <a title="ICANN: New gTLDs FAQ" href="http://www.icann.org/topics/new-gtld-strategy-faq.htm">&#8220;fee information is not yet available&#8221;</a>. Ordinary domain names are dirt cheap nowadays, which is a blessing to small-time operators like me but a curse in that squatters with cash to burn can snap up thousands at a time and hold them for ransom. At least starting a new TLD will take capital, making it a serious investment. It will also be quite a technical undertaking; owning a TLD also means you have to build the infrastructure support it. So if <a title="Google" href="http://www.google.com/">Google</a> were to grab <code>.google</code> with their pocket change, they&#8217;ll also need to pony up the hardware and bandwidth to maintain the root server. Google may be a bad example (they&#8217;ve got servers to spare, I&#8217;m sure), but for organizations not used to maintaining that kind of &#8220;big iron&#8221; it will be a significant learning curve.</p>
<p>But then it occurred to me&#8230; how awesome would it be if all your favorite comics or comic-related sites could found at &#8220;something dot comics&#8221;?</p>
<p>Imagine if you will that some philanthropic comics creator/reader with a hundred grand in &#8220;mad money&#8221; under his bed were to snatch up <code>.comics</code> and register that with ICANN. Being philanthropic, this individual would charge a minimal fee to register a domain there, just enough to cover operational costs and maybe make a modest living in the process, aggregated out to anticipated demand (of which I&#8217;m sure there&#8217;d be plenty). There would be only one additional requirement for application beyond the current standard (ethical) process: the domain must be used for a site publishing, promoting, or discussing comics in some way, shape, or form. Consideration for approval would require proof of content, such as a preview development site, previously published work, portfolios, etc.—just enough to prove the site really will be used for something comic-related. Individual titles would be encouraged to register at the root level (<a title="Dilbert" href="http://www.dilbert.com/"><code>dilbert.comics</code></a>, <a title="General Protection Fault" href="http://www.gpf-comics.com/"><code>gpf.comics</code></a>, <a title="X-Men.com (redirects to Marvel.com)" href="http://www.x-men.com/"><code>x-men.comics</code></a>) while companies would register their names (<a title="DC Comics" href="http://www.dccomics.com/"><code>dc.comics</code></a>, <a title="Marvel Comics" href="http://www.marvel.com/"><code>marvel.comics</code></a>, <a title="Keenspot" href="http://www.keenspot.com/"><code>keenspot.comics</code></a>) and potentially use sub-domains for their own titles (<code>x-men.marvel.comics</code>). Our hypothetical philanthropic registrar would also be fair and balanced as to not let big conglomerates dominate the little guys. Disputes over domains would come down to traditional copyright and trademark resolutions, requiring proof of prior art, etc.</p>
<p>Wouldn&#8217;t that be just grand?</p>
<p>Of course, what will <em>really</em> happen will be that some big company will come along and buy up <code>.comics</code> with far more misanthropic intentions (and we <em>know</em> such an obvious TLD wouldn&#8217;t sit dormant for long). They&#8217;d either squirrel it away selfishly for promoting their own works and no one else&#8217;s, or they&#8217;ll charge such an exorbitant &#8220;premium&#8221; price for registrations that only big publishing houses like DC, Marvel, etc. will be able to afford it, shutting out the little independents and webcomics. Even if they price it fairly and keep it open, I&#8217;d bet it would get so swamped with squatters that the novelty of the whole TLD would become as diluted <code>.info</code> is today. Maybe it&#8217;s just that I&#8217;m pessimistic&#8230; or that I&#8217;ve been annoyed for so long that some jerk had been holding <code>gpf-comics.org</code> hostage for years&#8230; but I just don&#8217;t see this turning into as promising a possibility as I think it <em>could</em> be.</p>
<p>Oh, well. I&#8217;ve been waiting for <code>gpf.com</code> for nearly a decade now. I guess I can just add <code>gpf.comics</code> to the list. Wishful thinking&#8230;.</p>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2008/07/01/icann-get-behind-gpf-dot-comics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Praise for XCache</title>
		<link>http://www.jeffdarlington.com/2008/03/18/praise-for-xcache/</link>
		<comments>http://www.jeffdarlington.com/2008/03/18/praise-for-xcache/#comments</comments>
		<pubDate>Wed, 19 Mar 2008 01:34:12 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[GPF]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[opcode]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[XCache]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/2008/03/18/praise-for-xcache/</guid>
		<description><![CDATA[The new GPF site has been running live for half a month now, and I&#8217;m proud to say things have been running incredibly smoothly. That is, at least, from my perspective; I haven&#8217;t seen any major glitches, and aside from a few typos in the comic (which are obviously independent of the site code), nobody [...]]]></description>
			<content:encoded><![CDATA[<p>The new <a href="http://www.gpf-comics.com/" title="General Protection Fault">GPF</a> site has been running live for half a month now, and I&#8217;m proud to say things have been running incredibly smoothly. That is, at least, from my perspective; I haven&#8217;t <em>seen</em> any major glitches, and aside from a few typos in the comic (which are obviously independent of the site code), nobody has written me about any problems. This is especially heartening because the new site was pretty much entirely coded by hand by me, sans a few bits and pieces. (I can&#8217;t take credit for the OS, the web server software, the database engine, or the forum. But everything else&#8230; yep, that was me.)</p>
<p>There were a lot of motivations for writing my own archiving system, but the primary one was efficiency. While I considered trying something off-the-shelf, so to speak, like <a href="http://mindfaucet.com/comicpress/" title="ComicPress">ComicPress</a> or <a href="http://drupal.org/" title="Drupal">Drupal</a>, I really wanted something that would be blazingly fast yet still dynamically generated to let me do things like <a href="http://www.gpf-comics.com/premium/" title="GPF Premium">GPF Premium</a> on the server side, primarily for security reasons. (Server-side processing means no messy JavaScript is required by the users, thus exposing them to less risks, while Premium content doesn&#8217;t even get sent to the browser at all if Premium isn&#8217;t enabled.) So the GPF site is optimized out the wahzoo, with certain high-volume pages built once by nightly crons while others that require more interactivity reduce database queries to simple selects as much as possible. I&#8217;m never one to brag and toot my own horn, but I&#8217;m actually pretty proud of the new site and how responsive it is.</p>
<p>Of course, I can&#8217;t really take <em>all</em> the credit. I do have to give some serious props to <a href="http://xcache.lighttpd.net/" title="XCache">XCache</a>.</p>
<p>For those unfamiliar with <a href="http://www.php.net/" title="PHP">PHP</a>, it is one of many server-side, interpreted scripting languages commonly used for dynamic Web site development. The caveat, however, to any interpreted language is that on each request the source script must be read, parsed, <a href="http://en.wikipedia.org/wiki/Compiler" title="Compiler article on Wikipedia">compiled</a>, and executed before anything is set back to the end user&#8217;s browser. This is one reason why dynamic sites are and will always be slower than serving purely static HTML files. Static HTML just needs to be read and regurgitated; anything that requires the Web server to actually <em>think</em> takes more time. Add to that the fact that there could be hundreds or even thousands of requests all competing at once for content and it&#8217;s a miracle anything get served at all.</p>
<p>XCache is one of several <a href="http://en.wikipedia.org/wiki/Opcode" title="Opcode article on Wikipedia">opcode</a> <a href="http://en.wikipedia.org/wiki/Cache" title="Cache article on Wikipedia">caching</a> extensions for PHP. Essentially, when the first request for a script is made, the script is parsed and compiled as usual. However, XCache stores the compiled code so subsequent requests can skip the parsing and compilation steps and go directly to executing the code. This significantly increases the speed of execution by eliminating one of the costliest parts of the process (except perhaps database connections). In addition, XCache also includes the ability to cache <a href="http://en.wikipedia.org/wiki/Variable" title="Variable article on Wikipedia">variables</a> and <a href="http://en.wikipedia.org/wiki/Object-oriented_programming" title="Object-oriented programming article on Wikipedia">objects</a>, so commonly repeated and expensive variable generation&#8211;such as the <a href="http://en.wikipedia.org/wiki/Cryptographic_hash_function" title="Cryptographic hash function article on Wikipedia">cryptographic hashes</a> I use for salting cookie hashes or database look-ups for common elements like the Premium subscription levels&#8211;can be stored in the cache rather rebuilt on each request.</p>
<p>I was first introduced to XCache by the <a href="http://neosmart.net/dl.php?id=12" title="NeoSmart Technologies: XCache for WordPress">XCache for WordPress</a> plugin, which was probably mentioned in one of the development feeds built into the <a href="http://wordpress.org/" title="WordPress">WordPress</a> dashboard. I&#8217;ve been running this combination here on the blog for a little while with moderate success; I&#8217;m still trying to find a good balance of configuration settings to get the best results, but I&#8217;ve been happy with the results so far. Without putting much thought into it, I went ahead and installed XCache on the GPF server, hoping that it would help even if I never got a chance to optimize it. Fortunately, it <em>has</em> helped, and now that I&#8217;ve optimized the settings it&#8217;s exceeded most of my expectations. I&#8217;m not sure if there&#8217;s something about my code that caches better than WordPress, but GPF has done much better with XCache than the blog has.</p>
<p>Admittedly, I haven&#8217;t compared it to any other opcode cachers, nor have I benchmarked it against any of the competition. That said, however, I heartily recommend it to anybody running PHP applications. To get the greatest benefit, you may need to modify some code (or install a plugin if you&#8217;re using a prepackaged application) to take advantage of the variable/object caching. But even without modification the opcode caching alone makes for a vast improvement.</p>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2008/03/18/praise-for-xcache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Down time</title>
		<link>http://www.jeffdarlington.com/2008/02/29/down-time/</link>
		<comments>http://www.jeffdarlington.com/2008/02/29/down-time/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 14:50:36 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[GPF]]></category>
		<category><![CDATA[Keenspot]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[Slicehost]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/2008/02/29/down-time/</guid>
		<description><![CDATA[Not sure if anyone noticed, but both the blog and the new GPF beta test site were down last night. Our hosting service, Slicehost, informed us that a breaker blew in their data center and they were forced to bring a number of machines down to protect them. In addition, the blog server (which also [...]]]></description>
			<content:encoded><![CDATA[<p>Not sure if anyone noticed, but both the blog and the new <a href="http://www.gpf-comics.com/" title="General Protection Fault">GPF</a> beta test site were down last night. Our hosting service, <a href="http://www.slicehost.com/" title="Slicehost">Slicehost</a>, informed us that a breaker blew in their data center and they were forced to bring a number of machines down to protect them. In addition, the blog server (which also hosts a number other private sites I run) stopped responding, so they had to reboot it again.</p>
<p>Unfortunately, while Slicehost was very informative and sent me several e-mails to keep me apprised of the situation, the sites continued to be down until early this morning. That&#8217;s when I discovered that for some bizarre reason the <a href="http://www.mysql.com/" title="MySQL">MySQL</a> and <a href="http://httpd.apache.org/" title="Apache">Apache</a> services were not configured to start at boot time. This is baffling, in my opinion, as I thought this was automatic with <a href="http://fedoraproject.org/" title="Fedora Linux">Fedora</a>. You install the application package and, if it&#8217;s a service like this, it also installs the appropriate links in the init directories to make sure the services start on boot. Not so, apparently. I&#8217;m not sure if this is Fedora&#8217;s fault, Slicehost&#8217;s, or mine, to be honest, but it should be fixed now.</p>
<p>There&#8217;s one part of me thinks that this outage is an ominous sign on the eve of my leaving <a href="http://www.keenspot.com/" title="Keenspot Entertainment">Keenspot</a>. Then again, it also helped me catch a critical flaw that would have been extremely annoying if it happened a week later, after the move when thousands of readers would be hitting the new site. So I don&#8217;t know whether to be paranoid or relieved. (O_O)</p>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2008/02/29/down-time/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>But we were there first. OK, maybe second.</title>
		<link>http://www.jeffdarlington.com/2008/02/25/but-we-were-there-first-ok-maybe-second/</link>
		<comments>http://www.jeffdarlington.com/2008/02/25/but-we-were-there-first-ok-maybe-second/#comments</comments>
		<pubDate>Mon, 25 Feb 2008 15:20:44 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[GPF]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Webcomics]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[podcast]]></category>
		<category><![CDATA[TWiT]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/2008/02/25/but-we-were-there-first-ok-maybe-second/</guid>
		<description><![CDATA[Anyone interested in the history of webcomics should check out this week&#8217;s episode of the This Week in Tech (TWiT) podcast. Especially since it has nothing to do with webcomics. Here&#8217;s my line of reasoning: In this episode, Leo Laporte and his unusual round of suspects are joined by Jonathan Coulton, geek musician extraordinaire. Aside [...]]]></description>
			<content:encoded><![CDATA[<p>Anyone interested in the history of webcomics should check out <a href="http://twit.tv/133" title="This Week in Tech #133: Jonathan Coulton - Functional And Elegant">this week&#8217;s episode</a> of the This Week in Tech (<a href="http://twit.tv/twit" title="TWiT: This Week in Tech">TWiT</a>) podcast. Especially since it has nothing to do with webcomics.</p>
<p>Here&#8217;s my line of reasoning: In this episode, <a href="http://leoville.com/" title="Leoville.com">Leo Laporte</a> and his unusual round of suspects are joined by <a href="http://www.jonathancoulton.com/" title="Jonathan Coulton">Jonathan Coulton</a>, geek musician extraordinaire. Aside from discussing a few topics of current note (like the death of <a href="http://en.wikipedia.org/wiki/HD_DVD" title="HD DVD article on Wikipedia">HD DVD</a>), they discuss a recent concert by Coulton where Leo and company joined him to play <a href="http://en.wikipedia.org/wiki/Rock_Band_%28video_game%29" title="Rock Band (video game) article on Wikipedia">Rock Band</a> before a nerd-filled audience. They go on to talk about the &#8220;new&#8221; Internet phenomena of niche entertainment targeting&#8211;skipping the big, mass-market blitzkrieg typically used by music, TV, and movie studios and canvasing thousands or millions of potential customers, to instead go directly to your core fans, the few dedicated people who are the ones that will <em>really</em> appreciate what you do. Coulton talks of making a living catering to a small handful of hard-core fans and how this is much more fulfilling that the big media alternative, where both the artist and the audience are faceless statistics on the bottom line of a balance sheet. And they discuss this with such freshness and enthusiasm, as if this is were the next new thing, some epiphany that no one has yet uncovered.</p>
<p>What <em>I</em> find so funny about it is&#8230; those of us in webcomics have already been doing this&#8230; for <em>years.</em> <img src='http://www.jeffdarlington.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>I&#8217;ve noticed this a lot over the past near-decade of <a href="http://www.gpf-comics.com/" title="General Protection Fault">GPF</a>&#8216;s existence. Blogs, podcasts, and other forms of grass-roots media have all cropped up during that time, putting publishing power in the hands of the masses, becoming &#8220;innovative&#8221; and &#8220;groundbreaking&#8221; in bringing content production to the people. But a fair number of &#8220;new&#8221; trends (and problems) associated with these technologies are things I remember seeing crop up among webcartoonists several years before. Long before the term &#8220;blog&#8221; was coined, I remember chatting with other cartoonists on mailing lists and news groups, swapping ideas about search engine optimization (before <em>that</em> term was coined as well), getting and retaining readers, how to monetize your site, etc. It&#8217;s entertaining now to watch many tech headlines to see &#8220;fresh&#8221; ideas crop up that I&#8217;ve personally tried&#8211;and abandoned&#8211;a couple years before. It&#8217;s like the wheel reinventing itself every couple of years, only with different colors and/or materials.</p>
<p>Of course, I would never be so conceited to believe webcomics &#8220;did it first.&#8221; Webcomics themselves borrow heavily from the underground comics movement of the 1950s, 60s, and 70s, where small independent publishers ducked under government sensors to push out innovated and controversial content directly to the people who wanted them. What changed between then and now is that the interconnectivity of the Internet moved this from basements and back rooms to hidden mailing lists and chat rooms, eventually making its way to the mainstream, all while expanding the sphere of availability from isolated pockets of common interest to global reach. It would also be naive to believe this flow of &#8220;innovation&#8221; is one-way; RSS and other syndication technologies took off first in the blogosphere, and was only later ret-conned and shoe-horned into webcomic automation systems as a handy update notification system.</p>
<p>Perhaps one of the reasons bloggers and podcasters didn&#8217;t learn any lessons from webcartoonists is the difference between skill level&#8211;real or perceived, take your pick&#8211;required for entry. Cartooning obviously requires some level of artistic talent as cartooning, in all of its myriad of forms, is a form of art. It&#8217;s often a commercial art, intended more to generate revenue than anything else, but an art nonetheless, conveying ideas and emotions graphically. And while a well-crafted blog certainly requires a talent for writing, that is often easier to come by than the ability to <em>both</em> write and draw. Thus the critical mass of webcartoonists is much smaller than that of bloggers and podcasters, making it less noticeable to the mainstream. That&#8217;s also why &#8220;break-out&#8221; blogs now seem to be a dime a dozen, but it&#8217;s still major news when an online comic gets noticed by big media and gets optioned for TV/movie deals. <em>Everyone</em> knows about blogs and maybe even reads a few, but there are other comics on the &#8220;intraweb&#8221; besides <a href="http://www.dilbert.com/" title="Dilbert.com">Dilbert</a>?</p>
<p>I&#8217;m not sure if there&#8217;s anything useful to these observations, other than the fact that they amuse me occasionally and it gives me something to post about. I&#8217;m not sure if anyone else has made these kinds of observations or, for that matter, anybody else cares. But I&#8217;ve often wondered if those underground cartoonists of yesteryear thought to same way about us webcartoonists as I have about bloggers. I&#8217;d like to think so, just because it creates a nice symmetry. I can&#8217;t wait for bloggers to sit around in the old bloggers&#8217; home, thinking such thoughts about whatever comes next. &#8220;Those kids with their holocasts&#8230; if they had learned the lessons we did about AI search, they&#8217;d be raking the quatloos by now&#8230;.&#8221;</p>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2008/02/25/but-we-were-there-first-ok-maybe-second/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cookie cunundrum</title>
		<link>http://www.jeffdarlington.com/2008/02/06/cookie-cunundrum/</link>
		<comments>http://www.jeffdarlington.com/2008/02/06/cookie-cunundrum/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 15:07:20 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[GPF]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[cookies]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/2008/02/06/cookie-cunundrum/</guid>
		<description><![CDATA[By now, I&#8217;m assuming most of you have read Mondays GPF News item. (If you haven&#8217;t, shame on you.) GPF is leaving Keenspot, and I&#8217;m neck-deep in unit testing the new site with hopes of releasing it to beta testers soon. If you&#8217;re interested in beta testing, you can volunteer in this thread on the [...]]]></description>
			<content:encoded><![CDATA[<p>By now, I&#8217;m assuming most of you have read <a href="http://www.gpf-comics.com/news/d/20080204.html" title="GPF News: Monday, February 4, 2008">Mondays GPF News item</a>. (If you haven&#8217;t, shame on you.) <a href="http://www.gpf-comics.com/" title="General Protection Fault">GPF</a> is leaving <a href="http://www.keenspot.com/" title="Keenspot">Keenspot</a>, and I&#8217;m neck-deep in unit testing the new site with hopes of releasing it to beta testers soon. If you&#8217;re interested in beta testing, you can volunteer in <a href="http://forums.keenspot.com/viewtopic.php?t=100407" title="Keenspot Forums: Volunteering for beta-testing new site location">this thread on the old forum</a>.</p>
<p>However, I&#8217;ve hit upon one little programming snag, so I thought I&#8217;d put out an appeal for help. I thought the blog would be more appropriate venue for this than the forum; that assumption could be wrong, but I&#8217;ll go with it anyway. For those of you with some Web-based programming knowledge, especially in the areas of <a href="http://www.php.net/" title="PHP">PHP</a> and <a href="http://en.wikipedia.org/wiki/HTTP_cookie" title="HTTP cookie article on Wikipedia">cookies</a>, please put on your thinking caps.</p>
<p>As part of the new site, I&#8217;m implementing my own version of Keenspot&#8217;s PREMIUM service, reusing the old relabeling of GPF Premium. Keenspot PREMIUM is going away (for several reasons I won&#8217;t go into here), but as the service&#8217;s biggest proponent and largest beneficiary, I&#8217;d hate to lose that functionality. So the new site will launch with its own independent Premium functionality including all the old service&#8217;s features (optional ad-free surfing, weekly archives, High-Def archives, tons of exclusives like Jeff&#8217;s Sketchbook, etc.) plus a few new features that I&#8217;ve been wanting to implement but haven&#8217;t had the time or technological hoop-jumping expertise to work on at Keen.</p>
<p>For security reasons, I want to secure Premium sign-ups and account management via secure <a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol" title="Hypertext Transfer Protocol article on Wikipedia">HTTP</a> (<a href="http://en.wikipedia.org/wiki/Https" title="HTTPS article on Wikipedia">HTTPS</a>). The benefits should be obvious. By encrypting account creation &amp; management pages, you eliminate <a href="http://en.wikipedia.org/wiki/Packet_sniffer" title="Packet sniffer article on Wikipedia">sniffing attacks</a> and protect user privacy. While these pages may still be susceptible to other forms of attacks (and I&#8217;ve coded them to be as resilient as I know how), encrypting the traffic end-to-end can go a long way to cutting off those vectors of attack.</p>
<p>However, I seem to have hit a brick wall when it comes to setting the Premium authentication cookie. Like Keenspot&#8217;s implementation, the subscriber&#8217;s browser will be &#8220;enabled&#8221; by &#8220;branding&#8221; it with a cookie, which will be read and authenticated each time the page is loaded. If valid, Premium features for that page will be turned on; if invalid, the page will default to a non-enabled state, which could be a simple as showing all ads or as complex as denying access to the content within. Unlike Keenspot&#8217;s implementation, which was <a href="http://en.wikipedia.org/wiki/JavaScript" title="JavaScript article on Wikipedia">JavaScript</a> based, mine is scripted server-side in PHP, meaning it should be more accessible to a wider range of browsers and in theory more secure (no Premium content is sent at all if Premium is not enabled, rather than letting the client browser decide). My implementation has been thoroughly tested and appears to work pretty much flawlessly&#8230; with one hitch.</p>
<p>The problem occurs when I set the cookie over the encrypted HTTPS connection, then try to read it over unencrypted HTTP. I appears that none of my test browsers send the cookie back when the encryption state changes. The reverse is the same; if I change the URL and set the cookie over HTTP, then try to access a page via HTTPS, the encrypted page can&#8217;t see the cookie either. It works like an either-or situation, when what I really want is both. If I set a cookie over HTTPS, I want to see it in both HTTP and HTTPS mode.</p>
<p>PHP&#8217;s primary cookie interface is the <a href="http://www.php.net/manual/en/function.setcookie.php" title="PHP Manual: setcookie"><code>setcookie()</code></a> method (for setting) and the <a href="http://www.php.net/manual/en/reserved.variables.php" title="PHP Manual: Predefined Variables"><code>$_COOKIE</code> array</a> (for reading). <code>setcookie()</code> includes a <a href="http://en.wikipedia.org/wiki/Boolean_logic" title="Boolean logic article on Wikipedia">boolean</a> parameter for secure cookies, i.e. cookies that will only be sent via HTTPS. What&#8217;s annoying is that even when I set this flag to false to force it to be insecure, the scripts continue to exhibit the same behavior: cookies set via HTTP can only be read via HTTP and vice versa. I&#8217;ve also tried setting the same cookie both ways&#8211;first in one protocol, then the other, without erasing the first cookie&#8211;but that didn&#8217;t seem to work. The second cookie overwrites the first one, effectively turning it off.</p>
<p>I had heard that <a href="http://en.wikipedia.org/wiki/Internet_Explorer" title="Internet Explorer article on Wikipedia">IE</a> 6 exhibited this behavior as a bug. However, I tried the exact same tests in <a href="http://www.mozilla.com/en-US/firefox/" title="Firefox">Firefox</a> 2.0.0.11, <a href="http://www.opera.com/" title="Opera">Opera</a> 9.24, and <a href="http://www.apple.com/safari/download/" title="Safari">Safari</a> 3.0.4 (all on <a href="http://en.wikipedia.org/wiki/Microsoft_Windows" title="Microsoft Windows article on Wikipedia">Windows</a>) as well as IE 7, and all reacted the same way. Cookies set over HTTP could not be read over HTTPS and vice versa. It&#8217;s a bit frustrating. Obviously, I don&#8217;t want my Premium folks to be forced to use the new site in encrypted mode all the time, as this would slow down all the pages and put a significant extra load on the server as the number of subscribers increases. But I want to protect my users&#8217; privacy and settings (and one of my important revenue streams) by encrypting their account access.</p>
<p>So I guess I&#8217;m looking for answers to two questions:</p>
<ol>
<li>Is this some new standard of behavior that I&#8217;m missing? I was operating under the assumption that secure cookies (those set with the boolean secure flag) were restricted to HTTPS, but otherwise all other cookies should be sent regardless of whether it was encrypted or not. When I use the awesome Firefox <a href="http://chrispederick.com/work/web-developer/" title="Web Developer">Web Developer plugin</a>, it tells me that the cookie <em>should</em> be there regardless of the encrypted state. Yet it still doesn&#8217;t get sent. But am I asking too much? Am I not understanding the specifications, or has something changed that I wasn&#8217;t aware of? Can I not have my cake and eat it too?</li>
<li>
<ol style="list-style-type: lower-alpha">
<li>If I&#8217;m right and this <em>should</em> be working, what am I doing wrong? Is there a feature of PHP I should be use other than setcookie() to do this? Is it a bug, either in PHP or the browsers?</li>
<li>If I&#8217;m wrong and this behavior is expected, is there a workaround I can use to let the same Premium features work over both HTTP and HTTPS? Or should I just give up on the encrypted account management and assume my stuff isn&#8217;t worth stealing enough to bother?</li>
</ol>
</li>
</ol>
<p>Any responses via e-mail or (preferred) comments below will be appreciated.</p>
<p><em>Update March 5, 2008:</em> Thanks to the input of many commentors below, it looks like I&#8217;ve got a solution. The problem, as usual, was somewhere between the chair and the keyboard and the faulty component has been sufficiently flogged with a wet noodle. Immense thanks to everyone who provided feedback and suggestions.</p>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2008/02/06/cookie-cunundrum/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Disturbing: PayPal in cahoots with DoubleClick?</title>
		<link>http://www.jeffdarlington.com/2007/11/27/disturbing-paypal-in-cahoots-with-doubleclick/</link>
		<comments>http://www.jeffdarlington.com/2007/11/27/disturbing-paypal-in-cahoots-with-doubleclick/#comments</comments>
		<pubDate>Tue, 27 Nov 2007 16:52:57 +0000</pubDate>
		<dc:creator>Jeff</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[cookie]]></category>
		<category><![CDATA[DoubleClick]]></category>
		<category><![CDATA[PayPal]]></category>
		<category><![CDATA[Security Now]]></category>
		<category><![CDATA[Steve Gibson]]></category>
		<category><![CDATA[TWiT]]></category>

		<guid isPermaLink="false">http://www.jeffdarlington.com/2007/11/27/disturbing-paypal-in-cahoots-with-doubleclick/</guid>
		<description><![CDATA[I don&#8217;t usually do link-and-run posts (I prefer to have actual content in a blog), but I thought this was disturbing enough to disseminate. I&#8217;ll probably add my own blathering commentary which will make it more than a link-and-run post anyway. (After all, I know all of you who come here really come for the [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t usually do link-and-run posts (I prefer to have actual <em>content</em> in a blog), but I thought this was disturbing enough to disseminate. I&#8217;ll probably add my own blathering commentary which will make it more than a link-and-run post anyway. (After all, I know all of you who come here <em>really</em> come for the blathering. I&#8217;m just so blatherful&#8230;.)</p>
<p>I&#8217;m not sure how many of you out there follow the <a href="http://www.twit.tv/sn" title="The TWiT Netcast Network: Security Now!">Security Now!</a> podcast over at <a href="http://www.twit.tv/" title="The TWiT Netcast Network">TWiT</a>, but it&#8217;s probably obvious by now that I do, given <a href="http://www.jeffdarlington.com/2007/11/07/roaming-authentication-with-apache-mod_rewrite/" title="Roaming authentication with Apache mod_rewrite, November 7th, 2007">recent</a> <a href="http://www.jeffdarlington.com/2007/10/31/wordpress-security-tweaks/" title="WordPress security tweaks, October 31st, 2007">posts</a>. This past week&#8217;s episode, <a href="http://www.twit.tv/sn119" title="TWiT: Security Now! #119">#119</a>, exposes a rather unsettling fact that shouldn&#8217;t be ignored.  (The high quality 64kbps MP3 can be found at that link, while a 16kbps MP3, a transcript in various formats, and additional notes can be found <a href="http://www.grc.com/SecurityNow.htm#119" title="GRC | Security Now!">here</a>.) While I encourage you to download and listen/read the facts for yourself, I&#8217;ll see if I can summarize it below for the attention-span impaired.</p>
<p>For a long time, I&#8217;ve defended <a href="https://www.paypal.com/" title="PayPal">PayPal</a> as a method of monetary transfer. They&#8217;ve always been good to me personally, even during the stormy periods where some <a href="http://www.gpf-comics.com/" title="General Protection Fault">GPF</a> readers boycotted them for &#8220;questionable&#8221; practices. (See the <a href="http://en.wikipedia.org/wiki/PayPal" title="PayPal article on Wikipedia">PayPal Wikipedia entry</a> for an abbreviated history.) For that matter, many online comics wouldn&#8217;t be able to monetize themselves in <em>any</em> fashion if it weren&#8217;t for PayPal, as many webcomics use the service for donations and online stores. (PayPal has always been an acceptable form of payment in every incarnation of the <a href="https://www.jeffdarlington.com/store/" title="The Official GPF Store">GPF Store</a>.) They&#8217;ve always had issues with customer service, but they&#8217;ve also been champions in <a href="http://en.wikipedia.org/wiki/Phishing" title="Phishing article on Wikipedia">anti-phishing</a> campaigns.</p>
<p>But Steve Gibson and Leo Laporte have helped disclose a rather shady new practice: In a previous Security Now! episode, a listener mentioned problems downloading a software service from PayPal, only to discover that the download link was sending him to a server over at <a href="http://www.doubleclick.com/" title="DoubleClick.com">DoubleClick</a> rather than PayPal. Since he was locally blocking access to the domain &#8220;doubleclick.net&#8221; in his <a href="http://en.wikipedia.org/wiki/Hosts_file" title="Hosts file article on Wikipedia">hosts file</a>, the link failed and the software would not download. Gibson promised to investigate the incident and after a number of side-tracks finally presented his results.</p>
<p>DoubleClick, for the few out there unfamiliar with it, is one of the Internet&#8217;s largest online advertising agencies, serving ad banners to millions of Web sites (including, indirectly, GPF). DoubleClick has long been unpopular among netizens for its questionable policies of tracking Web surfers across multiple sites, using a trick with <a href="http://en.wikipedia.org/wiki/HTTP_cookie#Privacy_and_third-party_cookies" title="Privacy and third-party cookies section of the HTTP Cookie Wikipedia article">tracking cookies</a> to follow you from site to site. Privacy concerns were raised even further when <a href="http://www.google.com/" title="Google">Google</a>, a company that itself stores and indexes a lot of personal information about its users of GMail, Ad-Sense, and other services, recently purchased DoubleClick. DoubleClick eventually bowed to pressure from the Net at large and created an <a href="http://www.doubleclick.com/privacy/dart_adserving.aspx" title="DoubleClick.com: Privacy: Dart Ad Serving: Opt-Out">opt-out page</a> so their tracking cookie would contain &#8220;non-personally-identifiable information&#8221; and thus negate some of the tracking cookie&#8217;s effectiveness. (This opt-out page is still linked to (now indirectly, as the URL has changed) from the <a href="http://www.gpf-comics.com/privacy.html" title="GPF: Privacy Statement and Ad Info">GPF privacy policy page</a>.) Many folks these days, however, including myself, simply run <a href="http://en.wikipedia.org/wiki/Spyware" title="Spyware article on Wikipedia">spyware</a> scanners like <a href="http://www.safer-networking.org/" title="Spybot: Search &amp; Destroy">Spybot: Search &amp; Destroy</a> or<a href="http://www.lavasoftusa.com/" title="Lavasoft"> Ad-Aware</a> and periodically delete such tracking cookies, or just block the &#8220;doubleclick.net&#8221; domain and its subdomains using the hosts file trick mentioned above. (This is how, in part, Spybot&#8217;s immunization against cookies works.) This eliminates or at least minimizes the opportunity for your Web surfing habits to be linked personally to you.</p>
<p>However, PayPal&#8217;s new links bypass many of these anti-drive-by-cookie-ing techniques by sending you directly to DoubleClick&#8217;s servers, rather than inlining content like Flash or images from their site. Since these are internal PayPal URLs and not links that are expected to send you to the outside, they should be immediately suspicious. What&#8217;s even worse is that if you examine the URL closely, there appears to be some sort of &#8220;user ID&#8221; like number included that may personally identify you if you click on it. What&#8217;s even <em>more</em> disturbing is the number of these links you run across as you surf the PayPal site; while some obviously ad-like images contain the &#8220;doubleclick.net&#8221; URL, many links in the site bar that look like ordinary navigational links contain it as well. While Gibson points out&#8211;quite rightly&#8211;that there is no evidence to support any sort of conspiracy theories that many come to mind, it <em>is</em> obvious enough that <em>some</em> sort of information sharing is going on between the two companies, and that if a unique user identifier is indeed being passed along with the URL, there&#8217;s a likelihood that both companies can link your potential spending habits with PayPal to your surfing habits tracked by DoubleClick.</p>
<p>Now it&#8217;s easy to be alarmist and to say everyone should boycott PayPal. Unfortunately, so many of us in webcomics depend on PayPal for survival, so there&#8217;s no way we can easily remove ourselves from it. And there&#8217;s no competitor out there with enough critical mass to really challenge PayPal for dominance, so there aren&#8217;t many viable alternatives. Thus the only current immunization option is diligent observation.</p>
<p>The good news is that the DoubleClick URLs within PayPal&#8217;s site all contain at the end PayPal URL you will eventually be redirected to. It&#8217;s trivial to copy the URL, paste it into your address bar, crop out the DoubleClick portion, and go directly the the PayPal internal destination. Laporte even suggested that it won&#8217;t be long before someone comes up with a <a href="http://www.mozilla.com/firefox/" title="Firefox">Firefox</a> <a href="https://addons.mozilla.org/en-US/firefox/" title="Firefox Add-ons">plugin</a> that does that for you on the fly. The problem I see with this is that it won&#8217;t be long before the diabolical duo figures out savvy users are bypassing the links and they find a better way to obscure the redirection target URL so the copy/paste/edit trick will no longer work. While true encryption might be a bit too much server load for them to handle <em>en masse,</em> a simple ROT13 or Base64 encode might be enough to thwart all but the most stalwart gearheads.</p>
<p>So&#8230; should <em>you</em> avoid PayPal? That&#8217;s up to you. I <em>can&#8217;t,</em> but I&#8217;ll be a lot more careful of where I click on their site from now on.</p>]]></content:encoded>
			<wfw:commentRss>http://www.jeffdarlington.com/2007/11/27/disturbing-paypal-in-cahoots-with-doubleclick/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
