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.

Sunday, November 01, 2009

It's “National Type Lots Of Words Month” it seems

Well, not only is is the start of National Novel Writing Month but it seems, it is also the start of National Blog Posting Month (link via Spring), which, I guess, could work together—you blog each day the number of words (or rather, the lack of words) you wrote for your novel.

But I have to wonder, will next year bring NaTwitTwitMo?

Monday, November 02, 2009

The map is not the territory

“What I cannot build, I cannot understand.”

Richard Feynman

I've ranted against control panels. I've ranted against scripting langauges. I've ranted against GPS units. I've even ranted about user groups.

I certainly come across as a curmudgeon, odd as I enjoy and generally believe in technology. But recently I've been asking myself, “Myself, why am I such a curmudgeon?”

That question is proving hard to answer.

Another question that is proving hard to answer is, “when does technology pass from being a tool to being a crutch?”

I've been trying to answer this since 6:00 pm today (and even though it's dated the 2nd, it's now 2:15 am on the 3rd and I'm still trying to answer it). I've lost count to the number of drafts I've done, and I've rejected them all as either too rambly, too incoherent or both.

Even Bunny mentioned that all the GPS horror stories I've presented so far ignore the hundreds of thousands of successful uses of the invention. For every plane crash you hear about, you don't hear about the 100,000 plane landings where nothing happened.

I have found, though that my Don Quixhotesque rants can be classified as:

  1. it renders my knowledge useless (control panels)
  2. people who don't understand the technology abuse it (dynamic languages)
  3. common sense is ignored in favor of the computer (GPS)
  4. the culture is totally alien to my way of thinking (user groups)

On second thought, it can be condensed down to:

And while I may have answered why I'm such a curmudgeon, I'm still no closer to answering the other question.

When does technology pass from being a tool to being a crutch?

Update on Tuesday, November 3rd, 2009

I got some answers to my last question

Tuesday, November 03, 2009

When does technology pass from being a tool to being a crutch?

Wow. Yesterday's post gathered quite a bit of commentary. Most of it on MyFaceSpaceBook (which is copied below for those of you who aren't using MyFaceSpaceBook) but there's also some discussion over at Flutterby™!

The MyFaceSpaceBook comments. Jeff Cuscutis wrote:

I think that is a flawed question. A crutch is a tool. It helps you do something you wouldn't be able to do otherwise.

Every tool since the first stick and rock are crutches. Before books, people memorized enormously long stories regularly. Who does that now?

The difference between a tool and a crutch is when you forget you are the master of the tool and follow it blindly.

Okay. I was using the term “crutch” in a derogatory manner since I don't have a better term for what I'm describing. Some programmers (and I'll admit to being in this class) often view using a debugger as a “crutch,” blindly single stepping through the code because they don't understand the very code they've written! (I used to upset other students in college by just looking over their code they're writing and pointing out bugs left and right). Sure, I use a debugger. But not all the time, and sometimes, a debugger isn't enough to solve the issue (race issues with multithreaded code is nasty like that).

But I do like Jeff's last line there.

Chris Monahan pretty much nails what I was trying to get at with asking that question:

I would argue that a tool is serving as a crutch if the task it enables you to do is one that you should or would, under healthier or more ideal conditions, perform as well or better without the tool.

That “should” is a very important distinction. A programmer should be able to reason about their code and at least formulate a hypothesis as to why the program crashes (just beyond the stock answer of “it's buggy”). The debugger is there to help them prove or disprove the hypothesis and quickly drill down to the actual issue, not to get around the fact they don't understand the code they've written.

Anyway, Chris' wife, Mary Monahan replied to a comment I made about IDEs:

Who finishes first with an output they can use? Generally speaking a person who doesn't need the IDE (let's go ahead and use the common name “dinosaur” :) ) can finish faster using the IDE than the text editor because they don't have to spend the time visually scanning for typos, etc. A person who can't use the text editor will be slower than the dinosaur because they are not only using the IDE for simple checks but to generate code, time to debug the generated code they don't understand, and look up examples, etc. This is not a question of whether the IDE is a tool or a crutch, it is a question of whether a person is choosing the right tool to be efficient and has the skills to do the job in the best way. I have created programs using bit switches, card input, text editors, and a wide variety of IDEs. That pretty much puts me solidly in the dinosaur category for a lot of people. But, if you are using the best tool for the job and you can get it done at the same rate or faster as another person it isn't a crutch—it's the right answer.

And Chris' answer to the same IDE comment:

The question becomes “does the IDE extend or improve your normal capability to program?” If it is something that simply makes up for a lacking that someone has—a lacking that a normal or even robust person would not have, then it is a crutch. If it is something that extends the capabilities of a person beyond what a healthy or robust person could do without the tool, it is not a crutch. Even when talking about an actual physical crutch, if the person uses it to facilitate walking while they are injured and while they use it they walk no better than when they were healthy, then it is a crutch not only by formal name, but also in the abstract. If the person uses the crutch to perform acrobatics they couldn't otherwise do, then while it physically a crutch, it is not being used as such in the abstract—but rather as a tool that extends their capabilities. The improvement could be in speed of delivery, quality of the final product—any kind of improvement.

For some reason, Chris' comment reminded me of Oscar Pistorius, who's taken crutches to Olympic heights, literally. And after that, I don't really know what to say.

