Older blog entries for tripp (starting at number 9)

Work Stuff Dept.:

Feature Complete is a fantastic cure for depression. Not that I've reached that milestone yet, but delivering functionality always makes me feel good.

(as an aside, speaking of depression, the Buffy "Once More with Feeling" soundtrack has been in almost constant rotation in my CD player. Why I'm still using a CD player is a long story, though. Sigh.)

I was reflecting on how cool it is to be able to string together these incredible components and build useful, helpful tools for people. Over the past few nights, I've taught the Monkey (our content management system) to render PDFs on its own, without the aid of any silly print-from-Web or HTML translation tools. I'm rendering the content into an XML template, then using XSLT to transform that XML to XSL-FO, then running it all through FOP to generate the PDF.

The whole system has a lot of tweaking, robustness enhancements, and so forth to go, but the fact is that it renders PDFs now. And that is an incredibly sweet feeling.

Anyway, back to my reflection. I realized how much more rewarding programming is for me in the Free Software continuum. It's tremendously liberating for me to be able to build so easily on the work of others without always degenerating into cursing their names, skills, existences, etc. :)

Seriously, in my (now long past) days as a Windows programmer, I spent an awful lot of time with my blood boiling. I spent long, livid moments debugging incredibly opaque systems. Granted, Microsoft has made available a prodigious amount of documentation on the various shortcomings of their systems. But no amount of documentation will, in a pinch, substitute for the source. That is, as they say, the ultimate doc.

Home Destruction^H^H Improvement Dept.:

My bathroom remodeling project is also approaching Feature Complete. It's been a doozy. I'm learning all sorts of fantastic things about construction techniques in the U.S. in the sixties. I'm also learning about how leaks cause wood rot, and how many layers of tile, flooring, etc., you can pile up before it's really time to tear things out and start over.

In many ways, it's an awful lot like software development :)

The saddest part of it all is that I'm a renter. Oh, well. At least I'm a renter who's lucky enough to be married to a woman endowed with (more or less) saintly patience and endurance.

Oh, yeah, this would be a good time to point out that the marriage is still quite fantastic, even after almost eighteen months. I say "even after" because I often hear tales of the honeymoon ending after the first year. Well, I guess we chose wisely, because I still like to sit and try to figure out what I did to deserve this gift.

Philosophy Wars Dept.:

I really want to respond eloquently to the various concerns I've heard voiced by and linked from by a few notable bloggers. Add to that the recent letter (now withdrawn) suggesting "banning" the GPL from government-funded projects in favour of differently-restrictive licenses.

But I lack the energy and focus right now to do so in a manner consistent with my abilities, so I won't. I promise, as soon as I get my own damned blog up (which is a major project, because I'm not really happy with any of the tools available, which, of course, means writing code), I'll weigh in. As if anyone cares. "Does anybody even notice? Does anybody even care?"

DSL has been down for over two weeks now. Harumph.

Ilan: +1 on the "move a dumb TTY interface to a dumb GUI interface and it's still a dumb interface" sentiment. As for telling everyone to fuck off while going off on your own, it's tough. I say that having some experience doing so :)

The toughest part about it isn't building the house, it's finding a place to live while you're growing the trees. (uh, metaphorically speaking :) ). What I mean by that is this: while we're off in the hills, writing the code which will be the basis of truly great systems, life goes on. Meaning bills demand payment, code begs writing, and so on. All of that ultimately means that things need doing, and people like us are extremely likely to want to do those things on the machine. In fact, to do them otherwise would be silly, and probably piss us off.

The catch, of course, is that the whole reason we're off in the hills, growing trees for our new house, is that we don't like the accomodations we have. Not only that, but we can't find a supplier of quality timber products that meet our aesthetic, structural, and environmental impact standards. Meaning that we generally don't like the software that's out there, and don't even like the tools we'd have to use to build "better" software :)

