Older blog entries for cwinters (starting at number 26)

12 Oct 2000 (updated 12 Oct 2000 at 14:05 UTC) »

Couple of funny things:

First, from a recent TV Week distributed along with the Sunday newspaper to help you plan your TV watching experience days ahead of time. In the Q & A section:

Q: Are Bruce Dern and Bradford Dilman related? They have the same initials. - B.L.P., Myrtle Creek, Ore

A: Having the same initials is no indication of a relationship. Those two are unrelated.

This is, I think, admirable restraint on the part of A...

Second, from a recent (Oct 2) New Yorker humor piece by Christopher Buckley, writing a "retrospective" about the reasons why George W. Bush won the presidency. The last one is:

Bush's October Surprise charge that Gore, a Southerner, had owned slaves while he was a senator, though demonstrably untrue, forced Gore to go off message during the campaign's critical last days.

Thinking about the "though demonstrably untrue" aside is enough to send me into giggles.

On the technology side, having to work with NT is enough to send me into sustained grumpiness. (grumble grumble)

Worked in Germany all last week, really the first time I'd worked extensively with someone around my level technically. Great, great experience. On a basic level it's just closing the normal feedback loop for discussion, but it's much more than that. You establish a sort of shorthand about certain things so that discussions about them can be both very potent and very short. This might seem really basic and it's something that happens whenever you spend a good deal of time with someone, but I'd only really experienced this previously in a social setting or a non-technical work setting.

This has the unfortunate side-effect that I feel quite deprived now working at home by myself. The next few weeks are going to be a serious PITA.

I need to get a contract finished up in the next few days, but then I should be able to put some cool changes into both OpenInteract and SPOPS and really release them under the Artistic/GPL. (They're available now, but only if you know where to look. Don't do that just yet :)

Hopefully we'll be able to convince our managers that working together like this for a week at a time pays off handsomely in the quality (and quantity) of work done as well as for generating new ideas. Next time, he comes here though :)

jfs: Check out OpenLDAP for a open-source LDAP server. They recently put out v. 2.0 which (I believe) implements version 3 of the LDAP protocol. (Haven't had time to play with it recently -- previous versions worked great.)

The book Peopleware discusses the idea that there is no such thing as overtime. However many hours you work over some figure (around 40 hours, varying some per person) for a week you will eventually have a roughly equivalent amount of undertime. Undertime is not just sitting around doing nothing (although that counts too), but doing things like reading advogato and for every person who has posted a diary entry checking out their description, homepage, branching off into links from there, talking to people around the "watercooler", taking long lunches, coming to work later and leaving earlier, etc.

Some people have a hard time separating this from laziness, but too little undertime leads to burn-out time. Of course, those same people probably thing burn-out time is laziness too...

I staved off burn-out time (a little) by going camping with B and some of her family this weekend around Ohiopyle. Also saw Fallingwater, which was pretty amazing. The attention to detail was admirable, as were some of the solutions they devised to get around some of the difficulties resulting from integrating the building so closely with its surroundings.

For instance, in one area water leaked through a rock formation that was also inside the house. The first time it happened after a big rainstorm, the water ran down a hall and through the first floor before making its way down to the stream. Instead of trying to prevent the water from running at all (which would have been futile), they simply put a hole in the floor next to the rock inside the house so the water could drain -- they worked with the water rather than trying to force it into a desired behavior. Nice lesson.

How many people have accidentally typed in 'www.advogato.org/dairy/' instead of '/diary/'? Wouldn't it be funny if one day you saw a cow there instead of a 404?

Word has come down from the mount: OpenInteract (and SPOPS) shall be open source by Thursday (Sep 28). I'm not celebrating just yet (still haven't settled on a license, but leaning strongly toward Artistic/GPL for the core framework), but this is deeply rewarding.

I've still got a million things to do with it -- particularly in terms of efficiency, as we've been striving to make it right first and then efficient -- but at least other people will be looking at it. I'm a little leery of this and have to remember that people generally just want things to be better, that it's not personal. (A problem with working remotely for a small company is that you have little-to-no feedback on your actual work -- code -- just on the results of the work.)

It's also kinda funny (some would say ironic) because I leave on Thursday (Sep 28) for Germany. So I won't get to respond to email questions as quickly as I would like. So it goes.

