The human fecal matter has collided with the bladed air circulation device

It's finally happened. One of my professors tried to send me an OOXML document. It's a good think it's just some zipped up XML. All I need to do is unzip it and, oh wait, tab completion won't work since bash-completion doesn't realize that .docx is just a zip file. Now I have to type out the full name, escaping spaces included. So it unzips, all over my home folder, not into a nice neat folder of it's own like every well behaved tarball does. At least it's XML which is human readable, right? Well it seems the world's biggest bloat maker incidentally forgot how to use bloated white space in the biggest joke they are pulling on the free world. C'mon Bill Gates, can you be any more clever?

Well one polite, yet long explanation to my professor how I can not read this file later, and I think I need to keep my eyes a little more open as to what's being used at the University of Pittsburgh.

So dear not quite so lazyweb, are there any of you freedom loving people in or around the University of Pittsburgh or Carnegie Melon that want to help ensure the freedom of information in the Pittsburgh area? I'm going to start campaigning so this can hopefully be the last I see of .docx from one of my professors.

Smolt and School

A status update.

Smolt's gotten some pretty big or small changes since the last time anything's been mentioned. I've been spending alot of time fixing up random issues in the logic level, because there are a suprising number of edge cases we've come across. The more I work with Smolt, the more I realize this is alpha software. It certainly won't be that way soon enough though. It certainly is in a far better state to download and try out on your local machine than it was before. The only catch is that it requires DB specific things from MySQL, and the requirement is only going to get worse, not better. I hope we could switch to Postgresql, but that remains to be seen.

Today I worked on two big changes. Firstly, everyone's been sharing links to their Smolt profiles. Since I hate security through obscurity, I'll come out and say right away, DON'T. The link contains your UUID which identifies your machine. Currently it's the only authentication token needed to update your machine. Seeing how the fine work on FAS is maturing, I plan on added that as an optional security layer. In the meantime, there is a way to share your profile using a different token that gives the viewer read only access. It's in the source control, so all we need is a certain someone to deploy the change.

Secondly, I fixed a pretty critical bug. Browsing item information by Hardware class presented by HAL is a pretty heavy operation on the database. Well, it's cached too. Practically everything slow is cached now, so it's unlikely there'll be any showstoppers in the future where something doesn't work. After I make the information presented cleaner and more useful, I'm going to experiment with some custom query generators that will be of better use to hardware vendors, like seeing how many 'live' systems as opposed to dead systems are still using their hardware.

As for school, well it's going to get busy. I have ultimate bum schedule at least. On Mondays, Wednesdays, and Fridays, I have one hour of class at 1 PM. I could feasibly be drunk Thursday, Friday, Saturday, and Sunday night, and still make it to class. Not that I do these things.

The class lineup? As if you actually care :P
Social Implications of Computing Technology
Professional German 1
Reading Literary Texts (that's in German)
Swedish I
-and-
Structure of Programming Languages

Finally, whoever manages the Peoplesoft system at the University of Pittsburgh must be a God amongst Oracle hackers. It runs decently fast, is not hard to navigate, does not break common usage patterns, and ultimately lets you get the information you need. Some things require one or two more clicks than absolutely necessary, but overall the experience is good. I think a little village in Norway froze over.

Smolt

Well, my internship is coming to an end.

Of all things, I enjoyed working on Smolt the most. Turbogears and SQLAlchemy are a blast to play with, and make life so easy. Maybe I'm spoiled now, but I doubt I could ever do another web application in Java again. I don't see a reason to do so.

I see alot of blogs pointing out things about Smolt, that to me is just simply old news. So allow me to highlight what is going on with Smolt. Please keep in mind these are in the development version currently.

  • SELinux stats are collected
  • Ratings are collected, although the implementation is a little buggy.
  • The server has been rewritten to be a little more robust, so it will be easy to make some widescale improvements pretty quickly.
  • Smolt is compatible with Fedora, RHEL, openSuSe, SLED, Debian, Ubuntu, Archlinux, CRUX, Frugalware, Mythdora, and Mythvantage. We still need help packaging for these distros though.
We plan on getting out a community release of the client in the next couple of days, such that it's possible to start packaging things. I can guarantee that this client will work with any version of the server that we are running, although we haven't set any deprecation dates yet.

I also have plans to make the web interface more informative. Right now it only spews out a ton of junk collected from hal, and we really need to make it give you more information in human terms. There'll also be links to a wiki where users can comment on any part of their system, so others can find out how to fix things that are broken, or where to complain to their hardware vendor.

On the vendor side, we plan on giving more information and statistics that will be useful to you. Want to know how many people can't get your wireless card working? Just check Smolt.

We'll have some exciting things ready for Fedora 8.

Abortions

You take a glass...

1) Fill half way with baby killer (cheap vodka)
2) Fill near the top with cherry ginger ale
3) Add a splash of diet coke and a splash of red wine