So we can choose amongst these options (in no particular order):

  • Do things manually (like, paper and pencil manual) (Incidentally, this is what Ted Nelson does (did?) for a long while.)
  • Do things manually (like, electronic manual) in hopes of eventually harvesting the data.
  • Do things with the software we don't like, both to "get it done faster" (though not as fast as it would be with our tools), and in hopes of eventually harvesting the data).
  • Take the time to write "just enough" of the software we need to do it "close enough" to the way we would do it once the trees had grown to maturity.
  • Convince someone else to do things for us in whichever way suits them (ie: delegate).
  • Convince someone else to do things for us in whichever way suits our ultimate needs (ie: delegate but with guidelines).

Case in point: I've been working on selfish off and on since about 1997. Before the insights that lead me to the particular fusion of ideas in that, from about 1993 on, I was working on something called ev, which was basically just a semantic network (though I didn't know it at the outset). All of the pies into which I dip my fingers are ultimately connected to a unified vision of information being both everywhere and in one place (conceptually speaking). That is, I'm tired of entering data many times :) I want everything I touch to be a part of a seamless, holistic system.

My stubborn insistence on this vision has lead me to a place where I'm about two and a half years behind on basic financial paperwork (both for the tax man and for "proper" management of my business). Needless to say, that's a very bad place to be. So, with enough pressure from people around me, I finally sat down and forced myself to take a hard look at the problem space, and figure out the shortest path to my immediate goal (note: not to fulfillment of my vision, but to the intermediary goal of avoiding imprisonment).

Armed with a ruthless disregard for the purity of my vision, I decided to use GnuCash. It has a "good enough" balance of strengths and weaknesses (note: according to my vision and the standards that vision defines). Since it's GPL'ed, I know that I'll be able to harvest my data one way or another, if I even care about that when the time comes.

And so, here I am, entering reams of data from poorly managed paper files, trying to make sense of it all, and wondering exactly where I'm going to come out. Ultimately, though, I know that, no matter how painful it is, this process is getting me closer to the goal. Persevere is my mantra. Every step I take toward getting things in order is ten steps I'll have free tomorrow to put towards my real work.

I just keep reminding myself that the really great thing about the house I'm building is that it can house as many people as want to live there.

30 Jul 2001 (updated 30 Jul 2001 at 06:08 UTC) »
Things I've learned recently:

screen rocks. It's wonderful having four pine windows open, each on a different mailbox, and not having to worry about shutting them all down and opening them all back up whenever I change locations. It's also great just being able to remotely detach my laptop's session when I happen to log in from somewhere else, and catch my pine session right where I left it.

Now if we can only get this for GUIs. I mean, aside from using VNC. Though I suppose there's no real shame in that. Hmm...

Keep your books up to date. I am now in the middle of the pain of entering two and a half years of back accounting information, so I can catch up on my taxes and turn in some expense reports for a former employer. This would have been so much less pain if amortized over those years.

By the same token, what kept me from doing it as I went was a lack of tools that I considered "up to the task", and a lack of time to invest in seriously writing them. The various proprietary packages had too much baggage (beyond their proprietariness), and I didn't want to wrap myself up in that only to not be able to get my data back out when I was ready to move on or write something.

So, in a way, it's actually good that I'm doing it all at once. Even though it's a lot of work, because I'm doing it over the same few days, it's all going in relatively consistently. If I did it over two and a half years, I can see my ways of dealing with various entry challenges drifting over time.

