The Boston Diaries

The ongoing saga of a programmer who doesn't live in Boston, nor does he even like Boston, but yet named his weblog/journal “The Boston Diaries.”

Go figure.

Saturday, January 01, 2011

What? Not another 365 days …

HAPPY NEW YEAR!

Even though we still don't have flying cars, and we never did go back to Jupiter (heck, we never got there in the first place), maybe, just maybe, things will improve in 2011.

And remember, only 721 or 723 days left until The End Of the World As We Know It (but I feel fine).

(This post brought to you by EPS. Had this been an actual post, it most likely would have been exceedingly late)


Code and Data, Theory and Practice

From
Steve Crane <XXXXXXXXXXXXXXXXXXXXX>
To
Sean Conner <sean@conman.org>
Subject
@siwisdom twitter feed
Date
Sat, 1 Jan 2011 15:46:14 +0200

Hi Sean,

Are you aware that the quotation marks in the @siwisdom <http://twitter.com/siwisdom> tweets display as &ldquo; and &rdquo; in clients like TweetDeck? Perhaps you should switch to using regular ASCII double quotes.

Regards and Happy New Year.

Yes, I'm aware. They show up on the main Twitter page as well, and there isn't much I can do about it, other than sticking exclusively with ASCII and forgoing the nice typographic characters. It appears to be related to this rabbit hole, only in a way that's completely different.

What's going on here is explained here:

We have to encode HTML entities to prevent XSS attacks. Sorry about the lost characters.

counting messages: characters vs. bytes, HTML entities - Twitter Development Talk | Google Groups

And XSS has nothing to do with attacking one website from another, but everything to do with the proliferation of character encoding schemes and the desire to fling bits of executable code (aka ``Javascript'') along with our bits of non-exectuable data (aka ``HTML''). The problem is keeping the bits of executable code (aka ``Javascript'') from showing up where it isn't expected.

But in the case of Twitter, I don't think they actually understand how their own stack works. Or they just took the easy way out and any of the ``special'' characters in HTML, like ``&'', ``<'' and ``>'' are automatically converted to their HTML entity equivelents ``&amp;'', ``&lt;'' and ``&gt;''. Otherwise, to sanitize the input, they would need to do the following:

  1. get the raw input from the HTML form
  2. convert the input from the transport encoding (usually URL encoding but it could be something else, depending upon the form)
  3. possibly convert the string into a workable character set the program understands (say, the browser sent the character data in WINDOWS-1251, because Microsoft is like that, to something a bit easier to work with, say, UTF-8)
  4. if HTML is allowed, sanitize the HTML by
    1. removing unsupported or dangerous tags, like <SCRIPT>, <EMBED> and <OBJECT>
    2. removing dangerous attributes like STYLE or ONMOUSEOVER
    3. check remaining attributes (like HREF) for dangerous content (like javascript:alert('1 h@v3 h@cxx0r3d ur c0mput3r!!!!!!!11111'))
  5. escape the data to work with it properly (or else face the wrath of Little Bobby Tables' mother).

Fail to do any of those steps, and well … “1 h@v3 h@cxx0r3d ur c0mput3r!!!!!!!11111” And besides, I'm probably missing some sanitizing step somewhere.

Now, I could convert the input I give to Twitter to UTF-8 and avoid HTML entities entirely, but then I would have to convert my blog engine to UTF-8 (because I display my Twitter feed in the sidebar) and while it may work just fine with UTF-8, I haven't tested it with UTF-8 data. And I would prefer to keep it in US-ASCII to avoid any nasty surprises.

Besides, I shouldn't have to do this, because that's why HTML entities were designed in the first place—as a way of presenting characters when a character set doesn't support those characters!

Hey—wait a second … what 's this river doing here?

Sunday, January 02, 2011

The inexorable march of technology

From
Steve Crane <XXXXXXXXXXXXXXXXXXXXX>
To
Sean Conner <spc@conman.org>
Subject
Re: @siwisdom twitter feed
Date
Sun, 2 Jan 2011 10:53:12 +0200

Hi Sean,

I see you blogged about this, stating that the problem occurs in Twitter's own web client too. I found that interesting as I don't see the problem in the Twitter web client. As shown in this screenshot it all looks fine.

[SiWisdom on Chrome]

I'm using Google Chrome and I wondered if the browser may be playing some part so I opened the same page in Internet Explorer, which I only use under duress, and what a difference.

[SiWisdom on Crack—I mean on IE]

There's the problem, as large as life, but the UI looks different. I recall that I opted to use the new UI a while ago and not being logged in Twitter must showing me the old UI, presumably still the default. So I log in and voila, the same UI I see in Chrome, with all characters represented correctly.

[SiWisdom strung out—I mean on IE]

So we can conclude from this that there was indeed a problem; it was Twitter's fault; and they have addressed it in their new UI. This leaves only third party clients to fXXX things up for you.

Cheers.

Oh, now he tells me, after I make sure mod_blog works with UTF-8 (it handled a post written in a Runic alphabet just fine), reconfigured the webserver to serve up the appropriate headers and converted the data file for Silicone Wisdom to UTF-8.

Okay, it didn't take me that long, and as my friend Jeff said:

It is no longer an ASCII world, it's a Unicode one. I have run in to this a lot and anything that uses XML, like a Twitter feed is going to be encoded into UTF-8. It is profoundly annoying, but spreading.

And progress marches on …

Update a few seconds later …

The automatic posting to MyFaceSpaceBook revealed a similar issue. It is to laugh.

Monday, January 03, 2011

UTF-8 is hard. Let's write device drivers!

Nice. I switch my Stupid Twitter Trick to use UTF-8, and this is what I get for my trouble:

HTTP/1.1 401 Unauthorized
Date: Mon, 03 Jan 2011 12:29:02 GMT
Server: hi
Status: 401 Unauthorized
WWW-Authenticate: Basic realm="Twitter API"
Content-Type: application/json; charset=utf-8
Content-Length: 70
Cache-Control: no-cache, max-age=300
Expires: Mon, 03 Jan 2011 12:34:02 GMT
Vary: Accept-Encoding
Connection: close

{"request":"\/1\/statuses\/update.json","error":"Incorrect signature"}

No UTF-8 characters, posts fine. Any UTF-8 characters, I get this. I think the problem is that the character set isn't being sent along with the post and I don't have a clue about how that's done. Nor do I think there's an actual standard for this (I don't recall ever coming across one).

Sigh.

This UTF-8 stuff is hard. No, I mean hard. I wish I was making that up.

Tuesday, January 04, 2011

It's hard to break a program when the network keeps breaking

One of my jobs at The Corporation has been to load test a phone network service by simulating a ton of calls and see where our service breaks. Which means I get to write code to simulate a phone network initiating calls. It's not easy, and no, it's not entirely related to The Protocol Stack From Hell™ (but don't get me wrong—there's still plenty of blame to go around).

Problem the first: generating a given load, a measured set of packets per second. It's harder than it sounds. Under the operating system we're using, the smallest unit we can reliably pause is 1/100 of a second. If I want to send out 500 messages per second, the best I can do is 5 packets every 0.01 seconds, which isn't the same as one packet every 0.002 seconds (even though it averages out). The end result tends towards bursty traffic (that is, if I attempt to control the rate; if I don't bother with that, I tend to break the phone network connection—more on that below).

Sure, there's some form of congestion control in The Protocol Stack From Hell™, but attempting to integrate the sample code provided into my testing program failed—not only do I not get the proper messages, but what I do get is completely different from the sample program. This is compounded by the documentation (which everybody agrees is completely worthless) and the fact that this is the first time I've ever worked on anything remotely related to telephony. I'm unfamiliar with the protocols, and with the ins and outs of The Protocol Stack From Hell™ (unlike my manager R, who's worked with this stuff for the past fifteen to twenty years, but is swamped with other, manager-type work).

Now the second problem: even though the testing system is in the same cabinet, and hooked to the same network switch, as the target system (in fact, I think they're physcially touching each other) due to the nature of the phone system, communications between phone network components must go through an intermediary system known as an STP; actually, a pair of STPs (for redundancy). Unfortunately for us, the only STP we have access to is out in Washington State (where The Corporate Master Headquarters are stationed) and said traffic between our two testing systems (here in Lower Sheol) goes back and forth across the Inernet over a VPN.

Yeah, what I can say? When I asked about getting an STP a bit closer to us, I was told it wasn't in the budget (and no wonder—the price is far into the “if you have to ask, you can't afford it” territory—deep into that territory).

So we're stuck with a six thousand mile round trip for the phone network traffic. And now we come to the punch line—the Internet is broken. The quick synopsis: excessive buffering of Internet traffic by various routers is causing a breakdown of anti-congestion algorithms used by TCP/IP. Now, the article is talking about buffer bloat in consumer grade equipment, but it is possible that there are commercial grade routers doing the same thing—excessive buffering and that could be the cause of largish spikes in traffic, as well as increased latency in round trips. If there's a spike in traffic, the STP will attempt to assert flow control, but if there's still traffic coming in, it's considered an error. Also, the phone network is very time sensitive and execessive latencies are also an error condition.

Worse, if the STP receives too many errors from an endpoint, it (like every other STP on the phone network) is programmed to take that endpoint out of service. It's hard to say where that point is, but it happens with frightening regularity when I attempt to do load testing. The packets are being pushed when suddenly we start receiving either canceled messages, or delivery failures about five levels down in the protocol stack, which means one (or both) endpoints have been cut loose from the phone network due to excessive errors. It then requires manual intervention to restart the entire stack on both sides.

So, there's bursty traffic due to my attempts at sending a settable amount of traffic. Then there's the (possible) bursty traffic due to excessive buffering across the Internet. Oh, and I forgot to mention the licensing restriction on The Protocol Stack From Hell™ that limits the number of messages we can send and receive. All that makes it quite difficult to find the breaking point of the program I'm testing. I keep breaking the communications channel.

That tends to put a damper on load testing.

Friday, January 07, 2011

Why did I not get the memo?

In what is sure to be one of the most acclaimed comics events of 2011, Fantagraphics has announced that they will be publishing a definitive collection of Carl Barks' seminal run of Donald Duck comic stories. In an exclusive interview with Robot 6, Fantagraphics co-publisher Gary Groth revealed that the company—which announced their plans to publish Floyd Gottfredson's Mickey Mouse comics last summer—had acquired the rights to reprint Barks' work from Disney and that the first volume will be released in fall of this year. The comics will be published in hardcover volumes, with two volumes coming out every year, at a price of about $25 per volume.

Via Eccentric Flower, Exclusive: Fantagraphics to publish the complete Carl Barks | Robot 6 @ Comic Book Resources – Covering Comic Book News and Entertainment

Squeeeeeeeeeeeeeeeeeeee!

Thursday, April 21, 2011

A Stupid Twitter UTF-8 Bug Fix Du Jour

[Yeah, this is late. So very late. No excuse really, other than a general lack of enthusiasm for posting to the blog (not to mention I missed this years Yearly LiveJournal Post). Hopefully, this ennui has passed and regular service will resume.]

From
Tony Finch <XXXXXXXXXXXX>
To
sean@conman.org
Subject
Jef Poskanzer's Twitter tools
Date
Thu, 21 Apr 2011 10:39:29 +0100

I see from your comment on jwz's blog that you are also a fan of Jef's Twitter tools:
http://www.jwz.org/blog/2011/04/a-badge-for-the-software-industrys-failures/#comment-90304

I see from your blog that you also encountered the UTF-8 bug:
http://boston.conman.org/2011/01/03

I found this bug in October but Jef didn't release a fix until a couple of weeks after your blog post in January. See the last couple of comments at:
http://fanf.livejournal.com/108436.html

Tony.

A one line patch and now my Stupid Twitter Project is perfectly fine and I no longer have to worry about Twitter mishandling HTML entities any more.

Monday, May 02, 2011

What's this red stuff here? … oh, it's catchup.

Yeah, it's been awhile. I just haven't felt like posting since … oh … it's been since early January.

Ahem.

Anyway.

Work at The Corporation has been a series of long periods of intense bordom punctuated by short bursts of sheer terror (in other words—“hurry up and wait!”) as we've been going through a testing phase (more on that later). Meanwhile, my current private “project du jour” is dealing with email. More specifically, working slowly towards indexing a rather large archive of email I've collected over the past fifteen years (and more on that later as well).

