John M is a Linux fan in Lowell, MA.
I work at at a local company writing software. I fool around with Free and Open Source software for fun.
I am an avid Last.fm user.
Most people who come to this site are searching for the Python Taglib Tutorial, others are interested in the Kubuntu Wireless page. Please note that currently this site is a Work in Progress as the software that builds this site is under heavy development.
Every time I reboot my server machine something explodes. It's my own fault, but its still annoying. This time I found out that the newer versions of udev really don't work with the deprecated SYSFS stuff. I found out because my system wouldn't create /dev nodes for /dev/sda1 and the like. I had to manually futz with udev to get the devices in dev, then mount the file systems, then ultimately I downgraded to udev-149.
I knew that version worked and found a bug (http://bugs.gentoo.org/show_bug.cgi?id=302173) with a similar issue. I know the right way to fix it is to build a kernel, but I wish the warning the udev ebuild printed was a little more prominent - maybe print something like : "No, Seriously this version won't work at all with the old SYFS layout, you jerk".
Maybe then I would have paid attention. :-)
So I've been hankering to try a new distro for a while and after a few false starts in years past, I'm now running Fedora on my laptop. Fedora 12 is the first version I've simply been able to boot up with and have it just load and work without strange glitches. Even the much maligned (by me) NetworkManager is working quite well. Hibernate works, but there is a minor "scrambled" screen before it loads. Other than that, I'm pleased.
Following a couple blog posts got me up and running with the multimedia stuff that the stock distro does not supply. All-in-all it took me very little time to get stuff working well. I'm even all KDE 4.4-up. Aside from my second Kubuntu install from years ago (I think it was a 7.x, but I'm not sure) this has to be one of the bet Linux install experiences - especially counting the post install "get the environment the way I like it" work.
Today is a crazy day at work, because we're launching our product beta to the world. The Nasuni Filer provides a local network filesystem (CIFS) that is backed by cloud storage, and the user can choose what cloud vendor to use. Files are encrypted remotely and snapshots are automatically made available.
I won't say what parts I worked on. At least not until its been out there for a while. :-)
Everybody is hopping around looking at a monitor we set up to show who's signing up and downloading filers. Let's see if I can get some work done today amidst the excitement.
So I finally got to a point where I could no longer stand the software I wrote to generate this website. So I redid it, it has a significantly simplified core and I swapped the old Zope-Style page templates for the jinja2 templating library. I like Jinja and I've been doing a lot of Django stuff at work, so it makes sense for me.
I also use some standard library modules where I had been using custom code before. It is always an interesting experience to learn about something like that, a little bit deflating though. :-)
I don't write the code for this site for any other reason than fun. I get to learn a bit and keep coding at my own (snails pace) schedule. Now that the code is all nice and shiny I wonder if I'll have to write more often, not that I'm promising myself anything.
Just read this article: How “Intellectual Property” Impedes Competition. Which I thought was very interesting. I especially like: "Real, tangible property rights result from natural scarcity and follow as a matter of course from the attempt to maintain occupancy of physical property that cannot be possessed by more than one person at a time."
I think this is why people who defened very strong IP regimes by comparing to real property rights are not making a good argument. I don't totally agree with the article either but I always like to read arguments for limited IP with pro market perspectives.
If you are interested in distributed version control, buy Mercurial: The Definitive Guide by Bryan O'Sullivan at your first opportunity. I had a chance to make some corrections and suggestions at the online copy so I know it's good. :-)
And while you're at it download release 1.3 with the latest and greatest features and fixes.
The good news starts off with the release of Mercurial version 1.2, in which my largest contribution becomes part of an official release. Now people who have multiple branches (probably named branches) that are unwanted can close a branch. As with normal operation in Mercurial nothing gets deleted, as that would change history, instead a new commit flags the branch as "closed." A closed branch can then easily be ignored by commands or tools. The heads and branches commands can be set to skip displaying the closed branch.
The other big thing in the release that is relevant to me is the addition of the pure-python modules. The parts of Mercurial that were covered by C modules now have python equivalents. I like this for a couple of reasons, it makes it easier for folks to try running on Jython or PyPy or other similar platforms. I also like it because python is (for me at least) easier to read than C. Now its easier to get the gist of a module before seeing the work done to speed it up.
Next up is the pleasant discovery of matplotlib a graphics & plotting library for Python. Or, I could say re-discovery because I think I ran across it a while ago but forgot about it. Now that I need to draw graphs with lots of data points for work, I think this lib will really come in handy. The result even looks pretty.
My self-made tool for partially synchronizing my music directory between desktop and laptop is making some good progress after being dormant for a while. The "pull" and compare functions are working but I still need to implement a "push" operation. The tool is heavily influenced by the Mercurial cli and even some of its code structure. I will probably will make the code available, but don't plan on advertising it too much. The "database" structure isn't a generic one with wide application.
For the whole month of January I've been putting off writing an entry. I keep meaning to come up with something more substaintail then the average entry. But I do have some good news, I've got more patches in Mercurial, got even more new music, just tried KDE 4.2 which seems pretty sweet so far, and seem caught up on most of my outstanding tasks.
I'm still failing at being a Cool Internet Guy... but that was to be expected. In order to taunt myself I want to make a list of things I plan on writing about. This may (or may not) motivate me.
Hypothetical business ideas
Why I like filesystems over databases
Mercurial's general awesomeness
My ideal Linux distro
Books I've been reading
I've taken the week off. It's not company policy, I don't have to, but I always feel idle at work when coming in during these odd short weeks. The worst is the day after Christmas, I've done it before and didn't enjoy it. If I was deep into a project where I could work independently for a while it would be different, I think. Anyway, with a free week I can catch up on some reading... I haven't read a whole book since this summer.
Since I don't feel like doing anything difficult, I will very briefly rate the CDs I received as Xmas gifts:
Made Out of Babies - The Ruiner [4.5/5] - The vocals are both frightening and inviting at the same time. :-) Favorite tracks: Cooker, The Major.
Dillinger Escape Plan - Ire Works [4/5] - I love the pseudo-pop and Patton-esque parts... of course I like Patton's music so I guess that seems to make sense. Favorite tracks: Black Bubblegum, When Acting as a Particle.
Deadbird - Twilight Ritual [3.5/5] - I haven't listened to it enough to make a solid decision, but its pretty decent. Got it on a whim, due to Amazon recommendations.
Well, Python 3000 is done and 3.0 has been released. I like a lot of the changes that have been made to the language. My favorite is probably the change to make print a function, I've run into many situations where I would have like to create a class with a print(...) method but had to settle for a less convenient name.
But today, I'm not here to be positive. I'm going to gripe! Or a least express a little bit of skepticism. So far there are two things about the change that I don't quite like. There is the removal of the callable(...) function. This is minor, but I really don't get it. Maybe I'm weird in that I was using it pretty often. But it's easy to deal with, just create my own utility function that does the same thing.
Less easy for me to just deal with, is the change to unicode strings everywhere. What bugs me isn't that unicode is used as the default, but that "regular" byte strings have been sort-of deprecated. sys.argv, sys.stdin and sys.stdout are now "text" based which really doesn't make sense on Linux/Unix systems. How the hell does the language know that I'm not piping in binary data? I wouldn't be bothered as much if there was a bytes equivalent open by default (rawstdin or some such). I guess I can do something like: "os.fdopen(sys.stdin.fileno(), 'rb')" but that seems quite clunky. The old model was simple on unix-like systems, it was obvious and straightforward.
I hadn't thought much about the issue until I read some messages by Matt Mackall, the creator of Mercurial, who was complaining about the change. Personally, I would've gone with byte strings, that always have an attached encoding which is always defaulted to UTF-8 everywhere. :-) The fact that there is more than one way to represent unicode "text" makes it hard to know what the original byte stream was. This is too bad, because it's nice to be able to write stupid programs.
© Copyright 2009-2010 John Mulligan
Every blog page or article on this site is available under the CC-BY-SA license unless otherwise noted.