Observations
(page 1, 2, 3, 4, 5)


Etched in "Stone"
(24 April 2009)

Back in the day, computer screens and televisions were susceptible to phosphorous burn-in from the cathode-ray tube technologies being used. It was not uncommon to see these ghost images of text or graphics on old video games and such. The so-called screen saver was designed for the purpose of removing static images that would contribute to this burn-in.

Old computer monitors also used a "white" text on "black" background before eventually adopting a "black" on "white" printed page appearance as the technology improved. The "white" on "black" has also been popular with websites depicting ghosts and vampires and everything else that goes bump in the night.

Unfortunately, while the "white" on "black" may initially "look cool," it's painful for many people to try and read. As a web developer who enjoyed using the "white" on "black" look for rendering dark information, this author caved to pressure from my readers to switch to something easier on the eyes. For example, on my essay pages I use an off-white "snow" background color rather than the default "white" setting. (I'm kind of curious what people think when they see a picture on the page with white background that doesn't quite match the page color.)

I do still though use the "white" on "black" format for displaying computer source code examples to give them an old school retro look. If software programmers don't like it, they can byte me.

Another trend some web designers enjoy employing is the use of mixing fonts. From the overuse of italics and bold text to multiple font sizes, styles and colors; the end result tends to look like a ransom note pieced together from magazine clippings. As one blogger might describe it, the effect comes off as "crackpot hermeneutics that in pre-Web times would have been scrawled in Magic Marker and stapled to telephone poles."

As standards change, grow and develop, so-called cookie cutter designs come in and out of vogue. Countless web sites today, for example, use a three column design that while practical, at this point just screams unoriginality. Templates do allow many who would not otherwise be able to create their own pages do so quickly and easily, but they tend to lack a creative and personal aspect often desired. They're also a nightmare to maintain without using the specific software that created them. Upwards of half the text being sent to a browser may be there for the sole intention of assisting the design software with nothing to do whatsoever with the actual information being rendered.

Many times, template-based design also has "issues" including cross-browser compatibility. Google, for example, explicitly disallows any modification of their advertising code even in cases where it's purely superficial and lends itself to better integration with the aesthetics of the page. (Think a sore thumb that refuses to heal.) PayPal, on the other hand, didn't instruct this author not to change and even thanked for the advice regarding Mozilla Firefox concerns in regard to their code provided for use by those seeking donations.

Another huge concern deals with screen size. Many people accustomed to the old standard of small monitors and limited pixel dimensions seem to think that they are still the norm rather than the exception these days. While just under a third of computer users are still using a tiny 1024x768 display, a growing number of users are upgrading to flat screen monitors that provide higher resolution.

Thanks to browser software that can detect settings, custom appearances are becoming available to those that haven't disabled web scripting languages like JavaScript. There are also built-in HTML/CSS tricks that obfuscate the need for "printer friendly" buttons so common on news websites. In printing an online essay from this author's website, it would be nice to know how many people appreciate that the superfluous information rendered on the screen is automatically omitted on the piece of dead tree. A so-called "Green Website" award should be in order.

In conclusion, it should be mentioned that even the coolest designs -- while they may work properly -- are often not the best of designs and as such should not be considered "correct." It is absolutely appalling what people are being taught today as truisms when common sense and decency are being thrown to the wind. With Seattle and its countless first round errors that later needed revision, one might wonder why those mistakes weren't caught in the first place. In a Microsoft world where something so simple as a date seems to be impossible to get right, let's put our hands together for Apple applauding "the crazy ones."



I had a dream
(19 June 2009)

I had a dream. Was it in color? Of course! Did I taste the foods I ate? Sometimes quite deliciously. Did I smell anything? Well, when one wreaked of gasoline I shook myself awake just in case since I've had dreams where I hear outside sounds such as my alarm clock like the voice of God.

If there is anything to dreams, and the millions of us that have had premonitions that have come true understand there is, I was forced to be born into this world. I had a dream in 1995 about sitting in line on what looked like the surface of Mars letting the young people who kept showing up to go past me. I was told it was a queue to play a really cool game, but I just wanted to sit and enjoy the scenery. Eventually some angry man pulled me from the line and made me cut to the front where there was a portal I entered and was suddenly born an infant. Catholics call that line the Guff, something I didn't know until the movie by that name was released years later.