Also, Hoade and his lovely wife Ann survived the terrible tornadoe that ripped through Tuscaloosa a few days ago with nary a scratch. Their house, however, did not survive (much like large portions of Tuscaloosa didn't survive). He's also coming down to Lower Sheol to visit; his plans made a few days before he and Ann lost their house. The plans are still on and it'll be nice to see him again without falling into a cactus plant.


“He's one of the old gods! He demands sacrifice!”

Another day, another Mac OS-X automatic update.

I'm growing leary of Mac OS-X updates. I'm also growing leary of Apple in general. I'm not saying I refuse to use their products–heavens no! Chez Boca is slowly turning into Apple territory with one Mac mini, A Mac laptop, an iPad and two iPhones. The computers just work (and give it time Bunny—you'll get use to the interface, trust me).

But I get the feeling that doing anything a bit out of the ordinary is punished, for Steve Jobs is not a kind and loving god—he's one of the old gods! He demands sacrifice! His way, or no way.

The only change I've made to the system is to have syslogd forward its logs on the Mac to my Linux system (and to do that, I had to figure out how to edit /System/Library/LaunchDaemons/com.apple.syslogd.plist, which is a binary file, to add one command line option to syslogd when it starts) and the last time my Mac auto-updated (last month) it completely overwrote my changes and I lost an hour trying to remember how I initially set it up and troubleshoot why it wasn't working properly.

Thanks, Steve.

More troubling though, are some of the logs I'm seeing from the Mac. Such as:

fc00::3 | /usr/libexec/taskgated | user debug | May 02 15:48:15 | no
system signature for unsigned /Applications/Firefox.app[18605] 
(pardon the rather unorthodox output from my syslogd)

The only executables that are thus logged are those that I compiled, or have been downloaded off the Internet (like Firefox for instance). The man page for taskgated says this:

taskgated is a system daemon that implements a policy for the task_for_pid system service. When the kernel is asked for the task port of a process, and preliminary access control checks pass, it invokes this daemon (via launchd) to make the decision.

which doesn't reassure me all that much. Also, given the control that Apple exerts over the iPhone and iPad software ecosystem, how long until Apple starts tightening its grip over the software echosystem of the Mac?

Okay, I doubt they'll go so far as to remove the ability of third party applications from running on the Mac, but still … if I have to worry about every update reversing changes I've made to the system …

Tuesday, May 03, 2011

“Mammas, don't let your babies grow up to be Xanadu”

Too big to fail one more time? How about too ugly or redundant to succeed? The long-languishing, and design-challenged Xanadu project sparks such thoughts.

Rebranded “American Dream@Meadowlands,” Xanadu is highly visible, and abuts an ecological treasure. Perhaps I can offer a comparative context. The Twin Cities' Mall of America is another mammoth retail complex that Triple Five co-developed. It, too, received substantial public funding— mainly for such infrastructure as access roads and parking ramps. In 1993, it was the country's largest mall.

Via Impudence, The Era of Big Malls Is Over - Room for Debate - NYTimes.com

What is is about failure with projects named “Xanadu?”

There's Samuel Coleridge's poem, unfinished because he was interrupted by Dirk Gently, also known as the person from Porlock (okay, okay, the poem's actual name is “Kubla Khan”, but it's one of the most, if not the only, famous literary reference to Xanadu).

Then there were the Xanadu houses, all since gone.

There is (or was?) Ted Nelson's Project: Xanadu (named after the poem), the precusor to the World Wide Web and never fully realized (it being “six months from being done” for over thirty years).

And lest we forget the movie, which sucked. Big time. Enought for it to be Gene Kelly's last movie.

The verdict?

Don't name anything “Xanadu” if you want it to succeed.


“No matter where you go, there MyFaceSpaceBook is”

With the MyFaceSpaceBook “Like” button appearing all over the web, I realized that the intent wasn't just to indicate that I liked a page, but to track my web browsing habits. And it didn't matter if I was logged in or not, because any reference to MyFaceSpaceBook involved browser cookies and the sites I viewed when logged out of MyFaceSpaceBook could be reconciled with me when I logged back in.

So I started deleting any cookies dealing anything with MySpaceFaceBook before logging into the site, and again deleting them after logging out and closing the tab (that last step was important because I found out that MySpaceFaceBook captured the “tab-close” event and set a cookie).

It suddenly struck me the other day though, that I have a static IP address and that it doesn't matter if I delete the cookies or not, because MySpaceFaceBook could still reconcile any cookies sent to my IP address since it never changes.

Sigh.

No, not only do they know I visit Cracked (I never did care for Cracked the magazine, preferring Mad the magazine, but Cracked the website is miles ahead of Mad the website) but also Justin Bieber (not to be confused with Justin Beaver).

Um … that last site … with Justin Bieber … that's just to throw the MySpaceFaceBook tracking off.

No, really!

Ahem.

Anyway …

So, what's the point in trying to scrub cookies with MyFaceSpaceBook had me pretty much pegged by my IP anyway? Even if I didn't have a static IP address, it still wouldn't be that much of a shield, given that The Monopolistic Phone Company™ probably uses a small pool of addresses for my area anyway, and what with IP address geolocation, that would still give marketers valuable demographic information about my web viewing habits.


From the “Um … yeah” Department.

Oh, and speaking of viewing … habits somehow, the existence of this Velvet Store doesn't surprise me …

Wednesday, May 04, 2011

This kind of puts your boss into perspective …

… a few weeks later a guy broke into Frick's office and shot him in the neck. Twice. At this point Frick rose up (presumably laughing deeply while his wounds suddenly healed before the assassin's eyes) and fought back. The cops came and arrested the assassin, and Frick was back to work in a week. And by "back to work" we mean he quickly fired 2,500 workers, and halved the pay for the ones who were left.

The 6 Most Horrific Bosses of All Time | Cracked.com