Et voila, you have a drink that will do more than just kill babies.

What is a Community?

This week Mike McGrath started an interesting flame war here which asked us all the very interesting question: What is Fedora's Market. This of course led to the usual affirmations that Fedora is 'bleeding edge', 'for the hobbyist/tinkerer', or really just for the person who wants to do new and exciting things. Today however, I saw a funny blog post by Tom Callaway, on his efforts to introduce a new feature in Fedora that allows people to track packages by license. Unfortunately for Tom, and my heart goes out to him, his idea was shot down a bunch of people whose response was to "Whine, Bitch [and] Moan." I had also been reflecting on how Con Kolivas is no longer writing kernel patches.

This had me wondering at a second and even more nebulous question to ask.

What is a Community?

Growing up, I had the fortune to live in a jewish community that talked about the morals of building a community through religion and social exercise. People always commented that my high school class was amazingly unified between all the different levels of classes socially, and there wasn't this stratification of who belonged to the 'smart' classes or the 'dumb' classes. At the same time, I would go home to see my parents and family integrated, but looked at funny because we had ever so little less money than our neighbours, and were ever so stranger than they were. So if you asked me what a community is, I would say right out that it's a group of people that align themselves together based on some common bond. Well, it's not necessarily an open community.

An open community, however, is an entirely different breed. It's a group of people that are willing to accept anyone regardless of who they are other than their desire to participate. It certainly has been a mantra of the Open Source development style. It accepts anything, and everything, and of course, if you can't keep up, you sink underneath the mess. If you manage to stay afloat, you're rewarded with the best of the best software available to mankind. This is also the bazaar style development, or in some cases the bizarre.

There are of course always the closed communities, which in the software world leads to cleverly, but cleanly architechted software. Even when they are open source, there is certainly this base hierarchy of being either in the inner sanctum or pond scum. Oddly enough, this has actually been Red Hat's model for years, and continues to be that. They take what they like, polish it into first RHL, now RHEL and friends, and then return as much source code as they can back to the community. Red Hat has been very clear about who stands in their community, and who doesn't, and it all starts with a paycheck.

Fedora is going through an interesting transition though. For six versions, it's been a closed off effort, courtesy of Red Hat, whereby the only people that could directly contribute were Red Hat employees. However everyone started realizing that outsiders could make better packages than Red Hat, and eventually Fedora was opened up. Cool! But now what? I'm hesitant to bring in other distros into these sorts of discussions, since they eventually turn into flame wars, but let me give you an abridged list of "Open Community Distros" (by my standard of course ;): Debian, Gentoo, Ubuntu, and *BSD (generally speaking). These are the best models to look at if you want to understand how an Open Community operates. Well, *BSD's aren't really open, the rules to submit patches and have them accepted are strict. Ubuntu and Debian have that crazy MOTU and NM processes, and Gentoo seems to have lost it's wind. Not than anyone is perfect of course. But one thing that these distros are good at is accepting all sorts of ideas, incorporating them, and weeding out the bad ones. (Yes, I do know *BSD is not a 'distro').

One of these distros has a little funny document called the Debian Social Contract. This is the defining document for what constitutes the basic foundations of the distro, and the community that surrounds it. From that came out a rock solid distro, that serves practically any need one might have from Linux. You can call it overkill if you want, but to be quite honest, I enjoy Fedora development more working inside Debian than I did on Fedora.

So in response to this ugly trend I've been noticing where people are getting shoved out of the Open Source community, and feeling left out, I want to propose the start of a Fedora Social Contract. (Disclaimer: I have read the DSC (the Debian one) before, though it's been a couple of years. I haven't read it lately, although if this catches on, I will of course read it for inspiration. I do not want this to turn into a clone of the DSC, although if it does, I think it means that the DSC is a very well written piece of fine bathroom literature :) ) (Second disclaimer: I enjoy reading in the bathroom ;) )

So without further ado (except this one: ADO!):
1) Fedora is open source and an open community
2) Everyone is welcome to voice an idea, and everyone is welcome to say no. The Fedora project is of course neutral. Implement your idea.
3) We are part of a larger community, participation in this one implies participation in the larger one as well.
4) Therefore, everyone is welcome to submit changes, fixes, improvements, anything they wish to see. Provided it's technically feasible, we will make your submissions available for evaluation by the community. This is not a guarantee that it will be submitted to a release.
5) If one other person finds this feature useful, the submitter will have an option to submit it in some way to the Fedora Project, should there be an objection greater than the desire for submission (and a lawyer will hate me for that last sentence ;)), all efforts will be made to ensure that the submission remain optional, and not installed be default.
6) To ensure that we provide a quality distro, there should be a core set of packages that have been approved by people trusted by the Fedora Project to this purpose. The term core packages can imply 20,000 packages if we ever had that much time on our hands. For a submission to pass this review, it must meet quality standards (not limited to proper package naming, quality of install scripts, likelyhood of the package destroying the universe being minimal, etc...), however, so long as it is packaged properly, it is up to the community to decide if they wish to use it.
7) Should the submitter, or an heir to the package leave the project, only then is the removal of the package from Fedora up for discussion. If members want to see a package in the distro, they have to do the work to make sure it stays there.