I hear most people don't dream (or don't remember them as so many say). I know when I started having to live my nights ruled by the morning alarm clock I didn't dream much either. One a week, a few a month: that seemed normal to me. Then the late 90s rolled around and I was no longer ruled by an alarm clock. I could sleep in. I could fall back to sleep if I did wake. And I started dreaming practically every single morning, oftentimes more than once.

Some of these dreams last for several minutes. Sometimes even after waking I've been able to fall back asleep into the same dream -- even multiple times. Once such combination lasted at least half an hour until the dream reached a point where I was eventually trying to find some steak to go with the cream covered asparagus I found and decided to finally call it quits and wake up for good.

The content of my dreams varies dramatically from short, quick, single scenes to long drawn out stories that sometimes allow me to manipulate them with just my wishes alone: levitating for example. One long one that stands out involved me flying and wondering that I didn't think I'd ever swam in a dream before to which the scenery quickly progressed to me floating along under water seeing a myriad of prehistoric looking fish and aquatic reptiles. It was certainly quite the eye candy.

Sometimes my dreams are very high tech. A recurring dream element both me and a good scientist friend have been having involves weaponized chewing gum that sticks to the teeth and keeps growing. It's more than a bit annoying to say the least. One I really like involves embedded videos in the likes of newspapers and magazines. In this case, these dreams seem to be progressing from highest tech using smart ink to most recently one that could probably be made right now today using a few millimeter thick stick-on. One really cool one involved a huge Cheshire Cat that looked like the coolest computer graphics I'd ever seen, and I've had many dreams where I'm playing video games.

As for smart ink, the beer company Coors recently released their line of cans that will turn blue when cold. What color is it hot? I know blue is not the mandatory color either as evidenced by so many children's toys that do similar things.

I've noticed that when I become engrossed in something, like years ago in the Windows 3.1 days when I played a lot of the game Doom, I was having dreams where if I didn't like what was happening I'd restart the dream from when it began and try again. Solving problems I have with computer software coding issues I encounter is not uncommon as well, and my dreams will be filled by me sitting at the computer working on the algorithms.

Some of my dreams have been a bit spooky too. Way back in the early 90s, for example, a study found that when guys could reply anonymously, a disgustingly huge percent of them admitted they'd rape someone if they could get away with it. Disturbing as that is, I decided the next time I had a dream with a woman in it I'd give it a try to see whatever could be the allure. That next morning a woman popped up right in front of me in a dream and I pushed her to the ground. I was immediately grabbed by others and asked what the Hell did I think I was doing. I apologized profusely explaining I was just trying what I thought was a safe experiment and that it'd never happen again. (All the women coming on to me in dreams since has been amazing!)

Another dream in the mid-90s had me sitting down to a board meeting where it was explained they were about to launch a nightmare campaign and wanted my approval. While I didn't exactly feel right about it, I didn't exactly not want them to do it. I wanted them to use their best judgment since dreams can kill the feeble, though I might have to amend that a bit due to the Hmong Sudden Death Syndrome killing Laoation soldiers trained by the US Central Intelligence Agency.

My last nightmare I think was in April 2008 a few days after I pissed off tons of people when I told them to really study Matthew, Mark, Luke and John. After deciding to watch some television one night after weeks of none I stayed up late to watch the animated series South Park. Both episodes were about religion with one in which God admits to being Buddhist and that only Mormons go to Heaven. That got me thinking of my ex-fiancee whose family is Mormon who mentioned that the CIA infiltrated them years ago in order to discover how they're able to teach foreign languages so quickly.

That night I had a dream like the scene right out of the movie "Being John Malcovich" where everyone had his face (sorry for the spoiler), but in my case all the faces were my ex-fiancee. I used one of my techniques of violently shaking my head to wake up, did the ritual bathroom thing, put on a pot of coffee, and jumped online to check my email. Wouldn't you know it? There was an email from her after 13 years via my Facebook account I had only just recently created. We chatted nightly for months after that, and the more she said, the less I trusted her. She even told me she was a "good witch", but when I started to talk about my ideas regarding my Aeon Tree project she totally flipped out, called me a socially retarded narcissist, and blocked me from further contact. On an up note, the 13 year crippling depression due to guilt I felt was miraculously lifted after catching her in her lies. Think along the lines of that Simpsons television episode where Marge gets drunk, Homer crashes the car, and then he puts her in the driver's seat and blames her for the accident.

