Monday, February 26, 2007

My name

It looks like Eber Irigoyen might be on to a new meme. I must propagate it by joining them in lamenting the mis-pronunciations of my names:
  • aw li vee eh
  • aw liver
  • dah gue naiz
  • dah gue nah
  • day je naiz
  • day je neh

As a result, I try to go by Oli, but this has proven to be equally as elusive as many people will write down Ali or even Holly! (WTF?)

Tuesday, February 20, 2007

Thanks for ruining it for the rest of us, guys!

Behold the power of stupidity on the internet, as I tried to e-mail a university computer science assignment to my professor:


 

https://mail.google.com

OlivierDagenais-Assignment1.zip contains an executable file. For security reasons, Gmail does not allow you to send this type of file.

I can sort of see how something like this could have come about: logs show users e-mailing executable files of various degrees of maliciousness.  Google reacts by deciding one malicious executable file is one too many and refuses to accept executable files as Gmail attachments.

Some clever user then thinks "My nefarious H@xx0Rz.EXE must be e-mailed to my clueless buddies... I know: I'll just zip it!".  Google notices again and here we are.  Encrypting my ZIP file would probably do nothing as you can list the names of the files without the key and so Google's clever little ZipSecurityPeeker.py only needs to check for the presence of files ending with .exe.

I ended up submitting the assignment using another e-mail account. I bet I could have CCed my GMail account and received the "insecure" attachment no problem.

UPDATE: Whoa! I didn't even have a .exe file in my ZIP archive! I have some .bat, some .cmd and some .pl, as well as one or two shell scripts without an extension. Most of those files, incidentally, shipped as part of Apache Ant, which I included in my assignment's ZIP archive so the professor wouldn't have to go hunt it down, install it, etc.

UPDATE 2: Nope, I can't receive it either because I apparently broke the law:


Your message cannot be delivered to the following recipients:

(...)
Reason: SMTP transmission failure has occurred
Diagnostic code: smtp;552 5.7.0 Illegal Attachment c5si5493294qbc
(...)

Saturday, February 10, 2007

Unit tests can be fun!

Here's a snippet of testing code from a university assignment I did last term where we had to create a model of an alarm clock using finite state machines and then test using the FSM testing techniques we learned in class. This is Java 5 code with some JUnit goodness.

/**
* It's 21:30 and I'm going to bed. I set the alarm time for 06:00 and then
* sleep until the damn thing wakes me up, but I don't want to get up just
* yet and I think 4 more minutes will change my mood today from
* "didn't get enough sleep" to "downright chipper" and so I slam my hand in
* the general direction of the drowse button (it has an 80%, no 70% chance
* of hitting it the first time) and then wake up a new man 4.2 minutes
* later, turning off the alarm functionality until I need it again the
* following night.
*/
@Test
public void SetTickRingDrowseTickRingStop ( ) {
// set clock time from 01:00 to 21:30
super.SwitchTimeSet();
// that is to say add 20 hours
for (int c = 0; c < 20; c++) {
super.HourButtonClick();
}
// and 30 minutes
for (int c = 0; c < 30; c++) {
super.MinuteButtonClick();
}
areEqual(21, 30, super.clockTime);

// set switch to Run
super.SwitchRun();

// set alarm time from 13:00 to 06:00
super.SwitchAlarmSet();
// which is to add 11 + 6 hours
for (int c = 0; c < 11 + 6; c++) {
super.HourButtonClick();
}
areEqual(06, 00, super.alarmTime);

// set switch to Run
super.SwitchRun();
assertTrue(super.IsAlarmOn());

// go to sleep for 8.5 hours
for (int c= 0; c < 8.5 * 60; c++) {
super.TickMinute();
}
areEqual(06, 00, super.clockTime);

// whoa, it's ringing!
assertTrue(super.IsTriggered());
assertTrue(super.IsRinging());
assertFalse(super.IsDrowsing());

// leave me alone for 240 more seconds!
super.DrowseButtonClick();
for ( int c = 0; c < 4; c++ ) {
assertTrue(super.IsTriggered());
assertFalse(super.IsRinging());
assertTrue(super.IsDrowsing());
super.TickMinute();
}
areEqual(06, 04, super.clockTime);

// whoa, it's ringing again!
assertTrue(super.IsTriggered());
assertTrue(super.IsRinging());
assertFalse(super.IsDrowsing());

// that's it, I'm getting up and turning this thing off
super.SwitchAlarmOff();
assertFalse(super.IsAlarmOn());
}