My old college friend Charles Wheelus piped in with:

As our need to work with various types of information becomes increasingly complex, it becomes necessary to work with higher and higher levels of abstraction. Imagine a world where everything had to be programed in assembly language.

Clearly there is a need for the people who "don't really care how it works underneath", as well as those who do.

The revolution we are experiencing is for every one who chooses to participate, not just those who poke bits well.

What may be a “crutch” from one persons perspective is simply how someone else accomplishes their goal. I don't think it should bother you just because someone solves a problem differently than you do … even if your way is better.

Well, I don't think I'd mind a world where everything was programmed in assembly (which was my daily programming language of choice in college). But I do get his point. While I hate PHP and only use it under duress, I can appreciate that it brings a simple programming platform to people who would otherwise be unable to program a dynamic website.

I just don't want to work with the resulting code.

There is another issue though, with the people “who don't really care how it works underneath,” and Mark Grosberg said it succinctly (in email):

The future is going to be really funny as more and more people who know how everything really works get out of the field.

Sigh. Welcome to the future!

Perhaps a bit pessimistic, but yes, it is a valid concern I have (as well as Mark).

Wednesday, November 04, 2009

These are the programmers I'm scared of …

One thing at a time. Let's first write it out longhand:

def square_indexes(square_number)
  result = []
  first_row = square_number / 3
  first_column = (square_number % 3) * 3
  first_row.upto(first_row+2) do
    | row |
    first_column.upto(first_column+2) do
      | col |
      cell_number = row * 9 + col
      result.push(cell_number)
    end
  end
  result
end

That's a lot of code, and I'm afraid it won't work. And it doesn't:

1) Failure:
test_square_four(TC_MyTest) [./sudokutest.rb:31]:
<[39, 40, 41, 48, 49, 50, 57, 59, 59]> expected but was
<[12, 13, 14, 21, 22, 23, 30, 31, 32]>.

We see that it has started in row 1, not row 4 as it should have, but that it is taking the right corresponding cells after that incorrect start. So the row_number init is wrong.

Now, this might have been a good time to just throw the code away and start over, which is a pretty good trick. If I had felt the need to debug, I'd have tried to start over instead, since that method was pretty weird. But I see exactly what the bug is—I think—so I'll just fix it. If it doesn't work, I'll start over.

OK, Sudoku

This is the type of programmer I was talking about yesterday—not only is he unsure about 14 lines (and makes it out to sound like it's thousands of lines) of a dynamic programming langauge (Ruby in this case), but he's not even clear he understands the bug in the code.

Also, the “crutch” this programmer uses is “unit testing,” which to me (because the culture is totally alien to my way of thinking), translates to “let us write a ton of code to catch bugs that in a statically typed language, the compiler would catch.”

Update a few minutes later …

I don't know if that programmer really thinks that way, is just playing a “I don't know what I'm doing” type of programmer for the sake of demonstration, or it's a serious case of ``the culture is totally alien to my way of thinking'' but I'm finding his presentation of his programming methodology extremely annoying.

I choose to say ``we'll need'' here to emphasize that implementing those methods in yesterday's spike was a violation of YAGNI, the rule that says not to implement things just because you need them.

Moving On With Sudoku

I don't think YAGNI doesn't mean ``not to implement things just because you need them.'' But I could be wrong, as I think Ron Jeffires (who's writing these annoying articles) coined the term. And even if he is right, he's giving excuses for not following his own advice.

Alien cultures indeed.

And comments like:

… I have to figure out which row number a cell is in, which column, and which square. Each of those is a bunch of integer divides and modular arithmetic, which I have a good chance of getting wrong …

Maybe it means I've thought too much about this, or that I'm following my anticipation too much.

Here we go. Hold on, that was a lot of code, ten or so lines … [But he's written about a bazillion lines of code implementing test cases, but I guess those don't count. —Editor]

Moving On With Sudoku

Isn't helping my confidence with his coding skills any. Is it any wonder I consider dynamic programming afficiandos as sloppy thinkers? And the bit about getting divides and modular arithmetic wrong? That's just … wrong! You are not a programmer if you don't understand modular arithmatic alien to my way of thinking.

Okay, I think I'll stop reading this now.

Thursday, November 05, 2009

The dinosaur that I am

Wlofie and I discussed The Question for a few hours today. Wlofie's answer was something along the lines of: a tool is a crutch when it's removed from a practitioner who can not conceive of a way of continuing their job without it.

It's a nice definition, and it certainly fits my biased viewpoints on the subject, but in thinking about it longer, to most programmers, even a simple text editor is a crutch.

Imagine being given a 1982 era IBM PC with a floppy drive and a single disk that contains a bootable MS-DOS system with IO.SYS, MSDOS.SYS and COMMAND.COM (the minimum required to boot to a usable (for various values of “usable”) system at the time) and a stack of reference materials. Your goal (assuming you are a programmer) is to write a program that does something simple, like, play a game (however badly) of tic-tac-toe. No editor. No assembler. No compiler. No linker. Just COMMAND.COM and a stack of reference materials.

It's not impossible. Just difficult and insanely tedious. First order of business would be to write a program (by typing binary data directly from the keyboard to a .COM file) that accepts octal codes [1] and outputs the binary values (I don't even need to deal with files as file redirection can help here).

From there, I can hand write a simple Forth environment and using my “octal to binary conversion” program, enter it in and debug it. Once that's working, I can bootstrap myself further.

Would I ever seriously do such a thing? Well … I doubt it, unless, perhaps, if I ever felt the need for a programmer's version of survival camp (dropped in the middle of the Rockies with nothing more than the clothes on my back and a rusty pocket knife—see you a month!) but more importantly, I could do it.

And it's entirely conceivable that I'm overintellectualizing this into the ground (or I'm upset that kids programmers today just have no concept of what it's like to walk eight miles uphill in 10′ snow drifts to school program in only 16K without benefit of a full-screen editor).

  1. Why octal and not hexadecimal? Because the instruction set just makes more sense when viewed octally (that is, in groupings of eight) than hexadecimally (in groupings of sixteen), which would make hand-assembly of instructions easier to do. [Back]

Friday, November 06, 2009

I never really thought about website being available via IPv6

So I'm trying to view a website (via Bunny via email) and it's not coming up at all under the Mac. It's just a blank page.

It comes up under Linux, but since I don't have speakers hooked up to that computer, watching the video (“Deer for breakfast, anyone?” in Texas—it's not what you think) would be “suboptimal” as they say.

