Older blog entries for jbucata (starting at number 7)

pphaneuf: Interesting. I read up a bit on it but I don't have time to delve into it very deeply right now--I have to get to sleep soon. But I'll indulge in some random commentary:

It looks like you subscribe to the Less is More/YAGNI philosophy. Since you're going as XP as you can, the latter makes sense.

It also looks like you're trying to use Andrew Koenig's Fundamental Theorem of Software Engineering: "Any software engineering problem can be solved by adding a level of indirection." One thing I've always wondered about that is whether you can, by adding a level of indirection, solve the problem of having extremely poor performance as a result of having too many levels of indirection. It actually looks like that's what you're after, though: "XPLC itself won't have anything in it related to remoting, but I intend on having a framework to support remoting available separately...." So instead of either forcing the users of the system to have to deal with a system that's too simple to meet their needs (forced local/GDI), or too difficult/bloated to be workable (forced into CORBA), you let them choose which of several approaches they prefer. I like it...

I wonder if you can somehow use that same approach for your other "controversial" design decisions: Not including exceptions nor supporting threads (if I read right).

One thing that concerns me is that the abstractions will leak. In other words, designing everything now to assume a local address space must necessarily break when remote objects are added into the mix--if object remoting is a goal, it turns out that "you needed it" all along, and bolting on a framework later won't do the job. (I don't know XP well enough to know how the other practices balance YAGNI out, so this might be something you've already accounted for.)

Thanksgiving: At the relative last minute, I decided to go visit Mom & friends for Thanksgiving. I managed to get a decent rate on a flight leaving Thursday morning and coming back Saturday evening.

In an excessively circumloquatious E-mail to an old friend of mine and to a recent girl-space-friend of mine at church, I referred to the holiday as corporate exercises in communal gratitudinous communiqu├ęs. I had fun later explaining what that, and the rest of that whole E-mail, actually meant.

pphaneuf: Didn't they say the same thing about X-Windows back in the day that you're saying about object protocols? Specifically, that:

  • It was too slow/unnecessarily bloated;
  • Remote access isn't that important anyway?

I realize the situation is a lot different since they already had X-only terminals to connect to more powerful central computers at the time, but I think the parallel still holds if you replace "using the technology at all" with "trying to use the technology in more places than just the few areas that truly need all its capability".

Layoffs not the best policy: I don't know if this is worthy article fodder, so it goes here. Via WebWord: Poor leadership leads to layoffs. I definitely agree with the list of woes that layoffs induce, but the prime example the article gives is a steel manufacturer, which presumably employs hourly workers. How do you do such cutbacks for someone on a salary? If we all switched to becoming consultants/contractors I guess that wouldn't be a problem (and software craftsmanship sounds better all the time).

Quines

A quine is a program that prints its own source code as output. (See here and here if you're new to them.) At work, I recently wrote a Perl program that makes use of quines.

For a project I'm loaned out to (not one of my several normal ones), I'm generating a PL/SQL stored procedure to do some Oracle database work. The procedure has very repetitive almost-identical blocks of code that can't be factored meaningfully, unless I switch to dynamic SQL--and given dynamic SQL in PL/SQL, I'd rather copy and paste large swaths of code. Rather than cranking out all this code once manually, I wrote a simple Perl script to spit it out. If I need to make changes to something, I just change the Perl script and rerun. Consequently, that Perl script is important, since I don't want to ever have to modify the stored procedure code by hand. I don't know if the rest of the team has any source-code control (I rather suspect not), and if they do I don't have access to it. I wanted to find a way to make sure that the Perl script would always be available to somebody who had the stored procedure source (which they could always get out of the Oracle data dictionary if they needed to).

I hit upon the idea of putting the Perl script in a comment block near the top of the procedure. It would be an easy edit in vi to read the source in and shove the comment delimiters at the front of each line, but that's editing the stored procedure, which I said I don't ever want to do. It could break the procedure if something is mistyped, and it's a manual step that later tinkerers might or might not do, if they happened to receive the script by other means and didn't see that the original's output included a block of comments with the script source. So somehow I had to have the script place the script source in the comments for the invoker without the invoker needing to do anything special... et voila, the idea is born.

The biggest problem was finding a quine that would let me embed a code intron. Some quines will let you store arbitrary text and have it reproduced along with the program itself; what I needed was for arbitrary code--the code to generate the stored procedure--to be reproduced and run. In fact, I also needed a way to have the printed source be modified to add the comment delimiters and indentation in front.

I found this nugget by njaharve@uwaterloo.ca:

#!/usr/bin/perl
$_=<<'eof';eval $_;
print "#!/usr/bin/perl\n\$_=<<'eof';eval \$_;\n${_}eof\n"
eof

which is really straightforward and is probably what I would have come up with myself. The thing to note here is that the code within the eval can be anything you want; whatever you put there gets executed and printed (when you run the magic print statement within the block of code). So I took this quine and turned it into a quasiquine that prints the stored procedure, with the script source (after applying :%s/^/\t--/ to it) inserted near the top.

Church

Had a very nice weekend. Two pastors who used to be at my church but moved away came back and did a seminar here. Life-changing stuff. Their messages managed to help answer some big questions about faith that I only recently realized I needed answers to. It's like they decided to spend the entire weekend teaching about what I've been going through--without them knowing anything about my situation beforehand. I only wish I didn't have to get back to the daily routine of work and such--going to church, when it feeds you, is way more fun (yes, even than writing quines).

I started reading The Cluetrain Manifesto--the dead tree version. So far I've finished chapter one, and I might try to read some more before I go to bed tonight. I've got a lot of thoughts stirring around inside me about it, and I'm thinking very seriously of typing them and posting them somewhere, but I'm wondering whether it's best to do that sort of thing as occasional diary entries here, as I have reactions to what I read, or if I should wait until I'm done and write a big position paper at once. I've got several other books I've either read or have in my pile to read that would be useful as supporting sources.

My basic position is a big "very true, but..." on what they say. Recent events (the original manifesto and subsequent book were both written pre-Y2K) shed some light on things that they didn't originally think about. Maybe the book will address my objections as I go through it.

If I write a big essay, it's a lot easier to link to and get comments on/reactions to/general net.exposure for it than if it's a series of diary/blog entries somewhere. OTOH, writing something like that would require enough continuing enthusiasm for me to get around to doing it once I've read enough. All that and anti-corporate muckraking is time- and energy-consuming anyway.

So what happens if I get through and I decide that I have at most a few paragraph's worth of stuff to write, and that I could have been writing about it the whole time while my reactions were fresh? Maybe I should just do both...

At any rate, just from reading the first chapter, I went and bought a stack of additional dead tree versions to give away to people. I just learned that they posted it on their site too, but it's more effective to get somebody to read something you want them to read if you hand it to them and they have to do something physically with it.

sej: Doesn't look like you can search them all at once. Googling for +site:lists.debian.org isn't quite the same, depending on how well-crawled the site it. Sounds like an excellent idea for a wishlist bug...

digdude: I've been using Debian for over two years now. What with the recent hype over RedHat 8, I thought about giving RedHat another try, but in the end I simply couldn't go back to no dpkg/apt-get. No way can the RPM port of apt be the same; at least with dpkg you've got the foundations for a thoroughly intelligent package management system in the file format, with the surrounding software supporting its features to varying degrees (Suggests: and Recommends: aren't handled too well ATM). With apt-rpm you don't have those features, and you don't have the ability to write it in the future without extending the RPM file format. Then again, they've been through, what, three different versions of the RPM format now, so it's not like that's out of the question, either...

