By the end of today, I feel quite confident that TurboGears holds great potential as a productive web application framework. We went through all of the 20-Minute Wiki and TurboTunes tutorials. It would take a full-blown article to cover the stuff I’ve seen, but for now, I will just highlight some of the features that surprised me.
Despite the youth of the TurboGears project, they seem to have already realized the important of a useful toolset. With a simple command-line
tg-admin toolbox from the root of my TurboTunes tutorial workspace, I found an impressive little bundle of tools there at my disposal:
What’s CatWalk? A web application to browse my domain model? No way, you must be kidding! Nope:
Lo and behold, my domain model, with one-to-many and many-to-many relationships, browsable and editable right there. Wow. I had also noticed a Model Designer, and set my expectations to what I thought was an appropriate “lowness”. Not necessary:
That is the sample model for the domain I had manually created, represented in diagram form. I have yet to see any tools like this for Rails, though they may exist. The “pythonic” nature of the MVC components of a TurboGears application has an aesthetic that totally appeals to me. I also noticed that unit testing code is stubbed out and ready to be run using Nose. Looking forward to learning more about that.
The second day of the WFJ for me was the second half of my journey up the learning curve on installing TurboGears (TG) on Debian with Python 2.3 and 2.4 installed. The predicament seems to have been that 2.3 is still the default Python version, even in sid, and the python-turbogears package is targeted for 2.4. The package does not pull in at least one of its dependencies, so I was finally relegated to trying a manual installation. Once I figured out that easy_install-2.4 allowed me to install the necessary Python eggs into my /usr/lib/python2.4/site-packages directory, I was all set to go with TurboGears 0.9a6.
Once TG was installed, the rate at which we were able to progress into the tutorial was impressive. I think if we’d been more familiar with how Python libraries are handled, we would have been much farther along. This, of course, is a great motivation for me to give attention to the Debian package so that at least one Linux distro can have a great out-of-the-box TG experience.
We kicked off the Web Frameworks Jam today, and so far it looks like another great event. We ended up sorting into three groups, one for TurboGears, one for Spring/Hibernate, and one for the Google Web Toolkit (GWT). Bruce, Dianne, and I are the TurboGears group. I was on the fence between Ruby on Rails and TurboGears, but since I would have been the only person looking at Rails, that I would’ve forfeited the benefit of the group.
I didn’t make much progress today; it seems I am a victim of Debian‘s Python 2.3 to 2.4 transition and a rather nascent python-turbogears package in Debian. I am learning about Python package management and parallel installs of multiple Python versions, which is something I have been meaning to learn anyway. Hoping for a more productive day tomorrow; in the meantime I was able to file 5 bugs against the Debian TurboGears package along with some patches. We hiked around Lake Erwin in the middle of the day, which was a welcome pause from my installation and setup frustrations.
Man, it’s good to be back in Crested Butte. I rode the Lower Loop yesterday afternoon with my brother. What a beautiful trail for mountain biking. The Americanos at Camp 4 Coffee were something I’ve been missing as well.
I recently had to provision a laptop at my client’s site for my use. Certain third-party applications that are key to managing the technology practice there are Windows-only, but I (am fortunately allowed to) refuse to have a Windows-only machine. They are cool enough to let me shrink the corporate WIndows XP image and set up a Debian sid instance for dual-booting. I took my trusty CD of a recent daily snapshot (the fact that I have been able to use daily snapshots of the Debian Installer ISO for several years with little to no trouble is in itself a huge testimony to the quality of that project’s work) and popped it into the media drive of this rather battered Dell Latitude D600. I had heard at DebConf that the graphical installer was now fully part of the daily snapshots, so on a whim I invoked it with the ‘expertgui’ directive at the boot prompt.
If you haven’t seen this, go and burn an ISO of the daily snapshot for your architecture and boot into it. (I won’t even elaborate on the fact that being able to choose from 11 different architectures is massively impressive.) What a beautiful interface, and how amazingly tasteful as far as look-and-feel. It’s very professional-looking, yet not corporate. There’s a button to capture snapshots of the install screens right there on each screen. It may take a minute or two to adjust to having the right line in the display highlighted before clicking the button to continue in more-complex screens, but the annoyance is neglible. I was thoroughly impressed, so much so that I wiped my backup laptop, a ThinkPad T42, and did a reinstall using the graphical interface. You can still pop over to the other virtual terminals just like in the character-based installer; the graphical interface seems to use the fifth virtual terminal. I just popped out of it to the second via Ctrl + Alt + 2 and was able to mount a USB drive with some firmware I needed.
I wiped the T42 so I could run the IBM recovery and get XP back on a small partition. Hey, how else am I going to play Warcraft III? (Seriously, though, if anyone has managed to get Warcraft III to run via an emulator, let’s talk.) I found it a study in contrasts, installing XP and then installing Debian immediately after. The first thing I noticed with XP is how little visibility I have into the install process compared to the Debian installer. I suppose I shouldn’t have to since all these vendors have supposedly ensured (stifling audible laughter here) a smooth installation process for me. However, when something does go wrong, I am pretty much out of luck. Second, I have come to take for granted how quickly you can fully provision an OS instance with Debian’s rich package-management system. The benefits of an awesome package management system are painfully obvious as soon as you have to reinstall Windows or OS X, especially if you are a software developer with a whole litany of tools necessary for your work.
A graphical installer was the last major impediment to me recommending Debian to my friends and relatives who are too befuddled by a character-based application or installer. This closes a significant gap in the Debian offering, and I wish to sincerely thank those who have poured so much time into the installer project as a whole and have gone the extra distance to create an interface that reaches out to the less-technically-oriented crowd.
Blog commenter James pointed out to me that the esteemed Mark Pilgrim has recently moved back to Linux for his desktop OS as well. Since Mark’s blog post doesn’t have to be conformed to fit conventions of a major technical publishing site, the style is more conversational. His take on the faux openness of the Mac platform is insightful. My favorite two paragraphs from the entry are the following:
I would like to point out that it is entirely AppleÃ¢Â€Â™s choice that their operating system does not run on my new Lenovo ThinkCentre. IÃ¢Â€Â™m not saying it was a bad business decision Ã¢Â€Â” they are a hardware company, after all Ã¢Â€Â” but it is particularly galling to realize that if I bought a new Mac, I would be subsidizing the development of an operating system that contains code whose sole purpose is to lock me into a specific hardware platform. I realize that most people donÃ¢Â€Â™t look at it that way, but there it is.
In many ways, the tale of my switch is more of the same old story. Mac OS X was Ã¢Â€Âœfree enoughÃ¢Â€Â to keep me using something that was not in my long-term best interest. But as I stood in the Apple store last weekend and drooled over the beautiful, beautiful hardware, all I could think was how much work it would take to twiddle with the default settings, install third-party software, and hide all the commercial tie-ins so I could pretend I was in control of my own computer. Beauty is in the eye of the beholder, and to my eye Apple isnÃ¢Â€Â™t beautiful anymore. IÃ¢Â€Â™ve worked around it or ignored it for a long time, but eventually the bough breaks.
Spot on, Mark. I still kick myself for thinking it perfectly normal at one time to have to own a PCMCIA network card just to be able to use WLAN with my Aluminum PowerBooks equipped with “Airport Extreme”. Deciding to “switch back” was almost like realizing I was in this relationship with someone who was taking without giving back, and using manipulative schemes to win my allegiance.
Oh yeah, and more Mac zealot whinging in the comments, apparently enough for Mark to have turned off comments on that post.
So it’s finally OK to mention it now; Java has made it explicitly possible (read legal) to distribute the Sun Java JRE/JDK on a GNU/Linux distrubtion. The new license is for Java SE 5 on Linux only, called the Operating System Distribution License for Java, or DLJ for short. You can read the license in text or pdf form. The FAQ for the DLJ is also available in text and pdf. Heck, go through the README for the JRE and JDK while you’re at it.
So what does that mean? Well, GNU/Linux distrubtions like Debian can now package a Java runtime environment or Java development kit in their repositories. That was previously not possible due to restrictions present in Java licensing. Users still have to accept the Java SE 5 binary code license that is totally not free and has the same restrictions Java has always had, but this at least makes packaging and supporting Java less painful for distributions.
Sun is coordinating the efforts via a java.net project, jdk-distros. This is an unprecedented level of cooperation from Sun with external parties in anything related to Java. I consider myself fortunate to have been a founding member of the project. It has been a pleasant and refreshing experience to meet a few optimistic and forward-thinking people from Sun who have a keen interest in Free Software; a big thanks to Simon Phipps and Tom Marble. I was encouraged that they allowed our contributions to be covered under the MIT license. If you would have told me that a month ago I would have laughed at you.
The Debian announcment should be posted on the debian-devel-announce list today. I am sure this will draw both praise and ire from the Debian community. That’s cool, though; the rich diversity is part of what makes it such a vibrant organism.
Despite having been sick and having my wife and child get sick as well, I got caught up on some Debian work that’s been on hold for almost six months. The last part of my Philosophy & Procedures phase 1 went out last night (well, this morning really, around 3:00 in between sessions of soothing my now-sick 4-month-old daughter), and I updated all of the packages I comaintain to fix a few bugs, update the standards versions, and correct my uploader email address. The java-package update is pending Jeroen’s arrival in Mexico for Debcamp.
I am glad to have these backlog items cleared before heading to DebConf; now I can tackle newer stuff while I’m there ;-). With all the life change in past 6 months, I was beginning to wonder if I’d ever catch up.
I recently started syndicating the IT Conversations RSS thread on my site and saw that an mp3 of Bruce Sterling speaking at O’Reilly’s Emerging Technology Conference was available. It’s an interesting listen; if you’re a cyberpunk fan at all, then it’s even more interesting.
Version 0.27 of java-package has hit the unstable archive today. Thanks to the encouraging (or maybe urging) ;-) of my colleagues in the Debian Java™ Packaging Project who still primarily run on PowerPC, support for the IBM Java2 5.0 JREs and SDKs (currently in beta) has been added with this release. Hopefully that provides some relief for PowerPC and s390 users who have been languishing in Java™ 1.4.2 land until now.
Even if your JRE or JDK version was supported by a previous version, I encourage you to repackage it with this latest java-package. A massive revision to the alternatives installations has been carried out, and users should find that all of the expected executables in a JRE or JDK bin directory now have alternatives entries installed. The exceptions would be
ktab. Our handling of system preferences for Java is still being and hammered out; quite an unwieldy thing what with the alternatives and all that.
I had so many plans for this weekend, but the first of them ate the entire two days. In working on the next release of java-package, I came across some serious issues with alternatives creation that had crept in under my watch when I first became involved with the package. It was one of those times where accepting a huge patch with tons of files introduced an error that I missed; that’s part of the trouble with some patches you receive; they are submitted with someone only thinking of a very specific problem for the moment, with no thought for the package-wide implications and any technical debt the suggested resolution may incur. There was nothing for it but to slog through the install and remove scripts for all 8 JREs and all 8 JDKs looking for the bug’s presence.
Sixteen hours later I had corrected the issues and tested the install of all the JREs and JDKs on i386. I had a professor once who asked what was necessary to earn a PhD. After some of the more pompous asses in my class had spouted out their opinions, the professor stated, “a hard butt.” He said it wasn’t about being brilliant so much as it was about being persistent. The friends I have met since then who have shared their PhD stories have confirmed my professor’s allegation. I think Free/Open Source Software development is like that; what does it take to participate? A hard butt. On that note, my sore butt is getting out of this chair.
Oh yeah, kudos to Mr. Burrows on aptitude 0.4.0; I love the changes. Control-T alone was worth the wait.