This Space for Rent

Oct 31, 2007

Photo of the day

(taken from the bus as it headed down towards the Most Exciting Job In The World this morning.)

Oct 30, 2007

Excuse me?

But Mr. Mukasey told Senate Democrats he could not say whether waterboarding, which simulates drowning, was illegal torture

Illegal? So if a particular form of torture is not explicitly outlawed, it's a-ok? (And, given Mr. Mukasey's doglike devotion to the Coward in Chief, that means that as far as he's concerned any form of torture, as long as the blood-filled pen of the idiot king signs off on it, would be permitted.)

Christ almighty. At this point I'd almost welcome the suicide attack on Iran that Darth Cheney and his Nazgul are agitating for; the resulting utter collapse of the United States (assisted, no doubt, by the ex-USSR which remembers oh-so-well the US-sponsored "shock therapy" that drove that country into the gutter) is about the only thing that will neuter the crop of servile ring-kissing scum that the Evil Party has grown and harvested so carefully.

Remember when the claim was "We're the United States of America and we don't do that kind of shit" ? Feh. Bring on peak oil. Bring on the US$10 CAD. Just put us out of our misery now.

1 comment


Why I dumped my windows boxes in favor of MacOS, in one easy picture

MacOS is Unix.  Windows is not Unix.

It's an added bonus that there's a fighting chance that my telnet sessions will not go away when the machine goes to sleep (it's about an 80% survival rate these days,) but having a *real* Unix machine that's got a non-hateful windowing environment that can run most modern software (framemaker is a notable exception, and openoffice would be another one if it could open 5 page office documents in finite time) means I don't have to carry around two boxes when I go on vacation and want to do some coding when I'm offline. It ships with the hateful vi clone vim, but it was pretty trivial to port levee to MacOS, and (you can see, even if you don't know it, that ls ported without any fuss) it's easy for me to build other bits of Mastodon, install them on the box, and have them Just Work™.

The higher priced offering from the company up the coast is pretty good on the windowing environment side, but it's not Unix and if I'm going to lard a machine up with half a gigabyte of core just to run cc (or the almost-but-not-quite cc that comes from the FSF,) a web browser, and a terminal program, I want it to run Unix. And with the Mac, I get Unix, and as a special bonus I get Unix without the X-Windows disease.


The world of the commercial linuxes just keeps getting more and more unpleasant

Because I was sinful in a previous life, I occasionally have to load R*dh*t Linux onto a test machine so I can track down whether a new bug is due to the big wad of patches that makes RHEL or the little wad of patches I apply to the kernel to make it actually do what we want. Today was one of those days. I fire up the nasty p*th*n RHEL installer in text mode, tell it that, no, I do not want your goddamn X11, thankyouverymuch!, spend 35 minutes watching the installer walk through four of the five install disks, reboot, and *tada* there's the X11 graphical login screen I didn't want.

Gee, thanks, that's just what I wanted to see on a server. A server that sits in the machine room and is only accessed by telnet.

Whatever happened to the traditional Unix behavior of only doing what you tell it to do? Oh, right, that vanished around the time true --version was written, and now people get to deal with the operating system just sort of randomly grabbing binaries out of the clear blue sky.

If I wanted the OS to just randomly grab binaries out of the clear blue sky, I'd buy a Mac (or, um, 4 Macs. And they have some pretty annoying behavior quirks too, not the least of which is that the mini in the library won't hibernate unless I'm sitting there with a stopwatch.) At least that way the bulk of the binaries will actually be somewhat polished and functional instead of the large collection of dysfunctional Open Source®™© X11 and p*th*n code that was sloshing around on suzzy before I went on a package demolition tour.

Oct 28, 2007

Project of the day

The bears have been on a Star Wars®™© kick for the past 9 months or so, and decided that they want to be a couple of jedi™®© for halloween. Their first idea was to go to the store and buy some cheapy star wars capes, but I thought that if they were going to have a cheapy star wars cape, it could at least be home-made capes.

Fortunately for me, the whole Star Wars™©® franchise is about as popular as G-d himself, so there are buckets of online references for how to make all of the costumes. This one was the reference I ended up using, only slightly modified by my almost-complete ignorance of sewing machines.

I'm not sure they would be durable enough for everyday use, but they're certainly good enough for halloween-related activities.

Oct 27, 2007

(ex-)Trolley photo of the day

East Portland Traction's working eng and replacement new working eng doze in the sun on a cold fall day.

Oct 26, 2007

Trolley photo of the day

Orange/Yellow successfully avoids being in focus as we drive by it at front & harrison today.


Friday Dust Mite Blogging™


Dust Mite and savage feline predator.


Okay, maybe there are some benefits to waking up before noon….

When the 7:55am bus to work went over the Ross Island bridge, the sun was just coming up and the moon was just going down. If I was sticking to a proper computer programmer schedule, I'd never see this because I'd be waking up at the crack of 10am.


My my my, what have we here.

Sure, everybody (or at least a majority) knows that an increasing majority would like to see a functional healthcare system in the United States, even if they had to raise taxes to do it (and they wouldn't, once the health "insurance" parasites are fumigated out of Washington, DC.) But there's an interesting twist that The Big Picture reports:

Universal Health Care

  • 60% said they would be willing to repeal tax cuts to help pay for a health-care program that insures all Americans;
  • Most of the highest income group polled, those in households earning more than $100,000, support it.
  • More than 80% of Democrats say they like the plan; most Republicans oppose it.
  • Independent voters also support universal health care;
  • 52% vs 36% favored health and education spending as a better economic stimulus than tax cuts.

Can you spot the one thing I found very interesting here? The one income group that you might think would be susceptable to the typical rah-rah-John-Galt bullshit that the "free market" advocates and parasitic Evil Party spinmeisters trot out at every opportunity has started to catch on that the ongoing train wreck that is the American healthcare system isn't good for anyone, including the class of people who might be able to get away from a medical emergency without having to do anything more drastic than selling their home.

It's intensely gratifying to see a case where the upper middle class and the rich are capable of learning, and I wonder how the puppetmasters in the Evil Party feel now that their base is losing interest in their "no taxes, and you can watch the poor starve as recreation!" pipers tune. Perhaps they'll have another one of their trademark 180° turns while pretending that they always supported a national health system and it was those traitorous™ Democrats that were trying to keep the increasingly corrupt and dysfunctional for-profit healthcare system that squats like a cancerous toad upon the United States of America.

(And if the Evil Party did do one of their 180s here, I have full confidence that the Stupid Party caucus would stumble right into the trap and be left, gaping, as the triumphant Evil Party National Health Plan© steams out of the station to the cheers of the viewing audience.)

Oct 25, 2007

Traditional Portland weather

It might have been bright and sunny this afternoon, but it was bone-chillingly cold and foggy this morning. When the 7:55 bus to downtown reached the Ross Island bridge, the view of the Ross Island Sand & Gravel ready-mix plant looked like this:

But by the time the bus reached the other side of the river the sun was already starting to shine on the houses up at the top of Tualatin Mountain, and by 1pm the day had settled in to being a brilliantly sunny (so sunny that even with the pentax dialed down to f22, 1/4000th second the sunlight was still washing most of my photos out,) but cold, fall day.


Green/Yellow in action


Yellow streetcar, yellow leaves.


Waiting for the light on SW 4th.

At lunch(ish), I took the bus downtown to buy a new pair of boots, and by happy coincidence the bus route takes me right by the downtown trolley line. And green/yellow rolled up just as my bus drove up to the streetcar crossing. I'd flipped the camera into raw mode this morning, and it does seem to make a difference to let iPhoto do the conversion from tiff(ish) to jpg instead of having the *istDS do the conversion, and it does seem like it's a slightly better image (at the cost of being ~10mb instead of ~3mb per image.)

Oct 24, 2007

New Code! (somewhat fewer security violations than before! edition)

After writing my cron replacement last week, I've been tweaking it to be a little more paranoid about how it works. I've gone through and tweaked it so that it builds a brand new environment and doesn't accidentally carry the daemon environment around with it (the existance of the daemon environment isn't that much of a bother on pell, but if I run it on a machine infested with gnuware, there are an amazing number of environment variables that can fuck you up just by existing); I've tweaked the sleeping code so that it tries to always run jobs at 30 seconds past the hour; and I've spent a lot of time doing and redoing and redoing the runjob code so I can start postoffice from cron without leaving a cron zombie staggering around.

0.8 has been running for a couple of days now without intervention, and it hasn't either starred in a remake of Dawn of the Dead or done a firefox and grown massively without bound (that's not the worst thing about firefox, of course; now that Chateau Chaos has become a Mac house we've discovered that macos firefox has the annoying featurette of going catatonic if you make the mistake of leaving it running for more than about 72 hours. About all that firefox has going for it now is adblock, and as soon as a good adblock replacement is written for safari I'm going to hurl, with great force, firefox out the window. But I digress.) It still doesn't support the traditional /etc/cron.allow and /etc/cron.deny files, but I'm still trying to decide if I want to restrict cron access and, if so, whether it's better to do it with Yet Another control file, group access, or some as-yet-undefined control mechanism.

But, anyway, cron still works for me (not a guarantee it will work for you; at work I've got a couple of raging fires where new code that I tested and verified that it worked doesn't work for other people. Grrrr) and that makes it good enough to be New Code!


Photo of the day


(No very much of a) still life with cat and freshly painted red chair.

Oct 23, 2007

New Code!

As I've been working on cron, I've been slowly commenting up the code as I follow the case of the mysterious zombie children, and this makes it difficult to figure out how much code bloat there is versus commentary bloat. I looked around online to see what I could find, and couldn't find anything that looked simple and/or written in C. So I wrote a quick and dirty version that runs cpp and picks out the code lines that belong to the module I'm trying to count.

It's painfully naive (if a macro expands into multiple lines, they're counted, and code that's #ifdeffed out isn't counted,) but it gives me a better idea of the amount of codebloat than wc gives me.