I then try my standard diagnostic technique in such cases. From the command line, I telnet to the offending website and see what I get:

[spc]marvin:~>telnet www.snotr.com 80
Trying 2a00:d00:ff:131:94:228:131:131…
^C
[spc]marvin:~>

Oh! That's interesting!

marvin (the Mac) is trying to use IPv6 to connect to the site.

Ah! That's right! I was playing around with IPv6 several days ago on the local network here at Chez Boca and I configured Firefox to try connecting via IPv6 if possible. Turning that option off brought the site up immediately.

But! That also explains the difficulties I've been seeing in one of the sites I check daily: The Devil's Panties (think of it as a semi-fictionalized illustrated blog that presents itself as a webcomic). It was taking an inordinate amount of time to come up for the past several days and I kept thinking it was due to a network issue at Keenspot.

Nope—it was my browser attempting to connect to the IPv6 address first.

I think it's cool that there are sites responding to IPv6. I wonder how many more of them exist?


Technologically enhanced synaesthesia

“It was slightly strange at first,” Wächter says, “though on the bike, it was great.” He started to become more aware of the peregrinations he had to make while trying to reach a destination. “I finally understood just how much roads actually wind,” he says. He learned to deal with the stares he got in the library, his belt humming like a distant chain saw. Deep into the experiment, Wächter says, “I suddenly realized that my perception had shifted. I had some kind of internal map of the city in my head. I could always find my way home. Eventually, I felt I couldn't get lost, even in a completely new place.”

Then he brought out his SOES, a mesh of hard-shell plastic, elastic, and Velcro that fit over my arms and torso, strung with vibrating elements called tactile stimulators, or tactors. “The legs aren't working,” Schnell said, “but they never helped much anyway.”

Flight became intuitive. When the plane tilted to the right, my right wrist started to vibrate—then the elbow, and then the shoulder as the bank sharpened. It was like my arm was getting deeper and deeper into something. To level off, I just moved the joystick until the buzzing stopped. I closed my eyes so I could ignore the screen.

Finally, Schnell set the simulator to put the plane into a dive. Even with my eyes open, he said, the screen wouldn't help me because the visual cues were poor. But with the vest, I never lost track of the plane's orientation. I almost stopped noticing the buzzing on my arms and chest; I simply knew where I was, how I was moving. I pulled the plane out.

Via Jason Kottke, Wired 15.04: Mixed Feelings

The topic just keeps coming up.

It's an interesting article about extending our senses into realms we aren't accustomed to, such as an innate ability to tell North, or feeling our way through righting an airplane. Forget about making our lives easier, the tools mentioned in the article give us abilities we don't even have! Tools? Crutches? Very hard to say.

And The Question gets deeper yet …


The world's best bike shed

For Wlofie, an automated bicycle garage. It's a pretty cool concept, although it looks to be rather expensive to install.

Saturday, November 07, 2009

Aaaaaaaaaaaaaaaaaah!

Last Sunday I sent an important email to fred@example.com (obviously not the real address). I didn't hear anything back and on Wednesday, sent a follow-up message. I still didn't hear anything back.

I then checked my logs, and found the following (formatted for easy viewing):

mail.log:Nov 1 18:31:09 brevard postfix/smtp[32387]: D9024170C57C:
	to=<fred@example.com>, 
	relay=aspmx.l.google.com[209.85.221.90],
	delay=1, 
	status=sent

	…

mail.log:Nov 4 20:24:19 brevard postfix/smtp[13490]: 6FE3E1AA92E9:
	to=<fred@example.com>, 
	relay=aspmx.l.google.com[209.85.221.67],
	delay=1, 
	status=sent

Oh no … it's Gmail.

We've had issues at The Company with Gmail. Specifically, Gmail seems intent upon classifying all email sent from The Company as spam. And seeing how my website is being hosted by The Company, my guess is Gmail is classifying my emails as spam as well.

I sent a test message to my Gmail account and sure enough, it ended up in the spam folder, with no way of telling why it was sent there, or a way to tell Gmail that I'm not a spammer.

