<?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:dc="http://purl.org/dc/elements/1.1/" xmlns:thr="http://purl.org/syndication/thread/1.0">
    <title>Summit Push</title>
    
    <link rel="alternate" type="text/html" href="http://blog.summitpush.com/" />
    <id>tag:typepad.com,2003:weblog-1389717</id>
    <updated>2009-06-04T08:54:54-07:00</updated>
    
    <generator uri="http://www.typepad.com/">TypePad</generator>
    <link rel="self" href="http://feeds.feedburner.com/SummitPush" type="application/atom+xml" /><entry>
        <title>The Technology Users Group</title>
        <link rel="alternate" type="text/html" href="http://blog.summitpush.com/2009/06/the-technology-users-group.html" />
        <link rel="replies" type="text/html" href="http://blog.summitpush.com/2009/06/the-technology-users-group.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-67630861</id>
        <published>2009-06-04T08:54:54-07:00</published>
        <updated>2009-06-04T08:54:54-07:00</updated>
        <summary>Last week I attended my first meeting of the newly rebranded Technology Users Group (formerly known as the Charleston Java Users Group). I have to say that they hit this one out of the park. They brought in Ken Sipe,...</summary>
        <author>
            <name>Dan</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Security" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.summitpush.com/">&lt;p&gt;Last week I attended my first meeting of the newly rebranded &lt;a href="http://www.technologyusersgroup.org/"&gt;Technology Users Group&lt;/a&gt; (formerly known as the Charleston Java Users Group).  I have to say that they hit this one out of the park.&lt;/p&gt;&lt;p&gt;They brought in &lt;a href="http://www.nofluffjuststuff.com/conference/speaker/ken_sipe.html"&gt;Ken Sipe&lt;/a&gt;, a speaker from the No Fluff Just Stuff series, to give the talk.  The title was "Hacking: The Dark Arts".  I will admit, I expected that this was just a sensational title, and that it would be a generic talk about security.  I was wrong.  Ken started right into the interesting stuff, not just describing &lt;a href="http://en.wikipedia.org/wiki/Cross-site_scripting"&gt;Cross Site Scripting&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/SQL_injection"&gt;SQL Injection&lt;/a&gt; attacks, but actually walking us through some examples right there in the talk.  He showed us how these techniques are used to discover vulnerabilities, and what they are capable of by attacking a &lt;a href="http://www.altoromutual.com/"&gt;demonstration site&lt;/a&gt; that has been set up for that purpose.&lt;/p&gt;&lt;p&gt;We covered many topics, including wireless security.  In keeping with the style of the talk, rather than telling us WEP isn't secure, he showed us exactly how easy it is to crack a WEP key.&lt;/p&gt;&lt;p&gt;It was an eye opening talk, and a lot of fun.  Scary, but much more interesting than security talks I have heard in the past.  I look forward to next month's meeting and seeing what this group has in store next.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=VRwuYflJNEU:t9O6fHQXm5E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=VRwuYflJNEU:t9O6fHQXm5E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=VRwuYflJNEU:t9O6fHQXm5E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=VRwuYflJNEU:t9O6fHQXm5E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=VRwuYflJNEU:t9O6fHQXm5E:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=VRwuYflJNEU:t9O6fHQXm5E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    </entry>
    <entry>
        <title>Thoughts on CREATESouth</title>
        <link rel="alternate" type="text/html" href="http://blog.summitpush.com/2009/05/thoughts-on-createsouth.html" />
        <link rel="replies" type="text/html" href="http://blog.summitpush.com/2009/05/thoughts-on-createsouth.html" thr:count="1" thr:updated="2009-05-09T15:59:20-07:00" />
        <id>tag:typepad.com,2003:post-66540967</id>
        <published>2009-05-08T08:15:33-07:00</published>
        <updated>2009-05-08T08:15:33-07:00</updated>
        <summary>I had a great time at the CREATE South conference. I'm a little late in posting about it, but I have a bunch of thoughts that have been rattling around, and I think they're worth sharing. First of all, the...</summary>
        <author>
            <name>Dan</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.summitpush.com/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I had a great time at the &lt;a href="http://www.createsouth.org/"&gt;CREATE South&lt;/a&gt; conference.  I'm a little late in posting about it, but I have a bunch of thoughts that have been rattling around, and I think they're worth sharing.&lt;/p&gt;&lt;p&gt;First of all, the conference was truly excellent.  There were two very intelligent keynote speakers, and an amazingly wide &lt;a href="http://www.createsouth.org/program.php"&gt;variety of session speakers&lt;/a&gt;.  I thoroughly enjoyed going from a presentation on Twitter to a presentation on Stencil Art using carbon paper, and scraps of wood.  It truly made me think about creativity, and how it applies in the online and offline world. The &lt;a href="http://www.flickr.com/photos/22408162@N07/3474451995/in/set-72157617232321699/"&gt;food&lt;/a&gt; was fantastic as well.&lt;/p&gt;&lt;p&gt;I was invited to participate in a panel titled "From the web, to real life, and back again".  This is a topic I find fascinating, and the audience participation was excellent.  We talked about creating online communities that mirror offline ones, and the difficulties in doing that.  We talked about the sense of connection you get from meeting a person in "Real Life" that still cannot be duplicated online.  We even had &lt;a href="http://twitter.com/news2"&gt;Raymond from News2&lt;/a&gt; there to talk about how they have used Social Media to interact with the local community both to disseminate and gather news.  &lt;a href="http://twitter.com/bakersdog"&gt;Paul Reynolds&lt;/a&gt; made some excellent points about the parallels between what he does on Twitter and what his father did selling windows.&lt;/p&gt;&lt;p&gt;All of this talk, along with some of the other presentations I attended helped me solidify some thoughts I've been having for a while, and helped me articulate some of my problems with "Social Media Experts" these days.  For a while now I've been bothered by people who talk about the "right" and "wrong" ways to use sites like &lt;a href="http://twitter.com"&gt;Twitter&lt;/a&gt;.  From what I remember, when I signed up for Twitter, there was no list of rules or requirements for using the site.  Just a text field which I could type up to 140 characters into, and a simple mechanism for me to follow other people's updates.&lt;/p&gt;&lt;p&gt;It is an incredibly simple tool, and because of that simplicity, there are a thousand ways to use it.  Yet, I constantly hear the "rules of Twitter" being espoused.  Here are a few you might have run across:&lt;/p&gt;&lt;ul&gt;&#xD;