And it's got a manpage! Which makes it a perfect candidate to be listed as New Code!

Oct 22, 2007

A sunny fall day in Portland

In the afternoon, I walk from work to the last bus stop before the Ross Island bridge. It's been cold and cloudy for the past few days, but today was one of those bright sunny fall days with almost no clouds in the sky, and the views from the west side of the Willamette were spectacular. There's a lot of clutter around the view towards Mount Hood, but if you're at the Ross Island bus stop, it's possible to get a nice picture of one of the local stratovolcanoes framed by trees and the clutter of the city (this is only temporary; the people who own Zidell Marine have got a US$100 or so million dollar measure 37 claim against the City of Portland (for what, I'm not sure; possibly they're trying to put a line of condos right along the shore and the west short walking path would interfere with their plan$) and I'm sure that's going to be followed by replacing the shipyard with a couple of barkingly hideous but very profitable condominium towers. So enjoy the view while you can, because it's not going to be too long before the west approaches of the Ross Island bridge are going to be in a canyon between skyscrapers.)

For mass transit, the Lathe-of-Heavenish aerial tramway isn't the most exciting thing in the world, but I still have my camera at the ready when I'm walking near it. North and South are still new enough so they look very nice on a bright sunny afternoon, so I'm glad I didn't miss the chance of talking a picture as they swept by each other this afternoon.

Oct 21, 2007

Cute baby pictures of the day

Russell looks over his shoulder Silas through a windshield darkly

We all went to Silas's friend Tucker's birthday party today, and while the bears were messing around I snuck around to take pictures of them.

Russell has had enough of my photo habit, so he tries to hide his face when I've got a camera aimed at him. But he can't help peek over his shoulder every now and then, so if I'm sneaky enough I can get a picture while he peeks.

Silas, on the other hand, has not become jaded yet, so I don't have to sneak. Today I had the lensbaby on my Pentax when Silas was sitting on the front hood of the car, and he spotted me in mid-picturetaking. Click click!


Project of the day (a miracle of science edition)

About 4 years ago, we were up at SCRAP and I spotted a pile of 18" square woolen fabric scraps, thought that they'd be nice to have around so I could use them for hypothetical future projects, and brought them home for the projects pile. Projects with fabric require sewing, and I didn't have a sewing machine, so they lingered in the warehouse while I worked on various other projects around them.

Last spring, my ex-stepmother-in-law offered me her Singer Centennial Featherweight, which had been retired since she'd gotten a much more sophisticated modern sewing machine. I eagerly accepted, and when it got here I set to work.

... and snapped off the needle.

I had a junker sewing machine lying around (a yard sale prize), so I pulled the needle off that, plopped it into the sewing machine, fired it up, and snapped off the needle again.

Sigh.

I packed up the sewing machine, put it out of the way, put sewing needles on my shopping list, and immediately forgot about it until this spring, when I was reminded of it by running across three more machine needles at, you guessed it, SCRAP. I bought those needles, brought them home, and foolishly dropped them into my workshop in the basement, where they immediately vanished and did not resurface until I cleaned it out this summer.

When I found them again, I'd stacked up a bunch of projects which I wanted to get done before fighting with the sewing machine, so I didn't actually get around to setting up the sewing machine again until this afternoon.

I set it up, dropped one of the new needles in, fired the machine up, and the needle snapped after the third stitch. Well, that won't do; I pulled the bobbin mechanism apart, cleaned all of the thread debris (from the previous two attempts) out, put a drop of light machine oil on the bobbin needlerace, and carefully hand-rotated the stitcher until it stopped jamming against the (second) needle on the exit ramp.

This time it worked and successfully completed a sewing test (the best: "what is it?" Me: "Um, it's got cats on it"), so I went over to the project bin for something more substantial, and discovered the forlorn pile of woolen fabric from scene 1.

10 minutes of sewing, 5 minutes of stuffing (I had some poly stuffing left over from a previous upholstering project, and it was just barely enough to stuff this pillow), and another 10 minutes to sew up the hole I had to leave so I could stuff the thing, and *poof* a rustic pillow that will be just the thing for our summer camp (provided we ever build it.) And I've still got enough of this fabric to make 5 or 6 more pillows.

1 comment

Oct 20, 2007

Boy and decorative squash


Silas found an appealing gourd at the pumpkin patch.


The Llewellyn Pumpkin Patch

Every fall, the Llewellyn Foundation sets up a pumpkin patch to raise money for Llewellyn school, which by happy coincidence happens to be the school that the bears attend. For the past three years, the best has been part of the foundation, and does some of the work for the pumpkin patch. My contributions are fairly minimal; they use the lemonade stand I built for the bears as their sales booth, and I hover around for the afternoon making sure the bears don't light themselves on fire.

It's a pretty boring afternoon for me, but the bears love it; they spend 4 hours charging around with their friends and can only be pried away when their friends have been dragged away, one by one, by their parents.

Oct 19, 2007

Friday Dust Mite Blogging™

Dust Mite has no eardrums, but persists in being attracted to the cute little Apple music PCs. Regrettably, the Open Source®™© OSes available for the iPod either (a) don't work on this particular model or (b) don't allow me to play rogue. And, of course, there's nothing that plays Ogg Vorbis-format music, so the long process of re-ripping the entire stupid music collection has begun.


As you sow so shall you reap

[money] "would have to come from programs. That's 30 new Cub Scout packs, or 800 needy kids going to our summer camp"

Gosh, that's horrible. What's the problem?

The city [of Philadelphia] has decided that the Boy Scouts chapter here must pay fair-market rent of $200,000 a year for its city-owned headquarters

Wow, that's a lot of money. Have you always been paying this, and it's just now become a problem?

he organization's Cradle of Liberty Council, which currently pays $1 a year in rent, must pay the increased amount to remain in its downtown building past May 31, Fairmount Park Commission president Robert N.C. Nix said Wednesday.

So this is recent. Why would Philadelphia suddenly decide to crank up your rent?

City officials say they cannot legally rent taxpayer-owned property for a nominal sum to a private organization that discriminates.

Oh, yes, there is that tiny little detail. Refresh my memory here; who exactly does the Boy Scouts discriminate against?

The Supreme Court ruled in 2000 that Scouts, as a private group, have a First Amendment right to bar gays from membership.

I'm going to grant the deceptively named Cradle of Liberty Council the benefit of the doubt here, because they did attempt to circumvent the homophobic regulations that the “National Council” of the American version of the Hitler Youth put in here. But when the leadership told them that they had to be bigots, the Cradle of Liberty Council had the option of telling the Boy Scouts to go fuck themselves.

They didn't, so now they've got to pay the rent.

And they'll get not a drop of sympathy from me.

--quotes from an Associated Press article, via Joe. My. God..

Oct 18, 2007

Portland at Night


17th and Tacoma, as seen through the front window of the mighty Prius.

Oct 17, 2007

The changing of the guard, seagull-style


One gull flies in, the other gull flies out.


Cute baby picture of the day

Russell and Silas strike a heroic pose on the top of the slide at Westmoreland Park.


Fall foliage, aerial tramway-style

Sure, it's nice to take pictures of the leaves as they change colo(u)r, but it's even better to take pictures when a mass transit vehicle is in sight.

Oct 16, 2007

Railroad picture of the day

I detoured over to the SPYellow Menace mainline on the way home from work today because the northbound Coast Starlight was supposed to be getting into Union Station at around 5pm. I was trying to find a new place to take pictures from, and was planning to take pictures from under the 99e viaduct by OMSI, but that bridge is all fenced off as part of the demolition process, so while I was still wandering around I heard the gates on 9th Ave start to go down and I had to scamper for an clear view to get even a single picture.

I've been trying to make my pictures of moving trains look more like they're moving, so I've been playing with slower shutter speeds. #23 is a bit close, but you can certainly tell that it's moving in this picture.


New Code! (chock-full-of-security-violations edition)

The version of Vixie cron that was on pell worked fine for many years, except for one annoying buglet; after 100 days or so, it would go on strike and refuse to do anything of a cronnish nature until I restarted it and whatever services it had left in a state of disarray when it shut down (some of those services, like syslogd and klogd, have the same sort of annoying defect, but that's another round of bugfixing.) I could have gone in, found the problem, and either patched my copy of Vixie cron or updated to a newer release, but where's the sport in that?

So, last weekend, after the 100 day strike happened again, I put on my NIH hat and started coding. I wrote the scheduler on Sunday, got all of cron working on Monday evening, then wrote the documentation and crontab today, then after a little bit of testing I deleted vixie cron and fired mine up. After discovering a few mishaps (not zombie-hunting the right zombies, which lead to an amazing number of little cron corpses after a hour or so) cron started, ran jobs, and started acting like any old cron should act.

And that makes it New Code!, if you're someone who likes a system with minimally tested software running essential system tasks. I've run Linux since around version 0.12, so minimally tested software is something I'm pretty used to (I will point out that from version .99.6 Linux has been a nice reliable OS for what I need it for, which is a machine to handle mail and program on,) so I'll arrogantly say that 8 hours of testing is enough for any software, as long as security isn't your primary concern.

Update: As promised, there were some bugs. Not the promised security holes, but a misreading of how select() worked which resulted in lots of zero-length mail messages. I rolled the version up to 0.5, which appears to fix that on modern(ish) r*dh*t systems. And, as a little something extra, 0.5 also uses configure.sh to make it marginally more portable than the previous release was.


Well, that certainly makes the game more interesting

TEHRAN, Oct. 16 — President Vladimir V. Putin of Russia told a summit meeting of five Caspian Sea nations in Iran today that any use of military force in the region was unacceptable and in a declaration the countries agreed that none of them would allow their territories to be used as a base for launching military strikes against any of the others.

(--the New York Times)

Iran might not have any nuclear weapons and thus be considered a fair target by the certifiably insane leadership of the United States (and the only-slightly-less insane leadership of Israel), but I'd suspect that the the ex-USSR still has several thousand nuclear devices that are still capable of putting large radioactive dents in the surface of the earth. And, look, Putin is threatening to withdraw from the intermediate range nuclear missile treaty, too, so if he wanted to tweak the west he could turn around and sell Iran a handful of deterrence and there'd be nothing anyone could do aside from either whining or starting a global thermonuclear war.

The diplomatic geniuses in the B*sh junta keep finding that speck of lead in the river of gold. I wonder if the United States will ever have adults running it again?

Oct 13, 2007

New Code (reinventing the wheel edition)

I'm not exactly sure how I got the idea into my head, but last weekend I found myself looking at the copy of ls on pell, thinking “there are too many silly options for this program”, looking at the copy of ls on the work machines and thinking, for the approximately 500th time, “the idiot who thought that color-ls was a good idea needs to be hunted down and beaten to death with an accessability handbook”, then looking at the copy of ls on one of the local bsd machines and thinking that that one was too rococo to live with. And soon after I did this I found myself starting to code.

The versions of ls that most Linux boxes are infested with have all the options you can eat, and a usage message that can choke a horse

Usage: o.ls [OPTION]... [PATH]...
-A--almost-alldo not list implied . and ..
-a--alldo not hide entries starting with .
-B--ignore-backupsdo not list implied entries ending with ~
-b--escapeprint octal escapes for nongraphic characters
-Clist entries by columns
-csort by change time; with -l: show ctime
-D--diredgenerate output well suited to Emacs' dired mode
-d--directorylist directory entries instead of contents
-e--full-timelist both date and full time
-F--classifyappend a character for typing each entry
-fdo not sort, enable -aU, disable -lsto
--format=WORDacross -x, commas -m, horizontal -x, long -l,
single-column -1, verbose -l, vertical -C
-G--no-groupinhibit display of group information
-g(ignored)
-I--ignore=PATTERNdo not list implied entries matching shell PATTERN
-i--inodeprint index number of each file
-k--kilobytesuse 1024 blocks, not 512 despite POSIXLY_CORRECT
-L--dereferencelist entries pointed to by symbolic links
-luse a long listing format
-mfill width with a comma separated list of entries
-N--literaldo not quote entry names
-n--numeric-uid-gidlist numeric UIDs and GIDs instead of names
-o--color,--colour colorize entries according to type
--colo(u)r=WORDyes -o, no, tty (if output is a terminal)
-pappend a character for typing each entry
-Q--quote-nameenclose entry names in double quotes
-q--hide-control-charsprint ? instead of non graphic characters
-R--recursivelist subdirectories recursively
-r--reversereverse order while sorting
-Ssort by file size
-s--sizeprint block size of each file
--sort=WORDctime -c, extension -X, none -U, size -S,
status -c, time -t
--time=WORDatime -u, access -u, use -u
-T--tabsize=COLSassume tab stops at each COLS instead of 8
-tsort by modification time; with -l: show mtime
-Udo not sort; list entries in directory order
-usort by last access time; with -l: show atime
-w--width=COLSassume screen width instead of current value
-xlist entries by lines instead of by columns
-Xsort alphabetically by entry extension
-1list one file per line
--helpdisplay this help and exit
--versionoutput version information and exit

While the traditional Unix ls had a smaller handful of options and a single-line usage message. Oh, and no --color-ls option

Guess which one I prefer? And at 766 lines, it's a small enough bit of code to write and do some trivial tests on in about a week.

It's still tossed into the Mastodon-next source scrapbox, of course (with bits of /bin and libc just sort of flung in there willy-nilly), but having a bit pile of random new code will be a subtle encouragement for working on the packaging system. And in the meantime, I've got a new ls that I can hurl, with great force, at the modern Linux systems I develop on at work and get rid of at least one of the offensive syntax-coloring "enhancements" that makes a modern Unix a less-inviting programming environment.


A not-quite-cloudy-enough evening

The evening sun shines on the eastern side of a split in the clouds at about 5:30 Friday afternoon.


It must be fall again.

My friend Charlie was visiting from Scotland, and the best and I had made plans that she would drive the Prius into downtown, pick him up at the hotel he was staying at, then grab me and return to Chateau Chaos for lunch (and then return him to downtown in time for his 2:30 bookreading, which, amazingly, we actually succeeded in doing.) Our grand plan was that the best would go down to the hotel at 11:45, then run up first to grab me at noon.

The grand plan didn't take into account just how fucked up downtown has become with the new tramway construction (and the hotel Monaco is conveniently plunked down right in the middle of this construction), so I ended up cooling my heels for about 10 minutes while they fought their way out of the city. And while they were fighting their way out of the city, I had more than enough time to realise that the trees were starting to change and this would be an almost perfect time to walk out onto First Ave and take a picture or three.

The trees do look pretty this time of year, don't they?

1 comment

Oct 12, 2007

Aerial Tramway photo of the day

South ghosts behind a green house (made greener by the magic enhance button on iPhoto. Normally I don't enhance things quite this much, but I've been lugging around the Pentax with the old all-manual F1.2 lens and trying to make educated guesses about the amount of light I need, so going back and whacking the photos with a touch of digital drug-effects seems like it's only appropriate.)


New Code!

Postoffice has been pushed up to version 1.4.4 with the addition of the spam=-alike configuration option blacklist=, which gives options for dealing with connections from blacklisted sites.

The new options are much like the spam= ones that were introduced in 1.4.3a;

blacklist=bounce
refuse connections from blacklisted sites (the traditional, and default, behavior.)
blacklist=accept
Accept connections from blacklisted sites, and deliver mail normally
blacklist=folder:path
Accept connections from blacklisted sites, but deliver local mail into the specified folder (in the same format at the folder in 1.4.3a's spam=folder option.)

In all cases, Postoffice logs all connection attempts from blacklisted sites with a REJECT syslog message.

This code was put in to deal with the absolutely terrible bounce reporting that some of the major ISPs (and mail clients) have; some members of my family keep reporting that their mail is being bounced, but without any sort of useful messages, and I have to accept mail from, well, everything so I can at least get the offending mail to land on this machine so I can examine the headers and paths on it. And I'm not going to drop my blacklist, because I don't want to get mail from dial-up accounts. So the next best thing is to add some more New Code! to catch the mysteriously bouncing messages without having the accompanying spam show up in my mailbox.


Friday Dust Mite Blogging™

Dust Mite poses with part of the model railroad collection.

Oct 11, 2007

Come out Come out wherever you are!

National Coming Out
Day is October 11th

Oct 10, 2007

What we did last night

Mekons at the Aladdin Theatre Oct 9 2007


Spider picture of the day

It's been raining, so the vicious inhuman predators have moved their webs onto the the porch to stay safe and dry. It's moderately disconcerting to walk up to the house and have to dodge around a bunch of spiderweb occupied by silver-dollar sized arachnids.

Oct 09, 2007

Bears At Work

Russell and Silas at OMSI last Sunday. Both pictures taken with natural light and the lens cranked wide open (and there's not that much natural light in the bowels of OMSI.)

1 comment

Oct 07, 2007

Idle hands are the devil’s tools.

After going to the trouble of redoing a bunch of inline assembly (my implementation of string.h for Mastodon libc) from the gcc 2.7.x format (the last point where the spill field in asm() worked for register args?) to the gcc 2.>7 format, it's most annoying to try compiling this code on a Mac, only to have my attempt be rudely thwarted by gcc whining that it "can't find a register in class 'BREG' while reloading 'asm'" when it tries to compile something as trivial as

void*
memccpy(void* dest,const void* src,int ch,size_t siz)
{
    register void *res;
    if ( /*dest && src &&*/ siz ) {
        asm("cld\n"
           "1:lodsb\n"
           " stosb\n"
           " cmpb %%al, %%bl\n"
           " je 2f\n"
           " dec %%ecx\n"
           " jne 1b\n"
           "2:"
            : "=D" (res), "=c" (siz)
            : "S" (src), "D" (dest), "b" (ch), "c" (siz) );
        if (siz) return res;
    }
    return NULL;
}

It's not as if the FSF is fucking with the Standard™ again here; asm() is a member of the family of extensions that are not guaranteed to be compatable between point releases, let alone major version changes, but, um, How can you not find a register here? It's not as if someone has come in and taken %ebx, %ecx, %edi, or %esi off to the home for redundant data areas. Can't they just use the (ahem) stack, which is the traditional handy spot to stash copies of registers just in case useland messes with them?

Yes, I can (and I will) just write the offending modules as pure assembly, but it does spoil my half-baked attempt to include the testcases in the source module, and I can't help but think that the FSF would have been better off putting

+-------------+
|HAVE YOU SEEN|
|     ME?     |
|             |
|    %ebx     |
|             |
|LAST SEEN ON |
|GCC 3.4.  IF |
|FOUND, PLEASE|
|INFORM THE   |
|GCC CORE     |
|TEAM.        | 
|             |
+-------------+

Onto cartons of milk in Silicon Valley and other places where compiler writers tend to congregate.

Oct 05, 2007

Friday Dust Mite Blogging™


Dust Mite spends some time contemplating kitchen renovation.


Photo of the day


A little black cat sits on a stoop and watches the traffic on Milwaukie Ave go by.


Think of it as evolution in action

cat(1), Unix version 3:

NAME
cat - concatenate and print
SYNOPSIS
cat file ...
DESCRIPTION
cat reads each file in sequence and writes it on the standard output.

cat(1), bleeding edge gnuware:

NAME
cat - concatenate files and print on the standard output
SYNOPSIS
cat [OPTION] [FILE]...
DESCRIPTION
Concatenate FILE(s), or standard input, to standard output.
-A, --show-all
equivalent to -vET
-b, --number-nonblank
number nonblank output lines
-e
equivalent to -vE
-E, --show-ends
display $ at end of each line
-n, --number
number all output lines
-s, --squeeze-blank
never more than one single blank line
-t
equivalent to -vT
-T, --show-tabs
display TAB characters as ^I
-u
(ignored)
-v, --show-nonprinting
use ^ and M- notation, except for LFD and TAB
--help
display this help and exit
--version
output version information and exit

It's evolution, all right, if your idea of evolution is the nonstop bolting on of shiny, but completely useless, trinkets. And it's not just the festering pit of gnuware that does this, either; FreeBSD has a cat that is draped with a plethora of shiny twinkly options, and it is not redeemed in the least by having a functional -u flag.

The cat I wrote for Mastodon-next is 66 lines long, and that includes the copyright (“This code is in the public domain”) and a conditional "copy via mmap" mmap() function (the v3 cat is about the same size, but it's written in a very-pre K&R C, so it can't be compared as accurately.) The gnuware cat, on the other hand, is over an order of magnitude longer, and that's not including the applications library that's linked with the horrible thing.

But my cat doesn't have useful options like --version or --help, or a manpage that helpfully chirps “look in the info file!”, so it's obviously inferior.

*shudder*

Oct 03, 2007

New Code (silly trivial edition)!

I was home sick today, and halfway through the afternoon I started to itch to write code. I'm slowly building up the list of essential programs for the core of the next release of Mastodon, and I've been needing to write a version of date that supports some of the new date formats that have appeared since the 1980s.

It turned out that the copy of strftime() in libc 4 doesn't deal very well with the requirements of the new date formats, so I was stuck either patching the existing (LGPLed and incomprehensible) strftime(), snarfing a modern Posix! Compliant! strftime() from one of the BSDs, or writing my own.

I wrote my own, of course, but I edited the BSD manpage for it. I'm sure the Posix-style %E? format options are useful for someone, but that someone isn't me, and they're nowhere to be found in either the code or the manpage.

But, anyway, back to date, which was the reason I needed to write my own strftime(). Date has new display formats to reflect the exciting world of the information superhighway:

orc@pell(bin)> date
Wed Oct 03 21:12:51 PDT 2007
orc@pell(bin)> date -I
Wed Sep 5146 21:12:54 PDT 1993

The new -I (aka --psu) option correctly displays the date for usenet purposes. Remember, It's always September on the Information Superhighway!, and this New Code! will help you know the correct date.

2 comments

Oct 02, 2007

Photo of the day

a closeup of a cozy fire
A cozy fire on a cool fall evening.


New Code!

The mimecode package has been pushed up to version 1.2.1 with the addition of a whole bunch of stuff:

  1. For symmetry with uudecode I've written a uuencode, and I've added support for the base64-encoded files to both of them.
  2. uudecode (and unravel when it's fed a uuencoded file) now correctly set the mode of the extracted file to what was specified on the begin line.
  3. I've added a bunch of command line options:
    1. Ravel now has the -6 option, which tells it to encode all attachments in base64.
    2. Uuencode now has the -m option which tells it to use the base64 uuencoding.
    3. Unravel and uudecode have the -f option, which tells them to overwrite existing files instead of trying to write to a new "(copy n)" file.
    4. Unravel and uudecode also have the -c option, which tells them to strip the pathnames off output files and just write to the current directory (this does not apply to any output filename given by -o)
  4. I've removed a bug with base64 decoding that was making it attempt to decode the newline at the end of the encoded lines (a silly off-by-one error that didn't bite me until I added base64 handling to uudecode)
  5. I've added a manpage for uuencode (the manpage is a modified BSD page, and the encoder is the encoder that came from the 4.4bsd implementation of uuencode)
  6. There's now a README and a INSTALL document describing what mimecode is and how to install it.
  7. To avoid accidentally overriding existing copies of uuencode and uudecode, I've added the --enable-uuencode flag to configure.sh so that those binaries won't be installed unless you really want them to be.
  8. And, of course, many fussy changes to the manpages to make them prettier.

There are more features I would like to add (the -p flag for uuencode), but this code is now to the point where I can add it to the promised next release of Mastodon, and can dump it on an unsuspecting world as the latest installment in the saga of New Code!


Trolley photo of the day

One of the new Inekon trolleys scoots northwards under the Ross Island Bridge as my #19 bus goes overhead.

—30—

Obéir c'est trahir, Désobéir c'est servir
orc@pell.portland.or.us