Head, meet desk.

Ow.

Sunday, November 08, 2009

Yes, I'm still going on about this …

General Weider said, “I find this atmosphere of mystery childish.”

“You won't in a moment,” said Shuman. “This is not something we can leak to the firstcomer. Aub!” There was something imperative about his manner of biting off that one-syllable name, but then he was a great Programmer speaking to a mere technician. “Aub! How much is nine times seven?”

Aub hesitated a moment. His pale eyes glimmered with a feeble anxiety.

“Sixty-three,” he said.

Congressman Brant lifted his eyebrows. “Is that right?”

“Check it for yourself, Congressman.”

The congressman took out his pocket computer, nudged the milled edges twice, looked at its face as it lay there in the palm of his hand, and put it back. He said, “Is this the gift you brought us here to demonstrate. An illusionist?”

“More than that, sir. Aub has memorized a few operations and with them he computes on paper.”

The Feeling Of Power

This story has been in the back of my mind the past few days as I struggle with The Question. Are we headed towards a time when we blindly accept what the computer tells us?

The story itself isn't that long and is worth reading. I can wait. I have this slide ruler I can play with while you read …

Monday, November 09, 2009

“But it's about the dancing!”

For months now Bunny and I have been going back and forth on things like Microsoft songsmith, Auto-Tune which has been, basically, an argument about tools vs. crutches. [1] That topic surfaced once more today when Bunny mentioned that some Aussies are rather upset at Britney for lip syncing (and here I thought that was common knowledge—guess not down under).

Here is one Australian's take on it:

That being so, it makes sense that when it comes to touring she should mime. After all, it allows the projection of voice perfection, or at least as perfect as it sounds on CD. What sort of a show would it be if she were heard to miss a note or sing offkey. If you had spent a couple of hundred dollars or more, you'd probably walk out and/or demand your money back.

Still, if this is a comeback tour (with the somewhat rapidly turning ironic title of Circus) then surely wouldn't a singer want to reacquaint her voice to her fans? Then again maybe her singing voice ain't what it used to be.

The truth, for the punters, is you'd never know anyway unless you heard her singing in the shower. This is the age of musical perfection where every singer can have perfect pitch, where any imperfection can be erased, where the human can be deleted from the process of recording. It's in the technology. In the digital age, sound can be manipulated. Voices can be modulated, on stage and in the studio. You would never know unless you had something with which to compare it.

Miming, however, is not new. Bands and solo singers were doing it on television pop shows decades ago. Indeed, wasn't it strange that those guitars sounded just like they did on the record, yet they weren't plugged in, and wait a minute where are the amps?

Concerts, however, are another thing. There's a transaction involved between fan and artist. Which leads to one of the most notorious cases in popular music of things not being as they seem. Milli Vanilli won a Grammy Award. Yet the duo of Fabrice Morvan and Rob Pilatus, whom everyone thought were Milli Vanilli were, in fact, just the pretty faces, the image music entrepreneur Frank Farian wanted to project to the public. The voices were actually those of studio singers. The whole thing came crashing down when Morvan and Pilatus were found to be lipsynching at one of their concerts.

Britney Spears | lip synching | Warwick McFadyen

Hmm … tool … crutch … this is appearing to be the Month of the Tool …

  1. I view such things as tools, Bunny views them as crutches, but she's had musical training and I haven't. I view such things as IDEs and PHP as crutches, whereas I think Bunny would view them as tools, but I have a background in programming. I'll have to ponder on this some more. [Back]

Perhaps an 80M script is a bit excessive …

Every so often I'll do a bit of work on an unimportant project, just to keep myself sane from working in PHP and Drupal.

About a month ago I decided to save the data from email indexer program as a Lua program, something like:

emails = 
{
  filelist = 
  {
    { 
      file = "/home/spc/Mail/sent" ,
      size = 902273,
      time = "Tue, 10 Nov 2009 09:35:10 GMT",
    },
    {
      file = "/home/spc/LINUS/Archive.mail/20060607/cctalk",
      size = 230140,
      time = "Tue, 02 May 2006 18:22:28 GMT",
    },
    -- and so on ... 
  },

  mbox = 
  {
    {
      info = { mboxfile = 1, oh={45, 322}, ob={368, 15}},
      ['Message-ID'] = "<20081021051331.GA30804@lucy.localdomain>",
      ['From'] = { "Sean Conner <sean@conman.org>",},
      ['To'] = { "sean@conman.org",},
      ['Subject'] = "This is a test",
      ['Date'] = "Tue, 21 Oct 2008 01:13:31 -0400",
      ['MIME-Version'] = "1.0",
      ['Content-Type'] = 
      { 
        "text/plain",
        "charset=us-ascii",
      },
      mimeheaders = 
      {
        ['Content-Disposition'] = "inline",
      },
      ['Lines'] =  1,
      extraheaders =  
      {
        ['User-Agent'] = "Mutt/1.4.1i",
        ['Status'] = "RO",
      },
    },
    -- and so on ... 
  }
}

That way, I could load it into the Lua interpreter and work with the data in Lua, instead of writing a bunch of C code. I debugged the output to make sure it was valid Lua and everything was fine.