Another dream phenomenon that comes to mind is falling asleep awash in sound. From something like an alarm clock being heard within a dream to falling asleep in front of a television, I've caught myself falling for an advertised product only to wake, realize some infomercial about it was on, and the product of course wasn't as good as it seemed in the dream. The eminent psychiatrist and CIA asset Ewen Cameron experimented with this and other brainwashing techniques on unwitting patients in Canada for which he was eventually sued to the benefit of some of his victims.

But sleep cinema is one thing. In 1996 I started noticing more clearly my daydreams. But they weren't daydreams so much: as what I recall of daydreams from high school class involved shortly nodding out for a quick sleep dream. What I was noticing was faint imagery unfolding before me when I closed my eyes. Often starting out as random shapes and images with amazing artistic potential, they'd later evolve into something like some television episode playing out with just my eyes closed. When I asked my "higher powers" what they were, my brain told me they were art projects from deceased children. And so I watched them. For months. And I started asking around what the Hell?

No one knew. Not the doctors. Not the Internet. Not the countless people in the many forums I belong to. I did, though, find one artist who has them and uses their imagery to create new pieces =) Then one day: vioala! Someone posted to Wikipedia about the rare closed-eye visuals. Granted I don't necessarily agree with all the explanations, but the article did include another phenomemon none of my doctors or professors knew about regarding seeing squirmy little silver things swimming around in the eye when looking up to the sky on a bright day.

Like the Indians song goes (was used in a movie even), "Angels in the sky / At night you can see their eyes" (something like that), there is much more to life than simple biological functions most folk are clueless about in the first place let alone try to reason may hold a greater purpose. Back around 1995 when my fiancee asked me how many senses we have my immediate response was "More than they teach us." I might suggest reading the Wikipedia article on the subject, especially if the number that comes to your mind is five.

Now for all you folks that insist on falling asleep with the television going all night or something, let me just warn you that the CIA has been experimenting with that form of brainwashing for years. A successful class action lawsuit was brought against one such brainwasher: in fact, he was the founding President of the American and World Psychiatric Associations working in Canada, such the meanie!

At this point I want to talk about memory flashbacks, but that's a whole chapter in itself since it would involve 40 year old's and their recurring memories of horrific childhood abuse they've repressed. Suffice it to say that if soldiers are experiencing anything close to what I have had, my heart goes out to you. Having to relive verbatim a traumatic experience is truly a nightmare.



Turning the Tables
(13 July 2009)

I needed a way to dynamically create tables using proper syntax rather than a lazy method of stringing together HTML elements as text and writing them to the screen.

EggheadCafe offered a nice example of Creating Table Dynamically using Javascript in an old article. The example provided, though, uses a feature limited to MSIE: the tableElement.innerText value which inspired me to create a pair of functions for my utilities library I may want to use later:

setText = function(self,text)
  { if (self.innerText) self.innerText = text; else self.innerHTML = text; };
getText = function(self)
  { return self.innerText ? self.innerText : self.innerHTML; };

The functions should work properly if assigning plain text as a value, but in non-MSIE browsers, the inclusion of HTML code as a parameter will affect those tags.

What the dynamic table creation example -- after a bit of debugging -- boiled down to was this:

this.table = document.createElement("table");
this.table.appendChild(document.createElement("tbody"));
// I read somewhere "tbody" is preferred to be included
var row,cell,i,j;
for (i=0; i<this.rows; i++)
{
  row = this.table.insertRow(i);
  for (j=0; j<this.columns; j++)
  {
    cell = row.insertCell(j);
    cell.innerHTML = "&nbsp;"; // Don't forget this or cells may not appear properly
  }
}
this.container.appendChild(this.table);

At this point I needed a quick way to access the individual cells. The maratz.com article Detect Table Row Index with JavaScript proffered one solution:

rows =
document.getElementById('my_table').
getElementsByTagName('tbody')[0].getElementsByTagName('tr');

