Monday, November 26, 2007

DC gets no respect

London gets written up in GQ as being the coolest (and most expensive) city on the planet.

Paris has wine, women and a cool underworld scene.

What do we get for DC? A story about bagels with a goatse picture.


I know a lot of people mentally equate Washington DC with politics and nothing more, but what would it take for DC to get some cool buzz?

Sunday, November 25, 2007

I hate Javascript

You'd think that a guy who used to write some seriously bitching C programs would have no problems working with Javascript, right? For the life of me, though, I just cannot seem to get a strong handle on it. At first, I thought it was the whole divergent "Document Object Models" in Netscape versus IE. You know, the object you needed to "use" was located under document.window.form.thisandthat.value on one platform, and on the other platform it had a completely diffferent path.

Then I learned about the GetElementByID method, and things got better.

Two nights ago, though, when I was trying to come up with a program that would generate a range of valid candidates for rows or columns in Sudoku, I couldn't manage it. The idea was simple enough-- start with an integer set to 123456789, copy/convert it to a string, run a series of tests/checks on it, if it passes then print it in the list and if not then get rid of it, increment the original integer variable and repeat until you reach 987654321.

I couldn't get Javascript to do the whole integer/string conversion bit with the toString() function. It turns out that toString is a method of an object, not just a stand alone function. So you need to do something like this:

var x = 0;
var xString = toString(x); // WRONG!
var xString = x.toString(); // correct!


So Javascript is kind of objected oriented, but not really. It's more like a language that isn't object oriented and encourages plain old procedural programming style, but if you want to do anything really useful with it, you'll need to learn about and use the objects that are included with it.

I think I understand why people get frustrated when they try to learn English. (sigh)

Saturday, November 24, 2007

DC Examiner Classic Sudoku


Last weekend, I spent waaaay too much time on the DC Examiner's Classic Sudoku puzzle (6 star difficulty). But that was a week ago, and I've been doing a lot of puzzles. I can't be sure, but I think the programming project might also be causing me to have some improvement as well.

I blew through the 5 star Sudoku Pacific rather easily. Then, I turned my attention to the Sudoku Classic puzzle. At about 30 minutes in, I was pretty sure it was another diabolical puzzle. I inked in the numbers I was certain about, and switched to a pencil. I had to choose between a 6 and an 8 at Row 4, Column 5-- wound up choosing the 6 and discovered about 6 minutes later that path resulted in a conflict. At that point, I had to erase everything from the past six minutes worth of work. That was disheartening. I chose the "8 path" at that point, and was rolling along until an hour and 18 minutes had passed-- and that's when I hit a brick wall.

I've never heard of such a thing as a "double diabolical" puzzle, but I found myself once again in the position of being unable to eliminate any of the remaining possibilities on the grid and having to pick one of two pairs. I suppose it is possible that I overlooked something, but in every row and column the number of empty squares and the number of possible values were equal. At this point, I was so mentally exhausted, I stopped for lunch and took a break to watch an episode of "My Name Is Earl" on the DVR.

Then, I came back and took a new stab at the puzzle. Once again, I couldn't find any way to break the chain of possible values down further-- so I inked in the numbers I'd picked once again (no turning back now, right!?) and choose a path to explore. Fortunately, it turned out to be the correct one. Total time spent on the puzzle: 1 hour and 48 minutes.

Now, I need to get some aspirin and lie down. ;)

Friday, November 23, 2007

Sudoku Dictionary

Since I wasn't making headway on the rest of my "Ultimate Sudoku Solver" program, I decided to pursue the idea of creating a Sudoku dictionary that I had mentioned previously. Solving a Sudoku puzzle can be, in a lot of ways, similar to cracking a password-- so why not create a dictionary of all the possible number combinations that can be in a row or column, and then use something like regular expressions to quickly narrow the range of possibilities a bit.

So, I decided to create my Sudoku dictionary. Manually. It wasn't actually as bad as it sounds. It took about three hours, but there were patterns that developed which allowed me to make good use of Find & Replace and Copy & Paste. [It would have taken even less time if I were actually a TextWrangler power user, instead of a tyro.] With each milestone I reached, the progress jumped dramatically. 24 replacements made . . . 720 replacements made. 350KB became 800 KB. By the time I was done, I had a 3.4 MB plain text file that contains all the possible legal values (note: 362880, to be precise) for one row or column in a Sudoku puzzle.

