Yes, but who’s writing the check?

I’m in my last semester of undergraduate work, and between a full time school load and full time work load, some things fall through the cracks. Usually school things. I have a professor who likes to say “I’ve worked in industry, and I know what the result would be if you were this late with a work product.” Yeah. So have I (and so do I). But in this case, I’m the one writing the check.

date:2006-03-22 08:56:13
wordpress_id:408
layout:post
slug:yes-but-whos-writing-the-check
comments:
category:aside, my life

Licenses for Blogs

John Palfrey of the Berkman Center wrote a post proposing licenses specifically for blogs and feeds, based on Creative Commons licenses. I completely agree on one hand — more explicit licensing and discussion of rights and responsibilities is always a good thing. On the other, I don’t think we don’t need more licenses in this case. His suggestions and my comments (with props and attribution to Mike):

Option 1: Full-text republication, with attribution and link-back: I consent to the republication of the copyrighted works that I publish via my source, whether alone or repurposed with other sources in a derivative work, with no restriction on how much of the feed is rendered or how it is used, so long as republication involves attribution to me and a link from the aggregator back to the primary page where my source is published by me.

Great idea; see Attribution 2.5.

Option 2: Truncated-text republication, with attribution and link-back: I consent to the republication of the copyrighted works that I publish via my source, whether alone or repurposed with other sources in a derivative work, so long as only 200 words or fewer are included in what is rendered and so long as republication involves attribution to me and a link from the aggregator back to the primary page where my source is published by me. (This option would presumably be the one that Susan Mernit suggested in the last go-round.)

So this one is a little different, but I’m not convinced it requires an entirely new license. This is basically applying Attribution 2.5 to the first 200 words of your work. Why not just publish two feeds: one with full posts under something more restrictive, another with the first 200 words, under Attribution 2.5?

Option 3: Personal aggregation only: I consent to the republication of the copyrighted works that I publish via my source, but only for strictly personal, non-commercial use.

Is a license needed for this? Earlier in his piece Palfrey states: “What I think I’ve heard is that every blogger expects that other people will, at a minimum, be able to render your works in an aggregator for personal use, or else they would not be offering an XML feed.” I suppose being explicit is better than implicit, but why not Attribute-NonCommercial (or one of it’s ShareAlike or NoDerivatives cousins)?

Option 4: No aggregation except with permission: I do not consent to the use of my source for any purpose, except with prior written permission or as required by law.

See: fully copyright; no license required.

Option 5: No restriction: I place no restriction on the use of my source for any purpose.

Hmmm…. sounds like the Public Domain.

This shouldn’t be intepreted as a slight to Palfrey; I think its good that people are discussing exactly which right they want to retain and which they want to release. I just think we should look at the tools available before creating new ones.

(Disclaimer: I do not represent my employer in these comments)

date:2006-03-18 07:50:32
wordpress_id:407
layout:post
slug:licenses-for-blogs
comments:
category:General

ccPublisher 2 Beta now available

ccPublisher 2 Beta 2 is now available. Follow the link for download links (Windows, Mac OS X, and Linux), some release notes and installation instructions. And don’t forget to check out the new tracker for all your bug-filing, feature-suggesting urges.

date:2006-03-13 20:20:20
wordpress_id:405
layout:post
slug:ccpublisher-2-beta-now-available
comments:
category:aside, development

Readonly Attachments

I suppose I should have blogged about it a while ago, but a while back I hacked together a Thunderbird extension at the request of a friend, and I went ahead and made it available through addons.mozilla.org.

Readonly Attachments does just what it sounds like — makes attachments saved to disk via Thunderbird’s “open” command read-only. The idea is that this should prevent you from making critical changes to that all important document, only to realize after you close your word processor that it was saved in the /tmp folder and is now lost forever.

I’ve tested it personally with Mac OS X, Windows and Linux; on OS X you may see a message asking if it’s OK to use the Finder to open something. This is just caused by Thunderbird asking the operating system to open the file with… something. There is a known issue with attachment names which contain non-ASCII characters. I’m working on that… slowly.

You can find some more info in the yiki, and source is available in darcs. If you run into any problems or have any suggestions, record them here.

date:2006-03-12 20:46:02
wordpress_id:395
layout:post
slug:readonly-attachments
comments:
category:development

PyCon paper, slides online

My slides and paper from PyCon 2006 are now online. You can find them here ; feel free to comment or offer suggestions, resources, etc in the yiki.

date:2006-03-09 09:55:08
wordpress_id:404
layout:post
slug:pycon-paper-slides-online
comments:
category:aside, pycon2006

PyCon Day 1

Friday was the first full day of talks at PyCon. There were tutorials yesterday, which I did not attend, but which seem to be receiving positive reviews. The morning opened with a keynote by Alexander Limi and Alan Runyan of Plone fame. Not an incredibly technical talk, but interesting to hear how organizations from Oxfam to Burning Man are using Plone to improve their web offerings or collaboration.