Until I threw 80,919 messages from 2,360 email files I had lying around (going back to 1991). Then all I got from Lua was:

lua: constant table overflow

Hmmm … okay, maybe throwing a 80MB into the Lua interpreter wasn't such a good idea.

But then tonight I decided to give it one more try. The source code to Lua didn't reveal any immediate settings to tweak, so I did a bit of searching. And yes, I'm not the only one with that problem. Reading further, I learned that while there isn't a limit to the size a Lua table can get, there is a limit to the number of constants in a single Lua function.

But the code isn't in a Lua function.

Or is it?

It is. When you load Lua code from an external source, it gets compiled into an anonymous function that needs to be run. So, the solution is to break the initialization into several functions, and from some experimenting, I found that things would work (with this particular data set) if I only initialized 16,384 items per function.

But there's a difference between “it worked” and “this is a usable solution.”

Generating the Lua code? 30 seconds.

Loading the Lua code into the interpreter? Six minutes and an overheated CPU

Interesting …

Update Tuesday, November 10th, 2009

I managed to hit the worst case run-time with the code. Change the order of things, and it runs in about 15 seconds. Go figure …

Update Wednesday, February 3rd, 2010

It was a bug in Lua that has since been fixed.

Tuesday, November 10, 2009

Perhaps an 80M script isn't that excessive …

Okay, I played around a bit with the Lua code from last night. Here, again, is the six minute run:

[spc]lucy:/tmp/lua>time lua -i show.lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> dofile("default.lua")
> os.exit()

real    5m49.052s
user    5m43.279s
sys     0m0.577s
[spc]lucy:/tmp/lua>

show.lua is some code to display a given table, and it's only being used here to see if the code actually built the huge table up correctly.

Okay, six minutes. I'm not sure what prompted me to do the following, but I did it anyway:

[spc]lucy:/tmp/lua>time lua -i default.lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> dofile("show.lua")
> os.exit()

real    0m12.354s
user    0m6.293s
sys     0m0.413s
[spc]lucy:/tmp/lua>

Oooohkaaaaay … what happend here? To make matters more interesting, it's repeatable. I load show.lua (at 1,101 bytes) first, and it takes six minutes. Load default.lua (the 80MB file) and it takes 12 seconds. And if I do it this way:

[spc]lucy:/tmp/lua>time lua
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> dofile("show.lua")
> dofile("default.lua")
> os.exit()

real    0m16.130s
user    0m6.311s
sys     0m0.365s
[spc]lucy:/tmp/lua>

and it takes 16 seconds (only because it took me an additional four seconds to type the extra line of code).

Very weird.

Update Wednesday, February 3rd, 2010

It was a bug in Lua that has since been fixed.

Wednesday, November 11, 2009

“You are in a fractal of twisty little chambers …

Years ago in college, generating fractals with fractint was a popular pastime among my group of friends. But it was mostly (if not entirely) two-dimentional fractals being generated.

But this three-dimentional Mandelbrot set?

Wow!

Thursday, November 12, 2009

You do realize my Twitter feed is entirely automated, right?

BOSTON—Things looked bleak for the Angels when they trailed by two runs in the ninth inning, but Los Angeles recovered thanks to a key single from Vladimir Guerrero to pull out a 7-6 victory over the Boston Red Sox at Fenway Park on Sunday.

Guerrero drove in two Angels runners. He went 2-4 at the plate.

“When it comes down to honoring Nick Adenhart, and what happened in April in Anaheim, yes, it probably was the biggest hit (of my career),” Guerrero said. “Because I'm dedicating that to a former teammate, a guy that passed away.”

Guerrero has been good at the plate all season, especially in day games. During day games Guerrero has a .794 OPS. He has hit five home runs and driven in 13 runners in 26 games in day games.

After Chone Figgins walked, Bobby Abreu doubled and Torii Hunter was intentionally walked, the Angels were leading by one when Guerrero came to the plate against Jonathan Papelbon with two outs and the bases loaded in the ninth inning. He singled scoring Abreu from second and Figgins from third, which gave Angels the lead for good.

The Angels clinched the AL Division Series 3-0.

Via Hacker News, Is Software Set to Replace Sports Journalists? | Singularity Hub

The above article is about the October 11th playoff game between the Angels and the Red Sox, and I quote it here not because I'm a fan of baseball (I'm not), but because Bunny is, and because it relates to the current topic of the month: tool, or crutch? In this case, the story above was written entirely by software.

I guess that's one way to cut costs in a dying industry.

Monday, November 16, 2009

Once more into the breech

“The unexamined life is not worth living.”

Socrates

“Welcome to yet another installment of ‘Technological Navel Gazing,’ with your host, Sean.”

What follows is my answer to Corsair's latest post where he takes me to task about the current theme running through my blog here the past two weeks, and correct a few misconceptions he has about what I'm trying to get across here.

The part of this debate that rubs me entirely the wrong way is this: for a person who works with technology, who makes his living manipulating it supporting those who also use it to make their living, Conman is decidedly anti-technology and has, over the years, has developed a singular distrust of it. Perhaps because he is so gifted at manipulating it he is keenly aware how easily it can be manipulated and perverted. I don't know.

The Corsair Journal