Now, erm . . . where can I post it? LMAO.

My first thought was Google Docs, but it's a bit too large for that as a text file-- or even as a spreadsheet. I'd like to share it with others, much like I've done with the solution checker, but unless I divide it into segments I don't have anywhere I can post it reliably.

Sudoku Solver Progress, cntd.

My plans for "Black Friday" fell through, so I decided to spend some time optimizing and tweaking my Javascript code for my Sudoku solution testing piece. It's considerably smaller, thanks to a pair of for loops. It's also leaner and uses less processing because it doesn't bother to check the columns if it finds a problem in the rows.


// NAME: sudoku.js
// AUTHOR: Jonah Chanticleer
// VERSION: 2007.11.23
// LICENSE: Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License

function checkRows(S) {

var sumOfRow = 0;
var x = 0;

for (x=0; x<9; x++) {
sumOfRow = S[x][0] + S[x][1] + S[x][2] + S[x][3]
+ S[x][4] + S[x][5] + S[x][6] + S[x][7] + S[x][8];
if (sumOfRow != 45) return false;
}

return true;
}

function checkCols(S) {

var sumOfCol = 0;
var x = 0;

for (x=0; x<9; x++)
{
sumOfCol = S[0][x] + S[1][x] + S[2][x] + S[3][x]
+ S[4][x] + S[5][x] + S[6][x] + S[7][x] + S[8][x];
if (sumOfCol != 45) return false;
}

return true;
}

function testSolution(S) {

var valid = false;

valid = checkRows(S);
if (valid == true) valid = checkCols(S);

return valid;
}

Thursday, November 22, 2007

Sudoku Solution Candidate Testing code

As I mentioned in a previous entry, I've created a prototype in Javascript that tests a solution candidate to see whether it is valid or not. It's just the first piece in my "Ultimate Sudoku Solver" programming project-- more code will be necessary, but this is an important piece.

Usage is pretty straightforward, I think. Add this funtion to your web page, then create a two dimensional array (9x9, of course), populate the cells with valid numbers, and pass the array to my function, like so:

testSolution(puzzle);

The function adds up the sums of the nine columns and nine rows. Each result should equal 45. If so, the function returns true. If not, the function returns false. Yes, there is definitely room for improvement-- e.g. make it faster, or return more info about which row or column is "broken"-- but considering it was a quick coding job, I don't think it's too bad.

Since I've wanted to learn more about Creative Commons Licensing, I decided to release this code (see below) under that licensing paradigm.

<!-- NAME: sudoku.js -->
<!-- AUTHOR: Jonah Chanticleer -->
<-- VERSION: 2007.11.22 -->
<!-- LICENSE: Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License -->