The test depends on some @Before method which resets the model (i.e. makes it just like the alarm clock just had batteries put in for the first time) and thus the the initial clock time is 01:00 and the initial alarm time is 13:00.  The model was created from observing the behaviour of an old Westclox travel alarm clock.

Wednesday, February 07, 2007

Backups of Subversion repositories

Here's the scenario: you are running a Subversion server and like all serious geeks, you want it backed up. This here post will show you how I do it for Windows and *nix _simultaneously_. I'm making the following assumptions:

Path typeWindows*nix
the subversion repositories are locatedd:\svnrepo/home/svn
the backup root folderd:\backups/home/backups
the subversion CLI(in the path)(in the path)


The first script performs not only a hotcopy backup of a repository (provided as the first parameter), but also first erases whatever backup might have been there (with a special provision for the very first time around) and creates a "dump" of the repository's contents, along with a final clean-up to save space. The reason we are keeping a dump over the contents of the db folder is that you can then "restore" your backup with a different version of Subversion. (trust me, I've lived through a catastrophic failure of a Subversion server and the dump format stays the same across versions while whatever's in the db folder doesn't necessarily)
Windows*nix
BackupAndDump.bat
@echo off
mkdir d:\backups\Subversion\%1\_backup
rmdir d:\backups\Subversion\%1 /s /q
svnadmin.exe hotcopy d:/SvnRepo/%1/ d:/backups/Subversion/%1/
svnadmin.exe dump d:/backups/Subversion/%1/ > d:/backups/Subversion/%1.svndump
rmdir d:\backups\Subversion\%1\db /s /q
backupanddump
#!/bin/sh
mkdir -p /home/backups/svn/$1/_backup
rm -rf /home/backups/svn/$1
svnadmin hotcopy /home/svn/$1/ /home/backups/svn/$1/
svnadmin dump /home/backups/svn/$1/ > /home/backups/svn/$1.svndump
rm -rf /home/backups/svn/$1/db



The second script iterates through all the repositories in a root folder and calls the first script (which, BTW, is located in the backup root folder) for each one.
Windows*nix
SubversionBackup.bat
@echo off
d:
cd \svnrepo
for /D %%d in (*) do d:\Backups\BackupAndDump %%d
svnbackup
#!/bin/sh
cd /home/svn
for d in *; do /home/backups/backupanddump $d; done


Well, that's enough for tonight. I'm sure all you Linux gurus out there are pointing and laughing at my noob-skills.

Tuesday, February 06, 2007

A new oxymoron: cybersurf reliability

Go head. Google it and, even there, you'll see enough of the following: (emphasis mine)

CIA.com : The Freedom of Choice
Cybersurf's premium Internet service utilizes the fibre backbones of Call-Net and Bell Canada for speed and stability, and the latest CISCO remote access equipment (modems) for state-of-the-art digital access and reliability.

...yet ONE link down, there's the sign-up page (emphasis mine):

Welcome to Cybersurf
Cybersurf, ITS PARTNERS, AFFILIATE PARTNERS AND CARRIERS MAKE NO REPRESENTATIONS ABOUT SUITABILITY, RELIABILITY, AVAILABILITY, TIMELINESS, AND ACCURACY OF THE SERVICES OR ANY UNDERLYING FACILITIES USED IN THE PROVISION OF THE SERVICES FOR ANY PURPOSE.

Err... aside from the "yes reliability, no reliability", they don't even acknowledge that future customers will be able to use the phone or internet to do anything? Legal and marketing need to have lunch together a little more often.


(Yes, yes, I know, standard "bait & switch"... I'm just pointing out it sucks, that's all...)

Saturday, January 13, 2007

That was easy!

So this [oldish] computer stopped booting properly about six months ago. It would start, but then mysteriously die during the sequence. I finally had a bit of time to check it out tonight, so I powered it up and noticed the POST would not only show a garbled version of "Maxtor" (and the model number), but also identify this 40 GB disk as about 8 GB. At this point, it would refuse to even boot and instead barf up with INVALID SYSTEM DISK, INSERT BOOT DISK AND HIT ENTER TO RETRY (or something just like it).

