Wednesday, August 25, 2010
Perhaps RACTER ghostwrites this guy's blog?
- From
- "Angela Smith" <webmaster@bussinesdata.com>
- To
- sean@conman.org
- Subject
- Link Request
- Date
- Wed, 25 Aug 2010 12:46:55 +0500
Greetings!
My name is Angela Smith, SEO Consultant. I've greatly enjoyed looking through your site and I was wondering if you'd be interested in providing a link to one of our client www.flowerbud.com. In lieu of this link, we will provide a link back or more from our human edited directories that have built good credibility with search engines.
Our linking details:
Please add following details to your website and we will give you as many link backs as you provide. (In case you have more than one website)
- URL
- http://www.flowerbud.com/shop-by-occasion-cat/birthday-cat
- Title
- birthday flowers delivery
- Description
- Flower bud presents you an ample, daily fresh and multi hued bunch from the farm in Baja Sur California and you'll get beautiful, fresh flower arrangements. Flower delivery direct from the grower, most of our flowers will arrive on your doorstep before they even bloom.
If you are interested, please add the above link details to your website and please send me the URL and TITLE in order to list your website. I'll add your link as soon as possible.
I hope you have a nice day and thank you for your time.
Regards
Angela SmithP.S. Please note that this is not a spam or automated email, it's only a request for a link exchange. Your email address has not been added to any lists, and you will not be contacted again. if you'd like to make sure we don't contact you again, please fill in the following form:
http://bit.ly/unsubscribe-listplease accept our apologies for contacting you.Address: A 26, Sec-59, Noida, India
I get these “link exchange” emails from time to time and for the most part I ignore them. But this one I just had to share; not the email per se nor the website in question but for the owner's blog:
Seriously now, I think the executive along with the rank and file of the UAW should rise up and be reliably counted upon to use Flowerbud.com as their one and only source of fresh cut flowers in all seasons and for any, all and no particular reason at all. After all I am about to weave yet another fine product from General Motors into a hectic day and a story of approval that at one time would have ranked as quite out of character. In ‘Vase Runner’ I lauded their behemoth Suburban on a marathon run and now I find myself waxing on about a plain vanilla sedan that seems to have entered the market place to little fanfare, perhaps because it coincided with “The General” slipping into “Government Motors” and the over reaching overdrive gear.
Whatever, It's comfortable seat and serenely quiet interior still lie a thousand miles south of a warm bed and another 4 am PDX trek. My car parks ( it knows its own way ) at blue R7, the Rosetta Stone experiment that is the bus from economy parking to the terminal is as punctual as ever and of course my considerable monetary infusion to Alaska Airlines goes a long way in aiding all the free flying enjoyed by airline staff and families, not to mention allowing just the odd day of work for those with inordinate seniority. Numerous days away from the job being essential to the storing up of sufficient surliness and bile that qualifies one to be cabin crew, and whoo hoo, even the beer in hand emergency slide operator on more than a few of today's airlines. Just this week I was chatting with a Delta Platinum passenger who in three months of assiduous looking over 60,ooo miles had yet to find a cabin crew member who had earned one of the accolades that Delta HQ wants their premium passengers to award to staff for simply doing their job with pleasant and helpful demeanor. You would not accept that of your pizza delivery person yet after dropping $500, $2000 or even more for a plane fare you to take it from any number of personnel attached to the aircraft … and keep mute.
Seriously, from a florist.
It just goes on and on with this rambling stream-of-conscience keyword laden verbal diarrhea. Even better, it appears that all the blog entries from Mark's Bloomin' Journal are like that.
Amazing.
Tuesday, August 24, 2010
A lesson learned
My webserver has been down for two days, and I only now noticed, even though I've been receiving notifications, on the hour, every hour, since it went down.
Sigh.
Why didn't I notice?
Because I also receive the same notification (same subject line in the email) from another webserver that tends to go down more often than not, and it too, went down around the same time as my webserver.
I restarted the other webserver and kept wondering why I was constantly receiving notifications of it being down. I figured the webserver might have been updated, thus breaking the status page I check, so I adjusted the monitoring code appropriately (yes, one of the fields I was looking for didn't exist, which lead me to that conclusion).
It wasn't until I tried hitting my own webserver that I actually noticed it was down.
That's when I realized that not having the website name in the subject line of the email notifications was not a good idea.
I also realized I should blog more often.
Tuesday, August 03, 2010
The Dream of a Lifetime
A tip from Jeff lead me to very cool Uncle Scrooge story that may (or may not be) the inspiration for the movie “Inception” (actual links from boingboing).
I'm more familiar with the work of Carl Barks than I am with Don Rosa so I found the artwork a bit jarring but the story was quite imaginative (and odd to see so many Beagle Boys in one story).
Thursday, July 22, 2010
How not to design a PHP web site
I don't even know where to begin.
One of the tasks our team is currently working on for “Project: SocialSpace2.0” is to separate the user uploaded content (images, videos, etc) to its own webserver (what we're calling “the static content”) to make it easier to scale out the site.
My task is to figure out how the content is uploaded to the site. This
is not an easy task. The proprietary PHP framework (where have I heard that tale before?) consists of
over 400,000 lines of undocumented code (but of course!) spread across 3,000
files (really!) that is a prime example of why object oriented programming
can be a Bad Thing™ (early on in the project, I was curious as to how
far down the rabbit hole this code went, so I spent some time starting with
the topmost PHP file and replacing each require_once() function
call with the code it referenced; I stopped after including over 15,000
lines of code and that's before anything is executed).
The automagical code is amazing. Even though I changed
$EO->set_setting('FS_IMAGE_UPLOAD_PATH','uploads/images/ );
which is relative to the DOCUMENT_ROOT and thus, hard to
move to its own domain, to
$EO->set_setting('FS_IMAGE_UPLOAD_PATH','/home/spc/tmp/images/');
the content is still save to the old location, thus making it harder to move the content to its own domain.
Going further—the actual upload control on the webpage is a Flash program (lovely), which apparently is controled by some Javascript (oh it's getting better) that is generated on the fly (can you feel the love) and yet still manages to hardcode the destination directory.
Wow! I'm seriously impressed by the previous team's work.
This is going to be painful, I can tell.
Those email server blues
I'm concerned that eventually it will no longer be possible to run a private email server and that everyone will end up using Gmail, Yahoo or MySpaceFaceBook because that's the only way we will be able to get email.
Occasionally Dad will call asking why his email to me is bouncing, and every time I check, it's because AOL is taking the forced transitory failure (as generated by my greylist daemon) as “I can't deliver this in one shot, so of course that email address is bogus.” So I've had to whitelist all of AOL.
I had a similar problem with MyFaceSpaceBook. One or two transitory failures and my email address is considered bogus. Another whole swath of IP addresses whitelisted.
Then Corsair writes in about his emails to be being bounced.
Sigh.
Corsair's case I can't really figure out. From the logs:
Jul 18 04:28:36 brevard gld: [98587] tuple: [XXXXXXXX.195 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 18 08:28:36 brevard gld: [98799] tuple: [XXXXXXXX.195 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 18 12:28:37 brevard gld: [99052] tuple: [XXXXXXXX.194 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 18 16:28:37 brevard gld: [99309] tuple: [XXXXXXXX.195 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 18 20:28:38 brevard gld: [99491] tuple: [XXXXXXXX.194 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 19 00:28:38 brevard gld: [99675] tuple: [XXXXXXXX.194 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 19 04:28:39 brevard gld: [99944] tuple: [XXXXXXXX.195 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 19 08:28:39 brevard gld: [100234] tuple: [XXXXXXXX.194 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 19 12:28:40 brevard gld: [100509] tuple: [XXXXXXXX.195 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 19 14:00:38 brevard gld: [100595] tuple: [XXXXXXXX.195 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 19 14:01:09 brevard gld: [100596] tuple: [XXXXXXXX.194 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 19 14:05:38 brevard gld: [100604] tuple: [XXXXXXXX.194 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 19 14:06:09 brevard gld: [100605] tuple: [XXXXXXXX.195 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 19 14:13:09 brevard gld: [100610] tuple: [XXXXXXXX.195 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 19 14:13:40 brevard gld: [100613] tuple: [XXXXXXXX.194 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 19 14:24:24 brevard gld: [100629] tuple: [XXXXXXXX.195 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 19 14:41:18 brevard gld: [100641] tuple: [XXXXXXXX.195 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] GRAYLIST GREYLIST Jul 19 15:06:38 brevard gld: [100678] tuple: [XXXXXXXX.195 , XXXXXXXXXXXXXXXXXXXXXXX , sean@conman.org] ACCEPT WHITELIST
His email should have gone through on the second attempt, as it was only four hours, which is less than the six hours it takes to purge unreferenced tuples. Others I can explain; the third becuase it's from a different IP address, and the fourth becuse it definitely is past the six hour lifetime of an unreferenced tuple. Same for the fifth, but again, I can't explain why it wasn't accepted by the sixth attempt.
My initial thought was that it had something to do with searching the tuple list. I recently rewrote the binary search code so it was not only half the size, but much clearer, but maybe it doesn't work. Maybe I missed some subtle boundary condition.
50,000,000 tests later (no, really!), and no, both the old binary search routine and the new binary search routine return identical results. If there is a corner case, 50,000,000 random tests was not enough to reveal it. So I doubt it's that code.
About the only thing I can think of (and I haven't tested this) is that the timeout for old tuples is not what I think it is, but when I query my greylist daemon it returns a value of six hours for the lifetime of a greylisted tuple.
In any case, I whitelisted Corsair's email address. And I'm pondering why I even run my own email server any more …
An update to a quick note on embedding languages within languages
In making this comment I came across this old post of mine from 2007 where I lament the amount of code required to query SNMP values in C. I took one look at the code I wanted:
OID sys = SNMPv2-MIB::sysObjectID.0;
if (sys == SNMPv2-SMI::enterprises.5567.1.1) /* riverstone */
{
IpAddress destination[] = IP-MIB::ip.24.4.1.1;
IpAddress mask[] = IP-MIB::ip.24.4.1.2;
IpAddress nexthop[] = IP-MIB::ip.24.4.1.4;
int protocol[] = IP-MIB::ip.24.4.1.7;
int age[] = IP-MIB::ip.24.4.1.8;
int metric[] = IP-MIB::ip.24.4.1.11;
int type[] = IP-MIB::ip.24.4.1.6;
}
else if (sys == SNMPv2-SMI::enterprises.9.1) /* cisco */
{
IpAddress destination[] = RFC1213-MIB::ipRouteDest;
IpAddress mask[] = RFC1213-MIB::ipRouteMask;
IpAddress nexthop[] = RFC1213-MIB::ipRouteNextHop;
int protocol[] = RFC1213-MIB::ipRouteProto;
int age[] = RFC1213-MIB::ipRouteAge;
int metric[] = RFC1213-MIB::ipRouteMetric1;
int type[] = RFC1213-MIB::ipRouteType;
}
for (i = 0 ; i < destination.length; i++)
{
print(
destination[i],
mask[i],
nexthop[i],
snmp.protocol(protocol[i]),
metric[i],
age[i]
);
}
and remembered—I did that!
Yup. Back in September of 2009 when I first started playing around with Lua. I installed the SNMP bindings for Lua and wrote the following:
#!/usr/local/bin/lua
-- http://luasnmp.luaforge.net/snmp.html
snmp = require "snmp"
OID = snmp.mib.oid
routeprotos =
{
"other ", "local ", "netmgmt ", "redirect ",
"egp ", "ggp ", "hello ", "rip ",
"is-is ", "es-is ", "igrp ", "bbnspf ",
"ospf ", "bgp "
}
print(" Dest Mask NextHop Proto Metric Age")
print("-------------------------------------------------------------------------------")
router = assert(snmp.open{
peer = arg[1] or "XXXXXXXXXXXXXXXXXXXXXXXXX" ,
community = arg[2] or "XXXXXXXXX"
})
cisco = OID "SNMPv2-SMI::enterprises.9.1"
riverstone = OID "SNMPv2-SMI::enterprises.5567.1.1"
sysid = router["SNMPv2-MIB::sysObjectID.0"]
if string.find(sysid,cisco,1,true) then
shouldbe = OID "RFC1213-MIB::ipRouteDest"
result =
{
{ oid = "RFC1213-MIB::ipRouteDest" } ,
{ oid = "RFC1213-MIB::ipRouteMask" } ,
{ oid = "RFC1213-MIB::ipRouteNextHop" } ,
{ oid = "RFC1213-MIB::ipRouteProto" } ,
{ oid = "RFC1213-MIB::ipRouteMetric1" } ,
{ oid = "RFC1213-MIB::ipRouteAge" } ,
}
elseif string.find(sysid,riverstone,1,true) then
shouldbe = OID "IP-MIB::ip.24.4.1.1"
result =
{
{ oid = "IP-MIB::ip.24.4.1.1" } ,
{ oid = "IP-MIB::ip.24.4.1.2" } ,
{ oid = "IP-MIB::ip.24.4.1.4" } ,
{ oid = "IP-MIB::ip.24.4.1.7" } ,
{ oid = "IP-MIB::ip.24.4.1.11" } ,
{ oid = "IP-MIB::ip.24.4.1.8" } ,
}
end
repeat
result,err = snmp.getnext(router,result);
if result ~= nil then
if string.find(result[1].oid,shouldbe,1,true) == nil then break end
print(string.format("%-16s",result[1].value)
.. string.format("%-16s",result[2].value)
.. string.format("%-16s",result[3].value)
.. routeprotos[result[4].value]
.. string.format("%-6d",result[5].value)
.. string.format("%-6d",result[6].value)
)
end
until false
os.exit(0)
Sunday, July 04, 2010
Scaring 'da birds
It's been seven years since last I attended a Fourth of July party with my friend C, and once again, I'm at his house to help scare the local bird population. Fortunately this time, there was no big boom, but as a precaution, C moved the festivities to the back yard, next to the pool.
Just an FYI for those of you who might think of doing something silly like setting off illegal fireworks you got by driving to the border of South Carolina and totally said you would use them legally, wink wink nudge nudge say no more say no more …
Sunday, June 27, 2010
Home again
We're home safe and sound, far away from the eeeeeeeeeviiiiiiiilllllllll streets of Orlando.
Saturday, June 26, 2010
Buyer beware
In our room was a small booklet with advertisements and coupons for the various attractions in the area. Included in this free booklet were maps of the area. Not to scale and crudely drawn, but way more useful than the large “we paid good money for these useless wastes of paper” maps.
That last map was more than accurate enough to get us back on the right road after driving out the wrong exit from Universal City Walk.
Those Orlando roads are eeeeeeeeeviiiiiillllllllll! So are the maps. Buyer beware!
The best thing to see when your blue
The roads around Orlando destroy your soul. By the time we got back to the resort, the bickering between Bunny and me over driving had driven me close to a breakdown. I came very close to skipping out on Blue Man Group but a few minutes of meditative silence gave me the resolve to brave the non-Euclidean Orlando roads once more (odd, since I wasn't the one driving).
In fact, until we were sitting in our seats waiting for the show to start, I was very close to losing it (I'm telling you, the roads around Orlando are eeeeeeeeeeeeeeeeeviiiiiilllll).
And I'm glad I went.
It's very hard to describe the Blue Man Group experience. It's part concert (bring ear plugs, or ask one of the ushers for ear plugs—there's a ton of drumming), part performance art, part comedy, part social commentary and part audience participation. The energy level is high and it's just this … incredible experience that you have to … um … experience live in order to “get” it.
The entire trip, the sucking vortex of ill-marked, multiply-named, non-Euclidean roadways designed by a disgruntled parking lot architect that is Orlando, the “eh” experience of the Salvador Dali Museum, the loudness of The Hard Rock Cafe (where Bunny and I ate dinner after The Blue Man Group—it was next door and still open), everything, was worth it just to see The Blue Man Group.
Escaping the surreal area around Disney
Bunny and I managed to escape the sucking vortex of ill-marked, multiply-named, non-Euclidean roadways designed by a disgruntled parking lot architect that is Orlando for the coastal environs of St. Petersburg to view the Salvador Dali Museum.
We arrived in the mid-afternoon and decided against the guided tour and spent a few hours reviewing the works of Salvador Dalí. I enjoyed the experience and was glad I went. I didn't realize that Salvador did more than just melting clocks.
Bunny, however, didn't care for his work that much. It turns out that while she's heard of him, she wasn't familiar with his work; she enjoyed Escher more than Dalí.
![Staying cool on a hot day [Staying cool on a hot day]](http://www.conman.org/people/spc/about/2010/0731.t.jpg)