This would be a good time to give kudos to the GnuCash folks. Even though I have nits to pick on every scale from the trivial to the Colossal with the package and the code (because I'm that kind of asshole :) ), I respect mightily the work they're doing and the size of the task they've undertaken. And, the bottome line is that, for all of my "I would do it this way" and "it doesn't work the way I want it to" blustering, the shit works, which happens to be the single most important goddamned thing to me right now.

I hope that previous paragraph comes out as the compliment I intend it to be :) If not, and you're a GnuCash developer, send me your PayPal info and I'll buy you a beer as a more succinct statement of my appreciation. Hell, even if you did read that as a compliment (and you're a GnuCash developer), send it anyway. Because, hey, free beer. Cold beer. :)

MDF is friggin' heavy. I'll post pics later, but the short version is that I got tired of trying to cobble together shop cabinets out of the random (too small) pieces of OSB I had lying around, so I went out and bought 5 sheets of 3/4" MDF, 1 sheet of 1/2" MDF, some 1/4" Luaun, and some 1/4" Masonite. All of it, piled onto a little Toyota pick-up, made the lee-springs bend entirely opposite of the way they're supposed to at rest. Of course, these springs were already in pretty bad shape. Or were they? And don't get me started about getting it all into the shop. Ugh. And this is supposed to be a relaxing hobby. Whatever.

MDF is doubley-friggin' dusty. I suppose, for the benefit of the non shop-inclined out there, I should recap what MDF is. It stands for Medium Density Fiberboard, and is a manufactured sheet lumber product that has excellent dimensional stability (ie: doesn't warp, swell, etc., with changes in humidity), machines very well (ie: routers and table saws love to chew it up with nice, clean, precise edges), and takes paint very well.

The problem is the very reason it machines so well: it's made up of highly compressed, very small wood particles. This is not that particle board crap that all of the crummy furniture you buy at Wal-mart is made from. This is like cardboard dust (yea, dust) that's been packed together with adhesive. So when you machine it, you get back cardboard dust. And it gets everywhere. I had to go get a special bag and HEPA filter for my Shop-Vac(tm) just to suck it all up without stopping every five minutes to clean the filter.

Plans are helpful. For the aforementioned shop-cabinets, I went all-out exhaustively anal in planning them. I fired up Visio (yeah, I know, I'm a bad person) and laid them out in excruciating detail. I made a sheetgoods cutlist, along with little machining diagrams to tape to each piece as it went through the shop. When it finally came time to run everything through the sharp, fast-spinning things, it went down without a hitch. I was incredibly surprised, because my entire woodworking history to date has been a serious of fuckups :|

No, really. Plans are helpful. Of course, there were a few things that I decided to "free-hand", because I hadn't completely finished the plans in one or two minor places. Want to guess what happened? Yeah. I fucked it up. Sigh. Fortunately, as I mentioned, they were relatively minor details, and I managed to hide them well enough :) But still, it's annoying.

I should start woodvogato.org, for the two people other than me that actually give a shit about free software and woodworking :)

Ah, well. Back to the bookkeeping grind. Soon, I'll be in good with the tax man again, and will be able to focus my energies on software instead of vague, unidentified worrying.

Obligatory Douglas Adams Note:

As revealed to Arthur through the Scrabble tiles in Life, the Universe, and Everything, the Ultimate Question is "What do you get if you multiply six by nine?" Those of us steeped in basic arithmetic since an early age, of course, dismiss this out of hand without thinking too hard about it.

However, I'd like to point out that it works if you do the math in base 13, which is somehow quite appropriate.

Farewell, Mr. Adams. I already miss the works you'd yet to make.

Personal Life Dept.:

15 days and counting. Two weeks from tomorrow, I will be married. The last time I went through this process (being engaged), it was two years away and I woke up every morning feeling like I needed to puke my guts out.

That was because it was the wrong relationship.

This time is totally different. Each day that passes, I get more excited about the impending ceremony! I'm pretty sure that's a good sign :)

Geek Issues Dept.:

In the "License Wars" department, I read this article talking about Ransome (Caldera) Love's agreement with Microsoft's "claim that the GPL doesn't make much business sense."

In much the same way that anti-rape laws don't make sense to someone looking for sex at any cost.

I don't mean to trivialize rape by that statement; rather, I mean to exploit the obviousness of that concept to explain what can be esoteric and abstract licensing issues.

Microsoft is absolutely right: the GPL doesn't make business sense-- for Microsoft. They can't steal your code if you release it under the GPL. They have to play as an equal partner. They have to share.

