<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://www.chrisstreeter.com/wp-atom.php">
	<title type="text">chrisstreeter.com</title>
	<subtitle type="text">Chris Streeter's location on the Internet.</subtitle>

	<updated>2010-09-01T05:36:53Z</updated>

	<link rel="alternate" type="text/html" href="http://www.chrisstreeter.com" />
	<id>http://www.chrisstreeter.com/feed/atom</id>
	

	<generator uri="http://wordpress.org/" version="3.0.1">WordPress</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/chrisstreeter" /><feedburner:info uri="chrisstreeter" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
		<author>
			<name>Streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[Aperture Performance Problems]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/BpiC25OcAio/aperture-performance-problems" />
		<id>http://www.chrisstreeter.com/?p=503</id>
		<updated>2010-08-25T19:34:27Z</updated>
		<published>2010-08-25T19:32:25Z</published>
		<category scheme="http://www.chrisstreeter.com" term="aperture" /><category scheme="http://www.chrisstreeter.com" term="benchmarking" /><category scheme="http://www.chrisstreeter.com" term="photos" /><category scheme="http://www.chrisstreeter.com" term="photography" />		<summary type="html"><![CDATA[I&#8217;m a heavy user of Apple&#8217;s Aperture. I enjoy taking photos and then use Aperture to organize and do basic touch-ups for those photos. Earlier this year, Apple released version 3.0, which had numerous enhancements (my favorite is localized adjustments) and compelled me to upgrade.  Since that date, I&#8217;ve almost been extremely close to regretting [...]]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2010/08/503/aperture-performance-problems">&lt;p&gt;I&amp;#8217;m a heavy user of &lt;a href="http://www.apple.com/aperture/"&gt;Apple&amp;#8217;s Aperture&lt;/a&gt;. I enjoy taking photos and then use Aperture to organize and do basic touch-ups for those photos. Earlier this year, &lt;a href="http://www.dpreview.com/news/1002/10020905aperture3.asp"&gt;Apple released version 3.0&lt;/a&gt;, which had numerous enhancements (my favorite is localized adjustments) and compelled me to upgrade.  Since that date, I&amp;#8217;ve almost been extremely close to regretting my decision every time I opened the application. Version 3.0 added a bunch of new features, but something has been killing the performance on my brand new 15&amp;#8243; MacBook Pro. When I have the latest hardware with 4 gigs of RAM, I shouldn&amp;#8217;t have to wait 10+ seconds to enter full screen mode or to view the next photo. There was absolutely no reason for this other than the updates to Aperture.  The subsequent version updates (up to the recent 3.0.3 update) did nothing to alleviate my wait-times, they only squashed bugs I ran into.&lt;/p&gt;
&lt;p&gt;Lately, I&amp;#8217;ve been using Aperture more than ever because &lt;a href="http://www.chrisstreeter.com/photos/album/peru/"&gt;several&lt;/a&gt; &lt;a href="http://www.chrisstreeter.com/photos/album/bolivia/"&gt;recent&lt;/a&gt; &lt;a href="http://www.chrisstreeter.com/photos/album/chile/"&gt;trips&lt;/a&gt; I&amp;#8217;ve gone on have left me with a &lt;a href="http://www.chrisstreeter.com/photos/album/sierras-roadtrip/"&gt;ton of pictures&lt;/a&gt; to go organize. If it wasn&amp;#8217;t for the fact that I&amp;#8217;ve got 8+ years of photos and associated metadata, I would have jumped ship months ago.  I&amp;#8217;ve tried all of Aperture&amp;#8217;s First Aid options (accessed by holding Option-Command when opening the app): rebuilding permissions (this shouldn&amp;#8217;t cause performance issues, but hey, I was desperate), repairing the database and finally resorting the the rebuild database option. I felt like the speed increased slightly after repairing the database and was optimistic that my problems were solved. Yet, I still had issues. I&amp;#8217;ve been convinced that this has been a disk related as my memory and CPU are never loaded very heavily when I sit and wait for Aperture to do &amp;#8220;stuff.&amp;#8221; I began to think I needed a 7200 RPM disk drive instead of my 5400 RPM drive just to use Aperture.&lt;/p&gt;
&lt;p&gt;&lt;span id="more-503"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Finally, I found &lt;a href="http://techpatio.com/2010/apple/aperture-3-performance-fix-slow-aperture-run-faster"&gt;an article&lt;/a&gt; that talked about removing the old com.apple.Aperture.plist file in ~/Library/Preferences to gain back some performance.  Today I decided to try that. But before I wiped the old .plist file, I went ahead and made a backup of it.  All I can say is, whoa. That actually worked. Aperture is actually &lt;em&gt;snappy&lt;/em&gt; again. It&amp;#8217;s ridiculous. I don&amp;#8217;t even remember when I last experienced a responsive Aperture interface. Since I had a before and after .plist file, I did some diffing to figure out what was going wrong. While viewing the diff, I removed some of the options that seemed like they had no way of contributing to the slowness (things like default window locations, background colors, etc). That left me with the following diff:&lt;/p&gt;
&lt;p&gt;&lt;code&gt; 1a2,3&lt;br /&gt;
&amp;gt; 	"" = "";&lt;br /&gt;
&amp;gt; 	"61-2" = "2008-08-03T19:05:02Z";&lt;br /&gt;
2a5,6&lt;br /&gt;
&amp;gt; 	"addCurrentSelectedVersions" = YES;&lt;br /&gt;
&amp;gt; 	"allProjectsSortMenuTag" = 1;&lt;br /&gt;
18a23,27&lt;br /&gt;
&amp;gt; 	"DotMacConfigurationDictionary" = {&lt;br /&gt;
&amp;gt; 	};&lt;br /&gt;
&amp;gt; 	"DotMacConfigurationLastUpdate" = "2010-08-17T15:44:23Z";&lt;br /&gt;
&amp;gt; 	"DotMacConfigurationLastURL" = "https://configuration.apple.com/configurations/internetservices/iapps/publishConfiguration08.plist";&lt;br /&gt;
&amp;gt; 	"ExportAttachmentsWithMastersKey" = YES;&lt;br /&gt;
19a29,32&lt;br /&gt;
&amp;gt; 	FacesEnabled = NO;&lt;br /&gt;
&amp;gt; 	fastBrowse = NO;&lt;br /&gt;
&amp;gt; 	FileHandling = 1;&lt;br /&gt;
&amp;gt; 	filesystemBatchSize = 10;&lt;br /&gt;
23c36&lt;br /&gt;
&amp;lt; 		projectSortingMode = 0;&lt;br /&gt;
---&lt;br /&gt;
&amp;gt; 		projectSortingMode = 1;&lt;br /&gt;
25a39&lt;br /&gt;
&amp;gt; 	fullscreenAvoid = NO;&lt;br /&gt;
27c41,42&lt;br /&gt;
&amp;lt; 	"fullscreenWhichWindow" = NO;&lt;br /&gt;
---&lt;br /&gt;
&amp;gt; 	"fullscreenWhichWindow" = YES;&lt;br /&gt;
&amp;gt; 	fullSizeJPEGQuality = 0.5;&lt;br /&gt;
35a51&lt;br /&gt;
&amp;gt; 	icaBatchSize = 5;&lt;br /&gt;
43a60&lt;br /&gt;
&amp;gt; 	"limitPreviewSubsample" = 1920;&lt;br /&gt;
46a64,67&lt;br /&gt;
&amp;gt; 	mainSecondaryMode = 3;&lt;br /&gt;
&amp;gt; 	"MetadataPresetSelectedPreset" = 0;&lt;br /&gt;
&amp;gt; 	"moveCurrentSelectedVersions" = NO;&lt;br /&gt;
&amp;gt; 	MUPhotoSize = 100;&lt;br /&gt;
48a70&lt;br /&gt;
&amp;gt; 	primaryOnly = NO;&lt;br /&gt;
55a78,79&lt;br /&gt;
&amp;gt; 	"showProjectVersionCount" = YES;&lt;br /&gt;
&amp;gt; 	"showUnplacedImagesOnly" = NO;&lt;br /&gt;
56a81,83&lt;br /&gt;
&amp;gt; 	subsequentLaunch = YES;&lt;br /&gt;
&amp;gt; 	UseEmbeddedJPEG = NO;&lt;br /&gt;
&amp;gt; 	ViewerPropertySet = 2;&lt;br /&gt;
64a92&lt;br /&gt;
&amp;gt; 	"WebKitEnableFullDocumentTeardown" = YES;&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Immediately, there were two things that stood out to me: &lt;strong&gt;fastBrowse = NO&lt;/strong&gt; and &lt;strong&gt;filesystemBatchSize = 10&lt;/strong&gt; . Seeing as I felt there was a disk issues, I decided to test out the issue. I opened the current .plist file and added in filesystemBatchSize = 10 and opened Aperture. It didn&amp;#8217;t seem quite as slow as before, but it was noticeably slower for me. Now, I have no idea what the default filesystemBatchSize should be, but I do know that for me, removing it from the .plist file sped up Aperture considerably.  I didn&amp;#8217;t do any objective measurements (ie. stopwatch tests), but so far, I&amp;#8217;m not sitting waiting around hating Aperture for stealing my time.  What is the take away here? If you are having issues with Aperture&amp;#8217;s performance, make a backup of your Aperture preferences .plist and delete the one in ~/Library/Preferences to try and get some improvement.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/BpiC25OcAio" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2010/08/503/aperture-performance-problems#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2010/08/503/aperture-performance-problems/feed/atom" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2010/08/503/aperture-performance-problems</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[23rd Annual Tri For Fun #2]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/HOW1fTO2qEg/23rd-annual-tri-for-fun-2" />
		<id>http://www.chrisstreeter.com/?p=497</id>
		<updated>2010-08-20T21:57:34Z</updated>
		<published>2010-08-20T21:57:34Z</published>
		<category scheme="http://www.chrisstreeter.com" term="Running" /><category scheme="http://www.chrisstreeter.com" term="Sports" /><category scheme="http://www.chrisstreeter.com" term="Triathlon" />		<summary type="html"><![CDATA[This post is pretty late, but I figured it is still good to post for record keeping. Back in July, I did the Tri For Fun just to get back in the grove. This was my first Tri since Wildflower, yet I had barely preped for the race at all. I think I rode my [...]]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2010/08/497/23rd-annual-tri-for-fun-2">&lt;p&gt;This post is pretty late, but I figured it is still good to post for record keeping.  Back in July, I did the Tri For Fun just to get back in the grove. This was my first Tri since &lt;a href="http://www.chrisstreeter.com/archive/2010/07/492/wildflower-2010"&gt;Wildflower&lt;/a&gt;, yet I had barely preped for the race at all. I think I rode my bike twice in the week before the race. Pretty much a poor showing on my part.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m pretty familiar with the course, having done it a &lt;a href="http://www.chrisstreeter.com/archive/2008/08/237/21st-annual-tri-for-fun-3"&gt;number&lt;/a&gt; &lt;a href="http://www.chrisstreeter.com/archive/2009/06/348/22nd-annual-tri-for-fun-1"&gt;of&lt;/a&gt; &lt;a href="http://www.chrisstreeter.com/archive/2009/09/428/22nd-annual-tri-for-fun-3"&gt;times&lt;/a&gt;.&lt;/p&gt;
&lt;table style="border: 1px solid black; margin-left: 2em;" border="0" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr style="font-weight:bold; text-align: center;"&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Split&lt;/td&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Distance (mi)&lt;/td&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Time (h:mm:ss.ms)&lt;/td&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Pace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc; border-top-color: #000;"&gt;Swim&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc; border-top-color: #000;"&gt;0.227&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc; border-top-color: #000;"&gt;7:15&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc; border-top-color: #000;"&gt;29:10 min/mi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Swim to Bike Transition&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;1:39&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Bike&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;11&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;31:04&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;21.24mph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Bike to Run Transition&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;1:17&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Run&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;3.1&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;25:04&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;8.16 min/mi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border-top: 1px solid #000;"&gt;Overall&lt;/td&gt;
&lt;td style="text-align: center; border-top: 1px solid #000;"&gt;&lt;/td&gt;
&lt;td style="text-align: center; border-top: 1px solid #000;"&gt;1:06:20&lt;/td&gt;
&lt;td style="text-align: center; border-top: 1px solid #000;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Not the blowout improvement I was hoping for (I only improved by 8 seconds off last year&amp;#8217;s time), but improvement none-the-less. I think I stayed up way too late the night before and was super tired during the run. I just sort of lost energy and couldn&amp;#8217;t finish strong in the run, which shows as it was one of my slowest run performances yet. Serves me right for sorting pictures late into the night.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/HOW1fTO2qEg" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2010/08/497/23rd-annual-tri-for-fun-2#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2010/08/497/23rd-annual-tri-for-fun-2/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2010/08/497/23rd-annual-tri-for-fun-2</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[Wildflower 2010]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/1MUnmloUSSw/wildflower-2010" />
		<id>http://www.chrisstreeter.com/?p=492</id>
		<updated>2010-09-01T05:36:53Z</updated>
		<published>2010-07-24T19:00:16Z</published>
		<category scheme="http://www.chrisstreeter.com" term="Running" /><category scheme="http://www.chrisstreeter.com" term="Sports" /><category scheme="http://www.chrisstreeter.com" term="Triathlon" />		<summary type="html"><![CDATA[Despite this being a bit late, I still wanted to recap my 2010 Wildflower experience. This year, I elected to begin my training with some high altitude training in South America. So instead of doing a bunch of preparatory triathlons leading up to Wildflower, I went on a month-long trip to Venezuela, Peru, Bolivia and [...]]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2010/07/492/wildflower-2010">&lt;p&gt;Despite this being a bit late, I still wanted to recap my 2010 Wildflower experience.&lt;/p&gt;
&lt;p&gt;This year, I elected to begin my training with some &lt;a href="http://www.flickr.com/photos/chrisstreeter/4473299288/"&gt;high altitude training&lt;/a&gt; in South America. So instead of doing a bunch of preparatory triathlons leading up to Wildflower, I went on a month-long trip to Venezuela, Peru, Bolivia and Chile.  After I got back, I had 3 weeks to get ready. I pretty much started immediately by riding my bike to work every day. The 10 mile (each way) commute definitely allowed me to get comfortable on the bike and to keep a record (via &lt;a href="http://mytracks.appspot.com/"&gt;My Tracks&lt;/a&gt;) which allowed me to strive for specific time and speed marks.&lt;/p&gt;
&lt;p&gt;I did a little bit of running here and there, and a little bit of swimming. But for the most part, I went to CrossFit and rode my bike. Finally, and I think the most important part of the training was the motivation to try to beat my sister and friend Margo.  However, with so little prep time and after a 6 mile practice run with Amy where I almost cramped up, I relegated myself to third place out of them.&lt;/p&gt;
&lt;p&gt;As with &lt;a href="http://www.chrisstreeter.com/archive/2009/05/317/wildflower"&gt;last year&lt;/a&gt;, we went down Saturday morning and got to watch the long course athletes finishing on the bike. There were four of us that went down: Margo, Amy, Mike and myself. Margo&amp;#8217;s roommates came down later in the day. Once cars were allowed to enter the campground again, we drove down, found a spot to camp and proceeded to check out the starting line and the festival area.  The evening was uneventful with a great dinner and sitting around the BBQ grill for some warmth before heading to sleep.&lt;/p&gt;
&lt;p&gt;I woke up early, ate, and then Amy, Margo and I went down to the transition area. Luckily, my shorts this year didn&amp;#8217;t have a giant hole in them. Which allowed me more time and less stress.  My goals for the day were to finish the swim in 40 minutes, the bike in 2 hours and the run in 1 1/2 hours. I figured that since I hadn&amp;#8217;t done very much swimming, I&amp;#8217;d be slow, my bike would probably be faster than 2 hours because of all the practice I&amp;#8217;d had, but that I wouldn&amp;#8217;t be able to run the whole time and have to walk a majority of the race.  I was hoping for under 4 hours. Because the guys go first in the race, my start was a good hour before Amy and Margo started. So I was just dreading the possibility that I&amp;#8217;d see them on the run.&lt;/p&gt;
&lt;p&gt;With wetsuit and swim gear on, I was ready for the race to start. The swim ended up being a lot more choppy than any other lake swim I&amp;#8217;d done. It took me back to my days doing the Santa Barbara and Carpinteria Triathlons. The best reason I could figure for the extra chop during the swim was the huge increase in number of boats and ferries in the lake this year.  The swim seemed to last forever, and a lot more people passed me than I remember in the previous races. However, I pressed on at a pretty steady pace. Getting to the finish was one of the best feelings ever. I checked my watch and saw a time of 30 minutes 10 seconds. That totally surprised me and pumped me up a bit.&lt;/p&gt;
&lt;p&gt;My T1 split was probably pretty slow, but I got on the bike and started up the hill, at about the same pace as everyone around me.  Once at the top, I was even able to continue at a similar pace to people around me. I just kept trying to stay near the couple of guys in front of me, passing or gaining ground on the flats / downhills and losing ground on the uphill segments.  Because of the massive hydrating I&amp;#8217;d done on Saturday and that morning, I had to stop and pee at the second aid station.  Once I got to the turn around point, I realized that my bike was actually going pretty well. I was somewhere in the mid 40 minutes for the bike. On the ride back, I kept looking for Amy and Margo, expecting to see them flying along, but never saw them. The bike ended up finishing in 1 hour 33 minutes, which meant, that if I had a 50 &amp;#8211; 55 minute run, I&amp;#8217;d finish in under 3 hours. And I still felt good.&lt;/p&gt;
&lt;p&gt;The run started hard and slow, but I got into a rhythm. The possibility of finishing sub 3 hour was become a greater and greater motivation for me, forcing me to push on. I felt like I had to walk a lot more than last year and it seemed hotter on the run. Finally, at the top of all the hills, I checked my watch. 2:55 with just a run down Lynch Hill and 1km to go. I started to sprint down Lynch Hill as fast as I could, passing a bunch of people, watching the time get ever closer to 3 hours.  My mistake was to not leave anything for the flat section right before the finish, which is so much longer than I remember.  All I knew was that I hadn&amp;#8217;t broken 3 hours. I finished in 3 hours 1 minute and 5 seconds and then almost puked all over the volunteers.&lt;/p&gt;
&lt;table style="border: 1px solid black; margin-left: 2em;" border="0" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr style="font-weight: bold; text-align: center;"&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Split&lt;/td&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Distance&lt;/td&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Time (min)&lt;/td&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Pace&lt;/td&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Rank (overall)&lt;/td&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Previous Wildflower&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc; border-top-color: #000;"&gt;Swim&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc; border-top-color: #000;"&gt;1.5 km&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc; border-top-color: #000;"&gt;30:10&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc; border-top-color: #000;"&gt;32:11 min/mi&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc; border-top-color: #000;"&gt;808&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc; border-top-color: #000;"&gt;29:52&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;T1&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;3:47&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;4:33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Bike&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;40km&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;1:33:48&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;15.8 mph&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;1010&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;1:43:48&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;T2&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;2:08&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;2:59&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Run&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;10km&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;51:12&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;8:14 min/mi&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;557&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;53:00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Overall&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;3:01:05&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;697&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;3:14:12&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="text-align: center;"&gt;[&lt;a href="http://raceresults.eternaltiming.com/index.cfm/20100501_AVIA_Wildflower_Triathlons_and_Festival.htm?Fuseaction=Results&amp;amp;Bib=5630"&gt;Official Results Here&lt;/a&gt; - Bib 5630]&lt;/p&gt;
&lt;p&gt;Obviously, I did better than my goal. Though I figured that Amy and Margo were killing the course. I couldn&amp;#8217;t look up their splits while they were racing, and had no idea where they were. So I had to just sit and wait. I first saw Margo, who, depending on her start time, finished in just over 3 hours (in front of me) or 3 hours 5 minutes. I turned out the latter was her start time. &lt;a href="http://raceresults.eternaltiming.com/index.cfm/20100501_AVIA_Wildflower_Triathlons_and_Festival.htm?Fuseaction=Results&amp;amp;Bib=6796"&gt;Margo finished in 3 hours 5 minutes 13 seconds&lt;/a&gt;. Meaning that not only had I destroyed my goal, I had also beat Amy and Margo, with tons less training. &lt;a href="http://raceresults.eternaltiming.com/index.cfm/20100501_AVIA_Wildflower_Triathlons_and_Festival.htm?Fuseaction=Results&amp;amp;Bib=6826"&gt;Amy finished in 3 hours 22 minutes 59 seconds&lt;/a&gt;. They both did awesome in their first Olympic races after &lt;a href="http://www.chrisstreeter.com/archive/2009/09/428/22nd-annual-tri-for-fun-3"&gt;I introduced them to the sport last August&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The free post race massage was so worth it and was pure amazing. However, my biggest regret is not getting a massage the following day though. Every Olympic I do from now on, a post-race massage is going to be included. As long as I&amp;#8217;m not doing some other international trip just before next year&amp;#8217;s race, I really want to attempt the long course.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/1MUnmloUSSw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2010/07/492/wildflower-2010#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2010/07/492/wildflower-2010/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2010/07/492/wildflower-2010</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[DD-WRT and an Airport Express]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/CRScKrE5uMY/dd-wrt-and-an-airport-express" />
		<id>http://www.chrisstreeter.com/?p=487</id>
		<updated>2010-06-22T19:18:33Z</updated>
		<published>2010-06-22T19:18:33Z</published>
		<category scheme="http://www.chrisstreeter.com" term="Technology" /><category scheme="http://www.chrisstreeter.com" term="airport express" /><category scheme="http://www.chrisstreeter.com" term="ddwrt" /><category scheme="http://www.chrisstreeter.com" term="linksys" /><category scheme="http://www.chrisstreeter.com" term="wifi" /><category scheme="http://www.chrisstreeter.com" term="wireless" /><category scheme="http://www.chrisstreeter.com" term="wpa" /><category scheme="http://www.chrisstreeter.com" term="wpa2" /><category scheme="http://www.chrisstreeter.com" term="wrt54gl" />		<summary type="html"><![CDATA[I&#8217;ve got a several year old Linksys WRT54GL wireless router that I use for my home network. Ever since I&#8217;ve had the router, I&#8217;ve been running DD-WRT on it, which is great. The new firmware is super stable, has a great number of additional features I use constantly (DDNS, static DNS leases), but I have [...]]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2010/06/487/dd-wrt-and-an-airport-express">&lt;p&gt;I&amp;#8217;ve got a several year old Linksys WRT54GL wireless router that I use for my home network. Ever since I&amp;#8217;ve had the router, I&amp;#8217;ve been running &lt;a href="http://www.dd-wrt.com/"&gt;DD-WRT&lt;/a&gt; on it, which is great. The new firmware is super stable, has a great number of additional features I use constantly (DDNS, static DNS leases), but I have had a lot of trouble recently trying to get my Airport Express to connect to the network. For security, I use WPA2 Personal encryption on my network. Now, I&amp;#8217;m not tyring to set up a WDS network, which, &lt;a href="http://www.dd-wrt.com/wiki/index.php/WDS#Apple_Airport_Express"&gt;from the documentation&lt;/a&gt;, is a mixed bag to get working. So, after lots of fiddling, and lots of resetting of the Airport Express, I finally got it to work. Here is what I did.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m running DD-WRT v24-sp1 on my Linksys WRT54GL v1.1 with an Airport Express running the latest 6.3 firmware. On the WRT54GL, I set the wireless security mode to WPA2 Personal and the WPA Algorithm set to TKIP. On the Airport Express, I told it to join my existing network with wireless security of WPA/WPA2 Personal. Doing all this, and I can now stream music to my stereo.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m sure someone else will find this information useful.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/CRScKrE5uMY" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2010/06/487/dd-wrt-and-an-airport-express#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2010/06/487/dd-wrt-and-an-airport-express/feed/atom" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2010/06/487/dd-wrt-and-an-airport-express</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[Photos From Venezuela]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/Glecl8660nA/photos-from-venezuela" />
		<id>http://www.chrisstreeter.com/?p=481</id>
		<updated>2010-06-02T06:11:52Z</updated>
		<published>2010-06-02T06:10:16Z</published>
		<category scheme="http://www.chrisstreeter.com" term="photos" /><category scheme="http://www.chrisstreeter.com" term="travel" /><category scheme="http://www.chrisstreeter.com" term="caracas" /><category scheme="http://www.chrisstreeter.com" term="chichirivichi" /><category scheme="http://www.chrisstreeter.com" term="flickr" /><category scheme="http://www.chrisstreeter.com" term="photography" /><category scheme="http://www.chrisstreeter.com" term="venezuela" />		<summary type="html"><![CDATA[I have finally gotten around to posting more pictures from Venezuela. I posted them to Flickr in my Venezuelan set. There is also a slideshow on Flickr and the photos are also on my site. Enjoy!]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2010/06/481/photos-from-venezuela">&lt;div class='falbum-post-box' style='float: left; margin: 0px 5px -5px 0px'&gt;	&lt;div class='falbum-thumbnail-ds'&gt;		&lt;a href='/photos/album/venezuela' title='Array'&gt;			&lt;img src='http://farm2.static.flickr.com/1289/4662019535_69c0757378_s.jpg' alt='' /&gt;		&lt;/a&gt;	&lt;/div&gt;&lt;/div&gt; I have finally gotten around to posting more pictures from Venezuela. I posted them to &lt;a href="http://www.flickr.com/photos/chrisstreeter/"&gt;Flickr&lt;/a&gt; in my &lt;a href="http://www.flickr.com/photos/chrisstreeter/sets/72157623743906924/"&gt;Venezuelan set&lt;/a&gt;. There is also a &lt;a href="http://www.flickr.com/photos/chrisstreeter/sets/72157623743906924/show/"&gt;slideshow&lt;/a&gt; on Flickr and the photos are also on &lt;a href="http://www.chrisstreeter.com/photos/album/venezuela/"&gt;my site&lt;/a&gt;.
&lt;p&gt;Enjoy!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/Glecl8660nA" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2010/06/481/photos-from-venezuela#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2010/06/481/photos-from-venezuela/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2010/06/481/photos-from-venezuela</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[Chavez Country]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/PctZ3QYvohU/chavez-country" />
		<id>http://www.chrisstreeter.com/?p=465</id>
		<updated>2010-04-01T00:25:02Z</updated>
		<published>2010-04-01T00:25:02Z</published>
		<category scheme="http://www.chrisstreeter.com" term="Personal" /><category scheme="http://www.chrisstreeter.com" term="photos" /><category scheme="http://www.chrisstreeter.com" term="travel" /><category scheme="http://www.chrisstreeter.com" term="caracas" /><category scheme="http://www.chrisstreeter.com" term="chichirivichi" /><category scheme="http://www.chrisstreeter.com" term="venezuela" />		<summary type="html"><![CDATA[I am now halfway through my tour of part of South America. The trip started off in Venezuela (more pictures from Venezuela here) where I was immediately introduced to my second family, the Hurtados. About 90 minutes after landing in Caracas, I had seen a dead body, saw Ines for the first time in almost 7 years, [...]]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2010/03/465/chavez-country">&lt;p&gt;I am now halfway through my tour of part of South America.&lt;/p&gt;
&lt;div class='falbum-post-box' style=''&gt;	&lt;div class='falbum-thumbnail-ds'&gt;		&lt;a href='/photos/album/venezuela/photo/4480403210' title='Array'&gt;			&lt;img src='http://farm5.static.flickr.com/4009/4480403210_bc12b0b390_t.jpg' alt='' /&gt;		&lt;/a&gt;	&lt;/div&gt;&lt;/div&gt; The trip started off in Venezuela (&lt;a href="http://www.chrisstreeter.com/photos/album/venezuela/"&gt;more pictures from Venezuela here&lt;/a&gt;) where I was immediately introduced to my second family, the Hurtados. About 90 minutes after landing in Caracas, I had seen a dead body, saw Ines for the first time in almost 7 years, met her father, mother and other sister, about 30 (at least!) other members of her extended family, and though I tried really hard to remember their names, I forgot most of them. And then I got my first glass of wine in South America which was soon replaced with a cuba libre. Shortly after, some of Ines&amp;#8217; friends taught me how to call Chavez a son of a bitch in Spanish, which was a new Spanish expression for me.
&lt;p&gt;&lt;/p&gt;
&lt;div class='falbum-post-box' style='float: left; margin: 0px 5px -5px 0px'&gt;	&lt;div class='falbum-thumbnail-ds'&gt;		&lt;a href='/photos/album/venezuela/photo/4480408644' title='Array'&gt;			&lt;img src='http://farm5.static.flickr.com/4059/4480408644_3bea30dfc2_t.jpg' alt='' /&gt;		&lt;/a&gt;	&lt;/div&gt;&lt;/div&gt; I then proceeded to spend the next 3 days enjoying solitude and sunshine in the small beach town of Chichirivichi, reading, appropriately, 100 Years of Solitude. I also spent time recovering from the bad sunburns I received after my first contact with the sun in quite a while. I also got to see a great big jelly fish, which was awesome, and yet scary.
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;A long drive later and I was back in Caracas combing the city for Arepas (which are really good), wedding cheese, wedding pastries and views of the city. Thursday and Friday with my mom, sister and the Hurtados went fast, but seemed to cover much more time than just the 45 hours we were all together those days.&lt;/p&gt;
&lt;div class='falbum-post-box' style='float: right; margin: 0px -5px -5px 5px'&gt;	&lt;div class='falbum-thumbnail-ds'&gt;		&lt;a href='/photos/album/venezuela/photo/4480411208' title='Array'&gt;			&lt;img src='http://farm5.static.flickr.com/4063/4480411208_3b75de2687_t.jpg' alt='' /&gt;		&lt;/a&gt;	&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Some things I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Weddings in Spanish aren&amp;#8217;t as easy to understand as I thought initially.&lt;/li&gt;
&lt;li&gt;&amp;#8220;Merengue is with couples and Reggaeton is sexy&amp;#8221;&lt;/li&gt;
&lt;li&gt;My Spanish skills get better with alcohol and the English skills of others similarly increase with alcohol.&lt;/li&gt;
&lt;li&gt;Arepas are delicious any time of the day, for breakfast, for lunch, after a great wedding reception, or while walking around like a zombie in an airport at 5 in the morning.&lt;/li&gt;
&lt;li&gt;Apparently I can dance Salsa (or the Venezuelans were being nice and just wanted me off the dance floor)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In all, a great first part of my trip. New food, new people, new places and hanging out with my first and second family. Estoy chevere (or, in Peru, cheverenge).&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/PctZ3QYvohU" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2010/03/465/chavez-country#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2010/03/465/chavez-country/feed/atom" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2010/03/465/chavez-country</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[GCalendar Reminders]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/9Do5WAyFfSE/gcalendar-reminders" />
		<id>http://www.chrisstreeter.com/?p=451</id>
		<updated>2010-01-17T07:03:38Z</updated>
		<published>2010-01-17T19:30:11Z</published>
		<category scheme="http://www.chrisstreeter.com" term="Site" /><category scheme="http://www.chrisstreeter.com" term="Technology" /><category scheme="http://www.chrisstreeter.com" term="google app engine" /><category scheme="http://www.chrisstreeter.com" term="software" /><category scheme="http://www.chrisstreeter.com" term="birthdays" /><category scheme="http://www.chrisstreeter.com" term="calendar" /><category scheme="http://www.chrisstreeter.com" term="google calendar" />		<summary type="html"><![CDATA[Google recently added the ability to create a birthday calendar. However, Google didn&#8217;t give one the ability to send reminders for the events on that calendar. This is the same thing that Apple has done for years with their Address Book and iCal integration. And I hate missing someone&#8217;s birthday when I don&#8217;t happen to [...]]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2010/01/451/gcalendar-reminders">&lt;p&gt;Google recently added the ability to create a &lt;a href="http://googlesystem.blogspot.com/2009/07/birthday-calendar-for-google-contacts.html" target="_blank"&gt;birthday calendar&lt;/a&gt;. However, Google didn&amp;#8217;t give one the ability to send reminders for the events on that calendar. This is the same thing that Apple has done for years with their &lt;a href="http://discussions.apple.com/thread.jspa?threadID=1613442" target="_blank"&gt;Address Book and iCal&lt;/a&gt; integration. And I hate missing someone&amp;#8217;s birthday when I don&amp;#8217;t happen to look at my calendar that day.&lt;/p&gt;
&lt;p&gt;I saw this as an opportunity for improvement. I also saw this an opportunity to learn about &lt;a href="https://appengine.google.com/"&gt;Google App Engine&lt;/a&gt;. So I wrote a python application that lets you schedule email reminders for the Contacts Birthday Calendar. In addition, you can select a specific hour in a specific time-zone to send the reminders at as well. The application use&amp;#8217;s the Google App Engine user authentication and the Google Data &lt;a href="http://code.google.com/apis/accounts/docs/AuthSub.html" target="_blank"&gt;AuthSub&lt;/a&gt; permission request API to get upcoming events for display and email reminders.&lt;/p&gt;
&lt;p&gt;This gave me some good experience with Google App Engine&amp;#8217;s scheduled tasks and Task Queues, as well as a chance to hone up on my Python. Without further ado, I present &lt;a title="GCalendar Reminders" href="http://gcalendar-reminders.appspot.com/" target="_blank"&gt;GCalendar Reminders&lt;/a&gt;. Feel free to use it to send yourself emails using the security of Google App Engine.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/9Do5WAyFfSE" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2010/01/451/gcalendar-reminders#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2010/01/451/gcalendar-reminders/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2010/01/451/gcalendar-reminders</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[Benchmarking Redis and PRedis]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/34yhDIwR9WU/benchmarking-redis-and-predis" />
		<id>http://www.chrisstreeter.com/?p=434</id>
		<updated>2010-01-17T07:47:58Z</updated>
		<published>2010-01-16T06:51:37Z</published>
		<category scheme="http://www.chrisstreeter.com" term="Redis" /><category scheme="http://www.chrisstreeter.com" term="Technology" /><category scheme="http://www.chrisstreeter.com" term="benchmarking" /><category scheme="http://www.chrisstreeter.com" term="linux" /><category scheme="http://www.chrisstreeter.com" term="software" /><category scheme="http://www.chrisstreeter.com" term="predis" />		<summary type="html"><![CDATA[At work, I recently was tasked with looking into some NoSQL solutions for upcoming projects. For various reasons, I focused on the open source Redis project. Redis looks to be adding new features quickly and seemed to be a great potential solution. I then started looking into PHP clients as our current environment is mostly [...]]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2010/01/434/benchmarking-redis-and-predis">&lt;p&gt;At work, I recently was tasked with looking into some &lt;a href="http://en.wikipedia.org/wiki/NoSQL" target="_blank"&gt;NoSQL&lt;/a&gt; solutions for upcoming projects. For various reasons, I focused on the &lt;a title="Redis" href="http://code.google.com/p/redis/" target="_blank"&gt;open source Redis&lt;/a&gt; project. Redis looks to be adding new features quickly and seemed to be a great potential solution.&lt;/p&gt;
&lt;p&gt;I then started looking into PHP clients as our current environment is mostly PHP. We require that the client support &lt;a href="http://en.wikipedia.org/wiki/Consistent_hashing" target="_blank"&gt;consistent hashing&lt;/a&gt;, and, from a quick search, a couple turned up. &lt;a title="PRedis" href="http://github.com/nrk/predis/" target="_blank"&gt;PRedis&lt;/a&gt; seemed to offer the most potential, and after some quick tests, also seemed to offer the greatest performance. So I set up a more elaborate benchmark of the the client and server package.&lt;/p&gt;
&lt;p&gt;My test setup involved using 5 servers with between 2 and 5 enabled at a time on the clients (ie. I disabled up to 3 of the servers in the client configurations). For performance, I configured the servers to never write to disk, though periodically syncing to disk should not cause too much of a performance loss. In fact performance was most greatly affected by forcing an fsync after every write. I then had 9 other client boxes running the same code base, with all 9 enabled for each test.&lt;/p&gt;
&lt;p&gt;Each client would start a master PHP process that forked 20, 30 or 40 child processes to simulate greater and greater load. Each forked PHP process then did 10,000 SETs on random keys with 4 byte payloads (early tests showed that payload size didn&amp;#8217;t drastically affect the results). I was using the &lt;a href="http://github.com/nrk/predis/tree/php5.2_backport" target="_blank"&gt;PHP 4.2.6 branch of the PRedis client&lt;/a&gt;, and had optimized it a bit so that it did fewer counts of the consistent hash array. I made the optimizations based on some results after profiling the code. I then had the master PHP process on each box repeat the test 5 times to help to average the test results.&lt;/p&gt;
&lt;p&gt;I used dsh to start the test simultaneously on all the clients, timing how long it took the dsh process to start and finish executing. This was the amount of time it took to execute (5 repeats) * (9 client boxes) * (20, 30 or 40 client processes / box) * (10,000 requests) = X total requests. I then graphed the results below.&lt;/p&gt;
&lt;div id="attachment_441" class="wp-caption aligncenter" style="width: 483px"&gt;&lt;a href="http://www.chrisstreeter.com/wp-content/uploads/2010/01/redis.png"&gt;&lt;img class="size-full wp-image-441 " title="Graphing Requests / Second With Redis and PRedis" src="http://www.chrisstreeter.com/wp-content/uploads/2010/01/redis.png" alt="Graphing Requests / Second With Redis and PRedis" width="473" height="267" /&gt;&lt;/a&gt;&lt;p class="wp-caption-text"&gt;Graphing Requests / Second With Redis and PRedis&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;This ended up showing that with 9 clients, going up to 4 servers was the point of diminishing returns. Adding the fifth server (with that client box count) did not increase throughput, but rather, the throughput went down. The reason for this is most likely a combination of network interface contention on each client and higher overhead from consistent hashing. So with 9 clients, I found that the sweet spot, with my setup, was 4 servers. By adding more clients, along with more servers, the throughput would increase, instead of the decrease I was starting to see.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/34yhDIwR9WU" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2010/01/434/benchmarking-redis-and-predis#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2010/01/434/benchmarking-redis-and-predis/feed/atom" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2010/01/434/benchmarking-redis-and-predis</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[22nd Annual Tri For Fun #3]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/pyclQN9qB7M/22nd-annual-tri-for-fun-3" />
		<id>http://www.chrisstreeter.com/?p=428</id>
		<updated>2010-08-20T21:48:17Z</updated>
		<published>2009-09-19T19:33:56Z</published>
		<category scheme="http://www.chrisstreeter.com" term="Running" /><category scheme="http://www.chrisstreeter.com" term="Sports" /><category scheme="http://www.chrisstreeter.com" term="Triathlon" />		<summary type="html"><![CDATA[This post is pretty late, but I figured it is still good to post for record keeping. In June, I did the Tri For Fun #1 and it was the first triathlon for a couple of my friends. Well, I must have some great powers of persuasion, because I convinced two more people to start [...]]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2009/09/428/22nd-annual-tri-for-fun-3">&lt;p&gt;This post is pretty late, but I figured it is still good to post for record keeping.  In June, I did the &lt;a href="http://www.chrisstreeter.com/archive/2009/06/348/22nd-annual-tri-for-fun-1"&gt;Tri For Fun #1&lt;/a&gt; and it was the first triathlon for a couple of my friends. Well, I must have some great powers of persuasion, because I convinced two more people to start and complete their first tri. After at least two years, my sister &lt;a href="http://www.flickr.com/photos/chrisstreeter/tags/amystreeter/"&gt;Amy Streeter&lt;/a&gt; decided to do the great introductory course. In addition, Amy&amp;#8217;s friend &lt;a href="http://www.flickr.com/photos/chrisstreeter/tags/margofahey/"&gt;Margo Fahey&lt;/a&gt; also signed up for her first tri.&lt;/p&gt;
&lt;p&gt;Starting the race, my goal was to finish in an hour or less. Looking at the &lt;a href="http://www.chrisstreeter.com/archive/2009/06/348/22nd-annual-tri-for-fun-1"&gt;last race&lt;/a&gt;, I thought that a 9 minute improvement was reasonable, despite the fact I spent a significant portion of the month between races in the Caribbean. I&amp;#8217;d say my biggest weakness was still my cycling performance, though I was able to improve.&lt;/p&gt;
&lt;table style="border: 1px solid black; margin-left: 2em;" border="0" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr style="font-weight:bold; text-align: center;"&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Split&lt;/td&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Distance (mi)&lt;/td&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Time (h:mm:ss.ms)&lt;/td&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Pace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc; border-top-color: #000;"&gt;Swim&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc; border-top-color: #000;"&gt;0.227&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc; border-top-color: #000;"&gt;6:35&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc; border-top-color: #000;"&gt;29:00 min/mi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Swim to Bike Transition&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;1:59&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Bike&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;11&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;30:33&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;21.6mph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Bike to Run Transition&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;1:35&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border: 1px solid #ccc;"&gt;Run&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;3.1&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;22:47&lt;/td&gt;
&lt;td style="text-align: center; border: 1px solid #ccc;"&gt;7:21 min/mi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="padding: 0 5px; border-top: 1px solid #000;"&gt;Overall&lt;/td&gt;
&lt;td style="text-align: center; border-top: 1px solid #000;"&gt;&lt;/td&gt;
&lt;td style="text-align: center; border-top: 1px solid #000;"&gt;1:06:28&lt;/td&gt;
&lt;td style="text-align: center; border-top: 1px solid #000;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Not the blowout improvement I was hoping for, but improvement none-the-less. Plus I beat Amy, Margot and Joe :) I am definitely looking forward to the next tri I&amp;#8217;m doing.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/pyclQN9qB7M" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2009/09/428/22nd-annual-tri-for-fun-3#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2009/09/428/22nd-annual-tri-for-fun-3/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2009/09/428/22nd-annual-tri-for-fun-3</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Streeter</name>
						<uri>http://www.chrisstreeter.com</uri>
					</author>
		<title type="html"><![CDATA[Pictures From Alviso]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/chrisstreeter/~3/N1s9erZ7HXM/pictures-from-alviso" />
		<id>http://www.chrisstreeter.com/?p=357</id>
		<updated>2009-06-30T17:13:25Z</updated>
		<published>2009-06-30T16:44:36Z</published>
		<category scheme="http://www.chrisstreeter.com" term="photos" /><category scheme="http://www.chrisstreeter.com" term="alviso" /><category scheme="http://www.chrisstreeter.com" term="flickr" /><category scheme="http://www.chrisstreeter.com" term="photography" /><category scheme="http://www.chrisstreeter.com" term="streeter" />		<summary type="html"><![CDATA[This past Sunday, a buddy and I met up to head out on a photo shoot. I&#8217;ve had a goal of trying to take more pictures and also to think more about the pictures I&#8217;m taking, and going on a trip with the explicit goal of taking pictures is exactly what I need to do. [...]]]></summary>
		<content type="html" xml:base="http://www.chrisstreeter.com/archive/2009/06/357/pictures-from-alviso">&lt;div class='falbum-post-box' style='float: left; margin: 0px 5px -5px 0px'&gt;	&lt;div class='falbum-thumbnail-ds'&gt;		&lt;a href='/photos/album/shooting-in-alviso' title='Array'&gt;			&lt;img src='http://farm4.static.flickr.com/3607/3674582972_f1db15d788_s.jpg' alt='' /&gt;		&lt;/a&gt;	&lt;/div&gt;&lt;/div&gt; This past Sunday, &lt;a href="http://wenzhegao.com/blog/"&gt;a buddy&lt;/a&gt; and I met up to head out on a photo shoot. I&amp;#8217;ve had a goal of trying to take more pictures and also to think more about the pictures I&amp;#8217;m taking, and going on a trip with the explicit goal of taking pictures is exactly what I need to do. We did this once before at the &lt;a href="http://www.chrisstreeter.com/photos/album/arastradero-open-space/"&gt;Arastradero Open Space&lt;/a&gt; in Palo Alto.
&lt;p&gt;So Wenzhe and I met up and drove to a place he had visited before, Alviso, CA. Alviso is on the South edge of the San Francisco Bay, situated between Moffett and Milpitas. There are a number of older buildings, some train tracks and promised to hold some interesting subjects near sunset. I ended up taking quite a few shots (180+ in total) and narrowed it down to &lt;a href="http://www.chrisstreeter.com/photos/album/shooting-in-alviso/"&gt;31 pictures&lt;/a&gt; that I found interesting.  One of my goals this trip was to think about different ways that a scene could be cropped once the picture was taken. So I&amp;#8217;d take a picture thinking that it might work one way, but a subset of the frame could work with a different crop.  So I tried experimenting with that in mind a bit.&lt;/p&gt;
&lt;p&gt;Check &lt;a href="http://www.chrisstreeter.com/photos/album/shooting-in-alviso/"&gt;out the pictures&lt;/a&gt; and let me know your thoughts.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/chrisstreeter/~4/N1s9erZ7HXM" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.chrisstreeter.com/archive/2009/06/357/pictures-from-alviso#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.chrisstreeter.com/archive/2009/06/357/pictures-from-alviso/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.chrisstreeter.com/archive/2009/06/357/pictures-from-alviso</feedburner:origLink></entry>
	</feed>