&lt;li&gt;You must follow everyone who follows you&lt;/li&gt;&#xD;
&lt;li&gt;Don't mass follow thousands of people right away&lt;/li&gt;&#xD;
&lt;li&gt;Don't constantly promote your blog or products&lt;/li&gt;&#xD;
&lt;li&gt;Give people insight into who you are&lt;/li&gt;&#xD;
&lt;li&gt;Don't auto-DM people who follow you&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;All of these "rules" make a lot of assumptions that you and the people you interact with on Twitter might not fit.  I think we do people a disservice by making blanket statements, and not educating them.  Twitter is just a new communication tool, it is not some whole new paradigm, and we make it seem scary and mysterious by giving it all these "rules".  Instead, help people correlate it to things they already understand, and then they can make their own decisions.  Here are the above "rules" rewritten:&lt;/p&gt;&lt;ul&gt;&#xD;
&lt;li&gt;Mass following thousands of people generates lots of email, and can come across as SPAM&lt;/li&gt;&#xD;
&lt;li&gt;An auto-DM is kind of like sending someone a form letter, not very personal&lt;/li&gt;&#xD;
&lt;li&gt;Constantly promoting your products can make you seem like an infomercial spokesperson&lt;/li&gt;&#xD;
&lt;li&gt;If you want people to feel like they're connecting with you personally, you should probably follow them back and share some personal details about yourself.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;Who is to say what will work for everyone?  Oxi-clean seems to be successful with their infomercials, even though that &lt;a href="http://www.youtube.com/watch?v=_NNv2oiWdRU"&gt;shouting guy&lt;/a&gt; drives me crazy.  &lt;a href="http://twitter.com/oprah"&gt;Oprah&lt;/a&gt; and &lt;a href="http://twitter.com/aplusk"&gt;Ashton&lt;/a&gt; (who were discussed a lot at CREATE South), exist in a totally different world than the rest of us, and trying to connect personally with their followers probably isn't feasible.  Form letters aren't terribly personal, but they can be informative if done properly, and some might say they are better than nothing (others disagree).&lt;/p&gt;&lt;p&gt;We are past the point where the Twitter community is homogeneous enough that we can make rules.  We can only educate, and if that doesn't work, unfollow.&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=QidlPDq_qSg:lPkFf9gpQp0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=QidlPDq_qSg:lPkFf9gpQp0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=QidlPDq_qSg:lPkFf9gpQp0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=QidlPDq_qSg:lPkFf9gpQp0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=QidlPDq_qSg:lPkFf9gpQp0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=QidlPDq_qSg:lPkFf9gpQp0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    </entry>
    <entry>
        <title>Cooper River Bridge Run 2009</title>
        <link rel="alternate" type="text/html" href="http://blog.summitpush.com/2009/04/cooper-river-bridge-run-2009.html" />
        <link rel="replies" type="text/html" href="http://blog.summitpush.com/2009/04/cooper-river-bridge-run-2009.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-65148051</id>
        <published>2009-04-06T13:50:18-07:00</published>
        <updated>2009-04-06T13:50:18-07:00</updated>
        <summary>This Saturday was the Cooper River Bridge Run. It's always exciting when you get 31,000 people together in the same place, and this year was no exception. When we showed up at the Gaillard at 5:45, the line for shuttle...</summary>
        <author>
            <name>Dan</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.summitpush.com/">&lt;p&gt;This Saturday was the &lt;a href="http://www.bridgerun.com/"&gt;Cooper River Bridge Run&lt;/a&gt;.  It's always exciting when you get 31,000 people together in the same place, and this year was no exception.  When we showed up at the Gaillard at 5:45, the line for shuttle buses already went down Calhoun to King St. and then down King to St. George.  There seemed to be a little more confusion this year with the starting zones than I saw last year, but it might just be where in the crowd I ended up.  I know there was definitely some panic as people tried to squeeze through the gates with 15 minutes to go before the race start, but I managed to duck into my zone and get in a few stretches before the gun went off.&lt;/p&gt;&lt;p&gt;The weather was beautiful, and I felt great.  The recent decrease in training due to my foot injury left me with really fresh legs.  I felt strong up until the last half mile, and was able to push through the finish without slowing down much.  Of course, even though I did the race last year, I still managed to misjudge the distance to the finish once I hit King St.&lt;/p&gt;&lt;p&gt;My chip time was 42:53, almost a minute improvement over last year, and I felt much better.  That put me at 102/2146 in &lt;a href="http://results.active.com/pages/searchform.jsp?pubID=3&amp;amp;rsID=76281"&gt;my age group&lt;/a&gt;.  Given my expectations, I was thrilled with this result, and am excited to carry through for a good performance in the&lt;a href="http://www.ifivek.com/index.html"&gt; iFiveK &lt;/a&gt;with my&lt;a href="http://lowcountrybloggers.com/"&gt; blogging peeps&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I managed to snag a post-race massage and lots of free snacks.  I was very disappointed that the Johnsonville Brats truck wasn't there, but &lt;a href="http://www.jimnnicks.com/"&gt;Jim 'N Nick's&lt;/a&gt; came through with a tasty BBQ sandwich.  Two days later, my calves are still a little tight, but I think I can call this race injury free, which is the most important thing of all!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=Na8aIq8rgU4:QXMNrpv4c-Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=Na8aIq8rgU4:QXMNrpv4c-Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=Na8aIq8rgU4:QXMNrpv4c-Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=Na8aIq8rgU4:QXMNrpv4c-Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=Na8aIq8rgU4:QXMNrpv4c-Q:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=Na8aIq8rgU4:QXMNrpv4c-Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    </entry>
    <entry>
        <title>Uwharrie 2009</title>
        <link rel="alternate" type="text/html" href="http://blog.summitpush.com/2009/03/uwharrie-2009.html" />
        <link rel="replies" type="text/html" href="http://blog.summitpush.com/2009/03/uwharrie-2009.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-64765237</id>
        <published>2009-03-27T20:11:51-07:00</published>
        <updated>2009-03-27T20:11:51-07:00</updated>
        <summary>Well, I've been putting off writing this post, because the real results of the Uwharrie Mountain Run this year took a long time to unfold. On the face of it, it was a very successful race. I shaved 2 minutes...</summary>
        <author>
            <name>Dan</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Running" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.summitpush.com/">&lt;p&gt;Well, I've been putting off writing this post, because the real results of the &lt;a href="http://www.raceuwharrie.com"&gt;Uwharrie Mountain Run&lt;/a&gt; this year took a long time to unfold.  On the face of it, it was a very successful race.  I shaved 2 minutes off of my time from last year, and came within one slot of finishing in the top ten overall*.  (*Note, most of the hardcore runner do the 20 or 40 mile versions of the race.)  I think I was in slightly better shape this year, but the bulk of the improvement was probably from running a better race and not burning myself out too early.  It certainly helps to know how hard that first mile is and pace appropriately.&lt;/p&gt;&lt;p&gt;The day itself was gorgeous.  A crew of us drove up from Charleston for the race, with one of us crazy enough to run the 40 miler, so the rest of us spent a day lounging about in the sun waiting for him to finish.  I was feeling good.&lt;/p&gt;&lt;p&gt;As we were getting ready to go home, I noticed some soreness in my foot, along the outside edge of my arch.  The trail is very rocky and uneven, so my first thought was that I must have brusied it.  It was worse the next morning, as aches and pains usually are, so I took a few days off.  It seemed to be healing up nicely, and about a week later I went for a long, slow run.  Later that day the pain came back with a vengeance.  After a few days of limping around I realized the damage must be more serious. &lt;/p&gt;&lt;p&gt;Fast forward another month and a half, and I'm finally working my way back up in mileage without any pain.  I'm still not sure what the damage was, but it was certainly more than just a bruise.  I'm mostly disappointed because my training for the &lt;a href="http://www.bridgerun.com/"&gt;Cooper River Bridge Run&lt;/a&gt;, which was one of my goals this year, was pretty much nonexistant.  I'm still going to run it, but I don't think I'll be setting any PRs.  Still, this run has been a great time two years in a row, and I wouldn't give it up.  I just might be a little more careful on the downhills next year.  At least I can start gearing up for a &lt;a href="http://www.charlestontriathlonclub.com/entries.html"&gt;summer of triathlons&lt;/a&gt;! &lt;/p&gt;&lt;br&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=KlbqWOBYjS0:QJFMVxwdqkE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=KlbqWOBYjS0:QJFMVxwdqkE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=KlbqWOBYjS0:QJFMVxwdqkE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=KlbqWOBYjS0:QJFMVxwdqkE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=KlbqWOBYjS0:QJFMVxwdqkE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=KlbqWOBYjS0:QJFMVxwdqkE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    </entry>
    <entry>
        <title>Some Ruby Performance Tests</title>
        <link rel="alternate" type="text/html" href="http://blog.summitpush.com/2009/03/some-ruby-performance-tests.html" />
        <link rel="replies" type="text/html" href="http://blog.summitpush.com/2009/03/some-ruby-performance-tests.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-64198901</id>
        <published>2009-03-15T21:50:13-07:00</published>
        <updated>2009-03-15T21:50:13-07:00</updated>
        <summary>**Warning - This post is for CS and/or Math nerds only. All other readers will find it very boring** For a while now I've been hooked on Project Euler. It's a great way to exercise the brain muscles, and has...</summary>
        <author>
            <name>Dan</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Programming" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Ruby On Rails" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.summitpush.com/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;**Warning - This post is for CS and/or Math nerds only.  All other readers will find it very boring**&lt;/p&gt;&lt;p&gt;For a while now I've been hooked on &lt;a href="http://projecteuler.net/"&gt;Project Euler&lt;/a&gt;.  It's a great way to exercise the brain muscles, and has really helped me get some practice reps in with Ruby, my newly adopted programming language of choice.&lt;/p&gt;&lt;p&gt;A lot of the projects require that you be able to generate prime numbers very quickly.  After several iterations of my algorithm, I had something that was pretty respectable, but my friend who was working through the same problem in Python was getting much better performance than I was, so I started digging deeper.&lt;/p&gt;&lt;p&gt;The first discovery I made was that a lot of the things that make Ruby pretty hurt the performance.  My first version of the algorithm generates all the primes less than 10^6 in about 14 seconds. (Keep in mind all these timings are done on a basic Macbook laptop, so the relative timings are what is most interesting)&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_primes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_prime&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br&gt;  &lt;span class="vi"&gt;@prime_hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Hash&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;br&gt;&lt;/span&gt;  &lt;span class="vi"&gt;@primes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;br&gt;   &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_prime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;next_prime&lt;/span&gt;&lt;span class="o"&gt;|&lt;br&gt;&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vi"&gt;@prime_hash&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;next_prime&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;br&gt;&lt;/span&gt;      &lt;span class="vi"&gt;@primes&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;next_prime&lt;/span&gt;&lt;br&gt;      &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;next_prime&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Math&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_prime&lt;/span&gt;&lt;span class="p"&gt;))&lt;br&gt;&lt;/span&gt;        &lt;span class="n"&gt;next_prime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_prime&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;next_prime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;br&gt;                  &lt;span class="vi"&gt;@prime_hash&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;next_prime&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}&lt;br&gt;&lt;/span&gt;      &lt;span class="k"&gt;end&lt;/span&gt;&lt;br&gt;    &lt;span class="k"&gt;end&lt;/span&gt;&lt;br&gt;  &lt;span class="k"&gt;end&lt;br&gt;&lt;/span&gt;&lt;span class="k"&gt;end&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="line" id="LC13"&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt; &lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;$ time ruby gen.rb&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;Generating all primes less than 1000000&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;78498 primes found&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;real	0m14.505s&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;user	0m10.912s&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;sys	0m3.205s&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;p&gt;&lt;br&gt;Interestingly, I was able to get a nearly 4x speedup factor by pulling apart all my pretty syntax and going back to some good old fasioned while loops.  As far as I can tell, this didn't really change the algorithm at all, just the way it's coded up.  Some other simple tests seem to indicated that all the Ruby iterators are noticeably slower than hand-built while loops.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;&lt;div class="line" id="LC1"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_primes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_prime&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC2"&gt;  &lt;span class="vi"&gt;@prime_hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Hash&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC3"&gt;  &lt;span class="vi"&gt;@primes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC4"&gt;  &lt;/div&gt;&lt;div class="line" id="LC5"&gt;  &lt;span class="n"&gt;next_prime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC6"&gt;  &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;next_prime&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;Math&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_prime&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC7"&gt;    &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;next_prime&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC8"&gt;    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_prime&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;next_prime&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC9"&gt;      &lt;span class="vi"&gt;@prime_hash&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;next_prime&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC10"&gt;      &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC11"&gt;    &lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC12"&gt;   &lt;span class="vi"&gt;@primes&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;next_prime&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC13"&gt;    &lt;span class="n"&gt;next_prime&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC14"&gt;    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="vi"&gt;@prime_hash&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;next_prime&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC15"&gt;      &lt;span class="n"&gt;next_prime&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC16"&gt;    &lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC17"&gt;  &lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC18"&gt;  &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;next_prime&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;max_prime&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC19"&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vi"&gt;@prime_hash&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;next_prime&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC20"&gt;      &lt;span class="vi"&gt;@primes&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;next_prime&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC21"&gt;    &lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC22"&gt;    &lt;span class="n"&gt;next_prime&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC23"&gt;  &lt;span class="k"&gt;end&lt;/span&gt;&lt;/div&gt;&lt;div class="line" id="LC24"&gt;&lt;span class="k"&gt;end&lt;br&gt;&lt;br&gt;$ time ruby gen2.rb&lt;br&gt;Generating all primes less than 1000000&lt;br&gt;78498 primes found&lt;br&gt;&lt;br&gt;real	0m3.470s&lt;br&gt;user	0m3.095s&lt;br&gt;sys	0m0.294s&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;br&gt;My next experiment was to try an alternative Ruby VM that I had read about, &lt;a href="http://rubini.us/"&gt;Rubinius&lt;/a&gt;.  The docs I saw indicated that they had made some performance improvements, so I thought I'd try it out.  This did not meet with success.  Rubinius, for this particular app, was much slower.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;$ time rbx gen2.rb&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;Generating all primes less than 1000000&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;78498 primes found&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;real    0m12.608s&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;user    0m11.863s&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;sys    0m0.310s&lt;/span&gt;&lt;/p&gt;&lt;p&gt;At this point, I believe I griped about Rubinius on Twitter, and actually got some great feedback from &lt;a href="http://twitter.com/evanphx"&gt;Evan Phoenix&lt;/a&gt;, the key maintainer of Rubinius.  I wrote a really simple function to test recursion and looping, and sure enough, Rubinius blew away MRI.  I'm guessing that the slowdown in my prime generator might be related to Array and Hash operations, but I need to isolate that further.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;def recurse(num)&lt;/span&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;&lt;br&gt;  return 0 if (num == 0)&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;  1.upto(10) { |i| recurse(num - 1)}&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;end&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;recurse(6)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;$time ruby recurse.rb&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;real    0m14.937s&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;user    0m9.847s&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;sys    0m4.805s&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;$ time rbx recurse.rb&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;real    0m1.745s&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;&#xD;