function testSolution(S) {
var row1 = 0;
var row2 = 0;
var row3 = 0;
var row4 = 0;
var row5 = 0;
var row6 = 0;
var row7 = 0;
var row8 = 0;
var row9 = 0;
var col1 = 0;
var col2 = 0;
var col3 = 0;
var col4 = 0;
var col5 = 0;
var col6 = 0;
var col7 = 0;
var col8 = 0;
var col9 = 0;



var row1 = S[0][0] + S[0][1] + S[0][2] + S[0][3] + S[0][4] + S[0][5] + S[0][6] + S[0][7] + S[0][8];

if (row1 == 45) { var row2 = S[1][0] + S[1][1] + S[1][2] + S[1][3] +
S[1][4] + S[1][5] + S[1][6] + S[1][7] + S[1][8];
}

if (row2 == 45) { var row3 = S[2][0] + S[2][1] + S[2][2] + S[2][3] +
S[2][4] + S[2][5] + S[2][6] + S[2][7] + S[2][8];
}

if (row3 == 45) { var row4 = S[3][0] + S[3][1] + S[3][2] + S[3][3] +
S[3][4] + S[3][5] + S[3][6] + S[3][7] + S[3][8];
}

if (row4 == 45) { var row5 = S[4][0] + S[4][1] + S[4][2] + S[4][3] +
S[4][4] + S[4][5] + S[4][6] + S[4][7] + S[4][8];
}

if (row5 == 45) { var row6 = S[5][0] + S[5][1] + S[5][2] + S[5][3] +
S[5][4] + S[5][5] + S[5][6] + S[5][7] + S[5][8];
}

if (row6 == 45) { var row7 = S[6][0] + S[6][1] + S[6][2] + S[6][3] +
S[6][4] + S[6][5] + S[6][6] + S[6][7] + S[6][8];
}

if (row7 == 45) { var row8 = S[7][0] + S[7][1] + S[7][2] + S[7][3] +
S[7][4] + S[7][5] + S[7][6] + S[7][7] + S[7][8];
}

if (row8 == 45) { var row9 = S[8][0] + S[8][1] + S[8][2] + S[8][3] +
S[8][4] + S[8][5] + S[8][6] + S[8][7] + S[8][8];
}


if (row9 == 45) { var col1 = S[0][0] + S[1][0] + S[2][0] + S[3][0] + S[4][0] + S[5][0] + S[6][0] + S[7][0] + S[8][0];
}

if (col1 == 45) { var col2 = S[0][1] + S[1][1] + S[2][1] + S[3][1] +
S[4][1] + S[5][1] + S[6][1] + S[7][1] + S[8][1];
}

if (col2 ==45) { var col3 = S[0][2] + S[1][2] + S[2][2] + S[3][2] +
S[4][2] + S[5][2] + S[6][2] + S[7][2] + S[8][2];
}

if (col3==45) { var col4 = S[0][3] + S[1][3] + S[2][3] + S[3][3] +
S[4][3] + S[5][3] + S[6][3] + S[7][3] + S[8][3];
}

if (col4==45) { var col5 = S[0][4] + S[1][4] + S[2][4] + S[3][4] +
S[4][4] + S[5][4] + S[6][4] + S[7][4] + S[8][4];
}

if (col5==45) { var col6 = S[0][5] + S[1][5] + S[2][5] + S[3][5] +
S[4][5] + S[5][5] + S[6][5] + S[7][5] + S[8][5];
}

if (col6==45) { var col7 = S[0][6] + S[1][6] + S[2][6] + S[3][6] +
S[4][6] + S[5][6] + S[6][6] + S[7][6] + S[8][6];
}

if (col7==45) { var col8 = S[0][7] + S[1][7] + S[2][7] + S[3][7] +
S[4][7] + S[5][7] + S[6][7] + S[7][7] + S[8][7];
}

if (col8 == 45) { var col9 = S[0][8] + S[1][8] + S[2][8] + S[3][8] +
S[4][8] + S[5][8] + S[6][8] + S[7][8] + S[8][8];
}

if (col9 ==45) { return true; }
else { return false; }
}

Wednesday, November 21, 2007

Sudoku Solver Progress

Decided to take a tentative stab at creating "the ultimate Sudoku Solving Program" (snort!) tonight. Wound up prototyping a function in Javascript that checks a solution candidate and returns true if it is valid or false if it is not valid. I know, using Javascript for the whole program would be lame, but for quick prototyping one function it wasn't too bad.

I'm actually pleasantly surprised how well it turned out. I pass the function an array, and voila!

It's funny, but the more I think about this, the more I realize I was wrong in my initial assumptions. This happens for me a lot-- I think I understand something, learn more about it and think about what I've learned, only to realize I was wrong and have to revise my understanding. Problem is, I was wrong in that means the program should be even easier/faster because there are fewer possibilities to sort through than I thought.

I originally stated that there were 81 cells with 9 possible variables, and then revised it downwards based on the average number of givens provided in a puzzle to something like 9 to the 53rd power. It's actually less than that.

Each row has to have the numbers 1 through 9, with no repeats. It's not 81 cells with 9 possible variables- it's a subset of that because each row and column must be a combination of the digits 1 through 9*. I have no idea how to represent that mathematically, but I'm pretty sure that brings the number of total possibilities down considerably.

* for example: 123456789, 234567891, 345678912, etc. but never 111111111, 111111112, etc.

Tuesday, November 20, 2007

Using Tidy to keep your web pages valid

Tidy

Use the proper tool for the job.

As a web developer in my second year, I've started advocating web standards at my workplace. It's an enormous undertaking, with over 3 GB of material on an Internet and Intranet site. Some pages were done with Dreamweaver (our currently supported tool), others in Adobe GoLive (our previously supported tool), and the rest in whatever tools someone had available-- Claris Home Page, Netscape Composer, or even text editors and FTP clients.

