<D <M <Y
Y> M> D>

We made a release of LNX-BBC 2.1 on Friday, but we're still writing the announcement. I'll write more here once the announcement is finished and posted. (If you're very impatient, just go to the home page and download.)

Dan Bricklin on shoplifting vs. illicit copying.

Bricklin makes a memorable comparison:

Pirating works online is really more like kids watching a baseball game through a hole in the outfield wall, or listening to a concert just outside the gate.

In fact the desire to capture all positive externalities resulting from one's labor or property is so pervasive that the Chicago Cubs sued owners of buildings surrounding Wrigley Field because the building owners made money operating rooftop bars with views into the baseball stadium. (Do a Google search for "Wrigley Field rooftop lawsuit" or similar.) Bricklin assumes that people will feel that it is legitimate to derive enjoyment from being nearby a concert or game without paying -- but not all stadium owners agree!

It seems to be an awfully appealing strategy to make money by taxing other people for the use of positive externalities resulting from your activity, while trying to avoid incurring costs for the negative externalities. (Some people, like entertainers' managers and publishers, may focus on capturing more positive externalities, while others, like polluters, may focus on avoiding paying for the negative externalities.)

If we can find examples of traditional activities which produce benefits for others (sic vos non vobis!) and where there has not yet been a successful lobbying effort to create property rights in those benefits, these might turn out to be interesting sources of metaphors for the copyright debates.

The interesting fact is that there is probably no absolutely consistent single obvious moral principle about externalities -- but lots of people feel as if there is one.

My friend David Alpert visited. I hadn't seen him for about nine years, and he's working for Google now, living in New York, etc. It was a nice visit, and David accidentally did me a huge favor by finding the place in Sam Loyd's Cyclopedia of 5,000 Puzzles, Tricks and Conundrums where Loyd attempts to answer Lewis Carroll's question "Why is a raven like a writing-desk?".

[T]here is no absolute certainty of any answer having been intended, as Lewis Carroll never vouchsafed any replies to the curious problem pertaining to Alice's trip through Wonderland; nevertheless, my acquaintance with Carroll and his peculiar traits, convinced me that it was not altogether a haphazard query. My own guess, following the alliterative style which characterizes the entire work, would be "that the notes for which they are noted are not noted for being musical notes"; nevertheless, there is considerable scope for ingenuity and cleverness, as other answers, equally as good or better, might be suggested, like "because Poe wrote on both," "Bills and tales are among their characteristics," "Because they stand on their legs," "Because they conceal their steels" or "Ought to be made to shut up," etc., etc.

We also got to climb up Bernal Hill.

Make BitTorrent accept torrent filenames and URLs on the command-line as the final (or only) argument without --url and --responsefile, so that you can just say "btdownloadcurses foo.torrent" or "btdownloadcurses https://www.example.net/bar.torrent":

--- BitTorrent-3.2.1b/BitTorrent/download.py.orig	2003-05-03 23:50:30.000000000 -0700
+++ BitTorrent-3.2.1b/BitTorrent/download.py	2003-05-04 13:16:31.000000000 -0700
@@ -2,7 +2,7 @@
 # see LICENSE.txt for license information
 
 from zurllib import urlopen
-from urlparse import urljoin
+from urlparse import urljoin, urlparse
 from btformats import check_message
 from Choker import Choker
 from Storage import Storage
@@ -89,10 +89,13 @@
     if len(params) == 0:
         errorfunc('arguments are -\n' + formatDefinitions(defaults, cols))
         return
-    if len(params) == 1:
-        params = ['--responsefile'] + params
     try:
-        config, garbage = parseargs(params, defaults, 0, 0)
+        config, garbage = parseargs(params, defaults, 0, 1)
+        if garbage:
+            if urlparse(garbage[0])[0] in ( 'http', 'https', 'ftp', 'file' ):
+                config['url'] = garbage[0]
+            else:
+                config['responsefile'] = garbage[0]
         if (config['responsefile'] == '') == (config['url'] == ''):
             raise ValueError, 'need responsefile or url'
     except ValueError, e:


[Main]
Support Bloggers' Rights!
Support Bloggers' Rights!


Contact: Seth David Schoen