The GPL does make business sense if you're considering how to open up your own "intellectual assets" for public consumption. If you release your sources under a wolf-in-sheep's license like the early Apple license, you'll hear a great hue and cry from "the community". If you release your sources under a Libertarian[1] license like the BSD license, you expose yourself to competitive disadvantage when someone else wraps their extensions around your code and closes up the whole mess.

Under the GPL, when you decide to release your work, you're not doing it "for free". You're doing it for compensation in kind. You're saying "you can stand on my shoulders, as long as I can turn around and stand on your shoulders" (I'm trying to picture that, and it's painfully recursive, but I think you know what I mean).

You are saying, in effect, "I'm giving you a competitive advantage by offering you my work, but I expect that advantage returned by equal access to your improvements on my work."

As with all things, this is a choice. You choose to release your source under the GPL. When I choose to use your GPL'ed sources, I have chosen to share equally with you everything I link to your code; all of my improvements.

Returning to my earlier analogy, that sharing is consensual sex.

On the other hand, when you decide to release your source under terms that don't bind me to share, you open yourself to intellectual gang rape. As an individual, I can take your software, make my own improvements, and close it up. I'm not much of a threat to you that way, because we probably have similar resources at our disposal, and my closed model will likely fall to your open model at the end of the day, because your customers will have the security of knowing they can always pay someone else to continue your work.

On the other hand, if I'm a large corporation, and I'm threatened by you, I can use your more permissive license as leverage against you. I have might. I have numbers. I have a marketing engine that can convince the public that you "were asking for it". And I can take your code, make incompatible modifications, release it in closed form throughout my entire installed base, and give you little chance of fighting back.

Again with the analogy, taking is rape.

In the end, I choose the GPL not because I'm afraid of what individuals might do, but because I've seen what corporations will do.

I choose the GPL because no means NO.

Footnote: "Libertarian" Licenses

I call the BSD license family "Libertarian" here because it depends on the individual responsibility and ethics of each member of the community. In politics, I lean toward Libertarianism. However, I see the same problems with it here in the licensing world that I do in the "real" world; namely, that unscrupulous people can and do wield influence far out of proportion to their number when the head large, cash- and power-rich corporations. Ultimately, I'd really like to see a union of the Green and the Libertarian Parties into one killer third-party that could mop up the Republicrats.

Reading Dave Winer's Scripting News seems to bring out the writer in me. I'm not sure precisely what nerve his work touches, but it encourages me to speak in my voice, and tell my story. I'm not saying my story is particularly exciting, newsworthy, or worthy of your rapt attention. I'm just saying that it needs telling, even if it's just to stroke my own need to tell it.

Then again, opening up our thoughts and feelings through our words might be just as important as opening up our ideas through our code. Ultimately, we're all part of a great conversation. I've suddenly reminded myself of Jonathan Carroll's incredible Outside the Dog Museum. I don't want to give it away, but it deals with the Tower of Babel myth. Carroll indirectly suggests that architects' duty is to draw humanity back together through our work, and to ultimately celebrate our shared divinity in a common language.

If that's part of what we're doing, sign me up. I never wanted my life to be about small things, anyway.

It's official! I'm engaged to the best girlfriend I could possibly imagine. This is my second time being engaged, but I took my time, this time, and I believe we're taking this step for the right reasons.

The engagement announcement brings with it a funny story. Well, I say "funny" in the euphemistic sense one uses when one can do little more than laugh at a situation so far out of hand. I won't bore you with the details, but let's just say that, since an incident in the eighth grade when a teacher put her job on the line to cover my lie, honesty and integrity have been exceptionally important to me. My commitment to integrity means that I work very hard to make my thoughts, words, and actions consistent. I often describe this by saying "if I'm lying to you, it's because I'm lying to myself."

I have never been one to blindly follow tradition. That's not to say I don't follow traditions, mind you. I just choose which ones I follow carefully, and with an eye toward whether or not I believe in their innate value. Speaking in the terms defined above, that means I can't follow a tradition just to follow it, I have to believe it.