I've taken advantage of most of my clients being on leave during the Thanksgiving week and started consolidating entire subfolders of web pages over to a Dreamweaver template. But I can't just copy and paste the content into a template and forget it-- I wanted to make sure the page was at least valid Transitional XHTML. The designers can keep their nested tables (for now) if they like, but the pages must run successfully through a validator for me to be happy with them.

So, this is what my work flow has been like:

1) Create a new file and apply the appropriate Dreamweaver template to it.

2) Select the "content" region of the original page, and then copy and paste it into the "content" region of the newly created file.

3) Select all of the HTML from the new page (i.e. the template shell and the content), then copy and paste it into the W3C's validator. (It's an Intranet page, so I can't just point the validator at the URL of the page).

4) Go back and forth in an iterative process between Dreamweaver and the validator's error messages-- fixing what I can understand, and getting closer to that green "This page is valid Transitional XHTML" banner.

This process is time and labor intensive. That may work for a small web site, but when you've got 15,000 pages, you need a fast way to validate and fix broken pages. Otherwise you'll never get the majority of your web pages into a valid state and enjoy the benefits of a standardized web site.

I've been underwhelmed with Dreamweaver's built-in validator. It was time to get serious and take a second look at Tidy. I'd looked at Tidy a long time ago, but never got far with it because the man page seemed impenetrable.

Tidy is a small utility program created by one of the big brains at the W3C. It doesn't just tell you what's wrong with your HTML code-- it tries to fix it. If most of the errors you make in your xHTML code are things like: forgetting to close your unpaired tags (e.g. img, br, hr, etc.) or using deprecated attributes or improperly nested/overlapping tags, then Tidy can clean it up for you.

Is it perfect? No, it doesn't recognize Dreamweaver's non-editable template code, and has made changes in part of the page that are supposed to be off limits. Fortunately, since my templates are already valid HTML, that's not as much of a concern as you'd think. On the plus side, it's sped up Step #4 in my workflow considerably. I run Tidy against the local copy of a file, then FTP it up to the web server. Since Tidy can use standard input and outputs, I bet there's probably some way to script Tidy so it can do batch processing of files.

Monday, November 19, 2007

Sudoku Solver Program Idea

If I keep writing about Sudoku all the time, people will think I'm obsessed. Or boring. I'm not sure which is worse. Obsessed people have some possibility of being freakishly intriguing to a small audience that shares the same interest/hobby. Boring is just . . . well, boring.

I digress.

Tonight, I find myself preoccupied with the idea of creating a computer program that solves Sudoku puzzles-- including diabolicals. I haven't tested every single solver program in existence, obviously, but the ones I have seen don't appear to solve diabolical Sudoku puzzles. At first, this made sense-- the program is applying the various solving techniques (lone number, hidden pairs, etc.) and takes the puzzle as far as it can go with those techniques. Once the techniques stop producing results, the process has no choice but to stop.

But computers aren't humans, and vice versa.