After the keynote I went to the Python for Series 60 talk, given by Matt Croydon of unoffical-series-60-python-wiki fame. I didn’t realize that Nokia had pushed their Python implementation out as a SourceForge project, and I was also interested to hear about the existence of libraries for iCal, xpath traversal and jabber. Maybe I’ll finally get that sudoku for series 60 code bundled and shipped.

The second talk of the morning was Python Can Survive In The Enterprise, given by Mike and Dave from AGI. I know Mike from a chance encounter at the Cleveland airport on the way to PyCon 2005, but didn’t know he was presenting until the talk started; glad I caught it. I’m still not sure what it means to be “an industry leading supplier of emoticons” (I paraphrase from their brochure, but not much), but the talk was well done and interesting. The bandwidth and page views they support during peak times (like VD([STRIKEOUT:veneral disease]Valentine’s Day), etc) is incredible. For example, 11 million visits per month on an average day, 35 million during peak months, and 90 million page views on VD itself. And they do it with Python. Of course there was plenty of hand-waving and corporately required vagueness, but very interesting.

The last talk I attended before lunch on Friday was about using PyParsing to build an interactive adventure game engine. Probably not something I’l be using in the near future, but PyParsing does look interesting. So hey, if you need a recursive descent parser…

During lunch Guido gave a history of Python talk, describing what influenced it (besides ABC, which we’ve all heard about). I was particularly interested to hear about the influence of Modula 3 on Python’s method call semantics. Along with GvR’s “State of Python” keynote the following morning, these two talks provided nice bookends on the language’s evolution.

After lunch I went to two back-to-back web framework talks, first on Django, then Turbo Gears. So both contiune to impress, but I’m not certain if its their technical acumen I’m impressed with, or their rapid uptake. What will be interesting, I think, will be to see not only where the frameworks are in a year or 18 months, but where applications written with them today are. I mean, are these tools for long-lived, growing applications, or one-off, deadline driven projects? Not that one of those is necessarily better than the other, they just seem like two different constituencies.

The last talk I attended on the first day of PyCon was on Zanshin, another project being developed at OSAF as part of Chandler. Zanshin is a CalDAV library built on Twisted and used for calendar syncronization in Chandler. I have to admit that I don’t understand the difference between CalDAV and WebDAV, but I really enjoyed this talk. Mostly, I think, because the presenter, Grant Baillie, spent time talking about why some design decisions were made (ie, abstracting the actual connection the way they did) and about the “zen” portion of zanshin. In my notes I have “the temporariness of connectivity” written down and underlined. I know that ccPublisher does not handle disconnects well. It should.

date:2006-03-09 09:36:44
wordpress_id:398
layout:post
slug:pycon-day-1-3
comments:
category:pycon2006

PyCon Day 2: The Middle Child

The second day of PyCon started with Guido’s annual State of Python keynote, during which he described some new developments in the Python universe, and things that will be going into Python 2.5. The most interesting new feature to me is the new conditional expression, which will take the format

EXPR1 if COND else EXPR2

Unlike some others, I don’t care about the syntax — it’s clearer than the ternary operator in C, and it reads “right”. And it was only after Guido pointed out a potential bug in the “classic” way to simulate this in Python that I realized how important this is. The classic way to simulate the conditional expression is

(COND and EXPR1) or EXPR2

I don’t know why I didn’t think of this earlier — probably because I haven’t been knowingly been bitten by it yet — but if EXPR1 is False, this falls apart. So it’ll be good to get real support for conditional expressions into the language.

The other interesting bits going with the language are absolute and relative imports and a new with statement. I initially thought this was like Pascal’s with statement — simply a way to reduce the amount of typing you have to do and a way to make your code a little easier to read. Instead it’s much cooler — the object passed to with can have special methods, __enter__ and __exit__ which are called before and after the block, respectively, regardless of any exceptions thrown. So things like lock acquisition/release, atomic transactions and signaling just got a lot easier.

After Guido’s keynote I attended Jeremy Hylton’s talk on the Python Bytecode Compiler. I really regret that I won’t be able to get compiler construction under by belt before graduating in May, so the Python AST stuff holds a certain fascination for me. I’m not sure I follow it all right now, but this is yet another instance where I appreciate my assembly language course work. Weird, I know.

One of the talks done by OSAF staffers at this year’s PyCon was on performing internationalization on Chandler. During this talk Brian Kirsch discussed their PyICU project which wraps the Internation Components for Unicode in a Python SWIG wrapper. It was mentioned that they looked at the zope.i18n library before deciding to go with ICU, and during the Q&A session I asked what it was that zope.i18n didn’t do. It seems like ICU has a much broader scope than just string translation, so it’ll be interesting to see how the Python bindings mature and are integrated into Chandler. In addition to traditional i18n services, Kirsch also touched on converting to and from Unicode in Python. It’s definitely a royal pain in the ass that all strings are not unicode strings, but Kirsch made the point that you should just convert everything to Unicode when it enters your application (decode) and convert back to Bytes when information exists (encode).

