<?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&#039;s webl</title>
	<atom:link href="http://www.copiesofcopies.org/webl/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.copiesofcopies.org/webl</link>
	<description>A container for stray thoughts and coding project updates</description>
	<lastBuildDate>Mon, 26 Apr 2010 15:08:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>A better DateTime widget for Django</title>
		<link>http://www.copiesofcopies.org/webl/?p=81</link>
		<comments>http://www.copiesofcopies.org/webl/?p=81#comments</comments>
		<pubDate>Mon, 26 Apr 2010 15:06:50 +0000</pubDate>
		<dc:creator>aaron</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>1</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.  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://www.copiesofcopies.org/webl/?attachment_id=82' title='widget-closed'><img width="150" height="150" src="http://www.copiesofcopies.org/webl/wp-content/uploads/2010/04/widget-closed-150x150.png" class="attachment-thumbnail" alt="Closed" title="widget-closed" /></a>
<a href='http://www.copiesofcopies.org/webl/?attachment_id=83' title='widget-open'><img width="150" height="150" src="http://www.copiesofcopies.org/webl/wp-content/uploads/2010/04/widget-open-150x150.png" class="attachment-thumbnail" alt="Opened" title="widget-open" /></a>

<p>And here&#8217;s the code:</p>
<p><strong><em>fields.py</em></strong></p>
<pre>
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
</pre>
<p><strong><em>widgets.py</em></strong></p>
<pre>
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",
            )
</pre>
<p><strong><em>/media/js/jqsplitdatetime.js</em></strong></p>
<pre>
$(function() {
   $(".datepicker").datepicker({ dateFormat: 'yy-mm-dd' });
});
</pre>
<p>To use the field in a form, put something like the following into your form definition:</p>
<pre>
some_date_field = JqSplitDateTimeField(widget=JqSplitDateTimeWidget(attrs={'date_class':'datepicker','time_class':'timepicker'})
</pre>
<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>
<pre>
    &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;
</pre>
<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>
<pre>
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",
   )
</pre>
<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://www.copiesofcopies.org/webl/?feed=rss2&amp;p=81</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clickwrap for Django and best practices for Terms of Service</title>
		<link>http://www.copiesofcopies.org/webl/?p=76</link>
		<comments>http://www.copiesofcopies.org/webl/?p=76#comments</comments>
		<pubDate>Wed, 14 Apr 2010 14:48:37 +0000</pubDate>
		<dc:creator>aaron</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&#8217;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 [...]]]></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>&#8217;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.)</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:<br />
<code><br />
@requires_agreement('terms_of_service')<br />
     def any_old_view(request):<br />
     ...<br />
