Recent blog entries for tripp

Misdirection. Sometimes it's not actually a .NET problem:

If you're using Mono's System.IO.Ports.SerialPort on Linux, and you're getting the System.IO.IOException "Invalid argument", it might not actually be the class library implementation. Check your serial adapter (assuming you're using a USB-to-serial adapter...) I'm using an adapter with the MosChip 7720 chipset:


usbcore: registered new interface driver usbserial
USB Serial support registered for generic
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial Driver core
USB Serial support registered for Moschip 2 port adapter
mos7720: 1.0.0.4F:Moschip USB Serial Driver
moschip7720 2-1:1.0: Moschip 2 port adapter converter
detected
usb 2-1: Moschip 2 port adapter converter now attached to
ttyUSB0
usb 2-1: Moschip 2 port adapter converter now attached to
ttyUSB1
usbcore: registered new interface driver moschip7720

When opening the serial port, System.IO.Ports.SerialPort indirectly calls SetSignal, which calls the TIOCMGET ioctl, which, as it happens, ISN'T IMPLEMENTED in the mos7720 driver! Harumph.

There's a patch, signed off by both Alan Cox and Greg Kroah-Hartman, but it doesn't seem to be in the upstream, yet.

Patch: Fix the tiocmget/mset handling on the mos7720 USB serial port.

I started at Virginia Tech in August of 1991. Except for a six months in 2005, I have lived in Blacksburg since then and been a student off and on throughout that time. I am working on my Ph.D., but am still, technically, an undergrad.

Throughout all of these years, I have told people that "I go to Virginia Tech, but I am not a 'Hokie.'" I acquainted that term with the mascot, the "Hokie Pride" phenomenon, and, generally, team sports. As with many in the geek community, I've never really been much on those concepts.

The tragedy yesterday changed all of that. Yesterday, I became a Hokie. Today, I am a Hokie. Tomorrow, I will be a Hokie. Now, I am forever a Hokie.

Google Juice:

I've written up a page describing how to deal with this compile error:

`CONFIG_X86_L1_CACHE_SHIFT' undeclared here (not in a function)
under Mandrake 9.0 or other Mandrake 9.x series distros.

I wrote the page because I spent quite a while last night searching and found lots of references to the problem, but none to the solution. When I figured it out, I thought it'd be a good idea to add the solution to the search results.

Code:

I've mentioned before how fantastic it is to stand on the shoulders of the community and reach where I mightn't have otherwise.

Tonight is another one of those moments for me. Sure, sure, it's a duct-tape moment. I've taught the Monkey how to speak WebDAV to some limited degree for a demo. With the help of mod_dav, dnotify, and some Python glue, it all does enough for our demo, and our demo will get us the contract to build the more robust system (and that will in turn get use closer to the goal of releasing the whole thing under whatever license turns out to be "possible" given the soup of pieces it uses right now).

So, once again, gherlu'meH QaQ jajvam! ("Today is a good day to code!")

But tomorrow, well, tomorrow is a good day for meetings! (the good kind, in which we put ourselves in the path of oncoming work and present as big a target as possible).

Buffy:

Wow. That was sorta like the "only two episodes left after tonight so let's all get it on!" episode, wasn't it?

Life / Family:

I called dad to wish him a belated happy birthday, since he was out of town on the day of. It was a really good chat... he had been away at a construction management seminar and was "all fired up". It was cool to relate to one another about the excitement that follows getting together with your colleagues and digging into the meat of the work you all share. My most recent was PyCon, but Networld+Interop will always be my first love for this (you don't just erase five years of an experience as intense as the NOC Team, and I don't know when I'll ever manage a class A again in an environment that "fluid").

Anyway, we both agreed that it's important to go do that external professional development at least once a year, preferably twice. Then again, I think we've probably agreed on more in life than we've disagreed on (though the disagreements, since they're usually political, are more, uh, "vehemently" stated).

I also told him about the bipolar diagnosis, and that the meds seemed to be making a big difference. I'm not sure what kind of response I expected from him, and I'm not sure whether or not I got the response I expected (since, well, I didn't know what I was expecting). What I do know is that his response was exactly what I needed to hear, and exactly the kind of response I hope to give our kids whenever we get around to having them, and whenever they get around to dealing with anything difficult in their lives.

All he really said was "You sound good" and "I'm glad the treatment is helping you", which are summaries of the things he's always said to me that I can remember: "I want you to be happy" and "How can I help?". So many people seem to miss those simple essentials when dealing with the people they love. Sometimes I guess I do, too. Fortunately I have people around that pretty continuously remind me of how to do it.

3 May 2003 (updated 3 May 2003 at 06:25 UTC) »
Chemical Epiphany:

For a great many years, I've banged my head against a wall within, wondering why I could always seem to see great things, but never to do them.

After too long vigorously rejecting any classification outright, and being fundamentally ambivalent toward any chemical solution, I gave up. I stopped fighting long enough to hear a therapist ask me "have you ever considered that you might be bipolar?"

It was a moment of perfect, obvious insight for me. She said those words, and all of a sudden, years of watching myself and my behaviour "made sense". I wasn't oblivious to how much my world resembled that of a manic depressive... I just didn't want to call myself that. I can't explain why. Maybe it was that Humanities course where we dissected the DSM (see links above).

So now, with the help of people I'm coming to trust, and people I've always loved, I'm finding a place from which I tap the years of ideas and make wonderful things happen. Sure, I don't wake up every day now and produce masterpieces, but I wake up every day and most of those days I produce something. Over time, that's going to add up.

I've found great comfort in reading some of Advogato's own Michael Crawford's writings on his personal journey with schizoaffective disorder, which apparently shares some common traits with manic depression. In particular, tonight while looking for links, I found these paragraphs:

The problem with manic creativity is that there is usually little substance to it. It is brilliant but it lacks a solid foundation. A great deal more work is required to implement an idea than to conceive of it, and it is hard to stay focused when I am manic. Projects are started and soon abandoned for new projects, or I start something very ambitious and then come crashing down into depression and abandon it. Very little of what I have accomplished was accomplished when I was manic.

It is also hard to work when I am depressed. I get bored with what I am doing, and find it difficult to overcome frustrating obstacles. Computer programming can be terribly frustrating work - bugs occur all the time in software, and they are usually not cooperative towards efforts to find and fix them. The single most important skill I had to learn to become a programmer was to overcome frustration, but this is very difficult when I am depressed. The slightest obstacle fills me with despair.

Yes, manic depressive people are creative, but the real creativity does not come when we are manic or depressed. It comes in the in-between times when we are feeling alright but not high.

Oh, yeah. I paid someone to finish the bathroom, and they did, and now everyone's happy.

Postscript: (added 2003-05-02 06:17 UTC)

MichaelCrawford: From my own experience, I can suggest that you delegate, or find some "tricks" to manage yourself through the blocks. If you choose delegation, you can either delegate the work of small stumbling blocks, like the progress bar, or you can delegate the work of managing you. Either can achieve the same goal.

If you delegate the work of managing you, then you need to make sure that you've actually empowered that person to keep you on track. In other words, they have to understand the work you're doing, and help you say "no" to the distractions that are going to try to seduce you.

As for tricks, there's the classic "divide and conquer" (break the blocking task up into sub-tasks), but sometimes all you need is a nudge to say "just sit down and work on this for like thirty real minutes, and if it's not going well, get up and take a break." Repeat that enough times in a day, or a week, or what have you, and you'll have chipped away the block.

I used the tricks above this week to wade my way through a server migration that was killing me through many small wounds. Instead of setting myself a "hard deadline" for the migration, I decided to focus only on the next small thing. "Install a JVM". Okay, done. "Install Apache 1.3". Okay, done. "Get SSI working on the Apache 1.3 install". For each of those tasks, though, I employed the "just sit down and do a little something on it." In each case, by forcing myself to switch to a terminal on that machine and do something, I built up enough momentum to finish the task, and most of the time, to go ahead and finish another one or two of the tasks that were next.

There's also a very good book called Getting Things Done: The Art of Stress-Free Productivity by David Allen that has a lot more concrete advice on attacking the things we put off.

Good luck!

Winer:

I was reading an entry of Dave Winer's where he proposes a theory of why users want open source, "after lots of listening, probing and thinking".

During the course of a few minutes, comments streamed in on that post, and Dave seemed to get increasingly frustrated that the commentors (including Dave Sifry) "didn't get it" and were (I'm paraphrasing) pushing their own agendas.

One of the last comments I saw was from Dave (Winer) asking "Jake" (presumably a Userland or Harvard person) for a feature to enable toggling comments on a per-posting basis.

Next thing you know, the entire comments thread disappeared (which is why you can't back up what I'm saying here for yourself).

And this after I'd crafted what I thought was a pretty good response to the thread showing that I did, in fact, "get it". But Mozilla ate that post when I tried to submit it and Mozilla found the comments submission URL was no longer valid (see above re: comments disappearing).

The whole experience smacks of a sandbox war. Very frustrating and didn't leave me with a good feeling about Dave Winer or what he has to say. I'm going to have to learn to separate his insights from the occasional petulance that I've inferred from this.

Home Destruction:

I was premature in my "near feature complete" diagnosis of the bathroom. The framing, sheeting, and Durock installation are complex enough (given the oddball built-ins I'm visualizing) that I've had to put things off while I focus on worky-work.

So now, in the interests of domestic tranquility, I've finished the plumbing (learned how to sweat pipe... cool!) and installed 4mil polyethylene as a temporary surround. The shower curtain's back up, all of the tools are stowed, and we now have a working (if butt-ugly) shower. So we don't have to trek the two miles to Kim's every morning (er, afternoon, in my case) to shower. Like we have been for the past, oh, six weeks. Saint Irene, indeed. The Martyr of the Bathroom :)

Compromise:

Following up on my "Compromise" and "I bought Microsoft" threads, I've invested myself even moreso in the enemy.

I bought a new Windows box (XP, no less) and a new scanner with an ADF. There are more similar purchases in the near future for us. The idea (however misguided it might be) is to take advantage of imperfect COTS tools to get me 75% or so of the way toward managing the volume of crap I have to manage, so I can more effectively focus my energies on being productive.

I realized that I don't want to follow in Ted Nelson's footsteps (as perceived by an outsider):

Nelson's life is so full of unfinished projects that it might fairly be said to be built from them, much as lace is built from holes or Philip Johnson's glass house from windows. He has written an unfinished autobiography and produced an unfinished film. His houseboat in the San Francisco Bay is full of incomplete notes and unsigned letters. He founded a video-editing business, but has not yet seen it through to profitability. He has been at work on an overarching philosophy of everything called General Schematics, but the text remains in thousands of pieces, scattered on sheets of paper, file cards, and sticky notes.

All the children of Nelson's imagination do not have equal stature. Each is derived from the one, great, unfinished project for which he has finally achieved the fame he has pursued since his boyhood. During one of our many conversations, Nelson explained that he never succeeded as a filmmaker or businessman because "the first step to anything I ever wanted to do was Xanadu."

I know Nelson hates that article, and it is a bit pessimistic. But I look around me, at the piles of "stuff to be processed", the stacks of notebooks full of ideas, and the fourteen pages of to-do lists, and I realize that, to the outside observer, I might just look like I'm never going to get this stuff done.

I'm not. I know that. But I want to get enough of it done, and I want the bits I get done to be effective.

Like Nelson, the "first step to anything I ever wanted to do" is a set of tools to help me with the process of the doing. A long time ago (c. 1992), I called that toolset everything (but that name is taken now).

The core vision is still there: a uniformly flexible, distributed, resilient fabric for storing information, code, etc. A substrate on which to build intuitive, responsive, powerful tools to manage information.

But now I'm coming close to fifteen years of being in computers, and over a decade of being posessed with my vision of "everything". And I'm realizing that, for me, stacks of notecards aren't going to cut it until I produce my fabled Pleasuredome. If I am to give birth to anything significant, it won't be by continuing the way I've been doing things.

So I bought a Windows machine. And a scanner. And some crappy document management software. And soon an A/V machine to rip my old videos. Yes, I know I can accomplish all of these things through Free tools. And believe me, I dearly want to. But for now, I need to concentrate on accepting the "out of the box" experience so I can focus hard on building the next generation of tools. The ones that rock your socks off. Classically, of course :)

Resurrecting Good Ideas:

If anyone has an appropriate contact at IBM for what I'm about to describe, please send me some email (tripp at perspex dot com) with "advogato" in the subject.

I have an old Technical Report from c. 1972 for a project called The Dawntreader Project. It was a dynamic, distributed semantic network implementation that a team built within IBM to serve as the data repository for some VLSI design tools.

Anyway, I've not been able to find the report anywhere (aside from the copy I was loaned by a friend who was on the team later in its life). I want to either find a source for more copies, or get permission / rights / what have you to reprint the report (electronically or physically or both).

I wish there was an "abandonment" clause in copyright law. I don't mean voluntary abandonment. More like being able to petition the courts to declare an artifact abandoned and have it enter the public domain. Eh, whatever.

Single Sign-On (clarification):

I should clarify my point about blog.example.com and signon.example.net encrypting a shared datum. Rereading my post, I realize it wasn't clear that I meant each should have the other's public key. blog.example.com encrypts the datum with its private key so signon knows the request came from blog, and signon encrypts the response with its private key so blog knows the reply / ack came from signon.

This is obvious, but the way I wrote it might not convey that I know it's obvious :)

Also, depending on my workload this and next week, I may try to whack together a prototype of this mechanism.

Single Sign-On:

Bram and raph: I assume that the point of the challenge / response pairs is to collapse the backchannel into an occasional "stocking up" transaction between blog.example.com and signon.example.net?

However, why not just have blog.example.com register a public key at signon.example.net, then generate the challenge by encrypting a shared datum with its private key as the challenge? When signon.example.net redirects the user back to blog.example.com, it can similarly encrypt the response so blog.example.com will know the response is authentic. That way, the sites don't need to "stock up" on challenge / response pairs.

Having said that, I now want to make the case that the backchannel is important for the non-trivial logout case. The user needs to be able to log out concisely from all SSO sites. The best way to do that, without forcing a double-check between blog.example.com and signon.example.net every time the user hits a page is for signon.example.net to tell any "active" sites that the user has logged out.

Unfortunately, this means signon.example.net is going to have to retain some state. However, I think that's an unavoidable necessity, as you also want the user to control what sites are allowed to use the signon profile. I can't imagine not wanting a site to be part of my profile, but, well, maybe I can :)

The backchannel can also be useful, when the client supports images, for implementing a "silent", webbug-based login. blog.example.com includes an image that's hosted on signon.example.net. Upon receipt of that request, signon.example.net sends a backchannel message to blog.example.com confirming the user's signin status. Subsequent pages at blog.example.com can then take advantage of that status without the user ever following the login button.

Assuming blog.example.com gives signon.example.com the graphics (through the backchannel, through prior agreement, or by reference in the webbug's src URL), then the user gets immediate feedback about their login status by which graphic signon.example.net returns.

example.com:

Bram's description of the single sign-on proposal also made me realize I should evangelize the use of example.{com,net,org} here. BCP 32 / RFC 2606 reserves four TLDs (.test, .example, .invalid, and .localhost) for use in testing, documentation, etc. It also reserves the SLDs example.com, example.net, and example.org. It recommends using the .example TLD for documentation, though I personally believe the "average reader" will more readily recognize an example.{com,net,org} SLD as a "domain name".

Anyway, the reason I implore you to use the RFC 2606 domains comes from (admittedly embarassing) direct, personal experience. A long time ago (okay, two years), my primary mailserver was still running some egregious sendmail hacks (written by my local guru, not me) that provided virtual domains (before they were standard). Unfortunately, my meager understanding of those hacks, and the amount of cruft we had built around them, conspired to keep me from correcting the fact that the machine was an open relay.

While working at jGuru, I "helped out" a few of our gurus who needed a decent relay, didn't have SMTP AUTH support in their clients, and didn't have fixed IPs (and had ISPs that were refusing to relay mail coming from within their networks not bearing a From: address of @isp.example.com. Sigh.)

I promise, this is going somewhere. Anyway, one of the gurus was writing a piece on sending mail from within Java. In that piece, he provided code that used my mail server as its MTA. So, until I managed to (a) close the relay (which, yes, I know, I needed to close and I was being an irresponsible Internet citizen and so forth) and (b) get the article rewritten to use mail.example.com instead, I put up with a bounce message every day or three from someone that didn't understand they needed to put in the address of their own SMTP relay.

Now it's my sworn duty to evangelize RFC 2606. And to get websites to properly accept the plus sign (+) in the lefthand side of an email address. And to get them to accept the plus sign in a phone number. And to get AT&T to keep my bill available online for more than three months. I go paperless to save them money and they can't keep 7k of compressed data around for more than three months. Anyway, that's Mr. Quixote to you!

So, how about blog.example.com and signon.example.net? :)

Work:

A fantastically productive week. 70+ hours on the clock from Monday to Monday (inclusive). The project isn't delivered yet, but I cleaned up a lot of cruft, and put in place a new architecture that I can phase in piecemeal and still start enjoying from day one. Also tried out some simple XP refactoring tricks that are obvious and yet somehow overlooked :) (rename the old thing and all clients of it, create the new thing, migrate clients one by one, then remove the old thing).

Also, I finally wrote a wrapper for Perforce's branching that does all of the steps involved in maintaining the most common kind of branch I make. Now branching is a one sweetly simple step. Note that the agony here is introduced by my very anal separation of clients per branch, not by any inherent limitation of Perforce (not that Perforce doesn't have inherent limitations, mind you).

I bought Microsoft:

I bought really cool-looking game this weekend - Age of Empires II, The Age of Kings (as a reward for later, when I've gotten some more bits delivered). Opened it up and read through the instructions. Only later did I notice the Microsoft logo on the box. Sigh. I would have rather supported a smaller, hungrier shop if I'm going to indulge in a little bit of proprietary software compromise.

Compromise:

On the subject of compromise, I had a good discussion with Allen Briggs over lunch the other day. As I creep up on thirty (1973-04-06), I'm doing the understandable reflection, introspection, and general "what have I done, and what do I have left to do?"

The short answers are "not much" and "a lot", but those grossly oversimplify things, because the truth is that I've done a fantastic amount, but have little tangible evidence of it.

Anyway, in the process of all of this, I realized that, whenever we get around to having kids, I want to raise them to see a pragmatic balance between their idealism and the mundane, material needs and desires of the world. There is a grounding in compromise I never got, which I think might have helped me to further my ideals.

What it boils down to is, ironically, something Stallman wrote in Copyleft: Pragmatic Idealism:

If you want to accomplish something in the world, idealism is not enough--you need to choose a method that works to achieve the goal.

I say "ironically" because the kind of pragmatism I'm talking about is precisely the kind Stallman rejects in other writings. I guess you could call it "embracing the enemy". Or just "selling out".

When I raise my kids, I'm going to try teach them to think clearly and rationally about what they want to accomplish, and to weigh the ethics of acting quickly to achieve more, versus acting slowly to achieve less, but achieve it more purely.

In practical terms, I'm going to advise them to go out, make assloads of money while they're young, energetic, and full of bright ideas, then turn around and spend that money while they're older, wiser, and can make it do the most good to bring about all of the changes they wanted to see when they were younger.

Because I've learned one thing, finally, and I learned it from Fried Green Tomatoes. Older and richer beats younger and faster.

Of course, the inherent challenge is to remain internally faithful to your ideals while you're externally working in apparent opposition to them.

With that said, I'm also going to do my damndest to teach them that they can work outside of where their ideals would otherwise take them to rake in the cheddar. For instance, I'm going back to school in the fall and getting an accounting degree. Who knew? Anyway, that way, when Irene gets out of law school, we can open a firm that does accounting and law in one place (useful when estates and the like are your bread and butter work). Both accounting and law can be fantastically lucrative, and even so when done ethically (if you pick the right areas of both, of course :) ).

And all of that can pay me, ultimately, to write more Free software. And raise kids who can follow their own dreams without looking back and wondering where the time went.

Fortunately, longevity runs in my family, so I've still got at least two more of my lifetime so far to noodle out the rest of the details and make my big contribution :) I mean, look at Dave Winer. He's my dad's age, and he's still got the juice. I mean, I respectfully disagree with some of his positions (more, later), but he keeps stretching himself and his ideas, and keeps generating vision. No ossification there. Keep it up, Dave!

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?"

9 older entries...

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!