The DBD::ASAny author sent me a new version of the driver that includes $sth->{TYPE} support -- woohoo! I ran some tests and all tests passed 'ok'. (It's very satisfying to type 'make test' and see that little 'ok' come back as many times as you ask it to do something.) He also modified the DBI->connect string so that it's more in line with other DBD drivers. I love this community.

It's taken longer than I thought (thanks largely to the efforts of my boss), but my work situation -- at home, alone, all the time -- is getting pretty old. I didn't think I'd miss people as much as I do, since I'm slightly introverted. But there it is. We'll see how it plays out.

OpenInteract is coming along very well. Last few bleary-eyed days have been spent hip deep in making installation procedures EZ for everyone and getting the packaging scheme stable. A product like ours aimed at developers really has to lower as many barriers to entry as possibly, lower the cost of trying it out and getting interested and exploring. Making it easy to install, easy to extend and easy to share code is one of those ways (a BIG one, IMO).

Also good news on the open source front: recent stridency on my part has is helping to convince management that, yes, open source will be a Good Thing for the company. I think we're moving to the 'which license do we choose?' part of the argument and saying goodbye to the 'why the heck would we choose one of these open source licenses?' part.

The fact that everyone is sick, that we're going camping in OhioPyle this weekend (and seeing Fallingwater!) and that it's supposed to be rainy and cold makes me nervous that I'll catch something....

Also found out that I'll probably be going to Germany for a week next Wed/Thu/Fri. For some reason, every time I go over there I can't sleep on the plane and get there at 8 am. Everyone else is ready for a full day of work and I slog through so by the end of the day I'm beyond tired and when I fall into a fitful rest, I have bizarre-yet-almost-real dreams where I'm hovering on the edge of consciousness yet can't break out of sleep. Hopefully that won't happen :)

Uh oh, run-on sentences... time for sleep.

Well, it only took one day to prove myself wrong: DBD::ASAny does not support the {TYPE} property of a DBI statement handle. (And I consider it a modern database with a recent driver.) Ouch. Not only that, but it's got a bug -- if you try to pass one of the DBI SQL types (e.g., SQL_INTEGER) in with a 'quote' call ( $db->quote("O'Malley", SQL_VARCHAR) ) DBD::ASAny seems to do something naughty to DBI (something with calling type_info) -- created a simple test case and sent it to the author.

Anyway, that just means something that was going to be done later is done now -- you can create a custom 'quote' method which does or does not deal with the DBI SQL type, or can do anything else. I'd love to just use bound parameters for everything, but you run into the same problem because you need to bind a type to them. Plus, some drivers (notable DBD::Sybase) cannot use bound parameters for certain types of data (text/blob stuff). Ack -- do the simple stuff first.

So, all the tests are successful now for three databases: MySQL, Sybase ASE and Sybase ASA. I'd like to get Postgres on a machine here shortly, and I've got some devel versions of Oracle and DB2 here as well, but those last two require a time investment which I simply don't have right now. Interbase is another good one to throw in the mix.

Still trying to get installation procedures working easily and well -- OpenInteract comes with its own simple packaging system, so that you can develop a package, run a command and put the necessary stuff into a tarball and send it to someone else, who can run a command on the tarball and install it fairly simply. ('it' in this case means the data object configuration, module configuration, initial data and security, page handlers, rulesets, etc.) Again: trying to start simply. The XP book notes that programmers are trained to try and to anticipate future problems and design for them rather than just design for today. Of course, it notes, many times the problems you anticipate never occur, so that design was wasted. Issues with reusability discussed recently on here seem pertinent, but my sleep-fogged brain can't quite draw the line between them.

I wonder: when people measure code in terms of lines, do they include in-file documentation (such as POD) with that?

