<?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>Aaron Williamson</title>
	<atom:link href="http://copiesofcopies.org/webl/feed/" rel="self" type="application/rss+xml" />
	<link>http://copiesofcopies.org/webl</link>
	<description></description>
	<lastBuildDate>Tue, 22 Jan 2013 17:52:36 +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>
		<item>
		<title>Aaron Swartz: the root and the rhizome</title>
		<link>http://copiesofcopies.org/webl/2013/01/20/aaron-swartz-the-root-and-the-rhizome/</link>
		<comments>http://copiesofcopies.org/webl/2013/01/20/aaron-swartz-the-root-and-the-rhizome/#comments</comments>
		<pubDate>Sun, 20 Jan 2013 17:55:26 +0000</pubDate>
		<dc:creator>Aaron Williamson</dc:creator>
				<category><![CDATA[technology]]></category>
		<category><![CDATA[aaron swartz]]></category>
		<category><![CDATA[aaronsw]]></category>
		<category><![CDATA[criminal justice]]></category>

		<guid isPermaLink="false">http://copiesofcopies.org/webl/?p=322</guid>
		<description><![CDATA[Yesterday I attended the NYC memorial service for Aaron Swartz at Cooper Union&#8217;s Great Hall. Hearing about Aaron&#8217;s accomplishments and his spirit of pragmatic idealism from those who spoke was humbling, inspiring, and so, so sad. I&#8217;m particularly grateful for the words of Aaron&#8217;s partner, Taren Stinebrickner-Kauffman, who closed the service by challenging the technologists [...]]]></description>
				<content:encoded><![CDATA[<p>Yesterday I attended the NYC memorial service for Aaron Swartz at
Cooper Union&#8217;s Great Hall. Hearing about Aaron&#8217;s accomplishments and
his spirit of pragmatic idealism from those who spoke was humbling,
inspiring, and so, so sad.<span id="more-322"></span></p>

<p>I&#8217;m particularly grateful for the words of Aaron&#8217;s partner, Taren
Stinebrickner-Kauffman, who closed the service by challenging the
technologists in the room with the questions, &#8220;If you believe that technology is making the world a better place, why do you believe that? Do you really understand what makes the world a bad place to begin with?&#8221;  We had already been told that Aaron looked for
the worst problems, the most fundamental, and then for the
highest-impact solution. Taran&#8217;s benediction was a pointed reminder of
how different Aaron&#8217;s approach was from the norm&mdash;that silicon valley
made its billions by solving the problems nearest to it. Groceries to
your door. Hyperlocal coupons. First-world problems.</p>

<p><img src="http://copiesofcopies.org/webl/wp-content/uploads/2013/01/Warming-Skudbygning-Fig19-Paris-quadrifolia-300x126.jpg" alt="Paris quadrifolia rhizome (public domain)" width="300" height="126" class="size-medium wp-image-323" style="float: right;" />Several people talked about Aaron&#8217;s comprehensive approach to the
problems he encountered. He was a technologist, but he knew that
few problems have purely technological solutions. When Aaron began
digging at a problem, he saw not a single root, but a
rhizome&mdash;the vast, hidden network that not only fed that problem
but sent up shoots in distant, seemingly unconnected places. Aaron
pried at this network, sometimes gently and sometimes clumsily,
wherever its roots led.</p>

<p>Aaron tugged at the problem of poverty and found it partly rooted in
unequal access to education; he tugged some more and found that
fundamental human learning had been enclosed by a conspiracy of the
first world&#8217;s universities, publishing companies, and for-profit
research laboratories. When he pulled a little harder, someone saw him
digging in their garden, called the cops, and broke all our hearts.</p>

<p>As our grieving community tries to understand how this
happened&mdash;how we let this happen&mdash;and how we can honor Aaron
the the wake of his death, we find the kind of problem that Aaron
understood better than most of us. We pry up the injustice of Aaron&#8217;s
death and trace a root to a bad law, the Computer Fraud and Abuse Act,
whose own roots reveal a captured and poorly informed legislature. We
trace a different root to an inhumane prosecutor&#8217;s office and from
there to a plea-bargain system and federal sentencing guidelines that
all but guarantee unjust outcomes.</p>

<p>Miserably, we trace all of this back to ourselves, because this brutal
system grew out of our own conspiracy of indifference to the least
fortunate in our society. Aaron&#8217;s hateful prosecution was possible
because we ignored the same injustice when it wasn&#8217;t happening to the
people we know. Because,
as <a href="http://cbracy.tumblr.com/post/40769667863/the-limits-of-aarons-law">Catherine
Bracy wrote</a> and several speakers at the memorial said, too few of us followed the roots of our criminal justice process out to the racism and
poverty that feed its disproportionate outcomes. Aaron would have, but he&#8217;s not here anymore. It&#8217;s time for the rest of us to start digging.</p>

<p><em>Update 1/22: I originally misquoted Taren Stinebrickner-Kauffman slightly (but not substantively).</em></p>]]></content:encoded>
			<wfw:commentRss>http://copiesofcopies.org/webl/2013/01/20/aaron-swartz-the-root-and-the-rhizome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Always ask about the business model</title>
		<link>http://copiesofcopies.org/webl/2012/10/16/always-ask-about-the-business-model/</link>
		<comments>http://copiesofcopies.org/webl/2012/10/16/always-ask-about-the-business-model/#comments</comments>
		<pubDate>Tue, 16 Oct 2012 10:42:04 +0000</pubDate>
		<dc:creator>Aaron Williamson</dc:creator>
				<category><![CDATA[technology]]></category>
		<category><![CDATA[startups]]></category>

		<guid isPermaLink="false">http://copiesofcopies.org/webl/?p=305</guid>
		<description><![CDATA[Cross-posted from the SFLC blog The New York Tech Meetup is an impressive gathering of the guiding lights (and hopefuls) of the so-called &#34;Silicon Alley&#34; community. With over 27,000 members, NYTM is the largest meetup in the world and has become so influential that it&#8217;s attracted guest appearances by New York Mayor Michael Bloomberg and [...]]]></description>
				<content:encoded><![CDATA[<p><em>Cross-posted from the <a href="https://www.softwarefreedom.org/blog/2012/oct/16/always-ask-about-the-business-model/">SFLC blog</a></em></p>

<p>The <a href="http://nytm.org/">New York Tech Meetup</a> is an impressive gathering of the guiding lights (and hopefuls) of the so-called &quot;Silicon Alley&quot; community. With over 27,000 members, NYTM is the largest meetup in the world and has become so influential that it&#8217;s attracted guest appearances by New York Mayor <a href="http://nytm.org/blog/entry/11-13-2011/photos-from-mayors-visit-to-nytm">Michael Bloomberg</a> and United States CTO <a href="http://nytm.org/blog/entry/12-09-2012/nytm-shouting-exercising-event-curation-and-the-innovating-cto-of-the-unite">Todd Park</a>, and coaxed <a href="http://nytm.org/blog/entry/12-09-2012/letters-to-the-nytm-community-from-president-obama-and-governor-romney">statements from both 2012 presidential candidates</a> about how their policies will benefit the New York tech community. Every meetup follows a simple format: several New York technology startups present demos of their products and then answer questions from the audience. <span id="more-305"></span></p>

<p>NYTM audience members are told there is only one rule about questions: don&#8217;t ask about the business model. The stated reason for this is to maintain a focus on tech; the presenters&#8217; business models tend to be familiar&mdash;advertising, freemium, etc.&mdash;and so aren&#8217;t the interesting aspect of their products.</p>

<p>&quot;Don&#8217;t ask about the business model&quot; could also be called the founding ethos of this community: what you&#8217;re building is the important thing, how you&#8217;ll make money is a distant second. Facebook and Twitter didn&#8217;t have business models when they built the most popular social networks in the world. <a href="https://ifttt.com/">IFTTT</a> doesn&#8217;t have an obvious business model and it&#8217;s the talk of the tech press. With an awesome idea and Series A funding, there&#8217;s plenty of time to figure out a business model once you&#8217;ve realized your idea.</p>

<p>But &quot;don&#8217;t ask about the business model&quot; is beginning to sound like a Freudian slip: Don&#8217;t ask, because if you examine the business models too closely, what you find might make you uneasy. We&#8217;re far enough into the second dot-boom to see the business models that time and over-reliance on venture funding produce, and there&#8217;s plenty of reason for discomfort.</p>

<h2 id="patents-polluting-the-software-ecology">Patents: polluting the software ecology</h2>

<p>VC funding, like all free money, isn&#8217;t free. Investors are interested in startups not only for their technical excellence but also for their profit potential. They may be willing to give startups without a ready-made business model time to figure one out, but usually only if they believe their investment will be protected until it pays off. And (with few <a href="http://www.avc.com/a_vc/2011/06/enough-is-enough.html">exceptions</a>) that means taking <a href="http://37signals.com/svn/posts/333-warren-buffett-on-castles-and-moats">Warren Buffet&#8217;s advice</a> and building a &quot;moat&quot; around the business&mdash;in most cases, a moat made of patents.</p>

<p>By now, most software developers are aware of the tremendous harm that software patents are causing to the software ecology. Software giants are <a href="https://www.nytimes.com/2012/10/08/technology/patent-wars-among-tech-giants-can-stifle-competition.html?pagewanted=all">wasting hundreds of millions of dollars every year</a> suing each other and fending off attacks from patent trolls&mdash;holding companies whose sole purpose is to acquire patents and use them to extract royalties from software producers. And while trolls were once mainly concentrated on deep-pocketed players, they increasingly target smaller companies that will go down easy and boost the perceived value of their holdings. As <a href="http://engine.is/blog/posts/colleen-chien-patent-research-startups-paying-the-price">a recent study</a> found, startups fare much worse than established companies in these battles and are likelier to sustain lasting damage or even shut down as a result.</p>
<p>Despite these grave problems, startups feel like they have no choice but to seek patents, because VCs demand it. Maybe they try not to think about it, or maybe they believe they&#8217;re not part of the problem, that they&#8217;d never use their patents to keep other developers down.</p>
<p>But this misses the point. VCs don&#8217;t want their startups to get patents to keep other software companies from beating them to market. A startup&#8217;s meager portfolio&mdash;at best a handful of patents&mdash;won&#8217;t deter a troll or stand up against the war chest of a large company like Google or Apple. Even against a smaller competitor, a couple of patents aren&#8217;t much use, because the legal fees required to assert them can swallow even a decent Series A round whole.</p>
<p>The truth is that the patents aren&#8217;t a moat around the startup&#8217;s product, but around the VC&#8217;s investment. As every VC knows, a huge proportion of startups fail&mdash;<a href="http://techcrunch.com/2012/10/14/90-of-incubators-and-accelerators-will-fail-and-why-thats-just-fine-for-america-and-the-world/">as many as 90%</a>. Given this high failure rate, VCs don&#8217;t see startups as investments in themselves, but as pieces of an investment portfolio; they&#8217;ve placed bets across the board, expecting most of them to lose.</p>
<p>Patents are VCs&#8217; hedge against these inevitable losses. When a startup with patents fails, its patents become the property of its funders, compensation for the unrecouped startup capital. The funders have little use for the patents once the startup that produced them is out of the picture, so the patents become commodities to be sold to the highest bidder. Increasingly, the highest bidders are patent trolls, and the failed startup has inadvertently made the environment for software innovation more radioactive by exactly one (or two or seven) patents.</p>
<h2 id="strip-mining-user-data">Strip-mining user data</h2>
<p>If 90% of startups fail, then 10% succeed and need a business model to ensure their continued growth after the VC money runs out. Startups without a built-in business model have a few established paths before them: a handful of direct-payment models (pay-per-play, subscription, e-commerce, etc.) and advertising.</p>
<p>Depending on the startup, some of these options are a tough sell. Those that target professional users or businesses can put a price tag on their services without too much grumbling. But social media services (like Twitter and Facebook) and convenience services (like bitly) can typically only attract enough users by starting out free, and users used to free service can rarely be convinced to pay up later. The time-honored solution to this problem is to trade in the currency that users have been paying you all along, but don&#8217;t particularly value: their personal information.</p>
<p>Facebook, Twitter, Foursquare: all of the most successful social media services have ultimately balanced their books by ratcheting up their exploitation of users&#8217; data bit by bit. Each gathers an ever-more-detailed profile on every user and sells advertisers the ability to target highly particularized user demographics. Each exploits sharing between users to derive their social networks and learn how information&mdash;product preferences, political affiliations, news items&mdash;propagates through those networks, all to improve advertising partners&#8217; results.</p>
<p>As with software patents, the problems with commoditizing user data are well-known. The hidden nature of the bargain is problem enough: most users do not fully understand what they&#8217;re giving away to these free* services, and fewer still comprehend that merely by tagging their friends or uploading photos of them, they&#8217;re giving as much away on behalf of others.</p>
<p>More troubling is the tremendous value of this data to governments eager to understand the social links between persons of interests: terrorists, say, or just troublemakers or dissidents. <a href="http://www.readwriteweb.com/archives/how_us_government_spies_use_facebook.php">Facebook</a> and <a href="http://www.wired.com/threatlevel/2010/09/google-government-requests-rise/">Google</a>, to name just two examples, routinely comply with requests for user data from governments without demanding a warrant. While these problems seem distant to most Western users&mdash;at best a concern for criminals here, at worst an unfortunate reality for protesters in Cairo&mdash;they&#8217;re nonetheless the product of the business models we&#8217;re not asking about. And they&#8217;re really not so far off, as the <a href="http://www.readwriteweb.com/archives/twitter_wikileaks_online_privacy_implications.php">US Justice Department demonstrated</a> when it demanded that Twitter turn over private usage data on Americans associated with Wikileaks.</p>
<h2 id="always-ask-about-the-business-model">Always ask about the business model</h2>
<p>Software patents and data mining are the major ecological issues confronting technologists today. The prevailing business models, far from being uninteresting, have predictable consequences that pollute the environment for innovation and endanger users. Startups that elect these models, either by design or by default, no longer have the luxury of ignoring their inherent ethical problems. We have to start designing for sustainability. We <em>have</em> to ask about the business model. If we don&#8217;t, we&#8217;re selling out the future of software and the rights of actual human beings.</p>]]></content:encoded>
			<wfw:commentRss>http://copiesofcopies.org/webl/2012/10/16/always-ask-about-the-business-model/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An open infrastructure could curb high-frequency trading disasters</title>
		<link>http://copiesofcopies.org/webl/2012/08/10/an-open-infrastructure-could-curb-high-frequency-trading-disasters/</link>
		<comments>http://copiesofcopies.org/webl/2012/08/10/an-open-infrastructure-could-curb-high-frequency-trading-disasters/#comments</comments>
		<pubDate>Fri, 10 Aug 2012 11:06:34 +0000</pubDate>
		<dc:creator>Aaron Williamson</dc:creator>
				<category><![CDATA[free software]]></category>
		<category><![CDATA[electronic trading]]></category>

		<guid isPermaLink="false">http://copiesofcopies.org/webl/?p=312</guid>
		<description><![CDATA[Cross-posted from the SFLC blog In yesterday&#8217;s New York Times, Ellen Ullman criticized the SEC&#8217;s suggestion that mandated software testing could prevent automated-trading catastrophes like the one that shook the market and nearly bankrupted Knight Capital at the beginning of this month. More testing won&#8217;t work, according to Ullman, for a few reasons. First, computer [...]]]></description>
				<content:encoded><![CDATA[<p><em>Cross-posted from the <a href="https://www.softwarefreedom.org/blog/2012/aug/10/open-infrastructure-high-frequency-trading/">SFLC blog</a></em></p>
<p>In yesterday&#8217;s New York
Times, <a href="http://www.nytimes.com/2012/08/09/opinion/after-knight-capital-new-code-for-trades.html">Ellen
Ullman criticized</a>
the SEC&#8217;s <a href="http://sec.gov/news/press/2012/2012-151.htm">suggestion</a> that mandated software testing could prevent
automated-trading catastrophes like the one
that <a href="http://www.cnbc.com/id/48448165/Error_by_Knight_Capital_roils_stocks_trading">shook
the market</a>
and <a href="http://in.reuters.com/article/2012/08/09/knightcapital-stockinventory-idINL2E8J906X20120809">nearly
bankrupted</a> Knight Capital at the beginning of this month. More
testing won&#8217;t work, according to Ullman, for a few reasons. First,
computer systems are too complex to ever &#8220;fully test,&#8221; because they
comprise multiple software and hardware subsystems, some proprietary,
others (like routers) containing &#8220;inaccessible&#8221; embedded code. Second,
all code contains bugs, and because bugs can be caused by interactions between modules and even by attempts to fix other bugs, no
code will ever be completely bug-free. And finally, it is too
difficult to delineate insignificant changes to the software from
those that really require testing. <span id="more-312"></span></p>

<p>Ullman&#8217;s critique of a testing-centric solution has some
merit, although few professional developers test individual &#8220;coding changes&#8221; (they really do test entire systems anytime changes are introduced). But her proposed alternative is heavyweight and
difficult to square with the needs of the industry. She proposes making
brokers liable for losses caused by trading errors in order to induce
them to write &#8220;artificial intelligence programs that recognize unusual
patterns&#8221; and shut down runaway trading algorithms. Her model is the regulation of
credit card companies: since they&#8217;re liable for most fraudulent
charges, they&#8217;ve created software to track purchases and put holds on
accounts showing suspicious activity. In Ullman&#8217;s scheme, the SEC
would also create its own electronic sentries as a backstop.</p>

<p>I doubt Ullman&#8217;s assumption that the rogue trading program problem can be fought with A.I. as successfully as credit card fraud. The speed of automatic trading&mdash;the systems can evaluate and
execute thousands of trades per second&mdash;makes automated trouble-shooting much trickier. Even very fast A.I. would likely take more than a few seconds to spot bad behavior reliably.  This is time enough for several thousand erroneous trades to be made. And false positives would be far more expensive, since for every second
the program was down, thousands of legitimate trades would not be
made. In the credit card context, where fraud happens at human speed,
it makes sense to have humans double-check the computer&#8217;s
determinations, but Ullman&#8217;s suggestion that the same human-backup
process would port easily to the algorithmic trading context is
ill-considered.</p>

<p>Algorithmic traders could reduce their error rate much less
expensively (and more realistically) by collaborating on a common
infrastructure for executing trades, using free and open source
software everyone could review, test and improve. Trading firms are understandably tight-lipped about the
algorithms that actually choose which trades to make; these are the
source of their competitive advantage over other
firms. But most of the pieces of everyone&#8217;s high-frequency trading systems are
not so secret, including the real-time operating system, high-volume message
queuing, and software actually executing the selected
trades. By opening, standardizing, and collaborating on these
ancillary but complex components, trading firms could reduce errors
and improve reliability, all without exposing their trading
strategies. A common infrastructure used and collaboratively produced
by several firms would be better-tested than the balkanized systems in
use now, and less prone to the interaction effects that Ullman finds prevalent in complex systems. Open code would also enable the SEC
to audit the system directly, without the complexity and expense of AI &#8220;watchers.&#8221;</p>

<p>Doubtless
many firms believe their competitive advantage derives partly from proprietary
kernel modifications or optimizations to their messaging systems. But the Knight Capital failure,
the <a href="https://en.wikipedia.org/wiki/2010_Flash_Crash">2010
Flash Crash</a>, and similar episodes have made it clear that trading
firms&mdash;as well as their investors and the market as a whole&mdash;pay a heavy
price for their secrecy. That
price will only increase if the SEC passes expensive regulations to
deter future failures. If the firms can work together now, they may
find that, by turning their infrastructure into shared, standard
components, they can not only keep the regulators at bay, but also free their own
resources to concentrate on the trading algorithms that are the true value add to their business.</p>]]></content:encoded>
			<wfw:commentRss>http://copiesofcopies.org/webl/2012/08/10/an-open-infrastructure-could-curb-high-frequency-trading-disasters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Farro pistachio palm salad</title>
		<link>http://copiesofcopies.org/webl/2012/07/27/farro-pistachio-palm-salad/</link>
		<comments>http://copiesofcopies.org/webl/2012/07/27/farro-pistachio-palm-salad/#comments</comments>
		<pubDate>Fri, 27 Jul 2012 00:50:41 +0000</pubDate>
		<dc:creator>Aaron Williamson</dc:creator>
				<category><![CDATA[food]]></category>
		<category><![CDATA[farro]]></category>
		<category><![CDATA[hearts of palm]]></category>
		<category><![CDATA[pistachio]]></category>
		<category><![CDATA[recipe]]></category>
		<category><![CDATA[salad]]></category>

		<guid isPermaLink="false">http://copiesofcopies.org/webl/?p=287</guid>
		<description><![CDATA[I really do my best to avoid eating salads as meals. Not only do I have an irrational prejudice toward meal salads owing to my disgust with fad diets, but people generally think that vegans eat nothing but salads, and I don&#8217;t want to play to stereotypes. But one immutable rule of CSAs is that [...]]]></description>
				<content:encoded><![CDATA[<p>I really do my best to avoid eating salads as meals. Not only do I have an irrational prejudice toward meal salads owing to my disgust with fad diets, but people generally think that vegans eat nothing but salads, and I don&#8217;t want to play to stereotypes. But one immutable rule of CSAs is that you will get a lot of damn lettuce. Every week, one or two heads of lettuce, and there&#8217;s really nothing you can do but make some salads.<span id="more-287"></span> So tonight:</p>

<h3>Farro pistachio palm salad</h3>

<p><em>Ingredients</em></p>
<ul>
<li>1 cup uncooked farro</li>
<li>1 head lettuce, chopped (basically anything but iceberg&mdash;I used Bibb)</li>
<li>2 carrots, julienne</li>
<li>3 stalks celery, 1/4&#8243; dice</li>
<li>1 can hearts of palm, sliced into 1/4&#8243;-thick rounds</li>
<li>1/4 cup shelled pistachios</li>
<li>Juice from 1/2 lemon</li>
<li>1 tbsp. oil for dressing (olive, safflower, or whatever you like)</li>
<li>salt</li>
<li>pepper</li>
</ul>

<p><em>Directions</em></p>
<p>Bring 4-6 cups of water to boil in a small stockpot. Add the farro, return to a boil, then cover, reduce heat, and simmer for 20-30 minutes, until farro is cooked to desired texture. In the meantime, prepare the vegetables and toss them in a serving bowl. When the farro is done, mix it with the pistachios, lemon, and oil. To the farro mixture, add salt and pepper to taste. Spoon farro mixture over salad and serve.</p>]]></content:encoded>
			<wfw:commentRss>http://copiesofcopies.org/webl/2012/07/27/farro-pistachio-palm-salad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cold-brewed coffee</title>
		<link>http://copiesofcopies.org/webl/2012/07/18/cold-brewed-coffee/</link>
		<comments>http://copiesofcopies.org/webl/2012/07/18/cold-brewed-coffee/#comments</comments>
		<pubDate>Wed, 18 Jul 2012 16:40:52 +0000</pubDate>
		<dc:creator>Aaron Williamson</dc:creator>
				<category><![CDATA[food]]></category>
		<category><![CDATA[reviews]]></category>
		<category><![CDATA[snobbery]]></category>
		<category><![CDATA[coffee]]></category>
		<category><![CDATA[cold-brewed]]></category>

		<guid isPermaLink="false">http://copiesofcopies.org/webl/?p=269</guid>
		<description><![CDATA[It&#8217;s summer and it&#8217;s hot, so I&#8217;ve mostly switched from hot coffee to iced coffee. I&#8217;ve been hearing about the esoteric pleasures of cold-brewed coffee from geeks and friends for a few years, but despite the almost idiot simplicity of the process, I didn&#8217;t bother trying it till this week. The process Cold-Brewed Iced Coffee [...]]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s summer and it&#8217;s hot, so I&#8217;ve mostly switched from hot coffee to iced coffee. I&#8217;ve been hearing about the esoteric pleasures of cold-brewed coffee from <a href="http://boingboing.net/2011/06/27/reivew-field-testing.html">geeks</a> and <a href="http://hackervisions.org/">friends</a> for a few years, but despite the almost idiot simplicity of the process, I didn&#8217;t bother trying it till this week.<span id="more-269"></span></p>

<h3>The process</h3>
<dl style="float:right; padding-top:0px;" ><dt><img src="http://farm4.staticflickr.com/3097/2574630081_7ba1071f07.jpg" title="Cold-Brewed Iced Coffee by thebittenword.com" alt="Cold-Brewed Iced Coffee by thebittenword.com" style="border: 1px solid black;" /></dt><dd><a href="http://www.flickr.com/photos/galant/2574630081/">Cold-Brewed Iced Coffee</a> by thebittenword.com</dd></dl>
<p>I did more or less <a href="http://www.americastestkitchenfeed.com/do-it-yourself/2011/08/how-to-make-cold-brew-coffee/">this</a>, although I didn&#8217;t bother with the filter-straining step. This was in part because I don&#8217;t have filters (my mainstay is an electric percolator) and in part because I was using pre-ground coffee. That last is a fundamental caveat here&mdash;my results would likely have been different with high-quality fresh-ground beans.</p>

<h3>The results</h3>

<p>Cold-brewed coffee does not taste like hot-brewed coffee. I was skeptical of this, because self-identified connoisseurs often blow these things out of proportion. But here the difference is genuine. A coffee-denying friend once told me that the problem with coffee is that it smells wonderful and tastes terrible, and while I either disagree about the taste or am too addicted to care, there&#8217;s no doubt that some of the complexity of roasted coffee&#8217;s aroma does not show up in the finished hot-brewed product. Much more of that complexity is preserved by cold-brewing. As the article linked above says, the result is a profile like you&#8217;d get from quality chocolate or wine: flavors of dried fruits, nuts, cocoa, etc.</p>

<p>So cold-brewed coffee is richer, but I&#8217;m not ready to say it&#8217;s better. Or, at least, someone who&#8217;s used to hot-brewed coffee or even espresso won&#8217;t necessarily prefer the flavor of cold-brewed, in the same way that someone used to milk chocolate may find purer chocolate unpalatable. I&#8217;ll experiment with some variations and update this with the results.</p>]]></content:encoded>
			<wfw:commentRss>http://copiesofcopies.org/webl/2012/07/18/cold-brewed-coffee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Super! Mario! Minigolf! (Figment!)</title>
		<link>http://copiesofcopies.org/webl/2012/05/14/super-mario-minigolf-figment/</link>
		<comments>http://copiesofcopies.org/webl/2012/05/14/super-mario-minigolf-figment/#comments</comments>
		<pubDate>Mon, 14 May 2012 03:13:50 +0000</pubDate>
		<dc:creator>Aaron Williamson</dc:creator>
				<category><![CDATA[projects]]></category>
		<category><![CDATA[building]]></category>
		<category><![CDATA[figment]]></category>
		<category><![CDATA[minigolf]]></category>

		<guid isPermaLink="false">http://copiesofcopies.org/webl/?p=137</guid>
		<description><![CDATA[Updated to include more details about the construction and installation. The artists&#8217; minigolf course has always been one of my favorite parts of Figment and this year I finally got it together to build one of the holes. The theme was &#8220;Arcade,&#8221; and after a tipsy brainstorming session where Josh suggested a 3D pixel landscape, [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Updated</strong> to include more details about the construction and installation.

<p>The artists&#8217; minigolf course has always been one of my favorite parts of <a title="Figment" href="http://http://figmentproject.org/" target="_blank">Figment</a> and this year I finally got it together to build one of the holes. The theme was &#8220;Arcade,&#8221; and after a tipsy brainstorming session where Josh suggested a 3D pixel landscape, I decided to build a Super Mario-style hole. <span id="more-137"></span>My first step was to render the piece in Blender to have images to submit with my proposal and so that I could move pieces around till I got the look I wanted. Here&#8217;s the rendering I submitted with the proposal:</p>

<p><a href="http://copiesofcopies.org/webl/wp-content/uploads/2012/05/view-1.jpg"><img class="aligncenter size-full wp-image-138" title="Minigolf rendering" src="http://copiesofcopies.org/webl/wp-content/uploads/2012/05/view-1.jpg" alt="Minigolf rendering" width="730" /></a></p>

<p>The design has changed slightly since, but that&#8217;s the basic idea. (Here&#8217;s the <a href="http://copiesofcopies.org/files/figment-minigolf.blend">final blender file</a>, if you&#8217;re interested. It betrays my crappy Blender skills.)

<h3>The Build</h3>

After I had the dimensions down, Tim rendered <a href="http://copiesofcopies.org/files/minigolf-cad.dxf">the plywood pieces</a> (the platform and the skeletons of the features) using TurboCAD. Jesse took those and used a CNC router to cut out the pieces. (Yes, I have awesome friends. You should get some like these.)</p>

<div id="attachment_141" class="wp-caption aligncenter" style="width: 650px"><a href="http://copiesofcopies.org/webl/wp-content/uploads/2012/05/tim.jpg"><img src="http://copiesofcopies.org/webl/wp-content/uploads/2012/05/tim.jpg" alt="Tim checks his pager messages. Foreground: the glue on the castle infrastructure dries." title="Tim checks his pager messages. Foreground: the glue on the castle infrastructure dries." width="640" height="427" class="size-full wp-image-141" /></a><p class="wp-caption-text">The infrastructure pieces are held together with wood glue. Here's the castle's skeleton drying while Tim checks his pager.</p></div>

<p>The exterior of the plywood pieces are made of 1.5&#8243; blocks (from <a href="http://www.craftparts.com/">craftparts.com</a>). I originally had the fantastically stupid idea of beveling (Tim says I mean &#8220;chamfering&#8221;) the edges with a belt sander, but once I calculated that I&#8217;d need 1,500 hundred of them (times 12 edges per block = 18,000 beveled edges), Tim wisely steered me toward the table saw. He built an absolutely perfect jig (a sort of block tunnel) to guide rows of block over the tilted blade, and we worked out a workflow (cut, flip, rotate, repeat; picture <a href="http://25.media.tumblr.com/tumblr_m171gi6zRe1rpguofo1_100.gif">this</a>) that got the job done in about 10 hours, all told. Once the blocks were cut, Kat and Carly<a href="http://www.toolsforworkingwood.com//Merchant/merchant.mvc?Screen=PROD&#038;Store_Code=toolshop&#038;Product_Code=LW-WCON.XX&#038;CategoryID=169">dyed</a> them and set them out to dry.</p>

<p>Next, a bunch of us (Anna, Tracy, Carly, Clint, and I) attached the blocks to the plywood structures with Liquid Nails. (For whatever reason, Liquid Nails turned out to be a disaster &#8212; when the pieces were subjected to the weather on Governor&#8217;s Island, they expanded slightly and the Liquid Nails, having never really fully dried, couldn&#8217;t hold them. Most of the blocks had to be reattached with wood glue.)</p>

<div id="attachment_139" class="wp-caption aligncenter" style="width: 650px"><a href="http://copiesofcopies.org/webl/wp-content/uploads/2012/05/tracy-and-anna.jpg"><img src="http://copiesofcopies.org/webl/wp-content/uploads/2012/05/tracy-and-anna.jpg" alt="Tracy and Anna gluing blocks" title="Tracy and Anna gluing blocks" width="640" height="427" class="size-full wp-image-139" /></a><p class="wp-caption-text">Here's Tracy and Anna building a blocky hillside.</p></div>

<div id="attachment_140" class="wp-caption aligncenter" style="width: 650px"><a href="http://copiesofcopies.org/webl/wp-content/uploads/2012/05/carly.jpg"><img src="http://copiesofcopies.org/webl/wp-content/uploads/2012/05/carly.jpg" alt="Carly putting the finishing touches on a hill" title="Carly putting the finishing touches on a hill" width="640" height="427" class="size-full wp-image-140" /></a><p class="wp-caption-text">And here's Carly putting the finishing touches on a hill</p></div>

(To be continued&#8230;)]]></content:encoded>
			<wfw:commentRss>http://copiesofcopies.org/webl/2012/05/14/super-mario-minigolf-figment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On digital music and actually paying artists</title>
		<link>http://copiesofcopies.org/webl/2012/05/08/on-digital-music-and-actually-paying-artists/</link>
		<comments>http://copiesofcopies.org/webl/2012/05/08/on-digital-music-and-actually-paying-artists/#comments</comments>
		<pubDate>Tue, 08 May 2012 02:06:48 +0000</pubDate>
		<dc:creator>Aaron Williamson</dc:creator>
				<category><![CDATA[music]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[digital music]]></category>
		<category><![CDATA[okkervil river]]></category>
		<category><![CDATA[spotify]]></category>

		<guid isPermaLink="false">http://copiesofcopies.org/webl/?p=131</guid>
		<description><![CDATA[Will Sheff posted this link on Okkervil River&#8217;s twitter stream. It&#8217;s a post by musician Bradley James about the pittance he gets from Spotify each time one of his songs is played (he got $20.76 for 4498 plays, or 4/10 of a cent per play). His point is that, as streaming music services come to [...]]]></description>
				<content:encoded><![CDATA[<p>Will Sheff <a href="https://twitter.com/#!/okkervilriver/status/199618320276791298">posted</a> this <a href="http://musicbybradleyjames.wordpress.com/2012/05/07/hey-can-you-spotify-me-some-cash-an-indie-artists-perspective/">link</a> on Okkervil River&#8217;s twitter stream. It&#8217;s a post by musician Bradley James about the pittance he gets from Spotify each time one of his songs is played (he got $20.76 for 4498 plays, or 4/10 of a cent per play). His point is that, as streaming music services come to supplant album purchases for an increasing proportion of music listeners, artists will make less money. This is undoubtedly true; as much as Internet boosters tout the breaking down of barriers between artists and fans and the death of artificial scarcity, they (we) can&#8217;t wave away the fact that no reliable way to pay artists has arisen to replace lost album sales. We know (and Mike Masnick at TechDirt has <a href="http://www.techdirt.com/blog/?tag=reason+to+buy">diligently documented</a>) how some artists have succeeded some of the time, but those artists are on the leading edge of technological savvy and adaptability. Plenty of others have struggled badly, not because they didn&#8217;t work hard or make great art, but simply because the proven system for compensating creativity broke down on their watch.<span id="more-131"></span></p>

<p>Despite this, I took exception to James&#8217;s conclusion that &#8220;If you appreciate a song or an album buy it so the artist can appreciate your support.&#8221; <a href="https://twitter.com/#!/copiesofcopies/status/199619287755927552">My response</a> (and I&#8217;m paraphrasing, because tweets demean us all) was that buying copies of songs is no answer. The great thing about the internet is that we don&#8217;t <em>need</em> copies anymore &#8212; we can broadcast (relatively, but soon unequivocally) high-quality audio on-demand, instantly, to anyone with a connection. We only ever had to own individual copies of the songs we liked because it was the best technology we had for giving people music on demand, and that&#8217;s no longer true. And even though selling copies has been how we&#8217;ve primarily paid artists for the last several decades, there must be other ways &#8212; we&#8217;ve supported musicians for millennia without even being able to record music.</p>

<p>To Sheff, I sounded like <a href="https://twitter.com/#!/okkervilriver/status/199647411390525443">all tech people</a>, in no small part because I unwisely called albums &#8220;<a href="https://twitter.com/#!/copiesofcopies/status/199633987445080064">obsolete technology</a>,&#8221; which is dismissive and in many ways untrue, to say nothing of its disutility as a rhetorical device in a conversation with a musician. But truly, having a music collection has, for the last several years at least, been nothing but a source of psychological stress for me. I&#8217;ve got a small collection of vinyl, because it&#8217;s got a physical presence and a mythology that no other format ever did, but I can&#8217;t realistically collect music this way, nor can most people &#8212; it&#8217;s bulky and heavy, and owning very much of it makes rent expensive and moving horrible. CDs truly have nothing to recommend them: none of the mystique of an LP, <a href="http://xiphmont.livejournal.com/58294.html">no perceptibly higher quality</a> than a good mp3, and they still take up lots of space.</p>

<p>So if LPs are impractical and CDs offer no benefits, my remaining option is to &#8220;own&#8221; some mp3s, but why the hell would I want to do that? Right now I listen to mp3s in three places &#8212; my home stereo PC, my laptop that I take to work, and my phone/mp3 player. The collections don&#8217;t overlap because my phone doesn&#8217;t hold all my music and I don&#8217;t sync between my other computers often, so I don&#8217;t always have all of my music with me. Worse, hard drives fail like champs, so in addition to all these devices, I&#8217;ve got to have a backup if I want to make sure I don&#8217;t lose my investment in all those songs I &#8220;own.&#8221; But even a single-hard drive backup isn&#8217;t <em>really</em> reliable, and anyway it takes a lot of discipline to do backups right. If I can subscribe to a service that has all of the songs I want to listen to, I don&#8217;t have to worry about storing and moving physical objects, or about backups, or about having all of my music accessible wherever I listen. (Assuming a ubiquitous Internet connection, which is admittedly a big assumption.)</p>

<p>I&#8217;m not everybody. Some people have a lot more personally invested in having tangible copies of each of their albums than I do, for example. But whatever gratification they may get out of those physical objects, even they mostly value the music, and an increasing proportion of music fans values <em>only</em> the music. Owning copies adds baggage, not value, for those fans. Telling them to buy a copy is tantamount to asking them to make a donation: it may be the right thing to do, but it&#8217;s not really tied in any way to the value they&#8217;re getting out of the product, because they&#8217;re probably going to listen to the album via the streaming service they were already using.</p>

<p>The point here isn&#8217;t that artists should get over it. Music fans need to be aware of how little they&#8217;re contributing to the music they love by subscribing to Spotify or Pandora or Rhapsody. But for the artist who can&#8217;t count on enlightened, community-minded listeners, the fact remains that people will by and large only pay where they perceive they&#8217;re getting value out of the transaction. It&#8217;s not good enough that they consider the artist or the art valuable &#8212; they have to believe they&#8217;re getting specific <em>additional</em> value out of <em>this</em> purchase (to economists, this is &#8220;marginal value&#8221;). And we&#8217;re past the point where most people believe they get any more value out of an mp3 download, a CD, or even an LP, than they do out of reasonably reliable access to a song streaming from someone else&#8217;s server.</p>

<p>While I think this is an important thing for artists to understand, I don&#8217;t think it&#8217;s positive. I think our self-centered insistence on marginal value is the result of centuries of conditioning by capitalism and decades of dependence upon a music production and dissemination system that values profits over art and national/international appeal over intimate (or local) experience. The distribution channels were for many years captured by publishers, leaving independent record stores to struggle along in the margins, and despite the Internet&#8217;s promise of connecting fans directly to artists, they&#8217;ve only been recaptured as iTunes, Amazon, and the various streaming services. The inevitable national tours, where artists are told to go pick up the slack from album sales, make it impossible for artists to hold down solid jobs, and disconnect them from the local support systems in their hometowns. So the problem&#8217;s systemic, and just as it&#8217;s not going to be solved by telling people to &#8220;buy&#8221; albums, it&#8217;s not going to be solved by telling artists to just find the money somewhere else.</p>]]></content:encoded>
			<wfw:commentRss>http://copiesofcopies.org/webl/2012/05/08/on-digital-music-and-actually-paying-artists/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A better DateTime widget for Django</title>
		<link>http://copiesofcopies.org/webl/2010/04/26/a-better-datetime-widget-for-django/</link>
		<comments>http://copiesofcopies.org/webl/2010/04/26/a-better-datetime-widget-for-django/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 15:06:50 +0000</pubDate>
		<dc:creator>Aaron Williamson</dc:creator>
				<category><![CDATA[free software]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[datepicker]]></category>
		<category><![CDATA[datetime]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[jquery ui]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://www.copiesofcopies.org/webl/?p=81</guid>
		<description><![CDATA[I&#8217;m convinced that every Django developer has struggled with how to present DateTime fields to users.  We all know and love the widgets used in the Django admin, and emboldened by the Django developers,1 every new developer tries to just use those.  But each one discovers quickly that it&#8217;s not that simple &#8212; you have [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m convinced that every Django developer has struggled with how to present DateTime fields to users.  We all know and love <a href="http://benkreeger.com/post/312292823/django-and-the-admin-datetime-picker">the widgets used in the Django admin</a>, and emboldened by the Django developers,<sup><a href="http://copiesofcopies.org/webl/2010/04/26/a-better-datetime-widget-for-django/#footnote_0_81" id="identifier_0_81" class="footnote-link footnote-identifier-link" title="&ldquo;If you like the widgets that the Django Admin application uses, feel free to use them in your own application! They&rsquo;re all stored in django.contrib.admin.widgets.&rdquo; &ndash; The Django Form Media documentation">1</a></sup> <a href="http://www.osdir.com/ml/DjangoUsers/2009-03/msg01717.html">every</a> <a href="http://stackoverflow.com/questions/38601/using-django-time-date-widgets-in-custom-form">new</a> <a href="http://groups.google.com/group/django-users/browse_thread/thread/57733d0bbcbdc765">developer</a> tries to just use those.  But each one discovers quickly that it&#8217;s not that simple &#8212; you have to link in CSS from the admin site that will screw with your layout, and even after you get it working on your test site, it <em>will not</em> deploy correctly to production.<span id="more-81"></span>  So let me begin by saying:</p>

<p><strong>Do not use the Django admin&#8217;s DateTime widget.</strong></p>

<p>I spent the weekend working out how to do a split DateTime widget properly, and I&#8217;m pretty happy with the result, so I&#8217;ll share it here.  It uses a text field with a jQuery UI calendar picker for the date, and a simple widget for the time.  Here&#8217;s what it looks like:</p>


<a href='http://copiesofcopies.org/webl/2010/04/26/a-better-datetime-widget-for-django/widget-closed/' title='widget-closed'><img width="150" height="150" src="http://copiesofcopies.org/webl/wp-content/uploads/2010/04/widget-closed-150x150.png" class="attachment-thumbnail" alt="The widget before the calendar picker is opened" /></a>
<a href='http://copiesofcopies.org/webl/2010/04/26/a-better-datetime-widget-for-django/widget-open/' title='widget-open'><img width="150" height="150" src="http://copiesofcopies.org/webl/wp-content/uploads/2010/04/widget-open-150x150.png" class="attachment-thumbnail" alt="The widget after the calendar picker is opened" /></a>


<p>And here&#8217;s the code:</p>

<strong><em>fields.py</em></strong>
<code>
from time import strptime, strftime
from django import forms
from django.db import models
from django.forms import fields
from conflux.widgets import JqSplitDateTimeWidget

class JqSplitDateTimeField(fields.MultiValueField):
    widget = JqSplitDateTimeWidget

    def __init__(self, *args, **kwargs):
        """
        Have to pass a list of field types to the constructor, else we
        won't get any data to our compress method.
        """
        all_fields = (
            fields.CharField(max_length=10),
            fields.CharField(max_length=2),
            fields.CharField(max_length=2),
            fields.ChoiceField(choices=[('AM','AM'),('PM','PM')])
            )
        super(JqSplitDateTimeField, self).__init__(all_fields, *args, **kwargs)
    
    def compress(self, data_list):
        """
        Takes the values from the MultiWidget and passes them as a
        list to this function. This function needs to compress the
        list into a single object to save.
        """
        if data_list:
            if not (data_list[0] and data_list[1] and data_list[2] and data_list[3]):
                raise forms.ValidationError("Field is missing data.")
            input_time = strptime("%s:%s %s"%(data_list[1], data_list[2], data_list[3]), "%I:%M %p")
            datetime_string = "%s %s" % (data_list[0], strftime('%H:%M', input_time))
            print "Datetime: %s"%datetime_string
            return datetime_string
        return None
</code>

<strong><em>widgets.py</em></strong>
<code>
from django import forms
from django.db import models
from django.template.loader import render_to_string
from django.forms.widgets import Select, MultiWidget, DateInput, TextInput
from time import strftime

class JqSplitDateTimeWidget(MultiWidget):

    def __init__(self, attrs=None, date_format=None, time_format=None):
        date_class = attrs['date_class']
        time_class = attrs['time_class']
        del attrs['date_class']
        del attrs['time_class']

        time_attrs = attrs.copy()
        time_attrs['class'] = time_class
        date_attrs = attrs.copy()
        date_attrs['class'] = date_class
        
        widgets = (DateInput(attrs=date_attrs, format=date_format), 
                   TextInput(attrs=time_attrs), TextInput(attrs=time_attrs), 
                   Select(attrs=attrs, choices=[('AM','AM'),('PM','PM')]))
        
        super(JqSplitDateTimeWidget, self).__init__(widgets, attrs)

    def decompress(self, value):
        if value:
            d = strftime("%Y-%m-%d", value.timetuple())
            hour = strftime("%I", value.timetuple())
            minute = strftime("%M", value.timetuple())
            meridian = strftime("%p", value.timetuple())
            return (d, hour, minute, meridian)
        else:
            return (None, None, None, None)

    def format_output(self, rendered_widgets):
        """
        Given a list of rendered widgets (as strings), it inserts an HTML
        linebreak between them.
        
        Returns a Unicode string representing the HTML for the whole lot.
        """
        return "Date: %s&lt;br/&gt;Time: %s:%s %s" % (rendered_widgets[0], rendered_widgets[1],
                                                rendered_widgets[2], rendered_widgets[3])

    class Media:
        css = {
            }
        js = (
            "js/jqsplitdatetime.js",
            )
</code>

<strong><em>/media/js/jqsplitdatetime.js</em></strong>
<code>
$(function() {
   $(".datepicker").datepicker({ dateFormat: 'yy-mm-dd' });
});
</code>

<p>To use the field in a form, put something like the following into your form definition:</p>
<code>
some_date_field = JqSplitDateTimeField(widget=JqSplitDateTimeWidget(attrs={'date_class':'datepicker','time_class':'timepicker'})
</code>

<p>Finally, you need to put the jQuery UI code somewhere.  Go <a href="http://jqueryui.com/download">get a custom jQuery UI package</a> (I used all of UI Core and Interactions, the Datepicker widget, and Effects Core &#8212; your may want more or less depending on where else you&#8217;re using JQuery and JQuery UI), put the necessary files (the jQuery UI css and js, the jQuery js) somewhere accessible to your form.  I&#8217;m using jQuery UI throughout my site, so I&#8217;ve got them in my base.html:</p>

<code>
    &lt;link type="text/css" href="/media/css/ui-conflux/jquery-ui-1.8.custom.css" rel="Stylesheet" /&gt;
    &lt;script src="/media/js/jquery-1.4.2.min.js" type="text/javascript"&gt;&lt;/script&gt;
    &lt;script src="/media/js/jquery-ui-1.8.custom.min.js" type="text/javascript"&gt;&lt;/script&gt;
</code>

<p>But if you only need jQuery UI for this form, it might make sense to put these in the media class of the JqSplitDateTimeWidget along with jqsplitdatetime.js:</p>

<code>
class Media:
   css = {
      "css/ui-custom/jquery-ui-1.8.custom.css"
   }
   js = (
      "js/jqsplitdatetime.js",
      "js/jquery-1.4.2.min.js",
      "js/jquery-ui-1.8.custom.min.js",
   )
</code>

<p>A couple of caveats: this widget is not currently very customizable/internationalizable.  It only deals with 12-hour time and I should probably pass the date format in as an argument.  But it does the trick for what I need, and what a lot of U.S. developers will need, and these things are easily added (I&#8217;d love a patch!).</p><ol class="footnotes"><li id="footnote_0_81" class="footnote">&#8220;If you like the widgets that the Django Admin application uses, feel free to use them in your own application! They’re all stored in <tt>django.contrib.admin.widgets</tt>.&#8221; &#8211; The Django <a href="http://docs.djangoproject.com/en/dev/topics/forms/media/">Form Media documentation</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://copiesofcopies.org/webl/2010/04/26/a-better-datetime-widget-for-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clickwrap for Django and best practices for Terms of Service</title>
		<link>http://copiesofcopies.org/webl/2010/04/14/clickwrap-for-django-and-best-practices-for-terms-of-service/</link>
		<comments>http://copiesofcopies.org/webl/2010/04/14/clickwrap-for-django-and-best-practices-for-terms-of-service/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 14:48:37 +0000</pubDate>
		<dc:creator>Aaron Williamson</dc:creator>
				<category><![CDATA[free software]]></category>
		<category><![CDATA[i am a lawyer]]></category>
		<category><![CDATA[agreement]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[legal]]></category>
		<category><![CDATA[terms of service]]></category>

		<guid isPermaLink="false">http://www.copiesofcopies.org/webl/?p=76</guid>
		<description><![CDATA[Last night, I wrote a simple Django application for managing clickwrap legal agreements. I&#8217;m developing the artists&#8217; submission system for the Conflux Festival&#8216;s new site (which is not yet live), and we require artists to agree to an Artist Agreement before submitting entries for the festival. Since this sort of process is relatively simple and [...]]]></description>
				<content:encoded><![CDATA[<p>Last night, I wrote <a href="http://gitorious.org/django-applications/legal-versioning">a simple Django application</a> for managing clickwrap legal agreements. I&#8217;m developing the artists&#8217; submission system for the <a href="http://www.confluxfestival.org">Conflux Festival</a>&#8216;s new site (which is not yet live), and we require artists to agree to an Artist Agreement before submitting entries for the festival.  Since this sort of process is relatively simple and extremely common, I decided to write a reusable app rather than just work the logic into my submissions application.  (I took a quick look around and as far as I can tell nobody else has put out an application for this purpose, but I may be wrong and if I am you should tell me in the comments.)<span id="more-76"></span></p>

<p>The goals for this application are/were roughly:</p>
<ul>
<li>Give developers an easy way to check whether a user has agreed to a particular agreement when the user accesses a view.  I decided the best way to do this was through a decorator, like so:

<code>
@requires_agreement('terms_of_service')
     def any_old_view(request):
     ...
</code>
<li>Keep versions of each agreement and record users&#8217; agreement to each, so that the site maintainers have a log of which terms bound a user at which date, and the decorator above can determine whether the user has signed the *latest* version of the agreement.
</ul>
I implemented both of the above features in version 0.1.  What I want to do next is build in a feature I think is best practice for any site that maintains terms of service or a privacy policy:
<ul>
<li> When a user is asked to agree to an updated version of an agreement that user has already signed, display a diff of the old form and the current one so that the user can easily see what&#8217;s changed.
</ul>
<p>If you don&#8217;t do this, and your site gets big enough, <a href="http://www.tosback.org">EFF will do it for you</a>.  In my opinion, it&#8217;s a matter of fundamental respect for users &#8212; if you reserve the right in your ToS to make periodic changes to the agreement (and there are good reasons to do this), you should give your users clear notice of those changes.</p>

<p>Unfortunately, the most common practice is to change the terms silently and leave users to seek out a tiny link in the footer if they want to find the current terms. Another common, far better practice is to display the new terms upon the user&#8217;s first login to the site after the new terms become active.  But few (<strong>edit</strong>: <a href="http://idle.slashdot.org/story/10/04/15/1328210/Fine-Print-Says-Game-Store-Owns-Your-Soul">very few</a>) users read the original terms, much less remember them, so even upon a careful read-through they may have no idea what&#8217;s changed.  By giving users a diff of the old and new terms, a site makes itself accountable to and builds goodwill with its users.  It may also strengthen the legal effect of its terms by giving users actual notice (although courts have been all too ready to enforce online agreements with little to no notice).</p>]]></content:encoded>
			<wfw:commentRss>http://copiesofcopies.org/webl/2010/04/14/clickwrap-for-django-and-best-practices-for-terms-of-service/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>FLOSS Dispenser: a free market for Android</title>
		<link>http://copiesofcopies.org/webl/2010/02/10/floss-dispenser-a-free-market-for-android/</link>
		<comments>http://copiesofcopies.org/webl/2010/02/10/floss-dispenser-a-free-market-for-android/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 22:07:42 +0000</pubDate>
		<dc:creator>Aaron Williamson</dc:creator>
				<category><![CDATA[free software]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apk]]></category>
		<category><![CDATA[floss dispenser]]></category>
		<category><![CDATA[jvending]]></category>
		<category><![CDATA[market]]></category>
		<category><![CDATA[replicant]]></category>
		<category><![CDATA[slideme]]></category>

		<guid isPermaLink="false">http://www.copiesofcopies.org/webl/?p=75</guid>
		<description><![CDATA[Update: F-Droid has succeeded where I got lazy. Use that. I&#8217;ve been working on developing a free software application market for Android.1 The obvious place to start was the SlideME Community Edition code, which as far as I know is the only existing free software project that does even part of the job. Unfortunately, SlideME&#8217;s [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Update</strong>: <a href="http://f-droid.org/repository/">F-Droid</a> has succeeded where I got lazy.  Use that.<span id="more-75"></span></p>

<p>I&#8217;ve been working on developing a free software application market for Android.<sup><a href="http://copiesofcopies.org/webl/2010/02/10/floss-dispenser-a-free-market-for-android/#footnote_0_75" id="identifier_0_75" class="footnote-link footnote-identifier-link" title="The quick rationale for this is that the Android Market 1) is not itself free software, and 2) doesn&rsquo;t enable you to search for applications by their license.">1</a></sup> The obvious place to start was the <a href="http://code.google.com/p/slideme/">SlideME Community Edition code</a>, which as far as I know is the only existing free software project that does even part of the job.  Unfortunately, SlideME&#8217;s Community Edition was abandoned due to &#8220;lack of community interest&#8221; in April 2008, several months before the first Android phones were even available.  So most of the work I&#8217;ve done so far was to update the code to work with the current SDK, rework the interface to behave in a more standard way, and rewrite portions that relied on now-unavailable API elements.</p>

<p>FLOSS Dispenser (like SlideME) works in conjunction with a J2EE server application called JVending.  JVending&#8217;s public repository was also <a href="http://code.google.com/p/jvending/">abandoned</a> by SlideME some time ago, so I&#8217;m maintaining <a href="http://gitorious.org/replicant/jvending/">a fork of JVending</a> along with <a href="http://gitorious.org/replicant/floss-dispenser/">my fork of FLOSS Dispenser</a> as a part of the <a href="http://trac.osuosl.org/trac/replicant/wiki/">Replicant project</a>.</p>

<p>I put up <a href="http://trac.osuosl.org/trac/replicant/wiki/BuildFLOSSDispenser">build instructions for FLOSS Dispenser</a> as well as <a href="http://trac.osuosl.org/trac/replicant/wiki/BuildAndDeployJVending">for JVending</a>; using these, you should be able to build both and have them work together.  However, neither one is ready, which is why I&#8217;m not hosting an application store already.  The FLOSS Dispenser code in particular is pretty buggy (most of them aren&#8217;t mine, but only because I haven&#8217;t written much of it), for one thing.  For another, the system doesn&#8217;t yet facilitate GPL compliance &#8212; you can download and install apk binaries, but they don&#8217;t come with source code and license text.  Until at least this feature exists, I don&#8217;t recommend anyone serve GPL&#8217;d apks to the public using JVending.  <strong>Update:</strong> The client application is now in a working alpha state.  The really bad bugs have been hammered out and source can be delivered with the apk (the mechanism for this is nonoptimal, but functional).  The challenge now is to enable users of the server to submit new apps easily, and to enable admins to moderate them.</p>

<p>I wanted to have this and some other issues hammered out before I put the code up, but I was motivated by Jonathan Corbet&#8217;s <a href="http://lwn.net/Articles/373128/">recent LWN article</a> on Android to just put up what I had and try to get some help.  I know other people are interested in something like this, and though I&#8217;m hardly proud of the little coding I&#8217;ve done on this, it&#8217;s the best start we have for a free market.</p>

<p>So by all means, <a href="http://trac.osuosl.org/trac/replicant/wiki/WikiStart#FLOSSDispenserandJVending">take a look</a> and help me kick this thing out the door.</p><ol class="footnotes"><li id="footnote_0_75" class="footnote">The quick rationale for this is that the Android Market 1) is not itself free software, and 2) doesn&#8217;t enable you to search for applications by their license.</li></ol>]]></content:encoded>
			<wfw:commentRss>http://copiesofcopies.org/webl/2010/02/10/floss-dispenser-a-free-market-for-android/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