Instead of trying to make the computer mimic human solving techniques and processes, it makes sense to capitalize on the unique strength of the computer's raw computational power. There are 81 cells in a typical Sudoku puzzle, with 9 possible variables in each cell-- that's 9 to the 81st power (or, um . . . 1.96627050476e+77 for those playing along at home). I know that seems like a lot, but with advances in processor speeds, distributed clients, and a smart approach, it isn't completely impossible. Right? Also, don't forget that the values of some of the squares are given at the start (28 given clues in yesterday's diabolical puzzle), so it's more like 9 to the 53 power (aka 3.75710212614e+50).

It's basically a multi-dimensional array, 9 by 9. It helps to think of a series of car tripometers when trying to visualize this-- except each tripometer has nine places, and they are stacked one right above the other. You increment the value of the last cell, and then you perform a series of 18 checksums-- one for each row, and one for each column. If the checksums each add up to 45, then you have a valid sudoku solution. If not, then you know there's at least one number that is wrong, you increment the number again and start over. Humans don't have the speed or patience to pull off such maneuvers-- but computers are fantastic at this sort of thing.

You could do it as a series of 81 nested for loops as well, I suppose, but that'd be crass and ugly. This reminds me of a program I wrote years ago that generated letter combinations for telephone numbers to help people find "vanity" numbers for their phones. Same concept, except you'd be running the process on nine digit numbers instead of seven.

If you really wanted to make it fast, I think you could create a "dictionary" of valid Sudoku puzzles-- in other words, run the program and let it generate all the possible valid combinations of numbers for all possible complete Sudoku puzzles (much like password cracking programs use dictionaries to assist their attacks). Then, all you'd need to do is run a match against the given clues and filter out all the solutions that don't match the values and positions of those clues, and-- voila! -- you have your solution. Of course, storing an array of that size (in RAM or hard drive space) might be problematic.

There must be something wrong in one of my assumptions. It can't possibly be *that* easy, or someone else would have already done it. The total number of possibilities (with 28 provided clues) multiplied by 18 checksum operations is 6.76278382705e+51. Of course, you wouldn't carry out all 18 checksums for every possible combination-- you'd stop running checksums as soon as the first one didn't total 45.

What language would you choose to write something like this in? Jeez, almost every programming language I know is web-oriented these days. That's certainly not too practical for this sort of operation. Maybe it's time I dusted off those old C programming skills and see if I can pull this off.

If anyone's interested in taking a shot at this with me, drop me a line.

Sunday, November 18, 2007

DC Examiner's Diabolical Sudoku Classic Puzzle

Our local newspaper, the DC Examiner, recently began running two Sudoku puzzles each day-- Sudoku Classic and Sudoku Pacific. Generally speaking, the Monday puzzles are easy and the difficulty level progresses through the week. By the time you get to the weekend edition, you are looking at maximum skill level puzzles. I know my Sudoku solving techniques are incomplete, so I've been drilling myself with these puzzles to try to force myself to improve.

I could be mistaken, but I think the folks in charge of the Examiner's "Games!" page decided to throw us a curve ball this weekend by featuring a "diabolical" puzzle for the Sudoku Classic (shown below). It's marked with 6 out of 6 stars, and about two-thirds of the way through working the puzzle, you reach a point where it becomes impossible to eliminate any more possibilities.



You don't see many diabolical Sudoku puzzles in mainstream newspapers these days. (It tends to upset the so-called Sudoku purists who insist that all puzzles must be solved by logic alone and should never involve any guesswork.) There is a technique called "Ariadne's thread", which I have not mastered, that might address such situations-- but let's be honest here, it amounts to picking a cell with only two possible values, choosing one of those values and solving forwards from there until you either encounter a conflict or solve the puzzle. If you do find a conflict, you erase your way "backwards" to the point before you picked that value, and then you select the other option and progress forwards. Using a photo copier or different colored pencils makes this process much easier.

Saturday, November 17, 2007

This entry sucks (literally)

Small double sided suction cups!

Small double sided suction cups!

Small DOUBLE SIDED suction cups!

(Hmm. That's odd-- when Bill Griffith does that, it's hysterical.)

Christmas music . . . already?

I'm lying in bed in my townhouse-- and my next door neighbors are playing "Rudolph the red nosed reindeer" so loud that I can hear it through my wall. (They're great people, really-- but they've got to be stone deaf.)

Isn't there some rule about playing Christmas songs before Thanksgiving has happened? You know, like no white shoes before Easter? ;)

I guess I shouldn't be surprised. After all, the department stores practically do everthing they can to blur the October-December time frame into a monolithic consumer orgy: HalloGivinMas.

Thursday, November 15, 2007

Effective, meaningful page titles are hard, but essential

It is difficult to create effective, meaningful titles for web pages or blog entries.

We've all been guilty at some point of writing the "clever" title-- you know, the play on words or rhyming. The problem with that approach is we're so busy trying to seem clever that we do a less than adequate job of communicating to our readers what the article is really about. "Oh, but you want the reader to be a little mystified . . . it draws them in to read the rest of the entry."

Really? Interesting theory. Let's put it to the test.

Let's say that someone performs a Google search and one of your entries appears in the results. People don't read every single word of all the results that were returned-- they scan the titles of the results to find the best match for the mental concept they had in mind when they performed the search. If they see your entry with a "clever" title they have to "decode" and another entry that has a "boring, but very clear" title, which link are they more likely to pick first?

News websites, such as the DC Examiner, understand this-- and they seem to spend an enormous amount of effort revising their titles over several days. Just take a look at their RSS feeds, and you can see multiple copies of the same article under permutations of the same basic title. (I really wish their RSS feed would treat revisions of the same story as one entry instead of separate entries amongst themselves-- but that's a blog entry for another day!)

Monday, November 12, 2007

Doing it right, versus just doing it

This entry is probably going to be a train wreck. Consider yourself warned.

I've got a million half-baked ideas in my head that seem to interconnect, and it seems important to get them out on "paper" somehow-- but I'll be darned if I have any idea where to start, or how to go about accomplishing this. Pretty ironic, considering my BA in English, huh?

Worse yet, even if I do make a decent effort, someone will stumble across this entry and interpret it in a way that I never intended it. They might get offended, or have hurt feelings, or something I can't even anticipate. The odds of it coming out right, being understood, helping another person, etc. are tiny. The smart thing is to quit before I even get started.

Good thing I'm stupid about these kind of things then, eh? ;)

Here's the deal-- I am the product (or victim!? Ha ha!) of a liberal arts education. I see connections between all sort of different academic disciplines. A change or discovery in one area of human knowledge creates ripples in other areas of life. This can actually be a good thing, because some times you can take what you know about in one area-- like economics, for instance-- and apply it to other situations in your life entirely, like nutrition. Yeah, I know, it's a stretch to see it if you weren't indoctrinated in the liberal arts tradition and prefer the traditional Western thought of dissecting something into its component pieces and studying them in a vacuum.

I'm not saying that you have to see things the way I do in order to understand this post or to get along with me-- I'm just letting you know where my head is at and what perspective I'm coming from as I write this entry.

I'm in the very early stages of what looks like will become a massive home improvement project. This is the planning and studying stage, I guess you'd say. I feel woefully unprepared for this task, and trying to enlist professional help seems to be almost as frustrating and pointless as doing the work myself. There's just so much to be done, and the amount of time and money is going to be staggering.

There is one lesson I've managed to pick up though-- it's not enough to do the work; it has to be done in a specific sequence. For instance, add any new electrical work before you upgrade your insulation. Again, it's a lame and obvious example-- but what did you expect? I'm not a contractor; I'm an amateur who's in desperate need of an architect/contractor/designer and son on.

If this simple fact (i.e. doing the right tasks in the right sequence) translates from home improvement to-- well, to the way in which we choose to run our lives-- then it's hard not to become one of these neurotic and obsessed "efficiency experts." I don't want to be that guy who argues about whether it's "better" to button your shirt from the top button down, or the bottom button up. The potential ROI for such a small change makes it almost worthless to even contemplate.

However, it does bring a character flaw of human nature to light. We tend to want "to do everything" now. We're like little kids-- we want to be cowboys AND astronauts AND railroad engineers AND firemen, all at the same time. We lack the discipline to focus on one thing and invest the time, energy and technique/craftsmanship in it to get the best results. We spread ourselves way too thin and then wonder why we are getting such average or even piss poor results.

Modern day society doesn't exactly make it any easier, either. There's so much competition for our attention now, it takes a super-human amount of will power (or a convenient electrical blackout!) not to get sidetracked. I suspect that in the not-to-distant future, there will be a place of business where people go to "unplug from the grid" and isolate themselves from all possible distractions.

Sunday, November 11, 2007

Seth Godin suggests an internal blog

Internal blogs are a good idea, but I'd never set it up on the Internet-- even with a password.

Seth Godin suggests that it's a perfect time for people to start an internal blog. The idea being that it is like a daily diary, so you can look back at how you dealt with day to day issues. I think it's a good idea, but since many of the issues I seem to deal with are the personality quirks and technological ignorance of my "clients", I can see this diary becoming a nightmare if it became public somehow (e.g. FOIA request, legal action, successful hacker incursion, etc.)

If you decide to take Seth up on his advice, you might want to consider using Wiki on a Stick instead. Go on, you've been wondering what to do with that cheap, promotional 128 MB USB thumbdrive you got from that conference/demo/Halloween party, anyway.

Friday, November 9, 2007

I am obsessing over SMS and data

If you start sending and receiving text messages on your cell phone, look into getting a plan.

Before I got my basic media plan ($10 a month for 400 messages and 1 MB data), I paid 10 cents a message. As long as I stayed under 100 messages a month, it was cheaper not to get the plan. Problem is, once you start text messaging, it grows on you real quick.

Maybe you start off with some information service, like Air Quality SMS. One of your friends sees you doing SMS, and they figure out how to do it themselves and you wind up trading messages once or twice a day. Don't forget television programs that allow you to vote via SMS (usually at an extra charge, I might add). Then you discover you can microblog with Twitter or receive automated alerts from Google-- and it's over.

So, like any data obsessive geek, I'm reviewing my SMS stats for the past seven months-- to reassure myself that I'm really saving money with this plan. Or, is this another resource going to waste like my "rollover minutes." Four of the seven months I've sent more than 100 messages, but three of those seven months are in the mid to high 90s. I do the math and wind up figuring out I've saved something like $12.50. Not bad, but far from a stunning and compelling amount. Of course, when I factor in the fact that I've been using my cell phone for web page testing and learning about creating web pages for portable devices, I can't really figure out an easy way to attach a dollar amount to that.

Is it possible to "get more/do better" with SMS than I am now? For example, if there were a service that sent me a text message once a day with-- I don't know, let's say the Dow Jones/Nasdaq closing prices-- I'd be more in tune with what the stock market is doing, and I'd only wind up using 31 messages a month to do it. Or maybe I could set up something on my work computer to notify me when there's a problem or outage? No, bad idea-- I'd definitely wind up over 400 messages in a month then, considering how often there are issues.

Still, it's worth pondering. Can I use my SMS texts in a smarter way than I am now?

Thursday, November 8, 2007

Now THAT'S a workout!

Decided to change things up a bit by skipping my cardio this morning and doing it this evening instead. What a difference!

I went further, in less time, and burned more calories doing it. To be honest, work today was frustrating and pointless, so I think I took some of my frustrations out in the cardio workout.

Wednesday, November 7, 2007

Twitter, micro-blogging, etc.

Yeah, I could have written about Day 4 of my DST fitness plan, but let's be honest-- it gets old real quick and no one cares about my workout routine THAT much.

Let's talk about twitter instead. I don't really *get* twitter. I know lots of people use it, and I use it myself half-heartedly. But I don't understand the widespread appeal of it.

I mean, I remember reading just a few short years ago a parody of a blogger who obsessively blogged every little detail of his life.

9:53 AM

Lost my pencil.

9:55 AM

Found my pencil.

10:02 AM

I sneezed.

We used to ridicule people who had blogs like that, you know? Now, it seems as if Twitter and other microblogging platforms are "social networking" tools. For instance, I can say "going to open mic night at Firehouse Grill in Fairfax"-- and everyone who follows my twitter feed will see where I'm headed and has the option of joining me there. (Yes, this assumes that I actually have people who follow my Twitter feed and that they are local, but you get the idea.)

When did "microblogging" suddenly grow up and become the cool kid on the block? Where are the people who once mocked microblogging now? Has their opinion changed any in light of recent events?

And, most importantly, will I ever find a way to add comments or trackbacks to my blog in a way that doesn't create invalid HTML?

Tuesday, November 6, 2007

Day 3 of my DST opportunity

Got up at 5:30 AM again. The act of getting up and out of bed has been surprisingly easy for me, so far. I guess my circadian rhythms are still on the old pattern at this point, so my body's "ready" to wake up by the time my cell phone alarm sounds.

I did make one small change in the routine, and it sort of bombed. I'd been popping DVDs into my iBook, figuring I could get through my Netflix queue while I got in my cardio. But, since I'd finished "Wordplay", my next movie would have been that old Tarantino classic "Reservoir Dogs"-- and that's just a little too much to take at 5:30 in the AM!

So, I decided to switch to podcasts instead. I figured I had a huge backlog of those to get through anyway, so it'd be a helpful switch. Here's the weird part-- I can watch/listen to a DVD while I'm working out, no problem. But, when I try to listen to a podcast, the audio gets drowned out by the noise of the XL Glider. It's the same iBook, same volume level-- you'd think it would work, but it doesn't. All I can figure is that it must have something to do with the audio quality of the podcast itself.

So, unless I find some way to boost the audio on the podcasts, I won't be listening to those when I work out in the near future.

I did manage to get my 20+ minutes of cardio workout accomplished. Today was particularly challenging because I had to arrive an hour early at work for our fall conference, but I still managed to get my work out in. I just hope I can stick with this habit long enough to derive some long term health benefits from it. I think Saturday morning will be the real test, of course.

Monday, November 5, 2007

Taking advantage of DST opportunity, Day 2

Got up at 5:30, popped the Wordplay DVD into the iBook and hopped on the XL Glider for 24 minutes of cardio. Still not living up to my old pace, but it was a definite and noticable improvement over yesterday's pace. I managed to finish my workout and the DVD at the same time even, so I dropped the Netflix envelope into the mailbox on my way to work this morning.

I can't say that exercising for two days has made a quantum difference-- I'm not jumping over tall buildings or picking up small cars, but I do seem to have a little more energy and mental focus today. Amazing what a good night's sleep and a little bit of cardio can do for your frame of mind, isn't it?

I just hope that I'm smart enough/have enough common sense to keep this habit up.

Sunday, November 4, 2007

Is quality the first casualty in a flat world?

I just took my brand new sheets out of the dryer, and roughly six inches along one of the edges has begun to fray. It's been through the washer/dryer cycle twice, and it's now falling apart. The problem is that the stitching that was done on one of the edges was a single stitch-- and the thread has broken.

$80 sheets, and they start to come apart in less than two weeks!?

"Made exclusively by Zorlu for BED BATH & BEYOND

Made in Turkey"

You figure it out.

Javascripts work better when you remember to include them

I have no delusions of grandeur when it comes to my website traffic. When the number of automated webcrawler bots outnumbers visitors who actually require oxygen in order to survive, you get a pretty clear picture of how unimportant you are in the grand scheme of things. ;)

But I knew something was wrong when I pulled up my Google Analytics and I have zero visitors for the entire month of October. Heck, I visit my blog at least once a week, and I didn't set up any filter to ignore my visits!

It turns out, with all the template revising-- trying to get the page into valid HTML shape and all-- I wound up removing the piece of Javascript that Google Analytics uses to gather site visitor data! LMAO!

I'm such a numbnutz sometimes, honestly. Needless to say, I've restored the code now.

Day 1, my DST plan

As I mentioned previously, I planned on using the "fall back an hour" to jump start my fitness regimen again. Ironically enough, my body's circadian rhythms are so strong that I woke up at my regular time (i.e. an hour early instead of 30 minutes early.)

I popped a DVD (Patrick Creadon's "Wordplay") into my iBook and managed to get in 24 minutes of cardio on my XL glider. I'm not achieving the distance or calorie burn that I used to, but to fair I've been away from it for almost a year, so I know it's going to take time to build back up to it.

Let's see if I can make Day 2 as successful.

Saturday, November 3, 2007

The opportunity of DST change

This is the weekend when we turn our clocks back one hour. I always find this whole custom amusing, because it points out how artificial and arbitrary the human construction of time is. Think about it:

Q: What time is it?

A: It is 1:59 AM and 50 seconds . . .

(long pause)

Q: What time is it now?

A: It is 1 AM.

Q: But that's not possible. You just said . . .

A: It is 1 AM and 10 seconds.

Q: How . . . ?

A: Because I said it is.

And, when you sit down and think about it, it's not just the time-- it's everything. The months of the year, for example-- the tenth month of the year is called OCTOber?! That's when you realize that the name and the position in the sequence are completely irrelevant! The month it was "created" and named in honor of an ancient Roman emporer. And the days of the week? Norse Gods. Norse Gods!? Go on, pull the other one while you're down there.

Time, in the sense that we as human beings know and understand it, is an artificial construct. It is arbitrary and a matter of convenience, so we can all agree to meet for lunch at some point in the future and have a halfway decent of arriving at the restaurant at the same time.

(There is, I should mention, another sense of the passage of time-- the Earth doesn't care about days of the week, or months of the year. It's all cycles and processes. Cycles within cycles, actually.)

But, I digress . . . the topic of this post is about opportunity. Specifically, what can you do with the "extra" (snort!) hour this weekend?! I'm planning on using it to jump start my new fitness regimen for the winter months.

I need to get in the habit of doing at least 20 minutes of cardio each day, preferably before breakfast. Of course, that means getting up earlier than I already do-- a thought that immediately puts a damper on any enthusiasm I might have for the task.

However, if I set my alarm clock to go off 30 minutes early when I go to bed tonight-- after I've already turned it back an hour, that is-- I'm actually getting up 30 minutes later than I would have been when I really started! And there wasn't even any time travel or British accents involved! :)

Then I leave the clock set for 30 minutes ahead of my customary time from here on in, and let the habit entrench itself for the next month.

Friday, November 2, 2007

Linux + iPod and DJ mixing

You know, I've never done any DJing in my life, but when I read about this little gadget the other day, I was tempted to order one and give it a spin. ;)