Archive for the 'Technology' Category

05 JunCCBill Amended

The Perfect 10 v. CCBill decision from the 9th Circuit on March 29 was amended last Thursday to add a footnote regarding the meaning of “intellectual property” in Sec. 230 (the CDA). It responds to a point in Perfect 10′s petitions for rehearing and rehearing en banc (which were denied) that the 9th Circuit’s holding created a conflict with the 1st Circuit in Univ. Communication. In the added footnote (reproduced in full below) the 9th Circuit takes an even stronger stand that “intellectual property” under 230 can only mean federal “intellectual property” laws and not state laws. It also denies the existence of any circuit split.

The opinion filed on March 29, 2007, is amended as fol-lows:

On slip opinion page 3577, line 33, after “federal intellec-tual property.” insert the following footnote:

In its petition for rehearing, Perfect 10 claims that our deci-sion on this point conflicts with Universal Communication Systems, Inc. v. Lycos, Inc., 478 F.3d 413 (1st Cir. 2007). But neither party in that case raised the question of whether state law counts as “intellectual property” for purposes of § 230 and the court seems to simply have assumed that it does. We thus create no conflict with Universal Communication.

We note that Universal Communication demon-strates the difficulties inherent in allowing state laws to count as intellectual property for CDA purposes.

In that case, the district court struggled with the question of whether the “trademark dilution” claim brought under Florida Law counted as intellectual property for purposes of the CDA, and concluded that it was more like a defamation claim than a trade-mark claim. Id. at 423 n.7. Rather than decide how to draw the line between defamation and trademark, the First Circuit held that “because of the serious First Amendment issues that would be raised” if Lycos were found liable, defendant had not violated the Florida statute. Id. at 423.

The First Circuit was able to sidestep the question of what counted as intellectual property on First Amendment grounds. But we cannot do so here. States have any number of laws that could be characterized as intellectual property laws: trademark, unfair competition, dilution, right of publicity and trade defamation, to name just a few. Because such laws vary widely from state to state, no litigant will know if he is entitled to immunity for a state claim until a court decides the legal issue. And, of course, defendants that are otherwise entitled to CDA immunity will usually be subject to the law of numerous states. An entity otherwise entitled to § 230 immunity would thus be forced to bear the costs of litiga-tion under a wide variety of state statutes that could arguably be classified as “intellectual property.” As a practical matter, inclusion of rights protected by state law within the “intellectual property” exemption would fatally undermine the broad grant of immunity provided by the CDA.

With this amendment, the panel has voted to deny the peti-tion for rehearing and petition for rehearing en banc. The full court has been advised of the petition for rehearing en banc, and no judge of the court has requested a vote on it.

25 MayHistory of SCO (funny)

I wrote an article that, in part, explained the SCO v. IBM lawsuit up to that point in time. That wouldn’t have been necessary had this history of SCO been around. Too funny.

18 MayBusy Week in the 9th Circuit

Earlier this week the 9th Circuit released an amended opinion in Kahle v. Gonzalez and denied the motion for rehearing en banc. The 9th Circuit saw it as an attempt to relitigate Eldred v. Ashcroft, which I would argue is not accurate, but I think this does not bode well for getting the Supreme Court to grant certiorari.

The 9th Circuit put some limits on immunity under section 230 of the CDA in Fair Housing Council v. Roommates.com, LLC. Read this analysis.

Then, in a decision that gets far more right than I expected, the 9th Circuit found, among other things, that Google’s image search can make use of thumbnails as a fair use (in the inaptly named) Perfect 10, Inc. v. Amazon, Inc., so named because Perfect 10 also sued Amazon on similar grounds and the cases were consolidated. Read this analysis.

01 MayTwo Big Patent Rulings from the Supreme Court of the U.S.