I'm not anti-technology. Heck, roughing it for me is a hotel room with luke-warm running water and no Wi-Fi. I'm grateful for technology and all the wonders it brings to us. Without the bathysphere we'd be unable to explore ocean deeps, or without spacesuits we'd be unable to survive on other planets.

My problem with technology isn't the technology itself (heck, even Microsoft has done us some good, if only to make PCs cheap enough to make them ubiquitous), but with the blind, non-thinking use of such. Garbage in, garbage out and all that.

And if you asked Conman, “What is your car: tool or crutch?” He would likely answer “crutch.” But when asked if he would ever give up his car, throw away the keys, and never drive it again, I'm sure the answer would be a firm and resounding “No.”

The Corsair Journal

The first answer, yes, I could see myself saying it's a “crutch.” The second answer isn't a firm and resounding “no” though. If I lived in a place like EPCOT, why even have a car? (Although I have doubts about the actual livability of such a planned community—Le Corbusier and his Ville Contemporaine come to mind, but that's beyond the scope of this discussion.) And I got along quite fine sans car the few times I've been in Boston (heck, the few times I was in a car I wished I wasn't, but that may have been the fault of the driver).

Without a car, Conman cannot earn his living without becoming a burden to others; his job requires that he be certain places at certain times and in reasonable shape to work. Walking everywhere, therefore, is no longer sufficient to live the lifestyle to which he has obligated himself, and therefore, I would argue that his Lumina is just as indispensable a tool to Conman as the hammer is to a carpenter.

The Corsair Journal

Actually, Corsair, I work from home. It's actually not uncommon for me to go an entire week without driving (and when I do have to drive, it's to The Weekly Meeting™ of The Company™ up in Wellington for a lunch meeting (more or less) across the street from your house [1]). I'm lucky in that regard. I'm also living within walking distance of the Tri-Rail.

There's also Wlofie, who not only lives here in Lower Sheol, but does so without a car. Yes, it's not easy for him, but he's doing it.

But “The Feeling of Power” does highlight one of Conman's greatest fears: that we as a society have grown so dependent upon the technology we have swaddled ourselves in that we would all wither and die if it were turned off this afternoon, never to be turned on again.

And I sincerely believe that this fear, more than anything else, is at the very heart of the “Tool vs. Crutch” debate. It can be the only explanation why Conman would journal about it for more entries than I've seen him journal about anything else. [Actually, control panels would be the topic that I tend to rant about the most in this journal, but since it's been over a longer period of time, it might be hard to see. —Sean]

Too late, Conman, we're already very heavily dependent upon our technology for a comfortable existence.

It's funny; I'm reminded of the terror sparked by the Y2K bug that the whole world would be thrown into chaos and anarchy on 1/1/2000. And let's say all things technological really did go to Hell in a hand-basket on 1/1/2000. Would it have been an uncomfortable shifting of humanity's priorities and comfort levels? Yes, definitely. Would we have all survived? I submit to you that despite being uncomfortable for a while, the vast majority of us would have.

The Corsair Journal

I'm not sure it's one of my greatest fears (hights and earthquakes are truely my greatest fears, irrational or not), but yes, it is a concern. But yes, I am concerned we might be a bit too reliant on our technological base. Back in 2005, parts of Lake Worth were without power for nine days (oh thank you Lake Worthless Utilties) but that was the exception—most people had power back within a day or so. Even if Florida as a whole was without power for nine days, it wouldn't be so bad. Well, Georgia and Alabama might not like the constant stream of refugees looking for food, fuel and air conditioning, but the situation wouldn't disolve into total anarchy, as long as parts aren't in anarchy.

But North America? (If you think this wouldn't affect Canada and Mexico, think again. There are three major grids between the US and Canada and Mexico has its own problems.) Power goes out. And because the power goes out, fuel reserves are practically useless because of electric pumps used to get the fuel out to where it's needed, so the fuel runs out in a few days or weeks. Once the fuel is gone, so is the food. And don't forget that at least here in the US, only 2% of the population are farmers. Do you know how to get food outside a restaurant or supermarket? Heck, do you know any farmers? I don't. And while I know how to make butter [2], I have no idea how heavy cream is made, much less the location of any nearby cows, assuming I knew how to make heavy cream from raw cow juice.

I think you're a bit more optimistic about survival in a total collapse of our civilization (and by that, I mean, the entire power infrastructure collapses).

Now, do I think we're headed towards such a apocalyptic collapse? No.

But I do worry about the ever growing population of people who take technology totally for granted and don't even bother to think anymore (and no, I didn't search that out to prove a point—it just magically appeared in email), because the computer does the thinking for them.

  1. Wellington is 30 miles away from Chez Boca. So why do I drive so far to attend a lunch meeting once a week? Because Wellington is the central point for everyone that works at The Company™—working from home has its benefits and drawbacks. [Back]
  2. Two cups heavy cream and a pinch of salt. In a food processor it's less than a minute away from buttery goodness; otherwise expect your arm to fall off as you try to whisk or churn your way to buttery goodness. [Back]

Tuesday, November 17, 2009

Technology on the edge of uselessness

Bunny is having an outpatient procedure at the Cleveland Clinic today, so here I am, sitting in the waiting room attempting to work.

And not having a very successful time of it.

They obviously have wireless, else I wouldn't be posting this, but the wireless appears to only let DNS and HTTP and nothing else. I can't even ssh out to check email.

