...that the first black president of Zimbabwe was a man named Banana? I missed the news that President Banana died earlier this month; fortunately, his son has contacted me and made me aware of this, as well as entreated me to help him recover a sum of money that was deposited in a foreign bank to keep it out of the hands of the Zimbabwean authorities. There's apparently a potential windfall in this for me if I help him out, so I'm looking into it and will let you, my faithful audience, know how that goes. But meanwhile, the important thing is that Zimbabwe used to be run by a Banana. President Banana. Hee-hee.
Just got the email from the woman I mentioned about a few entries ago. She didn't type much, and she typed in ASCII format, yet it still went to 3k. Here it is, names changed to protect the innocent:
===========BEGIN================
Bob,
Just wanted to introduce myself. My name is <candidate chick> and I am a friend of <a friend of your roommate's> from work. <roommate's friend> and I often talk and she told me she wanted me to meet you. I hope you have a wonderful Thanksgiving and I will be looking forward to hearing back from you soon.
Talk soon
<candidate chick>
<candidate chick's name again> CTRS
(202)555-1212
[email protected]
Note: This message and any attachments are intended only for the use
of the individual or entity to which it is addressed and may contain
information that is privileged, confidential, and exempt from disclosure
under applicable law. If the reader of this message is not the intended
recipient, or the employee or agent responsible for delivering the
message to the intended recipient, you are hereby notified that any
dissemination, distribution or copying of this communication is strictly
prohibited. If you have received this communication in error, please
notify the sender.
Note: This message and any attachments are intended only for the use
of the individual or entity to which it is addressed and may contain
information that is privileged, confidential, and exempt from disclosure
under applicable law. If the reader of this message is not the intended
recipient, or the employee or agent responsible for delivering the
message to the intended recipient, you are hereby notified that any
dissemination, distribution or copying of this communication is strictly
prohibited. If you have received this communication in error,
please notify the sender.
=================END==============
Now that I look again, I see that somehow the same disclaimer junk thing got appended twice, so I see that corporate stupidity and legal paranoia are only responsible for half of the superfluous content, and a technical glitch is responsible for the other half. Imagine if it had been an HTML message; that would have been probably an extra 3k just to carry that disclaimer, without the duplication.
I'm sure you've seen all this before; I've seen these silly disclaimers on mailing lists and in newsgroups, but this may be the first time I've gotten that extra corporate garbage in a strictly personal e-mail. It just bugs me that so many companies force every email to come with that policy appended, as if it a) is not obvious, and b) will do any good.
Oh yeah, almost forgot. The excitement, possibility of new romance, my heart all aflutter, blah blah...
Check out this banner ad for West Virginia Parks, showing a hiker on a ridge against a majestic view of the valley below. "Peek Season", it crows. Peeking is not what one does when one climbs mountains. One climbs mountains to deeply drink in the majestic view of the valley below, not to "peek".
What I think is going on is that they wanted to draw attention to the fact that they were using a pun, and that they really meant "peak" as in a mountaintop, to contrast with the meaning of "peak" in "peak season", meaning heaviest traffic period. They actually thought that by spelling it "peek" they were emphasizing the "mountain peek [sic]" meaning. Or perhaps they thought they could fool most of the people into thinking "peek" was the actual spelling for the non-standard, or at least unexpected, meaning, "mountaintop". This would be strange, though, because for that to be effective, it would require that the reader know which is the correct spelling, and notice that something was "wrong". Such a person, of course, would probably also know that P-E-E-K means "to look furtively", and would immediately run to his computer and write up a blog entry about it the gross mistake.
Maybe I'm all wet. But I definitely think that "peak-as-in-mountaintop season" makes a lot more sense than "peek-a-boo season".
Ohio has just passed a law that makes it illegal to run a video camera in a video shop where movies are being displayed (seen on Slashdot). You don't have to be found to have pointed your camera at a running video to be convicted, second offense is a felony, and a store employee -- the janitor, for example -- has the right to detain you until the police arrive.
I can't take credit for the "Ohio janitor overlords" headline; saw it on /. as well.
In a recent post, I said I would explain "in my next post" why I stayed up all night working on how to handle the Bali comment spam issue. Well, obviously I didn't do so in my next post, and I probably still can't explain satisfactorily specifically why I stayed up all night, but I can talk about what I worked on and what my goals were.
The issue was that I received a comment spam message that I considered to be potentially beneficial, advising travelers to Bali not to engage the services of a particular company, and linking to a Web page giving the same message in more detail. Though this message could be from a competitor who wants to indirectly improve his business, indirect is definitely the word for it, since there is no mention of another business offering the same services which might be more suitable. Another possibility is that the spammer is simply psycho, like that spammer from a few years ago who spammed the world looking for any aliens or well-connected persons in the government who could provide him with a safe means of time travel.
Anyway, I've gotten this far and probably failed to convince you, dear reader, that there might be any sound reason not to promptly delete the whole Bali comment (or at least sabotage the URLs straight out as I did the ones for Vig-RX), and I'm plumb out of further arguments towards this end, so let's just get on to what I decided to do and how I did it.
I decided I didn't want the Bali site's Google PageRank to benefit from a link from my page, yet I still wanted the curious to be able to click on the link and see what the page was about. JavaScript to the rescue! I would sabotage the URL in the link in the HTML in such a way that the original could easily be reconstructed. Google doesn't execute the JavaScript in pages; any links it finds in the basic HTML are the ones it follows. But JavaScript can process the internal representation of the page to do things like change where the links point to. So I just replace dots with commas in the domain part of the URL (which can't have commas, so I know this is a safely reversible mangle) in the HTML, which Google grabs and throws away, probably, since it's not even valid, I add in a JS function (or three) to find the part of the page that has that URL and change it back to the correct thing, and both of my readers can click on the link that appears on the page and have it go to the advertised page.
Since I'm poor at JavaScript, it took a long time. It took time to learn how to do Regular Expressions in JavaScript1 (not to learn to do things like write an RE that means "three alphanumeric characters followed by a dot followed by anything that is not a space or a slash", which I can do in my sleep, but how to grab parts of it and do stuff with them specifically in JS). It took time to figure out how to substitute one character for another, but only in the matched part of the string. It took time to find out how to change something somewhere else in a document. Once those JavaScript basics were done, I spent the most time of all contending with the constraints of Movable Type. The biggest issue with MT is that it strips JavaScript out of comments. Before I figured out how to work around it, it seemed that I would have to put a call to the JS function below (i.e., after) the link I wanted it to modify, but the only way to do this was to put it in the comment itself, or in a follow-up comment (but see previous sentence). I happened to bring this up to my roommate -- took a long time to explain what it was I was trying to do, even had to explain that JavaScript is not executed only upon clicking something -- and he mentioned that there were things like "onLoad". There's my answer right there, I thought. But more trouble lay ahead. The "onLoad" attribute goes in the <body> tag, and this is defined in the MT template (for individual archives, in this case). This meant it would appear -- and get run -- in EVERY individual archive page. Which might be OK for this particular code which only affects malformed URLs, but I'd just rather not, y'know?
So click on the "Bali comment spam" link above to see what I did. I suppose the first thing to look at is the onLoad thing in the <body> tag, since that's where everything starts. It invokes doCommentThings(). Up in the <head> section, you can see I have defined doCommentThings as a do-nothing-(except-return) function. Since the header and the body tag are both defined in the MT template, this guarantees that the onLoad call will always have a defined function it can execute, even if it does nothing. I'm not really sure this is absolutely necessary; the page would probably load fine if it weren't defined, but the C programmer in me keeps telling me it won't link if it's not defined somewhere.
Now, thanks to the fact that I can redefine the doCommentThings function, I can, on a case-by-case, post-by-post basis, decide what it is, if anything, I want actually done to my comments. MT won't strip out the JS code I type when I write up my post in the Web-based UI interface, so I can do this here. MT does, however, convert all newlines you type into <br>s; that's a problem that can be gotten around by adding a // at the end of every line of JS you type, so that the <br>s become just part of comments; possibly by turning off the "Convert Line Breaks" thing for the entry, which I didn't try -- presumably has its own problems; or by doing what I did, which was to simply put it all in an external .js file and include it with the <script src="foo.js"></script> syntax. This is also good because now I have a single JS file that does this, which I can include into any page where I want to use those functions, without adding all that bulk to the page. And I'm finally doing something I've always wanted to do, which is to have my own site-wide JavaScript library, which I of course will build up over time. Will probably one day take all those MT-provided JS functions out and put them all in an MT.js or something.
OMG, did this turn out to be a long post!
[1] I initially mistakenly wrote "Java", don't know why, but if I do that again in this post, just mentally substitute "JavaScript".
Update: This very page is about the third of my nearly 200 blog pages to have been selected for comment spam. I hadn't actually added the JavaScript stuff to this page until I saw the "unbeatablemobiles" spam that is the first one below, so this gives me a perfect opportunity to make this page self-demonstrating.
Of course, there's no merit in this particular comment spam, but it gets the dubious honor of getting to stay in place (neutered, of course) by being the first spam on my page on how I deal with comment spam.
I changed the spelling in the title of my October 31 post from "5ux0rs" to "5ux0r5". A quick Google search showed the latter to be the more prevalent spelling, and I certainly didn't want to be in the wrong about that one. Hoo boy, would that have been embarrassing! Of course, even when there's a final authority on the spelling of something, Google, listening to the vox populi, sometimes disagrees.
For a long time now (close to a year?), a friend of my roommate's (a woman he actually hates, and whom I've never met) has been trying to set me up with a friend of hers from work. She finally got a little more aggressive, bugged him to get me to say OK (or at least I think that might have been what happened; I don't know, it all happened so fast), got my email address from him, and then sent me an email saying she gave my email to her friend. Candidate is supposedly a bit fat ("a bit", of course, can be wildly open to interpretation), and that is supposedly her only defect. The only other thing I know about her is that she's quite a bit younger than me1.
[1]Yes, I said "than me". I have my reasons. One of these days I've gotta write up a treatise on my views of grammar and usage.
A new bit of comment spam appeared at the usual place. This one is different, however; it is not selling a product. It claims to be an advisory not to deal with a certain business in Bali. I went and checked the links that it linked to, because it actually said "do not do business with <business>", and the "<business>" part was a hyperlink. Had that been a link to the actual homepage of the business being disparaged, it could have equally well been either a sneaky way to make Google smile on the site while appearing to the blog maintainer as a genuine public service message, or simply an honest mistake, where someone actually trying to disparage the business didn't realize that he was actually providing a benefit to the business by linking to it.
But what was linked to was not the home page for that business, but rather, a page devoted to bashing that business. And I haven't checked whether that page has secret links to any actual pages selling something, but even if it did, there would be no point in creating links to a page that links to the commercial site, because you have another degree of separation there. The disparagement page gets ranked more highly, so Google will see it as a popular page, and give some more weight to any pages that it links to, but you get a limited effect from just one page linking to you, no matter how important that page is. At least, that's what I think.
Perhaps what's happening here is an attempt at Google bombing, somewhat in the spirit of the original Google bomb. Make it so that whenever someone types "Bali traveller", instead of getting the home page of the company by that name, they get the other site, and they start to have second thoughts about whether they want to do business with them.
The last question, for me, anyway, is is this a well-meaning message put out by someone who has been royally screwed in the way they describe (or knows someone who has), or is this just a competitor engaged in some of the same unsavory practices he accuses Bali Traveller of in his page? Don't know.
In my next post, I'll talk about why I stayed up all night working on a way to handle this one (hint: it involves JavaScript. Did I already mention I'm poor at JavaScript?).
It's hard to resist the temptation to put up a cartoon that you love, especially if it's just one little thing that is not really going to deprive anyone of their income. It's also sometimes hard to pity those who put out Cease and Desist letters and otherwise exercise tyrannical control, though it is more often the lawyers or the corporations than the actual artists wielding the cudgel. With that in mind, I just noticed this note from Gary Larson, asking his fans to please, please not post his cartoons, and giving his personal views on why it bothers him. It's not the absolute, most warm-n-fuzzy thing I've ever read from an artist to a fan, but the personal touch is nice. Just thought I'd put it up there. I have no idea how old this notice is, BTW.
One usage that I've started hearing that bothers me is "I don't even know". This is, of course, perfectly acceptable if you mean "Not only do I not know this larger/more specific piece of information, but I also don't even know the more basic/general information that might be considered a prerequisite for the former". (Thank God people don't go around actually saying sentences like that, except inside geeky companies like the one I work for.) But often people use it to mean "I don't have the slightest idea", or "I sure wish I knew, but I don't."
But what definitely bothers me most about this is that I've actually heard myself use this at least twice. Indeed, I don't even know how many more times I've used it that I didn't notice.
Similar thing goes for "the problem is, is that....". I noticed my cow-orkers doing that a lot, which I always thought was stupid, until I heard myself do it. Well, that didn't make me think it wasn't stupid, but it made me understand a bit better how hard it can be to resist language trends.
Just made two minor changes to my blogs, hard to notice.
I added a "META-ROBOTS" tag to my monthly archives, so that Google and other search engines don't index my monthly archives. Reason being, if you want to find out whether PyCrust is available for the Sharp Zaurus, my September archive won't tell you anything, because I wrote about the Zaurus and the "Flakiest Python Shell" in completely unrelated posts, related only in the sense that they were both written by an Open Source/tech junkie in the same month of his life. But if you are searching for the phrase "insect overlords welcome you", you don't really need the August archive, because that won't tell you anything you want to know that is not already covered in the original entry. So, a month or so from now, if you search on these things, the monthly archives should not show up as redundant or meaningless results.
Second, I used some MT magic to create links from these (now higher-importance) individual archives to their corresponding monthly archives. One, now that my monthlies aren't going to show up in Google search results, they're going to get lonely if I don't do something. Two, they're pretty hard to get to otherwise. Say you find my report on my first internet date (search for "epilogue" within this site), and you become interested in my personal life. Well, you'd either have to keep clicking the "next" and "prev" links (well, the links actually have the names of the next and previous entries) to go through them all, or you could click main and get lucky that I've been doing this for a short enough time that links to all my monthly archives are still on the main page, but that won't last forever, of course, and besides you'd end up hitting the back button because you failed to note the date of the entry you were looking at before you clicked "Main" :-) So now you have direct access to some context.
After meeting with members of the Greenbelt City Council and at least one County Council Member, the owner of our apartment building has agreed to drastically reduce the rate increases. They will be 10% for those who sign a 1-year lease, 15% for those who go month-to-month, with (and this is the part that worries me) future annual increases to be "likely" "around" 10% until the management feels they have reached market value. Pretty reasonable, although 10-15% is still a bit steep, and some residents may still not be able to afford that. Also, one person I spoke to very briefly said she had already given her notice and I think found a new place. This action comes too late for some people.
I was running a survey of the residents, to find out how much their rents increased, how this would affect them, etc., but I didn't even get a chance to release the results. Was going to send one last email out to our online activism group for last call for survey responses before wrapping that up, but this thing has finally been resolved, and I'm proud to say all my effort on that front has been an utter waste. As I sort of suspected all along. I mean, I think I did the survey about as "right" as I could do, given the limited time constraints and manpower, but all along I suspected there was no point in it, that it was taking too long to be released at the appropriate time, mainly, and that its real value was questionable.
Now my roommate and I have to reconsider how long we will stay here, what we will do, etc.
The building no longer feels evil, etc.....
So, I've been incredibly busy lately. Ordinarily this would have been as good a time as any to be actively pursuing the dating scene, [pauses to check on the status of the most recent compile, for a change thinking it not too likely that it'll be done] but that's just the furthest thing from my mind right now.
What detained me this weekend was the installation of a sculpture at CAPA in memoriam to Aunt Gretchen, who essentially founded the school. I was asked to help out with some musical numbers that would be performed. So I drove up to Pittsburgh, showing up at 10 p.m. on Saturday or so, and we went over the music very informally, with family.
Next day was a veritable whirlwind of activity. Morning was surprisingly tranquil: about the most stressful thing I had to do was print out some extra copies of the sheet music we were to sing; I had plenty of time to shower. Five of us plus some food and a trombone squeezed into two cars and picked up Aunt Mildred at the Holiday Inn in Oakland. We did the memorial thing, and there wasn't really much to say on that, except that I wish I didn't miss so many notes when playing the trombone (we decided to work it as a choir with trombone for the bass, except for the last verse, where I sang bass. When Warren, who sang with us, learned about this plan, he remarked, "How Moravian!" Whatever that means.)
And of course, the ceremony turned into a party in the art gallery of the new CAPA. At these parties, there are so many people I have to say hi to, that I missed all the tours they offered of the school, and didn't get as much chance as I would have liked to talk to the fine youngish woman who seemed to appreciate my playing. Oh well, she lives in Pittsburgh, so that'd be too hard anyway.
Then, Auntie M had to go visit two people in Squirrel Hill; she left the Aunt G Memorial Reception early to go visit one, and we picked her up from there and all went to visit Fred Frank and they talked about architecture and Jewish stuff while I got half drunk on wine that was too refined for my coarse palate. Turns out German Jewish immigrants looked down on other, later Jewish immigrants (from Poland?). Then, we all headed off to an early dinner at Alexander's in Bloomfield, a.k.a., Little Italy, early because I had announced my intention to hit the road around 7 making 6:00 seem like a good dinner time. Of course, 7:00 was about when we got done placing our orders, and dinner dragged on until 9 or 9:30. Not that it was unpleasant dinner, of course, I just regret being so casual about the time. I also regret taking a Tiramisu when no one else seemed interested in dessert, and when I knew I would be needing coffee on the road.
I'm trying to debug something that's throwing an exception in a C++ CORBA implementation file. My approach -- the lazy one -- has been to add debugging statements everywhere in the functions that are getting called, until I find out what method call in that function is throwing the exception, and then to repeat the process with the latter method. Unfortunately, on this Solaris machine with 512 MB of RAM and another user who insists on doing a full X login into it, it takes several minutes for this C++ file to compile, which gives me some spare time to go the Web browser and type up new blog entries. I should probably look at the code harder, rather than do all this time-consuming compiling just to get a modicum of information each time.
More interesting activity at my most popular blog entry. Another comment by a reader calling himself Peter who didn't appear to have read the entry or said anything relevant, but posted a link. The web page he pointed to? http://www.fda.gov. Has the FDA decided blog comment spam is the way to get desperately needed readers to start coming to their site, or to boost its Google rank?
Someone complained about not being able to find information about UMLUG, so I threw up this very simple web page about it. It has a link to the mailing list, so that's the important thing.
There's a long, sad story about why the club doesn't have a real home page three years after VA Linux donated a server to us, but I won't go into it just now. Hopefully it'll come live again someday soon.
You'd think the world's most powerful and, by its own claim, innovative software company could do better than this. Come on, 'softies. I have to close all my browser windows just because I want to stop viewing your site? No other Web site with a log on requires this.
Update: Wow, and that's not even the best part. M$'s quality control department has apparently been told that there is no requirement to check that code they've written expressly for non-MS browsers actually works in those other browsers. IE apparently does not rely on the JavaScript window.close() call -- or should I say the "javascipt" window.close() call -- for the close button on the aforementioned page.
This is the second example I've written about in this blog of MS-oriented Web designers (this time, MS itself) writing code to accommodate other browsers which doesn't actually work in those browsers. Here's where I wrote about it last. The company who made that fine piece of code is very small, so they have an excuse for making mistakes, but on the other hand, their mistake was IMNSHO one of stunning cluelessness, not mere sloppiness and laziness.
I just spent an hour or so trying to make the changes to an inline function take effect. I ended up making it not inline just to make it work. I still don't know why it doesn't work.
The inline is fully defined in a .h file. The .h file is #included in the .cpp file where it is being called (it is getting called other places, of course). I am removing the .o output of the .cpp file before re-running make. And yet the execution doesn't change.
The inline directive actually tells the compiler to decide on its own whether to move the content of the code to the place(s) where it is called, or to leave it as a true function. Could g++ be doing something weird like deciding to inline it in some other .o file, and not to inline it in the one that I'm interested in, but instead call the function as defined that other .o file (which I haven't recompiled since modifying the function definition)? That doesn't make sense, because: 1) the inlined code is not a function, so there's no entry and exit point for my main.cpp to find/to send control back to the main; 2) the main.o is getting compiled before everything gets linked up, so it has no awareness of what is actually defined in some other object file, that it might avail itself of -- all it cares about is that everything is declared.
It's annoying when these little bits of confusion tie up large chunks of your time.
So here's a very quick rundown on why I've been so busy. There's a lot I could write about it, but, ironically, I don't have time.
On October 15th, my roommate and I received notice that, effective December 15, our rent would be raised to a new amount which is 30% greater than what we are currently paying. My initial reaction was that this was a mistake; that whoever was raising the rents had looked in the wrong column when entering the new amount or something. This letter came on Thursday night, just before I went off to my weekend in New Orleans, so when a meeting among the residents was called on Friday and held on Sunday, I was unaware.
But apparently they're doing that to everyone. If you're on a month-to-month lease, as we happened to be, you get burned immediately. If you're on a yearly lease which is good for at least a few more months, then you get that much time before your rent goes up. 30% is actually at the low end of the range of increases I've heard of; one resident has reported his going up by 56%.
The building is large and old, so it's paid for, and there can't be any emergency repairs in the works that would necessitate this type of increase. It's hard to see that this would be anything other than pure, unadulterated greed; some fatcat woke up and said, "Oh my God, I could be raking in so much more on this building than I am now!" But of course, a huge portion of the residents will not be able to pay these new rates, and will be forced to move out, paying the price in a serious way for the owner's newfound love of bucks.
Though it has subsided a bit in the past week, I would get a sort of sickening feeling whenever I left my apartment to walk through the rest of the building to go out, or whenever I would approach the building as I got out of my car. I felt like I was in a building of evil; a building where I wasn't welcome; a building that was trying to suck the lifeblood out of me. It was weird, and, of course, disquieting.
So I decided to join forces with the people who decided to do something about it.