The Supreme Court of the United States has just handed down two important patent rulings that could be especially relevant for software and technology companies. In a ruling that alters the analysis of when a patent is obvious the Supreme Court found that lower courts had too rigidly interpreted the requirements for finding a patent obvious, allowing some bad patents to slip through. (Read full opinion.) In a separate opinion the Court addressed part of the U.S. patent law that prevents companies from getting around a patent by shipping the components of the patented invention from the U.S. to a foreign country for assembly and sale. The Court found that supplying software to a foreign country for sale therein did not constitute a “component” of a patented invention and hence was not prohibited. This was a victory for Microsoft who had been accused of violating an AT&T patent simply on the basis of shipping Windows to foreign countries. Regardless of one’s usual feelings about the world’s largest software company, enforcing limits on the extra-territorial application of U.S. patent law, especially in the software context, is generally a good thing for innovation. If the first ruling results in more software patent applications being deemed “obvious” then that could be even better. Read analyses of the Microsoft and the obviousness rulings.

14 Aprboalt.org Raises Awareness of RFID in Cal IDs

This nice work by Larisa, Alison, David, and other borgers gets a write-up in The Daily Californian entitled: Radio Tags in ID Cards Raise Privacy Issues.

07 AprMultiple WordPress blogs on a Debian server

This HOWTO assumes:

1. You have a server running at least Debian Etch (or are otherwise able to install the wordpress .deb).

2. Your server has Apache 2, MySQL, and PHP installed.

3. You want to use a single WordPress installation to host multiple blogs across several domains.

Ok, let’s get started.

Step 1: # sudo apt-get install wordpress

Handle a few pesky permissions problems with:

# sudo chown :www-data /etc/wordpress/*
# sudo mkdir /usr/share/wordpress/wp-content/uploads
# sudo chown www-data:www-data /usr/share/wordpress/wp-content/uploads
# sudo chown -R www-data:www-data /usr/share/wordpress/wp-content/themes

Step 2: Set up Apache 2 so that exampledomain.org points to /usr/share/wordpress —Here’s one way, and it also assumes you want www.exampledomain.org to redirect to exampledomain.org. You could modify this to have it redirect to blog.exampledomain.org if you want it to go there instead.


/etc/apache2/sites-available/exampledomain.org

<VirtualHost *:80>
ServerName www.exampledomain.org
DocumentRoot /var/www/www.exampledomain.org/
<Directory /var/www/www.exampledomain.org/>
AllowOverride All
Order Deny,Allow
Allow from all
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName exampledomain.org
DocumentRoot /var/www/exampledomain.org/
<Directory /var/www/exampledomain.org/>
AllowOverride All
Order Deny,Allow
Allow from all
</Directory>
</VirtualHost>

# sudo a2ensite exampledomain.org
# sudo /etc/init.d/apache2 reload

# sudo ln -s /usr/share/wordpress /var/www/exampledomain.org

/var/www/www.exampledomain.org/.htaccess
Redirect / http://exampledomain.org

[Go online and confirm the redirect is working—don't worry that you get a WordPress error. It's not supposed to work yet.]

# cd /usr/share/doc/wordpress/examples
# sudo sh setup-mysql -n exampleuser exampledomain.com

Note that the username "exampleuser" must be no more than 16 characters (mysql limitation).

Step 3: Do the normal web-based WordPress install (I suggest going to Options|Miscellaneous and giving each blog a unique subdirectory for its uploads otherwise they’ll all be mixed together) and then repeat step 2 for each additional domain.

You’re done! A single Debian WordPress installation is now hosting multiple blogs!

07 AprHello world!

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!

26 MayMacBook Triple-Boot HowTo (With Debian Etch and XP Upgrade version).

Triple-Boot on Brian's Black MacBook (Thumbnail) 0. Buy a MacBook. I suggest 120Gb HD and 1 or 2GB RAM. Buy an Upgrade version of Windows XP (so long as you have an older Windows CD)–My cost $99. Buy an external CD-Rom drive with USB connection–My cost $40. Find two blank CD-Rs (one for XP Drivers, one for Debian Etch Net Install). An additional CD-R or USB-key will come in handy for subsequent configuration.