There's also a “not quite so invisible” invisible web proxy. I wasn't surprised at the “please ignore our Terms of Service and just click here to continue” page on my first web access, but I didn't quite expect this:

This Page Cannot Be Displayed

Access to this site has been restricted

The Internet site you are attempting to visit has been blocked to all Cleveland Clinic employees

Cleveland Clinic Policy #811 permits access to the Internet only “To facilitate access to business related information and in support of hospital business.”

If you are a CCHS employee and you feel that you have received this message in error,you may email webfilteradmin@ccf.org, with the URL ( http://www.dadhacker.com/blog/?p=1161 ) of the website you are attempting to reach.

And the site in question? Dad Hacker? It's a programmer's blog, not a site about hacking. Oddly enough, I can reach Hacker News.

Go figure.

It is perhaps worse that it's almost useful.

I told Smirk last night that I would have my phone on my at the very least, but I just checked and there's no service at all in the waiting room. I have to leave the hospital to get a signal, and even then, all I've been able to get is a busy signal no matter what number I use to call Smirk (cell, home, business line—no go).

Sigh.


Technology on the edge of uselessness, Part II

Heh.

Forget Dad Hacker, I can't even reach The Cleveland Clinic website from within the Cleveland Clinic!

This Page Cannot Be Displayed

The system cannot communicate with the external server ( my.clevelandclinic.org ). The Internet server may be busy, may be permanently down, or may be unreachable because of network problems.

Please check the spelling of the Internet address entered. If it is correct, try this request later.

If you have questions, or feel this is an error, please contact Web Filter Admin ( webfilteradmin@ccf.org ) and provide the codes shown below.

Oh, and I can't get to the web site referenced.

Fun times.

Wednesday, November 18, 2009

Again going into the breech

I may have been a bit unfair towards the network policies of the Cleveland Clinicyesterday but I was surprised by their apparent draconian network policies (does that make me an optimist because I tend to believe corporate networks are open, or hopelessly naïve about corporate policies towards their own employees?).

Of course Cleveland Clinic can run their network as they see fit. And I can see why they would be hesitant to run a looser, parallel network just for visitors. It's just that as the Network Engineer for The Company (Dan the Network Engineer technically works for another company, one where we share some infrastructure and he currently handles the connection to our Internet peers, which is why I defer to him on occasion) I run an open network on the “assume innocent until proven guilty” principle (or, blacklists) rather than the “assumed guilty until proven innocent” principle (or, whitelists). And it always pains me to see the latter principle in production (and yes, I understand the mindset behind it; I just don't like it personally).

Looking back on it, I'm rather amused that I couldn't even get to the Cleveland Clinic website from their own network (heh). And now that I know what I'm up against (Bunny has a follow-up consultation later today and on Friday), I can plan accordingly.

Or at least know what I can expect [1].

  1. I've set sshd listening in on port 443 on my home box, and checked—yes, The Monopolistic Phone Company isn't blocking inbound port 443 (yea!). As that is the HTTPS port, it should be forwarded, but not through the invisible proxy. Muahahahahahaha! [Back]

Update from the Cleveland Clinic

It works! Muahahahahaha! Port 443 goes straight through the firewall, and I'm able to ssh straight into my home computer. Woot!

Saturday, November 21, 2009

Woo hoo, Cisco!

We finally installed a new Cisco router to replace our last Riverstone router in our network. I pre-configured the router and the replacement went fairly smoothly.

In, out, nobody got hurt. Just how I like it.

Later on I go to log into the router (to backup the configuration):

[spc]lucy:~>ssh core02.rt.bct.XXXXXXXXXXX
The authenticity of host 'core02.rt.bct.XXXXXXXXXXX (XXXXXXXXXXXXXX)' can't
be established.
RSA key fingerprint is f0:3f:06:c8:ee:7d:40:55:38:57:a4:5c:bd:d6:81:a2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'core02.rt.bct.XXXXXXXXXXX,XXXXXXXXXXXXXX' (RSA)
to the list of known hosts.
ssh_rsa_verify: RSA modulus too small: 512 minimum 768 bits
[spc]lucy:~>

What the?

Turns out that ssh 2 requires a minimum key length of 768 bits, but Cisco defaults to key lengths of 512 bits.

Way to go, Cisco! Woot!

To get in, I just logged into an adjacent router, then used that router's version of ssh (which works just fine with 512 bit keys, breaking the ssh 2 standard), which allowed me to clear the existing key (crypto key zeroize rsa) so I could regenerate a larger key.

Tuesday, November 24, 2009

Our Modern World

Let me get this out right up front—this is a rant. Don't expect any rational thought here.

