AutoCAD drawing files: possession is 9/10 of the law?

The title sums up the puzzling conclusion in a recent 6th Circuit Court of Appeals ruling (CA6 Grusenmeyer Decision.pdf) in a decision about a copyright infringement claim filed by Cleveland architect Jeffrey Grusenmeyer.

Grusenmeyer had contracted to provide a “master plan” for Magnificat High School. The master plan was provided to Magnificat in hardcopy format, Magnificat paid the architect $15,000 as agreed in the contract, and the project was apparently concluded. Some time later, a Magnificat facility manager requested DWG files for “personal use”. Grusenmeyer asserted at the time that he retained all rights to the DWG files but agreed to provide them on the condition they only be used internally and not be further distributed.

Fast forward to the eventual “request for proposal” for an anticipated new building at the school. Upon request, Magnificat provided the Grusenmeyer files to the defendants (a competing architectural firm), who then used portions of the files in their winning proposal. The defendants were aware that Grusenmeyer claimed copyrights to the files, but they used the files anyway. The appeals court notes that “[a]ccording to the individual DSC architects, such reliance on drawings of existing conditions is routine in the industry.”

In affirming the district court’s summary judgement in favor of the defendants, the appeals court noted that the contract between Grusenmeyer and his client (Magificat High School) provided that Grusenmeyer would “provide a master plan for the implementation of the capital improvements program, including plans, renderings, and perspectives suitable for use in presentation and future reference during master plan implementation.” They concluded that this “plain language” gave Magnificat permission to send the AutoCAD DWG files to Grusenmeyer’s competitor.

The district court had previously ruled that Grusenmeyer’s drawings were not sufficiently original to warrant copyright protection, but the appeals court did not address the copyrightability issue at all, dismissing the infringement claim out of hand with their opinion that Grusenmeyer had already given Magnificat carte blanche copyrights to the files vis a vis the quoted clause in their contract — even though the files were never provided as part of the contract!

I think the court erred in determining that the DWG files were subject to the terms of the master plan contract (its incorrect interpretation of the contract notwithstanding), but what I find really surprising in the ruling is the appellate court’s complete disregard of the plaintiff’s claimed and federally registered copyrights.

The moral of the story
If you are providing electronic files, don’t rely on copyright law alone to protect your intellectual property. This case reinforces the 3 C’s for protecting AutoCAD DWG files: copyright, contract, and CADLock.

Update
William Patry (Senior Copyright Counsel, Google Inc.) writes about this case at The Patry Copyright Blog: Make Sure the Contract is Signed.

I’ll take web sites for $200, Alex: Part III

(continued from Part II)

DotNetNuke (aka DNN) is not simple to set up. It needs at least the free SQL Server Express Edition on the host system (full SQL Server requires some changes to the default configuration) and either IIS or another ASP .NET 2.0 compatible web server to run on. If you have Visual Studio 2005 fully installed, you have all you need to run DNN.

There are a number of manual steps involved, and the steps are different depending on the environment, and whether or not you have the version with full source code included. The quickest route to an operational DNN installation is to download the latest ‘Install’ files from http://www.dotnetnuke.com/ and unzip them to a new folder. Next, make sure the ASPNET account has modify, read, execute, and write access to that folder (new folders will not have this permission by default — it must be added). Next, create a new virtual directory in IIS and map the new virtual directory to the new DNN folder. Once this is done, open a browser and browse to the new virtual directory. This will initiate the DNN installation sequence, where it creates and populates its database with default settings. Once the installation sequence completes, DNN is ready to use, and looks like this:

The structure of DotNetNuke is designed so that a single DNN installation consists of a host (the person controlling the physical computer on which the web site lives) and any number of portals (that may be administered by others). The distinction is important when changing settings because host settings can place limits on portal settings, and portal settings can override host default settings. In my case, I am both host and administrator of the single portal.

A DNN portal is a single web site. A web site consists of web pages (also called “tabs” in DNN lingo), each containing controls that may be added to predefined “panes” on the page. Before you can add new controls to a page, the controls must be defined. You can define controls by importing “modules”. These can be third party modules, or one of the 15 or so standard modules that come with DNN.

To actually modify the web site, you simply log in to the web site as an administrator. As soon as you are logged in as an administrator, the web pages change to reveal administrative controls that you can use to modify the layout or module settings of the current page, like this:

Notice the control panel at the top of the page, as well as the new hyperlinks on the controls themselves. These can be used to change individual module settings, or to move modules around the page (or even to a different page) very quickly and easily. There is also a new “Admin” menu page that an administrator can use to manage all other aspects of the web site such as the skins, user accounts, security roles, and other site settings. In theory, all this editing can be done on a live web site; in practice, most changes should be made first on a local mirror of the site, then uploaded to the server once they have been fully tested.

The beauty of a CMS system is that the software makes it possible to build a complete multi-page web site in minutes. Changing skins is quick and can change the look and feel of an entire web site instantly. Unfortunately, there’s always a catch. The price of quick-and-easy is that you have to live with the quirks, bugs, and inconsistencies that come with the software. I spent a lot of time trying to fix some little things that I wasn’t happy with. In some cases I was able to fix them myself, but in the end I just had to learn to live with numerous small irritants.

Coming up in Part IV, completing my first custom module.

My ManuSoft manifest manifesto

With the advent of Visual Studio 2005 and automatically generated manifest files, the topic of when and how to use manifest files comes up occasionally. Since a default ObjectARX wizard generated project in Visual Studio 2005 generates an embedded manifest by default, most people don’t even think about it. Of course that was the whole idea — the manifest would ensure that the correct dependent DLLs get loaded, and voila, no *need* to think about it. One of my programming axioms applies in this case: TANSTAAFL.

The problem is that ObjectARX applications are not in charge. AutoCAD is in charge, and it will decide which VC runtime and MFC runtime DLLs to load. If your ObjectARX application loads a different VC or MFC runtime than the ones AutoCAD is using, you’ll encounter big problems. I’ve always advised disabling the manifest completely (see my ObjectARX Tips page) to avoid such a possibility. Unfortunately, there’s a catch.

The problem is that linking to the ATL80.DLL file isn’t possible by just disabling the manifest and doing nothing more. ATL is now a side-by-side (SxS) assembly, and it no longer lives on the Windows support path, so a standard un-manifested DLL won’t be able to find it. The preferred solution is to link statically to ATL (see Configuration -> General -> ‘Use of ATL’ in VS 2005 project properties) and avoid the problem altogether. If you only have one module that uses ATL, this is always the best solution.

The less desirable solution is to add a *manually-created* manifest that specifies the desired ATL SxS assembly, but ignores the VC and MFC runtime DLLs. You’ll still need to decide whether to make ATL shared or private, and in either case you *must* distribute ATL with your application to ensure that it is available when your application is deployed. You can cheat, and let VS generate your manifest file (instruct it to *not* embed the file), then just edit the resulting .manifest file to remove references to the VC and MFC assemblies. For example, here’s one that I generated (you’ll need to generate your own to ensure that the manifest matches the version you are redistributing):

<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>
<assembly xmlns=”urn:schemas-microsoft-com:asm.v1″ manifestversion=”1.0″>
<dependency>
<dependentassembly>
<assemblyidentity type=”win32″ name=”Microsoft.VC80.ATL” version=”8.0.50727.762″ processorarchitecture=”x86″ publickeytoken=”1fc8b3b9a1e18e3b”>
</assemblyidentity>
</dependentassembly>
</dependency>
</assembly>

In my work, I’ve had very little need for manifests. The VC optimizer is able to strip the unused portions of statically linked ATL out of your code, leaving a much smaller footprint than the entire assembly would require. This eliminates the need to redistribute ATL with your application, thus reducing the overall potential for deployment issues. Nevertheless, there are exceptions to every rule, and your mileage may vary.

I’ll take web sites for $200, Alex: Part II

(continued from Part I)

The kind of web site I wanted to create is usually built on top of a Content Management System (CMS) that becomes the administrative user interface as well as the framework for web pages that get served to web site visitors. The first thing I learned is that there are *thousands* of CMS products floating about the internet, from simple “guest book” type scripts to full blown corporate extranet management systems designed for use by tens of thousands of employees and customers. I’ve also been looking for an excuse to learn ASP.NET, so I decided to narrow my search to CMS software that was based on ASP.NET. Finally, the software had to be free or very inexpensive.

