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, Debtember 01, 2007

“We have met the enemy, and it is us.”

You are at a party, and you get bored. You say “This isn't doing it for me anymore. I'd rather be someplace else. I'd rather be home asleep. The people I wanted to talk to aren't here.” Whatever. The party fails to meet some threshold of interest. And then a really remarkable thing happens: You don't leave. You make a decision “I don't like this.” If you were in a bookstore and you said “I'm done,” you'd walk out. If you were in a coffee shop and said “This is boring,” you'd walk out.

You're sitting at a party, you decide “I don't like this; I don't want to be here.” And then you don't leave. That kind of social stickiness is what Bion is talking about.

And then, another really remarkable thing happens. Twenty minutes later, one person stands up and gets their coat, and what happens? Suddenly everyone is getting their coats on, all at the same time. Which means that everyone had decided that the party was not for them, and no one had done anything about it, until finally this triggering event let the air out of the group, and everyone kind of felt okay about leaving.

This effect is so steady it's sometimes called the paradox of groups.

A Group Is Its Own Worst Enemy

Spring and Wlofie were supposed to join some friends canoeing in the swamp (that's what we have here in Florida, swamps). But then the person who proposed the canoeing trip in the first place had a family emergency and couldn't make it. That caused another member to drop out. Then a third piped in, saying he couldn't make it because he was still recovering from a cold, and that his wife was now sick. Wlofie dropped out because his wrist is acting up again (Carpal tunnel syndrome) and because he wasn't going, Spring dropped out.

Pretty much in the span of a few hours, the entire trip just fell apart.

I find it interesting how that works.


I'm surprised the studio didn't explode

Because I have a few readers who might find this interesting: Phil Donahue (a notorious left-wing liberal) interviewing Ayn Rand (a notorious right-wing conservative) (link via Right on the Left Coast).

Sunday, Debtember 02, 2007

Multiple system calls

I finally found the answer to little conundrum. But first, a bit of a recap—the code for __getpid (the function that acually does the system call) that I presented:

0804e380 <__getpid>:
 804e380:       b8 14 00 00 00          mov    $0x14,%eax
 804e385:       cd 80                   int    $0x80
 804e387:       c3                      ret

That was generated from the output from objdump, and in order to get that, I had to compile the program using gcc -g -static -o t1 t1.o t1a.o, but note the -static bit there. Normally, such routines are part of a shared library that aren't included in the final executable, but by adding -static when compiling, the routines in the standard libraries are included in the final result. And had I run the statically compiled version, I would have seen that the code that calls the system supplied __getpid() would have taken 11 minutes to run.

What bit of code was I actually testing?

(gdb) disassemble __getpid
Dump of assembler code for function getpid:
0x00820730 <getpid+0>:  mov    %gs:0x4c,%edx
0x00820737 <getpid+7>:  test   %edx,%edx
0x00820739 <getpid+9>:  mov    %edx,%eax
0x0082073b <getpid+11>: jle    0x82073e <getpid+14>
0x0082073d <getpid+13>: ret    
0x0082073e <getpid+14>: jne    0x820752 <getpid+34>
0x00820740 <getpid+16>: mov    %gs:0x48,%eax
0x00820746 <getpid+22>: test   %eax,%eax
0x00820748 <getpid+24>: nop    
0x00820749 <getpid+25>: lea    0x0(%esi),%esi
0x00820750 <getpid+32>: jne    0x82073d <getpid+13>
0x00820752 <getpid+34>: mov    $0x14,%eax
0x00820757 <getpid+39>: call   *%gs:0x10
0x0082075e <getpid+46>: test   %edx,%edx
0x00820760 <getpid+48>: jne    0x82073d <getpid+13>
0x00820762 <getpid+50>: mov    %eax,%gs:0x48
0x00820768 <getpid+56>: ret    
0x00820769 <getpid+57>: nop    
0x0082076a <getpid+58>: nop    
0x0082076b <getpid+59>: nop    
0x0082076c <getpid+60>: nop    
0x0082076d <getpid+61>: nop    
0x0082076e <getpid+62>: nop    
0x0082076f <getpid+63>: nop    
End of assembler dump.

Ah! That makes more sense then!

It's basically checking to see if the getpid() system call has been made, and if not, call it once, then cache the value for later calls to this routine. You also won't notice an int $80 here, but that's because the shared library version of __getpid() uses a different method of making a system call than the traditional int $80, although the older method is still supported, which is why I suspect the static version of the system libraries use int $80 to make system calls—to support older systems that might not support the newer system call mechanism.


As long as they refrain from installing WiFi, it should be okay

For Mark, who may or may not find this horrifying (he used to work on car diagnostic software, so he's had more than enough exposure to automobile based networks): BMW testdriving IP as the underlying protocol for car computers (link via Instapundit).

Monday, Debtember 03, 2007

RedJournal

By now it's probably all over the place that SixApart sold LiveJournal to a Russian company and there's been a lot of commentary over the move, both apprehensive and negative.

I don't really have a stake in this horse, seeing how I run my own site and everything, but I do have to wonder—would SUP (owners of LiveJournal and supporter of Putin) censor posts (or even accounts) that said stuff like “Putin is a lying, corrupt scumbag politician who should be thrown into jail, much like he's done to his opponents.”? Not terribly far-fetched if you ask me.

Granted, it may be the Russian government wanted control of the Russian LiveJournal, but sometimes, it pays to be prudent.

Tuesday, Debtember 04, 2007

Easily amused

Wow!

Just wow—crayon physics.

Wednesday, Debtember 05, 2007

Need more info

I want to help. I really really really really want to help.

No, really! I do.

But when you report an issue as:

XXXX@XXXXXXXXXXXXXXXXXX.com is having some outgoing email issues. She doesn't rec. any error msgs. The email leaves her inbox and arrives at its destination anywhere from 3hrs to 8hrs later. Can we make sure this domain is not having issues? Maybe check the logs and be sure that the delay is not on our end?

I can't help you very much. Sure, I have the sending address. What about the recipient(s) address(es)? Which addresses are having problems? Sendmail logs around three lines per email, with the sender address on one log line and the recipient address on another log line, which makes it rather difficult to correlate senders with receivers.

Give me too much information. It's easier for me to discard what I don't need than to have to ask for more information.

Just so you know.

Also, EMAIL IS NOT INSTANT MESSAGING! It got through, didn't it? So what's the problem? Oh, you want instant results? Use IM. Or even that archaic of technologies, the phone.

Sorry about that. Just needed to vent a bit.

Thursday, Debtember 06, 2007

Because out of context, this is really funny

[Nuclear Missile Combat Crew • Death Wears Bunny Slippers]

(Oh, you want some context? Fine (link via Flutterby))


On the plus side, you won't get idiots driving on the shoulders …

While the traffic is bad down here in Lower Sheol during this time of year, the roads themselves are decent, and there is no chance what-so-ever of plunging to your death if you drive off the road (link via Yet Another Really Great Blog).

Friday, Debtember 07, 2007

Talk about making money at niche markets

For some reason, I was struck by either the product, or the business plan—three very interesting online stores:

SmartFlix

For those of you who are into DIY, a website where you can rent thousands of How-To DVDs.

Heavy Ink

This is right up Jeff's alley—a place to buy comic books (all 20% off) with free shipping. As the owner of the site says:

Yeah, we lose big money on the person who orders one comic book.

… but the value proposition is so simple and compelling, that we get tons of customers, who soon start buying enough stuff that it's, on average, worthwhile.

an email to Instapundit

CatGenie

We already get flushable cat litter, but this … wow! We won't even have to do that anymore.

Monday, Debtember 10, 2007

This time, it really was broken

[Bad hub!  No token for you!]

Well, that was pleasant.

I got up this morning afternoon, went to check my email only to find myself logged out. Hmm, I thought. I wonder if there was a network issue? I went to another terminal window, and saw that I was logged out of linus, which isn't across the Internet, but just across the desk from the machine I was using. Now that's odd, I thought. What the heck is going on?

Hey! Who turned off the hub?

Yes, I use a hub. A 12 port 10base-T with AUI and 10base-2 port hub. I picked them up a few years ago, back when I was actively using older systems that didn't support the newer 10base-T Ethernet standard. I'm still using it because of a motto I live by: “if it ain't broke, don't fix it!”

So I reached behind the hub and flipped the switch.

Nothing.

I tried flipping the switch multiple times.

Each time, nothing happened.

I tried saying “xyzzy.”

Nothing happened.

I tried saying “plugh.”

A hollow voice said “plugh,” but the hub still didn't work.

“Well XXXX,” I said.

One major expedition to clear the desk later, I had the hub pulled out and open. The fuse was still good. Power was getting to the power supply. But power was not getting to the rest of the system. The power supply was shot.

“Well XXXX,” I said.

Getting a replacement wasn't hard. “Smirk,” I said on the phone, “do you have a spare switch or hub lying around?”

“Yes, I have this five port 10/100base-T switch. Will that work?”

“Perfect! I'll be over to pick it up.”

No, that was the easy part.

The hard part was getting rid of the 10base-2 portion of my network (remember: “if it ain't broke, don't fix it.” And until today, it weren't broke). The good part: linus' Ethernet card had a 10base-T port. The bad part: janet's (the firewall system) Ethernet card to my part of the network didn't.

“Well XXXX,” I said.

I scoured various boxes for an AUI-10base-T transceiver. Now, AUI-10base-2 transceivers are rare; you can still dig them up, but they're rare. An AUI-10base-T transceiver? Pretty much extinct. I've only seen two of them in my twenty years in this industry, but hey, you never know—I could have one buried somewhere.

Only I didn't.

“Well XXXX,” I said.

I was going to have to swap out a network card in janet. My old webserver, tower had a usable network card with a 10base-T connector. Pull that out. Shut down all the machines on my part of the network, pull janet out from underneath the pile of computers that sit on it. Swap cards. Then realize I have to recompile the Linux kernel on janet (which is a 486, but in the interests of keeping it out of a landfill, I'm using it for a firewall) to support the new card.

“Well XXXX,” I said.

Half an hour later, I got the new kernel working on janet and my part of the network is back up.

Just in time to hit The Melting Pot to celebrate The Older's birthday.


It's interesting to note that in searching for my hub, I found them for sale for anywhere between $20 and “if you have to ask, you can't afford it” (although several places had them listed for between $170-$220). It also seems worth it to fix the darned thing (actually, I have two such hubs, both have blown power supplies) and sell them.

Tuesday, Debtember 11, 2007

“He's dead, Jim.”

[Of course he's dead!  He's wearing a red shirt!]

A rather unfortunate inflatable Santa I passed on the way to work this afternoon.


It's either this or war …

It seems like everytime we meet with G, our Cisco consultant, he keeps trying to push IPv6 on us, saying we have to test it out.

Now I see why he's always pushing it (link via flutterby).


I felt that this was one of the few memes from what's left of LiveJournal after the Ruskies took over that was worthy enough to not only do, but to actually make a post about it. Fancy that.

[Ow!  My hand is cramped!]
Corsair2's journal King Duncan's journal

Wednesday, Debtember 12, 2007

While the Internet appears to deal well with censorship, it seems to fall a bit flat when it comes to other crimes

Well, hmm, that's odd, I thought, they were there yesterday.

I clicked on the links in the email that I'd sent, and sure enough, all of them showed 404: File Not Found errors. “Now that's damn odd,” I thought.

I went back and repeated the Google search. The same comporomised servers came up. I clicked on the links in Google and found myself redirected to the virus droppers.

I clicked on the links in the email and found myself staring at a 404 File Not Found error.

I clicked on the links in Google and found myself at a virus dropper.

A light bulb went on. “Aha!” I thought. “I bet these redirectors hide themselves! If you visit one of these pages from Google, it'll redirect you; but if not, it won't!”

Via Spring, Polyamory and crime on the Internet

There are three things that would make the Internet a better place. Two are pretty easy, and the third is “pie-in-the-sky” wishful thinking, but anyway …

  1. Isolate Russia from the Internet.
  2. Isolate China from the Internet.
  3. Wipe Windows from the Internet (this is the “pie-in-the-sky” wishful thinking bit).

And while the first two options appear to be rather drastic in nature, they probably won't help as much as the third option (and really, if the third does happen, then the first two probably won't have to be done at all).

Thursday, Debtember 13, 2007

Is separation of logic, display and language even possible?

I was just given a new project from Smirk, with one hard requirement (other than the specification of what the program is supposed to do)—it has to be in PHP (primarily because a) it's a web-based application and b) because it's interfacing to a bunch of other web-based applications written in PHP).

There is a chance down the road that this new project will be released as open source (much like X-Grey), and in order to gain traction as an open source PHP web-based application, it needs to support MySQL, although for our own use, we need to support PostgreSQL, which is nice, since then right out of the box, it'll support two popular database engines.

The only other sticky problem is i18n. I mean, other than character set issues, I want to make it easy to translate the software into other languages, which means keeping most of the text separated from the actual code. And while this is possible with PHP (with lots of self-discipline on the part of the programmer), I would also like a way to separate the language from the layout mechanics.

In other words, I would like to have the program logic, display logic and language independent (as much as possible) from each other, so that it's easy to translate to another langauge, and it's possible to change the look and feel of the program (to match an existing website).

Tall order, and I'm not even sure of the best way to go about handing this. I've seen how some other PHP web-based applications handle it (such as osCommerce and SugarCRM) and to say it's an ugly hack is an understatement.

Friday, Debtember 14, 2007

Stupid GCC Compiler Tricks

Years ago I implemented my own language, and in the process of writing that, I seriously abused the C pre-processor to give me a form of template-based programming (templates are now part of the C++ standard), and while using the template wasn't that bad:

void _MKFUNCTION(T_PREFIX,_matrix)(void)
{
  char *s;
  
  s = get_token(fpin,whitespace);
  string_push(s);
  _MKFUNCTION(T_PREFIX,_matrixq)();
}

But you had to be very careful how you included the templates stuff, or it would most definitely blow up in your face.

But this—implementing a “read-evaluate-print-loop” in C, for C—is sheer genius. Or sheer insanity. I'm not sure which.

Saturday, Debtember 15, 2007

Position wanted: toady

Are you tired of your hum drum routine? Want to meet new people? Get exersice? Learn to obey?

Hot up and comming supervillain, Mannar the Mind Melter, is now accepting oaths of fealty! Yes, now you finally have a chance to enter the exiting and fast paced world of amature/professional henching. Mannar the Mind Melter is looking for young, attractive, intelligent go getters, to serve his whims and follow him around in search of the next great caper!

You'll have a chance to learn valuable new skills, such as scowling and do-gooders, fist shaking, villainous monolouging, working as a team, and serving the glorious leader!

So come on, knaves, near-do-wells, rascals and raggamuffins, your future is waiting now!

To apply, please send a photo, and a declaration of fealty to Mannar the Mind Melter, as well as a short papragraph about yourself and what skills you can offer the Glorious Melter of Minds, via the provided e-mail.

Mannar the Mind Melter
Tyranny, Today!

• it's NOT ok to contact this poster with services or other commercial interests

PostingID: 501909929

Via Craigslist Curmudgeon, Support Local Villainy!

Five years ago I wondered about hiring scientists for secret projects in underground lairs and how one goes about such staffing. Well, it seems that all an aspiring supervillian, like Mannar the Mind Melter, needs to do is advertise in the help wanted section (or in these modern days, on Craigslist).

• it's NOT ok to contact this poster for employment opportunities in secret underground lairs.

Sunday, Debtember 16, 2007

Gives a whole new meaning to the word “automagical” …

To
Albus Dumbledore, Headmaster
From
Coxrid, IT director, Hogwarts School of Witchcraft and Wizardry
Re
My resignation

Headmaster:

I regret that I must resign my position, effective two weeks ago, at least. It is simply impossible under these conditions to create a modern, integrated, flexible IT architecture aligned with the school's educational mission and objectives.

Deployment of the OC-3 fiber backbone met insuperable difficulties, as you know, when the cabling crew was attacked repeatedly by Dementors. Cabling staff rarely are effervescent people in the best of times, and having their life force sucked through their faces by cloaked, shadowy horrors as they lay paralyzed in icy terror is a serious de-motivator.

The trials of the Hogwarts IT director

Ah, I'm so glad I don't have that job.

Monday, Debtember 17, 2007

“You're kidding, right? That's not seriously the error message, right? Bloody PHP programmers … ”

“Sean,” said Smirk, “there's a trouble ticket in the system I want you to look at.”

“Okay,” I said.

“There's a problem with the port of SugarCRM.” We needed SugarCRM, but needed a version that uses PostgreSQL, not MySQL. It took some effort, but we found a PostgreSQL-based version of SugarCRM.

And there seems to be a problem with it.

I check the ticket.

Appears to be a porting error.

Warning: pg_query() [function.pg-query]: Query failed: ERROR: syntax error at or near "contact_name_owner" LINE 1: ... ' contact_na... ^ in XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXinclude/database/pgsqlManager.php on line 136 Error retrieving Lead list: Query Failed:( SELECT meetings.id , meetings.name, meetings.status, ' ' AS contact_name , ' ' AS contact_id , ' ' contact_name_owner , ' ' contact_name_mod , meetings.date_modified , jt1.user_name AS assigned_user_name , jt1.created_by AS assigned_user_name_owner , 'Users' AS assigned_user_name_mod, ' ' filename , meetings.assigned_user_id , 'meetings' AS panel_name FROM meetings LEFT JOIN users AS jt1 ON jt1.id= meetings.assigned_user_id AND jt1.deleted=0 AND jt1.deleted=0 where ( meetings.parent_id= 'd3e15dc6-9525-d1b8-63fb-474f614635fa' AND meetings.parent_type='Leads' AND meetings.deleted=0 AND (meetings.status='Held' OR meetings.status='Not Held')) AND meetings.deleted=0 ) UNION ALL ( SELECT tasks.id , tasks.name, tasks.status , COALESCE(contacts.first_name,'') || ' ' || COALESCE(contacts.last_name,'') AS contact_name , tasks.contact_id , contacts.assigned_user_id AS contact_name_owner , 'Contacts' AS contact_name_mod, tasks.date_modified , jt1.user_name AS assigned_user_name , jt1.created_by AS assigned_user_name_owner , 'Users' AS assigned_user_name_mod, ' ' filename , tasks.assigned_user_id , 'tasks' AS panel_name FROM tasks LEFT JOIN contacts AS contacts ON contacts.id= tasks.contact_id AND contacts.deleted=0 AND contacts.deleted=0 LEFT JOIN users AS jt1 ON jt1.id= tasks.assigned_user_id AND jt1.deleted=0 AND jt1.deleted=0 where ( tasks.parent_id= 'd3e15dc6-9525-d1b8-63fb-474f614635fa' AND tasks.parent_type='Leads' AND tasks.deleted=0 AND (tasks.status='Completed' OR tasks.status='Deferred')) AND tasks.deleted=0 ) UNION ALL ( SELECT calls.id , calls.name, calls.status, ' ' AS contact_name , ' ' AS contact_id , ' ' contact_name_owner , ' ' contact_name_mod , calls.date_modified , jt1.user_name AS assigned_user_name , jt1.created_by AS assigned_user_name_owner , 'Users' AS assigned_user_name_mod, ' ' filename , calls.assigned_user_id , 'calls' AS panel_name FROM calls LEFT JOIN users AS jt1 ON jt1.id= calls.assigned_user_id AND jt1.deleted=0 AND jt1.deleted=0 where ( calls.parent_id= 'd3e15dc6-9525-d1b8-63fb-474f614635fa' AND calls.parent_type='Leads' AND calls.deleted=0 AND (calls.status='Held' OR calls.status='Not Held')) AND calls.deleted=0 ) UNION ALL ( SELECT notes.id , notes.name, ' ' status , COALESCE(contacts.first_name,'') || ' ' || COALESCE(contacts.last_name,'') AS contact_name , notes.contact_id , contacts.assigned_user_id AS contact_name_owner , 'Contacts' AS contact_name_mod, notes.date_modified, ' ' assigned_user_name , ' ' assigned_user_owner , ' ' assigned_user_mod , notes.filename, notes.created_by , 'notes' AS panel_name FROM notes LEFT JOIN contacts AS contacts ON contacts.id= notes.contact_id AND contacts.deleted=0 AND contacts.deleted=0 where ( notes.parent_id= 'd3e15dc6-9525-d1b8-63fb-474f614635fa' AND notes.parent_type='Leads' AND notes.deleted=0) AND notes.deleted=0 ) UNION ALL ( SELECT emails.id , emails.name, emails.status, ' ' AS contact_name , ' ' AS contact_id , ' ' contact_name_owner , ' ' contact_name_mod , emails.date_modified , jt1.user_name AS assigned_user_name , jt1.created_by AS assigned_user_name_owner , 'Users' AS assigned_user_name_mod, ' ' filename , emails.assigned_user_id , 'emails' AS panel_name FROM emails LEFT JOIN users AS jt1 ON jt1.id= emails.assigned_user_id AND jt1.deleted=0 AND jt1.deleted=0 INNER JOIN emails_leads ON (emails.id=emails_leads.email_id AND emails_leads.lead_id='d3e15dc6-9525-d1b8-63fb-474f614635fa') where ( emails_leads.deleted=0 AND emails.deleted=0) AND emails.deleted=0 ) ORDER BY date_modified desc LIMIT 10 OFFSET 0::PostgreSQL error ERROR: syntax error at or near "contact_name_owner" LINE 1: ... ' contact_na... ^

I could only wish I was making this up.


WTF? And I do mean, seriously, WTF?

I've been looking into The Error From Hell, and seeing how I'm given the exact line number where the error occurs, I thought I'd start there.

So, line 136 from include/database/pgsqlManager.php:

$result = pg_query($sql);

Nice.

So, to see the full query that's failing, I decide to print out the query just before it's made. And that's when I realize that the function this line appears in is called several times throughout the program (not all SQL calls are funneled through this function, just enough to make it painful).

Nice.

Okay, approach the problem from a different angle. What's the function that this piece of code is in? Oh, that's easy—query().

Okay, try a different approach.

The error complains about a syntax error near contact_name_owner, so let's try looking for that. Thirty-one loations where it's used, but none of them appear to construct a 3,544 character long SQL statement, and the one place where such a statement might be constructed, isn't called.

Head?

Meet Mr. Desk.

Mr. Desk? Meet my head.

Ouch.

I think I see the problem:

' ' AS contact_name , ' ' AS contact_id , ' ' contact_name_owner

It seems as if there's a few missing ASes in the SQL Statement From Hell, but not knowing where it's constructed (or even how), it's not that easy to fix.

Or rather … there is a way …

Just before I call pg_query(), scan the string, looking for missing ASes and add them as required, maybe using some form of regular expression search and replace funct—[at this point, Sean's head exploded from even entertaining such a notion and was pronounced “mostly dead” at the scene. Further updates as they arrive. —Editor]

Tuesday, Debtember 18, 2007

I still contend it's the bloody PHP programmers …

Sad.

Sad that the easiest way to fix The Error From Hell was to use a search-and-replace function to “fix” the SQL query.

Sigh.

$sql = preg_replace("/\s+\'\s+\'\s+([a-z]+)/"," ' ' AS \\1",$sql);

It's not perfect. It'll break if there's an SQL statement with a lowercase AS. But it'll have to do for now until I find a better regular expression.

To top it all off, I received the following from someone who has worked on porting SugarCRM to PostgreSQL:

The SugarFolk, I think due to rather obtuse source management and procedural policies, aren't interested in folding in my many improvements and PostgreSQL support. I moved on to other employment having nothing at all to do with SugarCRM or PHP (and very little to do with PostgreSQL), so I haven't worked on it. So it's officially dormant.

Sigh.


“Ah, I see you have the machine that goes ‘ping!’”

“No, it was really stupid.” Erik sighed. “I just had the idea that a CD ROM drive in an old system could eject and hit the reset button. It was a ridiculous idea.”

“Wait,” Laura began, “could you really do that?”

It was another uncomfortable moment for Erik, but she seemed serious, so he just went for it. “Uh, yeah, I could, but it's hardly the best solution … I mean, I'd have to position the servers just right, somehow get the heights and alignment correct, and update the polling script to eject the CD ROM drive any time it didn't respond to ping.”

And that was exactly what Erik found himself spending the rest of the afternoon setting up.

ITAPPMONROBOT

Yeah, I can relate

Wednesday, Debtember 19, 2007

Stick this in your power plant, Lake Worthless Utilties!

Toshiba has developed a new class of micro size Nuclear Reactors that is designed to power individual apartment buildings or city blocks. The new reactor, which is only 20 feet by 6 feet, could change everything for small remote communities, small businesses or even a group of neighbors who are fed up with the power companies and want more control over their energy needs.

Toshiba Builds 100x Smaller Micro Nuclear Reactor

And, given that we don't have a home owner's association at Casa New Jersey, we could probably get away with this, too …

Thursday, Debtember 20, 2007

“Code's worst enemy” is code itself

Using about three billion words, Steve Yegge makes the observation that the higher level the code, the less lines it takes to express a program, which is basically a truism in Computer Science. For instance, it's easier to write:

x1 = ((A * y) + B) * x * (1.0 - x)

than it is:

fldc1
fsub	[x]
fld	[A]
fmul	[y]
fadd	[B]
fmul	[x]
fmul
fst	[x1]

In fact, mod_blog would be about three times longer if it were written in Assembly than in C (and to be fair, it might take less code if it were written in Python).

So what Steve says isn't anything new in this regard.

But in Steve's billion line manifesto, he does raise a few points about IDEs that may make my own ideas moot (or a lot less easy to implement generally).

Friday, Debtember 21, 2007

An interesting idea in programming environment

Oh my … now this is brilliant, although you may need to watch the video to grasp the full concept.

Now, before you click on that link, let me warn you it's about a new programming language/paradigm, based upon a two-dimensional way of programming (although, oddly enough, even a two-dimensional programming language isn't new).

It's a neat idea, and the development system presented in the video incorporates ideas on what an IDE should do for you. I can also see using a similar tool that might solve (or at least, points towards a solution) a particularly thorny programming problem that still lacks a good name. How I envision the solution to that as-yet unnamed problem is a list of objects across the top of a table, all possible actions down the left side, and at each intersection, you supply the code to handle that object with that action.

Hmmm … using a spreadsheet as a programming editor …


Forever stumbling across Unix commands

Man, I hate when this happens—I'm browsing around on the Intarwebs, when I come across a reference to what appears to be some obscure Unix command only to find it's been around for close to thirty years now.

Sigh.

That's what I get for not bothering to read up on the 3,300 commands available by default on your typical Unix installation (found by simple invocation of find `echo $PATH | tr : ' '` -type f -perm 755 | wc -l—ain't Unix wonderful?).

Monday, Debtember 24, 2007

Notes from a last minute shopping trip

It's Christmas Eve, although it's hardly the late evening at 6:27 am, but still, saying “Christmas Eve” just rolls off the tongue whereas “the day before Christmas” just kind of lies there like the fruit cake that's been in the family for generations; it's 6:27 am, and I'm stuck in line at the local Wal★Mart.

The Kids are in a Christmas pagent at church later today and Spring thought it migh tbe nice to video tape their performance (The Younger is one of the Three Kings, whereas The Older is playing a donkey, but he gets to narrate the proceedings at the crowded manger). She dug out the camcorder, found the power cord needed fixing (it had been crushed), and all that took was some wire cutters and a soldering iron.

There were a few tapes in the bag with the camera, but upon checking earlier this morning (say, around 3:00 am) it was evident that they were not empty of content. So suffice to say that procuring some fresh video tapes for the camcorder was in order.

And that's how I found myself at the local Wal★Mart at 6:27 am on Christmas Eve, stuck in line at the register. Any later in the day and it would have been worse.

Tuesday, Debtember 25, 2007

Something about a holiday …

[Chugga-chugga-chugga-chugga-choo-choo]

Oh yea, that's it …

Merry
Christmas

Wednesday, Debtember 26, 2007

It keeps on ticking …

I got the following email from Mark today:

From
Mark Grosberg <XXXXXXXXXXXXXXXXX>
To
Sean Conner <sean@conman.org>
Subject
Re: Code review.
Date
Wed, 26 Dec 2007 15:22:47 -0500 (EST)

On Wed, 26 Dec 2007, Sean Conner wrote:

I got it. I haven't done much on the computer the past few days, due to the holiday (kind of a welcome break, actually). I'll be looking it over today so expect a response later on this evening.

Oh okay. I just didn't know if X-Grey was misbehaving or all the mail servers on the net changed or something. I guess just nobody has e-mailed me recently. It is still strange not getting my spam … That was kind of like a constant notification that e-mail was working.

Yeah, I can relate

Thursday, Debtember 27, 2007

“Damn you to hell, Canter & Siegel”

When we first had problems in late 2004 we were sending out 50,000 member-requested emails a week. Since mail functions are so deeply wired into core server technologies the average web engineer has no ideas how many emails are going out. I sure didn't. But now I do. We're sending about 400,000 member-requested emails a week. We've had to dedicate significant amounts of time (and thus money) to become sendmail geeks, mastering the myriad error codes, loopback systems and contact policies of the large mail providers and scripting many back-end and website functions to stay in compliance as best we can. We've even had to retain a mail delivery analysis partner, and still debate if we'll have to pay a third party to send all out emails. If one of us was already a master of sendmail, and had connections at big mail providers this would be easy, but how many people fit that descirption in the average 10 person start-up?

Sending Email is a Big Headache for Small Companies with Popular Websites

The rest of the article goes into how difficult it is for a business to send out mass volumes of (and in this case, it appears to be very legitimate) email and all the tricks they have to do in order to satisfy their customers (who apparently get some form of notification via email).

And as a company that doesn't use email as our primary service (we're a web-hosting company), we still have to deal with some of this crap as we too, get blacklisted and blocked by larger ISPs.