I'm sure there's plenty more that can go there, but they would probably be elaborations on the same thoughts. I'm also sure there are plenty more social contract type clauses that would fit, and I just haven't thought of them yet. Anyways, I make them available via the Creative Commons if someone else would also like to write a social contract. I'm sure I'll have plenty more to add by Monday.
  1. I'm 23 years old. Pretty strange, huh?
  2. I just signed up for mugshot and twitter. Now I have my facebook integrated into my mugshot integrated into my twitter integrated into my facebook. It's a wonder they don't explode or start a flamewar.
  3. Smolt is getting better. Every random complaint I keep seeing is already in the upstream repo, or two lines of code away. Soon it will eat your soul, and you will thank it.

Turbogears and Seam

I want to shake Kevin Dangoor's hand. I probably would like to meet Gavin King someday, because he seems like a smart fellow too, but Kevin Dangoor is a genius. We've been struggling with JBoss and Seam in our group for over six weeks now, and so far have produced an overengineered, complex, brittle application that works on only half of our boxes. To be honest, development has picked up quickly when more energy is applied to it; however, if you look at it mathematically, I think it's a useless point. Out of curiosity and frustration, Robert and I hammered out a simplified version of the app, complete with CRUD pages in two nights, using Turbogears and tgcrud. It's far from complete, but it didn't take that long. Fleshing out the data model to include all the information should be relatively easy compared. Generating the crud pages again will take about 20-40 minutes depending on how complex it gets. But if seven people were to work on adding in the other stuff, in an organized fashion, I think we could have this app done in about two weeks time.

What I really don't understand is if Seam has all these goodies, (and the sheer number alone really impresses me, coming from a Struts background), why does it take longer to develop for it? Well, I probably do. Our group certainly isn't within the statistic norm. For most of us, this is the first time doing an enterprise application. When the code base expands, seam should keep the maintenance required fairly level, and the level of difficulty in adding more content should also be low. In contrast Turbogears is missing alot of these features. Yet setting up what we needed on a basic level was Very Very Fast (TM).

Either way, here is what we've done in the past three days.
  • We discussed a simplified version of the data model, so that we could do some RAD, rather than making sure stupid stuff, like validators for each and every piece of data were correct and functioning.
  • That was implemented in almost no time at all in SQLObject
  • Bobby pointed me to tgcrud, which I spent an evening going through, and setting up. It's buggy, it's not polished, but I got some useful starting pages out of it.
  • I put a few touches on them, and we have some barebones crud pages that will let us populate the database theoretically.
  • Using one of those CRUD pagesets as an example, I've been working on a CRUD Widget, that can be embedded anywhere almost pythonically. I'm nearly done.
The CRUD Widget is my little pet :). I was looking through Seam's and other's ideas about CRUD and realized that they leave a few questions about relationships (such as the whole OneToOne and OneToMany thing) unanswered. Let's say I'm entering information about Employees and Divisions. An employee is in only one division. The relationship is fairly obvious. So let's just say I'm going through a list of things I have to entire in, name, address, phone, payroll information, hair colour, astrological sign, favorite food and colour, most recent dream, and shoe size. Oh yeah, and Division. I go through all the rest, with little trouble, but when I get to division, i realize that he is the first person to work for the newly opened Pizza Eating division (which every company should have one.) So I click "select division, then new division" and a popup shows up that gives me a form to create a new division. I click save, get a flashed message "Division Created, word domination options available", and then go along my merry evil genious way. Having a crud widget that can be fetched from the server to show up in AJAX, or a popup or a whatever (ever hear of a flooxamble? I hear they are a popular input method of choice on gthBoxl these days).

To put this in MVC perspective, there is the model, that is the database object, in a nutshell, with metadata such as validation. There is the view, that shows how to display a view to do whatever to said model, and the controller which can push data changes from the view back to the model. It's a mini MVC component, that can be integrated almost wholesale into the app. The cool thing is that you will be able to put controller code, via python that will know how to get information from the view to the model. Likewise, there will be a small snippet of code that has to almost cut and paste into the KID file, for parsing. Finally, I want to make this generic, and templatified (I made that word up ^_^) so that I can make this simple to do via tgcrud.

What's left to do? Make complicated pages with more unique ways of looking at the data. Such as having a user login and only see information pertinent to their group, rather than just a generic list of events. There are a number of things that Seam does quite neatly to make this easier to develop. TG doesn't have them. It'll be interesting to see how far I can go in my spare time to make this work.

Happy 4th, aka declaration of presumed (falsely) right to bully the other nations of the world day!