user    0m1.632s&lt;/span&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-family: Courier;"&gt;&#xD;
sys    0m0.061s&lt;/span&gt;&lt;/p&gt;&lt;p&gt;So there it is.  I don't claim to be a performance expert, but enough people expressed interest in what I had found that I thought I would make my life easier and post it up here.  I have some theories that the MRI vs Rubinius differences might be related to the ability to store large hashes in memory, but that's not tested yet.  I would love feedback on what I could be doing better, what might explain some of these results, etc.  I'd also be happy to run more tests if people have unanswered questions.&lt;/p&gt;&lt;p&gt;All of these code samples are &lt;a href="http://github.com/summitpush/performance-tests/tree/master"&gt;available on GitHub&lt;/a&gt;.&lt;/p&gt;&lt;br&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;br&gt;&lt;div class="line" id="LC13"&gt;&lt;br&gt;&lt;pre&gt;&lt;br&gt;&lt;div class="line" id="LC24"&gt;&lt;span class="k"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=n18OCvdICSU:0Iq8ukmiJs0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=n18OCvdICSU:0Iq8ukmiJs0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=n18OCvdICSU:0Iq8ukmiJs0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=n18OCvdICSU:0Iq8ukmiJs0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=n18OCvdICSU:0Iq8ukmiJs0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=n18OCvdICSU:0Iq8ukmiJs0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    </entry>
    <entry>
        <title>Some Good News</title>
        <link rel="alternate" type="text/html" href="http://blog.summitpush.com/2009/03/some-good-news.html" />
        <link rel="replies" type="text/html" href="http://blog.summitpush.com/2009/03/some-good-news.html" thr:count="1" thr:updated="2009-03-06T02:28:11-08:00" />
        <id>tag:typepad.com,2003:post-63660107</id>
        <published>2009-03-04T19:08:16-08:00</published>
        <updated>2009-03-04T19:08:16-08:00</updated>
        <summary>A while back, I put up a post on Mountaintop Removal Mining, and how it's destroying Appalachia. Well, today, I got an email from a friend with the following update: I wanted to give you a heads up that the...</summary>
        <author>
            <name>Dan</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.summitpush.com/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;A while back, I put up a post on &lt;a href="http://blog.summitpush.com/2008/09/mountaintop-rem.html"&gt;Mountaintop Removal Mining&lt;/a&gt;, and how it's destroying Appalachia.&lt;/p&gt;&lt;p&gt;Well, today, I got an email from a friend with the following update:&lt;/p&gt;&lt;div style="margin-left: 40px;"&gt;I wanted to give you a heads up that the &lt;span class="yshortcuts" id="lw_1236222136_3" style="border-bottom: 1px dashed #0066cc; cursor: pointer;"&gt;Clean Water Protection Act&lt;/span&gt; was introduced on the House floor today.  Reps. &lt;span class="yshortcuts" id="lw_1236222136_4"&gt;Frank Pallone&lt;/span&gt; (D-NJ-06), &lt;span class="yshortcuts" id="lw_1236222136_5"&gt;Dave Reichert&lt;/span&gt;&#xD;
