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

<channel>
	<title>newsprint fray</title>
	<atom:link href="http://www.newsprint-fray.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.newsprint-fray.com</link>
	<description></description>
	<lastBuildDate>Fri, 05 Feb 2010 00:21:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>more hip visualizations, part 0_1</title>
		<link>http://www.newsprint-fray.com/2010/02/04/more-hip-visualizations-part-0_1/</link>
		<comments>http://www.newsprint-fray.com/2010/02/04/more-hip-visualizations-part-0_1/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 00:21:57 +0000</pubDate>
		<dc:creator>pam</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[data visualization]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tragically hip]]></category>

		<guid isPermaLink="false">http://www.newsprint-fray.com/?p=95</guid>
		<description><![CDATA[A while back, I started messing around with data visualization stuff, and came up with a chloropleth North American map that attempted to show the places the Tragically Hip played most often. I now have a slightly shinier and more granular map that shows cities, which is step 0.1 on the way to glory. Not [...]]]></description>
			<content:encoded><![CDATA[<p>A while back, I started messing around with data visualization stuff, and came up with a <a href="http://www.newsprint-fray.com/2009/11/23/data-visualizations-and-the-tragically-hip-part-0/">chloropleth North American map</a> that attempted to show the places the Tragically Hip played most often. I now have a slightly shinier and more granular map that shows cities, which is step 0.1 on the way to glory. Not that I have any idea what constitutes &#8216;glory&#8217; in this instance, but I&#8217;m told that life is about the journey, not the destination.</p>
<p>Once again, I started with the [admittedly unreliable] <a href="http://thehip.com/archive/index.html?PA=8">show archive on the Hip&#8217;s site</a>. (Actually, I started with the .csv I generated last time, but whatever. That&#8217;s the data source. It&#8217;s still only North American shows, but I think it&#8217;d be easy enough to extend to the rest of them.) To get the shiny googlemap with markers for places they&#8217;ve played, I came up with the following steps:</p>
<ol>
<li> Pull a list of cities &#038; states/provinces out of the csv.
<li> Ask google for the lat/lng coordinates of those cities.
<li> Turn said coordinates into xml tags.
<li> Feed the xml into googlemaps and get a marked map.
</ol>
<p>This went way better than my experiments last time, but there&#8217;s a lot I still want to do with this map to make it more <s>useful</s> interesting. It&#8217;s still some lazy, sloppy code, but here it is anyway.</p>
<p>Step one: get a list of cities to look up. </p>
<pre class="brush: python;">
queries = []

reader = csv.reader(open('concerts.csv'), delimiter=&quot;,&quot;)
for row in reader:
    if row[4].strip() in ['United States', 'Canada']:
        city = row[2] + &quot;+&quot; + row[3]
        queries.append(city)

locales = set(queries)
</pre>
<p>So that gives us a list of unique cities. (I may want to know that they&#8217;ve played Toronto 1938459 times or whatever, but I don&#8217;t need to look up Toronto&#8217;s coordinates more than once.) The way the geocode api works is that you pass in a URL with a bunch of parameters in the query string, and then it returns the coordinates in whatever format you&#8217;ve requested. So the next step is to set up all the junk to build those URLs.</p>
<pre class="brush: python;">
scheme = 'http'
netloc = 'maps.google.com'
path = '/maps/geo'
params = ''
fragment = ''
query_dict =   {'output': 'csv',
                'sensor': 'false',
                'key': 'REDACTED',
                'q': '',}

all_query_strings = []
for city in locales:
    query_dict['q'] = city
    newqs = urllib.urlencode(query_dict)
    all_query_strings.append(newqs)

all_urls = []
for place_qs in all_query_strings:
    url = urlunparse((scheme, netloc, path, params, place_qs, fragment))
    all_urls.append(url)
</pre>
<p>Yeah, I probably should have used list comprehensions there, but I tend to write those when I&#8217;m refactoring stuff. The first pass at something tends to be step by rudimentary step. At any rate, all_urls is now a list of URLs to give to google, which is step two.</p>
<pre class="brush: python;">
f = open('coords.csv', 'wb')

# using regular file handling instead of the csv module because i am lazy
# and google sends back strings.
h = httplib2.Http()
for url in all_urls:
    resp, content = h.request(url)
    f.write(content)
    f.write('\n')
    time.sleep(1)
f.close()
</pre>
<p>There&#8217;s a limit to how many requests you can send in a given time period, but I don&#8217;t know what that limit is and am not in any hurry. Also, I should only have to run this once, so I&#8217;m not uptight about that one-second sleep in there. At any rate, I now have a csv called coords.csv that looks like this:</p>
<pre class="brush: plain;">
200,4,28.3936186,-81.5386842
200,4,32.9911550,-117.2711481
</pre>
<p>Etc. The format is: response code, accuracy, latitude, longitude. Now I want to turn all of that into xml, which is just straight-up string interpolation.</p>
<pre class="brush: python;">
all_xml = open('coords.xml', 'wb')
reader = csv.reader(open('coords.csv'), delimited=&quot;,&quot;)
for row in reader:
    latitude = row[2]
    longitude = row[3]
    xml_tag = &quot;&lt;marker lat='%s' lng='%s'/&gt;\n&quot; % (latitude, longitude, )
    all_xml.write(xml_tag)
all_xml.close()
</pre>
<p>And that&#8217;s pretty much that. Add in the other xml stuff to make sure it&#8217;s a valid xml document, and then call the whole thing from an html file with some canned javascript.</p>
<pre class="brush: xml;">
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
  &lt;head&gt;
    &lt;script src=&quot;http://maps.google.com/maps?file=api&amp;amp;v=2&amp;amp;key=REDACTED&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;

    function initialize() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById(&quot;map_canvas&quot;));
        map.setCenter(new GLatLng(37, -92), 4);
        map.setUIToDefault();

        GDownloadUrl(&quot;coords.xml&quot;, function(data) {
          var xml = GXml.parse(data);
          var markers = xml.documentElement.getElementsByTagName(&quot;marker&quot;);
          for (var i = 0; i &lt; markers.length; i++) {
            var point = new GLatLng(parseFloat(markers[i].getAttribute(&quot;lat&quot;)),
                                    parseFloat(markers[i].getAttribute(&quot;lng&quot;)));
            map.addOverlay(new GMarker(point));
          }
        });
      }
    };
    &lt;/script&gt;
  &lt;/head&gt;
  &lt;body onload=&quot;initialize()&quot; onunload=&quot;GUnload()&quot;&gt;
    &lt;div id=&quot;map_canvas&quot; style=&quot;width: 1000px; height: 600px&quot;&gt;&lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</pre>