1. Prepare XP Drivers. Follow the instructions at OnMac up to a point. That is:

Take the steps necessary to install Boot Camp and use that first blank CD-R to burn the Windows XP drivers. Then QUIT Boot Camp without using it to partition your drive!

2. Partition your hard drive. (Um, you have a back-up, right?)

Type: diskutil list
It should give you something like:

  /dev/disk0
   #:                   type name               size      identifier
   0:  GUID_partition_scheme                    *111.8 GB disk0
   1:                    EFI                    200.0 MB  disk0s1
   2:              Apple_HFS Macintosh HD       111.4 GB  disk0s2

Find the identifier of your Mac OS X partion (in this case disk0s2) and type the following in order to repartition the drive. In the example below, I have repartitioned a 120Gb Hard disk to contain 60Gb OSX, 20Gb Linux and 31Gb windows partitions. You can change the volume names/sizes but not the order. (Making the GNU/Linux partition smallest made sense to me because it will be the only OS able to read all the other partitions so it will be able to access all the files, wherever located. So, probably all my photos and mp3s are going to be on the OS X partition.)

sudo diskutil resizeVolume disk0s2 60G Linux <name of linux volume> 20G "MS-DOS FAT32" <name of windows volume> 31G

3. Install Windows XP. You continue to follow the directions at OnMac except you plug in your external CD-Rom drive via USB and you place your old Windows 98SE disc (or comparable) in there. The Windows XP installer will find the external CD drive and your old copy of Windows without you having to do anything, except maybe press enter. Stop following OnMac’s directions just before you get to installing GNU/Linux.

When Windows boots for the first time, use your Windows XP drivers disc to add the drivers you need. Then add this Apple Mouse Utility to get right-clicking with CTRL. You’ll probably want that in your Startup folder.

You’ll also probably want a program to remap your keyboard. Currently, I don’t know how to make all the keys on the MacBook work under Windows, but I decided that a true DELETE key and a page-down key were important enough to me to sacrifice my right Apple key and that stupid little extra enter key. The linked “remapkey” program will allow that.

You now have a dual-boot system!

4. Install the rEFIt bootloader. Download the latest rEFIt (I used 0.7). Mount the disk image, copy the efi folder to your root directory, and run the enable script. That is, you’ll need to open a terminal in OS X and type:

sudo mv /Volumes/rEFIt/efi /efi
cd /efi/refit
./enable.sh

I would try booting into both operating systems a couple times. I didn’t do this step at this point, and think it would have gone more smoothly if I had. So, I’m asking you to save yourself some trouble: do it!

Update: I now believe that if you run the gptsync tool that rEFIt provides then the Debian installation (particularly the lilo part) will go much more smoothly. You need to get your EFI and MBR in sync before going to the next step. I didn’t do this at first and think that’s why lilo was such a pain to get working.

5. Install Debian Etch. The Sarge 3.1r2 Net Install disc will not work because it lacks the Marvell Gigabit Ethernet driver you need and because it won’t recognize the SATA hard drive in the MacBook. I used the Etch 2006-05-18 nightly which is already gone from the ftp site. You should get the latest Etch nightly Net Install ISO (Typically under 128Mb). Use that second CD-R to burn the iso and set up somewhere with a fast ethernet connection.

A 2.6 kernel boots by default, but I typed “expert26″ at the boot prompt anyway. I think you could just type “expert” but in any event you need to do the expert version of the install, not the normal one you get by just hitting enter.

Be sure you only format your third (empty) partition! I chose ext3, mount-point /, and flagged the partition bootable. You should select CONTINUE when it warns you that you don’t have a swap partition. We’ll make a swap file later.

Choose the 2.6.15 kernel or whatever the latest one is that your Etch installer provides.