I'm curious whether your Ethernet chip is supported by the stock kernel itself, and Debian's prepackaged binaries simply don't have support compiled in. If somebody's written a driver for a network card, especially if that somebody is Red Hat, I'd think they would have sucked it into the main tree as quickly as they could get it tested. If that's the case, just compiling your own kernel might fix that for you. (XFree86 is likely to be another story.)

So anyhow, I'll be curious to see how RH8 goes for you, and how bad the withdrawal symptoms are ;).

Let's see if I can post two diary entries in rapid succession...

sej, the official interface to all of the official Debian mailing lists is lists.debian.org, including its all-powerful search interface. I didn't even know that some of the lists were gatewayed to Usenet, but IMHO it's definitely best to go straight to the source.

4 Nov 2002 (updated 4 Nov 2002 at 07:16 UTC) »

Woo-hoo! I'm green already! I somehow thought it would take longer before I got any kind of certification; I guess it only takes one vote (thanks Denny!) to get me in.

Last night was interesting. I posted a wishlist bug against Mozilla, asking them to support urn:ietf:rfc:2648 URN syntax for RFC documents.

I also managed to find what's likely a bug in sIRC, the character-mode IRC client I use. It's supposed to send a quit message to the server when you /QUIT, but for some reason it doesn't work on irc.openprojects.net. sIRC does an exit(0) almost immediately after sending the command, so the complaint from the IRC server never gets seen. I'll probably dig out the IRC RFCs and see if there's anything that sIRC is being lax in, or conversely if irc.openprojects.net is being excessively strict.

I also managed to stay up until about 5 AM local time in the process of doing all that. I was still awake when Mom got up in the morning and sent me a few E-mails--that was a very good clue that I needed to pry myself away from the keyboard. (I did manage to arrive at the 11 AM service at church in a reasonably awake fashion.)

3 Nov 2002 (updated 3 Nov 2002 at 07:47 UTC) »

Hi again all. I used to be JB318 on here, but I lost my password. <wishlist>There should be some sort of Advogato password retrieval facility...</wishlist>

Hopefully I'll have lots of interesting diary entries to post. I'm going to shoot for one or two a week instead of trying to come up with something witty and relevant every single day like I was attempting before.

sarum: Hoping you read the diaries, since I can't post a reply to your article ATM. You mentioned the desire to have a network protocol for SQL. Check out RFC 2259--it's basically what you're after, I think. Not that anybody implements it, but if you're the enterprising type it's certainly a good starting point.

Speaking of masters and journeyers... I recently read an excellent book on the subject: Software Craftsmanship by Pete McBreen. Makes me wish I could strike out on my own, or at least get some more of the flavor of being a master craftsman while still working within the walls of Megacorp. This books caused a paradigm shift in my thinking even greater than reading up on Extreme Programming.

To update from my last entries as JB318 aka "when we last left our hero": The medium-sized corp outsourced their outsourcing, so now I work for a Megacorp. That was a year after I completed the Big Move(TM) to the Dallas/Ft. Worth area. And I'm now happily using Debian woody after using potato and following woody as testing since shortly after I moved out here.

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!