September 2005 Archives

AddThis Social Bookmark Button

Related link: http://use.perl.org/~luqui/journal/26943

A recent journal entry from fellow Perl 6 cabalist Luke Palmer expresses a problem I’ve had with reading CS papers: I wouldn’t put up with that inscrutability in code I had to review or maintain.

Why should people put up with that in research papers? Does jargon-heavy, mostly mathematical notation serve a useful purpose (even as simple as keeping down word lengths), is it the sign of laziness from people who don’t have to touch the code (or prose) after it hits publication, or is it a sinister sign of a technocratic kabbalah, trying to keep out the unworthy?

Maybe that’s overstating it, but I have a similar dissatisfaction with the Haskell programming language. Autrijus Tang, who like Luke is both scarily smart and younger than I am, swears by the language. I’ve dabbled in it, even written some production code in it (including parameter binding and object destruction in Pugs, the latter of which exposed a bug in GHC’s garbage collector) and the syntax and idioms of the example code I see still drives me crazy.

I’m not a mathematician; I write code to solve real problems, not to calculate the Fibonacci sequence lazily and infinitely or to create a typesafe, type-agnostic function that appends to or counts the elements of a list. Yawn!

I think I’m a pretty good programmer. I understand closures, iterators, generators, list comprehensions, currying, continuations, type inference, co- and contravariance, and even (to some extent) monads.

For those of us who just want to do something productive, not show how elegantly we can transform numerical integration problems into source code, is it too much to ask for meaningful identifiers and intelligible examples? Don’t even get me started on the typing error messages GHC spews. The difference between IO and IO () was, well, awfully subtle the first dozen times I saw it.

I appreciate academic research and I know that researchers are solving problems that I don’t even recognize yet — but the gap between theory and practice is, in part, the fault of their poor communication.

Yeah, yeah, I’m a Perl hacker complaining about syntax. What do you think about the density and inscrutability of computing papers though?

John E. Simpson

AddThis Social Bookmark Button

What I don’t know about sports could fill three or four stadiums and a half-dozen indoor arenas, and throw in a swimming pool and a Little League sandlot just for good measure. Nevertheless, one of my favorite occasional stops on the Web is a section of the ESPN site — the section hosted by Bill Simmons, “The Sports Guy.”

Now, I don’t read Simmons for his insights into athletes’ contract negotiations, or various pro sports’ drafts, or record holders, or any of the rest of it. What I read Simmons for is two-fold:

  1. The sheer pleasure he takes in writing about his topic of choice; and
  2. His fearless (and almost always entertaining) digressions into areas other than sports.

Among the latter is a new feature he’s instituted, called The Curious Guy, which he described as follows in his first foray into that area:

I e-mail questions to somebody who’s successful — whether it’s the GM of a baseball team, an author, a creator of a TV show, another columnist or whomever — and we just start trading e-mails for an entire day. As with many of the new features I start up, you may never see this one again, or you might keep seeing it. I don’t know. Let’s see how this one works out.

The very first Curious Guy piece, linked to above, was an exchange of email messages with the creator and executive producer of the TV show “The OC”; the second, several thousand words of back-and-forth with Chuck Klosterman (”the best-selling author and pop culture guru who released his third book, ‘Killing Yourself To Live’, earlier this summer. Chuck also writes monthly columns for Spin, Esquire and Honcho. All right, I made that last one up”).

Why I’m rambling on about Simmons here is that I imagine this weblog will turn out to be something like Simmons’ column, transplanted to the technology realm. While my principal focus will continue to be (as it was on XML.com) on XML and related technologies, I look forward to the chance to write about other technologies as well — and sometimes, who knows?, to fall off the wagon and write about something completely unrelated to the transmission of electrons through silicon, copper, and fiber optic cable, or to any of the jillion side- and after-effects of such transmission. I’m kind of a Curious Guy myself.

Anything in particular you’d like me to look into — or stick my neck out about? Feel free to comment on this or any other post; if publicly sticking out your own neck gives you what used to be called the vapours, feel free instead to contact me at johnesimpson-at-earthlink-dot-net.

Kevin Shockey

AddThis Social Bookmark Button

Related link: http://www.sdexpo.com

I want to pick up essentially where I left off with my last article. Before I get into that, let me first share a little about the conference. Today, the conference officially ended. I’ve had such a broad spectrum of emotions and experiences, that it is difficult to characterize. A few of the scenes that linger in my memory have nothing to do with software development. Or do they?

Increasingly as I ponder this never ending debate about open source versus proprietary models, I’m believing more and more that our focus in the software industry is severely misguided. One of my take aways from this conference is that, very simply, that the development of a software solution is less about the technology and more about people. Before you flame this article, consider this perspective. Think for a moment about the following software development memes: user involvement in XP and agile development, user-centered development, and a new one for me from the conference, usage centered design. Consider also that one of the tracks at the conference was “People, Projects & Teams”, in addition also consider part of the description for that track: “The most important success factor for any software development team is the people that comprise it.” I think that human centered software development is applicable along many different levels. It is equally important as a key philosophy while working with developers or teams as it is working with our clients and end-users. Ultimately, the tools we use, whether they are Linux or Windows, Java or C#, or for that matter, PHP, Perl, or Python, in the end are merely tools.

I learned a new metaphor for software development at this conference. In the past I wondered whether software development was art, engineering, or manufacturing. I’ve seen this new analogy before with her Kim Polese and some her references to Doc Searls’ construction metaphor. However, this analogy became very clear from some of the keynotes and other discussions I had during the conference. So I ask the following…Do you think that carpenters get into heated discussions over what brand of hammer they use? Is one brand of lumber better than another? It might be, I have no idea. I’m a geek so how would I know?

One of the activities held during the Software Development Best Practices conference was the announcement of the Software Development Magazine 2005 Readers’ Choice Awards. So bringing up the subject of my previous article, it is extremely curious that even though I witnessed very little convergence between the Software Development Magazine conference and the Open Source community, the readers of magazine voted open source projects as recipients of approximately 25% of the awards. I’m excluding the category solely about open source, but clearly 25% of the sessions were not about open source software. So there is a little bit of a disconnect between the readers of the Software Development magazine and the organizers of the conference.

For me, my last article generated a lot of comments. I’d like to address some of those comments. From the speakers and attendees that I met, a large percentage do NOT make their living from software license fees. A considerable amount were consultants, authors, or work within an IT software development shop. If we take a moment and recall that most of the software our industry produces is never distributed nor sold with any type of license, whether proprietary or open source, then how can we claim that Open Source is jeopardizing someone’s ability to earn a living? If I happen to work in the insurance industry and I implement a web-based system using Linux and Apache, is my job at risk? Sure, maybe someone working for a producer of operating systems or web servers might be at risk, but isn’t that the basis of a market-based economy? I could just as easily choose any provider in that marketplace and it wouldn’t be seen as out of the normal.

To tie these two streams of thought together, I really believe that, whether open source or proprietary, we are all focused on creating software that is useful, used, and brings us the recognition and respect that we crave as human beings. Consistently, I think most everyone would agree that the obstacles that we confront involve our inability to understand what users want, translate their wants into a functional and usable system, and manage our teams to deliver what we believe needs to be built. I fail to see how licensing or technology plays a role in these dysfunctions. In the end, I would have to admit that my project and presentation were both centered around people, and the major problems I confronted were not technical or licensing problems, but people problems. Perhaps, just perhaps, the area most critical, and most in need of our complete attention, is not licensing or technology, but human relation engineering (or creation or constuction, choose your metaphor).

What is your metaphor for improving software development?

AddThis Social Bookmark Button

Related link: http://www.foxnews.com/story/0,2933,170724,00.html

ODF is an open standard, free for any organization — for-profit, non-profit, hobbyist — to implement. Presumably, any software product that implements the format is acceptable to use for working with the Massachusetts government. If the right price to feature ratio is $100 for an organization, so be it. If the right price to feature ratio is $0, there are products that do that too.

For example, AbiWord, a Free Software word processor developed by a handful of people, already supports ODF. The same goes for other free software and open source products.

Is there a technical reason preventing Microsoft, with tens of thousands of programmers and billions of dollars available, from adding ODF support to Microsoft Office? That’s a ridiculous question! Of course not.

Instead of supporting what a large customer values — open standards, free to anyone to implement, without fear of patent traps, royalties, and planned obsolescence — Microsoft has chosen not to compete on the merits of its software. (An alternate explanation is that Microsoft is completly incompetent and can’t duplicate or even merely license the work of a handful of open source programmers. I reject that idea; it appears more likely that Microsoft really wants to levy a tax on collaboration as an NGO.)

All that prevents Microsoft from supporting ODF is its will not to compete. Don’t misunderstand me — this is an act of will and a refusal to compete on anything but entrenched proprietary lock-in. In other words, the dominant provider of office software prefers to compete on its own incompatibilities than on the quality of its software. That’s… hardly new.

With tens of thousands of programmers and billions of dollars, the best Microsoft can do is complain? That’s not a company to which I’d tie my future. Good for Massachusetts.

What’s it worth (in money or in time) to take back your future from a greedy, abusive monopoly?

Jeremy Jones

AddThis Social Bookmark Button

Related link: http://www.odeo.com/show/120299/view

Ruby has it all: all the press, methods on integers, a string method named “chomp”…and they have a song to boot. Why can’t Python have a song??? I want a Python tutorial song! I think I’ll go sulk now….

Who’s going to volunteer for a Python tutorial song?

Jeremy Jones

AddThis Social Bookmark Button

Related link: http://cheeseshop.python.org/pypi/SQLObject/0.7rc1

I couldn’t find news of the release on the main page of SQLObject, nor could I find release notes at SQLObject.org (or in the release itself), but I did find news of 0.7.0 which mentions features and bug fixes. I didn’t find a date on this news entry, so I don’t know if this is for 0.7.0 in general, or if it is for a specific build of the 0.7 line. Hopefully, this will be pertinent to rc1.

I’ve used SQLObject now on a couple of small projects and have been pretty impressed with it. I’m not afraid of SQL at all, but it is nice to have a well-built, general-purpose data abstraction layer nicely packaged and ready to use. In the projects in which I’ve used SQLObject, I haven’t had to write a line of SQL - even to create the database schema.

As I mentioned in this blog entry, I really like SQLObject, but I feel like I need to re-re-read the docs. I’m having a small issue creating (what I feel are) the “right” relationships between one object type and two other object types which the first type links to. I’m certain I’m just not doing something right. This experience doesn’t leave me with the feeling that SQLObject is an inferior library. It leaves me with the feeling that I need to spend a little more time with it and make it do what I want it to.

Great library. Good work, Ian.

Geoff Broadwell

AddThis Social Bookmark Button

Related link: http://pugscode.org/

When I first learned that several members of the core Perl 6 design team
(affectionately known as @Larry) had learned Ruby and/or Python, I wasn’t
terribly surprised. It pays to understand one’s competition after all,
and there are some nice features in each to assimilate. Perl, Ruby, and
Python all share some deep common design attributes, so they’re not
exactly new ground, however. They could be considered part of the same
language family, as for example French and Italian are.

What has surprised me of late is the number of Perl 6 designers and
developers that are learning languages from completely different language
families: Dylan, Forth, Haskell, Joy, Lisp, Prolog, Scala, Scheme,
Smalltalk, and who knows how many others. This is a very good thing.

Each of these languages offers a unique perspective on programming. Each
has its own philosophies, world views, conventions, and so on. Most of
them try to be extremely good at at least one thing, and can therefore
warp their entire syntax and semantics around that task. This gives the
opportunity to find features in their “natural environment” that Perl 6
can then assimilate.

And assimilate it does. Just as Perl 5 borrowed heavily from the languages
that came before it, so Perl 6 is borrowing heavily from today’s languages.
It’s also taking lessons learned from long experience with older languages
from which Perl 5 didn’t borrow enough. Here are a few examples:

C
  • Having easy, efficient access to C libraries is important.
    Perl 5 of course has had access to C libraries for a long
    time, but the interface was clunky and slow. The Inline
    group of modules have helped, but it’s still nowhere near
    ideal. Perl 6 (and Parrot) have long had a goal of clean
    library call interfaces.
  • Better handling of native data arrays and packed data
    structures is important, too. Again, Perl 6 has long
    had native (AKA unboxed) data types in the design.
Dylan
  • Method resolution in the face of complex inheritance paths
    is a pain. Perl 6’s default MRO (Method Resolution Order)
    is based on Dylan’s C3 algorithm. In fact, the Perl 6
    OO MetaModel even uses some tests cribbed from examples in
    the original Dylan C3 paper.
Forth
  • The best language for any situation is one designed
    specifically for the task at hand. Perl 6’s grammar system
    makes it much easier to do this in Perl. Like Forth and
    Common Lisp in their own ways, Perl 6 allows deep
    control over parsing and macro use. In fact, Perl 6’s
    grammar is exposed to the programmer and can be directly
    altered — or new grammars can be created, and swapped in
    as desired.
  • That said, the base language should have a rich
    non-orthogonal vocabulary, allowing many common tasks to
    be coded clearly, instead of being a mess of contortions
    to get around false simplicity in the language design.
    Perl 6 has this kind of rich vocabulary (in spades).
  • Refactoring is at its best when you can count on the
    compiler to keep everything running fast. Several
    implementors are working on various ways to keep Perl 6
    code running as fast as possible, without forcing the
    programmer to forgo clean, well-factored designs to do
    so.
Haskell (et al.)
  • There’s more to Functional Programming than just having
    support for closures. Perl 6 is borrowing heavily from
    the powerful toolsets used every day in FP languages.
    From metaoperators to function signature pattern matching,
    Perl 6 is getting a big dose of higher-order concepts in
    the core.
Java
  • Java teaches mostly by counterexample. Yes, it’s true,
    good garbage collection is important, and Perl 5’s
    reference counting just didn’t cut it. But the biggest
    lesson to be learned from Java is that all these nice new
    features shouldn’t result in a horrendous programmer tax.
    Anything the programmer doesn’t want to be faced with
    right now should just get out of the way. That’s been a
    Perl tenet for some time, but ugly things like parameter
    unpacking (especially hundreds of copies of
    my $self = shift;) have gotten in the way. Many
    of those things are now fixed.
Perl 5
  • CPAN is all-important. In fact, it is probably the one
    thing other language designers are most jealous of from
    Perl 5. Perl 6 can use Perl 5 modules from CPAN directly
    (and Pugs has been able to do this for months, albeit with
    a few gotchas that Ponie should help with) while the
    whole mass is slowly migrated to Perl 6.
  • Perl 5 did a lot of things pretty well. Perl 6 doesn’t
    throw them away, but rather tweaks them to be just a
    little bit better.

It’s important that it’s not just the core language designers that are
learning and borrowing from these disparate languages; the implementers
are as well. Both groups are getting the benefit of the broadened
horizons these languages afford. Sometimes in #perl6
(irc.freenode.net) links to language homepages and papers on language
design and implementation are flying so fast it’s hard to just keep up
with the general gist of things.

And it’s not just reading. Perl 6 people are going to conferences for
other languages (such as ICFP),
presenting Pugs and Perl 6, sharing knowledge with other language
designers, and soaking up vast piles of information. It’s a beautiful
thing.

People have complained about how long Perl 6 is taking to arrive; I used
to grumble about that myself. Now that I watch things growing and changing
on a daily basis, I’m glad everyone is taking their time. There is so
much good stuff to assimilate, care must be taken to not end up with a
huge ugly mess. As when cooking with many ingredients, sometimes the
best thing is to let the pot simmer for a while, to let the ingredients
get to know each other, to mellow out and produce a better whole.

Of course, the benefits of learning completely different computer
languages go beyond just language design. Having new viewpoints on the
problems you face every day can be a great help, even if you don’t plan
to change the language you code in. Which is why I’m joining the crowd
and learning Forth, even though I expect Perl will be my day-to-day
language for years to come.

What’s your favorite “very different” language? What could Perl 6 learn
from it?

AddThis Social Bookmark Button

Related link: http://www.oreillynet.com/pub/a/sysadmin/2005/09/15/qpsmtpd.html

In a recent use Perl; discussion about Matt Sergeant’s recent ORN/Perl.com article about qpsmtpd, the pure-Perl SMTP server, Bart Lateur pointed out that one buried sentence serves as a great Perl success story:

As an example of the scalability of qpsmtpd, the apache.org mail servers currently process more than 2 million emails a day on their primary MX, rejecting more than 80 percent of it as junk — all thanks to the power and flexibility of qpsmtpd.

That’s, on average, 23 messages per second. Go qpsmtpd. Go Perl.

Do you /really/ need to write your next network daemon in C?

Jeremy Jones

AddThis Social Bookmark Button

Related link: http://www.python.org/2.4.2/

Here are the release notes for 2.4.2 final from the release notes page:

What’s New in Python 2.4.2 final?
Release date: 28-SEP-2005

