<?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"
	>

<channel>
	<title>Ryan Pfister</title>
	<atom:link href="http://www.ryanpfister.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ryanpfister.com</link>
	<description>Programmer, Pontificator, Prognosticator</description>
	<pubDate>Sat, 15 Nov 2008 03:03:04 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>FriendFlash &#8212; Recognize your Facebook friends on sight</title>
		<link>http://www.ryanpfister.com/2008/11/friendflash/</link>
		<comments>http://www.ryanpfister.com/2008/11/friendflash/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 03:01:32 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ryanpfister.com/?p=59</guid>
		<description><![CDATA[I&#8217;ve completed my first Facebook application: FriendFlash. It displays a photo of one of your friends and you have to pick which one it is from a list of choices. I built it because I have a lot of random Facebook friends and sometimes I have trouble remembering what they all look like.
Check it out!
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve completed my first Facebook application: FriendFlash. It displays a photo of one of your friends and you have to pick which one it is from a list of choices. I built it because I have a lot of random Facebook friends and sometimes I have trouble remembering what they all look like.</p>
<p><a href="http://apps.facebook.com/friendflash/">Check it out</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanpfister.com/2008/11/friendflash/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Speak and print your daily tasks and events</title>
		<link>http://www.ryanpfister.com/2008/11/speak-and-print-your-daily-tasks-and-events/</link>
		<comments>http://www.ryanpfister.com/2008/11/speak-and-print-your-daily-tasks-and-events/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 02:03:28 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ryanpfister.com/?p=52</guid>
		<description><![CDATA[I keep track of my tasks using Remember The Milk and my calendar using Google Calendar. However, I don&#8217;t have a Blackberry or other phone with Internet access, so sometimes it&#8217;s nice of have a paper copy of what I have to do on a particular day.
I created a Ruby script that reads in my [...]]]></description>
			<content:encoded><![CDATA[<p>I keep track of my tasks using <a href="http://www.rememberthemilk.com">Remember The Milk</a> and my calendar using <a href="http://calendar.google.com">Google Calendar</a>. However, I don&#8217;t have a Blackberry or other phone with Internet access, so sometimes it&#8217;s nice of have a paper copy of what I have to do on a particular day.</p>
<p>I created a Ruby script that reads in my tasks from the RTM private feed and my events from the Google Calendar private ical feed. It then assembles a text file of everything happening that day and prints it out. For fun, I rigged it up with the Microsoft text-to-speech API, so you can have your agenda read to you too.</p>
<p>If you&#8217;re interested in using it, I&#8217;ve released a copy of the source code under the Apache 2.0 license. <a href="http://www.ryanpfister.com/wp-content/agenda_code.txt">Get it here</a>.</p>
<p>Note that you&#8217;ll need a copy of the <a href="http://icalendar.rubyforge.org/">Ruby iCalendar library</a> for this to work.</p>
<p>Here&#8217;s a sample of the <a href="http://www.ryanpfister.com/wp-content/agenda_sample.txt">printer output</a> and the <a href="http://www.ryanpfister.com/wp-content/agenda_demo.mp3">speech output</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanpfister.com/2008/11/speak-and-print-your-daily-tasks-and-events/feed/</wfw:commentRss>
<enclosure url="http://www.ryanpfister.com/wp-content/agenda_demo.mp3" length="468950" type="audio/mpeg" />
		</item>
		<item>
		<title>Full Contact Search Code &#8212; Lessons in Google Authentication</title>
		<link>http://www.ryanpfister.com/2008/10/full-contact-search-code-lessons-in-google-authentication/</link>
		<comments>http://www.ryanpfister.com/2008/10/full-contact-search-code-lessons-in-google-authentication/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 16:43:07 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ryanpfister.com/?p=45</guid>
		<description><![CDATA[Here&#8217;s the main code file for my Full Contact Search Application:
fullcontactsearch_code
I&#8217;m releasing it under the Apache license. Some of it is originally inspired from Google tutorials anyway. The portion of the code you may find useful is the self.GetAuthentication method. Basically, what you need to be able to do to permanently authenticate a user is:

Get [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s the main code file for my Full Contact Search Application:<br />
<a href='http://www.ryanpfister.com/wp-content/fullcontactsearch_code.txt'>fullcontactsearch_code</a></p>
<p>I&#8217;m releasing it under the Apache license. Some of it is originally inspired from Google tutorials anyway. The portion of the code you may find useful is the <code>self.GetAuthentication</code> method. Basically, what you need to be able to do to permanently authenticate a user is:</p>
<ol>
<li>Get the user to sign in to a Google account.</li>
<li>Get the user to approve your Web site for access to a url scope (in my case, the Google Contacts feed)</li>
<li>Upgrade the single use token that Google returns to a session token.</li>
<li>Store that token in a database (in Google App Engine&#8217;s case, just use the built-in datastore).</li>
</ol>
<p>Then, next time a user visits the Web site, just look up the session key from your database and you&#8217;re good to go.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanpfister.com/2008/10/full-contact-search-code-lessons-in-google-authentication/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Full Contact Search: Search all the fields of your Gmail contacts</title>
		<link>http://www.ryanpfister.com/2008/10/full-contact-search-search-all-the-fields-of-your-gmail-contacts/</link>
		<comments>http://www.ryanpfister.com/2008/10/full-contact-search-search-all-the-fields-of-your-gmail-contacts/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 16:11:43 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Featured]]></category>

		<guid isPermaLink="false">http://www.ryanpfister.com/?p=40</guid>
		<description><![CDATA[I&#8217;ve created a new Web site called Full Contact Search using Google App Engine that allows you to search all fields from your Gmail contacts, not just name and e-mail. Check it out at http://fullcontactsearch.appspot.com.
When Google upgraded to a new version of its contact manager, it bizarrely took away the ability to search fields like [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve created a new Web site called <a href="http://fullcontactsearch.appspot.com">Full Contact Search</a> using Google App Engine that allows you to search all fields from your Gmail contacts, not just name and e-mail. Check it out at <a href="http://fullcontactsearch.appspot.com">http://fullcontactsearch.appspot.com</a>.</p>
<p>When Google upgraded to a new version of its contact manager, it bizarrely took away the ability to search fields like &#8220;notes&#8221; and &#8220;company.&#8221; For anyone who files people by company or puts contact &#8220;tags&#8221; in the notes field like I do, this was a major inconvenience. One work around to this problem is to open up the <a href="http://mail.google.com/mail/?ui=1">old version of Gmail</a> (just type ?ui=1 after the gmail url) and use that contact manager, but who knows how long that&#8217;s going to be around.</p>
<p>So, until Google comes out with the be-all, end-all of contact managers, this Web site should serve as a nice holdover.</p>
<p>UPDATE: I&#8217;ve <a href="http://www.ryanpfister.com/2008/10/full-contact-search-code-lessons-in-google-authentication/">posted the source code</a> with some notes. Based on my experience, I think some of Google App Engine&#8217;s <a href="http://code.google.com/appengine/docs/gettingstarted/">tutorials </a>need updating.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanpfister.com/2008/10/full-contact-search-search-all-the-fields-of-your-gmail-contacts/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Drop.io - very cool file sharing</title>
		<link>http://www.ryanpfister.com/2008/09/dropio-very-cool-file-sharing/</link>
		<comments>http://www.ryanpfister.com/2008/09/dropio-very-cool-file-sharing/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 01:55:46 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ryanpfister.com/?p=37</guid>
		<description><![CDATA[If you ever have to share files on the Internet, check out Drop.io. It&#8217;s the simplest, quickest way I&#8217;ve seen to get a file uploaded and a link sent out. And check out the Firefox extension, which allows drag-and-drop uploads from your computer. Sounds like a prime Google takeover target to me&#8230;
I&#8217;m probably going to [...]]]></description>
			<content:encoded><![CDATA[<p>If you ever have to share files on the Internet, check out <a href="http://drop.io/">Drop.io</a>. It&#8217;s the simplest, quickest way I&#8217;ve seen to get a file uploaded and a link sent out. And check out the Firefox extension, which allows drag-and-drop uploads from your computer. Sounds like a prime Google takeover target to me&#8230;</p>
<p>I&#8217;m probably going to use this for group projects this semester.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanpfister.com/2008/09/dropio-very-cool-file-sharing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Executor: My new application launcher</title>
		<link>http://www.ryanpfister.com/2008/09/executor-my-new-application-launcher/</link>
		<comments>http://www.ryanpfister.com/2008/09/executor-my-new-application-launcher/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 01:51:40 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ryanpfister.com/?p=34</guid>
		<description><![CDATA[I read about executor on lifehacker the other day. It&#8217;s a utility that enables you to launch programs using keyboard commands, such as &#8220;excel&#8221; for Excel. In the past, I&#8217;ve used Mike Lin&#8217;s MCL to do this. I&#8217;ve experimented with other launchers like Launchy, but I&#8217;ve found they&#8217;re too bloated and index way too many [...]]]></description>
			<content:encoded><![CDATA[<p>I read about <a href="http://executor.dk/">executor</a> on <a href="http://lifehacker.com/400566/executor-is-impressive-full+featured-app-launcher">lifehacker</a> the other day. It&#8217;s a utility that enables you to launch programs using keyboard commands, such as &#8220;excel&#8221; for Excel. In the past, I&#8217;ve used Mike Lin&#8217;s <a href="http://www.mlin.net/MCL.shtml">MCL</a> to do this. I&#8217;ve experimented with other launchers like Launchy, but I&#8217;ve found they&#8217;re too bloated and index way too many things. I usually just want to create a keyword that launches a specific shortcut. It needs to be fast and lean.</p>
<p>My main issue with MCL was that it was annoying to create keywords. Executor fixes that problem: you can either add shortcuts to a folder it scans, drag and drop shortcuts into its dialog box, or right-click a shortcut and hit &#8220;Send To&#8230;Executor.&#8221; Very handy. Plus, it has some great built in keywords. For instance, typing in &#8220;ip&#8221; will make your IP address appear in the bar, ready to be copy and pasted.</p>
<p>In terms of memory, it takes up less than 10 MB. Not as small as MCL, but acceptable.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanpfister.com/2008/09/executor-my-new-application-launcher/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Shell commands to upgrade to WP 2.6.1</title>
		<link>http://www.ryanpfister.com/2008/08/shell-commands-to-upgrade-to-wp-261/</link>
		<comments>http://www.ryanpfister.com/2008/08/shell-commands-to-upgrade-to-wp-261/#comments</comments>
		<pubDate>Sat, 30 Aug 2008 02:26:27 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ryanpfister.com/?p=31</guid>
		<description><![CDATA[Just upgraded this blog to WP 2.6.1 via ssh. Went just fine (knock on wood). Here&#8217;s the commands I used, for my own reference as much as anyone else&#8217;s:

wget http://wordpress.org/latest.tar.gz
rm -rf wp-includes
rm -rf wp-admin
tar -xzvf latest.tar.gz
cp -rpf wordpress/* .

Of course, you&#8217;ll want to replace &#8220;.&#8221; in the last line with the address of your wordpress [...]]]></description>
			<content:encoded><![CDATA[<p>Just upgraded this blog to WP 2.6.1 via ssh. Went just fine (knock on wood). Here&#8217;s the commands I used, for my own reference as much as anyone else&#8217;s:</p>
<p><code><br />
wget http://wordpress.org/latest.tar.gz<br />
rm -rf wp-includes<br />
rm -rf wp-admin<br />
tar -xzvf latest.tar.gz<br />
cp -rpf wordpress/* .<br />
</code></p>
<p>Of course, you&#8217;ll want to replace &#8220;.&#8221; in the last line with the address of your wordpress directory. In my case, I use the root directory.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanpfister.com/2008/08/shell-commands-to-upgrade-to-wp-261/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Adding a subject to a text message sent to an e-mail address</title>
		<link>http://www.ryanpfister.com/2008/08/adding-a-subject-to-a-text-message-sent-to-an-e-mail-address/</link>
		<comments>http://www.ryanpfister.com/2008/08/adding-a-subject-to-a-text-message-sent-to-an-e-mail-address/#comments</comments>
		<pubDate>Sat, 30 Aug 2008 02:06:41 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.ryanpfister.com/?p=28</guid>
		<description><![CDATA[Here&#8217;s a tip for text messengers that I discovering when configuring Remember The Milk for my cell phone:
If you are sending a text message to an e-mail address and put words in parentheses at the start of your message, they will show up as the subject of the e-mail.
For example:
(this is the subject) this is [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a tip for text messengers that I discovering when configuring Remember The Milk for my cell phone:</p>
<p>If you are sending a text message to an e-mail address and put words in parentheses at the start of your message, they will show up as the subject of the e-mail.</p>
<p>For example:<br />
<code>(this is the subject) this is the body</code></p>
<p>I haven&#8217;t tested this on other phones, but it works on my old Samsung phone on the Verizon Wireless network. I spent quite a bit of time Googling this before I just tried sending an email to my cell phone with a subject and then copied the syntax of how it appeared.</p>
<p>This feature is especially handy when using <a href="http://www.rememberthemilk.com">Remember The Milk&#8217;</a>s &#8220;e-mail a task&#8221; feature. RTM gives you a unique e-mail address. Any e-mails sent to the address will be added to your task list. According to <a href="http://www.rememberthemilk.com/help/answers/sending/emailinbox.rtm">the documentation</a>, you&#8217;re supposed to put the task name as the subject and any other information (e.g. due date) in the body.</p>
<p>My problem was I wanted the tasks to show up as due today, rather than due anytime. So, using the text message subject syntax, I wrote:</p>
<p><code>(remember the milk) due: today</code></p>
<p>Another alternative is to use the twitter interface for RTM, but it stopped working for me recently.</p>
<p>A productivity tip: Store the RTM e-mail as &#8220;@Task&#8221; in your phone contact list. That way, you won&#8217;t have to scroll through your contacts list to get to it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanpfister.com/2008/08/adding-a-subject-to-a-text-message-sent-to-an-e-mail-address/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MT4 Right Fields to Custom Fields Conversion with SQL</title>
		<link>http://www.ryanpfister.com/2008/05/mt4-right-fields-to-custom-fields-conversion-with-sql/</link>
		<comments>http://www.ryanpfister.com/2008/05/mt4-right-fields-to-custom-fields-conversion-with-sql/#comments</comments>
		<pubDate>Wed, 07 May 2008 21:21:38 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<category><![CDATA[Featured]]></category>

		<category><![CDATA[movable type]]></category>

		<guid isPermaLink="false">http://www.ryanpfister.com/blog/?p=15</guid>
		<description><![CDATA[Here&#8217;s a script to convert your Movable Type RightFields data to Custom Fields if your Right Fields data is stored in a SQL table. It is a modification of Chad Everett&#8217;s RF2CF plugin, which is designed for RightFields data stored in MT&#8217;s PluginData repository.
Download it here.
The folder in that zip file should be placed in [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a script to convert your Movable Type RightFields data to Custom Fields if your Right Fields data is stored in a SQL table. It is a modification of Chad Everett&#8217;s <a href="http://cxliv.org/2007/12/17/convert_rightfields_data_to_customfields.php">RF2CF plugin</a>, which is designed for RightFields data stored in MT&#8217;s PluginData repository.</p>
<p><a href="/experiments/rf2cf_sql.zip">Download it here</a>.</p>
<p>The folder in that zip file should be placed in your MT4 plugins directory. Then follow the instructions at the top of the rf2cf_sql.pl file to set up the conversion.</p>
<p>The code isn&#8217;t very pretty and it requires a lot of manual mapping of fields right now. However, since you only have to do the conversion once, I don&#8217;t think the lack of automation is a big deal. Of course, I recommend you back up your database before you try it. And I&#8217;m making no warranty it will actually work for you &#8212; I just hope it will set you on the right track to getting the conversion done.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanpfister.com/2008/05/mt4-right-fields-to-custom-fields-conversion-with-sql/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Converting Right Fields when upgrading MT 3 to MT 4</title>
		<link>http://www.ryanpfister.com/2008/05/converting-right-fields-when-upgrading-mt-3-to-mt-4/</link>
		<comments>http://www.ryanpfister.com/2008/05/converting-right-fields-when-upgrading-mt-3-to-mt-4/#comments</comments>
		<pubDate>Wed, 07 May 2008 02:45:09 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<category><![CDATA[movable type]]></category>

		<guid isPermaLink="false">http://www.ryanpfister.com/blog/?p=13</guid>
		<description><![CDATA[Last week, the incoming Daily Collegian Web editor and I put in some very late hours upgrading our publishing system from Movable Type 3.3 to MT 4. We had a few hiccups; I&#8217;ll document them here in case any one else runs into the same thing.
Why we upgraded: MT 3.3 was getting slowwwwww. And worse, [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, the incoming Daily Collegian Web editor and I put in some very late hours upgrading our publishing system from Movable Type 3.3 to MT 4. We had a few hiccups; I&#8217;ll document them here in case any one else runs into the same thing.</p>
<p><strong>Why we upgraded: </strong>MT 3.3 was getting slowwwwww. And worse, it looked like it was getting slower the more entries we added &#8212; indicating the problem might get worse with time. I have a hunch that MT wasn&#8217;t writing the SQL queries correctly to properly leverage indexes. When I installed MT 4, our entry build times were cut almost in half.</p>
<p>The main reason we didn&#8217;t upgrade earlier was that on MT 3.3, we were using <a href="http://www.staggernation.com/mtplugins/RightFields/">RightFields</a>, which hasn&#8217;t been (and from what it looks like, might never be) upgraded for MT4. I&#8217;ve been waiting for it since September and it hasn&#8217;t happened. I recently discovered, however, that you can convert RightFields data to CustomFields, which is available for MT4. More on the conversion process later.</p>
<p><strong>How to get MT4 with CustomFields: </strong>MT 4 is open source, so we thought it wouldn&#8217;t matter that our paid support contract from MT 3.3 was almost up. <strong>Wrong. </strong>Turns out that the &#8220;CustomFields&#8221; plugin is only available with the &#8220;professional pack&#8221; (i.e. paid) version. Seems to me that an open source version of Custom Fields is definitely needed.</p>
<p>So I poked around the MT Web site and found out that the education license that we have can be upgraded for free to MT 4 as long as we have a current support contract. No word on how exactly to obtain that upgrade. So I searched around again to find the account info from when we bought MT last May. I logged onto that system and filed a support ticket. At first they told me I needed an upgraded support contract, but after I complained they added it to our account for free.</p>
<p><strong>Doing the RightFields conversion:</strong> We were storing our RightFields data in an SQL table. The only documentation I could find about migrating to CustomFields was a blog entry and accompanying script called <a href="http://cxliv.org/2007/12/17/convert_rightfields_data_to_customfields.php">RF2CF</a>. The plugin installed and showed up fine in MT 4, but it didn&#8217;t work. I think this is because the plugin was designed for RightFields that was using PluginData instead of an SQL table.</p>
<p><strong>The hack: </strong>I took out most of the code from RF2CF and wrote code to manually connect to the database. I&#8217;ve asked Chad Everett, who wrote RF2CF, for permission to post my changes. (<strong>UPDATE: </strong>I got permission. <a href="http://www.ryanpfister.com/blog/2008/05/mt4-right-fields-to-custom-fields-conversion-with-sql/">Check out the code</a>.) One problem I had was that custom fields apparently wants each blog to have its own set of fields, so you can&#8217;t reuse extra fields from one blog to the next.</p>
<p><strong>The results:</strong> While build times are much faster, MT itself is running a bit slower. Loading pages like the &#8220;New Entry&#8221; page now takes longer than it used to. Not sure why this is; perhaps a Windows thing. I tried installing MT4 on a FreeBSD server and it&#8217;s speeding along just fine.</p>
<p>Leave a comment if you&#8217;ve had any similar issues or you have questions about what I did.</p>
<p><strong>Side note: </strong>PluginData is really annoying. If CustomFields used SQL data too, I could have written a simple script &#8212; or even used an Excel Spreadsheet &#8212; to do the conversion. No MT knowledge required. But since PluginData is stored in binary, I pretty much have to use MT&#8217;s code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryanpfister.com/2008/05/converting-right-fields-when-upgrading-mt-3-to-mt-4/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