(R-WA-08), and John Yarmouth (D-KY-03) introduced the bill this morning&#xD;
with 117 bi-partisan co-sponsors, more than double the number of&#xD;
original co-sponsors from the &lt;span class="yshortcuts" id="lw_1236222136_6"&gt;110th Congress&lt;/span&gt;!&lt;br&gt;&lt;br&gt;&#xD;
The Clean Water Protection Act restores the integrity of the landmark 1977 legislation, The &lt;span class="yshortcuts" id="lw_1236222136_7"&gt;Clean Water Act&lt;/span&gt;, which was enacted by Congress to "restore and maintain the chemical, physical, and &lt;span class="yshortcuts" id="lw_1236222136_8" style="border-bottom: medium none; background: transparent none repeat scroll 0% 0%; cursor: pointer; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;biological integrity&lt;/span&gt;&#xD;
of the Nation's waters." For 25 years, the Clean Water Act (CWA)&#xD;
allowed for the granting of permits to place "fill material" into&#xD;
waters of the United States, provided that the primary purpose of the&#xD;
"filling" was not for waste disposal. As such, the CWA prohibited&#xD;
mountaintop removal operations from using the nation's waterways as&#xD;
waste disposal sites. That changed in 2002, when the Army Corps of&#xD;
Engineers, under the direction of the Bush administration and without&#xD;
congressional approval, altered its longstanding definition of "fill&#xD;
material" to include mining waste. This change, which the CWPA would&#xD;
reverse, accelerated the devastating practice of &lt;span class="yshortcuts" id="lw_1236222136_9" style="border-bottom: 1px dashed #0066cc; background: transparent none repeat scroll 0% 0%; cursor: pointer; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;mountaintop removal coal mining&lt;/span&gt; and the destruction of more than 1,200 miles of Appalachian streams.&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;p&gt;This is great news, and a step in the right direction, but we can't take our foot off the gas pedal quite yet.  For more details, check out &lt;a href="http://www.ilovemountains.org" title="I Love Mountains"&gt;ILoveMountains.org&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=0jqdMvqu-Gs:kaU-oOh2TBU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=0jqdMvqu-Gs:kaU-oOh2TBU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=0jqdMvqu-Gs:kaU-oOh2TBU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=0jqdMvqu-Gs:kaU-oOh2TBU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=0jqdMvqu-Gs:kaU-oOh2TBU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=0jqdMvqu-Gs:kaU-oOh2TBU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    </entry>
    <entry>
        <title>Quandary Peak - East Ridge</title>
        <link rel="alternate" type="text/html" href="http://blog.summitpush.com/2009/02/quandary-peak---east-ridge.html" />
        <link rel="replies" type="text/html" href="http://blog.summitpush.com/2009/02/quandary-peak---east-ridge.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-63328325</id>
        <published>2009-02-25T07:32:20-08:00</published>
        <updated>2009-02-25T07:34:47-08:00</updated>
        <summary>As soon as I heard we were going on a ski trip to Copper Mountain, I knew that I was going to have to hit at least one Colorado 14er while I was out there. Being that close to the...</summary>
        <author>
            <name>Dan</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Mountaineering" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.summitpush.com/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a href="http://www.flickr.com/photos/22408162@N07/3307590599/" title="Quandary Peak by summitguy, on Flickr"&gt;&lt;img alt="Quandary Peak" height="375" src="http://farm4.static.flickr.com/3249/3307590599_d3a72d3c1b.jpg" width="500"&gt;&lt;/img&gt;&lt;/a&gt;&#xD;