Anyway … at The Company™ we have a particular network issue. It's critical, but it isn't “customer screaming on the phone to get it back up yesterday” critical (although it's getting close to that).

We've ruled out The Monopolistic Phone Company as the source of the problem. That particular part of the network circuit is fine. In fact, we've isolated the problem to network connection between two cabinets in a data center (not The Data Center at Boca Raton—this one is in another city).

The problem I'm ranting about is that this particular run of cable between two cabinets involves seven companies (including us) that need to be co-ordinated to fix this particular issue.

Aaaaarg!

Smirk started the ball rolling on this yeterday morning. Twelve hours later, he got a bit further, then a bit further last night. He then told me to expect a call sometime late.

It came at 6:30 am.

Grrrrrrrrrrr.

From my vantage point, the problem is that we don't have a straightforward network connection, since it comes through one cabinet somewhere in the data center to another cabinet somewhere else in the data center, which apparently isn't a common occurance in this particular data center. Even rarer, our connection uses VLANs, which moves us from the “rare” column to the “what the heck is that?” column (I suspect that the intermediary switches the data center is using to hook the two cabinets together aren't configured for VLAN traffic, but I won't know until we get everybody together onto the Conference Call From Hell sometime in the next few hours or so … ).

A part of me wants to blame outsourcing, but seeing how we're one of the parties being outsourced to (providing the Internet connections and some specialized routing), I really shouldn't be complaining all that much. But the sheer number of parties involved is expressly due to a whole bunch of outsourcing by everybody involved. Now, I understand the arguments for outsourcing—concentrate on your core competency and hire other companies to handle the other stuff that's needed but are outside the scope of your company, but seven companies? For what appears to be a misconfigured switch?


Our Modern World is now working

I fell asleep waiting for The Conference Call From Hell.

It never happened.

But, about 10 hours later, and the networking issue is resolved. It may be an issue with The Monopolistic Phone Company (eight parties) and another carrier (nine parties! Nine total parties! Mua ha ha ha ha ha!).

It's working, and that's all I care for.

Thursday, November 26, 2009

Notes from a post-Thanksgiving Dinner

Plates are everywhere. Piles of food still clutter the kitchen. Bunny, her mom and I are slowly waddling from the dining room to the family room to veg out for the next few hours.

“I hope ‘Wheel of Fortune’ is still on,” said Bunny. Her mom loves the show.

“Why wouldn't it be?” I asked.

“There could be a football game on,” she said.

“Oh yes, the Detoit Lions and some other team always play on Thanksgiving, don't they?”

“Yes.”

“Oh, and there's also “A Charlie Brown Thanksgiving” they could be showing.

Bunny had the TV on and was flipping through the online guide. “Oh good,” she said. “Wheel of Fortune is on at 7:00 pm.”

“And I see ‘Jeopardy’ is on next.”

“And oh—look! It's ‘A Charlie Brown Thanksgiving!’”

“Wait a second,” I said. “Scroll back a bit … Spanish? It's in Spanish?”

“No, there's an alternative audio track in Spanish.”

“Ah. So what's ‘Muah muah muah muah muah muah muah’ in Spanish?”

Sunday, November 29, 2009

How to run Firefix 3.5 under CentOS 4.4

I finally received a Google Wave Invite (via Smirk) and decided to give it a try. I go to the link, sign in with my Google email address, and get the following:

[Sorry, your browser is not supported, but hey, do you feel lucky?]

I'm using Firefox 2.0.0.20. Yes, it's an older version, but hey, it works—why fix it?

So I download the latest Firefox (3.5) and try the website again:

[spc]lucy:~/bin/firefox>./firefox
./firefox-bin: error while loading shared libraries: 
libpangocairo-1.0.so.0: cannot open shared object file: 
No such file or directory
[spc]lucy:~/bin/firefox>

Ah yes, that's what happend the last time I tried running Firefox 3.

I'm using CentOS 4.4 as my desktop, and yes, I'm using an older distribution of a distribution geared towards servers as a desktop. As for the older distribution part, hey, it works, and I dislike upgrading if I don't have to (I used RedHat 5.2 (not to be confused for their latest 5.2 offering) for about ten years prior to my upgrade to CentOS 4.4). As for the server bit, well … I do a lot of server development, and we run CentOS at The Office™ so it makes my life easier.

And I'm used to RedHat/CentOS.

So anyway, back to the current issue—Firefox 3.5.

The default repositories for CentOS 4.4 don't carry libpangocairo and after some searching, I found that installing frysk (ah, so that's what frysk does) I get libpangocairo as part of the package, under /usr/lib/frysk. So, all I need to do is tell Firefox 3.5 where to load that library and I'm good to go.

[spc]lucy:~/bin/firefox>LD_LIBRARY_PATH=/usr/lib/frysk/ ./firefox
./firefox-bin: error while loading shared libraries: 
libdbus-glib-1.so.2: cannot open shared object file: 
No such file or directory
[spc]lucy:~/bin/firefox>

Okay … hmm … I do have a libdbus-glib-1.so.0.0.0—what happens if I symbolically link libdbus-glib-1.so.2 to it?

[spc]lucy:~/bin/firefox>LD_LIBRARY_PATH=/usr/lib/frysk/ ./firefox
./firefox-bin: error while loading shared libraries: 
libdbus-1.so.3: cannot open shared object file: 
No such file or directory
[spc]lucy:~/bin/firefox>

Okay, let's symbolically link libdbus-1.so.3 to libdbus-1.so.0.0.0 and see what happens—woot! Success! I'm running Firefox 3.5!

And now I can try out that Google Wave Thang everybody is so hyped about.

Obligatory Picture

[Don't hate me for my sock monkey headphones.]

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: http://boston.conman.org/, then add the date you are interested in, say 2000/08/01, so that would make the final URL:

http://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-2014 by Sean Conner. All Rights Reserved.

Listed on BlogShares