Unfortunately, finding individual columns in each row proved difficult due to requiring the comparison of instanceOf elements to their reported values. Instead, I decided to just create a 2-dimensional array of elements that I assign the cell value from .insertCell(). This provided me with the means to create a simple get function:

function getCell(col,row) { return this.elements[col][row]; }

I had a previous version of getCell() with bounds checking, but JavaScript will return a value I can check to make sure it's defined. Ideally, the function should return a valid (though invisible) cell upon error.

Now I basically had a function that could create a table, but the details of the the table's appearance needed further review. How could I, in JavaScript, create a CTable class and derive a pretty one from that basic shell?

After googling around a bit I found what seems to work perfect for me: A Base Class for JavaScript Inheritance provided by Dean Edwards.

Having learned so much of my programming skills from need to know hunt and poke, this Base class introduced me to object creation formatting I was unfamiliar with, but which has proven so simple to follow:

var CTable = Base.extend({
  constructor: function(container,columns,rows)
  {
    this.container = container;
    this.columns = columns;
    this.rows = rows;
    this.table = this.CreateTable(container,columns,rows);
  },
  CreateTable: function(a,b,c) { /* see above */ },
  // Note that /* */ comments are pesky when trying to comment out large
  // blocks of code that contain them
  function2: function(value) { this.value = value; },
  labelStubSoThatThereIs_NoTrailingComma: 0
});

var MyTable = CTable.extend({
  DEFAULT_COLUMNS: 3,
  DEFAULT_ROWS: 3,
  constructor: function(container)
  {
    this.base(container,
              this.DEFAULT_COLUMNS,
              this.DEFAULT_ROWS); // Call the Base class
    this.table.className = "MyTableClass";
    // further processing...
  },
  function2: function(value) { this.base(value+1); alert(this.value); }
});

I don't know the exact coding specs, but the colon deliminated pairs separated by commas (except for the final one) seems pretty simple to follow after the ({ }) object creation via the Base.extend() function. The this.base() function may be called from any function needing to access the Base class function in question.

Now a style sheet looking something like the following would make MyTable pretty:

table.MyTableClass { background-color:#cccccc;border-spacing:5px 2px;
                     border:inset 2px;
                     *border-collapse:expression('separate', cellSpacing = '3px'); }
table.MyTableClass td { background-color:#000000;width:10px;height:5px;
                        line-height:1px;
                        border:outset 1px; }

While some browsers like FireFox handle the border-spacing property well, MSIE doesn't, and I searched around to no extreme to find The IE border-spacing workaround by Vacskamati. While not a perfect fix, it did prove useful.

My next pressing concern was with optional parameters, and Optional Function Arguments in JavaScript at the OpenJS site proved more than adequate to fill my needs.

The following examples are in the constructors. The first demonstrates the built in JavaScript arguments array, the second an associative array:

function value(arg,defaultValue)
  { return (typeof arg == 'undefined') ? defaultValue : arg; };
this.base(container,
          value(arguments[1],this.DEFAULT_COLUMNS),
          value(arguments[2],this.DEFAULT_ROWS));

this.levels = new Array();
var default_levels = { 'critical':1, 'warning':2, 'nominal':3 };
for (var i in default_levels)
  this.levels[i] = (!arguments[3] || typeof arguments[3][i] == "undefined")
  ? default_levels[i] : arguments[3][i];

this.colors = new Array();
var default_colors = { 'critical_off': 'maroon', 'critical_on': 'red',
                       'warning_off': '#ccaa22', 'warning_on': 'yellow',
                       'nominal_off': '#006600', 'nominal_on': 'lightgreen' };
for (i in default_colors)
  this.colors[i] = (!arguments[4] || typeof arguments[4][i] == "undefined")
  ? default_colors[i] : arguments[4][i];

Now I could create a table with some meaning:

var eqFront = new Equalizer(document.getElementById('divFront'));
var eqRear = new Equalizer(document.getElementById('divRear'),4,5,
                           {'critical':1,'warning':1,'nominal':3},
                           {'critical_off': 'red', 'critical_on': 'maroon',
                            'warning_off': 'yellow', 'warning_on': '#ccaa22',
                            'nominal_off': 'lightgreen', 'nominal_on': '#006600'});

And set to action:



Observations
(page 1, 2, 3, 4, 5)
  www.skewsme.com/observations4.html