To make a long story short, after much discussion, we decided that a reasonable compromise between what I wanted, what Irene wanted, and what we knew her father wanted, would be for me to ask for his blessing on our engagement. I regarded that as perfectly reasonable. The more people that are rooting for you, the better you're likely to do. It's an energy transfer thing. What I absolutely would not do was ask for permission to marry. It's not that I don't respect the man or his traditions, it's just that my asking his permission would not have been an act of integrity, because I don't believe that I (or we) need his permission. There's no point in asking someone's permission when you know you're going to bloody well do it no matter what they say. You might apprise them of your intentions, but if you're going to do it anyway, I believe that falsely asking for permission is, in fact, quite disrespectful.

So I asked for his blessing, and got it (along with an earful about how our current living situation isn't right). The next day, after watching a lamb roast on a spit all day (which, incidentally, is very fascinating), we extended the olive branch a foot farther by asking him to do the honor of announcing the engagement to those gathered for Easter. He said (emphasis mine):

Tripp and Irene have very honorably asked for my permission to marry, and I have given it...

Oh, well. We tried. It really doesn't matter, ultimately, but it does illustrate what we're up against.

I'd talk about technical things, but all I've done is fight fires and fix mistakes all week, which hasn't been very rewarding. Well, I did get some serious hacking done late last week and over the weekend on p4.py, a library for writing scripts against a Perforce depot in Python. Like all of my code, it rocks mightily, but is not ready for release :)

I should point out that I'm an Aries. Not just any Aries, either, but an Aries born right at the apex of the Aries cycle (April 6th). It's nice work, if you can get it. Well, I enjoy it, anyway. But, if you follow these things, you know that we're entering Taurus now, which is good, because Taurus finishes things, and I have a lot of crap that needs finishing! In fact, I need about a whole year of Taurus energy to catch up :)

I renewed my hatred for all things Windows this evening when I actually tried to do something with it. You see, in my dark, sordid past, I was a Windows developer. No, that's not quite accurate. I was a Windows zealot. Seriously. I used to rag on the Unix-heads at Interop, saying that NT was going to eat their lunch.

Here I am, a decade later, having matured. I now realize that all software sucks in its own, special way, and that we must choose which particular combination of suckage we want to embrace.

I tried to install StarOffice this evening on the snazzy dual-processor, half-gig of RAM, forty-bazillion gigabyte of disk monster machine that work sent me. You know, the one Irene reads her email on because I do everything on my laptop :)

Anyway, this monster runs Windows 2000, which, I must confess has been more stable and certainly prettier than any Windows incarnation I've had the displeasure to bend to my will. It runs Windows 2000 because my ultimate task for my present employer is to write a pretty wicked set of tests and benchmarks for some Java stuff, and I have to deploy my test suite on many platforms. Dur.