</code></p>
<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>
<p>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:</p>
<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://www.copiesofcopies.org/webl/?feed=rss2&amp;p=76</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>FLOSS Dispenser: a free market for Android</title>
		<link>http://www.copiesofcopies.org/webl/?p=75</link>
		<comments>http://www.copiesofcopies.org/webl/?p=75#comments</comments>
		<pubDate>Wed, 10 Feb 2010 22:07:42 +0000</pubDate>
		<dc:creator>aaron</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[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 Community Edition was abandoned due to &#8220;lack of community [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on developing a free software application market for Android.<sup>1</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://www.copiesofcopies.org/webl/?feed=rss2&amp;p=75</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Goolog: everything you do is right here</title>
		<link>http://www.copiesofcopies.org/webl/?p=73</link>
		<comments>http://www.copiesofcopies.org/webl/?p=73#comments</comments>
		<pubDate>Tue, 09 Feb 2010 15:54:18 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Parody & satire]]></category>
		<category><![CDATA[china]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google account]]></category>
		<category><![CDATA[google services]]></category>
		<category><![CDATA[goolog]]></category>

		<guid isPermaLink="false">http://www.copiesofcopies.org/webl/?p=73</guid>
		<description><![CDATA[Managing your life online isn&#8217;t easy.  You use email, IM, and other social tools.  You create, manage, and share documents.  You search for things you&#8217;re interested in and research things you&#8217;re working on.  You track your finances to the penny and buy everything you need.  You store your private medical records and access information about [...]]]></description>
			<content:encoded><![CDATA[<p>Managing your life online isn&#8217;t easy.  You use email, IM, and other social tools.  You create, manage, and share documents.  You search for things you&#8217;re interested in and research things you&#8217;re working on.  You track your finances to the penny and buy everything you need.  You store your private medical records and access information about your health.</p>
<p>To do all of this, you maintain countless passwords, chase your friends across an ever-increasing variety of social networks, and constantly move documents and data between your personal computer and various web services.  But often there&#8217;s no good way to get data from here to there &#8212; the sites you use may not accept the data format you have or communicate with the other sites holding your data.  Sometimes, the sites you use stop offering the features you need, or are <a href="http://fffff.at/fatlab-introduces-the-f-a-t-pad/">bought by larger companies and shut down to quash competition in a key market</a>.</p>
<p><a href="http://www.copiesofcopies.org/webl/wp-content/uploads/2010/02/logo.gif"><img class="alignright size-medium wp-image-74" style="float: right;" title="logo" src="http://www.copiesofcopies.org/webl/wp-content/uploads/2010/02/logo.gif" alt="" width="276" height="110" /></a>Google Labs is changing all that with Goolog.  Now, when your life is stored in <a href="http://www.google.com/options/">Google&#8217;s services</a>, we keep track of it for you.  No more separate identities.  No more wondering where all of your friends went.  No more moving from place to place.</p>
<p>Take a look at some of the things Goolog takes over for you:</p>
<h3>Single point of entry</h3>
<p>Remember all of those usernames and passwords you used before?  Now, you don&#8217;t have to.  There&#8217;s only one way into Goolog: the Google Account login and password you already have!  You won&#8217;t need to remember how to log in anywhere else, because you won&#8217;t need to <em>go</em> anywhere else.  That&#8217;s because, as we like to say at Google Labs&#8230;</p>
<h3>Everything you do is right here</h3>
<p>We already kept your <a href="http://www.gmail.com">email</a> and your <a href="http://docs.google.com">documents</a> for you, and showed you how easy it was to communicate and work with other people in Goolog (though of course we didn&#8217;t call it Goolog at the time).  You didn&#8217;t have to track your communications and personal documents across folders, hard drives, and websites, because we were tracking them all for you.</p>
<p>Now, we can track everything else too.  You can keep your whole life &#8212; the <a href="http://books.google.com">books you read</a>, the <a href="http://checkout.google.com">things you buy</a>, <a href="http://picasa.google.com">all</a> <a href="http://sketchup.google.com">your</a> <a href="http://www.youtube.com">creativity</a>, all <a href="http://news.google.com">the news</a> you get, everything you <a href="http://www.gmail.com">say</a>, <a href="http://images.google.com">see</a>, and <a href="http://reader.google.com">hear</a>, <a href="http://www.google.com">everything</a> <a href="http://www.google.com/schhp?hl=en">you</a> <a href="http://knol.google.com">know</a>, your <a href="http://calendar.google.com">time</a>, <a href="http://docs.google.com">your</a> <a href="http://groups.google.com">work</a>, your <a href="http://www.google.com/health/">wellbeing</a>, and your <a href="http://www.google.com/finance">money</a> &#8212; all right here in Goolog.  What this means is that you don&#8217;t ever have to worry about getting it back out again, because all of our services integrate with one another.  Your Health and Finance records are Docs, your Docs move through GMail and Groups, and on to your Sites or your Blog(ger).  Your GMail messages generate Calendar entries and when you Talk we listen, and figure out what you&#8217;re trying to do.</p>
<p>Starting to see how much less you need to think about when Goolog is in control?  It gets better.</p>
<h3>Goolog is social</h3>
<p>Not only is everything you do in Goolog, but everyone you know is here too.  (Ok, maybe not <em>everyone</em> just yet.)  So it&#8217;s as easy for you to share everything you do with others as it is to move your data between our services.  And it&#8217;s easy for us too!  Now, <a href="http://googleblog.blogspot.com/2009/10/introducing-google-social-search-i.html">we can tell the people you know what you&#8217;re doing</a> even when you don&#8217;t ask us to.</p>
<h3>Goolog is exactly what it sounds like</h3>
<p>But the social features don&#8217;t end there.  The best part of communicating in Goolog is that we hear everything you say, whether you&#8217;re <a href="http://www.gmail.com">emailing</a>, <a href="http://www.google.com/talk/">IMing</a>, <a href="http://www.blogger.com/start?hl=en">blogging</a>, or even <a href="http://www.google.com/voice">talking on the phone</a>.  And just like our name implies, we log all of it.</p>
<p>This enables us to make our services more useful to you, because when we keep track of everything you do, we can relate what you&#8217;re doing now to what you did months ago, and better understand what you&#8217;re trying to do.  It also enables us to make useful data about what people do online <a href="http://code.google.com/apis/gdata/">available to the public</a> (we <a href="http://papers.ssrn.com/sol3/papers.cfm?abstract_id=1450006">anonymize</a> all of the data first, of course).  And finally, it enables us to better serve our <a href="http://www.nsa.gov">partners</a>, by providing them with <a href="http://www.wired.com/threatlevel/2010/01/operation-aurora/">access</a> to better information about their target markets.</p>
<h3>No need to sign up</h3>
<p>The best part is that you don&#8217;t need to hound your friends for an invite to Goolog.  You don&#8217;t have to opt in.  If you have a Google Account, you&#8217;re already in Goolog.  So relax&#8230; everything you do is right here.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.copiesofcopies.org/webl/?feed=rss2&amp;p=73</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ABA Journal joins National Review in Asianizing Sotomayor</title>
		<link>http://www.copiesofcopies.org/webl/?p=69</link>
		<comments>http://www.copiesofcopies.org/webl/?p=69#comments</comments>
		<pubDate>Tue, 06 Oct 2009 16:22:54 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[i am a lawyer]]></category>
		<category><![CDATA[racism]]></category>

		<guid isPermaLink="false">http://www.copiesofcopies.org/webl/?p=69</guid>
		<description><![CDATA[What is it about a Latina Supreme Court justice that just screams &#8220;Asian&#8221; to journalists?  Whatever it is, the ABA Journal places itself in the dubious company of the National Review this month by highlighting Sonia Sotomayor&#8217;s ineffable Eastern-ness:







This Month&#8217;s ABA Journal
The controversial National Review cover



The National Review, by Asian-ing up Sotomayor&#8217;s physical appearance, obviously [...]]]></description>
			<content:encoded><![CDATA[<p>What is it about a Latina Supreme Court justice that just screams &#8220;Asian&#8221; to journalists?  Whatever it is, the ABA Journal places itself in the dubious company of the National Review this month by highlighting Sonia Sotomayor&#8217;s ineffable Eastern-ness:</p>
<table border="0">
<tbody>
<tr>
<td><a href="http://www.copiesofcopies.org/webl/wp-content/uploads/2009/10/kabuki.png"><img class="aligncenter size-full wp-image-70" title="ABA Journal cover: No More Kabuki Confirmations" src="http://www.copiesofcopies.org/webl/wp-content/uploads/2009/10/kabuki.png" alt="ABA Journal cover: No More Kabuki Confirmations" width="348" height="450" /></a></td>
<td><a href="http://www.copiesofcopies.org/webl/wp-content/uploads/2009/10/nationalreview_thewiselatina1.jpg"><img class="aligncenter size-full wp-image-72" title="National Review cover: The Wise Latina" src="http://www.copiesofcopies.org/webl/wp-content/uploads/2009/10/nationalreview_thewiselatina1.jpg" alt="National Review cover: The Wise Latina" width="348" height="450" /></a></td>
</tr>
<tr>
<td>This Month&#8217;s ABA Journal</td>
<td>The controversial National Review cover</td>
</tr>
</tbody>
</table>
<p>The National Review, by Asian-ing up Sotomayor&#8217;s physical appearance, obviously posts a clear win in terms of sheer cultural insensitivity.  But surely someone at the ABA Journal&#8217;s editorial staff thought, before rehashing an <a href="http://www.google.com/search?q=kabuki%20sotomayor&amp;hl=en&amp;ned=us&amp;tab=nw">apparently irresistable</a> cliché to characterize Sotomayor&#8217;s frictionless confirmation process, &#8220;hey, maybe surrounding her with a bunch of Japanese-looking stuff will raise uncomfortable associations?&#8221;  No?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.copiesofcopies.org/webl/?feed=rss2&amp;p=69</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>White House still confused about Flickr photo licensing</title>
		<link>http://www.copiesofcopies.org/webl/?p=68</link>
		<comments>http://www.copiesofcopies.org/webl/?p=68#comments</comments>
		<pubDate>Fri, 02 Oct 2009 16:44:13 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[i am a lawyer]]></category>
		<category><![CDATA[politicking]]></category>
		<category><![CDATA[cc-by]]></category>
		<category><![CDATA[copyright]]></category>
		<category><![CDATA[creative commons]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[photograph]]></category>
		<category><![CDATA[white house]]></category>

		<guid isPermaLink="false">http://www.copiesofcopies.org/webl/?p=68</guid>
		<description><![CDATA[When the White House first began posting photographs taken by its official photographer on Flickr, it caused a minor kerfuffle about licensing: the photos were posted under a Creative Commons Attribution (CC-BY) license, even though works of the U.S. government are in the public domain.  It turned out that the White House chose CC-BY because [...]]]></description>
			<content:encoded><![CDATA[<p>When the White House first began posting photographs taken by its official photographer <a title="White House Flickr Photostream" href="http://www.flickr.com/photos/whitehouse/">on Flickr</a>, it caused a <a title="Creative Commons blog" href="http://creativecommons.org/weblog/entry/14237">minor kerfuffle</a> about licensing: the photos were posted under a Creative Commons Attribution (CC-BY) license, even though <a href="http://www.usa.gov/copyright.shtml">works of the U.S. government are in the public domain</a>.  It turned out that the White House chose CC-BY because &#8220;public domain&#8221; wasn&#8217;t an option Flickr&#8217;s interface offered, and CC-BY is the least-restrictive CC license.  In short order, Flickr added a &#8220;United States Government Work&#8221; option for the White House and the whole thing was fixed.</p>
<p>Sort of.</p>
<p>A friend just <a href="http://twitter.com/joannabc/status/4556188908">posted</a> about a White House <a href="http://www.flickr.com/photos/whitehouse/3963942915/">photo</a> on Flickr, which is appropriately designated as a United States Government Work.  However, beneath the photo is the following text:</p>
<blockquote><p><strong>This official White House photograph is being made available only for publication by news organizations and/or for personal use printing by the subject(s) of the photograph. </strong><strong>The photograph may not be manipulated in any way</strong> and may not be used in commercial or political materials, advertisements, emails, products, or promotions that in any way suggests approval or endorsement of the President, the First Family, or the White House.</p></blockquote>
<p>Several things about the section in bold are problematic.  The first is that it contradicts the law, and the government&#8217;s <a href="http://www.usa.gov/copyright.shtml">own statement of the law</a> (linked to from the Flickr page), by <em>prohibiting derivative works</em> as well as, it would seem, many other permissible uses.  The limitation to publication by news organizations contradicts the public&#8217;s right to distribute copies of the photos, and to display them.  The release by &#8220;the subject(s) of the photograph&#8221; may be intended to remind users that some states recognize individuals&#8217; rights to the use of their likeness in certain limited contexts (recall <a href="http://www.cnn.com/video/#/video/us/2007/09/24/intv.virgin.flickr.lawsuit.cnn">another Flickr-related licensing dispute</a>), but those laws do not justify a broad proscription on use by anyone other than news organizations.</p>
<p>Maybe after one more time around, the White House will figure out what &#8220;public domain&#8221; really means.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.copiesofcopies.org/webl/?feed=rss2&amp;p=68</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Matt Asay is wrong about rights</title>
		<link>http://www.copiesofcopies.org/webl/?p=63</link>
		<comments>http://www.copiesofcopies.org/webl/?p=63#comments</comments>
		<pubDate>Thu, 07 May 2009 15:40:06 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[i am a lawyer]]></category>
		<category><![CDATA[politicking]]></category>
		<category><![CDATA[european commission]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[matt asay]]></category>
		<category><![CDATA[matt asay is wrong]]></category>
		<category><![CDATA[parliament]]></category>
		<category><![CDATA[rights]]></category>
		<category><![CDATA[wrong]]></category>

		<guid isPermaLink="false">http://www.copiesofcopies.org/webl/?p=63</guid>
		<description><![CDATA[Matt Asay does not believe in a fundamental right to Internet access. His most recent barely considered core dump of generalities begins with this bit of popular conservo-libertarian retcon: &#8220;While the framers of the U.S. Constitution talked about the rights of assembly, speech, and religion, our modern world has crowned new rights.&#8221;  He goes on [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://news.cnet.com/8301-13505_3-10234555-16.html">Matt Asay</a><a href="http://news.cnet.com/8301-13505_3-10234555-16.html"> does not believe in a fundamental right to Internet access</a>. His most recent barely considered core dump of generalities begins with this bit of popular conservo-libertarian <a href="http://en.wikipedia.org/wiki/Retcon">retcon</a>: &#8220;While the framers of the U.S. Constitution talked about the rights of assembly, speech, and religion, our modern world has crowned new rights.&#8221;  He goes on to lament the &#8220;entitlement culture&#8221; which has produced one or two European Politicians who believe Internet access is a fundamental right, and to pioneer the notion that people should have fewer rights and more (unenforceable) responsibilities.</p>
<p>Matt is wrong<sup>1</sup> about history.  Nevermind that his thesis, about the framers&#8217; niggardly disposition of rights, enumerates only those granted in the First Amendment (that&#8217;s out of 10).  By simplifying to absurdity the history of the Bill of Rights, and omitting completely the development of rights over the course of U.S. and world history, Matt leaves not even a single fun-sized marshmallow of credible context to support his rhetorical toothpick-house.</p>
<p>His conception of the constitutional framers as a unitary band of <a href="http://en.wikipedia.org/wiki/Democratic-Republican_Party">Democratic-Republicans</a> is shallow, ignoring that the Constitution is and has always been a product of compromise, and that the Bill of Rights is by its own terms<sup>2</sup> an irreducible minimum statement of rights, not an exhaustive list.  To give Matt some credit, he correctly <a href="http://twitter.com/mjasay/status/1718491720">points out</a> that &#8220;<span class="status-body"><span class="entry-content">US constitutional rights tend to keep govt *out* of citizens&#8217; lives,&#8221; and he believes that a right to access does the opposite (roundaboutly, via increased taxation).</span></span> But Matt&#8217;s questionable comprehension of constitutional history is not entirely (or even mostly) why he&#8217;s so wrong.</p>
<p>The problem with all of these bothersome rights, Matt says, is that they create a slippery slope.  If you give someone a right, then they might think the right is attended by specific guarantees.  Deftly unwinding the logical integrity of <a href="http://twitter.com/webmink/statuses/1717476912">a single tweet</a>, Matt points out that if people are given a right to use a channel of communication simply because that is how one interacts with government, then there is no literally no possible way to distinguish that channel from any other.  If the right to participate in government means that the government must enable that right, then they have to in every conceivable, to the full extent imaginable.  End result?  The government has to buy me the New York Times AND the Wall Street Journal so I can make an informed voting decision.</p>
<p>Matt went to law school, scout&#8217;s honor.  At Stanford.  Presumably he took Constitutional Law and learned that over this country&#8217;s 230-odd years, Congress and the courts have managed to define, adapt to technological changes, and where necessary narrow a great number of rights, all without giving me a free newspaper.  They&#8217;ve addressed some of the issues Matt touched on &#8212; for instance by requiring balanced treatment of controversial issues by broadcasters &#8212; but the unlimited expansion of rights with which Matt is concerned has been repeatedly thwarted by reasonable people.</p>
<p>But again, one need not engage Matt on the battlefield of grand constitutional theory to see why he is wrong.  One need merely do what Matt seems never to ever do before reaching &#8212; and blogging &#8212; his opinion: read past the headline.  Because the &#8220;fundamental right&#8221; Matt is up in arms about isn&#8217;t the one he thinks it is.  The European Commission did not consider &#8220;codifying Internet access as a basic human right.&#8221;  Rather, it merely considered an amendment prohibiting ISPs from limiting subscribers&#8217; access without a court ruling:</p>
<blockquote><p>[T]he Parliament’s lower house&#8230; passed an amendment to the telecommunications package making it illegal for any E.U. country to sever Internet service unless a citizen is found guilty in court&#8230;</p></blockquote>
<p>As the New York Times notes, &#8220;the amendment was intended as a rebuff to a proposal before the French National Assembly that would allow a government agency to sever Internet service based on industry complaints.&#8221;<sup>3</sup> It does not create a right to access for those who haven&#8217;t paid for it or impose any other great taxpayer burdens.</p>
<p>So Matt is wrong even about the topic of the debate &#8212; the &#8220;fundamental right to Internet access&#8221; is a strawman he&#8217;s set up.  I don&#8217;t think he intended to mislead anyone, he just didn&#8217;t do his homework.  He read a couple of headlines and one politician&#8217;s puffery and took it from there (this is a common M.O. for Matt, which is a major contributing factor to his always being wrong).  But even that immanently defeatable strawman (I don&#8217;t know anyone, myself included, who would argue for creating a fundamental right to Internet access, and certainly not absent a detailed plan for implementation and some strong limits on scope) is more than a match for Matt, who relies on popular historical revisionism and an unrealistic parade of horribles to refute the argument that no one is making.</p>
<ol class="footnotes"><li id="footnote_0_63" class="footnote"><em>Matt Asay is Wrong</em> will be a recurring feature of the copiesofcopies webl.</li><li id="footnote_1_63" class="footnote">See the <a href="http://en.wikipedia.org/wiki/Ninth_Amendment_to_the_United_States_Constitution">Ninth Amendment</a>.</li><li id="footnote_2_63" class="footnote"><a href="http://www.nytimes.com/2009/05/07/technology/07iht-telecoms.html">French Anti-Piracy Proposal Undermines E.U. Telecommunications Overhaul</a>, May 7, 2009.  Matt claims that Parliament voted against the amendment, which is incorrect.  The parliament instead temporarily defeated a deal permitting three-strikes style laws, by introducing the amendment.  This can all be found in the first two paragraphs of <a href="http://online.wsj.com/article/BT-CO-20090506-711625.html">the article Matt cites</a>.</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.copiesofcopies.org/webl/?feed=rss2&amp;p=63</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>My Corrupt Landlord, or A Helpless Empowered Tenant</title>
		<link>http://www.copiesofcopies.org/webl/?p=60</link>
		<comments>http://www.copiesofcopies.org/webl/?p=60#comments</comments>
		<pubDate>Tue, 05 May 2009 16:20:20 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[i am a lawyer]]></category>
		<category><![CDATA[350 Lincoln Place]]></category>
		<category><![CDATA[Bajram Lukovic]]></category>
		<category><![CDATA[Baki]]></category>
		<category><![CDATA[Brooklyn]]></category>
		<category><![CDATA[Eckstein Properties]]></category>
		<category><![CDATA[illegal]]></category>
		<category><![CDATA[key charge]]></category>
		<category><![CDATA[key money]]></category>
		<category><![CDATA[landlord]]></category>
		<category><![CDATA[new york]]></category>
		<category><![CDATA[NYC]]></category>
		<category><![CDATA[rent gouging]]></category>
		<category><![CDATA[rights]]></category>
		<category><![CDATA[tenant]]></category>

		<guid isPermaLink="false">http://www.copiesofcopies.org/webl/?p=60</guid>
		<description><![CDATA[Last September, I found a great apartment, via Craigslist, at 350 Lincoln Place in Prospect Heights &#8212; it had unheard-of-in-NYC amenities like a dishwasher &#38; central air, a roommate I liked and had things in common with, and a rent I could afford.  Unfortunately, when we met with the super (Bajram Lukovic, aka &#8220;Baki&#8221;) so [...]]]></description>
			<content:encoded><![CDATA[<p>Last September, I found a great apartment, via Craigslist, at 350 Lincoln Place in Prospect Heights &#8212; it had unheard-of-in-NYC amenities like a dishwasher &amp; central air, a roommate I liked and had things in common with, and a rent I could afford.  Unfortunately, when we met with the super (Bajram Lukovic, aka &#8220;Baki&#8221;) so I could sign the lease, he told me I had to pay him a $900 fee to move in to the apartment.  He explained that other tenants have said that that&#8217;s illegal, and he assured them it wasn&#8217;t but if they preferred they could go pay a fee instead to the broker the building had a deal with (it would cost more, though).  Also, the fee had to be paid in cash or cashier&#8217;s check, and the tenant would not be given a receipt.  &#8220;I tell them, &#8216;The lease is your receipt,&#8217;&#8221; he said, but he would not include a mention of the fee in the lease agreement.</p>
<p>This fee is illegal &#8220;key money.&#8221;  No agent of a landlord in NYC can charge tenants for anything other than rent, a security deposit, and the (actual) cost of a background check (usually no more than $100).  Demanding more than $250 in key money is a class A misdemeanor under N.Y. Penal Law § 180.56.  &#8220;Systematically&#8221; demanding key money from three or more tenants is a class E felony under N.Y Penal Law § 180.57.</p>
<p>I should not have taken the apartment.  But I liked the place, I didn&#8217;t want to leave my roommate in the lurch (it had been about two weeks since I&#8217;d agreed to move in, and he&#8217;s stopped looking for other takers) and I would have had to pay a broker&#8217;s fee for most other places anyway, so I decided to suck it up and pay the key charge.  I collected what documentation I could of the payment: I called the landlord (Leah from Eckstein Properties, dba 350 Lincoln Place Owners&#8217; Association) and confirmed that she was aware of and stood behind the super&#8217;s fee;  I sent her a letter (unregistered, unfortunately) describing the fee, and I kept a copy; I gave the super a similar letter along with the check, cc&#8217;d the landlord, and kept a copy for myself; and I kept the check&#8217;s stub.</p>
<p>But even though I know my rights and did about as much as could be expected to document the transaction, I suspect there&#8217;s nothing I can do to retrieve my money.  The NYC Rent Guidelines Board <a href="http://www.housingnyc.com/html/guide/basics.html#Fees">informs me</a> that the Attorney General will probably take no action without &#8220;solid evidence&#8221; or a corroborating witness.  My roommate doesn&#8217;t want to rock the boat, and he was the only one there besides me.  The cashier&#8217;s check, though made out to Lukovic, could have been cashed by anyone.  The letters are from me, and anyway I sent them unregistered so they are readily deniable.  For all of these reasons, an action in small claims court could also easily fail.</p>
<p>One option would be to hold a meeting of the building&#8217;s tenants &#8212; which I can do in the building without interference or retaliation by the landlord under N.Y. Real Property Law § Sec. 230 &#8212; and find others who were charged key money to corroborate my story or put pressure on the landlord.  But if no one shows up (for example because they&#8217;re afraid of retaliation, notwithstanding their rights) then I could upset my roommate&#8217;s relationship with the landlord against his express wishes for nothing.  And after all, I moved into <em>his</em> apartment.</p>
<p>I&#8217;m posting this for a couple of reasons: first, if anyone thinks of anything I haven&#8217;t that could help me, please let me know; second, I just want people to be able to google &#8220;350 Lincoln Place&#8221; and find out that the owners are responsible for rent gouging; third, to make the point that even in NYC, which has some of the strongest tenant protections in the country, it can be difficult or impossible to exercise your rights, because it&#8217;s not just your rights at issue.</p>
<p>FML</p>
]]></content:encoded>
			<wfw:commentRss>http://www.copiesofcopies.org/webl/?feed=rss2&amp;p=60</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The irony of Conservatives for Patients&#8217; Rights</title>
		<link>http://www.copiesofcopies.org/webl/?p=59</link>
		<comments>http://www.copiesofcopies.org/webl/?p=59#comments</comments>
		<pubDate>Wed, 11 Mar 2009 15:52:02 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[fail]]></category>
		<category><![CDATA[politicking]]></category>
		<category><![CDATA[cnn]]></category>
		<category><![CDATA[conservatives for patients rights]]></category>
		<category><![CDATA[cpr]]></category>
		<category><![CDATA[health care]]></category>
		<category><![CDATA[reform]]></category>
		<category><![CDATA[shill]]></category>
		<category><![CDATA[swiftboat]]></category>

		<guid isPermaLink="false">http://www.copiesofcopies.org/webl/?p=59</guid>
		<description><![CDATA[I was on the treadmill when this segment on CNN about conservatives&#8217; opposition to Obama&#8217;s health care policies made me wheeze uncomfortably with laughter.  A swiftboat organization called Conservatives for Patients&#8217; Rights&#8211;led by disgraced, corrupt healthcare CEO Richard Scott&#8211;has paid $20 million for a piece of the media spotlight on the issue.  The campaign demonstrates [...]]]></description>
			<content:encoded><![CDATA[<p>I was on the treadmill when <a href="http://transcripts.cnn.com/TRANSCRIPTS/0903/09/sitroom.01.html">this segment on CNN</a> about conservatives&#8217; opposition to Obama&#8217;s health care policies made me wheeze uncomfortably with laughter.  A <a href="http://www.campusprogress.org/cribsheets/3694/swift-boating-health-care-reform">swiftboat</a> organization called Conservatives for Patients&#8217; Rights&#8211;led by <a href="http://mediamatters.org/items/200903060001">disgraced, corrupt healthcare CEO</a> Richard Scott&#8211;has paid $20 million for a piece of the media spotlight on the issue.  The campaign demonstrates everything that is wrong with 21st-century conservative politics, the casting of corporate-interest lobbying as grassroots campaigning being first among the problems.</p>
<p>But what got me laughing was Scott&#8217;s pithy demonstration of another problem: conservatives&#8217; refusal to acknowledge the complexity of political issues or the merits of opposing arguments.  No doubt on the advice of his swiftboat-PR consultants, Scott blithely dropped this line during his CNN spot:</p>
<blockquote><p>Are the decisions that I make with my doctor for my care going to be dictated by some federal bureaucracy?  That&#8217;s very scary.</p></blockquote>
<p>I won&#8217;t bother connecting the dots.  Suffice it to say that I think it&#8217;s disingenuous for conservatives to rally under this particular banner.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.copiesofcopies.org/webl/?feed=rss2&amp;p=59</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New IdentiFox that plays nice with TwitterFox</title>
		<link>http://www.copiesofcopies.org/webl/?p=51</link>
		<comments>http://www.copiesofcopies.org/webl/?p=51#comments</comments>
		<pubDate>Thu, 26 Feb 2009 23:43:56 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[free software]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[addon]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[identi.ca]]></category>
		<category><![CDATA[identifox]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.copiesofcopies.org/webl/?p=51</guid>
		<description><![CDATA[IdentiFox is a Firefox addon to get Identi.ca updates.  It&#8217;s based on TwitterFox, and up till now you couldn&#8217;t use the two together, because they still shared certain unique identifiers in their code.  I spent some time reworking IdentiFox to solve this problem and generally clean up the Twitter references in the code. I created [...]]]></description>
			<content:encoded><![CDATA[<p>IdentiFox is a Firefox addon to get Identi.ca updates.  It&#8217;s based on TwitterFox, and up till now you couldn&#8217;t use the two together, because they still shared certain unique identifiers in their code.  <span style="text-decoration: line-through;">I spent some time reworking IdentiFox to solve this problem and generally clean up the Twitter references in the code.</span> I created a whole new IdentiFox based on the latest TwitterFox Beta.  It now supports all of the following features:</p>
<ul>
<li>Tab for private messages</li>
<li>#hashtags and !groups link back to their homes on <a href="http://identi.ca/">http://identi.ca</a></li>
<li>Right-click menu enables copying, redenting, and viewing notice on <a href="http://identi.ca/">http://identi.ca</a></li>
<li>New color scheme to match Identi.ca&#8217;s current design</li>
</ul>
<p>I&#8217;m working on getting the Addon onto <a href="https://addons.mozilla.org/en-US/firefox/addon/10941">Mozilla&#8217;s site</a>, but till then I&#8217;ll post the XPI here.  Please comment here or email me with any problems you run into!</p>
<ul>
<li><a href="http://www.copiesofcopies.org/webl/wp-content/uploads/2009/03/identifox5.xpi">Here</a> is the addon</li>
</ul>
<ul>
<li><a href="http://bitbucket.org/copiesofcopies/identifox-copiesofcopies/overview/">Here</a> is the source on bitbucket</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.copiesofcopies.org/webl/?feed=rss2&amp;p=51</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