I need to start writing software as if it will be released to lots of people tomorrow :) Interestingly, the potential (up to 90% I'd say) release of OpenInteract has coincided with my first reading of Kent Beck's book Extreme Programming Explained. I know, I'm probably a whole 18 months (meaning: eternity) behind the rest of the software development community, but it's new to me.

Anyway, XP places a lot of emphasis on testing, an area where my discipline is sorely lacking. The happy coincidence is that releasing for other people also forces me to write tests, just so they'll know everything at least nominally works. This way, I have an excuse to get in the habit of doing something I should be doing anyway. Happy day!

A nice side benefit of the SPOPS DBI tests is that it should be easy to find out whether particular DBD drivers support the necessary {NAME} and {TYPE} attributes or not. (I think drivers for most 'modern' databases do.)

Cleaning up the code (which isn't much of the work) and making it presentable (read: installable by someone other than me) also means that I get to hack around a bit in the Makefile.PL and ExtUtils::MakeMaker land. Eeek! But it's coming along -- it's done for SPOPS, I just need to figure out how to get a normal script (to install the packages, etc.) to run after 'make install'. This is a very powerful software package, and the perl way is to make easy things easy, so... where's the easy part? (Personally, I don't qualify editing a Makefile as easy, but I can be a little dense sometimes.)

The nutty thing is that you can (apparently) use Ext::MM to create PPM files (for ActivePerl users) and for this you can use the 'PPM_INSTALL_SCRIPT' key to specify a program to run after the package/module is installed. So someone recognized this as a good idea to do. Double eeek!

Excellent news -- management has initially agreed to make both OpenInteract and SPOPS open source! I'm working on the website right now -- we want to have some infrastructure available for when -- not if :) -- people get interested and want to use either one of them.

It was actually serendipitous -- I'd written up a document about why OpenInteract should be open sourced, pros and cons, links, references, etc. My team leader (Christopher) read it and sent back some suggestions, so by Sunday evening it was looking pretty decent.

Monday afternoon, management brings up the open source issue, being initially set against it. Armed with the information from the document, however, they were child's play for Christopher. A phone call or two to me and we all seemed to be on the same page.

Now we just need to get this website up and get the stuff licenced -- I recommended Artistic/GPL, just like perl -- before anyone changes their minds...

Earlier I talked about rulesets in SPOPS, and over the last couple of days have exploited them for some nifty stuff. Implemented Yet Another Full Text Search Engine (tm) -- dead simple, none of the interesting things that DBIx::FullTextSearch does, but it's database independent (rather than tied to MySQL) and easy to understand. I like simple, especially in the beginning and especially with room to grow.

What's cool, though, is the way this works. If you want an object to be included in the full text search, you simply specify 'Interact::FullText' in the 'isa' tag of the configuration file for your class and list the fields you want to be submitted to the search. (You also need to specify an english name for your object, how to extract a brief title from your object [thru a coderef] and a url fragment on how to display it. But you should already have those specified those anyway....) That's it.

Every time you create or update an object, the rule for Interact::FullText gets triggered. You don't need to call 'index' or anything like that -- the rule gets installed when the sever is started. The rule breaks down the text object into stemmed words and saves them to the database, counting up the number of occurrences and associating them with the object. Like I said: simple. But we have plenty of space to improve it, since it's basically a black box.

First public site (Transit Vote) is rolled out now -- I'm sure little bugs will be found with more usage, but I feel pretty good about it. (also need to get our 'powered by' logo onto a credits page or something...)

Getting ready to roll out a website based on OpenInteract, the first public one. It's fairly limited -- lots of static pages, news, polls and all the user/group stuff. Nothing too complicated, so it should be a good test.

Finally (!) started writing up a document that outlines some coding standards for our company. (Since I'm the "senior" programmer, it's both my responsibility and my perogative.) Not done yet, but I think I set out some good guidelines. You don't want to make people feel like big brother is watching and mandating that everything be this plain-vanilla way. But you also want things to be consistent, and there's also a little of the NIH syndrome (just a wee bit). And there's the additional baggage of perl's rep as a write-only language and the fact that most folks we hire will likely come from a C/Java/C++ background where things like StudlyCaps are the norm.

My wife's grandmother is staying with us for a few days. She's fun to hang out with, and it's nice to have someone (besides the cats) around during the day, to eat lunch with and shoot the breeze.

After working at home for so long, I wonder if I'll ever be able to (or want to) work in a "real office" again?

It's a nice feeling when you build something, think of something new to do with it, make the small change and it just works. The feeling of just works is something I associate strongly with open source programs, and by having something of mine exhibit the same behavior I feel like I'm doing something right.

17 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!