Anyway, I figured the hard disk wasn't that old and so I powered down and unplugged it. I noticed the ribbon cable wasn't quite straight (it was sort of folded onto itself, but not perpendicular to the wires), so being obsessive-compulsive as I usually am, I straightened it out, carefully plugged it back in and decided to give it a shot. Lo and behold, I'm blogging this from that computer.

Monday, January 08, 2007

Handy equivalents of Outlook Express keyboard shortcuts for Outlook 2007 users

Outlook 2007 is pretty neat but it's also a little awkward if you've been using Outlook Express a lot (or maybe even previous versions of Outlook). Since I'm a keyboard freak, here's my cheat-sheet of stuff that was really hard to find in the documentation (*cough* context sensitive help my ass! *cough*):


ActionOutlook ExpressOutlook 2007
Switch from plain text to HTML (while viewing a message and plain text is the default - which is what everybody should do)Alt+Shift+HCtrl+Shift+W, D
Focus on the folder tree (while in the main interface)TABCtrl+1
Insert default signature (while composing)Alt+I, SAlt+N, G, ENTER
Invoke smart tag (i.e. AutoCorrect Options)'s drop-down menunot applicableAlt+Shift+F10


Update: Until I put all the HTML code on one line, the spacing was way off, sorry. My "Preview" button doesn't really Preview. :p

Wednesday, December 20, 2006

Say what?

From Picasa's Terms of Service (emphasis mine):

Upon the termination of your use of Picasa Web Albums, including upon receipt of a certificate or other legal document confirming your death, Google will close your account and you will no longer be able to retrieve content contained in that account.


Errr... If I'm dead, do I care if I can't access content?

I'm afraid to ask if this rule is the result of a precedent.

Wednesday, December 13, 2006

What are my choices for "no"?


"Automatic Updates

Updating your computer is almost complete. You must restart your computer for the updates to take effect.

Do you want to restart your computer now?

[Restart Now]"

Whoa!  At least it's better than that "Your computer will restart in 5 minutes no matter what and I don't care if your name is Bill Gates and you're in the middle of a very important demonstration at the moment, so TOUGH LUCK."

For those of you who might be wondering how this could have happened, I run as a non-administrator on that computer and I "Remote Desktoped" back to my own machine as the administrator to install this Patch Tuesday's set of updates.  I wasn't quite ready to reboot, but Windows just needed to insist.

Thursday, November 30, 2006

Do what Technorati tells you to...

Oh, great. I think I just got suckered into another one of those linking schemes by accidentally creating a Technorati Profile so that I could post my picture somewhere or something.

Meh...

Do what the interweb tells you to

So I'm reading Larry O'Brien's blog and he tells me (well, not me personally, but you know what I mean) to not only click on a link, but also to link to it in my own blog. The destination page says the same, plus:


Ask your readers to do the same. Beg them. Relate sob stories about poor graduate students in desperate circumstances. Imply I'm one of them. (Do whatever you have to. If that fails, try whatever it takes.)


...who am I to resist orders from the internet and random blogs?

Wednesday, November 29, 2006

$how me the Shatner!

This show called Show Me The Money recently came out on ABC. It is hosted by William Shatner and feels like a cross between Who Wants to Be a Millionaire and Deal or No Deal.

Unsurprisingly - and appropriately enough but most likely on purpose - WFS feels like a cross between Regis Philbin and Howie Mandel.

Go....watch.....it! You know....you....want....to!

Hacking the Microsoft Natural Ergonomic Keyboard 4000, redux

Earlier I wrote about hacking IntelliType's commands.xml file to enable the use of the "Zoom slider" as a "Scroll slider". Having recently repaved my computer, I found myself installing the latest version of Microsoft IntelliType Pro (version 6.02, a.k.a. 6.02.303.0) and trying to apply the patch I posted earlier:


C:\Program Files\Microsoft IntelliType Pro>patch -p0 < command.patch
patching file `commands.xml'
Hunk #1 FAILED at 1606.
Hunk #2 FAILED at 1694.
Hunk #3 FAILED at 2122.
Hunk #4 FAILED at 2134.
Hunk #5 FAILED at 2152.
Hunk #6 FAILED at 2182.
patch unexpectedly ends in middle of line
Hunk #7 FAILED at 2224.
7 out of 7 hunks FAILED -- saving rejects to commands.xml.rej


B'oh! Err... I mean: D'oh! Ok, time for plan B: Zoom2Scroll.xsl


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="xml" encoding="UTF-8" indent="yes" />

<!-- Pass-through (identity transform) template -->
<xsl:template match="* | @* | node()">
<xsl:copy>
<xsl:apply-templates select="* | @* | node()" />
</xsl:copy>
</xsl:template>

<xsl:template match="C319">
<C319 Type="6" Activator="ScrollUp" />
</xsl:template>

<xsl:template match="C320">
<C320 Type="6" Activator="ScrollDown" />
</xsl:template>

</xsl:stylesheet>


There. A quick trip to the command-line with my trusty xsl.exe:


C:\Program Files\Microsoft IntelliType Pro>xsl commands.old Zoom2Scroll.xsl commands.xml

C:\Program Files\Microsoft IntelliType Pro>


...and killing the IType.exe process, then re-launching that EXE again... it works! In your face, Larry Wall!

Oh, right. This post wouldn't be complete without the source code to xsl.exe. It's a JScript.NET program:


import System.Xml;
import System.Xml.Schema;

var src : String = System.Environment.GetCommandLineArgs()[1];

var transformer : System.Xml.Xsl.XslTransform = new System.Xml.Xsl.XslTransform ( );
var stylesheet : String = System.Environment.GetCommandLineArgs()[2];
transformer.Load ( stylesheet );

transformer.Transform ( src, System.Environment.GetCommandLineArgs()[3], null );


...which you can compile as follows:


C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322>jsc /nologo xsl.jsn


Thanks go out to the folks at Cute Overload for providing me with a [semi-]random web page to test the [new] scrolling capabilities of my "slider" in Internet Explorer.

Wednesday, October 25, 2006

SET CLASSPATH=SUCKS

From Larry O'Brien's blog, God, I Hate Classpaths:
I've spent the past 3 hours trying to figure out freaking classpath issues: something about a ClassCastException from a org.apache.commons.logging.LogFactory. I'm giving up for the day. Stupid freaking classpaths.


The feeling is mutual, brother. I've recently lost plenty of hours to weird errors that turned out to be classpath-related. Maybe I've simply gotten used to putting all my assemblies in the same local folder (and not having to re-create that list elsewhere) or using the Fusion Log, which will tell you what the runtime is trying to load, even if it's hidden by another exception or a silent failure.

Wednesday, October 11, 2006

Upgrades...

I apologize for the recent feed duplications.  First, I upgraded to Blogger Beta (gone are the endless refreshes when "publishing"), then I started using Windows Live Writer (Beta).  In theory, everything should be good now...

...until the next round of betas, I suppose. :p

Comparison of Open-Source Licenses


Note

This is a copy of an essay I wrote for an assignment in the Open-Source Software Engineering course I'm taking. The deadline was yesterday, so it's safe to post today. :) I wrote this essay using Confluence, so the HTML is a little weird when I try to copy/paste it here. The assignment was:


Compare and contrast (1500-2000 words) the open source licenses MIT, BSD, GPL, LGPL, Creative Commons to the Eclipse Public License. Make sure to include a table (rows heading is feature, column heading is license) that summaries your discussion. Submit the answer to this question as an HTML document.

Feature to License matrix

# Feature name \ License MIT BSD GPL LGPL Creative Commons EPL
1 Number of paragraphs 4 6 56 69 Average of 31 20
2 Distribute modified/derived work? Yes Yes Yes Yes Depends on "nd" option Yes
3 Must release source?


Yes Yes

4 Must identify all modifications?

Yes Yes

5 Is attribution required? Preserve copyright notice Preserve copyright notice Preserve copyright notice Preserve copyright notice Yes Preserve copyright notice
6 Is endorsement or promotion permitted?
Not without permission

Yes
7 Is commercial use or distribution authorized?

Yes Yes Depends on "nc" option Yes
8 Allows re-licensing?

Only by special permission Only to GPL, or by special permission Depends on "sa" option Yes
9 Requires patents be licensed to recipients?

Yes Yes
Yes

Introduction

The open source licenses involved in this study have been analyzed and – although similar in the spirit of "no charge but no warranty" copyright licensing – were found to be primarily different in what they are specific or explicit about. It is speculated that this is representative of the values and interests of the license authors and therefore the level of detail surrounding a topic is assumed to reflect the degree to which the interests and values affected by said topic are important to the authors and the amount of effort willing to be exerted in order to ensure said interests and value are protected.

Examples of such interests and values are "equality", "merit", "freedom", "public good", "continuous improvement", "standardization" and "accountability". This analysis will examine these values, how they can be traced back to license features and finally how individual licenses emphasize these values by the use of the features and the requirements or conditions they attach to said features.

Features

The matrix, and correspondingly this analysis, only examines the major differences observed between the licenses. Similarities are outside the scope of this study. It should be noted, also, that the matrix only contains entries for feature-license pairs when such a feature was explicitly mentioned in the license. As identified in the introduction, the licenses aren't always specific on all features and a lawyer may be able to interpret the licenses according to the local laws to make a definitive determination for each feature. That said, even a "Yes" is slightly misleading as there are often conditions or requirements attached to the permissions before they can be implemented.

1. Number of paragraphs

Although one of the more questionable choice of features, it is actually pretty representative of the level of detail of the licenses. The count was done quickly, by hand.

2. Distribute modified/derived work?

Since all licenses permit royalty-free redistribution, the distinction here is whether the work can be distributed with modifications or as part of a derived work. This feature is present because the Creative Commons licenses can restrict this activity with the "nd" (No Derivatives) option.

3. Must release source?

This feature is more accurately the requirement of making available, upon request, the source code of any binary re-distribution, independent of whether the work was modified or not. It may be sufficient to make an offer for the source code or to pass on the same offer to recipients. The GPL and LGPL are explicit about this.

4. Must identify all modifications?

Also known as "delta notification", this is a requirement that modifications be traceable back to contributors, usually in the case of derivative works. Again, strong features of GPL and LGPL.

5. Is attribution required?

Another feature that appears to stem out of nit-pick, the Creative Commons licenses stand out in that they require more than simply preserving the copyright notice but to make efforts to link back to the original work. This could be considered a special case of delta notification.

6. Is endorsement or promotion permitted?

A special case of attribution, in the case of derived works the BSD license makes a point of requiring "specific prior written permission" before using the names of the original project's organization or contributors for promotional or endorsement purposes. The Creative Commons licenses give this permission by default, but section 4.a reserves the right to the Licensor to request credit be removed.

7. Is commercial use or distribution authorized?

This feature is about the license granting permission to use or distribute the work (or portions thereof) in a trade for something of value between two entities [3]. The MIT and BSD licenses are not specific about this and the Creative Commons licenses offer this permission as the "nc" (Non-Commercial) option.

8. Allows re-licensing?

It may be desirable, during the construction of a derived work, to license said derived work under different terms. The GPL and LGPL offer this possibility as an exception, the EPL offers it under certain conditions and the Creative Commons licenses grant it if the "sa" (Share Alike) option is not used.

9. Requires patents be licensed to recipients?

Where patents are concerned, the GPL and LGPL, through sections 7 and 11, respectively, state clearly that any patents owned by contributors be licensed royalty-free to all recipients, direct or indirect. The EPL, on the other hand, only requires that patents on contributions be licensed royalty-free when combined with "the Program", although the EPL joins the MIT and Creative Commons licenses in reminding the recipient that there is no guarantee the work does not infringe on patents owned by third parties. The EPL goes furthest by stating it is the responsibility of the recipients to acquire any third-party patent licenses that may be required for the use or distribution of the work.

Interests and Values

These values were derived from the perceived intents of the license features identified earlier and form the basis of the respective philosophy behind each license.

1. Equality

Equality is a social state of affairs in which certain different people have the same status in a certain respect.[1]

This form of inclusiveness aims to fairly make available the work to all possible recipients and ensuring this possibility through various conditions, such as ensuring the re-distributed work is licensed "as a whole at no charge" [2]. While this is generally the primary principle behind open-source licensing, half of the Creative Commons licenses stand out here because the "nc" option – identified in feature #7 – prohibits the use of the work in a commercial fashion and thus can be interpreted as introducing inequality. It could also, on the other hand, be argued that such a restriction may be an attempt to restore equality among non-commercial entities relative to their commercial counterparts.

Another factor potentially affecting equality is the Creative Commons licenses' "sa" option – identified in feature #8 – that seeks to ensure recipients have as much freedom with the derived work as with the original, much the same way sections 2b and 6 of the GPL and sections 2c and 10 of the LGPL try to ensure the propagation of the rights and freedom of the original work to all recipients at all levels of distribution.


Lastly, feature #9 ensures that no person or groups of person be excluded from using the work by having the GPL and LGPL require that all patents be licensed royalty free to everybody.

2. Merit

This value can be understood to mean the desire for recognition or acknowledgement, such that a reputation can be earned and preserved. We can especially see the expression of this value through feature #5 but also through feature #6 where the authors of the BSD license imagined the possibility of mis-use or of sub-optimal derivative works that could potentially – albeit unintentionally – reflect badly upon the original authors. We can also see a similar attitude with section 4a of the Creative Commons licenses where endorsement is considered granted in the form of the attribution requirement, but for which the Licensor has veto rights over.

It can also be argued that feature #4 helps support the notion of individual merit and reputation by the GPL and LGPL requiring that all modifications be identified, even though all licenses disclaim any warranties to protect the same individuals from damage claims.

3. Freedom

Although all open-source licenses generally try to increase the freedoms of the recipients, the most fervent in its attempts to do so is the GPL, especially through feature #8. This value is highly regarded as it can help avoid vendor lock-in where critical or popular fixes and improvements could otherwise be withheld, delayed or prevented by the original authors. There are obvious similarities to value #1 (Equality).

Feature #3 tries to make sure recipients (direct or indirect) are as able or free to make changes to the work as the original authors, provided some conditions are satisfied. Again, this is the stated spirit of the GPL and LGPL, although the latter trades a few freedoms – hence the "Lesser" in the name – to support value #6 (Standardization). Some Creative Commons licenses are definitely at odds with this value as the "nd" option could be seen as taking away freedom, relatively speaking.

4. Public good

It is seen as an effort to help the development of the greater community and encourage cooperation to emphasize elements of feature #3. Similar to value #1, this value distinguishes itself from Equality by not only providing equal access to the work, but to improvements to the work, such that said improvements are done cooperatively and as a community so as to best reflect the needs of the many. That is not to say that the act of not making available the source code hinders public good per se – although some may argue otherwise – but that the public good is best served when the source code is also made available.

Feature #7 can play a role here, in that allowing commercial use and redistribution may also help accelerate the development of a popular work, as the LGPL. One could also argue the applicability of features #4, #5 and #6 in that they could help identify fraudulent or sub-optimal versions of a popular work.

5. Continuous improvement

The permission to re-distribute modified/derived works (feature #2), coupled with the guaranteed freedom to make modifications (feature #3) help support this special case of value #4 (Public Good) where the software is able to be evolved and improved. This is where works licensed under the GPL have the best chance for continuous improvements and No Derivative Creative Commons-licensed content the least chance.

It could also be argued that the ability to make improvements in secret could mean there is less overhead involved and the improvements themselves progress faster, but such modifications may not be for the greater Public good. In those cases the MIT, BSD and EPL licenses offer that opportunity and similar, more "open" projects may be created to emulate the more secretive counterparts.

6. Standardization

It may be that it is important a work become popular or widely-used. In such cases, the "lesser" conditions attached to feature #3 by the LGPL (or by other licenses) may allow works such as function libraries to flourish by being used by more recipients than otherwise would be possible if said recipients had to also release their source code, even if it only used the original work. [5]

7. Accountability

Feature #5 helps identify the authors and contributors to works and feature #4 enables an order of magnitude better traceability to help establish exactly who did what, generally to help track down problems and/or defects with the work That information could also, in theory, be used to assign blame, although all licenses try to avoid this situation by providing no warranty of any kind and attempting to shield authors and contributors from damage claims.

The GPL, LGPL and EPL, however, have an exception that permits, through feature #7, the exchange of a warranty for a fee, under the condition that the warranty protection can not affect other contributors.

Lastly, although some patents are licensed for use as per feature #9, not all possible patents necessarily are. The EPL and MIT licenses are the only two that specifically point out the fact that third-party patents may need to be licensed, mostly because there is no warranty of non-infringement. The GPL and LGPL, on the other hand, are specific about obtaining royalty-free patent licensing from all involved parties before distributing the work.

Conclusion

As was demonstrated in this study, the licenses vary wildly in what they are specific or explicit about, which helps to emphasize the differences in values and interests shared by the authors of said licenses. It is thus difficult to fully compare the chosen set of open source licenses because they do not generally disagree on many points, but rather delve into different facets of those points at different intensities.

It is thus recommended that the choice of an open-source license for a new work be made according to the compatibility of the author(s)' values with those implied from the licenses. An abstraction at this level is thought to deliver the best suitability and match.

References

1. Social equality, Wikipedia. http://en.wikipedia.org/wiki/Equality_(law)

2. The GNU General Public License, Free Software Foundation, Inc. http://www.opensource.org/licenses/gpl-license.php

3. Commerce, Wikipedia. http://en.wikipedia.org/wiki/Commercialization

4. The Open Source Definition, Open Source Initiative. http://www.opensource.org/docs/definition.php

5. GNU Lesser General Public License, Free Software Foundation, Inc. http://www.opensource.org/licenses/lgpl-license.php

6. Licensing HOWTO, Raymond, Eric S. & Catherine O. http://www.catb.org/%7Eesr/Licensing%2DHOWTO.html

7. The Power of Personal Values, Posner, Roy. http://gurusoftware.com/Gurunet/Personal/Topics/Values.htm

8. Commerce, Wikipedia. http://en.wikipedia.org/wiki/Commercialization

Monday, October 09, 2006

DMA is a Good Thing (TM)

I was recently ripping audio CDs until I reached a point where it didn't work so well anymore. Symptoms: CPU usage would go through the roof (even after changing the process' priority to Low), my pointing device would be erratic, I couldn't play audio at the same time and the ripping itself didn't seem to go as fast as it used to.

Since the pointer was erratic, I suspected an interrupt problem. It turns out the drive had was now being accessed in PIO mode. I tried the usual "switch to DMA" trick, but it didn't work! Fortunately, I ran into this forum posting over at CDRLabs.com where the third post detailed a procedure which seemed less scary than the first one and which worked, to boot!

Quick recap, in case that forum vanishes into thin bandwidth (hardy har har), because everybody knows all the forums eventually get pwn3d by spoiled twelve-year-olds-who-should-really-be-doing-their-homework-instead-of-saving-the-public-good-from-useful-information-and-loitering-on-my-damn-lawn:


  1. Open your registry to the key:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}

  2. Navigate under the sub-key 0001 or 0002 (representing the primary and secondary IDE channels, respectively), whichever one represents the channel for which your device isn't getting DMA-enabled

  3. Delete the value MasterIdDataChecksum or SlaveIdDataChecksum, again depending on whether your DMA-deficient device is the master or slave, respectively.

  4. Reboot!



In conclusion, this momentary trip to the pre-DMA days really scared me and made me be thankful for DMA on this day of thanksgiving. I suspect one of my CDs was scratched or otherwise damaged and my operating system decided it was safer to switch to PIO mode.

Friday, October 06, 2006

Software Horror Stories

From Programming-Designs.com's forums:

Here are 107 software horror stories where making a programming mistake can cost you your job or even your, or even somebody else's life. Many of these listed provide links to stories about the horrific event while others contain book or magazine references where you can read more about them.


We heard of the worst of these in our Software Engineering course at Carleton U. Many of the events include a link to the RISKS digest, which is a must-read for every self-respecting software engineer out there.

Thursday, September 28, 2006

The future of compilers: right now!

From Software by Rob's post on The Future of Compilers... The part where he talks about logic errors being detected by compilers can probably already be done with xUnit, as we (at work) have NUnit running almost like a compiler, right after the actual compilation, in the build script. That way, if we have a "minus sign in the wrong place", a unit test will catch it, if not prevent it from happening again.

Some software like FxCop (PMD in the Java world) can also help here.

Gopher the Demo Player

As part of a university course I am taking (I've gone back to Carleton U for a M.C.S.), I am to make a presentation on some open-source software. I picked my own project, Gopher the Demo Player.

The presentation slides can be downloaded here (PDF, 693 902 bytes).