<p><a href="http://www.newsprint-fray.com/hip/maptest.html" alt="google map with locations of hip shows">Et voilá.</a> An unuseful map of unlabeled markers, some of which are incorrect (like, why is there one in the Cayman Islands?). Having the coordinates, though, opens up a lot of possibilities for future awesomeness, which I&#8217;m sure someone else will come up with. My own current thoughts involve things like grouping the markers by year (or possibly by tour) and let people turn them on and off; and one marker per show would be better than one marker per city (although, in that case, do I stick with city markers and just say they&#8217;ve played Toronto a lot, or do I do the data massaging necessary to get coordinates for and show Lee&#8217;s Palace vs the Horseshoe vs the ACC?); and some way to make it collaborative and interactive would be completely amazing. Like, there would be one giant hipmap and if someone were to be logged into their google account, they could click on a marker for a show they&#8217;ve attended and add their info and their two cents. And who knows what I&#8217;m going to do about setlists. Something, something, something, someday, maybe.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-center">
<ul class="socials">
		<li class="sexy-mail">
			<a href="mailto:?subject=%22more%20hip%20visualizations%2C%20part%200_1%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22A%20while%20back%2C%20I%20started%20messing%20around%20with%20data%20visualization%20stuff%2C%20and%20came%20up%20with%20a%20chloropleth%20North%20American%20map%20that%20attempted%20to%20show%20the%20places%20the%20Tragically%20Hip%20played%20most%20often.%20I%20now%20have%20a%20slightly%20shinier%20and%20more%20granular%20map%20that%20shows%20cities%2C%20which%20is%20step%200.1%20on%20the%20way%20to%20glory%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://www.newsprint-fray.com/2010/02/04/more-hip-visualizations-part-0_1/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=more+hip+visualizations%2C+part+0_1+-+http://b2l.me/fj98f+(via+@catechism)" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.newsprint-fray.com/2010/02/04/more-hip-visualizations-part-0_1/&amp;title=more+hip+visualizations%2C+part+0_1" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.newsprint-fray.com/2010/02/04/more-hip-visualizations-part-0_1/&amp;t=more+hip+visualizations%2C+part+0_1" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.newsprint-fray.com/2010/02/04/more-hip-visualizations-part-0_1/&amp;title=more+hip+visualizations%2C+part+0_1" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.newsprint-fray.com/2010/02/04/more-hip-visualizations-part-0_1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>there&#8217;s music out there laying in wait</title>
		<link>http://www.newsprint-fray.com/2009/12/22/theres-music-out-there-laying-in-wait/</link>
		<comments>http://www.newsprint-fray.com/2009/12/22/theres-music-out-there-laying-in-wait/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 18:40:18 +0000</pubDate>
		<dc:creator>pam</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[failing-at-stats]]></category>
		<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://www.newsprint-fray.com/?p=89</guid>
		<description><![CDATA[A few months ago, my external hard drive died. It had all my music on it, nearly ten years of accumulated mp3s from various sources: ripping my own collection, music from my friends, buying downloads from various sources, those glorious months in 2002 when eMusic gave you unlimited downloads, and almost certainly a few things [...]]]></description>
			<content:encoded><![CDATA[<p>A few months ago, my external hard drive died. It had all my music on it, nearly ten years of accumulated mp3s from various sources: ripping my own collection, music from my friends, buying downloads from various sources, those glorious months in 2002 when eMusic gave you unlimited downloads, and almost certainly a few things that were torrented. It was a pretty devastating loss, really; much of it is easy enough to find again, but some of my favorite things were lost to the ether and I haven&#8217;t been able to get them back.</p>
<p>I tried to look on the bright side, though; organizing my itunes is always this horrible ordeal and it&#8217;s never finished and there were a few months that I didn&#8217;t really listen to music because the mere IDEA of opening my itunes gave me anxiety attacks. (You know the ones: HOW DO WE TAG THE TAGS?!) So declaring itunes bankruptcy seemed like an okay idea! I could pull in the album I wanted to listen to right then, make sure the metadata was okay, listen, move on. That had actually been going fairly well, even if I couldn&#8217;t necessarily put my hands on some rare b-side from back when there were actualfax b-sides.</p>
<p>&#8230;and then I started listening to Hip shows. I have maybe 170 right now, which is not a lot compared to the hardcore people who have been doing this for a long time, but seems ludicrous to people who don&#8217;t do it. And I was digging through my itunes the other night, looking for a particular show, and realized that I have once again got to the point where I don&#8217;t recognize a lot of the stuff in my itunes, and the rest of it is the Hip. I joked with a friend that my itunes has started spawning new music again, and he laughed at me. [We have a running joke that my itunes is some kind of musical font, because somehow it is always full of stuff I do not recognize and have never listened to, and sometimes I find it and am like, okay, what the hell is THIS and where did it even come from? I mean, I download stuff, yeah, but it's not like I have told my computer to just go download every mp3 on the internet, but sometimes I feel like that's exactly what it's done.] Then he related a conversation he had with some of his buddies about how most people have around 600 songs digitally available and then probably a handful of albums that haven&#8217;t been ripped in some manner. He has around 7,000, and his friends felt this was a LOT of music. I felt it was probably about average, and so I decided to ask the people I know and tally results.</p>
<p>I&#8217;m pretty much ready to declare the experiment over, because the average has now been holding steady for the last 20 people I&#8217;ve entered, even when their answer consists of a screenshot of a music folder, which is on its own 1-tb drive and contains 52,000+ songs and includes no boots or shows. Commercial releases only!</p>
<p>After that long-winded and probably boring explanation, here are the results:</p>
<p><b>total respondents:</b> 56<br />
<b>total songs:</b> 527,168<br />
<b>low answer:</b> 0<br />
<b>high answer:</b> 52,760<br />
<b>average song count: 9,413<br />
median song count: 5,679<br />
throwing out the freaks: 5,391</b> (this is the average of respondents who have fewer than 20,000 songs; it&#8217;s close to the median, which a math teacher informed me was the better number to use as an indicator anyway)<br />
<b><10,000 songs:</b> 43 people<br />
<b>10-20,000 songs:</b> 5 people<br />
<b>>20,000 songs:</b> 8 people</p>
<p>Responses collected by checking out all the shared itunes folders at work, asking twitter, asking LJ/DW, and asking on the hipbase (the Tragically Hip fan forum, which I expected to skew the results more than it actually did &#8212; I figured people there were likely to have a lot of music, and unlikely to have it all digitized; in the end, it was a wash).</p>
<p>The caveats here are, of course, huge. Some people answered with the size of their collection, and so I divided it by 6 megs to get a song count that is probably wrong. Many people estimated their answers. Many people told me that they have a lot of stuff that isn&#8217;t ripped; a few have literal rooms full of vinyl that has never been digitized. I got answers about ipod vs hard drive; work vs home; hard drive vs music server. In those cases, I used the highest number, because I figured that&#8217;s the one that more accurately represented the answer to my [extremely poorly worded] question about how much digital music is available to people for listening. Some people gave range estimates; I took the middle number in that case.</p>
<p>For a while it was looking as if most people either had fewer than 10,000 songs or more than 20,000 songs; there weren&#8217;t a lot of people in between. That settled out a bit, but it&#8217;s the reason for the breakdown in the number of people with n songs. Many of the people I would consider music geeks didn&#8217;t have too many songs digitized, but made a point to say, &#8220;this isn&#8217;t even close to my entire music collection.&#8221;</p>
<p>So! I have drawn the following conclusions:</p>
<ul>
<li>I was right.</p>
<li>My collection is totally and completely reasonable.</ul>
<p>Nothing like bad stats and terrible science to validate my position! \o/</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-center">
<ul class="socials">
		<li class="sexy-mail">
			<a href="mailto:?subject=%22there%27s%20music%20out%20there%20laying%20in%20wait%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22A%20few%20months%20ago%2C%20my%20external%20hard%20drive%20died.%20It%20had%20all%20my%20music%20on%20it%2C%20nearly%20ten%20years%20of%20accumulated%20mp3s%20from%20various%20sources%3A%20ripping%20my%20own%20collection%2C%20music%20from%20my%20friends%2C%20buying%20downloads%20from%20various%20sources%2C%20those%20glorious%20months%20in%202002%20when%20eMusic%20gave%20you%20unlimited%20downloads%2C%20and%20al%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://www.newsprint-fray.com/2009/12/22/theres-music-out-there-laying-in-wait/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=there%27s+music+out+there+laying+in+wait+-+http://b2l.me/bzyep+(via+@catechism)" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.newsprint-fray.com/2009/12/22/theres-music-out-there-laying-in-wait/&amp;title=there%27s+music+out+there+laying+in+wait" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.newsprint-fray.com/2009/12/22/theres-music-out-there-laying-in-wait/&amp;t=there%27s+music+out+there+laying+in+wait" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.newsprint-fray.com/2009/12/22/theres-music-out-there-laying-in-wait/&amp;title=there%27s+music+out+there+laying+in+wait" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.newsprint-fray.com/2009/12/22/theres-music-out-there-laying-in-wait/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>you&#8217;ll be serving the song</title>
		<link>http://www.newsprint-fray.com/2009/12/02/youll-be-serving-the-song/</link>
		<comments>http://www.newsprint-fray.com/2009/12/02/youll-be-serving-the-song/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 15:16:24 +0000</pubDate>
		<dc:creator>pam</dc:creator>
				<category><![CDATA[personal]]></category>
		<category><![CDATA[tragically hip]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://www.newsprint-fray.com/?p=80</guid>
		<description><![CDATA[This isn&#8217;t a personal blog, so I don&#8217;t really say much about what I&#8217;m up to, but I found a few pictures from the Amsterdam concert I went to last week. And I am actually in one of them! I always appreciate photographic evidence that I&#8217;m not making up my entire life.
These photos on flickr, [...]]]></description>
			<content:encoded><![CDATA[<p>This isn&#8217;t a personal blog, so I don&#8217;t really say much about what I&#8217;m up to, but I found a few pictures from the Amsterdam concert I went to last week. And I am actually in one of them! I always appreciate photographic evidence that I&#8217;m not making up my entire life.</p>
<p><a href="http://www.flickr.com/photos/ritskes/">These photos on flickr</a>, by Henk Ritskes, are all really good, but here are the two I actually care about.</p>
<p><a href="http://www.flickr.com/photos/ritskes/4156431076/"><img src="http://www.newsprint-fray.com/hip/prestorm-paradiso.jpg" width="500" /></a></p>
<p>This is early in the show, and nothing is going on right there, so it&#8217;s pretty calm. Just over the watermark, you can see my face right at Gord&#8217;s feet, my arms on the stage, looking up. I&#8217;m not kneeling; I&#8217;m on my toes. I look like I&#8217;m about eight years old. I didn&#8217;t feel like it at the time, but I look ridiculously tiny in that photograph. Note that I&#8217;m surrounded by guys who are all much, much bigger than I am.</p>
<p><img src="http://www.newsprint-fray.com/hip/pit-paradiso.jpg" width="500" /></p>
<p>This is the closing song (&#8216;Blow at High Dough,&#8217; for those of you who care about such things), a shot of the same area of the pit, and it&#8217;s pretty easy to imagine me curled against the stage, trying to protect my head but mostly just getting kicked around as the crowd presses in. It wasn&#8217;t a 90s-style NIN pit or anything (I was in those, too, and came out hurting), but it got pretty rough for me. But note that I am not complaining! I&#8217;m small and by myself and deserve what I get for standing there. I wouldn&#8217;t change a thing. Well, okay, maybe I would have had a little less beer dumped down my back.</p>
<p>There was a moment in this show, during &#8216;Locked in the Trunk of a Car,&#8217; which starts off a little slow, a little quiet, and the room was mostly dark. And then the lights flashed on, bright glaring white shot through with smoke, and the drums kicked in, low and heavy and driving, and I looked to my left and the pit was this huge writhing mass, and people were hanging over the rail of the balconies, and it went up and back and on forever, <i>alive</i>. I thought, &#8220;yes,&#8221; and then I didn&#8217;t think anymore for a long time.</p>
<p>And that is pretty much what I have to say.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-center">
<ul class="socials">
		<li class="sexy-mail">
			<a href="mailto:?subject=%22you%27ll%20be%20serving%20the%20song%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22This%20isn%27t%20a%20personal%20blog%2C%20so%20I%20don%27t%20really%20say%20much%20about%20what%20I%27m%20up%20to%2C%20but%20I%20found%20a%20few%20pictures%20from%20the%20Amsterdam%20concert%20I%20went%20to%20last%20week.%20And%20I%20am%20actually%20in%20one%20of%20them%21%20I%20always%20appreciate%20photographic%20evidence%20that%20I%27m%20not%20making%20up%20my%20entire%20life.%0D%0A%0D%0AThese%20photos%20on%20flickr%2C%20by%20Hen%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://www.newsprint-fray.com/2009/12/02/youll-be-serving-the-song/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=you%27ll+be+serving+the+song+-+http://b2l.me/a279e+(via+@catechism)" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.newsprint-fray.com/2009/12/02/youll-be-serving-the-song/&amp;title=you%27ll+be+serving+the+song" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.newsprint-fray.com/2009/12/02/youll-be-serving-the-song/&amp;t=you%27ll+be+serving+the+song" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.newsprint-fray.com/2009/12/02/youll-be-serving-the-song/&amp;title=you%27ll+be+serving+the+song" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.newsprint-fray.com/2009/12/02/youll-be-serving-the-song/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>data visualizations and the tragically hip, part 0</title>
		<link>http://www.newsprint-fray.com/2009/11/23/data-visualizations-and-the-tragically-hip-part-0/</link>
		<comments>http://www.newsprint-fray.com/2009/11/23/data-visualizations-and-the-tragically-hip-part-0/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 19:16:12 +0000</pubDate>
		<dc:creator>pam</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[data visualization]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tragically hip]]></category>

		<guid isPermaLink="false">http://www.newsprint-fray.com/?p=63</guid>
		<description><![CDATA[The very short background to this is that I love data visualizations, and I love the Tragically Hip. So when I saw this tutorial on making chloropleth maps with python, I thought, hey, I can totally do that. I&#8217;ve been wanting to mess around with data visualization stuff for a while now, and this seemed [...]]]></description>
			<content:encoded><![CDATA[<p>The very short background to this is that I love data visualizations, and I love the Tragically Hip. So when I saw <a href="http://flowingdata.com/2009/11/12/how-to-make-a-us-county-thematic-map-using-free-tools/">this tutorial on making chloropleth maps with python</a>, I thought, hey, I can totally do that. I&#8217;ve been wanting to mess around with data visualization stuff for a while now, and this seemed like a pretty good place to start. I decided I wanted to generate a map of North America showing me where the Hip has played most often. Seemed like a pretty simple and straightforward place to start.</p>
<p>First, I needed data, which I got from <a href="http://thehip.com/archive/index.html?PA=8">the Hip&#8217;s show archive</a>. I just pasted it into a text editor and did some find-and-replace to make it a .csv. I really thought that would be the hard part. Ha! </p>
<p>Next, I needed a map. The tutorial uses a US county map, but that wouldn&#8217;t work for this. First, Canada is not actually in the United States! Also, they do not have counties. They have ridings, but reliable Canadian sources tell me they only care about ridings during elections. So anyway, <a href="http://commons.wikimedia.org/wiki/File:BlankMap-USA-states-Canada-provinces,_HI_closer.svg">this North American map</a> is the one I ended up with.</p>
<p>If you read the first post I linked to, you will learn valuable information, such as the fact that the map has to be an .svg, which is a Scalable Vector Graphic, which is really XML. I hope you are now thinking, &#8220;oh god, will we have to parse XML?&#8221; Sadly, the answer is yes. Also, this particular map has shitty XML, which will make it all the more exciting.</p>
<p>But whatever! Just ignore that impending sense of dread and look at the map in a text editor. Each state/province/territory (henceforth SPT) has <a href="http://en.wikipedia.org/wiki/ISO_3166-2">an ISO-3166 code</a> assigned to it as an ID. So Illinois is US-IL, and Ontario is CA-ON. The csv I made lists city, SPT, and country, but not in handy ISO-3166 form, so I had to do something about that. I am not sure I really did the right thing, but here&#8217;s the code I wrote to do it.</p>
<pre class="brush: python;">
# read in the concert csv
concerts = [r for r in csv.reader(open('concerts.csv', 'r'))]

for show in concerts:
    if show[4].strip() == &quot;Canada&quot;:
        show[3] = &quot;CA-&quot; + &quot;%s&quot; % (show[3])
        # quebec's code is QC in iso-world
        if show[3] == &quot;CA-PQ&quot;:
            show[3] = &quot;CA-QC&quot;
    elif show[4].strip() == &quot;United States&quot;:
        show[3] = &quot;US-&quot; + &quot;%s&quot; % (show[3].upper())
</pre>
<p>This changes my csv from this:</p>
<pre class="brush: plain;">
11/07/2009,Landmark Theatre, Syracuse,NY,United States,TTH_SMT_20091107_1328
</pre>
<p>to this:</p>
<pre class="brush: plain;">
11/07/2009,Landmark Theatre, Syracuse,US-NY,United States,TTH_SMT_20091107_1328
</pre>
<p>I feel like there is a better way to do it, but that was the first solution that popped into my head, and it worked just fine. From there, I needed to figure out how often they played in a given SPT. I KNOW there is a better way to do this, but I stared at it for a few minutes before the laziness won out and I moved on. </p>
<pre class="brush: python;">
    north_american_shows = {}
    for show in concerts:
        # if the state's not already there, add it. the first time through,
        # it will never be there, so everything will be set to 0.
        if show[3] not in north_american_shows.keys():
            north_american_shows[show[3]] = 0

        # look, i know this is stupid. i don't care. just count, okay.
        if show[3] in north_american_shows.keys():
            frequency = north_american_shows[show[3]]
            north_american_shows[show[3]] = frequency + 1
</pre>
<p>As you can see, I first made an empty dictionary called north_american_shows, and then I ripped through the csv and gave my dict keys corresponding to all the ISO codes. I set all their initial values to zero. Then I went through AGAIN, and just incremented the values by one for every show they played in a given SPT. Printing out north_american_shows at this point gives something like this:</p>
<pre class="brush: python;">
{'': 11, 'BE': 1, 'US-NY': 83, 'US-PA': 33, 'US-TN': 3, ...}
</pre>
<p>I think I probably should have tried to make a dict that only used valid ISO codes as keys, instead of everything in that SPT column, and I probably should have just gone through the csv once, rather than twice. At any rate, this got me a usable dictionary that told me shocking things like mostly the Hip plays in Ontario. That piece of information, by the way, is also nicely conveyed by this:</p>
<p><a href="http://www.newsprint-fray.com/img/cities.png"><img src="http://www.newsprint-fray.com/img/cities_small.png" alt="word cloud" /></a></p>
<p>That is a word cloud I made in <a href="http://www.wordle.net/">wordle</a> in approximately 30 seconds by pasting in the &#8216;city&#8217; column from my csv. But let us not be deterred by the fundamental uselessness of our exercise! Probably I would never do anything at all if I let that stop me.</p>
<p>Anyway! We now have our data. A quick glance through it seemed to say I should break up the distribution like this:</p>
<pre class="brush: plain;">
0
1-5
6-10
11-20
21-50
51-75
76-100
100+
</pre>
<p>There is only once place they&#8217;ve played more than 100 shows (Ontario), and only a few in the 76-100 range, so more granularity than that didn&#8217;t make much sense to me. Of course, I know exactly nothing about statistics, so I could be wrong.</p>
<p>Time to pick out some colors. Here, I mostly just did what Flowing Data told me to and used <a href="http://colorbrewer2.org/">ColorBrewer</a>; I needed eight colors. (Actually, I ended up needing nine because the last color was white, so you couldn&#8217;t see the SPT delineations for places they&#8217;ve never played.)</p>
<p>After that, the fun part. I expected this to be pretty easy; I&#8217;m familiar with <a href="http://www.crummy.com/software/BeautifulSoup/">Beautiful Soup</a>, the parser used in the tutorial. All I needed to do was go through the XML, find a tag that carried one of my ISO codes as an ID, and then append a fill attribute to color the area based on my chosen color scheme/distribution. Unfortunately, Beautiful Soup did not deal at all well with the poor markup of the map; even just reading it in and then printing it out did all sorts of terrible things. I ended up having to use lxml, which I don&#8217;t really like (mostly because it&#8217;s hard to build, although that isn&#8217;t an issue on Snow Leopard, thank god). Here&#8217;s what I ended up with for this part of it:</p>
<pre class="brush: python;">
    colors = ['#EFEDF5', '#DADAEB', '#BCBDDC', '#9E9AC8', '#807DBA', '#6A51A3',
             '#54278F', '#3F007D']

    tree = etree.parse('map.svg')
    tags = tree.find('{http://www.w3.org/2000/svg}g')

    for tag in tags.iterdescendants():
        for a in tag.attrib.values():
            if re.match(r'(CA|US)\-.{2}', a):
                if a in north_american_shows.keys():
                    if north_american_shows[a] &gt; 100:
                        color_class = 7
                    elif north_american_shows[a] &gt; 75:
                        color_class = 6
                    elif north_american_shows[a] &gt; 50:
                        color_class = 5
                    elif north_american_shows[a] &gt; 20:
                        color_class = 4
                    elif north_american_shows[a] &gt; 10:
                        color_class = 3
                    elif north_american_shows[a] &gt; 5:
                        color_class = 2
                    else:
                        color_class = 1
                else:
                    color_class = 0

                color = colors[color_class]
                tag.set('fill', color)

    print etree.tostring(tree)
</pre>
<p>For whatever reason, I had to pass in the link and then the tag I was looking for. I have no idea why; a coworker had to tell me to do that (thanks, Nat!). Once I had the root tag, I iterated through all its descendants, looking for IDs that looked like an ISO code. I initially looked for ones that matched something in north_american_shows, but then I realized that wouldn&#8217;t quite get it done; because there are places they have never played, those places are not in the dict. Hence the regex and the if/else; I needed to find those, too, and set them to the color I chose for 0.</p>
<p>Once that was done, I ran:</p>
<pre class="brush: plain;">
$ python colourize.py &gt; hipmap.svg
</pre>
<p>And, amazingly enough, I have a map that shows me things I already knew. </p>
<p><img src="http://www.newsprint-fray.com/img/hipmap-small.png" alt="north american hip map"></p>
<p>The darker the purple, the more often they&#8217;ve played in that SPT. I&#8217;m pretty pleased with myself, even though this is the simplest possible visualization I could do and it took me a lot longer than I feel it should have. Seriously, I spent many days fighting with XML parsers, trying to get it figured out. But I&#8217;m definitely curious to know how the code could be better, because it&#8217;s obvious to me that it could be.</p>
<p>In the meantime, I think I&#8217;m going to try doing something with google maps, incorporating more granularity in terms of where they&#8217;ve played and on what tour. I&#8217;d also like to do something with setlists, but that data is a little harder to get into a useful format. It&#8217;s out there, for sure, thanks to fans more obsessive than I am, but it&#8217;s going to take me a while to figure out what I want to do and how I want to do it. </p>
<p>Before I do any of that, though, I&#8217;m going to go see some Hip concerts.</p>
<p>Oh, right. The full script, for completeness&#8217; sake:</p>
<pre class="brush: python;">
import csv
import re
from lxml import etree

def do_stuff():
    # okay. step one is to dump the csv into a list of lists.
    concerts = [r for r in csv.reader(open('concerts.csv', 'r'))]

    # so we have a list of lists. now we need the strings to be useful. while
    # you're in there, strip out any whitespace, because we hate whitespace
    # here in python land.
    for show in concerts:
        if show[4].strip() == &quot;Canada&quot;:
            show[3] = &quot;CA-&quot; + &quot;%s&quot; % (show[3])
            # fix the PQ/QC thing in the data
            if show[3] == &quot;CA-PQ&quot;:
                show[3] = &quot;CA-QC&quot;
        elif show[4].strip() == &quot;United States&quot;:
            show[3] = &quot;US-&quot; + &quot;%s&quot; % (show[3].upper())

    # okay, now we need to find out how often they play in a given place. so,
    # uh, let's build a dictionary.
    north_american_shows = {}
    for show in concerts:
        # if the state's not already there, add it. the first time through,
        # it will never be there, so everything will be set to 0.
        if show[3] not in north_american_shows.keys():
            north_american_shows[show[3]] = 0

        # look, i know this is stupid. i don't care. just count, okay.
        if show[3] in north_american_shows.keys():
            frequency = north_american_shows[show[3]]
            north_american_shows[show[3]] = frequency + 1

    colors = ['#EFEDF5', '#DADAEB', '#BCBDDC', '#9E9AC8', '#807DBA', '#6A51A3',
              '#54278F', '#3F007D']

    tree = etree.parse('map.svg')
    tags = tree.find('{http://www.w3.org/2000/svg}g')

    for tag in tags.iterdescendants():
        for a in tag.attrib.values():
            if re.match(r'(CA|US)\-.{2}', a):
                if a in north_american_shows.keys():
                    if north_american_shows[a] &gt; 100:
                        color_class = 7
                    elif north_american_shows[a] &gt; 75:
                        color_class = 6
                    elif north_american_shows[a] &gt; 50:
                        color_class = 5
                    elif north_american_shows[a] &gt; 20:
                        color_class = 4
                    elif north_american_shows[a] &gt; 10:
                        color_class = 3
                    elif north_american_shows[a] &gt; 5:
                        color_class = 2
                    else:
                        color_class = 1
                else:
                    color_class = 0

                color = colors[color_class]
                tag.set('fill', color)

    print etree.tostring(tree)

if __name__ == &quot;__main__&quot;:
    do_stuff()
</pre>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-center">
<ul class="socials">
		<li class="sexy-mail">
			<a href="mailto:?subject=%22data%20visualizations%20and%20the%20tragically%20hip%2C%20part%200%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22The%20very%20short%20background%20to%20this%20is%20that%20I%20love%20data%20visualizations%2C%20and%20I%20love%20the%20Tragically%20Hip.%20So%20when%20I%20saw%20this%20tutorial%20on%20making%20chloropleth%20maps%20with%20python%2C%20I%20thought%2C%20hey%2C%20I%20can%20totally%20do%20that.%20I%27ve%20been%20wanting%20to%20mess%20around%20with%20data%20visualization%20stuff%20for%20a%20while%20now%2C%20and%20this%20see%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://www.newsprint-fray.com/2009/11/23/data-visualizations-and-the-tragically-hip-part-0/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=data+visualizations+and+the+tragically+hip%2C+part+0+-+http://b2l.me/aqxyg+(via+@catechism)" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.newsprint-fray.com/2009/11/23/data-visualizations-and-the-tragically-hip-part-0/&amp;title=data+visualizations+and+the+tragically+hip%2C+part+0" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.newsprint-fray.com/2009/11/23/data-visualizations-and-the-tragically-hip-part-0/&amp;t=data+visualizations+and+the+tragically+hip%2C+part+0" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.newsprint-fray.com/2009/11/23/data-visualizations-and-the-tragically-hip-part-0/&amp;title=data+visualizations+and+the+tragically+hip%2C+part+0" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.newsprint-fray.com/2009/11/23/data-visualizations-and-the-tragically-hip-part-0/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>job opening and recruitment efforts</title>
		<link>http://www.newsprint-fray.com/2009/09/17/job-opening-and-recruitment-efforts/</link>
		<comments>http://www.newsprint-fray.com/2009/09/17/job-opening-and-recruitment-efforts/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 21:16:48 +0000</pubDate>
		<dc:creator>pam</dc:creator>
				<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.newsprint-fray.com/?p=58</guid>
		<description><![CDATA[My company, Leapfrog Online, is looking to hire a Python web developer. There&#8217;s more about the company and the tech team here, and details of the job itself here. I think our tech team is pretty cool, and we try hard (with high-level support) not to be dicks about using open-source tools. Which is to [...]]]></description>
			<content:encoded><![CDATA[<p>My company, Leapfrog Online, is looking to hire a Python web developer. There&#8217;s more about the company and the tech team <a href="http://www.joblink.tw/CtpR">here</a>, and details of the job itself <a href="http://www.leapfrogonline.com/careers.php">here</a>. I think our tech team is pretty cool, and we try hard (with high-level support) not to be dicks about using open-source tools. Which is to say: we use them and we try to give back to the community by sending our engineers to conferences (as attendees and presenters), sponsoring said conferences (we&#8217;ve sponsored PyCon and Windy City Rails in the past), submitting patches to the tools we use, and releasing our code when possible. So I think, tech-wise, it is a pretty good place to work.</p>
<p>Among the software and test engineers, though, I&#8217;m the only woman. We&#8217;re also a pretty white bunch of people. I often hear things like, &#8220;well, I&#8217;d hire a woman, but none apply!&#8221; And I raise my eyebrows and think, &#8220;well, where are you looking?&#8221; Our recruiting is poor, and we all admit it; we have one HR person who does almost all of it, and she knows very little about technology. Some of us will post a link on our blogs, if we have them, or on twitter, and that&#8217;s about it. We tend to have a problem finding qualified devs in general, let alone qualified devs from under-represented groups. But today I asked my VP about it, and he is totally behind the idea, and asked me to come up with some ideas about where we might focus our recruiting efforts to attract more female and minority applicants. </p>
<p>Any ideas? Please feel free to let me know in comments, or email me (zerbie at gmail), or send this around to any groups or lists you know about.</p>
<p>[ETA: There are some ideas in the comments to <a href="http://geekfeminism.org/2009/09/14/hiring-women/">this post on geekfeminism</a> that I plan to follow up on.]</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-center">
<ul class="socials">
		<li class="sexy-mail">
			<a href="mailto:?subject=%22job%20opening%20and%20recruitment%20efforts%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22My%20company%2C%20Leapfrog%20Online%2C%20is%20looking%20to%20hire%20a%20Python%20web%20developer.%20There%27s%20more%20about%20the%20company%20and%20the%20tech%20team%20here%2C%20and%20details%20of%20the%20job%20itself%20here.%20I%20think%20our%20tech%20team%20is%20pretty%20cool%2C%20and%20we%20try%20hard%20%28with%20high-level%20support%29%20not%20to%20be%20dicks%20about%20using%20open-source%20tools.%20Which%20is%20t%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://www.newsprint-fray.com/2009/09/17/job-opening-and-recruitment-efforts/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=job+opening+and+recruitment+efforts+-+http://e7t.us/0aa531+(via+@catechism)" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.newsprint-fray.com/2009/09/17/job-opening-and-recruitment-efforts/&amp;title=job+opening+and+recruitment+efforts" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.newsprint-fray.com/2009/09/17/job-opening-and-recruitment-efforts/&amp;t=job+opening+and+recruitment+efforts" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.newsprint-fray.com/2009/09/17/job-opening-and-recruitment-efforts/&amp;title=job+opening+and+recruitment+efforts" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.newsprint-fray.com/2009/09/17/job-opening-and-recruitment-efforts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>someone get me a command line</title>
		<link>http://www.newsprint-fray.com/2009/09/11/someone-get-me-a-command-line/</link>
		<comments>http://www.newsprint-fray.com/2009/09/11/someone-get-me-a-command-line/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 21:22:05 +0000</pubDate>
		<dc:creator>pam</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[diversity]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.newsprint-fray.com/?p=49</guid>
		<description><![CDATA[Over on the Diversity in Python list (on which I am largely lurking, for reasons both various AND sundry), the question was raised: What brought you to Python? When you got to the fork in the road, what made the The Python Way more attractive than all those other ways? The people? The projects? The [...]]]></description>
			<content:encoded><![CDATA[<p>Over on the <a href="http://mail.python.org/mailman/listinfo/diversity">Diversity in Python list</a> (on which I am largely lurking, for reasons both various AND sundry), the question was raised: What brought you to Python? When you got to the fork in the road, what made the The Python Way more attractive than all those other ways? The people? The projects? The <a href="http://djangopony.com/">Django pony</a> at the end of the rainbow? The assumption was that there was, somewhere, at some point, a decision that had to be made, and we pythonistas at least have that decision in common. After all, here we are. </p>
<p>Me, though, I never really made that decision. I went to journalism school (for what I believe is one of the only reasons people go to journalism school, which is to save the world). Yeah, while I was there, I built some websites and enjoyed it, but it was always a means to an end, always just another thing I could put on my resume for when I had to go out and get a real job. One of the almost-real jobs I had was at Playboy. I fell in with the programmer types on the pay site, and we stayed in touch, and when that internship was over, I went off to save the world. </p>
<p>Except that I didn&#8217;t have the stomach for world-saving. Working as a reporter in a courthouse on Chicago&#8217;s south side was grindingly, soul-crushingly depressing, and sometimes I still marvel that I came out of that alive. Illinois has the death penalty, and so I sat through murder trials that I still can&#8217;t talk about, and then sat through them all over again as people took the stand to explain why more death would make everything better. I realized that I could do it, if I wanted to; I could shut down the part of myself that threw up in the courthouse bathroom before calling the newsroom with my story. But I didn&#8217;t really like the person I would have had to become to do that, and so I walked away from hard-news journalism.</p>
<p>So then I thought, okay! Maybe science! Science can totally save the world! And anyway, mainstream reporting of the sciences often isn&#8217;t very good. So I did that for a while, working as a writer and editor for various scientific institutions and publications. It was fun and it was interesting and I loved going to work every day and learning new things and talking to amazing people and looking at experiments. </p>
<p>But in the end, I realized that I can&#8217;t write for a living. I can&#8217;t do it. It makes me insane, hollows out all the parts of myself I need to get through my day, leaves me empty and aching and scraped raw. Other people can do it &#8212; thank god &#8212; but I can&#8217;t. I can&#8217;t do deadlines, and I can&#8217;t do regular contributions to anything, and if I am to write, I have to do it on my own time and my own terms. I do, however, have to do it. </p>
<p>So, there I was, 20-something and lost, and those guys I&#8217;d fallen in with at Playboy (remember them?) had gone to a different company, and there was a part-time job opening for a contractor to come in and do straight black-box manual testing of websites. Okay, sure. I can totally click links, and I can blow my paycheck on ice cream and comic books, and everything will be super. Two things became clear quite quickly: One, they needed someone full-time, and two, clicking links is stupid. There must be a way to automate this. And there is! It&#8217;s called <a href="http://twill.googlecode.com/">twill</a>, and it&#8217;s written in python; what else do I need to know? Quick! Someone get me a command line.</p>
<p>And that gets me back to the beginning of this post: There wasn&#8217;t really a decision. I got a job, and I needed this tool to do my job, and here I am. It&#8217;s pretty nice here. I have the good fortune to work with many great pythonistas at my job, people to keep me interested and motivated and tell me when my ideas or code (or both) are full of shit. Many of them are active and involved with The Python Community.</p>
<p>When I put my roll-call for women in python, I really wasn&#8217;t sure what to expect. But the comments on that post, and conversations I&#8217;ve had about it have led me to believe that there are a lot more women using python than people think. But are we <i>in</i> python? Are we active and involved members of the community? Known and respected and liked (or, I suppose, loathed)? A few, yes, but not many. Why is that?</p>
<p>Me, I&#8217;m on the fringes. I could certainly become more involved if I were so inclined (and sometimes I am). But there are a few things keeping me where I am. </p>
<p>Communities are hard work. Participating is emotionally exhausting, and dev communities are largely based in mediums I don&#8217;t really enjoy all that much. I hate mailing lists. I swore off IRC sometime in the 90s. It drives me crazy to have to follow 270 different blogs and subscribe to RSS feeds for comments so I can follow conversations, or constantly refresh pages having discussions that I care about. Being in The Python Community (or, I assume, any dev community) is incredibly time-consuming, and I don&#8217;t have a lot of time. The Second Shift phenomenon is well-known, but for me, it&#8217;s more like my Fifth Shift.</p>
<p>And so, if I&#8217;m going to get involved, there need to be rewards. And there totally are. Support and encouragement for my projects. Answers to my questions. New friends. New ideas. New, better technologies. Cool software. Exciting travel opportunities and informative conferences. Possible job opportunities. The sheer joy of the thing itself, of a single, elegant line of code, of starting from nothing and building something cool, building something that works and that people can use and love and share. </p>
<p>I don&#8217;t know what other people get out of it. I assume others have similar reasons. (My straw poll on twitter largely confirmed this for me.)</p>
<p>But because I&#8217;m a woman, I get other stuff, too: Constant questions about where the other women are, sexist comments on this blog any time I post, demands on my patience and my time to answer questions about what I&#8217;m doing, how and why I&#8217;m doing it, what is this whole &#8220;feminism&#8221; thing all about anyway, what about the mens, and on and on and on. For me, wading into the python community ends up being only a little about python, and a lot about women &#8212; whether I want it that way or not.</p>
<p>Usually, I don&#8217;t. I announced at the last pycon that the first dude who asked me where were all the women was going to get punched in the face. I managed to largely avoid the conversation, but it was hard work, and it kept me pretty cut off. I stuck with the guys I already knew, and I didn&#8217;t go to any parties or meet many new people or do much of the social stuff that makes pycon so awesome. I still had a good time, but it was a very controlled good time.</p>
<p>To be an active part of any community, python included, you have to want it. You have to love it and sometimes you have to hate it, but mostly, you have to <i>want</i> whatever it is you get out of it. And if you&#8217;re part of an under-represented group and you want to play, you&#8217;d better also want to save the world, because that&#8217;s the assumption everyone is going to make. You&#8217;re going to be the token, the anomaly, the exception to the rule, and people are going to ask you about it, and heaven help you if you don&#8217;t want to discuss it. They&#8217;ll call you names under their breath (affectionately) and roll their eyes (fondly) and pat you on the head (sweetly) and ask why you&#8217;re so emotional (seriously).</p>
<p>It&#8217;s hard, is what I&#8217;m saying. </p>
<p>Is it worth it? I don&#8217;t know. I cannot and will not speak for other women. For me, sometimes, yes, it&#8217;s worth it. I&#8217;m not opposed to work, and I neither expect nor want everything to be easy. But sometimes it&#8217;s not worth it. Sometimes I tell all my mailing lists to stop sending me mail and I quit out of my RSS reader and I pause twitter until I can breathe again. Maybe I knit a hat or read a book or study French or write a story or go to a play or hang out with my friends. Sometimes I pull back for a day, sometimes for a month. There&#8217;s no shortage of activity or community in my life, just a shortage of sleep.</p>
<p>I keep losing track of the point of this post. What am I even trying to say? I&#8217;m not sure I know. Communities are difficult. Being actively involved with python is a lot of work, all those lists and feeds and conferences and blog posts to write and conversations to have. It&#8217;s not remotely surprising to me that there are so many women using python without engaging with the community, awesome as it is. Maybe they use it at work, like I do, and they can get support and encouragement and help from coworkers. They can read everyone else&#8217;s blog posts for fresh ideas and new technologies. They use python like they use Firefox, as just another tool to get the job done, whatever the job may be. Maybe they have all the friends they need. Maybe they&#8217;d rather spend their time writing software than answering questions about feminism (or any other *ism). Maybe they don&#8217;t want it badly enough. I can&#8217;t hold that against anyone; I&#8217;m often in that boat. I&#8217;m sure everyone is, about something.</p>
<p>So if my point is (and I am pretty sure this is my point!) that dev communities are difficult and time-consuming, and moreso for under-represented groups, what can we do about it? [Please note that I am completely uninterested in explaining why we should care, and I'm not going to engage with anyone who thinks under-represented groups should just stay under-represented.] And that&#8217;s where, I&#8217;m afraid, I&#8217;m out of words. The diversity list is kicking around some pretty good ideas about this, like <a href="http://python-open-mike.posterous.com/">Python Open Mike</a> for people who don&#8217;t want to (or can&#8217;t) maintain their own blogs. So that&#8217;s awesome. Is <a href="http://wiki.python.org/moin/">the wiki</a> useful enough? Should there be better newbie guides? Is there some kind of This Week In Python thing that people can subscribe to for an idea of what&#8217;s going on in the community without drowning in Planet Python? Would that even be useful? Are there community-building and maintaining technologies out there that are better than mailing lists and irc channels and far-flung blogs? What else can we do to make engaging less of a pain in the ass?</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-center">
<ul class="socials">
		<li class="sexy-mail">
			<a href="mailto:?subject=%22someone%20get%20me%20a%20command%20line%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22Over%20on%20the%20Diversity%20in%20Python%20list%20%28on%20which%20I%20am%20largely%20lurking%2C%20for%20reasons%20both%20various%20AND%20sundry%29%2C%20the%20question%20was%20raised%3A%20What%20brought%20you%20to%20Python%3F%20When%20you%20got%20to%20the%20fork%20in%20the%20road%2C%20what%20made%20the%20The%20Python%20Way%20more%20attractive%20than%20all%20those%20other%20ways%3F%20The%20people%3F%20The%20projects%3F%20The%20%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://www.newsprint-fray.com/2009/09/11/someone-get-me-a-command-line/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=someone+get+me+a+command+line+-+http://e7t.us/f8199c+(via+@catechism)" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.newsprint-fray.com/2009/09/11/someone-get-me-a-command-line/&amp;title=someone+get+me+a+command+line" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.newsprint-fray.com/2009/09/11/someone-get-me-a-command-line/&amp;t=someone+get+me+a+command+line" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.newsprint-fray.com/2009/09/11/someone-get-me-a-command-line/&amp;title=someone+get+me+a+command+line" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.newsprint-fray.com/2009/09/11/someone-get-me-a-command-line/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>pre-post-mortem</title>
		<link>http://www.newsprint-fray.com/2009/08/16/pre-post-mortem/</link>
		<comments>http://www.newsprint-fray.com/2009/08/16/pre-post-mortem/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 20:19:38 +0000</pubDate>
		<dc:creator>pam</dc:creator>
				<category><![CDATA[feminism]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.newsprint-fray.com/?p=42</guid>
		<description><![CDATA[When I put up my last post asking for a show of hands from women in python, I wasn&#8217;t really sure what to expect. I&#8217;m not exactly well-known in python outside of some of the testing guys and the guys I work with, and I did a poor job of publicizing the post. In fact, [...]]]></description>
			<content:encoded><![CDATA[<p>When I put up <a href="http://www.newsprint-fray.com/2009/08/12/roll-call-women-in-python/">my last post</a> asking for a show of hands from women in python, I wasn&#8217;t really sure what to expect. I&#8217;m not exactly well-known in python outside of some of the testing guys and the guys I work with, and I did a poor job of publicizing the post. In fact, all I did was link it on twitter and on my livejournal; other people took care of the rest for me. (Thanks, other people!)</p>
<p>It&#8217;s turned out rather well, though! I knew it was more than eight, and I know it&#8217;s more than have commented, but it&#8217;s really cool to see all these women showing up and talking a little bit about how they use python. It&#8217;s equally cool how diverse their experiences and projects are: everything from &#8220;sometimes I use it at home to get links into delicious&#8221; to &#8220;I use it as part of my high-energy physics research.&#8221; Comments continue to trickle in, and I smile every time.</p>
<p>&#8230; well, almost every time. There have been, unsurprisingly, a number of trollish comments that I&#8217;ve deleted (and mocked, of course). There was also the dude who came by to give me helpful advice on how to ask a question in order to get a more definitive answer. &#8220;Are you a woman in python,&#8221; he claimed, was too broad, too open to interpretation. </p>
<p>And that, I say, is part of the point: I want it to be open to interpretation. I think the ways in which we interpret questions can be telling. What right do I have to make a list of things you have to do to be &#8220;in python&#8221;? I wondered how many people would comment to say they use python, but they&#8217;re not a &#8220;real&#8221; programmer. Why do we say that? How common is it for a woman to say, &#8220;well, I write a few scripts in my spare time,&#8221; and have that be brushed off because, in some way, &#8220;it doesn&#8217;t count&#8221;? I don&#8217;t know, but I&#8217;m not going to do it. If you&#8217;re a woman, and you consider yourself to be &#8220;in python,&#8221; whatever that means to you, then that&#8217;s good enough for me.</p>
<p>More later. This has stirred up a lot of thinky thoughts for me. </p>
<p>[By the way, if you feel like asking, "why does this matter?" or "who cares about gender when we are so awesomely post-feminism?" (as a few people already have) then I will direct you to <a href="http://finallyfeminism101.wordpress.com/purpose/faq-i-asked-some-feminists-a-question-and-instead-of-answering-they-sent-me-here-why/">this site</a> and delete your comment.]</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-center">
<ul class="socials">
		<li class="sexy-mail">
			<a href="mailto:?subject=%22pre-post-mortem%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22When%20I%20put%20up%20my%20last%20post%20asking%20for%20a%20show%20of%20hands%20from%20women%20in%20python%2C%20I%20wasn%27t%20really%20sure%20what%20to%20expect.%20I%27m%20not%20exactly%20well-known%20in%20python%20outside%20of%20some%20of%20the%20testing%20guys%20and%20the%20guys%20I%20work%20with%2C%20and%20I%20did%20a%20poor%20job%20of%20publicizing%20the%20post.%20In%20fact%2C%20all%20I%20did%20was%20link%20it%20on%20twitter%20%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://www.newsprint-fray.com/2009/08/16/pre-post-mortem/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=pre-post-mortem+-+http://e7t.us/76949b+(via+@catechism)" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.newsprint-fray.com/2009/08/16/pre-post-mortem/&amp;title=pre-post-mortem" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.newsprint-fray.com/2009/08/16/pre-post-mortem/&amp;t=pre-post-mortem" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.newsprint-fray.com/2009/08/16/pre-post-mortem/&amp;title=pre-post-mortem" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.newsprint-fray.com/2009/08/16/pre-post-mortem/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Roll call: women in python</title>
		<link>http://www.newsprint-fray.com/2009/08/12/roll-call-women-in-python/</link>
		<comments>http://www.newsprint-fray.com/2009/08/12/roll-call-women-in-python/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 21:52:45 +0000</pubDate>
		<dc:creator>pam</dc:creator>
				<category><![CDATA[feminism]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.newsprint-fray.com/?p=32</guid>
		<description><![CDATA[Lately I&#8217;ve been wanting to talk more about women in python, which I see as a subset of the women in open source conversation that&#8217;s been taking place. I really wanted to start by talking to other women, though, to see who they are and what their experiences have been and how mine compare.
Except&#8230; who [...]]]></description>
			<content:encoded><![CDATA[<p>Lately I&#8217;ve been wanting to talk more about women in python, which I see as a subset of the women in open source conversation that&#8217;s been taking place. I really wanted to start by talking to other women, though, to see who they are and what their experiences have been and how mine compare.</p>
<p>Except&#8230; who ARE the women in python? I can name eight, including myself. There must be more, right? There must be women using python who don&#8217;t participate in the larger community. There must be women who ARE active and whom I&#8217;m just not aware of. It can&#8217;t possibly just be eight. My Planet Python RSS feed shows me no regular female contributors (that can&#8217;t be right, can it?); three PSF members are female (out of 112) but none of them are officers or are on the board; nobody on python core is female.</p>
<p>My view is fairly limited in scope, so what I want to know is: are there really so few women using python in the first place? Or are there women using it who keep their heads down or don&#8217;t engage with the larger python community? It seems to me that those are separate issues, to be addressed in different ways.</p>
<p>So I am proposing a roll-call. Are you a woman using python? At work, at home, at school, in any capacity whatsoever? Raise your hand. Be counted.</p>
<p>(Men, please do not raise your hand on behalf of your female colleagues or friends. Send &#8216;em on over. Let them speak for themselves.)</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-center">
<ul class="socials">
		<li class="sexy-mail">
			<a href="mailto:?subject=%22Roll%20call%3A%20women%20in%20python%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22Lately%20I%27ve%20been%20wanting%20to%20talk%20more%20about%20women%20in%20python%2C%20which%20I%20see%20as%20a%20subset%20of%20the%20women%20in%20open%20source%20conversation%20that%27s%20been%20taking%20place.%20I%20really%20wanted%20to%20start%20by%20talking%20to%20other%20women%2C%20though%2C%20to%20see%20who%20they%20are%20and%20what%20their%20experiences%20have%20been%20and%20how%20mine%20compare.%0D%0A%0D%0AExcept%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://www.newsprint-fray.com/2009/08/12/roll-call-women-in-python/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Roll+call%3A+women+in+python+-+http://e7t.us/fe421f+(via+@catechism)" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.newsprint-fray.com/2009/08/12/roll-call-women-in-python/&amp;title=Roll+call%3A+women+in+python" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.newsprint-fray.com/2009/08/12/roll-call-women-in-python/&amp;t=Roll+call%3A+women+in+python" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.newsprint-fray.com/2009/08/12/roll-call-women-in-python/&amp;title=Roll+call%3A+women+in+python" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.newsprint-fray.com/2009/08/12/roll-call-women-in-python/feed/</wfw:commentRss>
		<slash:comments>63</slash:comments>
		</item>
		<item>
		<title>adventures in app development</title>
		<link>http://www.newsprint-fray.com/2009/05/15/adventures-in-app-development/</link>
		<comments>http://www.newsprint-fray.com/2009/05/15/adventures-in-app-development/#comments</comments>
		<pubDate>Fri, 15 May 2009 17:31:23 +0000</pubDate>
		<dc:creator>pam</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[delicious]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.newsprint-fray.com/?p=27</guid>
		<description><![CDATA[There are many important pieces to The Puzzle Of Pam, and one of the biggest is my unreasonable and undying love for delicious. I think I have four &#8212; sorry, five &#8212; accounts there, plus access to quite a few more. I am often asked how I spent my weekend, and it&#8217;s not unusual for [...]]]></description>
			<content:encoded><![CDATA[<p>There are many important pieces to The Puzzle Of Pam, and one of the biggest is my unreasonable and undying love for <a href="http://delicious.com/">delicious</a>. I think I have four &#8212; sorry, five &#8212; accounts there, plus access to quite a few more. I am often asked how I spent my weekend, and it&#8217;s not unusual for me to say something like, &#8220;re-tagged everything in delicious,&#8221; or something that might sound benign except for the fact that I have multiple thousands of bookmarks and only some of my management tasks have been scripted.</p>
<p>Anyway. One of the things about del that makes me a sad pamda is their bundle management interface. I know that many people don&#8217;t bundle at all (just yesterday I was asked, &#8220;what&#8217;s a bundle?&#8221;), but I like it. It keeps my tags organized and readable and useful, both to me and to other people. Depending on what you&#8217;re doing with the account, bundles can be used to impose some hierarchical structure on an otherwise flat setup. So I like bundling, and it&#8217;s important to me and to my likeminded friends. And I feel that bundling should be full of fun, but actually it is full of nails, sorrow, and repetitive stress injuries. </p>
<p>I was going to talk about WHY I hate the bundle management interface, and about the greasemonkey scripts and user styles and crazy tagging hacks that make it slightly less painful, but that is also not the point of this post. [This is one of the things that's difficult for me about this blog. How much background do I give? My usual MO is to just start waving my hands in the air and shouting, with the expectation everyone will be able to follow along. I'm not sure that's the case here, but... I'm also not sure I care! I'm awesome that way.]</p>
<p>The point of this post is that I have, after a few years of threatening to do so, started working on my Glorious Bundle Management App Of Magnificent Amazingness. It needs a name that does not consist entirely of adjectives, and probably it also needs unicorns and sparkles. The thing is, though, that I&#8217;m not an app developer. I am a test developer. And so it&#8217;s a strange and interesting learning experience to try to build something for other people to use. I&#8217;m not used to considering other people! I design for my own needs, and then the second I show it to someone else, it breaks. And my needs are&#8230; specific and strange, especially when it comes to delicious bundle management.</p>
<p>I&#8217;m still not sure what&#8217;s going to work and what isn&#8217;t, and the design has already changed a little bit as I&#8217;ve worked on it, but the basic idea is an interface that pulls in all your bundles, shows you the tags in those bundles, and allows you to add or remove tags via drag-and-drop. There will be a list down one side of the page that will show you your unbundled tags or your bundled ones; if it&#8217;s showing you all tags, you can hover over them and see which bundles those tags are currently in. None of this is built into the del management interface. You have to use a GM script to see what bundles a tag is in. You have to go back and forth between a lot of screens to see what tags are in which bundles. Etc etc. So I feel my app will transform bundling from something that is soulsucking to something that is soulenriching.</p>
<p>I&#8217;m not very far along, for a few reasons. One, I just started. Two, I&#8217;m writing it in PHP and jQuery, neither of which I know all that much about. I find it a little sadmaking that I would rather dig through the increasingly foggy recesses of my mind to try to remember where the fuck to put semicolons (EVERYWHERE) than try to figure out how to deploy a Python app. I just don&#8217;t want to mess with it. I feel like, even for someone who knows Python fairly well, and who deploys applications to production servers on a regular basis, the deployment (and, to some extent, development of) Python web apps sucks. [Yeah, yeah, appengine. It's STILL more difficult than it needs to be, IMO. I am lazy.] I just want to write code for a fairly simple web app, and I don&#8217;t want to have to do much else. And PHP makes that really fast and easy, even if the combination of PHP and javascript means I&#8217;m having nightmares about curly braces.</p>
<p>At my job, we&#8217;re big on iterative development, and I&#8217;ve watched it work for years, so that&#8217;s what I&#8217;ve been trying to do. I have a nice step-by-step list that does not include any items like, &#8220;5. ??????&#8221; or &#8220;17. Make it work.&#8221; I even have <i>user stories</i>. I&#8217;ve noticed, though, that it&#8217;s really easy to get distracted. Granted, I am an easily distracted person. But when it&#8217;s just me working on something that is largely for myself, when there&#8217;s no one to say, &#8220;um, Pam, probably you do not need to spend the next seven hours writing CSS for a login form, because the login form does not currently log anyone in to anything,&#8221; I tend to get a little lost. </p>
<p>And, like I said, some of that is me being me, and some of it is that it&#8217;s my project and I have to be my own PM, but I also feel like I&#8217;m falling into a rabbit hole I see other people going down. I think it&#8217;s a danger in user-focused javascripty apps in general, to spend a lot of time up front focusing on making it pretty &#8220;for the user,&#8221; when the user would probably like to have something to use. I like to think that users would rather have something that works than something that looks good sucking. </p>
<p>So anyway, I have to keep reminding myself of that, and reining myself in, and this process has been slow and a little painful, but also very illuminating. Updates as warranted.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-center">
<ul class="socials">
		<li class="sexy-mail">
			<a href="mailto:?subject=%22adventures%20in%20app%20development%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22There%20are%20many%20important%20pieces%20to%20The%20Puzzle%20Of%20Pam%2C%20and%20one%20of%20the%20biggest%20is%20my%20unreasonable%20and%20undying%20love%20for%20delicious.%20I%20think%20I%20have%20four%20--%20sorry%2C%20five%20--%20accounts%20there%2C%20plus%20access%20to%20quite%20a%20few%20more.%20I%20am%20often%20asked%20how%20I%20spent%20my%20weekend%2C%20and%20it%27s%20not%20unusual%20for%20me%20to%20say%20something%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://www.newsprint-fray.com/2009/05/15/adventures-in-app-development/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=adventures+in+app+development+-+http://e7t.us/5cfa79+(via+@catechism)" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.newsprint-fray.com/2009/05/15/adventures-in-app-development/&amp;title=adventures+in+app+development" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.newsprint-fray.com/2009/05/15/adventures-in-app-development/&amp;t=adventures+in+app+development" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.newsprint-fray.com/2009/05/15/adventures-in-app-development/&amp;title=adventures+in+app+development" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.newsprint-fray.com/2009/05/15/adventures-in-app-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>inaugural post</title>
		<link>http://www.newsprint-fray.com/2009/05/12/inaugural-post/</link>
		<comments>http://www.newsprint-fray.com/2009/05/12/inaugural-post/#comments</comments>
		<pubDate>Tue, 12 May 2009 05:57:37 +0000</pubDate>
		<dc:creator>pam</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[nose]]></category>
		<category><![CDATA[twill]]></category>

		<guid isPermaLink="false">http://www.newsprint-fray.com/?p=21</guid>
		<description><![CDATA[Hello! I have no real clue what I plan to do with this site, but I figured I should have one. It took me a while to get this wordpress theme to do what I wanted it to do (and, in fact, it still doesn&#8217;t, but whatever! I have moved on); I think it&#8217;ll do [...]]]></description>
			<content:encoded><![CDATA[<p>Hello! I have no real clue what I plan to do with this site, but I figured I should have one. It took me a while to get this wordpress theme to do what I wanted it to do (and, in fact, it still doesn&#8217;t, but whatever! I have moved on); I think it&#8217;ll do for now. I even think it looks pretty okay, although I haven&#8217;t looked at it on a PC. I will be singularly unsurprised if it breaks in IE.</p>
<p>And because I know you&#8217;re all dying to know what I&#8217;ve been up to, I spent a fair amount of time editing, writing and reorganizing the <a href="http://somethingaboutorange.com/mrl/projects/nose/0.11.0/">nose documentation</a> for the .11 release, which came out last week. With that out of the way, I plan to get back to work on <a href="http://code.google.com/p/twill/">twill</a>, which I have been avoiding. I don&#8217;t know when .9.2 will come out, but if I have my way (and haven&#8217;t forgotten how to code), it should be in the relatively near future.</p>
<p>Other than that, I&#8217;ve been doing my usual thing: reading too much Shakespeare, watching too much television, and eating too many Dunkin&#8217; Donuts breakfast sandwiches.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-center">
<ul class="socials">
		<li class="sexy-mail">
			<a href="mailto:?subject=%22inaugural%20post%22&amp;body=I%20thought%20this%20article%20might%20interest%20you.%0A%0A%22Hello%21%20I%20have%20no%20real%20clue%20what%20I%20plan%20to%20do%20with%20this%20site%2C%20but%20I%20figured%20I%20should%20have%20one.%20It%20took%20me%20a%20while%20to%20get%20this%20wordpress%20theme%20to%20do%20what%20I%20wanted%20it%20to%20do%20%28and%2C%20in%20fact%2C%20it%20still%20doesn%27t%2C%20but%20whatever%21%20I%20have%20moved%20on%29%3B%20I%20think%20it%27ll%20do%20for%20now.%20I%20even%20think%20it%20looks%20pretty%20okay%2C%20alth%22%0A%0AYou%20can%20read%20the%20full%20article%20here%3A%20http://www.newsprint-fray.com/2009/05/12/inaugural-post/" rel="nofollow" title="Email this to a friend?">Email this to a friend?</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=inaugural+post+-+http://e7t.us/cdee06+(via+@catechism)" rel="nofollow" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.newsprint-fray.com/2009/05/12/inaugural-post/&amp;title=inaugural+post" rel="nofollow" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.newsprint-fray.com/2009/05/12/inaugural-post/&amp;t=inaugural+post" rel="nofollow" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.newsprint-fray.com/2009/05/12/inaugural-post/&amp;title=inaugural+post" rel="nofollow" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.newsprint-fray.com/2009/05/12/inaugural-post/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
