<?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:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Yabfog</title>
	<atom:link href="http://yabfog.com/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://yabfog.com/blog</link>
	<description>Yet another blog full of gas</description>
	<lastBuildDate>Tue, 17 Apr 2012 18:51:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<cloud domain='yabfog.com' port='80' path='/blog/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>How do I add an empty directory to a git repository?</title>
		<link>http://yabfog.com/blog/2012/04/17/how-do-i-add-an-empty-directory-to-a-git-repository</link>
		<comments>http://yabfog.com/blog/2012/04/17/how-do-i-add-an-empty-directory-to-a-git-repository#comments</comments>
		<pubDate>Tue, 17 Apr 2012 18:45:07 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://yabfog.com/blog/?p=91778640</guid>
		<description><![CDATA[Via Stack Overflow. Add, of course, git add the empty directory. So helpful.]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript" src="https://gist.github.com/2408113.js?file=gistfile1"></script><br />
<a href="http://stackoverflow.com/a/932982/749272">Via Stack Overflow</a>.</p>
<p>Add, of course, <code>git add</code> the empty directory.</p>
<p>So helpful.</p>
]]></content:encoded>
			<wfw:commentRss>http://yabfog.com/blog/2012/04/17/how-do-i-add-an-empty-directory-to-a-git-repository/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
	</item>
		<item>
		<title>A Gotcha Using Node.js + Request In a Daemon</title>
		<link>http://yabfog.com/blog/2012/04/13/a-gotcha-using-node-js-request-in-a-daemon</link>
		<comments>http://yabfog.com/blog/2012/04/13/a-gotcha-using-node-js-request-in-a-daemon#comments</comments>
		<pubDate>Fri, 13 Apr 2012 16:14:37 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[cookies]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[request]]></category>

		<guid isPermaLink="false">http://yabfog.com/blog/?p=91778635</guid>
		<description><![CDATA[I have a Node.js program running as a daemon on a Linux VPS. Periodically, it polls a list of URLs using request. When it first starts, everything runs smoothly. But after running for a while, it starts getting 400 errors, and the longer it runs, the more URLs return 400 errors. I could not understand [...]]]></description>
			<content:encoded><![CDATA[<p>I have a <a href="http://nodejs.org">Node.js</a> program running as a daemon on a Linux VPS. Periodically, it polls a list of URLs using <code><a href="https://github.com/mikeal/request">request</a></code>. When it first starts, everything runs smoothly. But after running for a while, it starts getting <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1">400</a> errors, and the longer it runs, the more URLs return 400 errors.</p>
<p>I could not understand what was going on. My code was basically structured like this:</p>
<p><script src="https://gist.github.com/2377840.js?file=request-excerpt.js"></script></p>
<p>Given that code, we know the <code>req</code> object is initialized with each function call. So, how could this script degrade over time?</p>
<p>Well, I finally tracked it down: COOKIES!</p>
<p>Yup, <code>request</code> has cookies enabled by default. So, I think what was happening was that cookies were being set (presumably, top domain-level cookies having the same name at different URLs or subdomains on the same domain) but the values in request's cookie jar were not being returned properly. That means the remote host was getting invalid cookies -- hence the 400 response for a "Bad Request."</p>
<p>I haven't yet spent the time to figure out if this is a bug in <code>request</code>. It's on my TODO list.</p>
<p>In the meantime, I've disabled cookies in the <code>req</code> object:<br />
<code>var req = { url: url, timeout: options.timeout, jar: false };</code></p>
<p>It's now working as expected.</p>
]]></content:encoded>
			<wfw:commentRss>http://yabfog.com/blog/2012/04/13/a-gotcha-using-node-js-request-in-a-daemon/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
	</item>
		<item>
		<title>Current Projects</title>
		<link>http://yabfog.com/blog/2012/04/06/current-projects</link>
		<comments>http://yabfog.com/blog/2012/04/06/current-projects#comments</comments>
		<pubDate>Fri, 06 Apr 2012 16:19:01 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[uncategorized]]></category>

		<guid isPermaLink="false">http://yabfog.com/blog/?p=91778627</guid>
		<description><![CDATA[A couple of fun things I've been working on to learn some new programming skills, namely node.js and MongoDB. 1. News Bit -- Remember Share Your OPML? Me too! 2. Linkblog -- A super easy linkblog tool. I plan to open source the linkblog code soon. It also uses a shorturl tool I'm working on [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of fun things I've been working on to learn some new programming skills, namely <a href="http://nodejs.org/">node.js</a> and <a href="http://www.mongodb.org/">MongoDB</a>.</p>
<p>1. News Bit -- Remember <a href="http://share.opml.org/">Share Your OPML</a>? Me too!<br />
<a href="http://yabfog.com/blog/wp-content/uploads/2012/04/2012-04-06-newsbit-rivers.png"><img src="http://yabfog.com/blog/wp-content/uploads/2012/04/2012-04-06-newsbit-rivers-300x93.png" alt="" title="News Bit - My Rivers" width="300" height="93" class="alignnone size-medium wp-image-91778630" /></a><br />
<a href="http://yabfog.com/blog/wp-content/uploads/2012/04/2012-04-06-newsbit-feeds.png"><img src="http://yabfog.com/blog/wp-content/uploads/2012/04/2012-04-06-newsbit-feeds-300x93.png" alt="" title="News Bit - My Feeds" width="300" height="93" class="alignnone size-medium wp-image-91778629" /></a></p>
<p>2. Linkblog -- A super easy linkblog tool.<br />
<a href="http://yabfog.com/blog/wp-content/uploads/2012/04/2012-04-06-linkblog.png"><img src="http://yabfog.com/blog/wp-content/uploads/2012/04/2012-04-06-linkblog-300x158.png" alt="" title="Simple Linkblog" width="300" height="158" class="alignnone size-medium wp-image-91778628" /></a></p>
<p>I plan to open source the linkblog code soon. It also uses a shorturl tool I'm working on -- <a href="https://github.com/danmactough/shorturl">shorturl is open source</a>. I still need to hook the hit stats (collected by the shorturl tool) into the linkblog tool, but other than that the tools work well!</p>
]]></content:encoded>
			<wfw:commentRss>http://yabfog.com/blog/2012/04/06/current-projects/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:thumbnail url="http://yabfog.com/blog/wp-content/uploads/2012/04/2012-04-06-newsbit-rivers-150x150.png" />
		<media:content url="http://yabfog.com/blog/wp-content/uploads/2012/04/2012-04-06-newsbit-rivers.png" medium="image">
			<media:title type="html">News Bit - My Rivers</media:title>
			<media:thumbnail url="http://yabfog.com/blog/wp-content/uploads/2012/04/2012-04-06-newsbit-rivers-150x150.png" />
		</media:content>
		<media:content url="http://yabfog.com/blog/wp-content/uploads/2012/04/2012-04-06-newsbit-feeds.png" medium="image">
			<media:title type="html">News Bit - My Feeds</media:title>
			<media:thumbnail url="http://yabfog.com/blog/wp-content/uploads/2012/04/2012-04-06-newsbit-feeds-150x150.png" />
		</media:content>
		<media:content url="http://yabfog.com/blog/wp-content/uploads/2012/04/2012-04-06-linkblog.png" medium="image">
			<media:title type="html">Simple Linkblog</media:title>
			<media:thumbnail url="http://yabfog.com/blog/wp-content/uploads/2012/04/2012-04-06-linkblog-150x150.png" />
		</media:content>
	</item>
		<item>
		<title>Notes On Creating A Multi-user Feed Aggregator</title>
		<link>http://yabfog.com/blog/2012/04/06/notes-on-creating-a-multi-user-feed-aggregator</link>
		<comments>http://yabfog.com/blog/2012/04/06/notes-on-creating-a-multi-user-feed-aggregator#comments</comments>
		<pubDate>Fri, 06 Apr 2012 14:51:29 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[aggregators]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rss]]></category>

		<guid isPermaLink="false">http://yabfog.com/blog/?p=91778609</guid>
		<description><![CDATA[Some time ago, I answered another user's question on Stack Overflow about database design for a multi-user feed aggregator. I also received an email from a developer asking for additional input, which I shared. But I thought I should put my response here, as well, for posterity's sake if nothing else. Note that my comments [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago, I answered another user's question on Stack Overflow about <a href="http://stackoverflow.com/a/8651837/749272">database design for a multi-user feed aggregator</a>. I also received an email from a developer asking for additional input, which I shared. But I thought I should put my response here, as well, for posterity's sake if nothing else. Note that my comments here assume MySQL as the database but should apply to any SQL database.</p>
<p>Basically, my emailer asked what to do about the fact that the <code>posts</code> table will get huge very quickly if we have multiple users and a row for each post for each user. It's actually a pretty basic relational database scenario, but if you start your project as a single user application and later decide it's going to be multi-user, you may not realize that you probably need to completely redesign your database.</p>
<p>So I've posted the schemae I use for my multi-user feed aggregator (a private project):<br />
<script src="https://gist.github.com/2319920.js?file=create_tables.sql"></script></p>
<p>I've also posted a sql command that you can run in a cron job to remove read posts that are more than 14 days old:<br />
<script src="https://gist.github.com/2319977.js?file=cleanup.sql"></script></p>
<p>As an aside, I'm amazed by how many people are writing new aggregators. Is it a common programming class exercise to write a feed aggregator or something?</p>
]]></content:encoded>
			<wfw:commentRss>http://yabfog.com/blog/2012/04/06/notes-on-creating-a-multi-user-feed-aggregator/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
	</item>
		<item>
		<title>Yet another XP BSOD solved</title>
		<link>http://yabfog.com/blog/2012/02/27/yet-another-xp-bsod-solved</link>
		<comments>http://yabfog.com/blog/2012/02/27/yet-another-xp-bsod-solved#comments</comments>
		<pubDate>Mon, 27 Feb 2012 15:38:43 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[fixes]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://yabfog.com/blog/?p=91778606</guid>
		<description><![CDATA[Stop 0x00000024 Oy. Grab Windows XP Installation CD. Boot into Recovery Console dir c: // cannot read directory. chkdsk c: /p // 1 errors found Reboot into Recovery Console dir c: // success! fixboot Reboot into Windows // success Woot!]]></description>
			<content:encoded><![CDATA[<p><code>Stop 0x00000024</code></p>
<p>Oy.</p>
<ol>
<li>Grab Windows XP Installation CD.</li>
<li>Boot into Recovery Console</li>
<li><code>dir c:</code> // cannot read directory.</li>
<li><code>chkdsk c: /p</code> // 1 errors found</li>
<li>Reboot into Recovery Console</li>
<li><code>dir c:</code> // success!</li>
<li><code>fixboot</code></li>
<li>Reboot into Windows // success</li>
</ol>
<p>Woot!</p>
]]></content:encoded>
			<wfw:commentRss>http://yabfog.com/blog/2012/02/27/yet-another-xp-bsod-solved/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
	</item>
		<item>
		<title>WordPress Update Bash Script</title>
		<link>http://yabfog.com/blog/2011/12/12/wordpress-update-bash-script</link>
		<comments>http://yabfog.com/blog/2011/12/12/wordpress-update-bash-script#comments</comments>
		<pubDate>Tue, 13 Dec 2011 02:45:22 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://yabfog.com/blog/?p=91778603</guid>
		<description><![CDATA[I wrote this script some time ago. It's been working flawlessly for me, so I thought I'd share it here. It could use some progress messages, I suppose. #!/bin/bash DIR= # Put the file system path to your WordPress installation here. E.g., /var/www/html/blog TMPDIR=$HOME/tmp WPDIR=$TMPDIR/wordpress cd $TMPDIR rm -rf latest.zip ./wordpress # Clean up from [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote this script some time ago. It's been working flawlessly for me, so I thought I'd share it here. It could use some progress messages, I suppose.</p>
<p><code><br />
#!/bin/bash<br />
DIR= # Put the file system path to your WordPress installation here. E.g., /var/www/html/blog<br />
TMPDIR=$HOME/tmp<br />
WPDIR=$TMPDIR/wordpress<br />
cd $TMPDIR<br />
rm -rf latest.zip ./wordpress # Clean up from the last run<br />
wget -nd http://wordpress.org/latest.zip<br />
unzip latest.zip<br />
mv $DIR/wp-config.php $DIR/.config # Stash your configuration someplace safe<br />
rm $DIR/*.{txt,html,php} # Delete the old install<br />
rm -rf $DIR/{wp-admin,wp-includes} # Delete more. Don't delete plugins or themes.<br />
cp -aR $WPDIR/* $DIR/<br />
mv $DIR/.config $DIR/wp-config.php # Restore the configuration<br />
# You may not need the last two lines. I like to give my web server the ability to write files.<br />
chown -R .www-data $DIR/*.php $DIR/wp-admin $DIR/wp-includes<br />
chmod -R g+w $DIR/*.php $DIR/wp-includes<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://yabfog.com/blog/2011/12/12/wordpress-update-bash-script/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
	</item>
		<item>
		<title>Second Best Fortune Cookie Ever</title>
		<link>http://yabfog.com/blog/2011/07/08/second-best-fortune-cookie-ever</link>
		<comments>http://yabfog.com/blog/2011/07/08/second-best-fortune-cookie-ever#comments</comments>
		<pubDate>Fri, 08 Jul 2011 14:39:55 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[photo]]></category>
		<category><![CDATA[cool]]></category>

		<guid isPermaLink="false">http://yabfog.com/blog/?p=91778597</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://yabfog.com/blog/wp-content/uploads/2011/07/Second-Best-Fortune-Cookie-Ever.png"><img src="http://yabfog.com/blog/wp-content/uploads/2011/07/Second-Best-Fortune-Cookie-Ever.png" alt="All your hard work will soon be paid off" title="All your hard work will soon be paid off" width="326" height="77" class="alignnone size-full wp-image-91778598" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://yabfog.com/blog/2011/07/08/second-best-fortune-cookie-ever/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:thumbnail url="http://yabfog.com/blog/wp-content/uploads/2011/07/Second-Best-Fortune-Cookie-Ever-150x77.png" />
		<media:content url="http://yabfog.com/blog/wp-content/uploads/2011/07/Second-Best-Fortune-Cookie-Ever.png" medium="image">
			<media:title type="html">All your hard work will soon be paid off</media:title>
			<media:thumbnail url="http://yabfog.com/blog/wp-content/uploads/2011/07/Second-Best-Fortune-Cookie-Ever-150x77.png" />
		</media:content>
	</item>
		<item>
		<title>Best Fortune Cookie Ever</title>
		<link>http://yabfog.com/blog/2011/06/16/best-fortune-cookie-ever</link>
		<comments>http://yabfog.com/blog/2011/06/16/best-fortune-cookie-ever#comments</comments>
		<pubDate>Thu, 16 Jun 2011 20:01:42 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[photo]]></category>
		<category><![CDATA[cool]]></category>

		<guid isPermaLink="false">http://yabfog.com/blog/?p=91778576</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://yabfog.com/blog/wp-content/uploads/2011/06/Best-Fortune-Cookie-Ever.png"><img src="http://yabfog.com/blog/wp-content/uploads/2011/06/Best-Fortune-Cookie-Ever.png" alt="Your talents will be recognized and suitably rewarded." title="Your talents will be recognized and suitably rewarded." width="362" height="93" class="alignnone size-full wp-image-91778585" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://yabfog.com/blog/2011/06/16/best-fortune-cookie-ever/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:thumbnail url="http://yabfog.com/blog/wp-content/uploads/2011/06/Best-Fortune-Cookie-Ever-150x93.png" />
		<media:content url="http://yabfog.com/blog/wp-content/uploads/2011/06/Best-Fortune-Cookie-Ever.png" medium="image">
			<media:title type="html">Best Fortune Cookie Ever</media:title>
			<media:thumbnail url="http://yabfog.com/blog/wp-content/uploads/2011/06/Best-Fortune-Cookie-Ever-150x93.png" />
		</media:content>
	</item>
		<item>
		<title>Remap Mac Terminal Command-K</title>
		<link>http://yabfog.com/blog/2011/06/07/remap-mac-terminal-command-k</link>
		<comments>http://yabfog.com/blog/2011/06/07/remap-mac-terminal-command-k#comments</comments>
		<pubDate>Tue, 07 Jun 2011 16:54:39 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[keyboard]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://yabfog.com/blog/?p=91778577</guid>
		<description><![CDATA[In case I need to remember that I did this... By default, the Mac Terminal assigns the "Clear Scrollback" command to Command-K. This is annoying, because I often use Nano, which uses Control-K to cut a line of text, and I frequently press Command-K instead of Control-K by accident. This clears my screen while I'm [...]]]></description>
			<content:encoded><![CDATA[<p>In case I need to remember that I did this...</p>
<p>By default, the Mac Terminal assigns the "Clear Scrollback" command to Command-K. This is annoying, because I often use Nano, which uses Control-K to cut a line of text, and I frequently press Command-K instead of Control-K by accident. This clears my screen while I'm in the middle of editing a file. Very annoying.</p>
<p>The solution is to assign a new (harder to hit by accident) command to the "Clear Scrollback" command, so that when I inevitably mistype Command-K, nothing happens.</p>
<p><a href="http://yabfog.com/blog/wp-content/uploads/2011/06/Remap-Command-K.png"><img src="http://yabfog.com/blog/wp-content/uploads/2011/06/Remap-Command-K-300x270.png" alt="Remap Command-K" title="Remap Command-K" width="300" height="270" class="alignnone size-medium wp-image-91778578" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://yabfog.com/blog/2011/06/07/remap-mac-terminal-command-k/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:thumbnail url="http://yabfog.com/blog/wp-content/uploads/2011/06/Remap-Command-K-150x150.png" />
		<media:content url="http://yabfog.com/blog/wp-content/uploads/2011/06/Remap-Command-K.png" medium="image">
			<media:title type="html">Remap Command-K</media:title>
			<media:thumbnail url="http://yabfog.com/blog/wp-content/uploads/2011/06/Remap-Command-K-150x150.png" />
		</media:content>
	</item>
		<item>
		<title>Fun with River2</title>
		<link>http://yabfog.com/blog/2011/02/11/fun-with-river2</link>
		<comments>http://yabfog.com/blog/2011/02/11/fun-with-river2#comments</comments>
		<pubDate>Fri, 11 Feb 2011 06:39:45 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[dde]]></category>
		<category><![CDATA[fixes]]></category>
		<category><![CDATA[opml]]></category>
		<category><![CDATA[palemoon]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[river2]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://yabfog.com/blog/?p=91778558</guid>
		<description><![CDATA[I decided to install Dave Winer's River2 to supplement my usual feed reading. Now that I can access it via its smart use of Dropbox, it should be good for feeds that I don't feel like I need to see every headline. One of the things I love about River2 is that it's an app [...]]]></description>
			<content:encoded><![CDATA[<p>I decided to install Dave Winer's <a href="http://newsriver.org/river2.html">River2</a> to supplement my usual feed reading. Now that I can access it via its smart use of Dropbox, it should be good for feeds that I don't feel like I need to see every headline.</p>
<p>One of the things I love about River2 is that it's an app that runs in the <a href="http://editor.opml.org/">OPML Editor</a>, which means that it is endlessly hackable and (apropos to this post) you can fix your own bugs.</p>
<p>So here's a bug report. And fix. (Actually, it could be a workaround for a bug in another application, as I explain below).</p>
<ol>
<li>What I was doing: From the <code><strong>Tools > River2 > Pages</strong></code> menu, I selected a page to view (any one, it's the same bug no matter which page).</li>
<li>What I expected to happen: I expected the selected page to open in my default web browser, <a href="http://www.palemoon.org/">Pale Moon</a> (a Windows-optimized build of Firefox)</li>
<li>What actually happened: Nothing. Not even an error dialog.</li>
</ol>
<p>I immediately suspected that the problem was the communication between the OPML Editor and the Pale Moon browser. After all, there was a major bug for the longest time in Firefox's DDE implementation that required a workaround.</p>
<p>Bottom line: the OPML Editor's DDE implementation expects that the DDE service name is the same as the name of the executable with the filename suffix removed. So, for Excel, the service name is "excel," and for Firefox it's "firefox." But the service name is determined by the application, and the Pale Moon developers decided that its service name would be "Pale Moon," not "palemoon." A simple patch to <code>system.verbs.builtins.webBrowser.openURL</code> resolves the problem.</p>
<pre>
if string.lower (id) contains "palemoon" { // 2/11/11; 12:09:06 AM by DJM
	ddeName = "Pale Moon";
	return (webBrowser.callBrowser (ddeName, "WWW_OpenURL", s+",,0,0,,,,"))}
</pre>
<p>The function <code>webBrowser.callBrowser</code> expects ddeName to be the name of the executable, from which it attempts to remove the ".exe" suffix. Luckily, if the function is passed any string without an ".exe" suffix, it just accepts the passed string as the DDE service name.</p>
<p>Here's the full context:</p>
<p><a href="http://yabfog.com/blog/wp-content/uploads/2011/02/openurl.png"><img src="http://yabfog.com/blog/wp-content/uploads/2011/02/openurl-300x233.png" alt="system.verbs.builtins.webBrowser.openURL" title="system.verbs.builtins.webBrowser.openURL" width="300" height="233" class="size-medium wp-image-91778559" /></a></p>
<p>That ",,0,0,,,," nonsense is part of the DDE message that Pale Moon expects:</p>
<p><a href="http://yabfog.com/blog/wp-content/uploads/2011/02/palemoondde.png"><img src="http://yabfog.com/blog/wp-content/uploads/2011/02/palemoondde-288x300.png" alt="Pale Moon DDE" title="Pale Moon DDE" width="288" height="300" class="alignnone size-medium wp-image-91778571" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://yabfog.com/blog/2011/02/11/fun-with-river2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:thumbnail url="http://yabfog.com/blog/wp-content/uploads/2011/02/openurl-150x150.png" />
		<media:content url="http://yabfog.com/blog/wp-content/uploads/2011/02/openurl.png" medium="image">
			<media:title type="html">openurl</media:title>
			<media:thumbnail url="http://yabfog.com/blog/wp-content/uploads/2011/02/openurl-150x150.png" />
		</media:content>
		<media:content url="http://yabfog.com/blog/wp-content/uploads/2011/02/palemoondde.png" medium="image">
			<media:title type="html">Pale Moon DDE</media:title>
			<media:thumbnail url="http://yabfog.com/blog/wp-content/uploads/2011/02/palemoondde-150x150.png" />
		</media:content>
	</item>
	</channel>
</rss>