I'm afraid that soon email will only be handled between large companies and anything from an “unregistered” server (read: “from a non-large company that hasn't paid the proper Danegeld jizya bribes licensing fees”) will be dropped. In the end, if we want email, we must submit to the Borg use Gmail and that has me worried.

Friday, Debtember 28, 2007

I should know better than to trust a bank to be “fair”

A decade ago, I found myself at the Orlando Airport at 10:30 pm. The reason behind why I ended up at the Orlando Airport at 10:30 pm in early January is a story in and of itself (the fact that I had to abandon my car in the middle of Georgia just after Christmas should give an indication of how fun that particular trip was) and I had just spent the last of my cash on a one-way ticket to Ft. Lauderdale on the first flight out of Orlando the next morning (it was amazing—it was like the airline knew, right down to the penny, how much money I had on me; I think I had less than a dollar's worth of change after purchasing the ticket). Since the flight was still a few hours away and the thought of sleeping at the airport didn't thrill me, I was overjoyed to realize that a hotel existed on the premises.

Now, at the time, my financial situation wasn't all that stable. I just had my cash reserves wiped out, and my checking account wasn't all that great either. And I knew it. But I figured I could write a check, and by the time the hotel chain attempted to cash said check, a day or two would have passed, giving me enough time to get some cash into the checking account to cover the expense.

I think this used to be called “float” and was a process I've seen used by many an adult growing up.

But that was then, as a small kid. The Banking Industry however, pissed that us mere mortals were able to take advantage of such a loop hole, had in the meantime, closed that particular avenue of financial leverage to us peons (even though that article was written in 2004, I think the process was on the way out back in the late 90s when I tried it). So it was rather surprising when the hotel clerk took my check, ran it through was looked like to me a credit card processor, and informed me that I had “insufficient funds” to obtain a room.

Lovely.

I spent the night sleeping in an uncomfortable chair at the Orlando Airport, and upon arrival in Ft. Lauderdale, was picked up by a fellow cow-orker and we both drove into work. It wasn't until around 6:00 pm the next day that I finally got home.

Fast forward a decade or so. Today I'm at my bank, DonTrustUS First (where their slogan is “We bank on you!”) trying to depost two checks. The first is a tax refund from Uncle Sam that I received a few months ago, but given that it was for less than a typical Yuppie Food Stamp, depositing it wasn't a high priority. The second check was a gift from Dear Old Dad, and it was of a sufficient amount to warrant a visit to DonTrustUS First (remember, “We bank on you!”). I was lucky enough to get just head of a large crowd of people (but not lucky enough to get Cute Teller—bummer).

The teller was having difficulty with the check from Uncle Sam, trying multiple times to run it through the magnetic ink reader and having the computer spit back nonsense. The teller then tried keying in the number directly, but the computer kept insisting that the check was from a “foreign country.”

Somehow, I find it very amusing that the computers at DonTrustUS First thought that the US Treasury Department was a “foreign bank.” The teller was finally able to get the computer to accept the check by informing the computer that, indeed, the US Treasury Department is not a “foreign country” and to accept the check.

The second check, the one from Dear Old Dad, didn't have nearly the problems as the one from Uncle Sam. Although the teller did inform me that there was a “hold” on Dear Old Dad's check. When I inquired why, I was informed that because the check from Dear Old Dad was drawn upon an out-of-state check, it would take a few days to clear.

It would, in fact, take until January 7th!

I'm sorry, but XXXXXXXX!

If some large hotel chain could immediately transfer funds from my checking account to their large coffers, are you, DonTrustUS First, telling me that you are still acting like this is the 19th Century and that exchanging funds with an out-of-state bank takes nearly two weeks because you're limited to the Pony Express? (I hear there's a new thing called a “transcontinental railroad” that will supposedly make cross-country mail take days, instead of the few weeks it formerly took)