Based on these criteria, I narrowed the choices down to Community Server [now Telligent Community], DotNetNuke, Rainbow Portal, and newcomer FlexCMS. Community Server is free for personal use, but for my planned use it would have cost several hundred dollars — probably out of my range, but I still downloaded and tested it for comparison purposes. DotNetNuke is open source based on a permissive BSD-style license (free to use or modify for any purpose), plus it has a large and relatively mature user base. Rainbow Portal is released under the LPGL license, with discussions currently underway about changing the license. Both DotNetNuke and Rainbow Portal are based on a Microsoft sponsored sample ASP application called IBuySpy. Rainbow Portal seemed more polished, but I ran into some limitations with both pretty quickly. FlexCMS, while seemingly more logically designed and built from the ground up on the latest version of ASP.NET, was clearly lacking a lot of features that the other two free packages included. In the end I chose DotNetNuke because it had a more permissive license and a larger user base to draw support from (I found the documentation for all these packages fairly useless, so peer support was a must).

Next step was finding an inexpensive web host that would enable me to install, run, and administer an ASP.NET/SQL Server application. If you’ve ever looked for a web host, you’ll know that it’s sometimes difficult to find one that provides the remote management capabilities and server software that you need (in my case ASP.NET and SQL Server running on IIS, which are less common than PHP/MySQL solutions running on Linux). I’m aware of several quality hosting companies. Pair networks usually gets good reviews, but they don’t do Windows. I’ve used GoDaddy before for registering domain names without any problems, so I headed there to check out their prices and policies for hosting plans. When I saw that they offered a Windows based economy plan with plenty of storage space and bandwidth for $3.19 per month, I decided to just register my new domain name and sign up for GoDaddy’s shared hosting plan on the spot, and be done with it.

Total cost for DotNetNuke CMS software, 2 years of web hosting, and a new domain name registered for two years: $88. Not bad. In Part III I’ll show you how DotNetNuke works.

Five things you may not know about me

I’m sure that by now all of you have heard about the latest “chain letter” circulating about the blogosphere. It sounds suspiciously like bloggers patting each other on the back. To wit, I’ve been “tagged” by Evan Yares. On principle, and just because I like to be contrary, I refuse to pass this one on, but I’ll go part of the way since there is some redeeming social value to the premise. The five:

  1. I was a difficult child. I ran away from home routinely before I started Kindergarten. I still have memories of the summer just before my third birthday of almost daily forays with my dog “Shep” into the woods adjacent to my parents’ property. Sometimes, after a dispute with my parents, I would take off deep into the woods plotting revenge. One day, after some altercation or other, I narrowly escaped my whip-wielding mother by diving under a barbed wire fence and racing into the woods before she could catch up. My mother spent hours searching for me, and finally spotted me hiding under some brambles. After rounding me up and taking me back home, mom tied me with a rope to a post outside our workshop until my father came home from work. When my father came home, he didn’t have the heart to punish me further.
  2. I was raised Amish. When I was 12, I installed a battery operated radio tuner in my basement workshop, and wired the output through a hidden network of wires (that included our hot water heating pipes as one side of the circuit) into a recessed wall outlet beside my bed so that I could listen to the radio discreetly from my bed through a small earpiece. Later I did something similar when my parents bought my first horse and buggy, by hiding the guts of a portable stereo under the seat.
  3. Amish children are expected to quit school after the 8th grade and begin working (traditionally on the family farm, although farming is becoming less common these days). I chose to continue my education by going on to high school while working evenings and summers to support myself. For this, I was ridiculed and called names in school, and my parents caught a lot of flack from their church elders for my actions (which they had very little control over). I chose not to go on to college after graduating in the top 5 of my class in high school.
  4. My first full time job was as a brick mason, following in my father’s footsteps. I did masonary and other construction work the last two summers of high school, and full time for a year or so after I graduated. One day a family friend called to ask if I would be interested in a “computer job” programming a CNC punch press. The company had unceremoniously fired the previous programmer and had nobody with the skills to replace him. My interview went something like “Do you know anything about computers?” “Yes.” “Can you start tomorrow?” It was at that company where I discovered AutoCAD, and the rest, as they say, is history.
  5. A few years ago, I played poker on a show broadcast across the United States on Fox SportsNet. The show was sponsored by UltimateBet.net, an online poker site. The winner received 10 thousand dollars and a chance to play again for 200 thousand dollars. I got there by beating several thousand other players in a series of online tournaments. I placed third out of the six finalists at the table, so I walked away with nothing more than an all expense paid (and lavish) weekend in Los Angeles, not to mention the satisfaction of knowing my kids got to watch me on national TV.

Go Buckeyes!