During package selection, let tasksel install the desktop environment and the standard system (The top and bottom options, I think). You can also save yourself a lot of trouble if you add the following packages which we’ll need to compile a new kernel (among other things) later (Unfortunately none of your network connections are going to work on the first boot of Etch, so install these packages NOW):

kernel-package libncurses5-dev tk8.4 tcl8.4 module-assistant

When x.org is being configured choose 1280×800 and everything below that. We’ll also have to make some slight modifications to our /etc/X11/xorg.conf on reboot (described below).

The installer will fail when it comes time to install LILO. That’s OK. Let it try to install into your Linux partition and fail, but don’t mess with the MBR! Then go to a shell from within the installer (the option at the bottom) and type

nano /target/etc/lilo.conf

Comment out the stuff about Windows XP at the end of the file. rEFIt is handling that. Then:

chroot /target
/sbin/lilo -v

I had a good bit of trouble at this step. Keep at it until LILO is happy (although eventually if nothing works just move on and rEFIt will probably fix things later.) Your /etc/lilo.conf probably just needs to say this:

boot=/dev/sda3
root=/dev/sda3
map=/boot/map
delay=20
default=Linux
image=/vmlinuz
        label=Linux
        read-only
        initrd=/initrd.img

Hopefully because you already installed rEFIt you’ll be allowed to boot your new Debian installation right away. I wasn’t able to do this because the partition table was inconsistent. If you get strange behavior from rEFIt (I had it where selecting Tux would boot Windows, and where selecting Tux or Win wouldn’t boot anything, etc.) then run the gptsync tool that rEFIt provides and you’ll probably see that the GPT partition record doesn’t match the MBR. Let gptsync work its magic and then try rebooting all your OSs a few times, especially OS X. I think a series of reboots finally fixed things for me. I had just run the gparted liveCD just to take a look at the partitions, but I didn’t change a thing with gparted. Nonetheless, when I rebooted right after running that liveCD my Debian partition booted for the very first time via rEFIt. I’m slightly stumped as to what finally made it all work.

6. Add a 1GB swapfile. Once you finally boot into Debian, type:


dd if=/dev/zero of=/swap bs=1024 count=1048576
mkswap /swap
swapon /swap
chmod 600 /swap

Edit /etc/fstab to include:

/swap       none      swap     sw      0      0

You can type “top” to have a look at the swap and see whether it’s being used.

7. Improve the /etc/X11/xorg.conf with a few edits. This Modeline and sync rates are what an Ubuntu CD automatically generated. It may ruin our LCDs, so I warn you that these instructions are provided AS IS without warranties of any kind and with all faults.

Make changes like so:

...
Section "Device"
        Identifier      "Generic Video Card"
        Driver          "vesa"
        BusID           "PCI:0:2:0"
EndSection

Section "Monitor"
        Identifier      "Color LCD"
        Option          "DPMS"
        HorizSync       28-64
        VertRefresh     43-60
        Modeline "1280x800@60" 83.91 1280 1312 1624 1656 800 816 824 841
EndSection
...

Also make sure that the Screen section lists 1280×800 as the first option for all your depths. (I don’t know how this happened–probably my fault–but at first I had 1200×800 instead, cheating myself out of 80×800 pixels!) UPDATE: I was never really getting 1280×800 until I started using 915resolution. (apt-get install). For using an external monitor see this config file on the mactel-linux-users mailing list.

8. Compile new Linux kernel with support for Marvell Gigabit Ethernet. Hopefully you installed everything you needed to compile a kernel during installation, if not, now is when that extra CD-R or a USB key will be used. You can get needed packages for kernel compilation on another machine (or OS on the MacBook) and transfer them to your new installation. In any event you need a new Linux kernel. I used 2.6.16.18, the latest stable version as of this writing. So put at least that on your USB key or CD-R, copy it to /usr/src and then compile the kernel the Debian way:

tar -jvxf linux-2.6.16.18.tar.bz2
rm linux
ln -s linux-2.6.16.18 linux
cd linux
make menuconfig
# be sure to build in SATA and ext3 support or your kernel won’t boot. You’re also looking for the Yukon Gigabit Ethernet driver known as sky2. You should compile for Pentium-M processors and include SMP support. RTC-dev must be built-in on Core Duos in order for your hardware clock to work right. See this rtc thread. You can see my (bloated) kernel config.

make-kpkg clean
make-kpkg --append-to-version=.060525 kernel_image
# 060525 is the date in YYMMDD format

cd /usr/src
dpkg -i linux-image-2.6.16.18.060525_10.00.Custom_i386.deb
# Note again that your YYMMDD version will likely differ.

Edit your /etc/lilo.conf file to reflect the changes. Mine now looks like this:

boot=/dev/sda3
root=/dev/sda3
map=/boot/map
prompt
delay=100
timeout=100
default=Linux-2.6.16.18

image=/vmlinuz
        label=Linux-2.6.16.18
        read-only

image=/vmlinuz.old
        label=Linux-2.6.15
        read-only
        initrd=/initrd.img.old

Remove the lines “prompt” and “timeout=100″ if you just want it to automatically boot the default kernel.

RUN /sbin/lilo -v OR YOUR MacBook MAY NOT BOOT!

Cross your fingers and reboot.

9. Add Linux wireless support.
Once your ethernet interface is working again, include the following in your /etc/apt/sources.list to get the needed wireless driver. (Once wireless works, you might want to comment it out so that no future upgrade ever breaks it.)

#NEW Archive for pkg-madwifi snapshots GPG key: 71409CDF
deb http://debian.tu-bs.de/project/kanotix/unstable sid madwifi
deb-src http://debian.tu-bs.de/project/kanotix/unstable sid madwifi

apt-get update
apt-get install madwifi-source madwifi-tools

You want to install madwifi-ng the Debian way using module-assistant. Their instructions work beautifully (and have changed several times in recent weeks, so always refer to their instructions if something above seems broken.)

10. TO DO: Figure out how to use MacBook-specific keys like “fn”, try the Bluetooth, fiddle with infrared, and find a way to monitor CPU temp and fan speed. Sound works via headphones but not internal speaker. iSight now works. See instructions at the MacBook entry of the Debian wiki. Adding an external mouse provides right-click or use xmodmap to assign the eject key to right-click. Haven’t even tried the Bluetooth/infrared yet.

You can read my output from lspci, cpuinfo and cpufreq on the mactel-linux wiki.

06 MarAnother way MythTV is (and can be) better than Tivo

Sounds like somebody needs to build themselves a MythTV. Joe writes…

I just read TiVo’s Privacy Policy and it’s quite arcane. Further, trying to change your privacy preferences isn’t easy. Begin bitchy rant now…

Actually, I’ve thought that almost the opposite of the problem Joe describes (that of personally-identifiable viewing information, PIVI, being collected) faces MythTV. I think it’s extremely interesting that Tivo can tell us that ice skaters falling are the most rewound/re-watched moments of the Olympics or that people are watching The Daily Show with Jon Stewart more than anything else during the week. See Tivo Central. That’s valuable sociological/pop-culture data that isn’t captured for MythTV users.

It seems easy enough to solve since MythTV is a free software project. We can easily get the interesting data and avoid the privacy concerns: MythTV developers (or you!) could write a plugin that allows MythTV users to opt-in to anonymized data collection and then a network of volunteer servers could collect and display the results. The plugin would also be free software and those with privacy concerns could inspect the code and be assured that any personally-identifiable data was being stripped out. However, since MythTV is both free and no-cost, there isn’t billing data such as address and credit card information to begin with. The only personally-identifiable info that could possibly be collected would be IP address and it’d be easy to write the plugin so that it required Tor to anonymize even that.

