About five years ago I began working on what would/should have become
the re-write of packages.gentoo.org,
dubbed "P2". Back then the best non-Zope web framework for Python was agueably
Quixote. This is the framework I used to write P2. Well, a lot has happened
since then. I resigned as a Gentoo developer. Quixote has pretty much fallen
off the radar, and Django is at the head of the Python web frameworks. I've
always wanted to port P2 to a more modern platform, but just never got around
to it. Well over the weekend I stared playing more with Django and began creating
an ORM model for ebuild/database gateway that I used for P2. It wasn't too
long before I had Django models, and an interface script that could crawl through
the portage tree and create and destroy Category, Package, and Release models, as
well as the custom "Metagory" class that I created for P2. Most of crawl code
was ported directly from P2. I created a new Ebuild class that represents (a
subset of) an ebuild, and the crawl code does the CRUD on the database using the
Django ORM. It seems even faster than the manual SQL code I wrote 5 years ago and
it's all awesome deliciously sweet.
Well, tonight I thought I'd work on the views. This actually required a little more work, as the Django template engine is very different from the Quixote PTL engine. A bit of analyzing, copying, cutting and pasting and voila!
A year or so ago I started working on a program for my personal use called PkgWatch. PkgWatch basically "polled" free software sites and kept up with the latest releases of software. So, for example, I could run pkgwatch gnome totem to find out what the latest version of totem was on GNOME's web site. Basically I wrote an interface for classes I called "Watches" (which I plan to rename to "Sites"). A Watch class implemented the Watch interface. The interface basically required a FTPServer or HTTPServer class and various functions, such as get_latest_version_of(). PkgWatch can be extended simply by creating a new class that implements the Watch interface and dropping the module in a directory. In addition to the command line frontend I wrote a site crawler that would produce outupt in RSS or HTML format. That worked fine for my needs.
Recently I have been having fun learning Django. I thought a web front end to PkgWatch would make an interesting project. Enter PkgWeb. PkgWeb is just that, a web frontend to PkgWatch, though PkgWatch is (still) completely independent of PkgWatch. Keeping them seperate allows me to work on them independently, but it also helped me realze some design flaws I had made with PkgWatch and so I've been improving PkgWatch as I go along.
PkgWeb is far from done, and do to my short attention span may never be. But I have already gotten most of what I wanted to see done in just a few days. I'm able to get a listing of the Sites, then I can delve into the sites and see what Products are hosted. For each product I can see what Releases were found and then look at the details for the release. This is pretty much the same stuff I did for packages.gentoo.org, especially with the P2 code which was never rolled out. In the case of PkgWeb, it is idepedant of the distro and pretty much has the same functionality.
I may release PkgWeb (and PkgWatch) if it ever matures and if anyone shows an interest. In the mean time I'm having fun developing it and especially learning about all the cool things Django is capable of.
<thechris> what is the replacement for ivman
<marduk> ivwoman can do the work of 2 ivmans
<thechris> there is no ebuild to satisfy ivwoman
<marduk> thechris: there is no ivman to satisfy ivwoman either![]()
The people at Sushi Zushi
love Debian Linux soooo much they decided
to adopt the Debian logo for their own
I got word of the linuX-gamers.net Live DVD and thought I'd give it a whirl. Not that I'm a hard-core gamer or anything. I usually don't have the attention span to play games. I think there were only three games that I ever got "hooked" on: Civilization (the first one), Total Annihilation, and Need for Speed: Porsche Unleashed. Now those games rocked, or at least they struck me in some way that I could not put them down. Every other game I've played pales in comparison. But I've been seeing games on Linux get a lot of attention these days so I decided to see for myself what's going on.
Back in the good ol' days of Unix utilities printed as little information to the screen as possible. Usually a utility was totally quiet if it ran successfully. Just look at the cp, rm or even rpm commands. In the old days this was done primarily because Unix boxes were often connected to terminals via slow serial connections. And the design concept was to save as much terminal bandwidth as possible. I guess I've grown accustomed to this traditional Unix philosophy and therefore become annoyed by the increasing number of "modern" utilities that do not abide by it.
A good example of one of these "noisy" utilities is Gentoo's emerge utility. By far the most annoying "feature" is the spinner. In my opinion spinners should only be used in web browsers and X cursors (if there). Definitely not in command-line utilities and definitely not by default. There is, of course, the --nospinner flag, but this should rather be renamed as --replace-annoying-spinner-with-annoying-dots.
There is, of course the --quiet flag. In my previous experience --quiet seemed to be only useful when used with emerge --sync (ironically, adding --quiet to PORTAGE_RSYNC_OPTS does not work. But now it appears that --quiet does work to suppress some other forms out output, for example error messages which is what one usually does not want to be suppressed. If your portage tree, for example, has inconsistent digest files and you attempt to emerge --quiet a package, emerge will silently fail to install the package. You have to figure out it did this, and then re-emerge without the --quiet flag to actually see what the error was. How annoying is that?! This isn't nit-picking. Errors should never be silenced unless done so by explicitly redirecting stderr. That's one Unix design concept that should never be broken.
A desirable feature for emerge would be something like, for example rm -i. emerge has a similar --ask flag and I find it very useful. If you use it with the --verbose flag you even get to see what USE flags are in effect for a given package. But, understandably, you can't use the --verbose and --quiet flags simultaneously and so if you want to see the USE flags you must also put up with the spinner.
emerge also, by default, spits out copious amounts of messages regarding patches being applied, files being installed/removed, tests being applied, QA and debug messages, etc. These, in my opinion, are more appropriately left silent unless a --verbose or even --debug flag was passed. It could benefit from Python's logging utility which gives the user/programmer a lot of flexibility over what gets printed (and where). Of course all this output scrolls by, and users either cannot or choose not to read them. Meanwhile, important einfo strings get lost in the print storm. This is not only annoying, it's downright frustrating.
Surprisingly, things like this are not solely emerge issues. There are other "new style" utilities with the same behavior: by default the stdout pipe is connected to the kitchen sink and then they try to make up for it by providing a --quiet convenience flag, but this flag many times suppresses errors. This seems to be a sign of the times. Maybe I'm just old fashioned.
If my CIA stats are any indication, and they are, it would appear that I haven't really worked on Gentoo stuff in a while. My participation with Gentoo pretty much reflects real life for me: one minute I'm very visible and active and the next minute you'd think I dropped off the face of the earth. Well I'm trying to work on that (both real-life and Gentoo sides and I thought of some ways I'd like to do that (for Gentoo at least):
A few weeks ago I had the misfortune of having 2 hard drives die on me simultaneously on blackwidow. I have an LVM2 setup with no redundancy, so this means I pretty much lost everything. Fortunately I make monthly hard copies of my configuration and daily backups of everything important, but those backups are to an old and slow DDS3 drive. I knew this was gonna be an all-day thing.
I wrote mthemer plugins for the ish theme (both GTK and metacity). Well I had that going for a while and then I heard about the Clearlooks cairo patches. Well I quickly jumped on that and added the animation and colored scrollbar features to the ish theme. I'll later add it to the regular Clearlooks plugin. Oh and I also need to make the new features an option as it will break for unpatched Clearlooks engines.
Result of mthemer --set ish_gtk --set ish_metacity --options=factor=0.8 random random
This is what Hell sounds like:
$ cat Hell.sh
# using alsa & dmix...
sleep 1
mpg321 -q -o alsa "$1" &
$ find Music -name '*.mp3' -print |wc -l
141
$ find Music -name '*.mp3' -exec sh Hell.sh {} \;
This is how Alien vs. Predator should have ended.
Lots of changes to the P2 code, among them:
I will be in Chicago and away from the keyboard for the next few days...
Although I am officially /away I did manage to get some work done on the new packages.g.o code. Most notably is the the addition of icons that Alexandre Rostovtsev was so generous to contribute. I also rewrote the code that determines whether a package is "new". It's so much better that it might actually work this time.
I also played with the CSS a bit and made some improvements to the changelog parser. There are a few other internal changes that aren't visible to the user.
I still haven't started on the RSS and search engines. Once those are finished the new code will have all the features that the present site has. Then I'll get to work on the "new" features. I probably won't get to this work for a month or so.
Well, it took me a couple of days but I managed to get "GNOME 2.12 Beta 1":http://gnomedesktop.org/node/2335 , aka 2.11.90 to build on Gentoo [1]. I ended up making a bunch of ultra-poor-quality ebuilds. I first attempted to get "GARNOME":http://cipherfunk.org/garnome/ to build, but it hates Gentoo. When I finally managed to get all the required GARNOME packages to build, most GNOME apps segfaulted or simply didn't work because of the conflicting libraries between Gentoo and GARGNOME. I don't think GARNOME is very Gentoo-friendly.
So next I just tried building my own ebuilds since "BreakMyGentoo":http://www.breakmygentoo.net/ has been inactive for awhile and I really wanted to see the new code.
I'll tell you what I did, but if you wanna try this yourself do so at your own risk.
David Christian Berg, author of the "eXperience GTK theme":http://art.gnome.org/themes/gtk2/1058 emailed me showing interest in mthemer, specifically the eXperience plugin. I found that very flattering considering it's his masterpiece and I'm only making quick-hack changes to it.
A number of people have shown an interest in mthemer. I haven't released it because it's not done. It does work but it's just not finished. I haven't written any documentation, tidied up the plugins, finished the GUI, etc. etc. But since all of that may never happen, I am releasing a pre-release of mthemer. You can find it at the "mthemer page":http://starship.python.net/crew/marduk/software/mthemer/
I did start working on a GUI last week. It will be cool when it's finished. You should be able to create your own looks and export them to XML. Whenever it gets done. This is really my first GUI program and, although pygtk does a great job, I find GUI programming tedious, at least for me. But it can be fun. I have enclosed a screenshots of the 2 widgets I've pretty much finished.
Ok the current "packages.gentoo.org":http://packages.gentoo.org/ has a table after each ebuild that displays various information about it. The new code is getting rid of most of that, choosing to be less tabular and more hierarchical. I would still, however, like to have "Homepage", "Changelog", "Bugs" and "Forums" links included for each ebuild in the listings. But this time I would like to use icons rather than the plain text table. The problem is I'm not artistically inclined to be able to do nice icons. So I'm calling for a volunteer who can whip up those for icons and contribute them to the site. I'm looking for something probably similiar to the "freshmeat":http://freshmeat.net/ icons as far a size and appearence (though a little bit of color might be nice).
Anyway, if you would like to submit anything you may send them to marduk at gentoo dot org.
"packages.gentoo.org":http://packages.gentoo.org has long had two "minor" problems displaying package data.
One was that when you display data about a package you want to tell what license the package is under. But licenses are related to individual ebuilds and not the package. The current way of doing it is that the 'license' column is in the 'package' database. What license is displayed for a particular package is whatever license data was applicable for the last updated ebuild. This is an innacurately portrays the package. The simple solution is to remove the 'license' column from 'package' add it to 'ebuild' and only display the license data for the particular ebuild. When a user is looking at a package he/she will need to select a particular ebuild to see that package.
The problem I've always had with that is, usually when people talk about licenses they talk about packages not particular versions of packages. People want to know what package 'xchat' uses, not what license 'xchat, version x.y'. So it would be bad not to display that information with the package as well as the ebuild.
The solution I chose for the new packages.g.o (P2) is to have the package page display the union of the licenses for all the ebuilds as this "illustration":http://starship.python.net/crew/marduk/files/licenses.jpg shows.
The other issue is with home page updates. packages.gentoo.org only updates the home page when there is a "new" ebuild, basically new revisions and version bumps. However, sometimes the home page for a site changes when there is no new updates. The portage devs make changes to the ebuilds, but there are no bumps, so the package.g.o database never gets upgrades. It's inconvenient for the user because the database is not reflecting current data, but it is also inefficient to have to look at every ebuild during the update interval to see if the home page has changed. My solution for this is to have a utility script that will less periodically (say twice a day) update the package database to reflect the home page of the most-recently update ebuild for a given package. This code will also eventually find it's way in P1.
Since these two items are the bulk of the bugs and complaints I hear about the site, I hope this will satisfy most people's wishes.
Now for dependencies and 'USE' flags...
Have you ever spent hours working on a Python program just to improve your "pylint":http://www.logilab.org/projects/pylint score?
Also I closed "this bug":http://bugs.gentoo.org/show_bug.cgi?id=99835 and opened "this one":http://bugs.gentoo.org/show_bug.cgi?id=99924 .
OMG I heard this on my answering machine when I got home today.
This would also be my first (attempt at a) podcast using mardiblog which is a recently added feature.
I had this running on my machine for a while now, but never got around to releasing it. "Version 0.2 of mardichat":http://starship.python.net/crew/marduk/software/mardichat/release/mardichat-0.2.tar.gz fixes mixed-case issues with nicks and adds color to output.
See the "mardichat page":http://starship.python.net/crew/marduk/software/mardichat/ for more information.
Made some various changes to my "blog":http://starship.python.net/crew/marduk/ (I wrote my own blog engine I call _mardiblog_).


11 July 2005 is World Population Day. What's wrong with this picture?