<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>A man without a goal is like a ship without a rudder.</title>
	<atom:link href="http://ship.quadhome.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ship.quadhome.com</link>
	<description>This is a return to my roots, of a sort. Sometimes, I need to talk to do.</description>
	<pubDate>Fri, 03 Oct 2008 18:50:26 +0000</pubDate>
	<generator>http://wordpress.org/?v=MU</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Lenovo Sucks</title>
		<link>http://ship.quadhome.com/2008/10/03/lenovo-sucks/</link>
		<comments>http://ship.quadhome.com/2008/10/03/lenovo-sucks/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 18:02:41 +0000</pubDate>
		<dc:creator>Scott Robinson</dc:creator>
		
		<category><![CDATA[say]]></category>

		<category><![CDATA[thinkpad lenovo]]></category>

		<guid isPermaLink="false">http://shipqc.wordpress.com/?p=111</guid>
		<description><![CDATA[I could describe my terrible customer experience that resulted in me canceling my order, and purchasing a nice HP. But, I found a <a href="http://decav.com/blogs/andre/archive/2007/06/27/lenovo-quot-chinese-quality-quot-abhorrant-customer-service.aspx">blog post</a> that summarized it quite nicely... in mid-2007.]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>My laptop needs to go in for repair.</p>
<p>Unfortunately, I&#8217;m a slave to our machine masters. I can&#8217;t operate for an extended period of time without a computer. So, I took this as an &#8220;opportunity!&#8221; I have wanted a Thinkpad T61 for a while; but, they don&#8217;t exist anymore. Lenovo has replaced that model with their new T500s.</p>
<p>I used my Microsoft discount to put in an order! And, everything went downhill from there.</p>
<p>I could describe my terrible customer experience that resulted in my order cancelation (and purchasing a <a href="http://h10010.www1.hp.com/wwpc/us/en/sm/WF05a/321957-321957-64295-321838-89315-3687777.html">nice HP</a>). But, I found a <a href="http://decav.com/blogs/andre/archive/2007/06/27/lenovo-quot-chinese-quality-quot-abhorrant-customer-service.aspx">blog post</a> that summarized it quite nicely&#8230; in mid-2007:</p>
<blockquote><p>
I have run into the following issues that made for a miserable experience with Lenovo.  I hope that the technical support does not have the same issues, should I need to call them:</p>
<ol>
<li>30 minute or more wait times on the phone to talk to a representitive</li>
<li>Sales people giving me very different answers (one claiming there are no production snags and it should ship in a week or two, another claiming 4 weeks)</li>
<li>An estimated ship date of 4 weeks (4/20) after I purchased, without an explaination.</li>
<li>An &#8220;order status&#8221; stating &#8220;in process.&#8221;  When I called to cancel, I was told it was already sent to &#8220;configuration&#8221;.  Does this mean it was going to be shipped earlier rather than later?  That may have kept me from cancelling my order.</li>
<li>Numerous problems with the website, including:
<ol>
<li>broken links (ex: &#8220;contact&#8221; on the bottom of the order status form)</li>
<li>Session timeouts that erase your shopping cart</li>
<li>Broken &#8220;chat with a sales representitive&#8221; on the sales page</li>
<li>TYPOS INCLUDING &#8220;SXGA&#8221; INSTEAD OF &#8220;SXGA+&#8221; that no one cares enough to resolve</li>
</ol>
</li>
<li>Fake, on-going sales that keep changing names, pretending that the product is &#8220;on sale&#8221; to lure customers.</li>
</ol>
</blockquote>
<p>Yup, that sounds about right.</p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shipqc.wordpress.com/111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shipqc.wordpress.com/111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shipqc.wordpress.com/111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shipqc.wordpress.com/111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shipqc.wordpress.com/111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shipqc.wordpress.com/111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shipqc.wordpress.com/111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shipqc.wordpress.com/111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shipqc.wordpress.com/111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shipqc.wordpress.com/111/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ship.quadhome.com&blog=3711724&post=111&subd=shipqc&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ship.quadhome.com/2008/10/03/lenovo-sucks/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/quadhome-128.jpg" medium="image">
			<media:title type="html">Quad</media:title>
		</media:content>
	</item>
		<item>
		<title>Functional over-engineering</title>
		<link>http://ship.quadhome.com/2008/09/02/functional-over-engineering/</link>
		<comments>http://ship.quadhome.com/2008/09/02/functional-over-engineering/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 06:45:16 +0000</pubDate>
		<dc:creator>Scott Robinson</dc:creator>
		
		<category><![CDATA[say]]></category>

		<guid isPermaLink="false">http://shipqc.wordpress.com/?p=107</guid>
		<description><![CDATA[It&#8217;s a simple and common problem:
You have a directory structure with files in it. You want to find all the files with certain extensions. &#8220;jpg&#8221;, &#8220;jpeg&#8221;, &#8220;png&#8221; and &#8220;gif&#8221; for argument&#8217;s sake.
The language for this exercise is Python.
It&#8217;s important to use the standard library. A search for something like &#8220;python directory find recursive&#8221; will lead [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>It&#8217;s a simple and common problem:</p>
<p>You have a directory structure with files in it. You want to find all the files with certain extensions. &#8220;jpg&#8221;, &#8220;jpeg&#8221;, &#8220;png&#8221; and &#8220;gif&#8221; for argument&#8217;s sake.</p>
<p>The language for this exercise is Python.</p>
<p>It&#8217;s important to <a href="http://www.25hoursaday.com/weblog/2008/08/31/DevelopersUsingLibrariesIsNotASignOfWeakness.aspx">use the standard library</a>. A search for something like &#8220;<a href="http://www.google.com/search?q=python+directory+find+recursive">python directory find recursive</a>&#8221; will lead you very quickly to <a href="http://docs.python.org/lib/os-file-dir.html#l2h-2717">os.walk</a>. Which is exactly what you want for <em>walking</em> the directory structure.</p>
<p>But, there is the file extension to be checked. <a href="http://docs.python.org/lib/string-methods.html#l2h-239">endswith</a> is not appropriate because it&#8217;s case-sensitive. What you want is <a href="http://docs.python.org/lib/module-fnmatch.html">fnmatch</a>. You know that because you either glanced at <a href="http://docs.python.org/lib/filesys.html">File and Directory Access</a> when you found the <a href="http://docs.python.org/lib/">standard library documentation</a>. Or, because you searched for something like &#8220;<a href="http://www.google.com/search?q=python+match+filename">python match filename</a>.&#8221;</p>
<p>We&#8217;re ready to code. Nothing complex:</p>
<pre><code>def image_files_1(directory):
    for root, dirs, files in os.walk(directory):
        for extension in '*.jpeg', '*.jpg', '*.png', '*.gif':
            for fn in fnmatch.filter(files, extension):
                yield os.path.join(root, fn)</code></pre>
<p>If this was a barrier to getting your job done, mission complete. But, dude, iterators and list comprehensions! And, when all you have is a hammer&#8230;</p>
<pre><code>def image_files_2(directory):
    return itertools.chain(*[[os.path.join(root, fn)
                              for fn in fnmatch.filter(files, '*.jpg') +
                                        fnmatch.filter(files, '*.jpeg') +
                                        fnmatch.filter(files, '*.png') +
                                        fnmatch.filter(files, '*.gif')]
                             for root, dirs, files in os.walk(directory)])</code></pre>
<p>But, what about new file formats?</p>
<pre><code>def image_files_3(directory, extensions):
    return itertools.chain(*[[os.path.join(root, fn)
                              for fn in sum([fnmatch.filter(files, '*.' + ext)
                                             for ext in extensions],
                                            [])]
                             for root, dirs, files in os.walk(directory)])</code></pre>
<p>I am, appropriately, embarrassed that I wrote any of this.</p>
<p>Embarrassed enough to share.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/shipqc.wordpress.com/107/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/shipqc.wordpress.com/107/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shipqc.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shipqc.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shipqc.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shipqc.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shipqc.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shipqc.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shipqc.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shipqc.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shipqc.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shipqc.wordpress.com/107/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ship.quadhome.com&blog=3711724&post=107&subd=shipqc&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ship.quadhome.com/2008/09/02/functional-over-engineering/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/quadhome-128.jpg" medium="image">
			<media:title type="html">Quad</media:title>
		</media:content>
	</item>
		<item>
		<title>Weaning myself off Tara</title>
		<link>http://ship.quadhome.com/2008/06/18/weaning-myself-off-tara/</link>
		<comments>http://ship.quadhome.com/2008/06/18/weaning-myself-off-tara/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 05:10:28 +0000</pubDate>
		<dc:creator>Scott Robinson</dc:creator>
		
		<category><![CDATA[todo]]></category>

		<guid isPermaLink="false">http://shipqc.wordpress.com/?p=99</guid>
		<description><![CDATA[As far back as I can remember, I wanted a computer of my own.
The first computer I was given wide latitude upon was my mother&#8217;s Apple IIc. Arguably, my experiences on it fundamentally broke me for all future computing. After it died, the first time, I got time on an XT.
The first machine I had [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>As far back as I can remember, I wanted a computer of my own.</p>
<p>The first computer I was given wide latitude upon was my mother&#8217;s <a href="http://en.wikipedia.org/wiki/Apple_IIc">Apple IIc</a>. Arguably, my experiences on it fundamentally broke me for all future computing. After it died, the first time, I got time on an <a href="http://en.wikipedia.org/wiki/IBM_Personal_Computer_XT">XT</a>.</p>
<p>The first machine I had exclusive control over was a 386. By that point, I had stolen time on computers wherever and whenever I could. And, I had accessed the Internet thanks to the lax network security at the University of Washington. I found Linux. I named the 386: &#8220;fuzzy toilet&#8221;</p>
<p>I&#8217;ve since standardized my naming scheme: women I had <strong>crushes</strong> on and got <strong>nowhere</strong> with.</p>
<p>Years and women passed. The last desktop I purchased was in 1999. She was dubbed Tara. And, with her, I learned that data is more important than the hardware containing it.</p>
<p>The originally purchased hardware for Tara doesn&#8217;t exist. The motherboards, CPUs, hard drives, video cards, sound cards, network cards, keyboards, mice, and monitors have all warn out and been replaced. Many times. But, the original installation of Linux on Tara still exists.</p>
<p><code>scott@tara:~$ [0] ls -al .bash_logout<br />
-rw-r&#8211;r&#8211; 1 scott scott 24 1999-07-20 19:09 .bash_logout</code></p>
<p>That&#8217;s a heart warming story of a boy and his computer.</p>
<p>But, Scott got older and finally started outgrowing Tara. My friend <a href="http://www.williamphenryjr.com/">William</a> pressured me into purchasing a laptop. The day I installed Ubuntu on Geneva was the last day of my preferred use of desktops. It was a matter of time before I transitioned completely:</p>
<p><code>scott@tara:~/.gaim/logs$ [0] find ./ -name ????-??-??.*.txt -printf &#8220;%f\n&#8221; | sort | tail -1 | cut -c -10<br />
2005-05-31</code></p>
<p>Which left <a href="http://tara.quadhome.com/~scott/">Tara as a server</a>. E-mail, web, storage, shell and long running tasks. Damn, girl!</p>
<p>But, for the last three years I&#8217;ve been neglectful. Yes, there are backups. And <a href="http://smartmontools.sourceforge.net/">monitoring</a>. However, I don&#8217;t exactly feel comfortable with a large part of my life sitting on machine with no eyes on it and hardware older than children that can speak.</p>
<p>Which is a very long way of saying I&#8217;ve been <em>transitioning my services</em> off Tara. To other members of my increasing harem. And, this gives me an excuse to talk about virtualization.</p>
<p>Stay tuned.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/shipqc.wordpress.com/99/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/shipqc.wordpress.com/99/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shipqc.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shipqc.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shipqc.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shipqc.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shipqc.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shipqc.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shipqc.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shipqc.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shipqc.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shipqc.wordpress.com/99/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ship.quadhome.com&blog=3711724&post=99&subd=shipqc&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ship.quadhome.com/2008/06/18/weaning-myself-off-tara/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/quadhome-128.jpg" medium="image">
			<media:title type="html">Quad</media:title>
		</media:content>
	</item>
		<item>
		<title>bzrshelve, a punchline to a bad joke</title>
		<link>http://ship.quadhome.com/2008/06/17/bzrshelve-a-punchline-to-a-bad-joke/</link>
		<comments>http://ship.quadhome.com/2008/06/17/bzrshelve-a-punchline-to-a-bad-joke/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 08:02:48 +0000</pubDate>
		<dc:creator>Scott Robinson</dc:creator>
		
		<category><![CDATA[done]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://shipqc.wordpress.com/?p=98</guid>
		<description><![CDATA[The joke has been long coming.
Back when I was still on reddit, a short meme hit where someone wrote a little hack that made frontpage. The title is what must have sold it, as there wasn&#8217;t any there - there.
&#8220;Using Git as a versioned data store in Python&#8221; aka gitshelve.
A few days later, of course, [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The joke has been long coming.</p>
<p>Back when I was still on reddit, a short meme hit where someone wrote a little hack that made frontpage. The title is what must have sold it, as there wasn&#8217;t any there - <em>there</em>.</p>
<p>&#8220;Using Git as a versioned data store in Python&#8221; aka <a href="http://www.newartisans.com/blog_files/git.versioned.data.store.php">gitshelve</a>.</p>
<p>A few days later, of course, <a href="http://piranha.org.ua/blog/2008/05/19/hgshelve/">hgshelve</a> came into existence.</p>
<p>It&#8217;s telling that the <a href="http://bazaar-vcs.org/">Bazaar</a> community never got into the action. I can imagine good arguments for both that scene being too small, or too busy getting work done.</p>
<p>Fortunately, I have no such issue. Behold: <a href="http://code.google.com/p/bzrshelve/">bzrshelve</a>.</p>
<p>And the only <a href="http://en.wikipedia.org/wiki/Distributed_revision_control">DVCS</a> that can get the source is <a href="http://svk.bestpractical.com/">svk</a>.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/shipqc.wordpress.com/98/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/shipqc.wordpress.com/98/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shipqc.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shipqc.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shipqc.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shipqc.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shipqc.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shipqc.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shipqc.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shipqc.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shipqc.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shipqc.wordpress.com/98/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ship.quadhome.com&blog=3711724&post=98&subd=shipqc&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ship.quadhome.com/2008/06/17/bzrshelve-a-punchline-to-a-bad-joke/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/quadhome-128.jpg" medium="image">
			<media:title type="html">Quad</media:title>
		</media:content>
	</item>
		<item>
		<title>Happy Key Revocation Tuesday</title>
		<link>http://ship.quadhome.com/2008/06/17/happy-key-revocation-tuesday/</link>
		<comments>http://ship.quadhome.com/2008/06/17/happy-key-revocation-tuesday/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 07:41:35 +0000</pubDate>
		<dc:creator>Scott Robinson</dc:creator>
		
		<category><![CDATA[done]]></category>

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

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

		<category><![CDATA[dsa 1571]]></category>

		<guid isPermaLink="false">http://shipqc.wordpress.com/?p=94</guid>
		<description><![CDATA[Almost one month ago, Florian Weimer on behalf of the Debian Security Team announced one of the worst security vulnerabilities in recent history. I won&#8217;t go into a technical description of the problem itself. But, it&#8217;s interesting to note how Debian both succeeded and failed, how this vulnerability broke the &#8220;patch to stay secure&#8221; model, [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Almost one month ago, Florian Weimer on behalf of the Debian Security Team announced one of the <a href="http://www.debian.org/security/2008/dsa-1571">worst security vulnerabilities in recent history</a>. I won&#8217;t go into a technical description of the problem itself. But, it&#8217;s interesting to note how Debian both succeeded and failed, how this vulnerability broke the &#8220;patch to stay secure&#8221; model, and how it personally impacted me.</p>
<h2>On Debian&#8230;</h2>
<p>First, Debian is an all volunteer organization that created and maintains the largest integrated body of code. <strong>Ever.</strong> The Debian &#8220;operating system&#8221; is far larger than Microsoft Windows or Mac OS X - they can barely be compared. That a security vulnerability could lay in any package undiscovered for years is unsurprising.</p>
<p>But, once discovered, Debian&#8217;s security team promptly released an update of the affected packages fixing the flaw. In the same announcement for the update, there was an included link to a page that promised to have instructions on how to <em>actually close the holes</em>. That page wasn&#8217;t filled in until <a href="http://cvs.debian.org/webwml/english/security/key-rollover/index.wml?rev=1.46&amp;root=webwml&amp;view=log#rev1.4">over a day later</a>.</p>
<p>Of course, the <a href="http://wiki.debian.org/SSLKeys">wiki page</a> had helpful information within <a href="http://wiki.debian.org/SSLkeys?action=recall&amp;rev=1">30 minutes</a>.</p>
<blockquote><p>Are you saying getting the security update didn&#8217;t fix my computer?</p></blockquote>
<p>Yes. The problem wasn&#8217;t a matter of fixing the user&#8217;s software but fixing their <i>data</i>. The security keys they thought weren&#8217;t. The software to make new keys was provided; but, any Debian user that wasn&#8217;t subscribed to the right mailing list wouldn&#8217;t have known about the <em>further action necessary</em>. (Though, to be fair, the OpenSSH package at least warns about vulnerable keys on update.)</p>
<p>In fact, the average Debian user would be hard pressed to find any mention of the vulnerability. It wasn&#8217;t a front page news item. OpenSSL, and all dependent packages, fail to provide any alert on upgrade. Worse, the <a href="http://en.wikipedia.org/wiki/Certificate_authority">Certificate Authorities</a> still haven&#8217;t revoked certificates for compromised keys. That means the SSL aura of trust has been devalued even more.</p>
<p>It would be an interesting, and expensive, experiment to see how many CAs will <a href="http://en.wikipedia.org/wiki/Extended_Validation_Certificate">EV sign</a> one of the compromised keys.</p>
<h2>On me&#8230;</h2>
<p>Meanwhile, tonight, I finally finished with &#8220;key rollover&#8221; on all my affected services.</p>
<ul>
<li>tara: No services effected. (Too old.)</li>
<li>steak: No services effected. (Too old.)</li>
<li>megan: SSH, SMTP / IMAP, XMPP</li>
<li>resa: SSH</li>
<li>Personal keys: EECS, wsunix, Planet EECS, tara, megan, nearlyfreespeech</li>
</ul>
<p>Gosh, I hope I got everything. Each of those only took about five hours apiece.</p>
<p>Of course, some people did make it easier. I already shouted out to the wiki page earlier. But, of everything and everyone who should have been doing their jobs, one group stood out and another one embarrassed itself:</p>
<blockquote><p>From: &#8220;NearlyFreeSpeech.NET Member Support&#8221;<br />
Subject: [NearlyFreeSpeech.NET] Potentially weak ssh key detected<br />
Date: Wed, 14 May 2008 12:30:00 -0400</p>
<p>Hello</p>
<p>You are being contacted because an ssh key vulnerability in Debian-<br />
derived Linux systems has been detected that may affect you.</p>
<p>&#8230;</p></blockquote>
<p>Wow. Thanks!</p>
<blockquote><p>From: &#8220;XMPP CertMaster&#8221;<br />
Subject: XMPP SSL Certificate revoked, 09:12 pm 13 Jun 2008<br />
Date: <strong>Fri, 13 Jun 2008</strong> 21:12:48 +0300</p>
<p>This mail is intended for the person who owns a SSL Certificate from the XMPP Intermediate Certification Authority (http://www.xmpp.net).</p>
<p>Your certificate with serial number 890 has been revoked for the following reason(s):</p>
<p> - The <strong>holder / owner</strong> of the certificate requested revocation.
</p></blockquote>
<p>You can&#8217;t blame the XMPP Federation. They don&#8217;t actually run a CA, they <a href="https://xmpp.startcom.org/">subcontract</a>. I hope <a href="http://stpeter.im/">Peter</a> isn&#8217;t paying much&#8230; as I&#8217;d say him having to <a href="https://www.xmpp.net/news/2008/05/13/xmpp-ica-certificates-and-debian-openssl-vulnerability">write a notice of the vulnerability</a> was not his money&#8217;s worth.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/shipqc.wordpress.com/94/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/shipqc.wordpress.com/94/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shipqc.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shipqc.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shipqc.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shipqc.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shipqc.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shipqc.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shipqc.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shipqc.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shipqc.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shipqc.wordpress.com/94/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ship.quadhome.com&blog=3711724&post=94&subd=shipqc&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ship.quadhome.com/2008/06/17/happy-key-revocation-tuesday/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/quadhome-128.jpg" medium="image">
			<media:title type="html">Quad</media:title>
		</media:content>
	</item>
		<item>
		<title>I will never be a software architect</title>
		<link>http://ship.quadhome.com/2008/05/08/i-will-never-be-a-software-architect/</link>
		<comments>http://ship.quadhome.com/2008/05/08/i-will-never-be-a-software-architect/#comments</comments>
		<pubDate>Thu, 08 May 2008 02:14:36 +0000</pubDate>
		<dc:creator>Scott Robinson</dc:creator>
		
		<category><![CDATA[say]]></category>

		<guid isPermaLink="false">http://ship.quadhome.com/posts/never_be_a_software_architect/</guid>
		<description><![CDATA[Disclaimer: this may be be a Seattle area phenomenon.
I have &#8220;software architect&#8221; on my resume, and it pains me. Wikipedia has a great article on what a software architect may or may not be. But, in my world, a software architect has the knowledge, insight and responsibility to make educated decisions about the scope and [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><em>Disclaimer: this may be be a Seattle area phenomenon.</em></p>
<p>I have &#8220;software architect&#8221; on my resume, and it pains me. Wikipedia has a great article on what a <a href="http://en.wikipedia.org/wiki/Chief_Software_Architect" title="Software architect">software architect</a> may or may not be. But, in my world, a software architect has the knowledge, insight and responsibility to make educated decisions about the scope and direction of a team-developed software project.</p>
<p>That was a mouthful.</p>
<p>Software architects pick frameworks. They find previously existing packages for functionality just before the rest of the team realizes they need it. And, they plan and communicate how all the moving parts will come together. They&#8217;re really-really smart.</p>
<p>Everyone wants to be a software architect. At <a href="http://startupweekend.com/" title="Startup Weekend">Seattle&#8217;s Startup Weekend</a>, no less than a third of the developers signed up as architects. And why not?! The act of creation - from art to programming - is egotistical. If you&#8217;ve ever referred to yourself as a &#8220;software engineer&#8221; with a straight face, then you&#8217;re advertising the capability to plan non-trivial projects.</p>
<p>You&#8217;re a liar.</p>
<blockquote>
<p><em>Software</em> is big. You just won&#8217;t believe how vastly, hugely, mind-bogglingly big it is. I mean, you may think it&#8217;s a long way down the road to the chemist&#8217;s, but that&#8217;s just peanuts to <em>software</em>.</p>
</blockquote>
<p>With all apologies to <a href="http://www.amazon.com/Hitchhikers-Guide-Galaxy-Douglas-Adams/dp/0345391802" title="The Hitchhiker's Guide to the Galaxy">Douglas Adams</a>. Software projects are the most complex machines created in the history of invention. You&#8217;re telling me that you can do better than Leonardo Da Vinci, Thomas Edison, or the Wright Brothers? Because each of those iconic figures were geniuses driven to create simpler machines than a web application. And each was wrong up front.</p>
<p>This isn&#8217;t a fair comparison. We have Photoshop, Digi-Key, and kit airplanes. Also, Rails!</p>
<p>Those inventors were forging into unknown territory. Customizing a CMS or integrating SAP ERP into a SOA are known quantities. It could be argued the architect exists for the partially ambiguous problems.</p>
<p>My response is a question oft heard in agile circles. I learned it from working in open source projects, corporate giants, startups and contracting.  It&#8217;s a <a href="http://en.wikipedia.org/wiki/Koan" title="Kōan">kōan</a>:</p>
<blockquote>
<p>&#8220;What features will you be adding in six months?&#8221;</p>
</blockquote>
<p>The job of software architect is an answer. Is it the right one?</p>
<ul>
<li>
<p>There is value in understanding a problem domain.<br />
But, the stakeholders in a project tautologically have that.</p>
</li>
<li>
<p>There is value in making the hard decisions.<br />
But, that is why we have team leaders.</p>
</li>
<li>
<p>There is value in planning your design.<br />
But, software structure inevitably resembles its team&#8217;s structure.</p>
</li>
</ul>
<p>&#8230; and so on.</p>
<p>The software architect exists because of the cultural need to have someone be responsible for these aspects. But it isn&#8217;t possible to satisfy these responsibilities and simultaneously attend to the details that inform future decisions. <a href="http://www.joelonsoftware.com/articles/fog0000000018.html" title="Don't Let Architecture Astronauts Scare You">Architecture astronauts</a> just don&#8217;t have the time to be any more grounded!</p>
<p>Instead? Go slow. Let the programmers make the decisions. Feed them knowledge and constraints. Try to develop a consensus among the actual stakeholders. And accept everyone&#8217;s input. That quiet intern? They go home and spend all their spare time playing with tools that handle 80% of the job.</p>
<p>I&#8217;m not arguing for agile development practices.</p>
<p>I&#8217;m arguing for considered diligence. Plan a little. Work a little. Rinse and repeat. Never let yourself slip into the tunnel-vision that comes with long cycles.</p>
<p>Because if your team cannot make responsible architectural decisions, then no one can save your project.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/shipqc.wordpress.com/78/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/shipqc.wordpress.com/78/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shipqc.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shipqc.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shipqc.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shipqc.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shipqc.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shipqc.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shipqc.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shipqc.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shipqc.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shipqc.wordpress.com/78/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ship.quadhome.com&blog=3711724&post=78&subd=shipqc&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ship.quadhome.com/2008/05/08/i-will-never-be-a-software-architect/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/quadhome-128.jpg" medium="image">
			<media:title type="html">Quad</media:title>
		</media:content>
	</item>
		<item>
		<title>How Scott hosts e-mail</title>
		<link>http://ship.quadhome.com/2008/04/13/how-scott-hosts-e-mail/</link>
		<comments>http://ship.quadhome.com/2008/04/13/how-scott-hosts-e-mail/#comments</comments>
		<pubDate>Sun, 13 Apr 2008 12:48:22 +0000</pubDate>
		<dc:creator>Scott Robinson</dc:creator>
		
		<category><![CDATA[done]]></category>

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

		<guid isPermaLink="false">http://ship.quadhome.com/posts/how_scott_hosts_mail/</guid>
		<description><![CDATA[I&#8217;ve been on the Internet a long time.
&#62; ;&#36;network.MOO_Name
=&#62; "LambdaMOO"
[used 2 ticks, 0 seconds.]

&#62; @age me
Quad first connected on Tue Oct 31 17:07:28 1995 PST
Which makes us 12 years, 5 months, and 10 days old.
However, for official purposes our age is 12 years, 3 months, and 27 days.

And, in that time, I have accumulated a [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;ve been on the Internet a long time.</p>
<pre><code>&gt; ;&#36;network.MOO_Name
=&gt; "LambdaMOO"
[used 2 ticks, 0 seconds.]

&gt; @age me
Quad first connected on Tue Oct 31 17:07:28 1995 PST
Which makes us 12 years, 5 months, and 10 days old.
However, for official purposes our age is 12 years, 3 months, and 27 days.
</code></pre>
<p>And, in that time, I have accumulated <a href="http://pgp.mit.edu:11371/pks/lookup?search=scott%40tranzoa.com&amp;op=index" title="Scott's Public Keys">a few e-mail addresses</a>. I&#8217;m proud to say that, with a few exceptions due to legal complications, every one of them still reaches me. But, this means I invest quite a bit of effort into my infrastructure.</p>
<p>I have a <a href="http://en.wikipedia.org/wiki/Virtual_private_server" title="Virtual Private Server">VPS</a> running <a href="http://www.postfix.org/" title="The Postfix Homepage">Postfix</a> / <a href="http://fetchmail.berlios.de/" title="Fetchmail">Fetchmail</a> + <a href="http://www.procmail.org/" title="Procmail Homepage">Procmail</a> + <a href="http://spamassassin.apache.org/" title="The Apache SpamAssassin Project">SpamAssassin</a> + <a href="http://www.dovecot.org/" title="Secure IMAP server">Dovecot</a>. I use <a href="http://www.mutt.org/" title="The Mutt E-Mail Client">mutt</a> and (increasingly) <a href="http://www.mozilla.com/en-US/thunderbird/" title="Reclaim your inbox">Thunderbird</a> to read and write. It&#8217;s a well oiled machine pushing a 6 gigabyte spool.</p>
<h2>How Stuff Gets In</h2>
<p>The Postfix configuration is bog standard. <code>megan.quadhome.com</code> is the authoritative name for the server. My domains are all virtually aliased to UNIX accounts.</p>
<p>For relaying my mail, the settings are straight-forward. No relaying without authentication. No authentication without TLS.</p>
<p>For the addresses whose domains I don&#8217;t directly control, that&#8217;s where Fetchmail steps in. I have a <code>.fetchmailrc</code> listing my accumulated servers, accounts and passwords. A crontab entry on <code>@reboot</code> starts the daemon.</p>
<h2>How Stuff Gets Munged</h2>
<p>I used to use virtual addresses. <code>scott_BLAH@scott.tranzoa.net</code> for anything sketchy. But, I found the effort made no difference in my inbox.</p>
<p>Now, when an e-mail comes in, it goes through a Procmail filter that separates mailing list traffic into their own dedicated boxes. After that, everything remaining is fed into SpamAssassin. I use <a href="http://spamassassin.apache.org/doc/spamc.html" title="SpamAssassin Client">spamc</a> / <a href="http://spamassassin.apache.org/doc/spamd.html" title="SpamAssassin Daemon">spamd</a> with <code>bayes_learn_journal</code> enabled to keep things fast.</p>
<p>As incredible as it sounds, occasionally SpamAssassin is wrong. Two folders named &#8220;Ham&#8221; and &#8220;Spam&#8221; exist for those situations. I appropriately file the miscategorized mail and the following script ran <code>@hourly</code> solves the problem:</p>
<pre><code>#!/bin/sh
#
# learn-mbox
#
# An fancy wrapper around SpamAssassin's sa-learn.
#
# Learn an mailbox and then delete it.
#
# Lock to ensure we don't clobber anything.
#

MBOX="&#36;1"
MODE="&#36;2"

if [ -z "&#36;MBOX" ]; then
  echo "Usage: &#36;0 [MAILBOX] [ham | spam]" &gt;&amp;2
  exit 1
elif [ ! -f "&#36;MBOX" ]; then
  echo "&#36;0: '&#36;MBOX' does not exist." &gt;&amp;2
  exit 1
elif [ ! -s "&#36;MBOX" ]; then
#  echo "&#36;0: '&#36;MBOX' is empty." &gt;&amp;2
  exit 1
fi

if [[ "&#36;MODE" != "ham" &amp;&amp; "&#36;MODE" != "spam" ]]; then
  echo "&#36;0: '&#36;MODE' is not a learning mode. ('ham' or 'spam')" &gt;&amp;2
  exit 2
fi

lockfile-create &#36;MBOX
lockfile-touch &#36;MBOX &amp;

sa-learn --mbox --&#36;MODE &#36;MBOX &gt; /dev/null
echo -n &gt; &#36;MBOX

kill %1
lockfile-remove &#36;MBOX
</code></pre>
<h2>How Stuff Gets To Me</h2>
<p>No Hotmail, Eudora, or Squirrelmail for me. I used <a href="http://www.washington.edu/pine/" title="Pine Information Center">Pine</a> for the first years of my online life. After the <a href="http://en.wikipedia.org/wiki/Pine_(e-mail_client)#Licensing_and_clones" title="Licensing and clones">licensing dispute</a>, I switched to mutt and never looked back. It had all the <a href="http://quadhome.livejournal.com/63102.html" title="Outstanding problems in personal information management.">features I needed</a>.</p>
<p>Time marched on, and different features became more important.</p>
<p>Now, I use a combination of Thunderbird and mutt. The former provides a richer experience. The latter is a safety net for when I&#8217;m on random computers.</p>
<p>mutt is on the server, so it accesses my mail directly. But, Thunderbird is an IMAP client. And, Dovecot provides those necessary IMAP services.</p>
<p>Dovecot is also configured with out-of-box defaults with one exception. My IMAP passwords are different from my UNIX passwords. Dovecot provides TLS-only SASL authentication with hashed passwords. Postfix also works with Dovecot to share the same authentication method.</p>
<p>The practical upside is when <a href="http://en.wikipedia.org/wiki/Alice_and_Bob" title="Alice and Bob">Mallory</a> finds my mail passwords, she can&#8217;t destroy my server and backups.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/shipqc.wordpress.com/79/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/shipqc.wordpress.com/79/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shipqc.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shipqc.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shipqc.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shipqc.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shipqc.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shipqc.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shipqc.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shipqc.wordpress.com/79/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shipqc.wordpress.com/79/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shipqc.wordpress.com/79/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ship.quadhome.com&blog=3711724&post=79&subd=shipqc&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ship.quadhome.com/2008/04/13/how-scott-hosts-e-mail/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/quadhome-128.jpg" medium="image">
			<media:title type="html">Quad</media:title>
		</media:content>
	</item>
		<item>
		<title>The challenge from Denver.</title>
		<link>http://ship.quadhome.com/2008/04/13/the-challenge-from-denver/</link>
		<comments>http://ship.quadhome.com/2008/04/13/the-challenge-from-denver/#comments</comments>
		<pubDate>Sun, 13 Apr 2008 12:46:41 +0000</pubDate>
		<dc:creator>Scott Robinson</dc:creator>
		
		<category><![CDATA[done]]></category>

		<guid isPermaLink="false">http://ship.quadhome.com/posts/eventvue/</guid>
		<description><![CDATA[My friend Mike drunk-dials me one evening and leaves a voicemail. He&#8217;s out in Boulder for TechStars 2007. Apparently, some friendly harassment over drinks between companies was pushed to the next level. EventVue&#8217;s team bet Mike a dinner and some cash that a hack couldn&#8217;t be slipped in on their website.
~ Who ya gonna call? [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>My friend Mike drunk-dials me one evening and leaves a voicemail. He&#8217;s out in Boulder for <a href="http://www.techstars.org/" title="TechStars 2007">TechStars 2007</a>. Apparently, some friendly harassment over drinks between companies was pushed to the next level. <a href="http://www.eventvue.com/" title="EventVue">EventVue</a>&#8217;s team bet Mike a dinner and some cash that a hack couldn&#8217;t be slipped in on their website.</p>
<p><em>~ Who ya gonna call? ~</em></p>
<p>I get started Thursday afternoon with a whois/ping of the server, and basically do my homework to make sure all the registration information is what it should be. What can I say - even though I&#8217;m being given an account on their server, I still like to feel comfortable before I (possibly) break the law.</p>
<p>Rules of the contest are to find a site modification hack. This has been defined as:</p>
<ul>
<li>XSS</li>
<li>SQL Injection</li>
<li>Remote Root</li>
</ul>
<p>I plan on focusing on XSS attacks as they&#8217;re easy and have the least potential to cause long-term damage. SQL injection investigation can result in inconsistent database states, and a remote root means a painful security audit for someone who isn&#8217;t me.</p>
<p>Their development web server is protected using HTTP authorization - plaintext. I haven&#8217;t been given a username and password yet. Therefore, I send Mike a text message and wait to get some permissions.</p>
<p>In the mean time, I refresh my memory on various PHP artifacts. It was mentioned that <a href="http://php.net/magic_quotes">magic quotes</a> are enabled as a security precaution. A mental echo tells me that the feature is a false sense of security option and that most deployments have it turned off. I read documentation to refresh my memory. For the uninformed, it&#8217;s a mechanism where incoming GET and POST data is unconditionally escaped. It&#8217;s generally disabled on servers because of the headaches it causes in repeated escaped data being passed from page to page. It also offers limited protection for SQL injection, as it<br />
s often easy to bypass in cases of alternate delimeters.</p>
<p><strong>30 minutes pass.</strong></p>
<p>Mike sends me a username and password via text message. It isn&#8217;t the most secure password, but whatever - I don&#8217;t plan on running a dictionary attack or anything.</p>
<p>I logged into the development site and it&#8217;s a slightly more broken version of their normal front page. And, I apparently still need an invite. Another phone call to Mike&#8230;</p>
<p><strong>30 more minutes pass.</strong></p>
<p>I receive further login details and immediately am greeted with an inauspicious beginning. In their login page, the authentication fields are pre-filled with the incorrect credentials I had supplied earlier. I don&#8217;t have Javascript enabled yet (<a href="http://noscript.net/">NoScript</a>) and I planned on taking a look at the cookies later but&#8230; I decided to look then.</p>
<p>There were only session IDs. Their server is storing the username and password cleartexts keyed to the session ID and then pushing them back to the client in the HTML. If I find a XSS, then I can steal anyone&#8217;s username and password by requesting their login page.</p>
<p>Also, my username and password still don&#8217;t work.</p>
<p>While I wait for further details from Mike, I suss out the beginnings of a POC. The login page is XSS&#8217;able via its authentication fields. I can cull passwords via an XSS against it and then XMLHTTP&#8217;ing the password scraped from the DOM back.</p>
<p>Though, it is destructive on the username, but I think that can be worked around.</p>
<p><strong>20 minutes pass.</strong></p>
<p>I&#8217;m finally in the site. It was a matter of a &#8220;beta.&#8221; vs. &#8220;dev.&#8221; URL. I take a look at &#8220;Account Settings&#8221; and they&#8217;re kicking back the username and password there too in cleartext. So, the login page XSS doesn&#8217;t need any trickery to work around.</p>
<p>Their search page uses some odd search-and-replace mechanism on the query quoting. I can&#8217;t figure it out too much, but a simple XSS of:</p>
<blockquote>
<p>/search?q=%22%3E%3Cscript%3Ealert(1)%3C/script%3E</p>
</blockquote>
<p>Works just fine. But, I still want to find an injection hole in order to make something self-replicating.</p>
<p>The profile page is where they spent their lock-down time. Every field has aggressive HTML stripping and magic quotes applied. This makes for some ugly formatting bugs, but I can&#8217;t immediately push an XSS through there. The HTML filter is something along the lines of:</p>
<blockquote>
<p>regexp_replace(&#8221;\&lt;^\w*&gt;&#8221;, &#8220;&#8221;)</p>
</blockquote>
<p>I feel that there should be some trick to using magic quotes and their inconsistent use of stripslahes to bypass it all. Specifically, they strip on some output (profile page) and not on others (profile edit page). I&#8217;m surprised they just don&#8217;t use <a href="http://www.php.net/htmlspecialchars">htmlspecialchars</a> and be done with it.</p>
<p><strong>An hour passes.</strong></p>
<p>I called Mike to let him know I win. While I think my earlier XSS attacks were enough, I finally found a on-site modification. Changing the user&#8217;s name to a quote injected with an onload event worked. It triggers on all other users when they visit the Community Page too.</p>
<p>Does this mean I win a free trip to Boulder, and Munchy&#8217;z tomorrow? Sweet deal.</p>
<blockquote>
<p><em>This was first posted 2007-07-06 but taken down because EventVue was nascent. It&#8217;s back now, for keepsies.</em></p>
</blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/shipqc.wordpress.com/80/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/shipqc.wordpress.com/80/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shipqc.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shipqc.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shipqc.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shipqc.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shipqc.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shipqc.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shipqc.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shipqc.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shipqc.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shipqc.wordpress.com/80/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ship.quadhome.com&blog=3711724&post=80&subd=shipqc&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ship.quadhome.com/2008/04/13/the-challenge-from-denver/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/quadhome-128.jpg" medium="image">
			<media:title type="html">Quad</media:title>
		</media:content>
	</item>
		<item>
		<title>Wide Finder: Analysis?</title>
		<link>http://ship.quadhome.com/2007/11/05/wide-finder-analysis/</link>
		<comments>http://ship.quadhome.com/2007/11/05/wide-finder-analysis/#comments</comments>
		<pubDate>Mon, 05 Nov 2007 20:30:53 +0000</pubDate>
		<dc:creator>Scott Robinson</dc:creator>
		
		<category><![CDATA[think]]></category>

		<category><![CDATA[wide finder]]></category>

		<guid isPermaLink="false">http://ship.quadhome.com/posts/wide_finder_models/</guid>
		<description><![CDATA[Tim Bray’s response to the suggestion of analysis for the Wide Finder Results is “Are you kidding me!?!? Getouttahere. Maybe someday.”
I’m only barely braver.
People hours are more expensive than computer hours. Tim includes the lines of code metric, and the average elapsed wall-clock for each implementation. Let’s use division!



Name
Language
Elapsed
LoC
LoC per Elapsed
Model




     [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Tim Bray’s response to the suggestion of analysis for the <a href="http://www.tbray.org/ongoing/When/200x/2007/10/30/WF-Results" title="Results">Wide Finder Results</a> is “Are you kidding me!?!? Getouttahere. Maybe someday.”</p>
<p>I’m only barely braver.</p>
<p>People hours are more expensive than computer hours. Tim includes the lines of code metric, and the average elapsed wall-clock for each implementation. Let’s use division!</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Language</th>
<th>Elapsed</th>
<th>LoC</th>
<th>LoC per Elapsed</th>
<th>Model</th>
</tr>
</thead>
<tbody>
<tr>
        </tr>
<tr>
<td>clv5</td>
<td>Gawk</td>
<td>46.73</td>
<td>24</td>
<td>0.51</td>
<td>Serial</td>
</tr>
<tr>
<td>wf_p</td>
<td>Ruby</td>
<td>50.16</td>
<td>39</td>
<td>0.78</td>
<td>Map-Reduce</td>
</tr>
<tr>
<td>wf-2</td>
<td>Python</td>
<td>41.04</td>
<td>38</td>
<td>0.93</td>
<td>Map-Reduce</td>
</tr>
<tr>
<td>wf-Heikkinen</td>
<td>OCaml</td>
<td>49.69</td>
<td>110</td>
<td>2.21</td>
<td>Serial</td>
</tr>
<tr>
<td>wf-Fernandez</td>
<td>OCaml</td>
<td>39.17</td>
<td>124</td>
<td>3.17</td>
<td>Serial</td>
</tr>
<tr>
<td>tbray5</td>
<td>Erlang</td>
<td>20.74</td>
<td>76</td>
<td>3.66</td>
<td>Message Passing</td>
</tr>
<tr>
<td>tbray9(128)</td>
<td>Erlang</td>
<td>21.58</td>
<td>119</td>
<td>5.51</td>
<td>Message Passing</td>
</tr>
<tr>
<td>wf-block</td>
<td>OCaml</td>
<td>18.99</td>
<td>144</td>
<td>7.58</td>
<td>Serial</td>
</tr>
<tr>
<td>wf-6(2)</td>
<td>Python</td>
<td>16.91</td>
<td>137</td>
<td>8.1</td>
<td>Scatter-Gather</td>
</tr>
</tbody>
</table>
<p>Let&#8217;s assume less lines of code = easier to understand. Let&#8217;s also assume that parallel processing concepts are hard to learn.</p>
<p>Then it seems Map-Reduce models are maturing well. Thank Google for popularizing that.</p>
<p>Odd, though. Erlang&#8217;s model of message passing is older. But, I hear there are weaknesses in its standard library?</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/shipqc.wordpress.com/81/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/shipqc.wordpress.com/81/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shipqc.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shipqc.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shipqc.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shipqc.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shipqc.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shipqc.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shipqc.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shipqc.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shipqc.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shipqc.wordpress.com/81/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ship.quadhome.com&blog=3711724&post=81&subd=shipqc&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ship.quadhome.com/2007/11/05/wide-finder-analysis/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/quadhome-128.jpg" medium="image">
			<media:title type="html">Quad</media:title>
		</media:content>
	</item>
		<item>
		<title>NSA Hookups</title>
		<link>http://ship.quadhome.com/2007/10/12/nsa-hookups/</link>
		<comments>http://ship.quadhome.com/2007/10/12/nsa-hookups/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 03:54:01 +0000</pubDate>
		<dc:creator>Scott Robinson</dc:creator>
		
		<category><![CDATA[todo]]></category>

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

		<guid isPermaLink="false">http://ship.quadhome.com/posts/nsa_sex_20/</guid>
		<description><![CDATA[Last week, while bored in morning class, I had a brainstorm for a humorous personal ad. I wrote it up and posted it on the only worthwhile classified service: Craigslist. Then, I started surfing around the rest of the Pullman section.
I had never visited before.
Unsurprisingly, there were a few postings in the women seeking men. [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Last week, while bored in morning class, I had a brainstorm for a <a href="http://pullman.craigslist.org/stp/439336615.html" title="Platonic sleeping buddy for one semester. - m4w - 25">humorous personal ad</a>. I wrote it up and posted it on the only worthwhile classified service: <a href="http://craigslist.org/" title="craigslist">Craigslist</a>. Then, I started surfing around the rest of the <a href="http://pullman.craigslist.org/" title="pullman / moscow">Pullman section</a>.</p>
<p>I had never visited before.</p>
<p>Unsurprisingly, there were a few postings in the <em>women seeking men</em>. And barely a handful of postings were in the <em>men seeking women</em> personals. But, surprisingly, the <em>casual encounters</em> sections were full of lonely hearts. Or, more accurately, lonely beds.</p>
<p>I have read articles about websites where people hookup. But, I had assumed this was a matter of statistics - there are always a few crazies on the Internet. But, if the tiny Pullman section of Craigslist was so depraved&#8230; I checked Seattle and Los Angeles.</p>
<p>Thus my mind was blown.</p>
<p>Every metropolitan area had far more &#8220;no strings attached&#8221; sex postings than anything of a romantic quality. And, every advertisement was so straight to the point. &#8220;I&#8217;m blah blah blah. You be somewhere in the range of blah blah blah. Respond with a picture and you&#8217;ll get mine.&#8221; No beating around the bush.</p>
<p>At this point, I wondered why the heck are people posting these to Craigslist? I googled for the obvious terms of &#8220;hookup&#8221;, &#8220;nsa sex&#8221; and &#8220;booty call.&#8221; Several Google Adwords campaigns later, I realized there were only a few websites catering to this sort of thing. And I also realized they are totally messing up their market.</p>
<p>Every one of these websites wanted a person to sign up, put in a large number of details, and in general put themselves out there before ever having the opportunity to reach out and touch somebody. I didn&#8217;t even check the ones that required a credit card. This explained why all these posts were on Craigslist - it&#8217;s free and simple.</p>
<p>I know I can beat that.</p>
<p>So, imagine a website that opens up to a sign-up page. It asks for an e-mail address, zip code, and a few body characteristics. After confirming your address, it asks you for what body characteristics you&#8217;re looking - an age range, race check-boxes, and height/weight seem good enough for version one. Then, around lunch-time, you receive an e-mail saying &#8220;50 matches found, cutie.&#8221;</p>
<p>It needs to be &#8220;cutie&#8221; to let you know the website is hardcore.</p>
<p>A list of profiles, <em>maybe</em> with one sentence taglines, appears. You then can click &#8220;OK&#8221; or &#8220;No Way!&#8221; for each one. If two people&#8217;s &#8220;OK&#8221;s match, they&#8217;re connected and able to send text and pictures to each other. This gives six hours to arrange a hookup.</p>
<p>At midnight, the coach turns back into a Pumpkin - all profiles you didn&#8217;t match up with are cleared. Any matches with communications are then able to be rated: &#8220;Call for a Good Time&#8221; or &#8220;SEXUAL PREDATOR.&#8221; Clearly, the votes exist to bias these people in future rounds.</p>
<p><a href="http://quadhome.livejournal.com/82230.html" title="A simple either-or test for websites.">Web 2.0 wins again.</a></p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/shipqc.wordpress.com/82/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/shipqc.wordpress.com/82/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/shipqc.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/shipqc.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/shipqc.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/shipqc.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/shipqc.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/shipqc.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/shipqc.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/shipqc.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/shipqc.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/shipqc.wordpress.com/82/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ship.quadhome.com&blog=3711724&post=82&subd=shipqc&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://ship.quadhome.com/2007/10/12/nsa-hookups/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/quadhome-128.jpg" medium="image">
			<media:title type="html">Quad</media:title>
		</media:content>
	</item>
	</channel>
</rss>