This viewing data is interesting in so many ways. I think what shows a person records may say a lot about them. Knnowing what shows most people are recording also lets you know if you’re missing something worth checking out. I’ve even thought that a match-making/dating service would benefit from collecting individualized recording data and then matching people based on it. Even if romance didn’t develop, they could certainly agree on what to watch. (I’m publishing this last idea now in the hopes of thwarting any future business-method patent based on it.)

31 JanWhat’s Wrong With Google Aiding Chinese Censorship? Plenty.

Doug Tygar has pointed out that Google’s efforts to assist the Chinese government censor the web are not yet perfected. Tygar points to an example of a technological glitch that, to me, also illustrates why one should have moral qualms about Google’s actions to aid the Chinese government.

Tiananmen Protestor Stopping Line of Tanks (Thumbnail) When using Google.cn’s Image search for ‘Tiananmen’ (capitalized) one currently receives almost exclusively images of the lone student protestor halting a line of Chinese tanks as well other images of the Tiananmen square protest. Presumably this is not what the Chinese government wants.
The Tiananmen (Thumbnail) However, when one uses Google.cn’s Image search for ‘tiananmen’ (uncapitalized) one currently receives almost exclusively non-descript scenic images of The Tiananmen (the entrance to the Imperial Palace Grounds). Presumably this is what the Chinese government wants both searches to produce.

(I’ve archived both pages for when Google fixes this.)

If you take a look at both of those pages you get a graphic illustration of what censorship looks like. Information related to non-violent political dissent has vanished, as if it never happened, and as if we have nothing to learn from acknowledging, recalling, or studying it. Anyone is entitled to put their head in the sand if they so choose, that’s freedom. But when a government decides on behalf of all of its citizens that they must not be allowed access to such materials, that’s the opposite of freedom.

Given two questions put to Google recently by John Battelle, we should be even more concerned:

“Given a list of search terms, can Google produce a list of people who searched for that term, identified by IP address and/or Google cookie value?”

“Given an IP address or Google cookie value, can Google produce a list of the terms searched by the user of that IP address or cookie value?”

I put these to Google. To its credit, it rapidly replied that the answer in both cases is “yes.”

Combine that ability with the Chinese government’s desire to imprison people who search for the wrong sorts of things and Google agreeing to assist the Chinese government in its censorship efforts becomes all the more disconcerting. Will Google turn over this information about Chinese dissidents? Let’s hope not. Chinese prisons do not have a sterling reputation for humane treatment of prisoners.

But even if they don’t go that far, there is a fairly simple pair of arguments that explain the logic behind the outrage over Google’s censorship of google.cn. Maybe Google didn’t think it through like this, so I’d like to help them out with the following:

  1. If a government engages in a comprehensive campaign to censor information related to non-violent a) political dissent or b) religious expression then that government is engaged in a morally reprehensible course of action. (Premise)
  2. If a corporation willingly and knowingly provides essential assistance to a government in a morally reprehensible course of action, when refusing to provide that essential assistance produces no greater harm, then that corporation is itself engaged in a morally reprehensible course of action. (Premise)
  3. The Chinese government is engaged in a comprehensive campaign to censor information related to non-violent political dissent and religious expression. (Premise)
  4. Therefore, the Chinese government is engaged in a morally reprehensible course of action. (Follows from 1 and 3).
  5. By (among other things) implementing filtering technologies at google.cn that censor information related to non-violent political dissent and religious expression, Google is willingly and knowingly providing essential assistance to the Chinese government in a morally reprehensible course of action, when refusing to provide that essential assistance would produce no greater harm. (Premise)
  6. Therefore, Google is itself engaged in a morally reprehensible course of action. (Follows from 2, 4, and 5).

I welcome counter-arguments or challenges to any of these premises, but I currently believe all the premises are uncontrovertibly true, and consequently that the above argument is valid and sound. I hope Google comes to the same set of beliefs.