After lunch on Saturday I went to a talk about an implementation of the Atom Publishing Protocol for Zope 3. I’m pretty agnostic when it comes to the whole RSS v. Atom thing, but a standard protocol for publishing information does strike me as useful. Unfortunately the system is still under heavy development. On the up side, the presenter was working on it during the Zope Sprint and in talking to him later in the conference, it sounds like he’s made enough progress to finish the initial implementation (there were some problems distinguishing different types of HTTP requests, if I understood correctly).

Just before my talk Ian Bicking gave a standing-room-only talk on Building Pluggable Software with Eggs. Ian managed to provide a good overview of what Eggs are, although most of what he said only really came into focus during the sprint. Or maybe I was just nervous about my talk so I wasn’t really paying attention — either one is possible. Anyway, it was standing room only, the talk scheduled against mine was cancelled, so they scheduled a repeat of it against me at the last minute. Oh well, its not like my talk was particularly spectacular.

So my talk fell during the last slot of the day. I was really proud of myself this year — I actually wrote the paper before doing the slides, and felt like I had put together a compelling “story”. Additionally, I watched some video of myself doing a class presentation the week before the conference in an attempt to figure out how I could improve. It was all in vain. I mean, I don’t think I crashed and burned, but I did rush the material, and as such ran out of steam early. A side effect of rushing through was that I don’t think I ever really made the necessary connection with the audience. Sigh. Hopefully the slides and paper will be useful for others to read through, form their own opinions and ask questions electronically. We’ll see.

After the conference day ended on Saturday Shawn and I went to Fry’s. I heart Fry’s. It’s massive [yes, I know that I sound like a size queen]. I bought a Nokia 770. It’s pretty.

date:2006-03-07 09:48:03
wordpress_id:402
layout:post
slug:pycon-day-2-the-middle-child
comments:
category:pycon2006

PyCon Day 3: Winding Down

Sunday, the third day of PyCon 2006, definitely felt like the day of rest. People had started to trickle out, and the day had a shorter schedule that the preceeding two days. Which was fine since I was dragging from the night before. The day opened with an anti-keynote: an interview with Bram Cohen of BitTorrent fame. Steve Holden conducted the interview, which was really amusing. Cohen is obviously a hacker in every sense of the word. During the interview he talked about hacking on BitTorrent while intentionally unemployed and living off credit. And about how to hack the credit system: you get dinged when you apply for credit, so simply hoard a large pile of card apps, fill them all out, and then send them out on the same day. It must have worked to some degree since Cohen is now running BitTorrent, Inc (a position he seemed a little ambivalent about — I’m sure his car would have a “I’d rather be hacking” bumper sticker). And Cohen is imminently quotable: “BitTorrent is actually very mathematically lame”, “Python faithfully repoduces the crapitude of POSIX APIs”, and “Niklaus Wirth can bite me.”

After the keynote, Shawn and I went to Ian Bicking’s talk entitled, The Rest of the Web Stack. I’m not exactly sure what I expected, but in the end Ian provided an interesting discussion of the inherent conflict between developers and sys admins: developers want to do cool new things, sys admins want to do the same thing again and again — it’s stable. And of course, the conflict really comes up in smaller organizations where to some extent, the developer is the sysadmin. I’m not sure there were any conclusions — at least none that made it into my notes — but it definitely was interesting to hear someone talking about finding that balance in development efforts.

After Ian’s talk I indulged my current algorithmic obsession and went to Simplying Red-Black Trees. Once the presenter found the room (seriously, there were 3 to choose from), he presented a metaclass he’s used to simplify the implementation of red-black trees at a small performance cost. The basic approach involves identifying attributes which have symmetric behavior, and can therefore be “swapped”. In the case of rb trees, this is the left and right child nodes.

The talk of the morning on Sunday was simply entitled Django How-To, which as it’s title implies was a very straight forward how-to. During the presentation Jacob Kaplan-Moss demonstrated how to build an interactive sudoku web app using Django. Overall I was really impressed with Django — I’m still not sure I love the magic naming of admin classes and such, but its hard to argue with some of the compelling demos. Its definitely something I want to explore further.

After lunch I did the Docutils double-bill, first attending the Docutils Developers Tutorial and then the cryptically titled What is Nabu?. The Docutils Developers Tutorial was less of a tutorial than an overview of the systems available to developers. I’ve been slightly infatuated with docutils lately — rst2s5 is killer — but I’m not sure how I want to extend it (if at all). So it was interesting, but I think like distutils it won’t really gel until I need to extend it somehow.

Nabu, it turns out, is a way of using reStructuredText syntax to semantically (sort of) mark up bits of information. For example, you might have a contact file that identifies how each line relates to the contact itelf. The interesting part of Nabu is that it supports lots of different kinds of information — in fact, I think you extend it in pretty much any way you want, and that it provides a way to collect these bits of information into a common database. This isn’t a system for the “middle class user” but I like seeing people working on marking up information in a way that makes it easier for programs to consume. And maybe Nabu has a future as middle ware — another program for the user interface, presenting an easy to use UI for creation of Nabu-formatted information, and the Nabu server collecting it and making it available for other users.

date:2006-03-07 09:03:43
wordpress_id:401
layout:post
slug:pycon-day-3-winding-down
comments:
category:pycon2006