Extension Modules

  • Patches #1298449 and #1298499: Add some missing checks for error returns in cStringIO.c.
  • Patch #1297028: fix segfault if call type on MultibyteCodec, MultibyteStreamReader, or
    MultibyteStreamWriter.

    Tests

  • Fixed failure in test_macfs on Mac OS X 10.4 (Tiger), which apparently doesn’t allow the creation time to be set later than the modification time. Fixed by changing the test data.

    Build

  • The Windows .msi files are now compressed using lzx:21. This produces a significantly smaller installer.

  • Downloads for 2.4.2 are here and details of 2.4 in general are here.

    Jeremy Jones

    AddThis Social Bookmark Button

    Related link: http://www.turbogears.org/

    About a week ago, I said a few preliminary, positive words about TurboGears before I had a chance to actually do anything with it. Well, I’ve written some code now and I’m ready to report on all the ugly details.

    I recently bought my wife a Canon EOS Digital Rebel. For various and irrelevant reasons, I created a simple little digital photo managment program for it with CherryPy and SQLObject. My little app seemed to work OK. Just like anything, it has some rough edges and some room for improvement. When Kevin Dangoor recently announced TurboGears, I decided to rebuild my little photo app using TurboGears.

    My nonGears version is just under 300 lines of pure Python code. No templates. And I must say, it’s not the prettiest coding I’ve done. No templates means that I’ve embedded HTML in my Python code. I know. That’s nasty. But I wrote it as a quick and dirty job. The Gears version turned out to be about 300 lines of Python and 225 lines of templates. This really is not a fair size comparison because I added a few niceties in the TG version that weren’t in the VCP (vanilla CherryPy) version.

    I started the project with the quickstart option to the turbogears-admin.py script. This did a nice job of creating the directories and files I would need. It separated out all the parts in a nice MVC fashion. The database model went into a model.py module. The controller went into a controllers.py module. And the view went into a templates folder. This structure answers a whole class of questions for a developer about where to put which files and what to name them. Structure is good.

    One thing that I had to get used to with TurboGears was writing code in the controller and then having to specify which template to “send” it to, then fleshing out the template. This is just an adjustment to an MVC structure. My original code didn’t have any of that; the HTML was inline. That made it easier to write initially, but a maintenance nightmare afterward. This logical separation made it really easy to re-use code (yes, I did re-use some code; I’m not talking abstract theory, here) and fix bugs while I was coding. Separation is good.

    Probably my biggest hurdle was SQLObject. I need to thoroughly read the documentation. I created relationships between some of the tables which aren’t working as I would expect. I’m sure it’s my problem, but I just didn’t invest the time in working through it until it worked.

    One of the really cool features of TurboGears is the turbogears-admin.py shell commmand. It opens a Python interpreter with the PYTHONPATH set exactly like it is for the running CherryPy process. This goes a long way in helping test code.

    While I was not able to pound out my photo management app in 20 minutes, like Kevin Dangoor in the demo video, I felt very productive. Nothing was laid out in a non-obvious, surprising way. And - get this - I was having fun writing my little app. Fun!

    I think TurboGears is an assembly of the right components. It answers a lot of the common questions developers will have in logical, well-thought-out ways. It is extremely easy to use. It has a growing community using and supporting it. I like what I see from technical, psychological, and sociological perspectives.

    OK, now for the ugly details. My UI design is horrendous. I think it’ll take more than TurboGears has to offer to help me make a decent looking website. I think it’ll take something closer to a miracle.

    Have you tried TurboGears? What are your thoughts?

    Christopher Diggins

    AddThis Social Bookmark Button

    I can’t scientifically say what makes code “good”, but my gut has a few things to say about it:

    1. good code reflects the problem it solves
    2. good code can be easily understood by programmers without experience in your language
    3. good code is generally short
    4. good code doesn’t require much thinking to understand
    5. good code has very little coupling
    6. good code is cohesive - definitions of functions and types required are not scattered throughout the software
    7. good code documents any requirements for proper usage
    8. good code makes just as much sense to you one year from now, as it does now

    All of these properties I feel could be summed up simply as: “good code is reusable”, and taken a step further: “really good code is so simple it can be reused by a trained seal.”.

    What do you feel are other properties of good code?

    Kevin Shockey

    AddThis Social Bookmark Button

    Today I’m witnessing the collision of my former self and who I have become. Today I’m at the Software Development Best Practices Conference and Exposition. When I was a software development manager for many years this was the one conference I was never able to attend (yes, I am bitter but that’s a whole other story). So I’m very excited and happy that I’m finally attending, even better I also get to share the SNAP Development Center story.

    Leading up to the conference, I started to perceive that the Software Development community (as defined by this conference)and the Open Source community were separate. I observed that there didn’t seem to be many open source related sessions nor open source related exhibitors. Now that I’ve been to a few sessions, I have confirmed that these communities are fairly apart from each other. This really surprises me. On the one hand, as I led an open source project for nearly the last two years, it is easy to believe that everyone sees the benefits and value of open source software. On the other hand, most of the sponsors and many of their participants here earn their living from proprietary software. So it should be no surprise why these communities are not converging. There is some overlap between them, but I just some how expected more of it.

    Two anecdotes from this morning illustrate how far apart these communities seem to be. First, one of the presenters was speaking on user interface design issues and habits when he excitedly shared that our browser was going to be coming with a tabbed interface. I was like, but, but, but, I’ve been using tabbed browsing for more than two years now. It then hit me (it took me a moment to switch my community viewpoint). He was speaking about Internet Explorer. I was completely shocked. Everyone I know uses Mozilla Firefox, so for me I implicitly thought that everyone did. It’s amazing how completely I have switched communities, and how that switch has changed my perception of what is normal.

    This has made me think something I never contemplated before. I wonder how many Internet users have never heard of Firefox? If they have heard of it, I wonder if they have tried to download and install it? Finally, if they did try Firefox, do they still continue to use Internet Explorer? These questions are really tough to even conceive of, if one is locked into the open source world view. As a software developer and Internet user, it is almost trivial to find, install and switch to Firefox. So why aren’t more people using Firefox?

    The second anecdote involves a discussion I had with a developer of a niche scientific software solutions. We were talking about C#, and he said he loved the language. However, he said that he would love it even more, but that he worried about people decompiling the intermediate language and gaining access to his source logic. I didn’t know what to say about that, except to mentally note that this was a great example of how far these two communities are apart from each other. Somehow, I believe that his perspective is now so foreign to me that I can no longer find a way to reconcile it with my new point of view. I also feel that perspective lock-in (from either community) is a risky situation, and that we should work together to minimize the adverse affects of the decisions we might make when stuck in either point of view.

    Can these two world views live in peace?

    Murugan Pal

    AddThis Social Bookmark Button

    The terminology “Software As A Service” (SaaS) is gaining momentum and is becoming widely understood.

    But, SaaS is used interchangeably and sometimes used to replace the definition of “Application Services Providers” (ASP). Many of you may know about ASPs and ISPs (Internet Service Providers). SalesForce is a good example of ASP. ASPs deliver application functionality (rather than software) as an outsourced service and charge on usage basis. ISPs provide internet service as an outsourced service. AOL is a good example of ISPs. For lack of better term we can call service providers who delivers software as a service as “Software Service Providers” (SSP).

    Unlike the existing definitions and differentiations between SaaS and ASPs, I think there is an important distinction between ASP and SaaS. In case of ASPs, the software is not shipped to the customers; the customers access the “required functionality” and use the functionality via a remote client i.e. the software execution happens in the ASPs’ end while the customers access the application. In case of SSPs, the software is shipped to (or downloaded by) the customers, deployed within customers’ premises (or their co-location) and gets executed within the customers’ environment. Anti Virus Software is a good example for SSPs, where subscriptions are charged for virus definition updates and not for the anti virus software itself. Moreover in ASP model when a service is stopped, the customer has to migrate their data to a different environment, where as in SSP model the customer can still run the software (along with their data) without any associated value-added services (like future updates).

    Here are 5 things you want to adopt if you want to be a SaaS provider:

    1. Initial activation cost as low as possible (better if it is free) to gain adoption
    2. The customer must be able to make use of the functionality (out of the box) right from the get go
    3. There must be incremental value-add (updates, patches, validated integrations) on an ongoing basis that are delivered seamlessly to customers and can be charged (like in free printers vs. paid cartridges)
    4. The incremental value-add must be thoroughly tested and should not break backward compatibility. Think of whether you will get antivirus updates if it breaks your existing applications
    5. The customer must be able to stop the subscription and still be operational (no vendor lock-in)

    SaaS blends best of both traditional software model (customer owns the software) as well as ASPs (rent or lease the service). Hence in my opinion, SaaS business models will be widely adopted and preferred by customers in future.

    If you are a customer, what will be your preference: ASP, SSP or Traditional Software Delivery Model? Please share your thoughts.

    Sid Steward

    AddThis Social Bookmark Button

    Related link: http://blogs.forrester.com/charleneli/2005/09/yahoo_launches_.html

    I am fascinated with the divergence between the Yahoo mail beta and the (admittedly older) Google mail beta. After only one week of Yahoo’s mail beta, it’s getting high praise. It sounds like Outlook-meets-AJAX, and people like it a lot. If you want to try Yahoo mail beta, here’s a short application.

    At first I thought: of course Google will fall in line. I am now fascinated with the idea that they won’t. Could you imagine Google copying Yahoo, who is copying Microsoft Outlook? Perhaps Google could roll out new Gmail skins, with one skin tailored after Outlook. That way they could spin their: “me too!” as a: “me first!” Anyhow, it’s a good idea.

    Email isn’t as cool as search, but here are some numbers that suggest its importance to the leading web brands (emphasis mine): MarketingSherpa.com says: “Only 84% of the US Internet-using population uses search engines on a regular basis. However, 92.5% use email.” and: “Google’s Gmail has only captured a tiny 2.5% slice of the personal email usership pie” And Charlene Li says: “31% of North American online households use Web-based email at least once a week, up from 27% a year ago.”

    As much as I love Google, I am also keenly sensitive to the bottom line: “what works?” Indeed, isn’t that why we all fell in love with Google to begin with? Its search simply works. Maybe they think we fell in love with the innovation? That would be so Web 1.0.

    * update *

    Here is a detailed review of Microsoft’s new AJAX-enabled Hotmail beta (code-named Kahuna).

    Who do you love? Why?

    Jono Bacon

    AddThis Social Bookmark Button

    You know, its fascinating watching people approach Open Source in so many different directions. Some people are engulfed by the ethical advantages, some by the technical prowess, and some because it is just interesting and strange. Irrespective of the basis for the attraction, it can also be fun to observe those who think they understand Open Source.

    There are very few people in the world who fully understand Open Source. Sure, you can understand it from a technical perspective, but the social threads that cascade through the thousands of sub-communities are intensely difficult to truly understand. Unravelling this social fabric requires a keen interest in people-watching; an art form in itself. The only way you can really understand the community is to be an active member of it. You need to hang out on IRC, subscribe to mailing lists, go to LUG meetings, run websites, hang around shops giving out Open Source CDs and generally badger people about why free software is a good thing. You don’t have to be a software developer to do this, but you do need to be a part of the community.

    Unfortunately, there are a lot of people out there who don’t really get it. These hapless individuals will typically guffaw their way into contributing, with every good intention, but their fundamental misunderstanding about the community will be their failing. They will expect that the Open Source way of doing things can mimic the commercial development culture, they will think that an Open Source project will attract a flock of developers at the drop of a hat, and they will also expect all good discussions to result in real working software as opposed to a This project has made no releases conclusion.

    Total idiot

    To illustrate such misunderstandings, I have a case study. This is a prime example of somebody who had great intentions, but just didn’t understand the community at the time. Unfortunately, this hapless fool was me.

    Back in 1999 I was 19 and about to go off to University. When I was 18, my brother got me into Linux and I was instantly wooed by it. Fascinated by the concept of distributed, collaborative community, I set up Linux UK; one of the first UK websites dedicated to Linux. I worked hard setting it up and promoting it, dedicating hours to it every night, and it was doing rather well. As time went on, I was looking for the next challenge and back then, KDE was rocking my world - I wanted to contribute. As a 19 year old gangly youth who had a reasonable reading knowledge of software development but not much of a practical-in-the-trenches knowledge, I figured I could just set up a team and they would come. Hey, Matthias Ettrich set up KDE and they came, Miguel de Icaza set up GNOME and they came, Linus Torvalds set up Linux and they came. I was certainly not expecting projects the size and esteem as those, but I figured it would be cool to run a software development team creating KDE software. What a clueless muppet I was…

    So, I loaded up my trusty Usenet client and fired off this rather embarrassing collection of witterings to comp.windows.x.kde. This post demonstrates a clear misunderstanding of Open Source software development, from somebody who was genuinely convinced he knew it and could contribute in a pragmatic way. The intentions were innocent and certainly not driven by ego, but the expectation that I could just form a development team and tell them what to do was ridiculous.

    One problem with my post back then is that I was laying out a list of requirements and expecting adherence from people who threw together code in their spare time for fun. Paragraphs such as “Programmers will need to have experience coding in C++ and preferably CORBA, and be able to code the Qt widget set. Experience at coding KDE applications is neccessery” are crazy. Aside from maybe spell-checking before I posted out such an important, ground shaking, everybody-must-see post that would attract an army of ‘yes pick me!’ contributors, it is is crazy to list job-like requirements when trying to attract people to a project.

    The major problem with the post was that I was somehow expecting that people could be driven by a project management approach to Open Source software development. I remember thinking back then that it seemed crazy that the only way you can develop software is by coding a chunk of code and then encouraging others to join in. Surely this will only result in overly-complex unusable software? To be fair, this concern had reasonable merit - some of the software back then was awful when it came to usability, and I think my rather pathetic efforts to cobble together a team were a subconscious effort to contribute to the usability of software. Back then I remember looking at some of the GUI desktop applications and identifying what seemed like clear usability flaws. Although the intention was reasonable, my solution and subsequent cringe-worthy post demonstrated a mis-understanding of Open Source development.

    The major lesson to learn from this post is the separation between what is theoretically possible and what is actually possible. Over the years I have seen so many people approach Open Source in a similar way - they think of something that could theoretically work, but in reality, the culture and climate of the community means that it just won’t happen. When someone typically identifies ‘theoretical possibility’, this usually refers to something that is possible without any scientific, legal or financial restrictions. Running an Open Source development team is certainly not subject to these constraints, but it is subject to the hidden unwritten constraints of the community.

    Hindsight is always 20/20

    Since those days, I have made Open Source my ambition and my career and I have spent the last seven years exhaustively working to contribute to Open Source in different ways. I have been fortunate enough to be around great people who have contributed to my own development and understanding of the community and I am now confident enough to say that I believe I know the community and its constraints fairly well. Although it makes me cringe when I read that awful post, that post has itself been a useful learning curve in understanding the nuances of this social fabric that brings people together in the Open Source community.

    I certainly don’t profess to know everything about Open Source and its community, and I never will, but I am utterly convinced that the only way to understand the community is to become a part of it and build up a body of knowledge to compare which projects and ambitions work and which don’t. When you can identify the hits from the misses, you can identify patterns in structure, and which factors made which effort a success. Aside from anything, it is always important to step back and identify where you missed the point, and I hope this rather embarrassing little tale will help to clarify some aspects of the community for others.

    What do you think? Would you have joined my super elite team of KDE developers? Do you have any similar experiences/thoughts? Go on…share them with us…

    AddThis Social Bookmark Button

    Related link: http://www.news4neighbors.net/article.pl?sid=05/09/23/1538200&mode=nested&tid=1

    Portland-area hacker Eric Wilhelm recently received a generous $10,000 grant from UK-based Xara to continue to develop a converter between multiple vector graphics formats. Eric’s passionate about this and has worked on it anyway, but major credits to Xara for recognizing and promoting the idea that connectivity and interoperability drives competition and invention. News4Neighbors has more information.

    Jeremy Jones

    AddThis Social Bookmark Button

    Related link: http://www.gotdotnet.com/workspaces/news/newsitem.aspx?id=ad7acff7-ab1e-4bcb-99c…

    From the release page:

    We have just released IronPython 0.9.2. In addition to focusing on the CPython regression test suite
    and fixing bugs, we also spent time prepairing IronPython for PDC 2005 conference where Jim spent the
    whole of the last week. There were many changes in IronPython codebase, mostly inspired by getting
    the regression tests running and adding CPython 2.4 features.

    Given their focus and the bugs they’ve been fixing, it looks like they are getting ever closer to an environment which is (mostly) compatible with CPython.

    It also looks like running IronPython under mono on a non-MS OS is becoming less painful. I was actually able to run the IronPythonConsole (which is just an IronPython interpreter shell) under mono 1.1.9.1 on Linux (Ubuntu Hoary specifically). This isn’t a huge deal, but I was further able to compile a simple C# module with mono 1.1.9.1, import it using IronPython 0.9.2, instantiate an object from it, and then call a method on the object. I have had some issues with only certain versions of IronPython being able to do that with certain versions of mono. I’m hopeful that what we’re seeing is progress.

    If/when IronPython becomes 100% CPython compatible and 100% mono runnable, would you use it? Why or why not?

    Sid Steward

    AddThis Social Bookmark Button

    Related link: http://www.bbc.co.uk/imp/

    As anticipated by BBC and Slashdot, and covered in the 9/21 WJS (page A15), the BBC will begin a three month trial of their Internet television system this month. They hope to then roll it out next year in the UK. Unlike their current Online Radio Service, their online television service will be available only in the UK.

    Its DRM is provided by Microsoft, its geolocation is provided by Quova, and its P2P software was developed by Kontiki. The client software, iMP (integrated Media Player), appears to be a Windows-only program.

    The BBC hopes its iMP software will become the iTunes of online television. However, the service currently promises to deactivate downloaded programs after seven days, making it more restrictive than a TiVo. Still, it’s a start.

    Pioneering the field, the BBC could end up licensing their internet television technology overseas.

    Part of the iMP trial? How’s it going?

    AddThis Social Bookmark Button

    Related link: http://www.prnewswire.com/cgi-bin/stories.pl?ACCT=104&STORY=/www/story/09-21-200…

    Citizens Against Government Waste released a press release today criticizing the Massachusetts plan for migrating to open document formats. There are two main arguments. One is that the migration will incur conversion and training costs. That part is likely true — no migration is ever completely free.

    I don’t understand the second argument. CAGW president Tom Schatz said, “It is bad procurement policy for any state to unilaterally lock itself into one set of technologies.”

    That was my argument to the Oregon Legislature two years ago supporting a move to open standards! Any vendor, proprietary or free, has the opportunity to support open formats in its products — even Microsoft.

    It’s possible that Schatz means that migrating unilaterally to open document formats may be a bad short-term decision if the software that supports those formats does not perform the job as well as the alternatives. However, I don’t like that kind of short-term thinking, especially in the government. It’s more important to me to provide open and unfettered access to documents in the long term than to stick with (perhaps better) proprietary software in the short term, especially because proprietary document formats make it more difficult to migrate to open formats in the future.

    In my mind, that’s the real waste.

    I also wonder about the rest of this press release that criticizes the licensing model of software instead of the real issue — openness of document formats. Hmm.

    Is there a nuance here that I’m not seeing, or is this just a silly criticism from CAGW?

    Jeremy Jones

    AddThis Social Bookmark Button

    Related link: http://www.turbogears.org/

    First of all, let me say that I’ve gotten past the cool demo video and have downloaded TurboGears and am beginning to tinker with it. I have a really small project I’m converting from vanilla CherryPy and SQLObject to TurboGears. I’ll report later on how that goes. Right now, I’m digging into the Kid documentation.

    I had a couple of people point out projects similar to TurboGears in a recent blog entry. The two projects they pointed out were Subway and Django. I’ve heard some buzz about these and have even gone to their websites, but haven’t been compelled enough to download them and give them a spin. But I was compelled enough to give TurboGears a spin. Why? I watched the TurboGears video. Man, that sounds so shallow, but it’s the truth. I watched the TurboGears video and was thoroughly impressed.

    With Django and Subway, I glanced through the documentation, what they said they could do, thought, “OK - that’s nice”, and just kept right on surfing. I’m not saying that Django or Subway are in any way inferior to TurboGears. They may be vastly superior. But there wasn’t enough in the documentation to capture me and make me interested enough in the projects to download and give them a try. That definitely says more about me than Django or Subway.

    I think what TurboGears has done with its marketing is going to get people excited about it, gain it market share, and will help drive its credibility. Credibility? Yes, credibility. I’m not saying that it makes it any better, but when people see with their own eyes how someone can create a wiki in 20 minutes, it will make them believe that it is a capable web framework. It will make them believe that it’s easy to use. It will make them believe that they can make a website with it with less work than an alternative.

    I know, all this is mostly psychological and has nothing to do with the goodness of the project. That’s why I feel a little dirty even saying anything about it. But good marketing can be the difference between a project being widely used and a project dwindling into obscurity.

    What place should marketing have in open source projects? Can good marketing really make or break a project?

    Sid Steward

    AddThis Social Bookmark Button

    Related link: http://codinginparadise.org/weblog/2005/08/ajax-creating-huge-bookmarklets.html

    From Brad Neuberg:

    “I’ve put together a way to have huge, arbitrarily sized bookmarklets, where most of the code resides outside of the bookmarklet link. I’ll explain how this works in this mini-tutorial.

    ” … The essential idea is that we dynamically insert a new script element into the DOM through our bookmarklet. …”

    “This code has been tested in IE 6+ and Firefox.”

    Cool.

    AddThis Social Bookmark Button

    Related link: http://www.jamesshore.com/Blog/Five-Design-Skills.html

    I’ve often wished that there were some field of higher education between the theoretical computer science and the practical IT/IS degree programs for people interested in careers in software development. Both perspectives are valuable, but I see the purpose of undergraduate education to teach you how to learn and to do research and to organize and express your thoughts clearly. If it’s just vocational training, you might as well join a vocational training program at the cost of far less time and money.

    I do regret not studying more mathematics, but everything else I know about software I learned outside of the classroom. When I see that my naive data structure isn’t working out, I can always look up an algorithm for a heap or a binary tree (and I always have to look up algorithms for dealing with graphs), but when my problem is more philosophy than fact I have to deal with my experience.

    Imagine how far ahead we would be toward writing high-quality, effective, and maintainable software if we could count on new developers already knowing how to read, analyze, understand, and improve code. As Jim says, they may be a little slow and will probably need a little help, but even just knowing that these skills exist and are valuable and necessary could be a huge improvement.

    Perhaps free software would be more effective if our projects actively encouraged this kind of review and maintenance — not just with words, but with actions as well. Of course, software development in general has to grow up to acknowledge maintenance as not only the largest part of the software lifecycle but the most important and, by far, the most valuable.

    What do you wish they had taught you in school?

    Jeremy Jones

    AddThis Social Bookmark Button

    Related link: http://www.cherrypy.org/

    I’ve tinkered with CherryPy a bit in the past, from 0.7 on up. With the recent announcement of TurboGears, I’ve had reason to give CP some fresh attention. This is an easy to use web framework which, even by itself (meaning without TurboGears), allows you to put together a web site in little time. This project has done well standing on its own and has gained momentum and appears to be gaining market share in the Python web frameworks arena.

    New features for CherryPy are listed here. One of the new features is a “session authenticate filter”. Somewhere between 0.7 and 2.(something), the builtin support for a single session authentication mechanism was stripped out (although there were various recipes for authentication on the CP wiki). I really hope that has found its way back in for good.

    How do you think CherryPy compares to other Python Web Frameworks?

    Harold Davis

    AddThis Social Bookmark Button

    Related link: http://www.google.com/search?&q=failure

    If you don’t know the term, here’s a definition of google bomb:

    Google bomb: to hyperlink a term to a website in order to raise the linked site’s ranking in a search return result set on Google.

    I’ve intentionally written an opaque (but accurate) definition of Google bombing. It’s easy to understand Google bombing in practice.

    The most notorious current example of Google bombing - in fact, of Google bombs at war - relates to a search for the term failure. President George W. Bush’s official White House biography comes up first, although film maker Michael Moore’s official site is a close second. These sites have been Google bombed and connected to the word failure in web pages.

    The Google PageRank algorithm encourages this kind of “voting” by webmasters - both a strength and weakness of the methodology. (Click here for more of my take on the PageRank algorithm.)

    I’ve already voted twice in this piece for George W. Bush as the failure of the two, and now let me stack the votes some more: failure, failure, failure!

    Any other Google bomb wars we should know about?

    Jonathan Bruce

    AddThis Social Bookmark Button

    Related link: http://www.datadirect.com/products/xquery/index.ssp

    Jonathan Robie, the XQuery Language Program Manager at DataDirect, Jonathan Robie has some important news over on his blog.

    Ming Chow

    AddThis Social Bookmark Button

    I love collgiate sports, especially Division 1 football and hockey. One aspect I follow in college sports is recruiting. Now if I had to go out and “sell” Computer Science to the many college students undecided about their major, especially those who are scientifically and mathematically inclined, I have five recruiting pitches:

    • Computer Science is not just programming - The popular belief is that Computer Science is all about programming, and it is so not true. There are many problems that make up the field. How can you make a computer think (e.g. recognize speech)? How do you design an interface for a product that suits the need of a happy medium? How do you ensure users of their privacy and security when performing banking and commercial transactions online? How do you make realistic and low-cost terrains for computer games? Programming is an important component, but documentation and design are equally critical.

    Which leads to my next pitch…

    • You WILL learn how to think - Do you know why Computer Science and Mathematics are so intertwined? Both fields deal with abstractions, the high-level information, which you can then apply to build concrete objects. A professor once told me: “The true point of college is to teach you to learn how to think, and not to be an apprentice of one subject.” If you can think, then you can solve and dig out of a lot of problems in life. You can also delve into other areas of specialty. Especially in Computer Science, you will learn to solve many problems, and perhaps walk out a well-oiled machine.

    Which leads to my next pitch…

    • You will have tremendous opportunities to delve into other fields of study - Computing is critical in all areas of studies, from the humanities to the sciences. Projects range from constructing digital libraries, analyzing complex economical datasets, developing a system to manage industrial processes (probably involving more than one field of study), and building robots. Nowadays, it is very common, if not required, for computer scientists to delve into other fields including Physics, Economics, Psychology, Biology, and Classics.
    • The jobs, and the money, are still there - Of course, one of the biggest reasons for the sharp decline in Computer Science majors in the last few years is the job outlook for CS graduates. And news of IT jobs being outsourced to India sure doesn’t help. Sure the Internet bubble burst, but that doesn’t mean it is the end of Computer Science. Hey, the media say a lot of thing. Again, there are tremendous CS opportunities in fields such as the pharmaceuticals, education, security (yes, computer security is still abysmal), healthcare, and the list goes on. The fact to the matter is, there is always room for good developers and good IT folks. In fact, the number of good developers and IT folks is shrinking in this country, with a growing number of problems to solve –old and new.

    Which leads to my last point…

    • If you are in the United States, this country needs you - The sharp decline in Computer Science majors, especially among Americans, it is no joke. Not just in Computer Science, but also in Mathematics, Chemistry, and Engineering. Students from countries such as China, Japan, India, and Russia have embraced the fields. Add it all up, and what do we get –this country is starting to fall way behind the rest of the world in math and science. That is no way to compete with the rest of the world in the short and long-run, and as Coach Lee Corso says, that deserves a major-league YO!

    There are still many problems to solve, from even the most basic computational tasks, to grand-challenge problems. Computer Science is required in all of the problems. A degree in the field will provide you not only a rigorous background in math and science, but also the problem solving abilities to get though anything in life.

    P.S. Major kudos to IBM for encouraging its employees to help fill in the math and science teaching voids around the country.

    Any other recruiting pitches?

    AddThis Social Bookmark Button

    Related link: http://forgeftp.novell.com/exam/documentation/html/index.html

    Via zentara on Perl Monks, Dirk van der Walt has just revised his Gtk2-Perl study guide. While Perl’s arguably more popular for data munging, server-side coding, and system administration, you can make useful and attractive GUIs with it. It’s always nice to see better documentation and tutorials, too. (Now someone write a nice graphical test runner around Test::Harness::Straps…)

    Jonathan Bruce

    AddThis Social Bookmark Button

    Related link: http://in.sys-con.com/read/128127.htm

    Sys-Con ran an article on September 16th, by Murugan Pal, CTO of SpikeSource.com

    Strengthening Open Source’s Weakest Link: Software Testing
    — Pop quiz: If one open source user tests 30 percent of an application, and another tests 20 percent, how much of the application has been tested? The answer is probably closer to 30 percent than 50 percent, since both users probably focused on common functions like start-up, shutdown, and data access.

    Eric Raymond said, “with enough eyeballs, all bugs are shallow.” I have to ask, what if these eyeballs are all focused on the same thing.

    I agree that Open Source software enjoys a development time advantage in terms of speed and product evolutions. But as in many software development projects, the emphasis on quality and rigorous testing on plethora of platforms, compile targets, software stack and configurations is somehow less sexy to developers who are devoting their free time to an open source project. I think the founders of SpikeSource have correctly identified where the open source model falters that is when it cross the chasm and reaches real world deployment scenarios.

    pen Source projects span a wealth of software applications, but few must deal with a greater set of configuration scenarios than true component-based software, such as database drivers. In this case, the combinations of operating systems, databases, and database versions, and other deployment variables presents a testing scenario of incredible complexity. So what do you look for in components that you are going to bet your applications on? Quality, a track record and a set reliability credentials that is second to none. Take JDBC, ODBC and .NET driver components and ultimately XQuery components for example. Virtually all business software relies heavily on a relational data store as its primary data storage and persistence mechanism. Your applications data will ultimately be channeled to and from your database by your chosen driver. Consider the concerns that Murgan Pal raises – open source components have yet to fully adopt the model or participation in terms of an integrated testing model. That is an imbalance, although nascent stages of being addressed that deserves some serious consideration before using an open source driver in your application, particularly if you are building a critical system.

    Perhaps over time, open source database driver components will reach quality bar that will match the demands of critical business systems. Until this time, the industry has already done the calculation and chosen a route that delivers best of class drivers, with an organization that has the strongest motivation for delivering the best database components available…

    Jeremy Jones

    AddThis Social Bookmark Button

    Related link: http://www.turbogears.org/

    The title of this blog entry isn’t intended to berate TurboGears or make it sound like it’s created with or intended for shoddy workmanship. The title’s intent was to point out the arena TurboGears is competing. It is a megaframework designed to facilitate the quick and easy creation of a web site (or web application). It is not a new web framework in itself, but rather a combination of the following projects:

  • CherryPy web framework
  • SQLObject ORM
  • Kid templating system
  • MochiKit javascript library
  • I haven’t downloaded TurboGears yet, but I did watch their really well done “marketing” video that walks through creating a simple wiki in about 20 minutes. I was really impressed by the ease of creating and customizing a web site. I was further impressed by the simplicity of doing so.

    I’m still a little skeptical, however, of what appear to be “me, too” Ruby on Rails projects. I guess maybe it’s a knee-jerk reaction against the massive amount of publicity they’ve received and wondering if they really are as good as they claim to be or if it’s just hype from “the analysts” and the masses. The thing that I”m hopeful of with TurboGears, though, is that at least two of the major components, CherryPy and SQLObject, are mature, general purpose projects with lives of their own which will live on indefinitely. Combining such technologies is a recipe for longevity.

    I’m really interested, in fact, excited, to see where this project goes and how it (and Rails) impact the world of web development.

    What’s your take on the Railsish technologies popping up? Is it good for the world of web development? Will it scale well for larger projects and development teams (not necessarily under heavy HTTP load)?

    Jono Bacon

    AddThis Social Bookmark Button

    As a consultant, consistency and trends are essential signifying elements in determining where software, hardware and IT is heading. In some cases this can be predictable, such as Linux, but it can also be a total surprise right out of the blue with success piggybacking onto an application from nowhere, such as with Firefox and Moodle. Either way, it is important that the consultant identifies how the application is becoming used, and importantly for Open Source tools, the long-term vitality of the project. Sure it may be cool now, but will it be around next year?

    One of the most critical Open Source desktop applications is OpenOffice.org. Back in the day when I started taking a keen interest in Linux on the desktop, an office suite was always the problem. There were efforts going into KOffice, but about the only mature office suite that anyone could use was Applixware. There was one problem, Applixware sucked. It looked ugly, involved your wallet and felt quite clunky. Another option was StarOffice, an office suite barely known, despite its early roots, and a behemoth of an application which was so bloated it actually included its own desktop. Back then there simply was no Open Source office suite that was mature enough to use, but that was about to change.

    As time moved on and StarOffice creator StarDivision were bought by Sun, the announcement was made that OpenOffice.org would become the Open Source licensed version of StarOffice. This was critically important, and as important as Netscape opening up their browser (which later became Firefox). This move ensured that the strength of the GPL could unite a community of contributors to dust off the code, fix it up and make something happen. The potential for an Open Source office suite, a critical component for an Open Source desktop, was here.

    Although the theory held and does hold water, the reality of maintaining an office suite is the sheer size of the project. With around 10 millions of lines of code, hundreds of dialog boxes, thousands of words and bags and bags of features, OpenOffice.org is one hell of a project. Aside from the massive codebase, the project includes entire copies of dependent software such as glib and Python. This huge statically linked application was developed in such a way that it would run on anything, a far cry from the Linux world where every application requires a tree of dependencies automatically handled by the distribution packaging system.

    Finding the Developers

    As work opened on OpenOffice.org, many companies such as Red Hat, Novell and Sun have contributed developers to spit and shine OpenOffice.org and get it into a reasonable state. With 1 RedHat, 80 Sun, and 8 Novell hackers, the number of paid developers greatly outweighs the less than 10 active external coders involved in the project. If you then factor in the need for artists, quality assurance, documentation, translations, system administration and more, the project needs a huge development backbone to keep going.

    One of the problem that faces OpenOffice.org is a lack of hands on deck. It has already been well reported that OpenOffice.org 2.0 has been delayed due to a lack of developers. Despite the fact that 100 active developers sounds like a lot, that is approximately 100,000 lines per developer; a burden that few developers are comfortable with handling, and a burden that requires significant resources just to understand the codebase, let alone hack on it. The problem is of course that the code is so large and monolithic and despite prominent efforts to rip away much of the fat, the challenge is still great.

    The issue that concerns me is the sheer dependence on OpenOffice.org and the responsibility for the suite to help the push to Open Source. With huge roll outs occurring across the world, and OpenOffice.org’s reputation as a truly core piece of Open Source desktop technology, the software is not just important, but critical. If you then factor in Microsoft’s efforts with their up and coming version of Microsoft Office, the importance for OpenOffice.org to succeed is essential. I would go so far as to say that a feature complete, high performing and integrated OpenOffice.org is key to the success of the Linux desktop. In many ways, the efforts with GNOME and KDE pale in importance to the work on OpenOffice.org. People will not move to the Linux desktop if there are not the applications, and OpenOffice.org is essential. GNOME and KDE offer the icing on the cake for many people making the decision; “Wow, OpenOffice.org looks awesome, and Linux seems really stable, and GNOME/KDE is really simple and powerful. Where do I sign up?”.

    This importance is key, and I get concerned when I hear that there is a lack of hands. So, what can we all do? How can we help? How can we make OpenOffice.org into the office suite that is not only capable, but has the strong vitality that I mentioned earlier?

    Anyone can contribute

    I had a chat with Michael Meeks about how people can help. I have known Michael for a while and those who are familiar with his work will be well aware of his phenomenal hacking abilities. If anyone should wear a cape and live in the hackcave it is Michael. As someone who is heavily involved with OpenOffice.org, he is well aware of the kind of contributions that people can make to OpenOffice.org. So how do you help? “Well, grok bugzilla / your personal collection of tricky MS files, find some scab and pick at it” he says. He continues, “the first thing to do is to download the latest ooo-build, and build it yourself, then go over the My First Hack page. Be sure to pop onto IRC and ask for help.

    A hugely important point to stress is that non-coders can help out with OpenOffice.org too. If you don’t have an affinity for code but still want to contribute, head over to the contributions page and read up on the different ways in which you can help. The page gives details about helping with writing, marketing, helping users, graphics/art, translations and quality assurance. A successful application suite is certainly not only about development and each of these other roles is critically important. This can be identified when talking to people about moving to OpenOffice.org - they are often attracted by the range of translations, documentation, support forums and more. It can often be easy to fall into the trap of thinking that a non-coding contribution doesn’t count, but it really does.

    Moving to the six-month cycle

    The development of an Open Source application is heavily reliant on a solid release process, good bug reporting systems, and essentially, plenty of useful feedback from the userbase. This feedback can not only help fix bugs, but also outline usability imperfections, feature requests and more.

    In recent years, a number of projects have moved over to six-month release cycles. With a shortened cycle such as this, the relationship between developers and user feedback is better aligned. Not only do bugs get fixed and released quicker, but the application remains more present in the minds of users with important new features being released regularly. This process is essential in providing more mindshare when competing with a product such as Microsoft Office that has a much longer release schedule.

    The problem is that OpenOffice.org has a painfully slow release process. Releasing upward of 16 months, the release process feels slow and sluggish and from a user perspective OpenOffice.org feels like a slow maturing and lethargic application. Michael outlined why a six monthly cycle is so important:

    • Currently we do a tonne of bug-fixing at the end of the release cycle - if this is 9 - 18 months after the feature was written it’s far harder to fix the bugs well.
    • Features only really get tested when people use them - QA is all very well, but really, people have to use code to find the sticky bugs. Shortening the feedback cycle really helps get things right fast.
    • Predictable releases encourage co-operation - currently there is no predictable release cycle, hence the incentives for working with Sun are lowered - working to get a fix into the ‘up-stream’ build whence it may be released after one’s own distro deadline is not attractive.
    • Community / Excitement - it’s silly to have almost finished features festering for months in CVS without being released such as native widget integration which was completed over a year ago and is still not released.

    With such compelling reasons for a shortened release cycle, and factors that are critical to the future growth of the increasingly important office suite, why is it not happening? Discussion of a shorter release cycle has been rumbling on for quite some time now. Although there is increasing understanding further up-stream, Michael believes it is mostly management who need to understand the importance of a shorter cycle. StarDivision are really unusual by Linux standards and Michael outlines why:

    • They ship a boxed product - that has to work on (n) crazy/whacky linux distributions, lots of them quite old with many missing core pieces.
    • Their mind-set is based around a new boxed-product every 18 months - if there are more frequent releases, the channel doesn’t like it (although this is interestingly not the case for eg. SUSE)
    • Some (internal) changes to team deployment / planning are necessary to get 6 monthly releases to work - not everyone will be working to the same deadline and there is potential for problems/conflict. The changes need to be managed sensibly.

    Any kind of structural change in release management is going to be a tough balance for a team, but sometimes the difficult decisions need to be made. With so many developers out there asking for a shorter release cycle, and with the success of projects such as Ubuntu and GNOME who have six-monthly cycles, the direction seems sensible. There is certain to be an argument that this cannot happen with a project the size of OpenOffice.org, but the current situation cannot happen either. Maybe the best solution is to provide a phased shortening of the release process. First, make it an annual release. Create a solid set of milestone deadlines for feature freeze, string freeze etc, and ensure that a release manager drives the community in the right direction to work around the timescale. This way huge changes can be dropped in a decent timescale, but there is also a clear roadmap for system integrators, distributors and users. I am absolutely positive that this will improve OpenOffice.org substantially. If the process scales to a yearly release cycle well, it could then be shortened to eight months or possibly six months.

    Make it happen

    OpenOffice.org is critically important. With such compelling features, attractive licensing, cross platform support, and such simple installation, OpenOffice.org plays a key role in not only moving businesses to Open Source, but also in propagating the important OpenDocument format. This is already happening in earnest with large government migrations such as Massachusetts. As governments, schools and businesses move over to OpenOffice.org due to not only a better software and license offering but the eventual adoption of OpenDocument, I suspect we will see a steady growth in adoption.

    To make this happen, a shorter release cycle and a larger development team are essential. A great comparison to the potential for adoption is Firefox. With the impressive efforts from the SpreadFirefox project and a regularly released high quality project, we have seen huge migrations to the browser. These migrations have not only been secured due to the cross platform nature of Firefox, but also its unique features and its sheer ease of installation and compatibility. OpenOffice.org also incorporates these merits, and OpenOffice.org also came from a wad of code that was Open Sourced. Firefox offers possibly the finest example of how an Open Source application should be maintained, supported and marketed. Indeed, the SpreadOpenOffice.org site has been set up to provide a similar level of marketing push.

    To conclude, OpenOffice.org inspires the same potential that has electrified other software blessed by the Open Source methodology. The opportunity for a community of enthusiastic contributors to come together and potentially change the way software is used is there. OpenOffice.org offers so much potential for those who want move away from Microsoft Office. I have dealt with businesses, schools and charities who have saved huge amounts of money by moving to OpenOffice.org and engaged in a more open and manageable office suite to boot. Money originally destined for licenses can be instead pushed into more human, tangible areas such as staff, care, equipment and events.

    If you are reading this and feel inspired to contribute, I really encourage you to. Everyone can do something, even if it is just filing a bug report. The smallest contribution can net the greatest outcome when more and more people get involved. As OpenOffice.org moves towards a shorter release cycle and more people get involved, I am positive that OpenOffice.org can compete with anything that Microsoft can throw at it, but the only way it can happen is for the collaborative Open Source process to be successful, and these means that we should all help where we can.

    I would love to hear from those of you who have contributed to OpenOffice.org in some way. What did you do? How did you get involved? How is the community and support? Use the comments box below to let readers know how you got involved and what you do/did.

    What do you think? What are your experiences with OpenOffice.org and contributions? Scribe them here…

    Jeremy Jones

    AddThis Social Bookmark Button

    The idea is to look at frequency of repetition of groups of lines in a text
    file. This is a script that I slapped together to do just that:

    #!/usr/bin/env python
    '''Silly log parsing script
    
    usage:
        silly_log_parser.py [options] [logfilename]
        If logfilename is not specified, this script reads the log from stdin.
    
    options:
        -s numsplits - defaults to 3
            numsplits is the number of whitespace separated "columns" this will
            split off the front of each line of the log file
        -m max_chain - defaults to 2
        -t - disable displaying summary stats
        -l - disable displaying line stats
        -h - print this help message
    '''
    
    import sys
    import getopt
    
    num_splits = 3
    max_chain = 3
    display_summary_stats = True
    display_line_stats = True
    
    def usage():
        print __doc__
    
    try:
        opts, args = getopt.getopt(sys.argv[1:], "s:m:tlh")
    except getopt.GetoptError:
        usage()
        sys.exit(2)
    
    for o, a in opts:
        #print o, a
        if o == "-h":
            usage()
            sys.exit()
        if o == "-s":
            num_splits = int(a)
        if o == "-m":
            max_chain = int(a) + 1
        if o == "-t":
            display_summary_stats = False
        if o == "-l":
            display_line_stats = False
    
    try:
        infile = open(args[0], "r")
        raw_lines = infile.readlines()
    except IndexError:
        raw_lines = sys.stdin.readlines()
    except IOError:
        print "File does not exist"
        usage()
        sys.exit()
    
    lines = [l.split(None, num_splits)[num_splits] for l in [ll.strip() for ll in raw_lines] if not l == ""]
    
    chain_dict = {}
    
    for i in range(len(lines)):
        try:
            for j in range(1, max_chain):
                chain_tuple = tuple(lines[i:i+j])
                if (i + j) > len(lines):
                    continue
                chain_dict[chain_tuple] = chain_dict.setdefault(chain_tuple, 0) + 1
        except IndexError:
            continue
    
    #print chain_dict
    
    if display_line_stats:
        for i in range(len(lines)):
            #display line stats
            chain_list = []
            try:
                try:
                    for j in range(1, max_chain):
                        chain_tuple = tuple(lines[i:i+j])
                        if (i + j) > len(lines):
                            continue
                        #chain_list += [(chain_dict[chain_tuple], chain_tuple)]
                        chain_list += [chain_dict[chain_tuple]]
                    print "%s-> %s" % (chain_list, lines[i])
                except IndexError:
                    print "%s-> %s" % (chain_list, lines[i])
                    continue
            except KeyboardInterrupt:
                sys.exit()
            except IOError:
                sys.exit()
            except OSError:
                sys.exit()
    
    if display_summary_stats:
        chain_stats = [((len(c) -1) * (chain_dict[c] - 1), c) for c in chain_dict]
        chain_stats.sort()
        chain_stats.reverse()
    
        try:
            #display summary stats
            for c in chain_stats:
                print "*" * 40
                print chain_dict[c[1]]
                print "-" * 40
                print "n".join(c[1])
                print "*" * 40
        except KeyboardInterrupt:
            sys.exit()
        except IOError:
            sys.exit()
        except OSError:
            sys.exit()



    Basically, it takes in a text file, splits off the date, iterates through the
    lines in the file, groups together the current line with the next line, then
    the next two lines, up to the next “n” lines, and counts how many times those
    groups of lines appear in the file. I call this a quasi-Markov analysis,
    because it reminds me of a couple of the Markov chain programs that I’ve
    written to piece together words and groups of words from a text file. It will
    then, depending on command line arguments, either iterate through the lines in
    the file again and print out each line with a sequence group list in front of
    it or it will print out the most occurring groups of lines, sorted in
    descending order.

    The “most occurring groups of lines” sorting algorithm is a product of the
    length of the sequence (the number of sequentially re-occurring lines) minus
    one and the number of occurrences of the group of lines minus one. I figured
    that the larger a sequence was and the more times it appeared, the more
    interesting it may prove to be. I also figured that single lines were probably
    not so interesting. But maybe they are. Maybe I’ll change it so that the
    algorithm is a product of the length of the sequence and the number of
    occurrences of the group of lines minus one. I think I will still leave the
    number of occurrences minus one; I’m not too interested in sequences that only
    show up once.

    I’m still not really sure how useful this will prove and I do have just a
    little more work to do with it. Another feature I’m going to add is the
    ability to specify a regex and have it print summaries on only blocks which
    have a line that matches that regex. This could prove useful to see the block
    of re-occurring lines surrounding, for example, error messages.

    This is an example of the beauty of Python. This code isn’t particularly
    beautiful. Maybe it will be more so when I clean it up. What’s beautiful is
    that I was able to throw this together in no time. I had an idea, started
    coding, and with very little effort and in very little time, I had a working
    piece of code. And, it was fun!

    Comments, suggestions, criticisms of the code? Any examples of being able to
    slap together a piece of Python code quickly that saved you time?

    Ming Chow

    AddThis Social Bookmark Button

    Related link: http://www.eecs.tufts.edu/~mchow/mbta_gmap/

    The traditional map:

    image

    And now the map via satellite (hybrid):

    image

    EDIT, 9/20/2005: The Red and Green Lines are now separated correctly. Two different ends to the Red Line and four different ends to the Green Line.

    What did I use to make this?

    So what other cool things that I can do with this?

    Jeremy Jones

    AddThis Social Bookmark Button

    I have been a vim user for the last 6 years. I’ve tried emacs. I used UltraEdit when I was doing more on Windows. I’ve tried JEdit. I’ve even tried Eclipse before. But I decided to give it another spin. The last time I used Eclipse, I found it fat, slow, non-intuitive (and that coming from a vim user), and it didn’t seem to buy me anything I couldn’t already do in vim.

    I’ve got PyDev and a Subversion plugin installed and I like it a lot better than I thought I would. Autoindenting seems to work reasonably well. It shows a nifty outline of my code, highlighting class and method definitions and imports. It has a folding mechanism which folds at the class and method level by default. I don’t know if that is configurable. It appears to have some autocompletion, but doesn’t seem to complete on imported modules. It also has built-in debugging support, which I haven’t tried yet.

    Surprisingly, I don’t have anything negative to say about PyDev. Eclipse is a totally different experience for me, so that makes using it a little painful. I’ll have to keep fidding with it and see if I could make the switch. I would definitely miss the vim keybindings. I found a plugin once that had limited vi style keybindings, but it didn’t support some of the features of vim I use ever day.

    What editor/IDE do you use to work with your Python modules?

    Ming Chow

    AddThis Social Bookmark Button

    Related link: http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/09/gao-tim-oreilly-lett…

    I am glad that our own Tim O’Reilly wrote an open letter to Congressman Wu on the outrageousness known as college textbooks, and the value of SafariU.

    I was one of millions of college students that suffered through the ordeal of buying textbooks. I recall during my first two years at Tufts, I spent over $500.00 a semester on textbooks –all new; I don’t like secondhand books. Yeah, I also bought few grossly “bundled” textbook packages (software with the big and heavy book) that were also grossly expensive. In my Junior year, I slowly realized how worthless it was to buy most textbooks, and what a heckuva business it was. The instructors that I had, especially in Computer Science departments, hardly ever followed or used textbooks, maybe except for a few homework assignments.

    I cut my total textbook spending in my Senior year (in all) to under $500.

    I didn’t spend a dime on textbooks during my graduate studies. I knew I would live fine, and do well, without them. I was also not going to make the same mistake I made during my undergraduate studies –buying textbooks.

    Today, I still have countless, and pounds, of textbooks from my undergraduate days, sitting on my bookshelves. Most are still in near-mint condition.

    Of course last semester, I was on the other end of the table: I was an instructor. I did myself and my students a favor: I didn’t require a textbook. Why would I want to dedicate myself and my class to one or two books? And I can’t bear the fact to have my students spend $40 to $100 on a textbook that they will rarely use –like they have any money in the first place. Now thinking of it, maybe I should have used SafariU.

    The best textbook that I have ever bought? Programming Perl. I still use it (heavily) as a reference at work. Despite my rant, I do have to say that O’Reilly books make outstanding textbooks. Not only are the affordable, but (in general) they have a tremendous blend of learning and reference information suited for the happy-medium of students, instructors, and professionals.

    Jeremy Jones

    AddThis Social Bookmark Button

    About a year ago, Paul Graham wrote about what he refers to as “the Python Paradox”. He stated that people who learn Python typically aren’t doing it in order to get a job; there are technologies which can boast more available jobs. They do it because they have discovered what a great language Python is and have subsequently grown quite fond of it.

    I would like to think that there are pockets of Python programmers all over, just waiting for an opportunity to be paid to program in Python. I would like to know where they are, though. I have been looking in Atlanta, GA for people with Python programming skills who are looking for a job and have come up with fewer interested job seekers than I would have expected.

    Perhaps people with Python skills are already working in a job where they can use those skills. Or, perhaps they are content where they are, working with non-Python technologies.

    I wonder what the common experience is. If you are looking for a Python job, are there many jobs available? What steps are you taking to acquire one? If you are hiring for a Python job, are you coming across many seekers with experience? What are you doing to find them?

    Jeremy Jones

    AddThis Social Bookmark Button

    Gnome recently announced version 2.12 of their desktop environment, along with a demo CD. Ubuntu recently announced a preview release of Breezy Badger which includes Gnome 2.12.

    I downloaded the Gnome 2.12 demo CD and was really impressed with the combination of utility and aesthetic appeal. I’ve been running Ubuntu Hoary on my laptop for a couple of months now and have worked hard to get everything configured and installed to my liking. I’ve been telling myself that I would just wait for Breezy to be officially and formally released rather than install a pre-release, but when I saw the Gnome 2.12 demo CD, I just couldn’t help myself. I just had to install it. I’ve got issues. I know.

    So, I burned a CD of the latest Ubuntu preview release and popped the CD back in just to see if it burned. (You may be wondering why I didn’t just update my sources.list file and do an `apt-get dist-upgrade` rather than reinstalling. My reason is, I want a fresh start. I know that a lot if this will mean deleting a bunch of dot files and dot directories in my home directory, but I’m going to get rid of some of the stuff I want to get away from.) It burned and I was a little surprised when Gnome popped a friendly little message saying that it detected a Ubuntu install CD and asked if I wanted to upgrade. I decided to let it try. It failed partway through on some gcc stuff, so I decided to reboot and do it the old fashioned way.

    I saw the standard Ubuntu plain console installer and started answering questions. The installer bombed out on me while trying to install the base system….twice. It appears I got a bad burn on the install CD. Fortunately, I had made an install CD for someone else the other day, so I decided to use it. I popped that CD in, rebooted, and everything is working well. That could explain the error I had earlier installing the base system.

    The install is well on its way, and all is looking good. I hope this doesn’t wreck my system. And if it does, I hope the backup of my home directory burned better than the Ubuntu CD did this morning…

    AddThis Social Bookmark Button

    Related link: http://blogs.sun.com/roller/page/alanbur?entry=dtrace_and_perl

    Alan Burlison, Sun’s resident Perl guru, asked a couple of leading questions recently on Perl 5 Porters. Here’s how he’s making DTrace Perl-aware….

    Sid Steward

    AddThis Social Bookmark Button

    Related link: https://www.foldershare.com/

    Poring over old Wall Street Journals, I found Mossberg’s FolderShare writeup. He mentions related services BeInSync and Groove, but says FolderShare is “faster and more flexible” for consumers. Also, he says FolderShare is the only one that supports both Mac and Windows.

    FolderShare sounds like a mainstream P2P application. It lets you synchronize files between computers, but it also lets you share files with others. When away from your computer, you can use any web browser to access your files. It is perfect for folks who want to manage bookmarks across computers but who are shy about social bookmarking services.

    FolderShare provides a ‘free’ version. It works on Windows and Mac; I wish it supported Linux. A nice way to sync your Mac Mini with your Dell.

    PC Annoyances, 2nd ed. mentions FolderShare.

    Jeremy Jones

    AddThis Social Bookmark Button

    Related link: http://www.voidspace.org.uk/python/modules.shtml#pythonutils

    The PythonUtils package includes:

  • ConfigObj
  • validate
  • listquote
  • StandOut
  • pathutils
  • cgiutils
  • urlpath
  • odict

  • The most interesting of these to me are ConfigObj, StandOut and
    odict.

    ConfigObj looks like a pretty thorough config file parser and creation
    utility.

    StandOut is a utility that “magically” intercepts writes to stdout and to
    stderr and also can be used to do more “regular” logging.

    odict is a library that will create an ordered dictionary. Dictionaries in
    Python are unordered and do not guarantee how the keys will be sorted as you
    iterate through the keys or values. odict can guarantee the order of
    dictionaries.

    I’ve just now downloaded PythonUtils and am interested in playing around with
    it.

    Jeremy Jones

    AddThis Social Bookmark Button

    I’m just getting home from the Atlanta Area Python Meetup. One of the things I
    love about these monthly meetups is the variety of conversation which just doesn’t typically happen every day at work. How often at work do I get to discuss the merits of functional vs. imperative languages, select-based vs. threaded concurrency, XSLT vs. DOM/SAX based XML handling? Work is primarily
    about getting a job done. In the process, you do grow more acquainted with
    your co-workers, discuss various topics, hear what other people are working on
    which differs from your own work, and learn new things.

    But it is refreshing to be able to get together with like minded people for the
    explicit purpose of just talking about your common interest. This type of
    interaction is a great stretching exercise. You have the opportunity to look
    at things in ways you may not have looked at them before. You have the
    opportunity to hear different views and technologies which you may not have
    been exposed to otherwise. You have the opportunity to say something wrong and
    which you are unaware was wrong and have someone help you discover the
    truth.

    How do you find a local area group? I found the Atlanta area group by using href="http://www.meetup.com/">Meetup.com, but they have since begun charging
    for their services. Someone started a similar free service, but I can’t find a
    link to it now. Maybe someone reading this will be able to find it. Another
    option is a mailing list. I frequently see announcements on href="http://groups.google.com/group/comp.lang.python?lnk=lr&hl=en">comp.lang.python
    for Python meetings for various localities. You could even post a message to
    comp.lang.python and inquire if there are any people in your area already
    meeting or interested in starting to meet. Get involved in a local group.
    It will do you good and your involvement in the group will do others good
    as well.

    What methods have you used for finding a local area user group? What things do
    you like (or not like)?

    Murugan Pal

    AddThis Social Bookmark Button

    During a technical conversation, Mark Bregman explained me the concept of Design for Testability (DFT) while I was discussing the open source software testing challenges and opportunities. Mark’s suggestion is that DFT can be effective for software as in the case of hardware, resulting from conscious efforts made by hardware industry to improve testability during mid 80s.

    To get contextual background I would recommend reading this paper that talks about different categories of testing. This paper covers many of traditional testing techniques and does not address issues like interoperability testing for combinatorial explosions.

    Additional literature search led to this research paper authored by Bret Pettichord. Independent of this thread’s context, I had a conference call with Bret last week talking about Watir and Selenium. It is a small world indeed. Bret’s point is that the testing should be part of the (design) process and not an after thought. Today, most of the software is tested once the product reaches alpha stage, whereas Bret recommends testers to collaborate with developers to design testability features while the product is in design phase. Indeed, an important recommendation. My view is that, open source development model (unlike proprietary models) is uniquely positioned to adopt Bret’s recommendation for improving testability. Testers and Developers can collaborate by exploiting the benefits of source code transparency and by leveraging initiatives like Participatory Testing. In addition, it helps to recruit new committers by having them help in testing to begin with.

    Bret highlights Bertrand Meyer’s Design By Contract, which in my opinion is how other engineering disciplines have practiced to identify and resolve defects.

    To summarize a testing methodology that exercises and utilizes Interface Definitions (contracts), Instrumentation (probes), Diagnostics (self discovery), Calibration (results comparisons) and Measurement (objective metrics) in a collective manner will help improve testability of software components.

    Do you think you can help improve design for testability of open source components? Feel free to share your thoughts…

    Sid Steward

    AddThis Social Bookmark Button

    A couple weeks ago I created my own TinyURL-like service called LookLeap. Instead of using a form where users enter URLs, LookLeap uses a bookmarklet. When the user wants a LookLeap tiny url for the page he’s viewing, he clicks my bookmarklet and voilà!

    Bookmarklets are JavaScript programs packed into a browser bookmark. Select the bookmarklet, and its program runs. They’re often used to perform some magic on the web page you’re currently viewing. Explorer limits bookmarks to a tiny 508 characters in length, but Firefox gives you room to write an entire application.

    My LookLeap bookmarklet is pretty simple. It passes the URL and title of the current web page to lookleap.com. The hard part was coming up with easy instructions for installing this bookmarklet. My rule is that it must be easy enough for my father-in-law to use.

    Not a Link

    Most bookmarklets are presented to users as hyperlinked text. I found this practice confusing: links are for clicking. So I used a hyperlinked graphic, instead. A little star: star. At 16 pixels square, it fits nicely inline. Cute, eh? Now the user won’t reflexively click on the bookmarklet.

    Using a linked image has another benefit. When the user creates a bookmark based on this graphic using Firefox, IE or Safari, the image’s ALT tag text is used as the bookmark’s default title. This makes life much easier on users, who are already burdened with having to try something new. They won’t need to type in a bookmark title if they don’t want to.

    So, this is how my bookmarklet link code looks. I replaced my bookmarklet with # for brevity:

    <a href="#"><img border=0
    src="http://lookleap.com/site/art/star.gif" alt="LookLeap -
    convert long web links into short, friendly links"
    align="top"></a>
    

    Right-Click, Drag-Drop, How-When?

    The next problem is getting your bookmark into your user’s browser. It depends on her browser, her platform, and your instructions. You probably have a few browsers you can use for testing. Here’s what I learned on mine. I divide support into right-click and drag-drop. I explain these below.

    • IE 6 on Win2k and WinXP: right-click only
    • IE 5.2 on Mac 10.2: right-click and drag-drop
    • FF 1.0 on Win2k and Mac 10.2: right-click and drag-drop
    • Safari on Mac 10.2: drag-drop only

    By right-click I mean that users can right-click (on Mac: control-click) the link and then select an option from context menu (e.g. Bookmark This Link…) to add the bookmarklet. By drag-drop I mean that users can drag the link up to the browser’s bookmark bar to add the bookmarklet. The trouble with bookmark bars is that they might not be open. On Safari, the user can open/close her bookmark bar using Command-B.

    I should note that control-clicking does work on Safari when the bookmarklet is a text link instead of a graphic.

    So what is the best way to explain all of this? I gave it a shot on my LookLeap front page; take a look. Del.icio.us is smart about their bookmarklet instructions. They use a client-side JavaScript to identify the user’s browser and then display targeted information. You must login before you can see this in action. However, you can view their JavaScript logic here.

    (Thanks to Glenn Fleishman for helping me debug in my old LookLeap instructions.)

    Jonathan Bruce

    AddThis Social Bookmark Button

    I just received a note from an old friend of mine from San Francisco who relocated to Baton Rouge to work directly for the Governer of Louisiana, Kathleen Blanco. Here’s what she had to say:

    “thank ya’ll for thinking of me and my family - everyone is fine - just in shock and trying to help as much as possible. Although the media is highlighting the looting and chaos…I have seen more examples of true heroism and courage than I can even tell you…sorry this is brief but my work is completely overwhelmed with so many issues it’s mind boggling - and our staff works shelters to everyone is stretched really thin….”

    She even provided a link of her grand parents place in Biloxi that did not survive the brunt of the storm. All that remains in the two concrete pillars of the house:

    http://wlox.com/Global/category.asp?C=69327

    Some links below wher that you can help out:

    Andy Oram

    AddThis Social Bookmark Button

    The recent

    court decision on Blizzard Entertainment’s Battle.net

    (also
    reported by Slashdot)
    does not deal a death blow to reverse engineering by any means. But it
    resembles the

    June ruling on Grokster

    in that it weakens an important right of technologists.

    Just as the Grokster case made it harder to develop technologies that
    carry audio, video, etc., without directly outlawing those
    technologies, so the Blizzard case insidiously eats away at the right
    to do reverse engineering, without directly attacking the legal
    foundation that protects reverse engineering.

    So this case marks not, perhaps, a major precendent, but another
    inch-long drift of the continental shelf in American law toward making
    established companies harder to challenge, and making both competition
    and innovation less likely.

    Those two words–competition and innovation–are the
    shibboleths of the free market proponents, even if they are more often
    honored in the breach. For instance, Microsoft always tried to wriggle
    out of compliance with government anti-trust measures by touting its
    “innovation,” even though its genius is in creating a mass market for
    innovations done by others, and it rarely can point to anything
    innovative of its own.

    Competition was also the watchword of Michael Powell at the FCC as he
    removed requirements from incumbent phone companies to share their
    lines. His idea of competition was Bell company versus cable company.
    But who was he fooling? The incumbent phone companies and the cable
    companies aren’t competing. They have separate lines, and they have
    already built out their networks as far as they were willing to go.

    Now for reverse engineering. Every software license you see (except
    for open source ones) is sure to contain ridiculous clauses that
    nobody pays attention to. These include a clause enjoining you not do
    reverse engineering. But technologists have ignored these for years.

    Reverse engineering is to new products like line sharing is to phone
    service: it lets new products reach a market by making them feasible
    for use by the customers of established companies. It’s absurd to
    expect a new phone company to duplicate the network that was built up
    for over a century under monopoly conditions–and it’s almost as
    absurd to expect OpenOffice.org (to pick one example) to be adopted if
    users can’t open Microsoft Office documents with it. Reverse
    engineering is the battery that kicks off the engine; the catalyst
    that starts crystallization.

    If the free software programmers who reverse engineered Battle.net had
    done it just to create a competing service, they might have been
    protected by the DMCA. The way I read the

    court ruling

    (as a non-lawyer), the programmers left themselves open to prosecution
    because players could run unauthorized copies of Blizzard’s own
    Battle.net software.

    So the court presented anyone who wants to do reverse engineering with
    a dilemma: they’re protected legally to do reverse engineering so
    long as it accomplishes nothing except what the law allows
    . The
    law specifies reverse engineering to achieve “interoperability,” and
    therefore interoperability is all that can be achieved. Otherwise,
    people doing reverse engineering are subject to a doom like that
    handed out by one of the most famous legal wrigglers of all time,
    Shakespeare’s Portia in the Merchant of Venice (act 4, scene
    I):

    Therefore prepare thee to cut off the flesh.
    Shed thou no blood, nor cut thou less nor more
    But just a pound of flesh: if thou cut’st more
    Or less than a just pound, be it but so much
    As makes it light or heavy in the substance,
    Or the division of the twentieth part
    Of one poor scruple, nay, if the scale do turn
    But in the estimation of a hair,
    Thou diest and all thy goods are confiscate.

    This case was robustly defended; the Consumers Union and the IEEE were
    among those who submitted briefs for the defendants, who created the
    knock-off bnetd game site. Nor were the motives of Blizzard–the one
    bringing the complaint–entirely without merit. I sympathize with a
    company’s desire to bring a consistent and secure experience to their
    customers.

    But competition and innovation are on the defensive. So I’d like to
    see the defenders of upstart companies and free software hackers form
    a Coalition for Competitive Innovation. The name’s corny,
    exploitative, and shrill, but something like that is needed. The scope
    should be narrow, at least to start with. The coalition can simply
    defend the right granted by the DMCA, and ask for clarification of the
    law by Congress. Otherwise, the country’s long, slow technological
    decline will continue.

    Murugan Pal

    AddThis Social Bookmark Button

    Many of you might have questions around successful business models. Recent Forbes article on SourceForge and the blog on SugarCRM’s functionality differences between open source and pro versions raise interesting questions. If you are contemplating on a new open source venture - my recommendation is not to differentiate (functionally) between the commercial and open source versions, like in the case of MySQL’s dual license.

    From my conversations with CIOs, enteprise architects and IT developers there are three major reasons for adopting open source:

    1. No vendor lock-in and proprietary code
    2. Freedom to change or enhance - free in libre
    3. Cost effective - pay for tangible services and not for the software

    The moment you introduce functional differences between open source and paid versions, you will violate all of the three reasons quoted above. Eventually, an open source free version may have similar functionality that will compete with the commercial versions.

    Typically open source is leveraged by software vendors as follows:

    • Packaged and Bundled - Linux Distributions like RedHat or SUSE
    • Maintenance and Support - JBOSS
    • Tested and Integrated as a Stack - SpikeSource
    • Proprietary Products Certified with Open Source Products - Oracle on Linux

    If you are a new vendor the odds are so low that your ‘functionally incremental proprietary product’ offered along with open source version is going to adopt mainstream adoption. This will bring up the debate “good enough vs. the best”. For most of the customers a good enough product will suffice, and it is better to base your business model on operational excellence and nominal charges for covering tangible services.

    Here is how I would summarize:

    1. Adopt appropriate licensing policy that suits you from the beginning and stick to it.
    2. It will be difficult for the commercial version to succeed provided there are incremental functionality differences between free and commercial offerings.
    3. Customers will pay for tangible services (support, updates, training and documentation) provided the product is usable and the subscriptions are nominal.

    Have you ever thought about this issue? Let me know your opinions…

    Derek Sivers

    AddThis Social Bookmark Button

    As rewriting CD Baby, I’ve been doing some interesting experiments in questioning things that we take for granted as “that’s how ecommerce works” - but really aren’t what they seem.

    Some examples:

    BILLING ADDRESS
    Is the billing address for an order really an attribute of the order?
    Think about when you really use it… only for credit card orders.
    Credit cards are only one way to order. There’s also PayPal, cash, check, C.O.D., gift certificates, and more we haven’t imagined yet.
    So… really “Billing Address” is an attribute of the Credit Card being used, that’s all.
    No credit card? No billing address.
    There’s no reason to ask people for a billing address unless they are paying by credit card - and it should probably be asked for right next to the credit card number and expiration date to make it clear as possible that you just need the address the bills go to, for verification.

    POSTALCODE / STATE
    Some countries have no postalcode (Ireland, Hong Kong).
    Most countries have no “state” or province.
    If you ask people their country, first, you won’t need to ask them these un-necessary things.

    “CREATE AN ACCOUNT” / PASSWORD
    Only 15% of our customers ever return.
    Why are we requiring 100% of them to create an account, then?
    An account (with a password) is only needed IF you return back some day to buy more.
    Why not skip the “create an account” processes for everyone, and make it an OPTIONAL thing you can do AFTER your first order, so that IF you think you might want to return some day you can create an account.
    85% of people will never need it, and appreciate you for skpping it. Maybe they’ll even be more likely to return because you made their 1st-time shopping experience so easy.

    CREDIT CARD TYPE
    If it starts with “3″ it’s American Express. “4″ is Visa. “5″ is Mastercard. “6″ is Discover.
    So why do online stores require people to tell them what kind of card they are entering? Just looking at the first digit will tell them. It doesn’t really matter, anyway, because either it verifies with the bank or it doesn’t.

    Any other un-necessary things you’ve encountered in your online shopping experience?

    Any other un-necessary things you’ve encountered in your online shopping experience?

    Jono Bacon

    AddThis Social Bookmark Button

    While perusing the usual alleyways of the Internet the other day, I was fairly surprised to see this article on OSNews. For those of you who are unfamiliar with the situation, let me indulge you.

    Quite some time ago, Lindows were gridlocked in battle with Microsoft over an issue regarding their trade name, Lindows. The issue at hand was that ‘Lindows’ and ‘Windows’ sounded a little too close for comfort for the Redmond behemoth. The trademark infringement issue was ultimately resolved between the two warring parties, and Lindows changed their name and product branding to the less litigious ‘Linspire’. The company then spent time doing what they do best - trying to create a word class desktop Operating System.

    The core product that Linspire offer is not free. Like many other distributors, Linspire have cobbled together their product from a combination of free and non-free components. Although the distribution is based around free software, that software is delivered with a proprietary tool (Click n’ Run), and many other non-free elements such as codecs, fonts and other software is included. These non-free elements are licensed by Linspire for their inclusion in the product. As such, Linspire cannot be copied as freely as a distribution such as Ubuntu or Debian, due to these non-free components.

    Recently a chap named Andrew Betts decided to take the non-free elements out of Linspire and release the free parts as another Linspire-derived distribution called Freespire. This act of re-releasing distributions or code is certainly nothing new and is fully within the ethos of Open Source. In fact, many of the distributions we use today were derived from existing tools. Unfortunately, Linspire saw this as a problem and asked for the Freespire name to be changed.

    There are a number of things wrong with this picture. The first and most telling issue is the sheer hypocrisy of the request coming from Linspire of all people. Back when Lindows was their trading name, I felt rather uncomfortable with them using a name that was so similar to Windows. The approach seemed to smack of a cheap shot at getting Windows users on board, and the software seemed a rather cheap attempt at capitalising on bringing these users over. Although Lindows held up a good fight against Microsoft, and irrespective of the rights and wrongs of choosing a normal word (Windows) as a trademark, ‘Lindows’ was only one single, solitary letter away from ‘Windows’. Aside from the lexical issue, it seemed that the Lindows Operating System was also quite obviously targeted towards existing Windows users. To me it seems that a competing software product that looks to be targeted at Windows users in conjunction with a trademark that is only one letter away from the competitor’s product name could certainly cause confusion. Sure, it is not going to cause confusion with anyone vaguely versed in modern IT, but their target audience are largely consisted of people who are not versed in IT. With this recent incident, it seems as though the line is ‘well its OK for us to do it to Microsoft, but its not OK for someone to do it to us’. Hypocrisy defined.

    Solving the problem

    After Betts was asked to change the name, a page appeared at http://freespire.jasp.com/ with some text outlining the issue. It is likely that the page will be removed at some point in the future, so here it is for completeness:



    IMPORTANT NOTICE

    The freespire project is changing its name, as it is creating confusion and misunderstanding. The project will now be assuming the name ’squiggle’

    “freespire” was the term I gave to a private project I had been working on. The project was comprised of various open source components, taken from the freely available source repository for the Linspire operating system. Somehow my project got submitted to distrowatch.com as a bona-fide Linux distribution. I can only assume whoever did this had good intentions, unfortunately it was done without my consent.

    Subsequent widespread distribution of this project has led to much misunderstanding, based largely on the name. So to make it clear:
    This project is not a free version of the Linspire operating system and is not made by Linspire Inc..

    Some examples of the problems caused by the term ‘freespire’:

    1. It confused some into thinking that if you just take out the proprietary licensed pieces of Linspire, you still have Linspire. This impression is false because the total Linspire experience relies on proprietary components, such as mp3, Java, Flash, Quick Time, Windows Media, Real, fonts, etc…
    2. I worried that many people would try ‘freespire’ and use this to judge the Linspire product. I have already read posts on the net that go something like this, “I have never tried Linspire because I didn’t want to pay, so I was excited to finally try it when I saw Freespire. I downloaded it, and I wasn’t impressed. I don’t see what all the big deal is around Linspire. I didn’t see anything very special there.”
    3. I had heard from Linspire that their support department was getting calls and emails from users who thought Freespire was their product. As much as I tried to put disclaimers in to the contrary, some still were confused to this point. I’d even seen reviews for my project that said Linspire was the creator.

    Linspire has expressed complete support to me with the project itself, as long as it didn’t infringe on any 3rd-party licensing. But the name has caused problems for both parties so I decided to change it.

    To help alleviate any confusion, I contacted Linspire and they made an extremely generous offer to us all. They want everyone who has been following my project to experience “the real” Linspire, FOR FREE!!! For a limited time, they are making available a coupon code called “FREESPIRE” that will give you a free digital copy of Linspire! Please visit http://linspire.com/freespire for details.

    For those of you that are still interested in my project please visit the LinspireNetwork (after getting your FREE copy of Linspire I hope!)

    Many thanks for you time, and don’t forget to enjoy Linux

    Andrew Betts


    Reading through this page, the language and flow of the words screams marketing to me. I am certainly not insinuating that Betts has been forced into writing this page, or that the Linspire marketing drones have written it and appended his name, but it certainly doesn’t sound quite right to me. I would have expected something along the lines of ‘Freespire has been changed to Squiggle to avoid confusion with the Linspire product’, but this is not the case. Instead we are treated to choice marketing cuts such as ‘To help alleviate any confusion, I contacted Linspire and they made an extremely generous offer to us all’. Wow. What is this one-chance-in-a-lifetime-not-sold-in-stores offer? Luckily, he continues, ‘they want everyone who has been following my project to experience “the real” Linspire, FOR FREE!!!’. Now, pray tell, how do we get this ‘real’ version of the software ‘FOR FREE!!!’? ‘For a limited time, they are making available a coupon code called “FREESPIRE” that will give you a free digital copy of Linspire! Please visit http://linspire.com/freespire for details’. Oh…thanks.

    I am sorry to say but I find throwing free as in beer copies of Linspire out as the solution to the problem, or as a means to push attention away from the issue as a cheap shot at solving the problem and to capitalise on the attention to shift more copies of Linspire. The fundamental issue is that the right to create a product and call what you like is being stamped on by an organisation that fought in a court of law to essentially do the same thing. Throwing free copies at the problem does not solve it, and I feel it instead comes across as a rather cheap shot to maintain the status quo.

    Drawing a conclusion

    This entire issue is hinged around the concept of ‘confusion’. Is there likely to be more or less confusion between ‘Lindows’ and ‘Windows’ or ‘Linspire’ and ‘Freespire’? I am not sufficient convinced that a newcomer to IT is going to be any less confused with either side of the fence. I don’t doubt that confusion can occur in both cases, and both Microsoft and Linspire need to protect their interests, but I just find the fuss kicked off by Linspire over Freespire as disappointing given their history.

    I know Kevin Carmony from Linspire reasonably well and have an enormous amount of respect for him. Kevin is committed to not only getting Linux on more desktops, but to also improve the image and public confidence in his organisation. Having spoke to Kevin about some of the methods that could improve these relations, I am confident that he is working hard to better communicate how the ideals of Linspire and the ideals of Open Source are aligned. Unfortunately, this incident has knocked my own confidence in Linspire, and I hope that reparations can be made in a way that does not just include throwing out free copies.

    So, what do you think? A real problem or a storm in a teacup?

    AddThis Social Bookmark Button

    Summer months are slow in BSD land.

    Worth reading

    Misc Reading

    NYC BSD Con

    17th September, $20 entry; impressive schedule

    OpenBSD

    3.8-beta testing

    Misc

    NetBSD

    NetBSD/toaster

    Status report

    New Core Team

    DragonFlyBSD

    Journalled FS

    New spinlock implementation

    FreeBSD

    New Security Officer - Colin Percival

    FreeBSD 6.0

    FreeBSD on the XBox

    Things to read

    Misc

    Advertisement