XXXXXXXX! XXXXXXXX! XXXXXXXX!

It will probably clear sometime tonight, at which point, you, DonTrustUS First, will sit on the money for ten days collecting interest, and yet you still manage to charge me a quarterly fee? (And let's not even get into the whole “draft overcharge” racket you got going)

XXXXXXXX!


Can a civilian land a jet airliner?

Truth be told, I've never had cable TV, but the Discovery Channel's “MythBusters” series has always struck me as a fun and useful idea for a program. A sort of Snopes.com of the airwaves, it seeks to prove or dispel various urban legends and generally wacky propositions—for example, can a person really become stuck to an airplane toilet seat by flushing it during flight?

With commercial aviation as rich as it is with mysteries and misconceptions, it's perhaps no surprise that plane-related topics are among the show's most frequent. Most recently, hosts Adam Savage and Jamie Hyneman attempted to find out if people with no flight training, namely themselves, could safely land an airliner. Their answer turned out to be yes, probably.

The correct answer, of course, is no, absolutely not. But who am I to quibble?

Via Instapundit, Can someone with no flight training safely land an airliner? Plus: Pilotless planes, overpaid pilots and other aviation myths.

Several years ago I had the opportunity to “fly” an airplane. A friend's girlfriend's father, a flight instructor for the Miami International Airport, invited a bunch of us down to his facility one weekend wherein we all got to “fly” an Airbus 320 commercial jet plane.

Or rather, ride in an incredible simulation of one—the very same simulators they use to train pilots.

Now granted, he was there with us in the “cockpit” telling us what to do, but even so, I found landing the airplane quite easy. In fact, it was much easier to land the Airbus 320 than it ever was to land any number of craft on various microcomputer simulations like Microsoft Flight Simulator. In fact, of the four of us there, three were able to successfully land the craft on the first attempt (and the failure? That was because Chuck didn't approach the runway straight on, and attempted a last ditch maneuver to straighten out since he was too impatient to skip and try again).

Now, I saw the Mythbuster's episode in question, and it was very clear that with no instruction what-so-ever, it can't really be done (as both Adam and Jamie crashed when they attempted to land with no instruction).

But with instructions? Landing one of those modern bad boys is plausible.

Heck, I managed to land one under similar conditions.

Sounds like that pilot up there ate some sour grapes.


Everything is smooth sailing, but when things go wrong, you end up in a hurricane

Oh, and speaking of airline myths, this bit from the article caught my eye:

Insult to injury, Pummer finishes up with that “for a job that technology has made almost fully automated” bit. Pilots themselves are partly to blame for propagating the mythology of cockpit automation, so enamored we tend to be of our high-tech gizmos and sophisticated planes. But again, the knowledge, training and experience required to fly one of these “fully automated” jetliners are vastly more substantial than Pummer and many others would have you believe—especially when there's a problem or emergency. That, more than anything, is what pilots are paid for—not for the routine trip during which nothing out of the ordinary happens, but for the times when something goes wrong.

Can someone with no flight training safely land an airliner? Plus: Pilotless planes, overpaid pilots and other aviation myths.

Heh. Sounds like our servers at The Company. For the most part, they run themselves, and even the <shudder>control panels</shudder> allow one to manage the server. But when things go wrong, they go wrong and it takes a metric buttload of experience to diagnose and fix the problem in those cases (and it's certainly debatable if that's a form of progress or not).

Sunday, Debtember 30, 2007

Oooh! It's Dillinger's Keyboard for real!

[The very latest in keyboard technology]

The Optimus Tactus Keyboard reminds me quite a bit of the keyboard that Dillinger used in the movie Tron:

[You can tell it's not a programmer's keyboard, for it's missing the control and alt keys]
[Although it's still a cool looking keyboard]

And despite it probably having a horrible feel, I still would love to have one.

Heck, I would love to have Dillinger's desk from the movie (here, have another look). The thing is, we now have the technology to do this for real.

Monday, Debtember 31, 2007

I found it amusing, and I think Wlofie can relate to this …

Praying to the Visa God is actually quite a bit more rational than current US immigration policy.

Via Hacker News, The world is not so flat, God of Visas edition

Heh.

Obligatory Picture

[The future's so bright, I gotta wear shades]

Obligatory Contact Info

Obligatory Feeds

Obligatory Links

Obligatory Miscellaneous

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.