And Henry Frick was only the fourth most horrific boss of all time. I mean, I thought my boss at Negiyo (it's been over ten years now) was psychotic—he got pissed at me because I came down with acute bronchitis and took a few days (okay, two weeks!) off. He dismissed the doctor's note I procurred, changed my schedule without informing me, and had scheduled my exit interview with HR, while telling me, in no uncertain terms, that he had full blown pneumonia for six weeeks and that never stopped him from coming into work every single XXXXXXXX day. I found out later that a few months before I started with Negiyo, he had a somewhat invasive heart procedure and was back to work the next day!

He also had a habit of logging into the computers systems at night and checking up on us third-shift workers (I'm not going to say he had no life, because who am I to cast that aspersion on someone, but he certainly took his job way too seriously, especially since the department itself was nothing more than an expanded version of Tom Smykowski's job (no, really! If tech support thought a server was down, they would call our department. We would ping the machine, and if it didn't respond, we could then call the Unix or Windows administrators and tell them a machine was down. Seriously! That was the job! Some well written scripts could have done our job. Such was life at Negiyo).

After reading that article, I realized that it wasn't as bad as it could have been. At least he didn't lock us in a burning down office.

(Just a warning—if you are anything like me, then viewing any page at Cracked.com will suck you into that abyss for easily a few hours. Just thought I should warn you.)

Friday, May 06, 2011

“A bird of arts and letters”

Dr. Fuchs's Donald was no ordinary comic creation. He was a bird of arts and letters, and many Germans credit him with having initiated them into the language of the literary classics. The German comics are peppered with fancy quotations. In one story Donald's nephews steal famous lines from Friedrich Schiller's play “William Tell”; Donald garbles a classic Schiller poem, “The Bell,” in another. Other lines are straight out of Goethe, Hölderlin and even Wagner (whose words are put in the mouth of a singing cat). The great books later sounded like old friends when readers encountered them at school. As the German Donald points out, “Reading is educational! We learn so much from the works of our poets and thinkers.”

But even the “adult” ducks end up sounding more colorful than they do in English. Fuchs applied alliteration liberally, as, for example, in Donald's bored lament on the beach in “Lifeguard Daze.” In the English comic, he says: “I'd do anything to break this monotony!” The über-gloomy German version: “How dull, dismal and deathly sad! I'd do anything to make something happen.”

Via Tim Carmody (filling in for Jason Kottke), Why Donald Duck is the Jerry Lewis of Germany - WSJ.com

I've heard that Donald Duck & Co. comic books were always more popular in Europe than here but I never quite understood why until this article. The dialog wasn't dumbed down, it was cranked up! And it outsold Superman.

Who'd a thunk it?


And now for you Calvin and Hobbes fans …

In the same article about duck comic books outselling Superman in Germany is a small reference to The Calvin and Hobbes Wiki, for all your Calvin and Hobbes trivia and minutiae.


Notes on a telephone conversation wherein one party learns a painful truth about spending other people's money

“Guess how much Office Depot wants for a 10′ cross-over cable?”

“Oh … maybe $20?”

“Try $26.99. That's insane! Home Depot sells them for around $7.00.”

“So why aren't you at Home Depot then?”

“They ran out.”

“Ah.”

“But $26.99! That's insane! I realize they have to make money, and while I can make my own it's more a convenience factor, but $27?”

“See, Office Depot expects you to buy the cables and expense it to a company, so you aren't spending your money, but Other People's Money™.”

“But $80 for a few cables?”

“Other People's Money™, man.”

Monday, July 04, 2011

The Inadvertent Michael Jackson Impersonation

Our neighbor tends to go all out on the Fourth of July, so there's no real need to go anywhere for a fireworks show. So when he and his friends started firing off their works, Bunny and I went outside to enjoy the show.

[He's got both kinds of fireworks!  Vertical AND horizontal!] [Talk about your bright ideas] [Ba-boom!]

Then this one is lit off:

[Compared to the prior one, that isn't a firework]

My reaction was pretty much: Hmm … wow that's loud, and large, and low, and oh XXXX XXXX that's going to XXXXXXX land on me get it off get it off get it off. “Aaaaaaaaaaaaaaaaaaaaaaaaaaah!”

Wow.

I've been in an explosion.

Now my hair caught on fire.

Okay, okay, technically it wasn't on fire, but it was singed, and man, singed hair smells horrible.

Blech.

[It actually felt like plastic—very weird]

Fortunately, I suffered no burns, but I was lucky. It could have much much worse, which is a nice time for this little PSA:

[Amateurs: There's a reason professionals exist.]

I think next year, I'll watch the fireworks on TV from the comfort of an underground bunker.

Friday, July 08, 2011

“'Tis but thy sex that is my enemy; Thou art thyself, though not an XX.”

This past century, large portions of the American South have been consumed by an unintended side-effect.

I refer to the infamous “kudzu” vine, imported from Japan for its stunning erosion-control properties. This tactic worked: Crumbling riverbanks and hillsides were stabilized all over the South—but, then, everyone realized with mounting horror that this hardy legume is almost completely unstoppable anywhere protected from hard freezes, growing at the awesome rate of a foot per night and reaching heights of 100 feet. Entire abandoned houses have been observed to vanish under a kudzu carpet, over a summer growing season. It's now considered a pest; sometimes, an outright menace.

The plant can be used with caution, where its invasive side- effect is known and planned for—but the point is that it was deployed without understanding its full effects.

Laws' side-effects, likewise, can render them self-defeating (though, on the bright side, bad laws are easier to eradicate than kudzu): I'm going to explain, below, why recently popular marriage-definition legislation like California's November 2008 “California Marriage Protection Act” (an initiative state-constitutional amendment) creates kudzu-class unintended side effects its proponents haven't anticipated and will find horrific—in that they're going to end up mandating and legally sanctifying exactly the sort of same-sex marriages they're intending to ban.

Via Randall Munroe (which itself was via Hacker News), Kudzu and the Marriage Amendment

No, really!

The article outlines eleven instances where the “visual” gender doesn't match the actual “genetic” gender and thus, the laws outlawing same- sex marriages could force “visual same-sex marriages.” Way to go, narrow-minded legislators!

Monday, July 11, 2011

DIY cable managment system

Growing up, my maternal grandmother lived with mom and me. And she was always worried that snarled mess of cables beneath my desk (having two computers means twice the number of power cords, keyboard cables, video cables, mouse cables and serial port cables—a real rat's nest of cables) would spontaneously combust and kill us all in a huge conflagration.

Fortunately, that never happened, but still, it's very unsightly and recently, it's been bugging me.

[It's also a nightmare to sweep under there]

It's been bugging me since I came across this article about using a rain gutter as a cable management tool. It looked simple enough to implement (and it doesn't hurt that my desk has a wood surface) and why not?

All it took was a 3′6″ section of rain gutter:

[Fear the mighty gutter!]

$5.23 for a minimum 10′ section—they even provided the tools necessary to cut it to size, so I have enough gutter sections to do two more desks. And then some other associated hardware:

[The rest of the equipment]

Two rain gutter hangers ($2.35), two screw hooks (62¢ each) and two rubber grommets (98¢ each—wow, they're expensive!). Drill a hole through the hangers, use the grommets to line the holes:

[Instant hanging system]

which will be used to suspend the rain gutter beneath the desk:

[How the pieces fit together]

Then it was a process of screwing in the hooks on the underside of the desk and installing the rain gutter.

[We slide everything into place …] [… and instant cable tray!]

From start to finish (and this includes the trip to Home Depot during rush hour traffic) it took only four hours. It took longer to run the cabling than it did buying the items, but then again, there were quite a few cables (a couple of which I forgot what they did—I hate when there are extra parts after putting everything back together again).

[Look Ma!  No more unsightly cables!] [The Hanging Cables of Babylon]

Much nicer now. And easier to sweep under the desk. Not bad for $15 (and some sore knees).

Saturday, July 30, 2011

“Cowboys and Aliens”

Given all the sequels, remakes, and reboots coming out of Hollywood (not to mention some questionable inspriration—really? A movie based the Hasbro game?) I'm a bit leery of anything coming out of Hollywood these days.

I was even a bit wary of “Cowboys and Aliens even though its not sequel, prequel, remake or reboot (maybe—it is based upon a comic book but reading the storyline in the comic, it seems the movie went its own direction) but after a positive review from a source I trust, Bunny (who originally wanted to see the movie just from viewing the previews) and I went to the movies.

It's an odd movie—it's a solid Western, with Daniel Craig playing an anmesiac thief who stole gold from Harrison Ford, playing a cruel cattle baron, but then it turns into an alien invasion pretty darned quick (and for those of you who saw the trailer—everything in that trailer is in the first half hour of the film). Daniel Craig and Harrison Ford then team up with the remains of the town to hunt down the “demons” (as the aliens are referred to—nice touch) and save the kidnapped townspeople. And then it's a solid alien invasion story, albeit set in the 1870s. It's a film well worth seeing, if just for the solid performances from everybody in the film (although Sam Rockwell's performance reminded me quite a bit of his role in “Galaxy Quest” as the red shirt).

I only have two real quibbles with the film, and if you don't want anything spoiled, stop reading now. You have been warned.

SPOILERS!

The first quibble is the motiviation of the aliens. Any species that is capable of interstellar travel is not going to land on an inhabited planet just for the gold, especially when the indiginous inhabitants can violently fight back. There are probably other planets (or moons) in the solar system with enough gold and life (if any) that won't fight back, as it were. And even if they are here for the gold, why bother the local inhabitants anyway? Land, mine the gold, leave.

I guess they're just sadistic jerks, these aliens.

The second quibble is how one of the characters, who turns out to be an alien who's homeworld was destroyed by the first set of gold mining aliens, even arrived here. This character came here to fight the first set of aliens, but there's no indication of where its ship is, or how it got here, or anything. This is a smaller quibble than the first, but it's still pretty convenient.

But hey, it's a good film otherwise.

Wednesday, August 03, 2011

Old school journalism

Want to freak out a newsroom full of college journalists?

Sit them down at manual typewriters and ask them to plunk “2011” onto a piece of paper.

They’ll only make it halfway.

“Mine’s broken!” one reporter at Florida Atlantic University yelled a couple of Saturdays ago, when we launched the inaugural ALL ON PAPER project. “There’s no number 1 key.”

Via spin the cat, HOW TO BUILD A NEWSROOM TIME MACHINE « journoterrorist

I don't know whether to be amused or horrified.

I used to write a column for the FAU newspaper The Atlantic Sun (now The University Press) and I certainly remember walking into the weekly meetings on Wednesdays and seeing the layouts for the current issue out on the tables. I would then use an X-Acto™ knife to cut out my column (since they were going to toss the layouts) as a momento.

[If you look closely, you can make out the guide lines]

I wrote most of my columns on my TRS-80 Color Computer but there were times when Wednesdays came around and I hadn't even started my column, much less finish, so on those rare occations, I would grab my manual portable typewriter (a gift from my paternal grandfather, who wanted me to learn how to type if I was going to become a programmer) and literally bang out my column at school.

In fact, the column pictured above was one such column banged out on a manual typewriter, written in the cafeteria as I was eating lunch with a few friends. And on my manual typewriter, not only was there no “1” character, there wasn't a “0” character either!

I also found it amazing that the students had to use a make-shift dark room. What? Is there no dark room at FAU anymore? I distinctly remember there being one, back when I took photography.

[This is what they call a “negative”]

Yes, I know all about removing 35mm film from the canister and loading it onto a reel in total darkness, using obnoxious chemicals to develop the film, and once rinsed, letting the film dry overnight, then coming in the next day, cutting the film into strips of five pictures each, mounting the strips into a protective sheet, making the proof sheet, picking which photos (10 out of 72) to print, placing the film into the projector, exposing the photographic paper and using different obnoxious chemicals to develop the picture (and as much as I like my 35mm camera, I do not miss the expense of buying film nor the expense of having it developed).

[This hasn't seen much use in the past fifteen years] [“It is a good day to jump out of a perfectly good airplane!”—Ken Maier]

So I find it odd that they didn't bother to ask the Art department if they could use the dark room.

That is, if the dark room still exists.

Monday, August 08, 2011

“Oh, THAT'S your address? Of course I totally trust you!”

From
"Mrs. Morgan Sherry" <lolo31@wfj2uad7q.homepage.t-online.de>
To
undisclosed-recipients:;
Subject
PAYMENT NOTIFICATION
Date
Mon, 8 Aug 2011 18:16:11 -0700

Hello Beloved,

I am Mrs. Morgan Sherry, I am a US citizen, 48 years Old. I reside in District of Columbia 20534. My residential address is as follows 320 First Street, NW Washington, District of Columbia 20534, United States, am thinking of moving since I am now wealthy. I am one of those that took part in the Compensation in Nigeria many years ago and they refused to pay me, I had paid over $42,000 while in the US, trying to get my payment all to no avail.

So I decided to travel down to Nigeria with all my compensation documents, and I was directed to meet Barrister Larry Ego, who is the member of COMPENSATION AWARD COMMITTEE and a Human Rights Activist (Lawyer), and I contacted him and he explained everything to me. He said whoever is contacting us through emails are fake.

He took me to the paying bank for the claim of my Compensation payment. Right now I am the most happiest woman on earth because I have received my compensation funds amounting to $15,000,000.00 Moreover, Barrister Larry Ego, showed me the full information of those that are yet to receive their payments and I saw your email as one of the scam victims, that is why I decided to email you to stop dealing with those people, they are not with your fund, they are only making money out of you. I will advise you to contact Barrister Larry Ego.

You have to contact him directly on this information below.

COMPENSATION AWARD HOUSE
Name: Dr Larry Ego (Lawyer)
Email: egodrlarry69@gmail.com
TELL: +234-7042778612

You really have to stop dealing with those people that are contacting you and telling you that your fund is with them, it is not in anyway with them, they are only taking advantage of you and they will dry you up until you have nothing.

The only money I paid after I met Barrister Larry Ego was just $350 for the paper works, take note of that.

Thank You and Be Blessed …

Mrs. Morgan Sherry
320 First Street, NW
Washington, District of Columbia 20534 USA.

I almost skipped over this Nigerian 419 scam but the very specific postal address of the sender struck me as odd … really? From Washington, D.C? I've never seen such a specific address listed in any of the Nigernal scam letters I get. So I decided to check it out.

For the record, 320 First Street NW is about two blocks away from the Capitol Building. It's also the address for the central office of the Federal Bureau of Prisons.

Somehow, that's just fitting.

Thursday, August 11, 2011

Tracking down a paper

So I want to read this paper:

META II: A Syntax-Oriented Compiler Writing Language.

Schorre, D. V.
In Proceedings of the 1964 19th ACM National Conference,
ACM Press, New York, NY, 41.301-41.3011, 1964. available as http://doi.acm.org/10.1145/ 800257.808896

Abstract:

Meta II is a compiler writing language which consists of syntax equations resembling Backus normal form and into which instructions to output assembly language commands are inserted. Compilers have been written in this language for VALGOL I and VALGOL II. The former is a simple algebraic language designed for the purpose of illustrating META II. The latter contains a fairly large subset of ALGOL 60.

The method of writing compilers which is given in detail in the paper may be explained briefly as follows. Each syntax equation is translated into a recursive subroutine which tests the input string for a particular phrase structure, and deletes it if found. Backup is avoided by the extensive use of factoring in the syntax equations. For each source language, an interpreter is written and programs are compiled into that interpretive language.

META II is not intended as a standard language which everyone will use to write compilers. Rather, it is an example of a simple working language which can give one a good start in designing a compiler-writing compiler suited to his own needs. Indeed, the META II compiler is written in its own language, thus lending itself to modification.

Tutorial: Metacompilers Part 1

It's avai lable from the ACM but they want $15 for it. Seeing how FAU is just down the street from Chez Boca, I figure it'll be cheaper to obtain a copy there, especially since the Proceedings of the 1964 19th ACM National Conference is is in the library, on the third floor, call number “QA76.A8”, a familar section of the library (it's where all their computer science related materials are stored).

So I'm on the third floor of the library, looking around section “QA76.” I see books in “QA76.A6”, and then books in “QA76.A68” and “QA76.A88” which quickly followed by books in section “QA76.B1”.

Um … did I miss “QA76.A8”? A closer look and … um … a block of wood? What? Did someone really steal a book and replaced it with a block of wood? Oh, it's just a place holder for material that's only available via microfiche. Interesting, I've never seen that before. I keep looking, and no. There are no books in section “QA76.A8” although there is a small section of empty shelving where books in “QA76.A8” would be, if it wasn't an empty section of shelving.

Sigh.

I head back downstairs to the front desk, where they make an announcement that the library will be closing in thirty minutes, never mind the fact that their stated hours clearly means I should have six and a half more hours.

Okay.

I ask the librarian behind the desk about the Proceedings of the 1964 19th ACM National Conference. ``Yes, we do have it, but these missing fields,'' he said, pointing to some blank fields on the screen, ``aren't a good sign. It looks like they've never been referenced at all.''

``Oh.''

``Are you sure you were in the right area?''

``I believe so,'' I said, hoping the librarian would offer to help look for the material.

``Well, you could fill out a missing book report, or you could request an intralibrary loan.'' It was clear the librarian was not going to help me look for the material.

``I was just interested in reading the paper,'' I said.

``Well, as a student, you can fill out the missing book report to have the listing updated in the computer.''

``I'm not a student, although I used to attend.''

``Oh! Do you have an alumni card then?''

``Um ... no.''

``Oh,'' said the librarian. ``Then you can't fill out the missing book report.''

``Oh,'' I said. Thanks. ``I'll just go look around more for the book.''

Then back upstairs to the third floor.

The section I'm looking in, ``QA76.A'', appears to be mostly math related journals and periodicals. The actual computer books are two rows over, in the isle marked ``QA79.C'' even though all the computer books have ``QA76'' as part of their call number. And yes, halfway down that isle is the volume I am looking for, the Proceedings of the 1964 19th ACM National Conference. A quick look at my cell phone (for the time) shows I have twenty minutes to make a copy of the article. It won't take long to make a copy of an eleven page paper.

Seventeen minutes later …

Man was that horrendous. I wasted a minute trying to start the machine, only to realize I needed to select the paper tray before it would copy. Okay, then I find out it's only 10¢ per copy. That's good. But I can't find the copy. That's bad. No paper shot out of the front. Nor out of either side. It wouldn't come out the back—that would be stupid. The copy machine isn't complaining about a jam. But I can't find the copy.

I spend another 10¢ only to find a lack of copy, and a lack of indication that anything is wrong. I start looking all over the copy machine when I find where the copies come out—an alcove about halfway down the machine, hidden from view by the control panel, behind a sign that says “CATION: ELECTROCUTION HAZZARD—EXPOSED MAINS.” Lovely.

I then had to re-copy two pages due to bad placement of the journal on the copy bed. But I did it. With three minutes to spare before the library closed.

Sheesh.

But I have the paper I wanted to read! Woot!


Small, but with an attitude

I don't really know what to make of this:

[A Mini Cooper with the silhouette of nine vehicles on the side]

Bunny and I were leaving the restaurant and parked next to us was this car with nine silhouetted vehicles on the side. And it wasn't like the car in question was an indestructable behemoth.

[Yup.  It's a Mini Cooper]

Nope. It's a Mini Cooper. Now that's scary!

Friday, August 12, 2011

In thinking about it, I think a solid rubber ball would be more reliable than the Monopolistic Phone Company

All I want is a way to get onto the Internet. In other words—all I need is a pipe.

I don't need crap software that requires 1GB of memory and sucks up 100MB of disk space just to configure a stupid DSL modem.

I especially don't want said software to reset DSL password on my behalf after sitting there doing apparently nothing for five solid minutes. What the XXXX?

And I really hate being redirected by the DSL provider to a webpage saying I have the wrong password and then trying to force an install of software on my computer to rectify the problem.

Thank you so much, Monopolistic Phone Company. You've made my Internet experience so much worse.

Is it too much to ask for a XXXXXXXXX simple pipe?

Apparently it is …

[Some background information: earlier this week the DSL connection started bouncing like a hard rubber ball. The wait time for local help was twenty minutes into the future, indefinitely, but immediate help was available from the Bangalore Help Desk™. All the Bangalore Help Desk™ could do was send a new modem; they couldn't authorize a test of the DSL line. Fine, we elected for the new modem. We'll see if this stops the hard rubber ball DSL line from bouncing up and down.]


Emote, monkey boy! Emote!

A few years ago I linked to a site where you could average human faces together and made a prediction that Hollywood would use such technology to “cast” films.

We're closer to being John Malkovich than ever before (link via Jason Kottke).

Monday, September 05, 2011

The trick to flying is to miss the ground

[That's not a plane, nor a drone but someone who's insane]

(YouTube video via Michael Duff)

Hmm … he's just standing around on the side of a mountain, what's he going to—oh, he's going to jump off! Okay …

Ah, he's imitating a flying squirrel … that's neat—Whoa! That was pretty cool! Oh, now some footage from … another … angle … um … isn't he pretty low HOLY XXXX that was close!

Okay … he's still flying … how's he going to land?

Yes, you have to watch this. In HD, full screen if you can. It's simply amazing what he does, which proves that you don't even need to jump out of a perfectly good airplane to show people how crazy you are.

Saturday, September 24, 2011

Like the case, hate the name

Bunny and I were at the Apple Store (she was there to pick up her repaired Mac laptop; I was along for the ride) when I saw this:

[An iPhone … on a tripod—imagine that!]

The Hipstamatic (an unfortunate name in my opinion), which is a tripod mounting case for the iPhone 4 (yes, I have one now—I love it, but both Bunny and I are still pissed off at The Other Monopolistic Phone Company because—well, it's a long story and do we even need an excuse to loathe any Monopolistic Phone Company?). Ever since I got the iPhone, I've been trying to figure out a way to get it mounted to a tripod, and when I saw this, I snapped it up.

The only bit I'm concerned about is a crucial bit—the actual tripod adaptor. It's a small L-shaped piece of metal that screws into the tripod and the case slips over it (it's that vertical bar just below the circle design on the front of the case). This piece is small and I can see it being easily lost.

But it works and it's a simple design, even if it's a bit pricy.


Now THIS is a keyboard!

The USBTypewriter™ is a new and groundbreaking innovation in the field of obsolescence. Lovers of the look, feel, and quality of old fashioned manual typewriters can now use them as keyboards for any USB-capable computer, such as a PC, Mac, or even iPad!

Via Hacker News, USB Typewriter

Wow! What a neat idea! As if my IBM Model M keyboards aren't loud enough, imagine the “clackity-clack-clack” I can get from my old typewriter:

[Hmm … no “1” key, no brackets either—this would be one hard keyboard to program on, except for LISP! I could program in LISP on this thing.]

Intellectual challenge on the one hand … people within 50′ of me wanting to silence me on the other hand.

Thursday, September 29, 2011

I just saved $20 by doing a quick search on the Internet

From
— Permanent Electricity using MAGNETS??? YES! For only $20!!! —- <almostfree@foryouonly.com>
To
sean@conman.org
Subject
Produkt Rekommenderad av — Permanent Electricity using MAGNETS??? YES! For only $20!!! —-
Date
28 Sep 2011 05:44:24 +0200

K?ra sean.zooby@conman.org,


Hello, My name is Ronald Bronson and I'm going to show you how to eliminate your power bill. My Free Energy Blueprint kit is going to show you how to build a magnetic free energy generator,

http://myls.me/r/?cn=magnet

which is a device which increases energy efficiency, and propels itself perpetually using a series of magnets. When properly implemented, this device can power your whole household for free.

http://myls.me/r/?cn=magnet

It's only $20!!!

Hurry!!

~~~~~~~~~~~~~~~~~~~~~~~~~~
F?r att granska denna produkt f?lj l?nken nedan:
http://www.castellux.com/webshop/index.php?_a=viewProd&productId=
~~~~~~~~~~~~~~~~~~~~~~~~~~

Denna e-postar skickadesfr?n http://www.castellux.com/webshop

Avs?ndares IP Adress: {SERDER_IP}

Well, I hate to inform Ronald Bronson but all electricity is made via magnetism—it's just how you rotate a coil of wires through a magnetic field that varies, some generators use running water (hydro-electric), some use steam to drive the turbines that turn the wires (nuclear, oil, coal) and some use gasoline to drive a crankshaft (home generators, backup generators, your car).

But still, I'm curious, so I go to the page. There, I learn that it'll take as little as $200 in supplies, or maybe even as low as $50, or it could be for as little as $100, I too, could be generating electricity to power my home and free myself from the shackles of The Monopolistic Power Company! This device can generate 180W of electricity at 420 RPM, and it can produce more at faster rates.

Oh, so tempting!

The plans are for a “Permanent Magnetic Generator” (it says so right on that page), and a quick search revealed the plans for such a generator. Reading through the plans I get the feeling that had I spent $20 I would have received a copy of what I'm reading right now. Yup, page 5 shows a graph of Watts/RPM and yes, it looks like you can get 180W at 420 RPM. And yes, the list of tools fits on a single page, and the list of materials take a bit over a page. And all the materials required are probably available at a local hardware or home improvement store.

Isn't it amazing what one can find on the Internet for free these days?

But the question now becomes, can it power your house? I seriously doubt it:

The PMG works at low rotational speed. The chart shows the power output of the PMG, charging a 12 volt battery. At 420 rpm it generates 180 watts, which is 15 amps at 12 volts (15A × 12V = 180W).

At higher speed, the PMG can generate more power. But high currents cause the coils to heat up, and so the efficiency gets worse as the output current gets higher.

And even if it could, you still need a way to get the thing spinning. The plans show you can attach the motor to a windmill (plans not included).

So much for getting off the grid.

Even more amusing, at the bottom of the page is this bit of verbiage:

This page is protected by copyscape. Do not copy.

Again, I hate to inform Ronald Bronson, but the very act of viewing the page made a copy. That's how the web works—the web browser requests a page, and the web server sends a copy of the page. Saying “do not copy this page” really translates as “do not view this page.”

But that aside, there really is such a thing as “copyscape.” It's a website that apparently exists to ferret out websites that plagiarize other websites. Okay, that makes a bit more sense. So let's see if the site selling the permanent magnetic generator plans is a copy … wow! Over ten copies of that site exist.

So much for that verbiage keeping other copies off the Inernet.

Monday, October 10, 2011

The crack of the Internet

I hate Cracked.com. I follow a link to Zooey Deschanel and end up reading seven animals that are one flaw away from taking over the world when I realize it's been three hours since I started reading that site and I still have over two dozen unread articles left to read.

Aaaaaaaaaah!

I should know better than to follow arbitrary links to Cracked.com.

Wednesday, October 19, 2011

On our way

[The following entries are being written a month after the fact. I have no excuse, other than laziness and a severe case of procrastination; story of my life. So, without further ado … ]

Bunny and I were invited to my cousin Nate's wedding on Saturday. I refuse to fly, not wanting to be treated like the guilty (TSA) sheep (airline industry) that US citizens appear to be; instead, we drove to Troy, Michigan, just north of the dazzling city of tomorrow—Detroit.

Bunny drove during the daylight hours, then I drove during the night—our goal was to drive straight through, only stopping for gas and food as required. We both figured the trip would take around twenty-two hours or so.

Bunny drove until 8:15pm, when we hit Cordele, Georgia and decided to eat dinner, gas up, and switch driving duties. The last time I was in Cordele was on December 27th, 1997. It was a Saturday, exactly half way between Christmas and New Year's Eve. I was headed towards Atlanta, Georgia to meet up with some friends to celebrate the New Year when I pulled off I-75 Northbound at exit 101. No sooner did I exit when my car stopped dead., even though the engine was still running.

I restarted the engine, gunned the gas and went nowhere. I checked behind me, and with no traffic (remember, it was the weekend between two major holidays), put the car into reverse. And the car still didn't move. I stopped the engine, placed everything in the cabin into the trunk, put the car into neutral, and tried moving the car off the road. It still didn't budge.

I walked a hundred yards or so to the nearest gas station. The attendent said that everything was pretty much closed, but he would try to get a tow truck out my way, seeing how my car was stuck in the middle of the road. By the time I walked back to the car, a police officer had shown up and was running my plates. I explained the situation to him, and he then turned to the task of scaring up a tow truck.

Over an hour later, one showed up. A flat bed truck. The police officer drove off to finish his beat. The tow truck driver then tilted the bed down in front of my car, hooked up some chains to the front wheels, and proceeded to pull the car up the bed. The wheels of my car were solidly locked into place and for a second there, I thought the front axel of the car would be pulled out.

But no, the car eventually made it onto the bed of the tow truck. He then drove the car and me to a nearby body shop. I went into the office to call my friends to have them pick me up, while the tow truck driver and the one machanic on duty attempted to get my car off the tow truck.

There was the bed, at a 45° angle, chains slacked, and the car still sitting on the bed. Between the driver and the mechanic, they figured out that the only way to get the car off the truck was to slide it off, so they slicked the bed down with oil and the car slid off.

The mechanic told me I could call him in a few days to give him time to figure out what happened. The tow truck driver then drove me to a nearby restaurant so I could wait for my friends there.

I'll spare you the details about the trip home (wherein I learned a few hard lessons about modern financial systems and just how screwed we are as individuals) but the upshot: the transmission seized up on my car. I could get a new transmission for $2,500 or a used one for $2,000. There would be a warranty on the work, but it would have to be serviced by the body shop there in Cordele, 500 miles from home. The mechanic did know of a student that needed a car and was willing to pay for the work, but really, could only just afford the transmission plus a bit more.

Not having the money myself (for the transmission and for travel expenses to retrieve the car), I sold the car to the Cordele-living student, and went on to learn a few hard lessons about modern car dealerships and living beyond one's means.

So my last time in Cordele wasn't all that great. This time, however, the car survived, and we were able to continue on our way north, with me taking on driving duties.

Thursday, October 20, 2011

Destination: Motown

[The following entries are being written a month after the fact. I have no excuse, other than laziness and a severe case of procrastination; story of my life. So, without further ado … ]

Driving through Atlanta felt like driving through Tokyo in an anime movie—miles of monstrous buildings looming over the endless rain-slicked highways for what seemed like hours on end, crotch rockets warping past us, screaming "Akira" and "Kaneda" either at each other, or at us. I couldn't tell.

And yes, the rain.

The rain.

It was nothing but rain once we hit northern Georgia. It wasn't that bad until we hit Tennessee, when the wind kicked in, and it made driving through the moutains, at night, with rain, and wind, a real intense experience. Kentucky was just as bad, first with the mountains, and by the time we got though that, we hit Ohio. And bumper to bumper traffic at 6:30 am going through Cincinnati. It took us over an hour to travel some ten miles and past the parking lot of I-75 in Cincinnati.

Then Bunny took over driving, and I fell asleep for a few hours. The next thing I remember, We're pulling over somewhere just south of Detroit as I take over driving duties, since I'm more familiar with the area.

We drove by my dad's parents' house, the one were I spent many a summer, just to see it again. That neighborhood hasn't changed in the twenty years since I last saw it (I last visited in I think 1993 or 1994—a few months before Grandpa died, but no one else in the family seems to recall that visit; my prior visit was the summer of 1987). We then drove to Jan and Ed's house. Jan was at work, but Ed was still there. We chatted briefly about things. Then we drove by Kay and Dale's house, but they weren't there (at first, I got the wrong house as I was a block off, but it ultimately turns out they no longer lived there—boy, things do have a way of changing).

Since we were hungry by this time (it was around 1:00 pm or so) we drove back into Detroit to eat at Buddy's. It's not much to look at on the outside:

[Buddy's]

but it's cozy on the inside:

[Buddy's on the inside]

and the pizza is incredible (honestly, I don't know if they serve anything else but pizza; I don't think I've ever looked at their menu).

After lunch, we checked into the hotel.

[The Hotel]

It was quite nice.

A few hours to relax, and we get together with Kay, Dale and Ethan and head to Plymouth Roc for dinner. It seems that their son (my cousin) Jordan is a partner in the restaurant. Sweet. While there, we met up with Jordan, Aaron and family and Caitlin. I somewhat remember Jordan, and I barely remember Caitlin and Ethan. It's also weird to think of Aaron as a family man, seeing how the last time I saw him he was in high school.

[The Plymouth Roc]

This is something I had to grow used to, cousins I knew having families, and meeting several new cousins.

We spent the next few hours eating (execellent food, although as a disclaimer, I do have to mention it's a restaurant that's in the family, so I might be a bit biased) and getting caught up. Then it was back to the hotel for some much needed sleep.


They'll ship! Do you understand? They'll ship!

[The following entries are being written a month after the fact. I have no excuse, other than laziness and a severe case of procrastination; story of my life. So, without further ado … ]

While Bunny and I were at Buddy's, we asked about delivery. No, they don't deliver. But they do ship. In fact, so many people have asked Buddy's to ship pizza over the years that they have a whole process down.

They ship!

They ship!

They ship!

They half-bake the pizzas, then ship in dry ice. Once you receive the pizza, you thaw it, finish baking it, and enjoy.

I must try this some time.

Friday, October 21, 2011

The Obligatory Family Photo

[The following entries are being written a month after the fact. I have no excuse, other than laziness and a severe case of procrastination; story of my life. So, without further ado … ]

[The Family]

Front row, left to right: Jordan, Joshua, Aiden, Caitlin, Ashley. Second row, left to right: Amy, Audrey, Ed, Jan, Cameron, Mallory, Carson, Easton, Melanie, Harmony, Kay, Bunny. Back row, left to right: Bill, Seth, me, Chris, Caleb, Ethan, Aaron, Nathan, Dale.

Saturday, October 22, 2011

A grand day out

[The following entries are being written a month after the fact. I have no excuse, other than laziness and a severe case of procrastination; story of my life. So, without further ado … ]

Bunny and I awoke early today, for she had some last minute shopping to do before the wedding. We had planned on going to the Oakland Mall, but we were informed that a much better option was the Summerset Collection Shopping Center. It also had the distinction of being closer to the hotel we were staying in.

I haven't experiened many three-story malls in my time, much less a mall that sprawled across the street with a pedestrian cross-walk above the road. Not only do they serve real Coke (cane surgar, none of that corn-syrup stuff) but the mall had a Lego Store!

A Lego Store!

How does some two-bit mall in Michigan rate a Lego Store! The closest one to me, here in Boca Raton, Florida no less! is three freaking hours away in Orlando!

No wonder Joshua has an entire room devoted to Lego in his house! He has a steady supply of the stuff, less than fifteen minutes from where he lives!

The lucky bastard.

Anyway, I asked one of the clerks inside how this mall rated a Lego Store, when the closest one to me is three hours away in Orlando.

“Ah,” the clerk said, “that's why. Disney placed a restriction on Lego, limiting them to how many stores and how close they could be in Florida.” Disney. Figures.

I took little solace in the fact that the Town Center Mall in Boca Raton has a bigger Apple store, as the one there had people lined up halfway down the mall.


We had some small difficulty in reaching the church on time. I left the invitation back at Chez Boca, and when I asked for the address of the church, I was told 581 West Fourteen Mile Rd when it really was 581 East Fourteen Mile Rd. We lost a few crutial minutes sorting that out, and we barely made the church on time.


What can I say about the wedding ceremony? The bride was beautiful. The groom hansome. The ceremony moving. Vows and rings exchanged. Kisses. Crying. Cheering. Photos. It was great!


Between the wedding and the reception, Kay, Dale, Jan and Ed decided that Bunny and I needed to try the Grand Traverse Pie Company, which is exactly what it sounds like, a pie company. Over a few hours, we all got caught up on our lives, and had some of the best pie I've ever had in my life. Wonderful stuff.

Pie. Pizza. Why does this area of Detroit have such good food? Why can't we have this goodness down here in South Florida?


Bunny and I were curious as to where we would be sitting at the reception. The table with Kay and Dale's family was filled. It was simiar with Jan and Ed's table. We found ourselves sitting with Audrey's family from Indianna. There, we met Tim, Audrey's brother-in-law, who hailed from Blackpool, England. It was very weird meeting a European who liked American football. It was also weird to learn that American football was actually rather popular over in Europe. Tim, on the other hand, found it weird to think that Bunny and I drove over 1,300 miles and never left the country, while he once drive over 1,300 miles and ended up going through four countries.

But like all receptions, the booze was flowing, the music was playing, and people dancing. It was odd to see a pizza delivery man show up with a stack of pies, but we were told that people, including the groom, were still hungry and thus, an order for delivery was placed. That's something I haven't seen.


Afterwards, Bunny and I followed Kay and Dale over to Joshua's house. Kay and Dale had baby-sitting duty (of Aiden and Ashley) and we decided to follow along. This was also a chance for me to see Joshua's Room O' Lego.

And a Room O' Lego it was, although earlier in the day Aiden and Ashley (around two or three years of age) had gained entry to the room and well … I felt for Josh. The Room O' Lego was too painful to view for very long. Accidents happen and well … ick … too painful to talk about …

Sob!

Sunday, October 23, 2011

A lazy Sunday

[The following entries are being written a month after the fact. I have no excuse, other than laziness and a severe case of procrastination; story of my life. So, without further ado … ]

It was a lazy-hazy Sunday today. We had lunch with Kay, Dale, Joshua and Ethan at a local diner, where good food and good conversation followed. Kay mentioned that we should head out to the Yates Cider Mill, but that they wouldn't be able to join us.

I wanted nothing more than a nap. Bunny was intent on going to the cider mill. We compromised—I'd take a nap at the hotel, and Bunny would go to the cider mill.

I'm not sure who go the better deal in the end. I got a nice four hour nap. Bunny got the best apple cider, ever, but had to fight traffic, an hour long wait for the bathroom, and thousands of people, all fighting for the best apple cider, ever.

It's probably a wash.

For dinner, we met with Jan and Ed for dinner. Again, good food, good conversation, but it ended all too soon.

Monday, October 24, 2011

And now for the educational portion of our trip

[The following entries are being written a month after the fact. I have no excuse, other than laziness and a severe case of procrastination; story of my life. So, without further ado … ]

There were three reasons why I decided to drive to Detroit:

  1. Nathan and Melanie's wedding;
  2. Buddy's Pizza;
  3. one exhibit at The Ford Museum.

Two down, one to go.

The sole exhibit I wanted to see was Buckminster Fuller's Dymaxion House. When I first read about it (oh, some time in 2003 or 2004 I think) it seemed like an incredible idea—an entire house, mass produced like a car, out of aluminium, with no part weighting more than 10 pounds (or something silly like that). There were even two pre-built bathrooms installed in the house (out of four parts). Crazy stuff.

[The Dymaxion House—Home of the Future] [Dymaxion House Living Room] [The Dymaxion House Center Mast]

I took a ton of pictures [most of which, upon viewing, don't make a lot of sense unless you know what you are looking at. —Editor] on about three passes through the house.

Bunny was able to pull me away to view some of the other exhibits in the museum, like the trains:

[The Presidential] [A train snow plow]

And she convinced me to go out and view a portion of Greenwichfield Village, which was much better than I expected. Little did I know that many of the buildings were the original buildings, moved, at Henry Ford's expense, to Greenwichfield Village as part of the museum.

[The Jacquard Loom]

It was interesting to see old technology still in use in the village, and just how clever it was too. We didn't see the entire village (Thomas Edison's laboratory is somewhere in Greenwichfield Village) but what we did see was incredible.

Tuesday, October 25, 2011

The long way home

[The following entries are being written a month after the fact. I have no excuse, other than laziness and a severe case of procrastination; story of my life. So, without further ado … ]

[Our luggage—it's probably a Good Thing™ we didn't fly]

We loaded up the car, checked out of the hotel, stopped by Buddy's Pizza one last time (our third time), took two pies with us, and started the long drive home.

At least this time, it wasn't raining.

And we still manged to hit traffic going through Cincinnatti.

Sigh.

The last time I made the drive from Michigan to Florida, it was in 1983. My mom's cousin Rick was in the area and to save on air fare, it was decided that I would drive back with him and his two kids (eight and five).

So there we were, stuck in a Camero (yea Gods!) on a two-day journey through Hell. To this day, I still avoid Long John Silver's and the Waffle House—emotional scarring and all that.

At least this time, there were two of us, no kids, in a mid-sized car and no scraps of metal flying into the air and taking out the fender.

Thursday, November 24, 2011

“The Muppets”

For a Thanksgiving treat, Bunny and I went to see “The Muppets,” and I must say, as sequels go, it's not bad.

And yes, it's a sequel, to the classic 1979 “The Muppet Movie.” It's not as great as that, but it's darned good.

The movie centers around Walter, a Muppet, his brother Gary (Jason Segel, who also wrote the screenplay), a human (okay, it doesn't make much sense, but really—this is a universe where there are seven foot walking chickens, talking frogs, and nine foot blue monsters; if you can accept that, then I assume you'll have to accept a Muppet having a human brother) and Gary's girlfriend (Amy Adams). Walter is the Muppet's biggest fan, and as a present, Gary presents Walter with tickets to Muppet Studios. There, he learns that the studio is in trouble, and, once he meets Kermit, convinces him to get the gang back together again for one last show to save the studio.

What's nice is that not only do they reference the original “The Muppet Movie” with the “standard rich and famous contract”, but that Gonzo is now a very successful business…thing with a plumbing supply wholesale company (in the original, he was a plumber) and they yet again leave Sweetums behind. Again (in what looks to me the original setting for that scene).

And then there's the constant breaking of the fourth wall, film metahumor (they travel by map—like in “Raiders of the Lost Ark” where they superimpose a map showing the path the hero is taking—that's how they travel in this film; or the villain (Chris Cooper) who laughs diabolically by saying “Diabolical laugh!”) and general mahem (they “obtain” a celebrity to host their show, and I'll leave it at that).

They even brought in older Muppets from the TV series, which was a nice touch (even these guys).

But … the voices are … just … a … bit off. I realize why, but still, it did interfere with my enjoyment of the film (the worst was Kermit, followed by Fozzie). They were so close, but not quite there. Also, the character of Kermit was pretty much split between Walter and Kermit himself. Kermit was always trying to keep order on “The Muppet Show” (the TV series), but here, that role was primarily Walter's.

And the cameos—it felt like “The Muppet Movie” had more cameos than this film. I'm not saying they didn't have cameos, but it felt like they had fewer this time around than in 1979.

But with that said, I loved the film.

Sunday, November 27, 2011

“Everybody lies” or “An update on the updated Greylist Daemon”

Since it's been eighteen months since the previous update of the greylist daemon, I best do a release of what I have so far, even if it's not what I wanted.

I know, I know … I said that 1.0.12 would be the last version in the 1x line, but … well … as House says: “Everybody lies.”

I never did get around to fixing the bulk transfer problem, and thus, the protocol hasn't changed, so there's no need for a major bump in the version number. And there have been a few changes in the past eighteen months. I converted the codebase to C99; there are more metrics being logged; there's better self-monitoring (it'll restart in case of a crash) but there are two large changes I need to mention.

The first one: no more recursive make. After reading “Recursive Make Considered Harmful,” I decided to give the non-recursive make a try. The greylist daemon isn't all that big, and listing the dependencies in one large Makefile shouldn't be that tedious. And even if so, it's pretty much a one-time thing.

The major benefit of doing a non-recursive make (and making sure all the dependencies are labeled correctly) is the parallel make. Making everything straight through on my development box takes around two seconds. A parallel make, on the other hand, only takes one second.

Okay, that may not sound like much (“Big whoop!”) but I converted one of the code bases I develop at work to a non-recursive make model, and on our slow Solaris development system, the parallel build time (which I couldn't even do before the change) takes 1/10th the time of a normal build. But the trick, like I said, is to list all the dependencies correctly, or else a parallel make will fail.

The other large change is probably more controversial: I removed a bunch of command-line options from the program, mainly the configuration options. I never used them, and given how little response I get about the project (I know of only one other person two other people using the software) I decided they should go. If anyone complains, I can always add them back. But for now, they're gone.

Monday, November 28, 2011

I haven't dont a metablog post in a while …

In addition to updating the greylist daemon, I've also updated the software that runs this blog.

The biggest change this time is to the configuration file. The first stab at changing how it works was made back in (let me check … oh wow! was it that long ago?) September of 2010. Prior, I had code that checked the SCRIPT_FILENAME environment variable (passed in by Apache) and changed the extention from .cgi to .cnf to locate the file. That meant the configuration file had to live in the main web directory and frankly, I felt that bit of code was always a bit of a hack.

I changed that, however, by configuring Apache to pass the configuration filename explicitly to the script:

<VirtualHost 66.252.224.242:80>
  # ... 

  <Files boston.cgi>
        SetEnv  BLOG_CONFIG /home/spc/web/sites/boston.conman.org/journal/boston.cnf
  </Files>

  # ...
</VirtualHost>

Now, no more hacking around with filenames, and the configuration file no longer needs to be stored in a web-facing location. If you do use this method, you'll need to check REDIRECT_BLOG_CONFIG as well (which Apache sets when it does a redirect, and only a redirect).

And that was it for the configuration file until earlier this month. The next big change is how it looks. Prior to the changes this month, the configuration file looked like:

Comment:
Comment:        *********************************************
Comment:        *
Comment:        *       Configure File for the Boston Diaries
Comment:        *
Comment:        **********************************************
Comment:
Name:			The Boston Diaries
Backend:		/home/spc/source/boston.old.1.9/sbg/bp
BaseDir:		/home/spc/web/sites/boston.conman.org/journal
WebDir:         	/home/spc/web/sites/boston.conman.org/htdocs/
BaseUrl:        	/
FullBaseUrl:    	http://boston.conman.org
Templates:      	html/regular
DayPage:		/home/spc/web/sites/boston.conman.org/htdocs/index.html
Days:           	7
RssFile:        	/home/spc/web/sites/boston.conman.org/htdocs/bostondiaries.rss
RssTemplates:   	rss
RssFirst:		latest
AtomFile:		/home/spc/web/sites/boston.conman.org/htdocs/index.atom
AtomTemplates:		atom
Comment: TabTemplates:	html/sidebar
Comment: TabFile:	/home/spc/web/sites/boston.conman.org/htdocs/boston.tab.html
Comment: TabFirst:	latest
StartDate:      	1999/12/4
Author:         	Sean Conner
Comment: Authors:	/home/spc/web/sites/boston.conman.org/users
Email:			sean@conman.org
Email-List:		/home/spc/web/sites/boston.conman.org/notify/db/email
Email-Message:		/home/spc/web/sites/boston.conman.org/notify/mail/notify
Email-Subject:		The Boston Diaries Update Notification
Facebook-AP-ID:		XXXXXXXXXXXXXXX
Facebook-AP-Secret:	XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Facebook-User:		XXXXXX
_System-CPU:		600
_System-Mem:		20971520
_System-Core:		0
_System-Locale:		en_SPC

Let me explain how this came about. I had code to parse RFC-822 style headers (because at the time I had code to fetch pages via HTTP and it's needed there; also, I can accept entries via email and I need it there too) and instead of writing even more code to parse a configuration file, I decided to shoehorn the configuration file into an RFC-822 format.

And thus, the odd format for the configuration file. It's also never been fully clensed of old features (I no longer have a backend, so the Backend: header could go; I removed support for the tab template, so TabTemplates:, TabFile: and TabFirst: could go as well—don't bother asking what the tab file was for, it'll take too long to explain and as far as I know, nobody, including myself, ever bother using it).

Even since I started playing around with Lua, I've been playing around with the idea of using it as a configuration file, and I finally got around to doing it.

process = require("org.conman.process")
os      = require("os")

-- ---------------------------------------------------------------------
-- Custom locale to get "Debtember" without special code in the program
-- ---------------------------------------------------------------------

os.setlocale("en_SPC")

-- --------------------------------------------------------------------
-- process limits added because an earlier version of the code actually
-- crashed the server it was running on, due to resource exhaustion.
-- --------------------------------------------------------------------

process.limits.hard.cpu  = "10m"	-- 10 minutes
process.limits.hard.core =  0		-- no core file
process.limits.hard.data = "20m"	-- 20 MB

-- --------------------------------------------------------
-- We now resume our regularly scheduled config file
-- --------------------------------------------------------

name      = "The Boston Diaries"
basedir   = "/home/spc/web/sites/boston.conman.org/journal"
webdir    = "/home/spc/web/sites/boston.conman.org/htdocs"
url       = "http://boston.conman.org/"
author    = { name = "Sean Conner" , email = "sean@conman.org" }
startdate = "1999/12/4"

templates =
{
  {
    template = "html/regular",
    output   = webdir .. "/index.html",
    items    = "7days",
    reverse  = true
  },
  
  {
    template = "rss",
    output   = webdir .. "/bostondiaries.rss",
    items    = 15,
    reverse  = true
  },
  
  {
    template = "atom",
    output   = webdir .. "/index.atom",
    items    = 15,
    reverse  = true
  }
}

email =
{
  list    = "/home/spc/web/sites/boston.conman.org/notify/db/email",
  message = "/home/spc/web/sites/boston.conman.org/notify/mail/notify",
  subject = name .. " Update Notification",
}

facebook =
{
  ap_id     = "XXXXXXXXXXXXXXX",
  ap_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  user      = "XXXXXX"
}

affiliate =
{
  {
    proto = "asin",
    link  = "http://www.amazon.com/exec/obidos/ASIN/%s/conmanlaborat-20"
  }
}

Not only does it look much nicer (Whitespace! Real comments!) but I was able to remove code to handle the resource limits (it's now handled in Lua—and I'll talk about that in another entry) and locales (which supports a feature I added back in October 2003).

Also, by doing this, I partially cleaned up the template mess. Before, I had to explicitely add code to support specialized templates (the HTML output, the RSS and ATOM feed files and the long-since-removed tab file); now, I can specify new templates by just adding them to the configuration file. The only limitation is that the HTML template has to be specified first (it's easier to code that way).

You'll also notice a section labeled affiliate. That I threw in at the last moment. I'm an Amazon affiliate and if I wanted to link to, say, a book from my friend Hoade, I would have to manually generate the link, but now, I can just do:

<a class="book" href="asin:0595095291">Ain't that America</a>

and it'll be converted automatically to the correct link:

<a class="book"
href="http://www.amazon.com/exec/obidos/ASIN/http://www.amazon.com/exec/obidos/ASIN/0595095291/conmanlaborat-20">Ain't
that America</a>

Or rather, Hoade's book Ain't that America.

On the down side, in trying to release this (the last releast was in September of 2009, and before that, July of 2004) I found a rather curious bug—below a certain threshhold of entries (and there're currently over 3,700 here in this blog), the program crashes. There's probably an assumption built into the code about there always being a previous entry, but for a new blog, that's not necessarily the case and in tracking down the issue, I found that it appears to have something to do with the internal caching I do of entries. Like the old joke goes:

There are only two hard problems in Computer Science: cache invalidation, naming things, and off-by-one errors.

And I think I'm being hit by one of—
Core error - bus dumped


Some Lua trickery

In my previous post, I presented this bit of Lua code:

process = require("org.conman.process")

-- --------------------------------------------------------------------
-- process limits added because an earlier version of the code actually
-- crashed the server it was running on, due to resource exhaustion.
-- --------------------------------------------------------------------

process.limits.hard.cpu  = "10m"	-- 10 minutes
process.limits.hard.core =  0		-- no core file
process.limits.hard.data = "20m"	-- 20 MB

It looks like a simple assignment to set process limits, yet under Unix, you need to call setrlimit(). What's happening under the hood (so to speak) is that it's easy to intercept assignments to tables (Lua “go-to” data structure) and that's exactly what's going on here. During the process of registering the module org.conman.process (more on the name later) we create some fake structures for the hard limits (and soft limits, but since it's similar, I'll skip that part) and attach a metatable, which contains code to intercept both reads and writes so we can do a bit of magic:

#define SYS_LIMIT_HARD	"rlimit_hard"
#define SYS_LIMIT_SOFT	"rlimit_soft"

static const struct luaL_reg mhlimit_reg[] =
{
  { "__index" 		, mhlimitlua___index	} ,
  { "__newindex"	, mhlimitlua___newindex	} ,
  { NULL		, NULL			}
};

static const struct luaL_reg mslimit_reg[] =
{
  { "__index"		, mslimitlua___index	} ,
  { "__newindex"	, mslimitlua___newindex	} ,
  { NULL		, NULL			}
};

int luaopen_org_conman_process(lua_State *const L)
{
  void *udata;
  
  assert(L != NULL);
  
  luaL_newmetatable(L,SYS_LIMIT_HARD);
  luaL_register(L,NULL,mhlimit_reg);
  
  luaL_newmetatable(L,SYS_LIMIT_SOFT);
  luaL_register(L,NULL,mslimit_reg);
  
  luaL_register(L,"org.conman.process",mprocess_reg);
  lua_createtable(L,0,2);
  
  udata = lua_newuserdata(L,sizeof(int));
  luaL_getmetatable(L,SYS_LIMIT_HARD);
  lua_setmetatable(L,-2);
  lua_setfield(L,-2,"hard");
  
  udata = lua_newuserdata(L,sizeof(int));
  luaL_getmetatable(L,SYS_LIMIT_SOFT);
  lua_setmetatable(L,-2);
  lua_setfield(L,-2,"soft");
  
  lua_setfield(L,-2,"limits");  
  return 1;
}

When Lua sees an assignment to the process.limits.hard table, it calls mhlimit_lua___newindex(), where the magic happens:

static int mhlimitlua___newindex(lua_State *const L)
{
  struct rlimit  limit;
  void          *ud;
  const char    *tkey;
  int            key;
  lua_Integer    ival;

  assert(L != NULL);
  
  ud   = luaL_checkudata(L,1,SYS_LIMIT_HARD);
  tkey = luaL_checkstring(L,2);
  
  if (!mlimit_trans(&key,tkey))
    return luaL_error(L,"Illegal limit resource: %s",tkey);

  if (lua_isnumber(L,3))
    ival = lua_tointeger(L,3);
  else if (lua_isstring(L,3))
  {
    const char *tval;
    const char *unit;
    
    tval = lua_tostring(L,3);
    ival = strtoul(tval,(char **)&unit,10);

    if (!mlimit_valid_suffix(&ival,key,unit))
      return luaL_error(L,"Illegal suffix: %c",*unit);
  } 
  else
    return luaL_error(L,"Non-supported type");

  limit.rlim_cur = ival;
  limit.rlim_max = ival;
  
  setrlimit(key,&limit);
  return 0;
}

We basically take the key we're given, say, “cpu”, and translate it to the appropriate value (which happens in mlimit_trans()—nothing terribly interesting, it just maps the string to the appropriate constant value, in this example, RLIMIT_CPU) and the same for the value; if it's a number, we'll use that and if it's a string, we'll convert it to a value and use any suffix to modify the value. For our example, “cpu”, it's a meaure of time, so the suffix “m” means “minutes.” mlimit_valid_suffix() handles this and again, it's pretty straightforward code.

I think it's a pretty cool trick, but I can see why some might not like the idea of masking what amounts to a system call with what looks like a simple assignment, since it does have side effects outside of the simple assignment, but I like the way it looks, and it's a more “natural” or even “Luaish” way of specifying the intent of the code.

Now, on to the name of the module, org.conman.process. When I first started playing around with Lua I wrote a few modules that did similar operations as existing modules, with the same names. One example is syslog. There's an existing Lua syslog module, but I don't like how it works, so I wrote my own.

The problem now becomes, what if I want to use a module that uses the existing Lua syslog module, but the rest of my code uses mine? If they both have the same name, some code is going to get a nasty surprise. To work around that, I decided to put all my modules under a “namespace” I control and is not likely to cause any conflicts with any existing (or even future) modules. Thus, the org.conman namespace.

Tuesday, November 29, 2011

Yet more code released

From
S Page <XXXXXXXXXXXXXXXXXXX>
To
sean@conman.org
Subject
your "program that will select the URL and HTML from the Firefox primary text selection" ?
Date
Tue, 29 Nov 2011 15:43:56 -0800

Hey there, I'm trying to find a command-line program that will output the HTML of Firefox's current selection. Klipper, xsel, xclip, etc. all just deal with the plain text. None of them admit to doing the content negotiation.

In http://boston.conman.org/2008/12/03.1 you investigated and hacked away and came up with a program. Awesome … so where is it, can you share it?

In my case I just want to grab the actual HTML of a humongous dynamic Facebook page, so big that Firefox's Select All then View Selection Source exhausts memory.

Your hack of composing the various clipboard formats into a mini citation is really cool, I wish something like Klipper had such templating ability.

Cheers,


=S Page

Wow! Somebody's interested in something I wrote! Very cool!

And yes, I did make the source code available, although there's no documentation, it uses a library I no longer maintain, and it might be a bit temperamental to use, but it is available.

And I nearly forgot—the program xselect.c, a program I wrote that can be used to query and get the various forms of the current X11 selection buffer.

Wednesday, November 30, 2011

The royal deal that was a royal pain

seems while the players (all 4 of them) were taking a break, the dealer thought it would be funny to setup the deck to give all 4 the royal flush. essentially no one would be getting hurt, and all get back their money. now everything was going according to plan, and suddenly one old man was screaming how he had a royal flush and wanted his money. the other players told him they ALL had the royal, and i dont know if he was senile, or didnt believe them, but he insisted the floor call gaming, and it seems he eventually got paid and the dealer got fired.

Via The Fourth Checkraise, tbc's blog about grinding low stakes poker: well i finally got it to work

This is for my dad, and especially for my friend H (who is currently a dealer in Las Vegas). I still remember the last time he tried stacking the deak and slowly watching it backfire on him as I got the winning hand. I literally fell on the floor clutching my sides from laughing so hard.

Thursday, Debtember 01, 2011

It took me five hours to build a five minute tool

I've heard of HyperCard, but having gotten into the Apple Mac scene just recently (like in the past two years) I've never seen it in action. I've heard great things about it and the types of stacks (which is what a HyperCard “program” is called) that have been created with it.

So I'm reading about why HyperCard had to die, which is more than just about HyperCard needing to die. It's also a tutorial about running HyperCard. I thought how hard could this be? So I start downloading …

Five hours later …

Oh. That hard.

I failed to get the Basilisk II binary for Mac OS X (as the site that hosts that appears to be down). Compiling it from source failed in the linking stage with an undefined reference to __gxx_personality_v0 and frankly, I'm just curious about HyperCard; I am not interested in debugging a build problem with a Macintosh emulator.

.

I then tried Executor, but given that I needed to run the GNU autotools prior to compiling and having that fail meant I discarded that solution; I am not interested in debugging an autotool problem with a Macintosh emulator.

It was at this time I found Mini vMac. There was an existing Mac OS-X executable (so nothing to build). Older Mac OS systems are freely available from Apple, leaving only the Macintosh ROMs to procure. I happen to have a Macintosh Classic, so I'll skip the details on extracting the ROM images from a machine I have no way of transferring any data from and that in no way involves using an Internet search engine to find a ROM image I could use. Nope. Did it the hard way. Tin cans. String. In the snow. Up hill. Both ways. That's my story, and I'm sticking to it.

So now I can start up the Mac emulator with the ROM image I totally copied from the Macintosh Classic I have (cough cough—sorry about that) and it's asking for a disk image to use.

Then came the issue of extracting the disk images from the Apple site. The modern Mac's default extracting program can't deal with the format. Existing free programs to do so under Linux don't work (I tried two different packages that are so old, they're shar files) and most Mac based programs want money. I did find one free program that can extract Mac-based archives and that worked beautifully.

It then took another hour or so to get System 7.0.1 installed (hint: you may find these blank disk images helpful to have someplace to install the software).

And finally, I can run HyperCard!

[Welcome to HyperCard]

I then was able to finish the tutorial and ended up with a working calculator in less than five minutes time.

[a small calculator in HyperCard]

And just for comparison, here is a screen shot with the system calculator:

[A HyperCard calculator and the system calculator]

Now, HyperCard is more than just a precursor to Visual Basic, but at least now I can play around with it and see what all the hype was about.

[I told you I own a Macintosh Classic!]

See! I told you I own a Macintosh Classic!

Sunday, Debtember 04, 2011

Sigh—another update of the Greylist Daemon

Oops. I let a bug slip through the latest release of the greylist daemon. It was a rather bad bug, one that was a show-stopper. My fault for not fully testing what I thought were last minute cosmetic changes to the code.

Ah well, what happened, happened, and I just released a new version.

Monday, Debtember 05, 2011

Oh those crazy Nigerians

From
"AGENT RONALD T. HOSKO."<XXXXXXXXXXXXXXXXXX>
To
undisclosed-recipients:;
Subject
FEDERAL BUREAU OF INVESTIGATION
Date
Sun, 4 Dec 2011 01:44:28 -0800

I HOPE YOU UNDERSTAND HOW MANY TIMES THIS MESSAGE HAS BEEN SENT TO YOU?. WE HAVE WARNED YOU SO MANY TIME AND YOU HAVE DECIDED TO IGNORE OUR E-MAILS OR BECAUSE YOU BELIEVE WE HAVE NOT BEEN INSTRUCTED TO GET YOU ARRESTED, KINDLY OPEN THE ATTACHED FILE BELOW FOR FULL DETAILS (DUE TO SECURITY REASON)

RESPECTIVELY
AGENT RONALD T. HOSKO.
FEDERAL BUREAU OF INVESTIGATION (FBI)


THIS IS THE (F.B.I)
FBI HEADQUARTERS IN WASHINGTON, D.C.
FEDERAL BUREAU OF INVESTIGATION
J. EDGAR HOOVER BUILDING
935 PENNSYLVANIA AVENUE,
NW WASHINGTON, D.C. 20535-0001
E=MAIL:(washingtonfbi@washington.usa.com)
FEDERAL BUREAU OF INVESTIGATION (FBI)

ATTENTION DEAR THIS IS THE FINAL WARNING YOU ARE GOING TO RECIEVE FROM ME DO YOU GET ME????

I HOPE YOU UNDERSTAND HOW MANY TIMES THIS MESSAGE HAS BEEN SENT TO YOU?.

WE HAVE WARNED YOU SO MANY TIME AND YOU HAVE DECIDED TO IGNORE OUR E-MAILS OR BECAUSE YOU BELIEVE WE HAVE NOT BEEN INSTRUCTED TO GET YOU ARRESTED, AND TODAY IF YOU FAIL TO RESPOND BACK TO US WITH THE PAYMENT THEN, WE WOULD FIRST SEND A LETTER TO THE MAYOR OF THE CITY WHERE YOU RESIDE AND DIRECT THEM TO CLOSE YOUR BANK ACCOUNT UNTIL YOU HAVE BEEN JAILED AND ALL YOUR PROPERTIES WILL BE CONFISCATED BY THE FBI.

WE WOULD ALSO SEND A LETTER TO THE COMPANY/AGENCY THAT YOU ARE WORKING FOR SO THAT THEY COULD GET YOU FIRED UNTIL WE ARE THROUGH WITH OUR INVESTIGATIONS BECAUSE A SUSPECT IS NOT SUPPOSE TO BE WORKING FOR THE GOVERNMENT OR ANY PRIVATE ORGANIZATION.

YOUR ID WHICH WE HAVE IN OUR DATABASE BEEN SENT TO ALL THE CRIMES AGENCIES IN AMERICA FOR THEM TO INSET YOU IN THEIR WEBSITE AS AN INTERNET FRAUDSTERS AND TO WARN PEOPLE FROM HAVING ANY DEALS WITH YOU. THIS WOULD HAVE BEEN SOLVED ALL THIS WHILE IF YOU HAD GOTTEN THE CERTIFICATE SIGNED, ENDORSED AND STAMPED AS YOU WHERE INSTRUCTED IN THE E-MAIL BELOW.THIS IS THE FEDERAL BUREAU OF INVESTIGATION (FBI) AM WRITING IN RESPONSE TO THE E-MAIL YOU SENT TO US AND AM USING THIS MEDIUM TO INFORM YOU THAT THERE IS NO MORE TIME LEFT TO WASTE BECAUSE YOU HAVE BEEN GIVEN FROM THE 3RD OF JANUARY.

AS STATED EARLIER TO HAVE THE DOCUMENT ENDORSED, SIGNED AND STAMPED WITHOUT FAILURE AND YOU MUST ADHERE TO THIS DIRECTIVES TO AVOID YOU BLAMING YOURSELF AT LAST WHEN WE MUST HAVE ARRESTED AND JAILED YOU FOR LIFE AND ALL YOUR PROPERTIES CONFISCATED.

YOU FAILED TO COMPLY WITH OUR DIRECTIVES AND THAT WAS THE REASON WHY WE DIDN'T HEAR FROM YOU ON THE 3RD AS OUR DIRECTOR HAS ALREADY BEEN NOTIFIED ABOUT YOU GET THE PROCESS COMPLETED YESTERDAY AND RIGHT NOW THE WARRANT OF ARREST HAS BEEN SIGNED AGAINST YOU AND IT WILL BE CARRIED OUT IN THE NEXT 48HOURS AS STRICTLY SIGNED BY THE FBI DIRECTOR.

WE HAVE INVESTIGATED AND FOUND OUT THAT YOU DIDN'T HAVE ANY IDEA WHEN THE FRAUDULENT DEAL WAS COMMITTED WITH YOUR INFORMATION'S/IDENTITY AND RIGHT NOW IF YOU ID IS PLACED ON OUR WEBSITE AS A WANTED PERSON, I BELIEVE YOU KNOW THAT IT WILL BE A SHAME TO YOU AND YOUR ENTIRE FAMILY BECAUSE AFTER THEN IT WILL BE ANNOUNCE IN ALL THE LOCAL CHANNELS THAT YOU ARE WANTED BY THE FBI.

AS A GOOD CHRISTIAN AND A HONEST MAN, I DECIDED TO SEE HOW I COULD BE OF HELP TO YOU BECAUSE I WOULD NOT BE HAPPY TO SEE YOU END UP IN JAIL AND ALL YOUR PROPERTIES CONFISCATED ALL BECAUSE YOUR INFORMATION'S WAS USED TO CARRY OUT A FRAUDULENT TRANSACTIONS, I CALLED THE EFCC AND THEY DIRECTED ME TO A PRIVATE ATTORNEY WHO COULD HELP YOU GET THE PROCESS DONE AND HE STATED THAT HE WILL ENDORSE, SIGN AND STAMP THE DOCUMENT AT THE SUM OF $499 USD ONLY AND I BELIEVE THIS PROCESS IS CHEAPER FOR YOU.

YOU NEED TO DO EVERYTHING POSSIBLE WITHIN TODAY AND TOMORROW TO GET THIS PROCESS DONE BECAUSE OUR DIRECTOR HAS CALLED TO INFORM ME THAT THE WARRANT OF ARREST HAS BEEN SIGNED AGAINST YOU AND ONCE IT HAS BEEN APPROVED, THEN THE ARREST WILL BE CARRIED OUT, AND FROM OUR INVESTIGATIONS WE LEARNT THAT YOU WERE THE PERSON THAT FORWARDED YOUR IDENTITY TO ONE IMPOSTOR/FRAUDSTERS IN NIGERIA LAST YEAR WHEN HE HAD A DEAL WITH YOU ABOUT THE TRANSFER OF SOME ILLEGAL FUNDS INTO YOUR BANK ACCOUNT WHICH IS VALUED AT THE SUM OF $10.500,000.00 USD.

I PLEADED ON YOUR BEHALF SO THAT THIS AGENCY COULD GIVE YOU THE 2011/12/02f SO THAT YOU COULD GET THIS PROCESS DONE BECAUSE I LEARNT THAT YOU WERE SENT SEVERAL E-MAIL WITHOUT GETTING A RESPONSE FROM YOU, PLEASE BEAR IT IN MIND THAT THIS IS THE ONLY WAY THAT I CAN BE ABLE TO HELP YOU AT THIS MOMENT OR YOU WOULD HAVE TO FACE THE LAW AND ITS CONSEQUENCES ONCE IT HAS BEFALL ON YOU.YOU WOULD MAKE THE PAYMENT THROUGH MONEY GRAM TRANSFER OR WESTERN UNION MONEY TRANSFER WITH THE BELOW DETAILS.

RECEIVER NAME ==== PAUL UBA
COUNTRY========== NIGERIA
CITY============== LAGOS
TEXT QUESTION==== WHEN
TEXT ANSWER===== TODAY TODAY
AMOUNT=====$499USD
SENDERS NAME======

SEND THE PAYMENT DETAILS TO ME WHICH ARE SENDERS NAME AND ADDRESS, MTCN NUMBER, TEXT QUESTION AND ANSWER USED AND THE AMOUNT SENT.

MAKE SURE THAT YOU DIDN'T HESITATE MAKING THE PAYMENT DOWN TO THE AGENCY BY TODAY SO THAT THEY COULD HAVE THE CERTIFICATE ENDORSED, SIGNED AND STAMPED IMMEDIATELY WITHOUT ANY FURTHER DELAY. AFTER ALL THIS PROCESS HAS BEEN CARRIED OUT, THEN WE WOULD HAVE TO PROCEED TO THE BANK FOR THE TRANSFER OF YOUR COMPENSATION FUNDS WHICH IS VALUED AT THE SUM OF $10,500,000.00 USD WHICH WAS SUPPOSE TO HAVE BEEN TRANSFERRED TO YOU ALL THIS WHILE.

NOTE/ ALL THE CRIMES AGENCIES HAS BEEN CONTACTED ON THIS REGARDS AND WE SHALL TRACE AND ARREST YOU IF YOU DISREGARD THIS INSTRUCTIONS.

YOU ARE GIVEN A GRACE TODAY TO MAKE THE PAYMENT FOR THE DOCUMENT AFTER WHICH YOUR FAILURE TO DO THAT WILL ATTRACT A MAXIMUM ARREST AND FINALLY YOU BE APPEARING IN COURT FOR ACT OF TERRORISM,MONEY LAUNDERING AND DRUG TRAFFICKING CHARGES, SO BE WARNED NOT TO TRY ANY FUNNY BECAUSE YOU ARE BEEN WATCHED.

THANKS AS I WAIT FOR YOUR RESPONSE

RESPECTIVELY
AGENT RONALD T. HOSKO.
FEDERAL BUREAU OF INVESTIGATION (FBI)

I constantly receive Nigerian 419 scams all the time and it takes a really great one to make it post worthy, and this one, despite being long AND IN ALL CAPS is well worth the time to read. This is the first time I've seen a Nigernian scammer blackmailing victims to respond. I'm sure Susan Whelchel has nothing better to do than to instruct the Boca Raton Police Department to come to Chez Boca and arrest me for terrorism, money laundering and drug trafficking, unless I pay $500 to help launder $10,500,00.00.

Nice deal, “pay $500 to ‘obtain’ $10,500,000 or we'll be forced to arrest you.” I don't even think the Mafia ever had the gumption to try that approach.

It's also funny (as in “ha ha” funny, not “interesting” funny) that the FBI would have me send the money to Nigeria. It's also telling that the Nigerian scammers are at least doing some minimal research, as Ronald Hosko is a real FBI agent, although everything else (email addresses, websites, etc.) they got wrong.

But it's a start.

And if, on the off chance that this is true, then when I disappear, you'll know what happened to me.


Nice move ISP—people who forward spam to the spam complaint department will have their email flagged as spam and dropped immediately

Okay, that was amusing.

Normally, I post entries via email. I get to use an editor I'm used to using and I don't have to type in a small text field using whatever the web browser thinks is a capable editor (it never is).

But when I went to “post” my previous entry it never showed up. I could see my computer here delivering the email, but I never saw it show up on my server.

“But Sean,” you say, “if you saw your computer deliver the email, but your server never got it … um … how does that work?”

“Glad you ask,” I say, knowing full well that you didn't really ask at all. My ISP blocks all outbound email except through their servers. So I had to configure my local email server at Chez Boca to deliver my email through The Monopolistic Phone Company server, which usually then delivers the email to my server which ends up posting an entry to the blog.

So, my computer here delivered the post to The Monopolistic Phone Company, where it seems it was immedately swallowed up, no doubt marked as spam because it quoted extensively from a … um … well … “questionable” email. So I'm sure my email was automatically classified as spam and dumped directly into the bit bucket.

Now watch as in a few hours the two copies I sent show up posted here.

Tuesday, Debtember 06, 2011

It didn't take me quite as long this time

I decided to give Basilisk II another try, given the proper files for Mac System 8 were available. The problem I had last time appeared to be a simple compiler problem, and forcing the Makefile to use g++ got past that issue.

I then had to make a bazillion casts in one of the files, since g++ didn't like the code:

../uae_cpu/gencpu.c:2422: error: invalid conversion from `unsigned int' to `amodes'
../uae_cpu/gencpu.c:2422: error:   initializing argument 1 of `void genamode(amodes, char*, wordsizes, char*, int, int)'
../uae_cpu/gencpu.c:2422: error: invalid conversion from `unsigned int' to `wordsizes'
../uae_cpu/gencpu.c:2422: error:   initializing argument 3 of `void genamode(amodes, char*, wordsizes, char*, int, int)'

It seems one cannot cast an unsigned bitfield to an enum in g++ without a cast. There were only a bazillion locations to change in that one file, but once done, I had Basilisk II running on my Linux system.

[A HyperCard calculator and the System 7 calculator on System 8]

A nice feature of Basilisk II is that it can mount a Unix directory as a Mac “drive” so transferring files in and out of the virtual Macintosh is very easy and I no longer need to use hfsutils on disk images.


Software archaeology is apparently a real thing

My job now was to smuggle these documents back into the company. I would be happy to just hand them over. But that doesn't make any sense to the company. The company officially has these documents (digitally managed!), and officially I don't. In reality, the situation is the reverse, but who wants to hear that? God knows what official process would let me fix that.

Oh, and as an external consultant, I'm not allowed to know some of the trade secrets in the documents. The internal side of the team needs to handle the sensitive process information, and be careful about how that information crosses boundaries when talking to the external consultants. Unfortunately, the internal team doesn't know what the secrets are, while I do. I even invented a few of them, and have my name on some related patents. Nonetheless, I need to smuggle these trade secrets back into the company, so that the internal side can handle them. They just have to make sure they don't accidentally repeat them back to me.

Via Flutterby, Institutional memory and reverse smuggling

This sounds like a cautionary tale of what happened to Stonehenge or the Pyramids of Giza—they were built, but now years later the project documentation got misfiled somewhere and we're stuck with trying to reconstruct how it happened.

Actually, now that I think about it, it also sounds like a lot of software projects.

Hmmm … oh my … no … just no


“My unit test had moved Greenland into Argentina.”

… but on October 7th this year, Argentina announced that it wasn't going to use daylight saving time any more … 11 days before its next transition. The reason? Their dams are 90% full. I only heard about this due to one of my unit tests failing. For various complicated reasons, a unit test which expected to recognise the time zone for Godthab actually thought it was Buenos Aires. So due to rainfall thousands of miles away, my unit test had moved Greenland into Argentina. Fail.

Via Hacker News, OMG Ponies!!! (Aka Humanity: Epic Fail) - Jon Skeet: Coding Blog

I have no words for this, other than “be afraid. Be very afraid.”

Friday, Debtember 09, 2011

Notes from a catered lunch on the eighth floor

To help celebrate the Holiday Season™, The Corporation decided to cater our lunch today. The catering company selected saw that The Ft. Lauderdale Office (which has since moved to a new location), on the 8th floor, has a sizable patio and felt it would be nice to serve our lunch on the patio.

[An 8th Floor Patio]

The picture is of our patio from the ground floor. At the top of the section of building on the right hand side is our patio. It's sizable. And did I mention it's on the 8th floor?

Because the weather today was a bit blustery. Blustery enough that at the 8th floor, setting up a tent was not a good idea.

[Yup, it blew off the patio]

The wind picked it up and pitched it over the side like a piece of tissue. Fortunately, no one was hurt, and the only damage sustained was to the tent itself from its short flight.

We ate lunch inside The Ft. Lauderdale Office, and not on The Patio of the Ft. Lauderdale Office.

Tuesday, Debtember 20, 2011

Inappropriate Behavior: Short Transgressions

Okay, I'm totally biased, but what can I say? Sean Hoade is my best friend, and his new book of short stories, Inappropriate Behavior: Short Transgressions has just been released for the Kindle. You will buy this book! If not for you, then as a present.

(Oh, and if you don't like Amazon, Inappropriate Behavior: Short Transgressions is also available for the Nook, so there's no excuse---buy this book!)

Saturday, Debtember 24, 2011

History in your own backyard

Thanks to a random link to Cracked.com from my friend Hoade (damn him for sucking me into Cracked,com, but buy his book!) I spent the past several hours reading article upon article (like this hasn't happened before) when I came across this very interesting fact about Brevard, North Carolina.

I lived there for only five years, but I still have a soft spot for the place, even thirty years later. At the time, I thought it was very cool that the town was the county seat for Transylvania County (how cool is that?). Little did I realize that there was a secret NSA installation just outside of town.

And now, I just learned that there was a shooting war between North Carolina, South Carolina and Georgia over what later became Transylvania County, known as The Walton War. It started out as a place no one wanted but after some urban development and accurate surveying, everybody wanted it, and were willing to fight for it (even up till 1971!).

Why did I not learn this in school?

I mean, I can understand not learning about it in Florida schools, but I attended school in Brevard! This was local history! With shooting and stuff! And by local, I mean, passing a battle field on the way to my friend's house (and a mile from the school no less!).

What will I learn about Brevard next? Maybe mutant circus squirrels taking over the town? Hey … wait a second …

Obligatory Picture

An abstract representation of where you're coming from]

Obligatory Contact Info

Obligatory Feeds

Obligatory Links

Obligatory Miscellaneous

Obligatory AI Disclaimer

No AI was used in the making of this site, unless otherwise noted.

You have my permission to link freely to any entry here. Go ahead, I won't bite. I promise.

The dates are the permanent links to that day's entries (or entry, if there is only one entry). The titles are the permanent links to that entry only. The format for the links are simple: Start with the base link for this site: https://boston.conman.org/, then add the date you are interested in, say 2000/08/01, so that would make the final URL:

https://boston.conman.org/2000/08/01

You can also specify the entire month by leaving off the day portion. You can even select an arbitrary portion of time.

You may also note subtle shading of the links and that's intentional: the “closer” the link is (relative to the page) the “brighter” it appears. It's an experiment in using color shading to denote the distance a link is from here. If you don't notice it, don't worry; it's not all that important.

It is assumed that every brand name, slogan, corporate name, symbol, design element, et cetera mentioned in these pages is a protected and/or trademarked entity, the sole property of its owner(s), and acknowledgement of this status is implied.

Copyright © 1999-2024 by Sean Conner. All Rights Reserved.