<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.kurtraschke.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Kurt Raschke</title>
	
	<link>http://www.kurtraschke.com</link>
	<description>Technologist</description>
	<lastBuildDate>Fri, 09 Nov 2012 13:00:12 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.kurtraschke.com/KurtRaschke" /><feedburner:info uri="kurtraschke" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://www.kurtraschke.com/?pushpress=hub" /><item>
		<title>Open standards are a force multiplier for civic software</title>
		<link>http://feeds.kurtraschke.com/~r/KurtRaschke/~3/2Q33fslA6x4/open-standards-civic-software</link>
		<comments>http://www.kurtraschke.com/2012/11/open-standards-civic-software#comments</comments>
		<pubDate>Fri, 09 Nov 2012 13:00:12 +0000</pubDate>
		<dc:creator>Kurt Raschke</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Best practices]]></category>
		<category><![CDATA[Open data]]></category>
		<category><![CDATA[Transparency]]></category>

		<guid isPermaLink="false">http://www.kurtraschke.com/?p=1568</guid>
		<description><![CDATA[In software engineering, software modularity and reusability are considered best practices. Unfortunately, in the civic software world, these principles are often ignored, because governments and public bodies fail to use open standards and interfaces for their data. When governments and other public bodies adopt open standards, everyone wins. Consider, for example, the Open311 standard. When&#8230;]]></description>
				<content:encoded><![CDATA[<p>In software engineering, software modularity and reusability are considered best practices.  Unfortunately, in the civic software world, these principles are often ignored, because governments and public bodies fail to use open standards and interfaces for their data.</p>
<p>When governments and other public bodies adopt open standards, everyone wins.  Consider, for example, the <a href="http://open311.org/">Open311</a> standard. When a city implements an Open311 endpoint, its citizens suddenly have the option of using any software which has been developed to support the Open311 standard.  There&#8217;s no need for civic hackers in Chicago to develop one iPhone app, only for another group of civic hackers in New York to implement a substantially similar app, just because the two cities use different APIs.</p>
<p>For those developers, the use of open standards acts as a force multiplier: they don&#8217;t have to know anything about the cities where their apps are being used, because they all adhere to the same standards.  Civic software is, for the most part, the domain of non-profits and individuals working on their own time.  Development resources are far from unlimited, and, simply put, we have neither the time nor money to spend on what might be characterized as niche applications which only have use in a limited geographic area, or with one government&#8217;s proprietary API.</p>
<p>Closer to home, I&#8217;ve watched over the past few years as developers have expended needless effort building transit apps for the Washington, D.C. metropolitan area, simply to accommodate local transit authorities&#8217; refusal to publish clean, high-quality data in standard formats.</p>
<p>Arlington County&#8217;s <a href="http://mobilitylab.org/">Mobility Lab</a> <a href="http://mobilitylab.org/transit-tech/">Transit Tech</a> initiative has developed two applications which rely on data from transit authorities.  One is <a href="https://github.com/MobilityLab/TransitScreen">a package</a> for driving real-time transit signs</a>, and the other is <a href="https://github.com/MobilityLab/TransitNearMe">Transit Near Me</a>, a mobile webapp for mapping transit options.</p>
<p>I want to emphasize that I don&#8217;t mean to minimize the work of the Mobility Lab developers—in the end, they did what they needed to in order to be able to ship a working product, given the data they had access to.</p>
<p>Having said that, though, these applications are not all that different from similar transit apps which have already been built.  The Mobility Lab&#8217;s real-time sign, for example, is (in terms of basic design concepts) not all that different from the <a href="https://github.com/OneBusAway/onebusaway/wiki">OneBusAway</a> <a href="https://github.com/OneBusAway/onebusaway-application-modules/wiki/Sign-Mode">sign mode</a>.</p>
<p>Granted, the Mobility Lab&#8217;s real-time sign looks more polished, and includes support for transit modes like bike sharing, but imagine if instead of building a new piece of software from the ground up, the Mobility Lab developers had worked to polish the OneBusAway sign mode and add support for other transit modes?</p>
<p>Had they done so, every city which uses OneBusAway would have been able to benefit immediately from the improvements.</p>
<p>But, there&#8217;s a problem.  OneBusAway consumes real-time transit information in the <a href="https://developers.google.com/transit/gtfs-realtime/">GTFS-realtime</a> and <a href="http://www.kizoom.com/standards/siri/">SIRI VM</a> formats.  Out of the agencies in the region, only Montgomery County Ride On and VRE provide GTFS-realtime data.  The other agencies which provide real-time data use proprietary formats which are incompatible with GTFS-realtime.  Without detouring too deeply into technical territory, WMATA&#8217;s <a href="http://developer.wmata.com/">proprietary API</a> actually provides all of the information that would be necessary to construct a GTFS-realtime feed for Metrobus, were it not for the fact that the API uses route, stop, and trip identifiers which are completely different from those in the static GTFS schedule.</p>
<p>The same goes for Transit Near Me; it is, in essence, a mobile version of the <a href="https://github.com/openplans/OpenTripPlanner/wiki">OpenTripPlanner</a> <a href="http://ride.trimet.org/?tool=routes">system map</a>.  Cities around the world have adopted OpenTripPlanner; wouldn&#8217;t they also benefit from an interactive system map optimized for mobile devices?</p>
<p>OpenTripPlanner is designed to consume clean, well-constructed GTFS feeds, while instead Transit Near Me must include various work-arounds for idiosyncrasies in WMATA&#8217;s data: bad shapes which must be replaced with data from shapefiles, stop IDs which are only available in the API and not the GTFS feed, etc.</p>
<p>I should emphasize again that this isn&#8217;t just about the Mobility Lab; their work happens to highlight the problem particularly well, but they&#8217;re not the only developers to get caught up in this maelstrom:</p>
<blockquote class="twitter-tweet" width="550"><p>@<a href="https://twitter.com/kurtraschke">kurtraschke</a> @<a href="https://twitter.com/fixwmata">fixwmata</a> @<a href="https://twitter.com/grafxnerd">grafxnerd</a> Oh man I had to wrestle so many bears in their API to make that app work. SO MANY.</p>
<p>&mdash; Kyle Hill (@kylehill) <a href="https://twitter.com/kylehill/status/265504492546580480">November 5, 2012</a></p></blockquote>
<p><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>What&#8217;s the solution?  Civic hackers need to stand together with each other, and stand up for good software engineering principles.  I doubt that any one developer alone will be able to convince WMATA to get their data in order (goodness knows I&#8217;ve tried).  But if we stand together and recognize that reinventing the wheel over and over again is not a productive use of our time, we may be able to convince data providers to embrace open standards.  When we do, it will have benefits not just locally, but for people around the world who benefit from the work of civic hackers.</p>
<img src="http://feeds.feedburner.com/~r/KurtRaschke/~4/2Q33fslA6x4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kurtraschke.com/2012/11/open-standards-civic-software/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kurtraschke.com/2012/11/open-standards-civic-software</feedburner:origLink></item>
		<item>
		<title>No mainline Linux kernel support? Be wary.</title>
		<link>http://feeds.kurtraschke.com/~r/KurtRaschke/~3/R6XVkgZnhPc/arm-linux-mainline-kernel</link>
		<comments>http://www.kurtraschke.com/2012/07/arm-linux-mainline-kernel#comments</comments>
		<pubDate>Mon, 23 Jul 2012 01:17:10 +0000</pubDate>
		<dc:creator>Kurt Raschke</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[D2Plug]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Raspberry Pi]]></category>

		<guid isPermaLink="false">http://www.kurtraschke.com/?p=1558</guid>
		<description><![CDATA[A few months ago, I bought a GlobalScale D2Plug—a solid-state, small-form-factor ARM plug computer. It comes out of the box with an old Ubuntu distribution, but by following some instructions I found online, I managed to get Debian stable installed on an SD card and working well. More recently, I wanted to set up the&#8230;]]></description>
				<content:encoded><![CDATA[<p>A few months ago, I bought a <a href="http://www.globalscaletechnologies.com/">GlobalScale</a> <a href="http://www.globalscaletechnologies.com/p-53-d2-plug.aspx">D2Plug</a>—a solid-state, small-form-factor ARM <a href="http://en.wikipedia.org/wiki/Plug_computer">plug computer</a>.  It comes out of the box with an old Ubuntu distribution, but by following <a href="http://dl.dropbox.com/u/308049/D2Plug%20Debian%20HowTo.pdf">some instructions</a> I found online, I managed to get <a href="http://www.debian.org/">Debian</a> <a href="http://www.debian.org/releases/stable/">stable</a> installed on an SD card and working well.</p>
<p>More recently, I wanted to set up the D2Plug in a new application, for which I intended to upgrade to Debian unstable.  It was then that I began to understand what was really going on with the D2Plug.  As I discovered, support for the D2Plug&#8217;s hardware simply never made it into the mainline kernel.</p>
<p>As such, you&#8217;re stuck with an old kernel version, and dependence on Globalscale&#8217;s source tree.</p>
<p>I would not characterize the D2Plug as an expensive paperweight just yet.  There is a <a href="https://github.com/rabeeh/linux">kernel fork</a> which aims to provide a modern kernel for the <a href="http://www.solid-run.com/products/cubox/">CuBox</a>, a platform similar to the D2Plug, so there&#8217;s still some hope.</p>
<p>However, without a modern kernel, the D2Plug will indeed become an expensive paperweight soon.  As distributions move to the 3.x kernel series (as many have already), it will become harder and harder to run modern software on the D2Plug.  It is for this reason that I was ultimately unable to upgrade the D2Plug to Debian unstable.</p>
<p>Though there is a considerable amount of hype surrounding the <a href="http://www.raspberrypi.org/">Raspberry Pi</a> (a similar, though considerably lower-specification ARM board), you may be surprised to find that it, too, <a href="http://xivilization.net/~marek/blog/2012/07/06/current-state-of-rasberry-pi-kernels/">lacks mainline kernel support</a> as of this writing.  Granted, the Raspberry Pi comes with a suitable OS image, and other distributions, like <a href="http://www.raspbian.org/FrontPage">Raspbian</a>, are now available, but it&#8217;s nothing like the x86 world where you can download a generic installer and have it work out-of-the-box.</p>
<p>Of course, some plug computers and other ARM devices <em>do</em> have mainline kernel support; this isn&#8217;t a condemnation of every ARM device out there.  It&#8217;s also possible that the D2Plug will eventually get mainline kernel support, although that seems unlikely; the last attempt <a href="http://www.mail-archive.com/devel@linuxdriverproject.org/msg10448.html">appears</a> to have been in May 2011 when Greg Kroah-Hartman asked &#8220;What&#8217;s with the reliance on the 2.6.32 kernel tree?  That is quite old now, has anyone done any forward porting of the code yet?&#8221;</p>
<p>Considering the Raspberry Pi&#8217;s popularity, it seems much more likely that it will get mainline kernel support, and I look forward to being able to run stock ARM builds of Linux distributions on the Pi, in which case I&#8217;d be much more likely to buy one.  So long as it is dependent on custom builds, the risk is that it, too, could end up stuck on old distributions like the D2Plug is.</p>
<img src="http://feeds.feedburner.com/~r/KurtRaschke/~4/R6XVkgZnhPc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kurtraschke.com/2012/07/arm-linux-mainline-kernel/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kurtraschke.com/2012/07/arm-linux-mainline-kernel</feedburner:origLink></item>
		<item>
		<title>For San Francisco, and governments everywhere, technology startups are the perfect partners</title>
		<link>http://feeds.kurtraschke.com/~r/KurtRaschke/~3/NBlsaNfPFCk/fail-fast</link>
		<comments>http://www.kurtraschke.com/2012/04/fail-fast#comments</comments>
		<pubDate>Tue, 24 Apr 2012 00:17:13 +0000</pubDate>
		<dc:creator>Kurt Raschke</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Open data]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Transportation]]></category>

		<guid isPermaLink="false">http://www.kurtraschke.com/?p=1534</guid>
		<description><![CDATA[A recent article in the New York Times describes SMART Muni, &#8220;an Apple iPad app that uses Global Positioning System technology to track all of the city’s buses in real time, allowing transit managers and passengers to monitor problems and delays&#8221;. It sounds like the perfect success story: civic coders taking open data (Muni tracks&#8230;]]></description>
				<content:encoded><![CDATA[<p>A <a href="http://www.nytimes.com/2012/04/22/us/smart-muni-app-for-san-francisco-transit-goes-unused.html">recent article</a> in the <i>New York Times</i> describes SMART Muni, &#8220;an Apple iPad app that uses Global Positioning System technology to track all of the city’s buses in real time, allowing transit managers and passengers to monitor problems and delays&#8221;.  It sounds like the perfect success story: civic coders taking open data (<a href="http://www.sfmta.com/cms/mhome/home50.htm">Muni</a> tracks its buses and trains with <a href="http://www.nextbus.com/homepage/">NextBus</a>, which provides an <a href="www.nextbus.com/xmlFeedDocs/NextBusXMLFeed.pdf">XML data feed</a>) and using that data to improve operations and create real value for the agency.</p>
<p>Unfortunately, it&#8217;s not a success story: the app has never been used in production.  As the article explains, &#8220;Muni hopes to put the app to good use some day, but the agency is $29 million over budget and cannot afford to buy the iPads required to run the software&#8230;[nor] is the city willing to invest $100,000 to run a pilot program.&#8221;</p>
<p>The costs involved here—a few hundred dollars each for some iPads, perhaps a few thousand dollars to fund a stipend for a civic coder, even $100,000 for a pilot—pale in comparison to the costs associated with the big-name IT consulting firms that governments are used to dealing with.</p>
<p>In addition, startups, teams of civic coders, and open source projects can often deliver a working prototype or even a completed project much faster than conventional development teams.  As the New York Times describes, &#8220;a small team of volunteers took just 10 days last summer to create [the app].&#8221;</p>
<p>Unfortunately, the City of San Francisco is out of touch with the realities of technology: &#8220;&#8216;Start-ups fail at a high rate,&#8217; said Jay Nath, chief innovation officer of San Francisco. &#8216;As stewards of taxpayer dollars, we need to be thoughtful of using that money wisely and not absorbing too much risk.&#8217;&#8221;  Nath is right about one thing: start-ups do fail at an alarming rate.  But that&#8217;s not the risk you might think it is, because startups aren&#8217;t like conventional development projects.</p>
<p>Unlike conventional projects, startups <a href="http://www.wired.co.uk/magazine/archive/2011/05/features/fail-to-succeed?page=all">fail fast</a>.  Instead of wasting years and millions of dollars, when a startup has an idea that isn&#8217;t going anywhere, it winds up quickly.  Maybe it was a bad (or even outright infeasible) idea to begin with, or the startup had the wrong team, or they tried to do too much at once.  Maybe their idea&#8217;s been superseded by a newer, even better technology.  Whatever the reason may be, the startup doesn&#8217;t just grind away for years, running up a million-dollar bill.  Instead, they admit that they can&#8217;t deliver, and get out gracefully.</p>
<p>Consider, for example, the FBI&#8217;s <a href="http://en.wikipedia.org/wiki/Virtual_Case_File">Virtual Case File</a>, a five-year, $170-million development effort that never actually delivered any working software.  Imagine if the VCF project had failed after three or six months, not five years.  Imagine if it had spent less than a million dollars before failing, not $170 million.  Of course, the project still wouldn&#8217;t be done—but we&#8217;d have known that something was wrong up front, instead of finding out five years later, after millions of taxpayer dollars had been wasted on a doomed development effort.</p>
<p>More importantly, startups <em>do</em> have the agility necessary to keep up with the ever-changing technology marketplace.  A development effort that takes five or ten years is bound to deliver a product that is obsolete as soon as it arrives, unless major changes are made along the way.</p>
<p>The conventional development practices used by many government agencies and their contractors don&#8217;t incorporate that kind of agility. Specifications and requirements are written early in the project&#8217;s life, perhaps even before a development team has been selected (if the project must be put out for bids).  Even if the requirements are found to be lacking—or flat-out wrong—development marches on.  In the end, the team will deliver a product that meets the requirements (thus satisfying the bean-counters) but which is already out-of-date and which doesn&#8217;t actually do what users need it to do.</p>
<p>I alluded to these problems in my <a href="http://transport.kurtraschke.com/2012/03/wmata-real-time-signs-2">recent coverage</a> of WMATA&#8217;s initiative to install real-time information displays at bus stops.  By only considering bids from vendors with &#8220;standard, proven products&#8221; and &#8220;successful existing and fully operational implementations, in multiple transit agencies&#8221;, they potentially shut out innovative startups (or even teams of civic coders, like the <a href="http://mobilitylab.org/transit-tech/">Mobility Lab</a>).</p>
<p>It&#8217;s entirely possible that the first team to tackle a thorny problem may fail—but rather than casting them as &#8220;failures that burn holes in the city’s budget&#8221;, we&#8217;ve got to communicate to governments and taxpayers alike that not all failures are the same.  There&#8217;s a big difference between a project that runs for years, spends millions of dollars, and has nothing to show for it in the end, and a project that fails after just a few months, has spent well less than a million dollars, and can identify what went wrong, so the next project will be more successful.</p>
<p>When it comes to technology, the best way for governments to be good &#8216;stewards of taxpayer dollars&#8217; is to adopt successful development practices: small, agile, competent teams, that build inexpensive, flexible products, and fail quickly if they can&#8217;t get the job done.  The old way—forking over millions and millions to high-priced contractors until they finally declare defeat, then taking it up in a years-long legal battle—just doesn&#8217;t look like good stewardship anymore.  Sure, established companies may have a long track record that startups don&#8217;t, but what&#8217;s it a record of?  We don&#8217;t need any more million-dollar failures.  We need smart civic coders developing next-generation solutions like SMART Muni, and we need governments to accept, embrace, and support them.</p>
<img src="http://feeds.feedburner.com/~r/KurtRaschke/~4/NBlsaNfPFCk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kurtraschke.com/2012/04/fail-fast/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kurtraschke.com/2012/04/fail-fast</feedburner:origLink></item>
		<item>
		<title>Rendering issue in Basic Maths with Google Chrome</title>
		<link>http://feeds.kurtraschke.com/~r/KurtRaschke/~3/dwqI89PQDHw/basic-maths-rendering-issue</link>
		<comments>http://www.kurtraschke.com/2011/11/basic-maths-rendering-issue#comments</comments>
		<pubDate>Tue, 15 Nov 2011 02:08:05 +0000</pubDate>
		<dc:creator>Kurt Raschke</dc:creator>
				<category><![CDATA[Meta]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.kurtraschke.com/?p=1503</guid>
		<description><![CDATA[Basic Maths, the WordPress theme I use on this site, seems to have developed a rendering problem in Google Chrome. The problem is only present in Chrome, and not Safari, so it&#8217;s not a WebKit issue, and Gecko in Firefox doesn&#8217;t exhibit the problem either. You can see the issue on any individual post page,&#8230;]]></description>
				<content:encoded><![CDATA[<p><a href="http://basicmaths.subtraction.com/">Basic Maths</a>, the <a href="http://wordpress.org/">WordPress</a> theme I use on this site, seems to have developed a rendering problem in Google Chrome. The problem is only present in Chrome, and not Safari, so it&#8217;s not a WebKit issue, and Gecko in Firefox doesn&#8217;t exhibit the problem either.</p>
<p>You can see the issue on any individual post page, such as <a href="http://basicmaths.subtraction.com/demo/2009/11/06/using-images-in-basic-maths/">this one</a> from the demo site:</p>
<div id="attachment_1504" class="wp-caption aligncenter" style="width: 640px"><a href="http://www.kurtraschke.com/wp-content/uploads/2011/11/chrome.png"><img src="http://www.kurtraschke.com/wp-content/uploads/2011/11/chrome.png" alt="" title="chrome" width="620" class="alignnone size-large wp-image-1504" /></a><p class="wp-caption-text">Basic Maths post page rendering in Chrome 17.0.932.0 on Mac OS X 10.6.8</p></div>
<div id="attachment_1505" class="wp-caption aligncenter" style="width: 640px"><a href="http://www.kurtraschke.com/wp-content/uploads/2011/11/firefox.png"><img src="http://www.kurtraschke.com/wp-content/uploads/2011/11/firefox.png" alt="" title="firefox" width="620" class="alignnone size-large wp-image-1505" /></a><p class="wp-caption-text">Basic Maths post page rendering in Firefox 5.0.1 on Mac OS X 10.6.8</p></div>
<p>Notice how the borders at the top and bottom of the meta box overrun the first sidebar column in Chrome.</p>
<p>Not being a CSS wizard, I&#8217;m not in a good position to derive a minimal test case from the theme&#8217;s CSS, and I can&#8217;t say precisely when the issue first appeared in Chrome, either (although I will say that I run the Chrome dev version).  I know this makes for a bad bug report, but I figure it&#8217;s better than nothing to document the issue publicly.  The issue doesn&#8217;t seem to be specific to certain Basic Maths installations, either; both this site and the demo site, as well as others I&#8217;ve come across online, are similarly affected in Chrome.</p>
<img src="http://feeds.feedburner.com/~r/KurtRaschke/~4/dwqI89PQDHw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kurtraschke.com/2011/11/basic-maths-rendering-issue/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kurtraschke.com/2011/11/basic-maths-rendering-issue</feedburner:origLink></item>
		<item>
		<title>Air and Space</title>
		<link>http://feeds.kurtraschke.com/~r/KurtRaschke/~3/Te3ah4af2mA/air-and-space</link>
		<comments>http://www.kurtraschke.com/2011/11/air-and-space#comments</comments>
		<pubDate>Tue, 15 Nov 2011 01:44:37 +0000</pubDate>
		<dc:creator>Kurt Raschke</dc:creator>
				<category><![CDATA[Meta]]></category>

		<guid isPermaLink="false">http://www.kurtraschke.com/?p=1494</guid>
		<description />
				<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/kurtraschke/sets/72157628112674854/"><img src="http://www.kurtraschke.com/wp-content/uploads/2011/11/6338367830_54e9821ed7_b.jpg" alt="" title="6338367830_54e9821ed7_b" width="620" class="alignnone size-large wp-image-1498" /></a></p>
<p><a href="http://www.flickr.com/photos/kurtraschke/sets/72157628112674854/"><img src="http://www.kurtraschke.com/wp-content/uploads/2011/11/6337620941_52826d2eb0_b.jpg" alt="" title="6337620941_52826d2eb0_b" width="620" class="alignnone size-large wp-image-1497" /></a></p>
<img src="http://feeds.feedburner.com/~r/KurtRaschke/~4/Te3ah4af2mA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kurtraschke.com/2011/11/air-and-space/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kurtraschke.com/2011/11/air-and-space</feedburner:origLink></item>
		<item>
		<title>Taming MTA New York City Transit’s bus GTFS feeds</title>
		<link>http://feeds.kurtraschke.com/~r/KurtRaschke/~3/EDqNvS-V9g8/taming-mta-nyct-bus-gtfs-feeds</link>
		<comments>http://www.kurtraschke.com/2011/11/taming-mta-nyct-bus-gtfs-feeds#comments</comments>
		<pubDate>Thu, 03 Nov 2011 23:50:10 +0000</pubDate>
		<dc:creator>Kurt Raschke</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[GTFS]]></category>
		<category><![CDATA[Open data]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Transportation]]></category>

		<guid isPermaLink="false">http://www.kurtraschke.com/?p=1470</guid>
		<description><![CDATA[If you go to the MTA’s developer resources page, you&#8217;ll find that while there is one GTFS feed to download for the subway (and Staten Island Railway), there are five feeds for bus data—one per borough. Your first reaction might be one of annoyance—after all, the agency almost certainly keeps data for all five boroughs&#8230;]]></description>
				<content:encoded><![CDATA[<p>If you go to <a href="http://mta.info/">the MTA</a>’s <a href="http://mta.info/developers/download.html">developer resources</a> page, you&#8217;ll find that while there is one GTFS feed to download for the subway (and Staten Island Railway), there are five feeds for bus data—one per borough.  Your first reaction might be one of annoyance—after all, the agency almost certainly keeps data for all five boroughs in the  same system internally, so why not release the data in the same structure?</p>
<p>However, if you look at the files more closely, you&#8217;ll soon see why they&#8217;re structured the way they are: they are, simply put, massive. The problem is in the <code>stop_times.txt</code> file; the largest, for Brooklyn, is nearly 700 megabytes.  Concatenate them together, and you get a 2 gigabyte file containing more than 30 million records. (This is a result of how the feeds are constructed, as dissected in <a href="http://groups.google.com/group/mtadeveloperresources/browse_frm/thread/1669ea401ae60a51/333b0246e03898ff">this thread</a> on the developer mailing list)</p>
<p>Most tools designed for working with GTFS feeds simply can&#8217;t handle anything that large (or they choke badly).  Yet, at the same time, many tools also assume that there will be a single feed per agency, so the per-borough feeds (which have some degree of overlap) can be something of a pain to work with.</p>
<p>This leads to a conundrum: you can work with the feeds one borough at a time (although even then, with some difficulty, as even the individual borough feeds are rather large), but there&#8217;s no good way to see the whole city&#8217;s bus service at once.</p>
<p>It turns out that with some ingenuity, this problem can be solved, although doing so takes some time and CPU resources. The basic strategy is to first naively merge the feeds  together, and then refactor the merged feed, to reduce the number of stop times.  The refactoring is described in <a href="http://groups.google.com/group/mtadeveloperresources/msg/333b0246e03898ff">this post</a> by Brian Ferris.</p>
<p>Actually merging the feeds together isn&#8217;t that hard; the <code>agency.txt</code>, <code>calendar.txt</code>, <code>calendar_dates.txt</code>, <code>routes.txt</code>, and <code>shapes.txt</code> files are identical across the five feeds.  The <code>stops.txt</code> file has to be merged and then deduplicated, but this can be done with simple command-line tools.  For the <code>trips.txt</code> and <code>stop_times.txt</code> files, there&#8217;s no other option than to concatenate them together.  This does result in a massive <code>stop_times.txt</code> file, but it&#8217;s only temporary.</p>
<p>After producing the naively concatenated feed, apply the previously-mentioned OneBusAway GTFS transformer (described in more detail <a href="http://developer.onebusaway.org/modules/onebusaway-gtfs-modules/current-SNAPSHOT/onebusaway-gtfs-transformer-cli.html#Merge_Trips_and_Refactor_Calendar_Entries">here</a>) to the feed.</p>
<p>The transformer will need about 8 GB of memory to run (so launch the JVM with <code>-Xmx10G</code>, or thereabouts), and on an EC2 large instance, it&#8217;ll take about 10 minutes.  When it&#8217;s done, you&#8217;ll have a stop_times.txt file which contains around 6 million records, which isn&#8217;t quite so bad (considering that the entire merged and refactored feed for the five boroughs ends up being about the same size as the unmodified feed for Brooklyn alone, it&#8217;s actually almost good).</p>
<p>As an aside, here&#8217;s how I constructed the merged feed; I&#8217;m always a fan of solutions which make use of basic Unix tools.</p>
<style type="text/css">
pre {overflow: auto !important;}
</style>
<p><code>
<pre>
mkdir nyct_bus_merged
cd nyct_bus_merged
cp ../google_transit_manhattan/{agency.txt,calendar.txt,calendar_dates.txt,routes.txt,shapes.txt} .
 
for file in ../google_transit_{manhattan,bronx,brooklyn,queens,staten_island}/stops.txt; do
	tail -n +2 $file >> stops_unmerged.txt
done;

head -n 1 ../google_transit_manhattan/stops.txt > stops.txt
cat stops_unmerged.txt | sort | uniq >> stops.txt
rm stops_unmerged.txt


head -n 1 ../google_transit_manhattan/trips.txt > trips.txt
for file in ../google_transit_{manhattan,bronx,brooklyn,queens,staten_island}/trips.txt; do
	tail -n +2 $file >> trips.txt
done;

head -n 1 ../google_transit_manhattan/stop_times.txt > stop_times.txt
for file in ../google_transit_{manhattan,bronx,brooklyn,queens,staten_island}/stop_times.txt; do
	tail -n +2 $file >> stop_times.txt
done;
#then zip the feed and apply the GTFS transformer
</pre>
<p></code></p>
<p>(Finally, a disclaimer: I haven&#8217;t extensively tested the feed which is the result of the process described in this post.  It&#8217;s possible that this process has unintended consequences which could affect its integrity or usefulness for certain applications.)</p>
<img src="http://feeds.feedburner.com/~r/KurtRaschke/~4/EDqNvS-V9g8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kurtraschke.com/2011/11/taming-mta-nyct-bus-gtfs-feeds/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kurtraschke.com/2011/11/taming-mta-nyct-bus-gtfs-feeds</feedburner:origLink></item>
		<item>
		<title>Announcing htmlbib, a tool for rendering BibTeX files as interactive HTML</title>
		<link>http://feeds.kurtraschke.com/~r/KurtRaschke/~3/C1DCsGjIvZI/announcing-htmlbib</link>
		<comments>http://www.kurtraschke.com/2011/10/announcing-htmlbib#comments</comments>
		<pubDate>Sat, 22 Oct 2011 20:30:05 +0000</pubDate>
		<dc:creator>Kurt Raschke</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[AppleScript]]></category>
		<category><![CDATA[BibDesk]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Typesetting]]></category>

		<guid isPermaLink="false">http://www.kurtraschke.com/?p=1449</guid>
		<description><![CDATA[For some time now, I&#8217;ve been working on an annotated bibliography of articles on various topics in transportation (particularly the history of automatic fare collection from 1960 to the present, as well as the SelTrac train control system and its origins in Germany). I&#8217;ve been compiling the information using BibDesk, and I&#8217;d like to be&#8230;]]></description>
				<content:encoded><![CDATA[<p>For some time now, I&#8217;ve been working on an annotated bibliography of articles on various topics in transportation (particularly the history of automatic fare collection from 1960 to the present, as well as the SelTrac train control system and its origins in Germany).  I&#8217;ve been compiling the information using <a href="http://bibdesk.sourceforge.net/">BibDesk</a>, and I&#8217;d like to be able to share it with a wider audience, in the hope that it might be useful to someone.</p>
<p>At a bare minimum, posting the BibTeX file online somewhere would fulfill my desire to get the information out there.  But not everyone out there who might benefit from the bibliography uses BibTeX.  For many people, I fear a <code>.bib</code> file would be nothing more than unintelligible gibberish; outside of academic circles (and even then, outside of the hard sciences), TeX is not particularly well-known.</p>
<p>The next alternative would be to post the bibliography online as a PDF or HTML file.  This alternative is considerably more accessible to non-BibTeX users, but actually makes life harder for people who would like to be able to copy references (as BibTeX source) to use in their own BibTeX files (common practice in communities of TeX users).  Merely rendering the entire contents of the file also loses some of the metadata—the comments associated with entries, the groups and keywords, etc.</p>
<p>There are also specialized tools (like <a href="http://www.lri.fr/~filliatr/bibtex2html/">bibtex2html</a>) for converting a BibTeX file to HTML.  But there, still, the results fall short; the output is mostly static text.  I wanted a tool that would make good use of the keywords entered in BibDesk, and which would provide links between publications and authors.  I also wanted a tool which would be equally useful for BibTeX users, who would be helped by having access to the BibTeX source for each entry, and non-BibTeX users, who would be helped by having formatted bibliography entries.  I therefore set out to built a tool that would meet my needs; the result is <a href="https://github.com/kurtraschke/htmlbib">htmlbib</a>.</p>
<p>One of the items of concern for me was that the bibliography entries be formatted properly; after having taken care to make sure that the information was added to BibDesk so that it would be rendered well, I did not want to have some generic template used to create HTML for each entry.  So, I ended up cobbling together an arrangement that actually uses <a href="http://www.bibtex.org/">BibTeX</a> and <a href="http://tug.org/tex4ht/">tex4ht</a> to produce HTML for each entry using the desired BibTeX style (in my case, <code>IEEEtran</code>), so that the entries look the same in the preview as they would in an actual publication.  This is slow, but the preview results are cached, so subsequent runs are faster. </p>
<p>As for parsing the BibTeX file, since I&#8217;m already familiar with scripting BibDesk, I decided to use <a href="http://appscript.sourceforge.net/py-appscript/index.html">appscript</a> to call BibDesk from Python.  The result is therefore not portable from OS X, but it suits my needs.  There are BibTeX parsing libraries for Python, so porting to another platform would only require substituting one of those libraries of the calls to BibDesk; the rest is pure Python, with the exception of <a href="http://lxml.de/">lxml</a>, and the aforementioned preview code, which expects a functioning TeX installation on the system. </p>
<p>The HTML is produced using <a href="http://jinja.pocoo.org/docs/">Jinja2</a> templates, which for now are stored in the application egg.  The default, built-in template is built on <a href="http://www.blueprintcss.org/">Blueprint CSS</a> and <a href="http://jquery.com/">jQuery</a> along with <a href="http://flowplayer.org/tools/">jQuery Tools</a>.  It wouldn&#8217;t be too hard to provide an option for using user-specified templates instead of the built-in template.</p>
<p>I&#8217;ve <a href="http://kurtraschke.github.com/htmlbib/transitbib/index.html">uploaded</a> some sample output to demonstrate what htmlbib does.</p>
<img src="http://feeds.feedburner.com/~r/KurtRaschke/~4/C1DCsGjIvZI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kurtraschke.com/2011/10/announcing-htmlbib/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kurtraschke.com/2011/10/announcing-htmlbib</feedburner:origLink></item>
		<item>
		<title>Google Apps Script: like AppleScript for the Web</title>
		<link>http://feeds.kurtraschke.com/~r/KurtRaschke/~3/0lsp0sKWMOk/google-apps-script-applescript-for-the-web</link>
		<comments>http://www.kurtraschke.com/2011/07/google-apps-script-applescript-for-the-web#comments</comments>
		<pubDate>Tue, 26 Jul 2011 22:28:38 +0000</pubDate>
		<dc:creator>Kurt Raschke</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[AppleScript]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.kurtraschke.com/?p=1434</guid>
		<description><![CDATA[I&#8217;ve always been a huge fan of AppleScript for automating tasks in scriptable appplications and (more importantly) gluing scriptable applications together. Particularly when working with applications which are designed to take full advantage of AppleScript, like BibDesk, Delicious Library, and XTension, AppleScript makes even complex tasks easy. Unlike macros which are confined to a single&#8230;]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve always been a huge fan of <a href="http://developer.apple.com/library/mac/#documentation/AppleScript/Conceptual/AppleScriptX/Concepts/ScriptingOnOSX.html#//apple_ref/doc/uid/20000032-BABEBGCF">AppleScript</a> for automating tasks in scriptable appplications and (more importantly) gluing scriptable applications together.  Particularly when working with applications which are designed to take full advantage of AppleScript, like <a href="http://bibdesk.sourceforge.net/">BibDesk</a>, <a href="http://www.delicious-monster.com/">Delicious Library</a>, and <a href="http://shed.com/">XTension</a>, AppleScript makes even complex tasks easy.  Unlike macros which are confined to a single application, AppleScript is based on top of Apple Events, making it easy to target any scriptable application, even on a remote Mac over the network.  More importantly, AppleScripts aren&#8217;t macros; they don&#8217;t just play back keyboard and mouse events; you get a real object-oriented view of the data being manipulated.  But really good scriptable applications are hard to come by, and of course AppleScript does you no good if you&#8217;re using cloud-based applications like <a href="https://docs.google.com">Google Docs</a>.</p>
<p>Browser automation tools, like <a href="http://seleniumhq.org/">Selenium</a>, and libraries like <a href="http://wwwsearch.sourceforge.net/mechanize/">mechanize</a> help fill the gap somewhat, but they&#8217;re far from providing the same rich environment that AppleScript does.  To give a concrete example, I was recently working on <a href="http://goo.gl/XCegD">a spreadsheet</a> listing Twitter accounts for the top 50 transit agencies in the US (more on that project <a href="http://transport.kurtraschke.com/2011/07/transit-agencies-twitter">here</a>).  In the spreadsheet, I&#8217;d listed agencies&#8217; accounts by username (that is, <code>@username</code>).  But what I really wanted was a link to each account on Twitter (that is, <code>http://twitter.com/username</code>).  I could have entered the links manually, but that would have required needless manual work.  If I were using a conventional spreadsheet application on the desktop, I could have used whatever macro or scripting facility it provided, or I could have exported the file to CSV and used <code>sed</code> and <code>awk</code> to get the job done.  But I was working in the cloud; I knew there had to be a better way.</p>
<p>Enter <a href="http://code.google.com/googleapps/appsscript/">Google Apps Script</a>.  Google Apps Script provides for Google&#8217;s cloud-based applications the same scriptability that AppleScript provides for desktop applications on the Mac.  In only a few minutes, after studying <a href="http://code.google.com/googleapps/appsscript/service_spreadsheet.html">the documentation</a>, I was able to produce <a href="https://gist.github.com/1108148">a script</a> which achieved the desired effect.</p>
<p>Buoyed by my quick success, I decided to try going a step further: what if I could use the Twitter API to automatically set each cell&#8217;s comment to the most recent Tweet?  Doing so would give viewers a quick preview of the Twitter account&#8217;s content, without leaving the spreadsheet.  Working off of some <a href="http://code.google.com/googleapps/appsscript/class_urlfetchapp.html">sample code</a> from Google, I quickly wrote <a href="https://gist.github.com/1108165">another script</a> to do the job.  I ran into trouble for a while until I found that the &#8220;Callback URL&#8221; in the Twitter application settings must be set to <code>https://spreadsheets.google.com/macros</code>; once that was done, everything worked perfectly. (Incidentally, the error message given in that case, &#8220;unexpected error&#8221;, is completely useless, and gives no clue as to the actual problem.)  From there, all I had to do was set up a <a href="http://code.google.com/googleapps/appsscript/guide_events.html">time-based trigger</a> to run the script automatically so the Tweets would update periodically, and I was done.</p>
<p>For me, the real point—and the power of Google Apps Script—is how quickly and easily I was able to not only automate otherwise-tedious processes, but draw in data from disparate sources and display it automatically.  I&#8217;ve only scratched the surface of what can be done with Google Apps Script; the technology can be made to do a lot more.</p>
<img src="http://feeds.feedburner.com/~r/KurtRaschke/~4/0lsp0sKWMOk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kurtraschke.com/2011/07/google-apps-script-applescript-for-the-web/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kurtraschke.com/2011/07/google-apps-script-applescript-for-the-web</feedburner:origLink></item>
		<item>
		<title>Designers: please don’t design usability out of your sites</title>
		<link>http://feeds.kurtraschke.com/~r/KurtRaschke/~3/YDNIceC3HWQ/lasr-site-usability</link>
		<comments>http://www.kurtraschke.com/2011/06/lasr-site-usability#comments</comments>
		<pubDate>Sun, 26 Jun 2011 01:05:30 +0000</pubDate>
		<dc:creator>Kurt Raschke</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Best practices]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://www.kurtraschke.com/?p=1415</guid>
		<description><![CDATA[Over at Raschke on Transport, I recently wrote about a design competition called Life at the Speed of Rail. I had points to make about some of the winning entries, but was I able to link to them in the gallery on the LASR site? No. Why not? The LASR site is heavily JavaScript-dependent; it&#8217;s&#8230;]]></description>
				<content:encoded><![CDATA[<p>Over at <a href="http://transport.kurtraschke.com/">Raschke on Transport</a>, I recently <a href="http://transport.kurtraschke.com/2011/06/hsr-advocacy">wrote about</a> a design competition called <em>Life at the Speed of Rail</em>.  I had points to make about some of the winning entries, but was I able to link to them in the <a href="http://www.vanalen.org/lasr/gallery/">gallery</a> on the LASR site?  No.  Why not?  The LASR site is heavily JavaScript-dependent; it&#8217;s all one HTML page with a whole bunch of JavaScript-driven fake hyperlinks.  Browse with JavaScript disabled?  Too bad.</p>
<p>This isn&#8217;t meant solely as a criticism of the LASR site; I&#8217;ve noticed this trend on a lot of &#8216;design&#8217; sites.  Lots of flash (even if they&#8217;re not built with Flash), and not a lot of usability.  These sites break the Web in a variety of ways; one of the more egregious ones is not using real hyperlinks.  You can&#8217;t link to the individual pages within these &#8216;sites&#8217;, and they break the Back button, too.  Broadly speaking, these are practices which <a href="http://www.tbray.org/ongoing/When/201x/2011/02/09/Hash-Blecch">break the Web</a>.  Unfortunately, it&#8217;s started to infect even mainstream Web sites, like the new Gawker and Twitter.  This is, needless to say, a <a href="http://isolani.co.uk/blog/javascript/BreakingTheWebWithHashBangs">bad idea</a>.</p>
<p>Fancy transitions between pages are neat, but there is <em>no need</em> for a static Web site to require JavaScript.  Doing so goes completely against the notion of <a href="http://en.wikipedia.org/wiki/Progressive_enhancement">progressive enhancement</a>.  And while it&#8217;s (somewhat) reasonable for a Web application like Twitter or (especially) Gmail to require JavaScript, a static site—whether it&#8217;s the news or the results of a design competition—should <em>not</em> depend on JavaScript, and it <em>should</em> have real hyperlinks that actually work.  That&#8217;s how the Web works.  Fail to get that right, and you&#8217;ve broken the Web.</p>
<img src="http://feeds.feedburner.com/~r/KurtRaschke/~4/YDNIceC3HWQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kurtraschke.com/2011/06/lasr-site-usability/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kurtraschke.com/2011/06/lasr-site-usability</feedburner:origLink></item>
		<item>
		<title>Using shortDOIs automatically in BibDesk</title>
		<link>http://feeds.kurtraschke.com/~r/KurtRaschke/~3/AzgIMPC_6oo/bibdesk-shortdoi-applescript</link>
		<comments>http://www.kurtraschke.com/2011/06/bibdesk-shortdoi-applescript#comments</comments>
		<pubDate>Fri, 03 Jun 2011 19:55:03 +0000</pubDate>
		<dc:creator>Kurt Raschke</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[AppleScript]]></category>
		<category><![CDATA[BibDesk]]></category>
		<category><![CDATA[DOI]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Typesetting]]></category>

		<guid isPermaLink="false">http://www.kurtraschke.com/?p=1367</guid>
		<description><![CDATA[I&#8217;m quite a fan of using DOIs to refer to online resources when possible. However, some DOIs are a bit ungainly, and particularly for readers working from a printed bibliography, they&#8217;re outright inconvenient. Who wants to type in something like 10.1002/(SICI)1097-0258(19980815/30)17:15/163.0.CO;2-2? Even when working from a digital copy, a string that long is bound to&#8230;]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m quite a fan of using <a href="http://www.doi.org/">DOI</a>s to refer to online resources when possible.  However, some DOIs are a bit ungainly, and particularly for readers working from a printed bibliography, they&#8217;re outright inconvenient.  Who wants to type in something like <code>10.1002/(SICI)1097-0258(19980815/30)17:15/16<1661::AID-SIM968>3.0.CO;2-2</code>?  Even when working from a digital copy, a string that long is bound to get mangled somewhere if it gets copied and pasted around, sent in emails, etc.  You could use a conventional URL-shortening service, but that&#8217;s probably not appropriate in the context of a published paper.  So, how can you continue to get the benefits of the DOI system without exposing your readers to long, ugly URLs?</p>
<p>The answer is the <a href="http://shortdoi.org/">shortDOI</a> service, which transforms DOIs into shortcuts that are a lot easier for your readers to use.  Every shortDOI generated is itself a DOI, so the conventional risk of a URL-shortener shutting down and taking the shortcuts along with it isn&#8217;t a problem.  As long as the DOI system is functioning, shortDOIs will be resolvable.</p>
<p>For example, the DOI <code>10.1109/JRPROC.1929.221679</code> can be dereferenced by using the URL <a href="http://dx.doi.org/10.1109/JRPROC.1929.221679"><code>http://dx.doi.org/10.1109/JRPROC.1929.221679</code></a>.  When this is shortened with shortDOI, the result is the DOI <code>10/bpc</code>.  This can be dereferenced with the URL <a href="http://dx.doi.org/10/bpc"><code>http://dx.doi.org/10/bpc</code></a> (note that that&#8217;s no different than any other DOI), but, more importantly, it can also be dereferenced with the URL <a href="http://doi.org/bpc"><code>http://doi.org/bpc</code></a>.  It&#8217;s this last URL that is important for our purposes, as it&#8217;s the shortest.</p>
<p>Now, shortDOIs <em>can</em> be manually generated, but why bother, if the process can be automated?  I use <a href="http://bibdesk.sourceforge.net/">BibDesk</a> for managing references, and BibDesk is a scriptable application, so an AppleScript was the easiest solution to the problem.  I&#8217;ve posted the script on GitHub; you can find it <a href="https://gist.github.com/1005817">here</a>.  For every publication in a BibDesk document which has a DOI entered and which does not have a shortDOI shortcut, it will retrieve the shortDOI shortcut for the publication&#8217;s DOI, and store it in the URL field.</p>
<img src="http://feeds.feedburner.com/~r/KurtRaschke/~4/AzgIMPC_6oo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.kurtraschke.com/2011/06/bibdesk-shortdoi-applescript/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.kurtraschke.com/2011/06/bibdesk-shortdoi-applescript</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 0.573 seconds. --><!-- Cached page generated by WP-Super-Cache on 2013-05-06 07:48:31 --><!-- Compression = gzip -->