&lt;/p&gt;&lt;p&gt;As soon as I heard we were going on a ski trip to Copper Mountain, I knew that I was going to have to hit at least one Colorado 14er while I was out there.  Being that close to the mountains was just too tempting.  Since I was going to be climbing solo, and I didn't have a lot of extra space in my luggage for gear, I decided to go for something not too difficult.  I have a copy of &lt;a href="http://www.amazon.com/Dawsons-Guide-Colorados-Fourteeners-Vol/dp/0962886718/ref=pd_bbs_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1235576062&amp;amp;sr=8-2"&gt;Dawson's guide to 14ers&lt;/a&gt; and it recommended Quandary Peak as a good intro level winter 14er.  It was also less than an hour drive from our condo to the trailhead, so it was the perfect choice.&lt;/p&gt;&lt;p&gt;After an entire week of cold, windy, cloudy weather, the very last day of the trip, the day I planned to attempt Quandary, turned out to be absolutely gorgeous weather.  Crystal clear skies all day long.  The climb itself was not too difficult, but climbing at that altitude is always a workout.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.flickr.com/photos/22408162@N07/3308405102/" title="Quandary Peak by summitguy, on Flickr"&gt;&lt;img alt="Quandary Peak" height="375" src="http://farm4.static.flickr.com/3307/3308405102_f34b786259.jpg" width="500"&gt;&lt;/img&gt;&lt;/a&gt;&#xD;
&lt;/p&gt;&lt;p&gt;The summit views were spectacular, I almost didn't want to leave.  I met up with one other climber near the summit, but other than that, we had the mountain to ourselves.  Really surprising that with such easy access there weren't huge crowds, but I guess it was my lucky day.&lt;/p&gt;&lt;p&gt;I've got a more detailed &lt;a href="http://www.summitpost.org/view_object.php?object_id=492979"&gt;trip report up on SummitPost&lt;/a&gt;, for those who are interested.&lt;/p&gt;&lt;p&gt;I also posted &lt;a href="http://www.flickr.com/photos/22408162@N07/sets/72157614403744842/"&gt;my pictures on Flickr&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=6usSPQMENjE:OiVihSOxTLc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=6usSPQMENjE:OiVihSOxTLc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=6usSPQMENjE:OiVihSOxTLc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=6usSPQMENjE:OiVihSOxTLc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=6usSPQMENjE:OiVihSOxTLc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=6usSPQMENjE:OiVihSOxTLc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    </entry>
    <entry>
        <title>Cold Mountain, NC</title>
        <link rel="alternate" type="text/html" href="http://blog.summitpush.com/2009/02/cold-mountain-nc.html" />
        <link rel="replies" type="text/html" href="http://blog.summitpush.com/2009/02/cold-mountain-nc.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-62441141</id>
        <published>2009-02-05T12:05:02-08:00</published>
        <updated>2009-02-05T12:05:02-08:00</updated>
        <summary>A few weeks back, I took a trip to do some hiking on Cold Mountain, in North Carolina. The goal for the trip was to get in some training with heavy packs and elevation gain, and hopefully a little practice...</summary>
        <author>
            <name>Dan</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Hiking" />
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.summitpush.com/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;A few weeks back, I took a trip to do some hiking on Cold Mountain, in North Carolina.  The goal for the trip was to get in some training with heavy packs and elevation gain, and hopefully a little practice with our cold weather camping systems.  It was a great trip, with some amazing views, and plenty of hard work.  It even got pretty cold the second night.  The highlight was probably waking up the morning of the second day and finding that we were above the clouds.&lt;/p&gt;&lt;p&gt;&lt;a href="http://sustenation.typepad.com/.a/6a00d83452b28b69e201053710ce50970b-pi" style="display: inline;"&gt;&lt;img alt="IMG_9156" class="at-xid-6a00d83452b28b69e201053710ce50970b " src="http://sustenation.typepad.com/.a/6a00d83452b28b69e201053710ce50970b-320wi"&gt;&lt;/img&gt;&lt;/a&gt;&#xD;
 &lt;/p&gt;&lt;p&gt;If you want all the details, you can read my full &lt;a href="http://www.summitpost.org/trip-report/486636/january-trip-to-cold-mountain-nc.html"&gt;Trip Report on SummitPost&lt;/a&gt;.&lt;br&gt;My pictures from the trip can be found &lt;a href="http://www.flickr.com/photos/22408162@N07/sets/72157612536496329/"&gt;here&lt;/a&gt;.&lt;br&gt;Mark posted his pictures &lt;a href="http://gallery.mac.com/sparkturbo#100503&amp;amp;bgcolor=black&amp;amp;view=grid"&gt;here&lt;/a&gt;.&lt;br&gt;Also ran into another Flickr user while up on top of Cold Mountain, who had a much nicer camera, you can see his pictures from the weekend &lt;a href="http://www.flickr.com/photos/mbsurf/sets/72157612685584822/"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;br&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=gcVrIYtWnxs:uY8weoXF-BE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=gcVrIYtWnxs:uY8weoXF-BE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=gcVrIYtWnxs:uY8weoXF-BE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=gcVrIYtWnxs:uY8weoXF-BE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=gcVrIYtWnxs:uY8weoXF-BE:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=gcVrIYtWnxs:uY8weoXF-BE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    </entry>
    <entry>
        <title>Congratulations Pittsburgh Steelers</title>
        <link rel="alternate" type="text/html" href="http://blog.summitpush.com/2009/02/congratulations-pittsburgh-steelers.html" />
        <link rel="replies" type="text/html" href="http://blog.summitpush.com/2009/02/congratulations-pittsburgh-steelers.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-62268338</id>
        <published>2009-02-02T09:59:31-08:00</published>
        <updated>2009-02-02T09:59:31-08:00</updated>
        <summary />
        <author>
            <name>Dan</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.summitpush.com/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;a href="http://sustenation.typepad.com/.a/6a00d83452b28b69e20111683c5d5c970c-pi" style="display: inline;"&gt;&lt;img alt="20080103-steelers-banner-002" border="0" class="at-xid-6a00d83452b28b69e20111683c5d5c970c image-full " src="http://sustenation.typepad.com/.a/6a00d83452b28b69e20111683c5d5c970c-800wi" style="width: 391px; height: 260px;" title="20080103-steelers-banner-002"&gt;&lt;/img&gt;&lt;/a&gt;&#xD;
 &lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=pZqjwqArCdg:tEPTAFytvf8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=pZqjwqArCdg:tEPTAFytvf8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=pZqjwqArCdg:tEPTAFytvf8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=pZqjwqArCdg:tEPTAFytvf8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=pZqjwqArCdg:tEPTAFytvf8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=pZqjwqArCdg:tEPTAFytvf8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    </entry>
    <entry>
        <title>Bangalore Shows Me the Power of Twitter</title>
        <link rel="alternate" type="text/html" href="http://blog.summitpush.com/2009/01/bangalore-shows-me-the-power-of-twitter.html" />
        <link rel="replies" type="text/html" href="http://blog.summitpush.com/2009/01/bangalore-shows-me-the-power-of-twitter.html" thr:count="4" thr:updated="2009-01-25T16:04:34-08:00" />
        <id>tag:typepad.com,2003:post-61699764</id>
        <published>2009-01-21T06:06:26-08:00</published>
        <updated>2009-01-21T06:06:26-08:00</updated>
        <summary>Last month I took a business trip to Bangalore, India. It had been 6 years since my last visit to India, and Bangalore has changed enough that I barely recognized it. Even before this trip, I was pretty sold on...</summary>
        <author>
            <name>Dan</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://blog.summitpush.com/">&lt;p&gt;&lt;a href="http://www.flickr.com/photos/22408162@N07/3213689411/" title="Bangalore - Dec 2008 by summitguy, on Flickr"&gt;&lt;img alt="Bangalore - Dec 2008" height="300" src="http://farm4.static.flickr.com/3085/3213689411_9b81238c58.jpg" width="400"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Last month I took a business trip to &lt;a href="http://flickr.com/photos/22408162@N07/sets/72157612809528204/"&gt;Bangalore, India&lt;/a&gt;.  It had been 6 years since my last visit to India, and Bangalore has changed enough that I barely recognized it.&lt;/p&gt;&lt;p&gt;Even before this trip, I was pretty sold on the power of the community on Twitter.  I've gotten involved with many great &lt;a href="http://lowcountrybloggers.com/"&gt;local projects&lt;/a&gt;, and even helped give &lt;a href="http://www.stepaheadinc.com/speaking/"&gt;a presentation&lt;/a&gt; on the power of Twitter for your business.  So I realize that I wasn't exactly a skeptic going into this, but I still think the story is pretty compelling.&lt;/p&gt;&lt;p&gt;From the moment I commented about heading to Bangalore, I started to acquire new followers.  As I was planning my trip, I was really struggling to find a hotel near the airport.  I had a flight arriving around 2am, and another one leaving around 9am, and thought it would be great to catch a little real sleep in between them.  Just before I booked the hotel, I thought to ask for suggestions on Twitter.  I am so glad that I did, because it turns out that they built a new airport in Bangalore, and if you look at where Google Maps says that BLR is, they're off by about 40kms (which in Bangalore traffic is a very, very long distance).  So before I even arrived, the Bangalore Twitter crew had saved my bacon.&lt;/p&gt;&lt;p&gt;I got other input throughout my travel, and when I arrived, I got several offers from people to get together.  Anyone who has done business travel in a foreign country where you don't know anyone can tell you that it can get pretty boring hanging out at your hotel in the evenings.  So it was really exciting to have some opportunities to meet up with people.&lt;/p&gt;&lt;p&gt;The first Tweetup was Wednesday night, and we got together for &lt;a href="http://twitter.com/jerrymannel"&gt;@jerrymannel&lt;/a&gt;'s birthday.  I think it really says something about how welcoming a group is, when you invite a random stranger from another country to your birthday party.  It was a great time for me, although I'm not sure how well it went for Jerry.  Apparently the birthday traditions there involve the birthday boy paying for everyone's food, getting &lt;a href="http://www.flickr.com/photos/22408162@N07/3213694577/in/set-72157612809528204/"&gt;cake smashed in his face&lt;/a&gt;, and then something about getting kicked by everyone!  A very special Thank You goes out to &lt;a href="http://twitter.com/dkris"&gt;@dkris&lt;/a&gt;, who spent a lot of effort on the phone with my completely lost cab driver ensuring that I eventually made it to &lt;a href="http://www.flickr.com/photos/22408162@N07/3213689411/in/set-72157612809528204/"&gt;this Tweetup&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The Twitter community there is very active, and on Saturday they invited me to what they call a Tw-eat-up.  I was initially confused when they told me to meet them at Chaat Street, and I couldn't find a restaurant named Chaat Street anywhere.  Eventually I realized they were actually referring to a street.  "Chaat Street" translates to "Snack Street", and it's exactly what it sounds like.  It's a street where up and down on both sides are all sorts of snack vendors.  We spent the evening wandering up and down, and eating everything.  I can't remember all of the things we ate, but I think my favorite was the pastries at &lt;a href="http://www.flickr.com/photos/22408162@N07/3213728803/in/set-72157612809528204/"&gt;VB Bakery&lt;/a&gt;, the most unique was the &lt;a href="http://www.flickr.com/photos/22408162@N07/3214585838/in/set-72157612809528204/"&gt;banana flavored with rose petals&lt;/a&gt;, and the only one I didn't like was the Masala Soda (picture a spicy, salty, soft drink).  There was even a &lt;a href="http://www.flickr.com/photos/22408162@N07/3214579096/in/set-72157612809528204/"&gt;cow&lt;/a&gt; that pushed me out of the way so it could get at the food scraps.  Overall, this was a very fun time, and a great culinary adventure.  Definitely the highlight of my trip.&lt;/p&gt;&lt;p&gt;I don't think I can say enough about how amazing it was to travel 9000 miles from home, and still have a support network.  The Twitter community is amazing, and the folks in Bangalore have a very great thing going on out there.  Thanks so much to all my new friends, &lt;a href="http://twitter.com/dkris"&gt;@dkris&lt;/a&gt;, &lt;a href="http://twitter.com/santoshp"&gt;@santoshp&lt;/a&gt;, &lt;a href="http://twitter.com/jerrymannel"&gt;@jerrymannel&lt;/a&gt;, &lt;a href="http://twitter.com/fagunbhavsar"&gt;@fagunbhavsar&lt;/a&gt;, &lt;a href="http://twitter.com/dhempe"&gt;@dhempe&lt;/a&gt;, &lt;a href="http://twitter.com/scorpion032"&gt;@scorpion032&lt;/a&gt;, &lt;a href="http://twitter.com/tsuvik"&gt;@tsuvik&lt;/a&gt;, &lt;a href="http://twitter.com/Suksy"&gt;@Suksy&lt;/a&gt;, &lt;a href="http://twitter.com/hnprashanth"&gt;@hnprashanth&lt;/a&gt;, &lt;a href="http://twitter.com/9_6"&gt;@9_6&lt;/a&gt;, &lt;a href="http://twitter.com/procoder"&gt;@procoder&lt;/a&gt;, and anyone I missed.  If you're ever in Bangalore, look them up!&lt;/p&gt;&lt;p&gt;My pictures from the trip can be found &lt;a href="http://www.flickr.com/photos/22408162@N07/sets/72157612809528204/"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=FEB2TfNjvSE:_S1Mm8D5mWg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=FEB2TfNjvSE:_S1Mm8D5mWg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=FEB2TfNjvSE:_S1Mm8D5mWg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?i=FEB2TfNjvSE:_S1Mm8D5mWg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=FEB2TfNjvSE:_S1Mm8D5mWg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SummitPush?a=FEB2TfNjvSE:_S1Mm8D5mWg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SummitPush?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    </entry>
 
</feed><!-- ph=1 --><!-- nhm:dynamic-ssi -->