So, until I get to a state where I need to use it for testing, that box is essentially relegated to:

  • Surfing raverporn
  • Reading email
  • Downloading images from the digital camera
  • Watching DVDs (for novelty value and screenshots; I have a real DVD player for chillin').

Back to my story... Irene says she needs to work on her resume, and I don't have any "real" office suite loaded on that machine. So, being a reformed Windows luser, and an affirmed Free Software Zealot for quite some years, now, I go grab StarOffice. She's used it before, under Linux, and it's now open source, so at least I have the peace of mind that comes from knowing that, if I have the time, I can fix it :)

Have you played with "junctions" under Win2k at all? They are Microsoft's answer to symlinks. I'm not sure why they couldn't call them symlinks, but that's another story. Anyway, I never liked that whole C:, D: crap, so when I formatted another partition of the mammoth drive for Win2k's use, I went ahead and mounted it under c:\big_disk, instead of giving it its own drive letter. I figured that would work well for me. Sort of a "Unix" feel to things.

Tonight I go to install StarOffice, and the damned thing keeps complaining that there isn't enough space on drive C. Of course not! That's why I was putting it into c:\big_disk. But apparently, the StarOffice installer hasn't yet caught up with the notion of "junctions", so it didn't realize that c:\ had 99MB free, but c:\big_disk had 3.75GB free.

I can forgive StarOffice for that. After all, I have the source, so if it really chaps me, I can fix it. That's the kind of freedom I appreciate. What torques me is what happened next, when I tried to clean up.

I figured "well, gee, there's all this crap in Program Files, so maybe I can just move that over to c:\big_disk and make a symlink back so everything can find itself". So I started copying. Well, as you might expect, it didn't want to finish copying because some of the things in Program Files were locked by apps that were using them. No matter that the only apps I had running were Command Prompt and Explorer. Oh, wait, did I say Explorer? Right... Frigging plugins. You know, OLE/COM/ActiveX/?? objects that extend the Explorer interface to handle different filetypes, different actions, and different presentations? I mean, it's cool technology, but all I want to do is copy my files!

So I figure, "hmm, maybe Win2k has a decent safe mode in which all these extensions are shut off, so I can copy the files around without tripping over dependancies". So I reboot. What? Reboot Windows? Never...

I obligingly hit "F8" during the austere pre-startup screen. I'm asked which particular kind of non-standard startup I want. I pick "Safe Mode with Command Prompt", figuring that's as close to single-user as I'm going to get. Windows boots, and I get a 640x480 GUI with a single window that can only be described as "frickin' huge". Or, as Irene said, sarcastically, "can you make it any bigger?"

"Cool," thinks I, "I have a single-user prompt, basically." So I start out with the obvious command: move "Program Files" big_disk and am rewarded with Access denied. I won't bore you with the entire saga, but suffice it to say that I went through a few variations on the theme before I said "fuck it" and rebooted.

Ultimately, I managed to clear up enough space on drive C itself that I could install StarOffice onto big_disk without further ado. But what I want to know is:

  • What's so hard about single-user mode?
  • Wouldn't it be easier to use the built in character generator in the video card, you know, text mode?
  • Why the fuck does Microsoft still exist?

Seriously. I mean, in fifteen minutes of trying to do something ultimately quite reasonable, and even being willing to knock back down to single-user mode to do it, I was unable to. I'm not exactly dumb as a turnip, here. My blood pressure rose alarmingly quickly, and I've spent the rest of the night trying to bring it back down. Two years ago, I kicked the Windows habit and never looked back. Now I remember why. At least with the source I can only blame myself, ultimately.

Last week rocked! I tried a new (old) approach in which I tell everyone to fuck off except for the one project that has my entire focus. It worked, and I cranked out a bunch of work on my Python libraries for manipulating Framer-D knowledgebases. It's a very satisfying feeling to end the week by posting a flurry of patches to a once-dormant sourceforge project (fdpp, in this case).

This week started off bumpier, with Monday being a "do-nothing" day, and Tuesday being devoted to firefighting unrelated projects and building a cabinet in the shop to unwind. Yes, it's an ugly cabinet. I vowed to clean up the shop using only materials on-hand, at least until I exhausted those. Thus OSB. Thus ugly. But it holds stuff, which is what a cabinet is for. Once the crap is off the floor, I'll build pretty cabinets for the kitchen.

I forwarded the Objective-C article to Chuck, because he was an Objective-C weenie for a great many years (weenie, in this context, being a compliment). He was a little peeved at not being able to post any of his insight, so please join with me in certifying him as something useful. He is, after all, the lead developer on Webware for Python, a web application development suite that's going to eat Zope's lunch :)

I hope to make a preview release of the Python libraries before I leave town for Easter. Part of me whispers "ain't gonna happen", but the rest of me holds out hope. If not before I leave, then definitely when I get back. I've learned some wicked tricks, and I don't think the Python people are going to like me very much :) I'm not sure Guido ever intended anyone to change ob_type on the fly, but I am.

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!