Sunday, November 10, 2013

Have It Our Way

It's been over a month since I announced to the world that I need to get a job and asked for help toward this end, and to date I haven't gotten a single response. I haven't even attracted any 'hate mail' ("You shlub, do you really think anyone cares about you and your blog?"), employment spam, or scammers - man, I must creep people out or something. Maybe I should have just begged for money; that's what everyone else would have done.

What next? Using the Web as an employment resource is a bit overwhelming, and it is easy for a person in my position to succumb to 'Internet Information Overload'. I figured the next most basic thing to do would be to post my résumé at some job board sites. Accordingly, I gave my résumé a thorough overhaul as I hadn't touched it since 2003:
(1) I subtracted several sections (e.g., Graduate School Teaching Experience, Publications) that struck me as either outdated or irrelevant to the work I am hoping to find;
(2) I reordered the remaining content and
(3) prepended to that content a Current Work section that briefly discusses my blogging work; and
(4) I inserted a position-specifying "headline" (but not a "branding statement" nor a "professional profile") between my contact information and the Current Work section.

Using this type="text/plain" résumé at QuintCareers.com as a stylistic model, my updated résumé looks approximately like:

ANDREW PEAK

Here's how you contact me, here's where I live

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TECHNICAL WRITER * WEB CODER
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~
CURRENT WORK
~~~~~~~~~~~~~~
Blogger, reptile7's JavaScript blog: http://reptile7.blogspot.com/
More stuff relating to my technical blog

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PREVIOUS PROFESSIONAL EXPERIENCE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Visiting Professor of (Organic) Chemistry, Tulane University, New Orleans, LA
1995-1999, Spring and Summer 2000, Summer 2001 (B6 Session), 2003-2004

...

~~~~~~~~~~
EDUCATION
~~~~~~~~~~
Here's where I went to college and what I specialized in


Between you and me, I view my résumé as a cold, sterile document that does a poor job of representing who I am (if you do want a good representation of who I am, then you should read my (other) blog, of course). Moreover, I am acutely aware that only a tiny minority (as in < 5%) of job placements occur via Web job boards. But onward we forge. "If nothing else, we can see what happens - think of it as an anthropology experiment of sorts," I said to myself.

The Resources sector of Mojo40.com recommends the Indeed.com job board - This aggregates all the other jobs boards so no need to go anywhere else - so I went there first. Using a password generated by the code discussed in this post, I set up an Indeed.com account and attempted to upload my résumé as a .txt file via the file select (<input type="file">) control provided on Indeed.com's "Post your resume" page. Annoyingly, Indeed.com did not upload my résumé as is: it subtracted the headline and the Current Work section and outputted an "Indeed Resume" stating that I was still a Visiting Professor at Tulane University, with which I parted ways almost ten years ago (vide supra). I deleted the file-upload résumé and then built a new résumé using Indeed.com's "from scratch" option.

The Indeed Resume section of Indeed.com's FAQs page(s) sports a Why is your resume parsing not completely accurate? question. Indeed.com responds:
We're currently looking into ways in which we can improve the resume conversion process. In the meantime, try uploading a Word Document instead of a PDF. We find that Word Documents are converted much better.
Why are you converting résumés at all, Indeed.com? Why, indeed?

In sum, be prepared for some 'transmogrification' if you upload your résumé at Indeed.com. Moving on, I'll tell you about the free résumé critique that the aforementioned QuintCareers.com did for me in our next episode.

Sunday, September 15, 2013

Does She Make You Happy?

It's about time I got around to writing a quick post on Norah Jones and her most recent record, ...Little Broken Hearts.

"Solo artist" is not a particularly meaningful term these days. If you look at the credits for a Christina Aguilera record, it will be immediately clear to you that you are not just getting "Christina Aguilera" on that record: you are also getting a team of professionals that in various ways has created the record's music. Moreover, Aguilera may have a very impressive set of pipes but she doesn't play any musical instruments. In contrast, from Not Too Late onward Norah Jones has written or co-written - with no more than one collaborator in all cases but one - all of the songs on her records, and she also plays a simple keyboard and/or guitar part on the overwhelming majority of those songs. Jones may not be the musical polymath that, say, Todd Rundgren or Brian Eno is, but she definitely counts as a bona fide solo artist.

The only Norah Jones song that I can recall ever hearing on the radio is "Don't Know Why" from Come Away with Me, Jones' 2002 debut - here's hoping that the commercial radio situation where you live is not as dreadful as it is here in New Orleans. On the basis of "Don't Know Why", and also because she records for Blue Note Records, Jones is sometimes labeled a "jazz artist"; if this is your conception of Jones, then ...Little Broken Hearts will throw you for a loop.

Much has been written about ...Little Broken Hearts' foray into indie rock and how different it is from Jones' other records, and several of its songs do in fact brim with indie artsiness, namely, "Good Morning", "After the Fall", "Travelin' On", and "Miriam". However, if you've heard The Fall, Jones' previous record, then you know that there is a sparse Johnny Cash-ish country side to what she does, and there is some of that on ...Little Broken Hearts - indeed, my two favorite tracks on the record, "She's 22" and "4 Broken Hearts", are in this vein.

The aforementioned "Miriam" was chosen for the record's second single, a very interesting choice in that lyrically its narrator confronts 'the other woman' and ultimately decides to kill her - I'm gonna smile when I take your life - who knew that our Norah was a locked-and-loaded kind of gal?

In sum, if you like Jones' traditionalist side - if you are looking for songs like "My Dear Country" and "Back to Manhattan" - then you will probably be disappointed by ...Little Broken Hearts, but if you like her country side and are willing to let her push the musical envelope somewhat, then ...Little Broken Hearts is the record for you.

Thursday, September 5, 2013

Jeffrey Scott Beck, 1962-2012

I was horrified to learn from the July/August 2013 issue of the University of Pennsylvania's Gazette alumni magazine that Jeffrey Scott Beck, one of my graduate school contemporaries, died last year. I tracked down an obit for Jeff here; the obit writer doesn't say what Jeff died from, but given his age (49) and that he passed away ... with his wife, his sister, his mother-in-law and close friends at his side, I suspect that the Big C was to blame.

Jeff and I both arrived at Penn in the Fall of 1984. Although we didn't take any first-year classes together, we were co-TAs for Chemistry 4 and Chemistry 54 during the Spring 1985 semester and during the afternoon lab sessions we chatted from time to time - I still have my copy of the Chem 4 textbook for that semester, the fourth edition of Chemical Principles. (The third Chem 4/54 TA, Deanna Johnson, left Penn shortly after her first year and I have no idea what happened to her.)

I can't claim to have known Jeff well, but I do have a few random remembrances of him that are worth jotting down.

• Jeff and I were both semi-regular patrons of the sadly long-gone Audrey's Pit Barbecue on 40th Street.

• Jeff was a fan of female singer-songwriters - I remember him being pleasantly surprised that I had even heard of Joan Armatrading, Kate Bush, and Lene Lovich, let alone that I had heard any of their songs.

• Jeff was also a big Pink Floyd fan. He paid $400 to a scalper for two tickets to see Pink Floyd when it was touring for The Wall in 1980 or so - "During 'Mother' you could hear a pin drop," he informed me.

• Perhaps the strangest thing I knew about Jeff was that he loved the Meow Mix Theme: "I like chicken, I like liver, ..."

• I was never shy about telling everyone how much I disliked graduate school, and Jeff assumed that my dislike of graduate school extended to Philadelphia more generally. I corrected him. Actually, Jeff, there are some aspects of Philadelphia that I really like. His eyes lit up slightly. It's just that Penn isn't one of them. He smiled broadly.

Rest in peace, Jeff. If there's a heaven, I hope that they're piling the beef brisket, collard greens, and baked beans high for you up there.

Tuesday, August 27, 2013

Boys and Heroes, Lovers and Men

It was in June my intention to write up a mini-report on The Age of Consent, Bronski Beat's 1984 debut record, but I got sidetracked by the Bluebird template thing - although I haven't had the CD in my possession for a couple of months, let me take a stab at it.

For better or for worse, Bronski Beat is more well-known for whom it comprised - gay men who wrote about their gay lives some of the time - than for the music it made. Thirty years down the line, of course, one wonders what the fuss was all about - you almost feel sorry for someone who would be shocked, shocked at hearing frontman Jimmy Somerville sing, And the sweetest thing of all is men loving men loving men loving men.

As you would infer from the preceding paragraph, I myself couldn't care less about Bronski Beat's sexuality, any more than I care that Bob Mould and Grant Hart are gay, any more than I care that Amy Ray and Emily Saliers are gay (Saliers prefers "gay" to "lesbian", so I'll use her word choice), any more than I care that Tegan and Sara Quin are gay - it simply isn't an issue to me. What I care about is the music, what's the music like, lads? So I'll focus on the music in the discussion below. Maybe Bronski Beat itself wouldn't want me to separate its gayness from its music, but that's what I'm going to do.

The Age of Consent CD that I checked out from the library held sixteen tracks: ten songs from the original Age of Consent release plus six bonus tracks, three of which were remixes culled from Bronski Beat's second record, Hundreds & Thousands. Musically, about half of the CD was synth-pop and about half of it I would describe as 'soul' for lack of a better term.

The reviews of Bronski Beat that I've seen alternately describe it as a synth-pop or dance band; this characterization as regards The Age of Consent is at best half correct, as noted above. Admittedly, it is possible that Bronski Beat ditched its soul side on its post-Hundreds & Thousands output, I don't know.

I did not like The Age of Consent at first listen for the following reasons:

(1) I did not care for Somerville's high register, approaching-falsetto vocals; if they're an acquired taste I didn't acquire it.

(2) The record's absence of guitar rubbed me the wrong way. (OK, there's some rhythm guitar on "Screaming" and I'm pretty sure that I can hear a faint guitar part on "Love and Money", but there needs to be more.)

"But there's no guitar on the Human League's Dare." Touché. And I would take those guys to task for it as well.

(3) Regarding the original Age of Consent synth-pop songs, I felt that the production could have been punchier. Hi-NRG? My standard of comparison for this sort of thing is Pete Shelley's XL1, to which The Age of Consent doesn't measure up. The Hundreds & Thousands tracks did have the punch I was looking for, however.

(4) I found some of the songs to be dreary ("Wasn't that the whole point, re the gay thing?"), but I suppose you could say that about a lot of early-1980s post-punk music.

Having said all this, I very much liked the textural elements that adorn the soul songs, namely, the clarinet, piano, and choir on "Ain't Necessarily So", the unusual percussion on "Screaming" and "No More War", the sensuous sax solo on "Love and Money", even the tap dancing on "Heatwave". Moreover, one of the synth-pop songs, "Why?", boasts a prominent brass part.

The Age of Consent did grow on me, and I even became accustomed to Somerville's vocals somewhat, with repeated listens. The record's highlights IMO are "Love and Money", "Need a Man Blues", and "Run From Love" (the last track is one of the Hundreds & Thousands add-ons).

Accompanying the CD was a booklet containing neither lyrics nor any credits but rather a fan-written essay that
(a) outlined the history of Bronski Beat during Somerville's time in the band (Somerville appears on Hundreds & Thousands but left prior to its release) and
(b) complained about a scornful New Musical Express review of The Age of Consent.
Actually, I doubt that Bronski Beat's press at the time was as vicious as what was doled out to Queen, Yes, and Styx in the 1970s, but I digress.

Bronski Beat did not make it past the mid-1990s. Somerville today enjoys a solo career but I have no idea what the two 'permanent' members of Bronski Beat - Steve Bronski and Larry Steinbachek - are currently doing.

Overall impression:
All in all, I would say that The Age of Consent is a good but not great record; it's definitely worth a listen, and as for most records, you would want to listen to it before deciding to buy it.

Our musical conversation will (not necessarily in the following entry, but at some point) next take up Norah Jones' Little Broken Hearts...

Monday, August 19, 2013

Spam/Big Pharma Update

Since my previous anti-spam broadside, the spam influx at my other blog has slowed to a trickle. The spam that has gotten through has been more 'sophisticated', however; here are a couple of examples:

Hellо thегe, Үou've done an excellent job. I will certainly digg it and personally suggest to my friends. I'm sure theу'll be benefited from this web site. start.com.my

Hey! Ӏ realize this iѕ sort оf off-topic but I hаd to ask. Doеs builԁіng a well-established wеbѕіte lіke youгѕ require a large amount of work? I'm completely new to running a blog but I do write in my diary everyday. I'd lіke to start a blog so I can ѕharе my exрerienсe and viewѕ online. Ρlеаse let me know іf you havе any kind οf recommendations oг tips for new aspігing bloggers. Thаnkуou! Heгe is my page :: http://www.isleofwightfacebook.co.uk

Hmmm, these comments almost seem legit, don't they? But each of them sports a link that points to a "not found" page.

Here's one that's not so sophisticated:

We are all culturally and socially brainwashed to a struggle against the demons of the like extremism that fueled those acts of repudiation in 1980 in Cuba. car hire lanzarote One of the worst possible consequences powerfulness; maintain and grow your mesh of contacts; be on the sentinel for opportunities. my site - car hire spain

Well, at least they've got the brainwashed part right. Following the link for this comment generates a Safari can’t open the page "http://www.bestcarhirespain.co.uk/" because Safari can’t find the server "www.bestcarhirespain.co.uk". message.

BTW, spammers, you shouldn't bank on anyone checking out your links if hemorrhoids or payday loans appears in the comment text.


Of course, this doesn't mean that the pharmaceutical pushers have been asleep at the switch. Tucked into recent batches of the snail-mail spam I get every two weeks or so have been pharmacy discount cards from Luscinia Health (LH) and Healthcare Alliance (HA).

The LH card never expires and is recognized for the savings by ABC and the New York Times, and is touted by a set of glowing testimonials on the back of the LH flyer.

As for the HA cards - there were two of them, plus two pharmacy discount key tags, in the mailing - they have no fees, now or ever: there are no forms, no maximums, and no exclusions; moreover, HA encourages its card users to give the extra card or key tag to anyone who could save money on prescription medications and offers a Web site URL and toll-free phone number to request more cards. For more on HA and its cards, check out this blog post.

Tuesday, August 13, 2013

Bluebird7

We finish the "Notes on the Bluebird Template" series with a quick run through some heretofore-unaddressed topics.

The document title

The template's title element holds a <$BlogPageTitle$> Blogger tag.

<html><head><title><$BlogPageTitle$></title>

The <$BlogPageTitle$> tag is briefly described in Blogger's "Template Tags: defined" article; it is replaced by a "smart title" whose text depends on whether the page is the main page, an archive page, or an individual post page.

The <$BlogPageTitle$> tag can be precisely defined in terms of other Blogger tags discussed earlier in this series.
(1) At the main page,
<$BlogPageTitle$> = <$BlogTitle$>,
that is, it returns the title of the blog.
(2) At an archive page,
<$BlogPageTitle$> = <$BlogTitle$>: <$BlogArchiveName$>,
i.e., it returns a Blog Title: Archive Index Date string,
e.g., reptile7's JavaScript blog: January 2010.
(3) At an individual post page,
<$BlogPageTitle$> = <$BlogTitle$>: <$BlogItemTitle$>,
i.e., it returns a Blog Title: Post Title string.

You can use JavaScript to create your own smart titles if you are so inclined, something like:

if (mainpage) document.title = mainpage_title_code;
if (archivepage) document.title = archivepage_title_code;
if (itempage) document.title = itempage_title_code;


Metatemplate

The template head concludes with a <$BlogMetaData$> Blogger tag.

<head><title><$BlogPageTitle$></title>
<style type="text/css"> ... </style>
<!-- Meta Information -->
<$BlogMetaData$>
</head>


At reptile7's JavaScript blog <$BlogMetaData$> is replaced by four script elements, three meta elements, seven link elements, and two style elements - about twice as much stuff as the <$BlogMetaData$> sample output that appears in the aforecited "Template Tags: defined" article. No, I am not going to put my <$BlogMetaData$> output in front of you, but I do want to draw attention to one of its elements, namely, a meta element that specifies the document character encoding, because the formal validation of a document requires the presence of such an element:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

The Web Design Group maintains reasonably good pages on the meta element and the link element if you could use some help in crafting these elements.

Template download

I could offer you a shiny, spiffed-up Bluebird template that incorporates the changes I would make to it. But perhaps you would rather make your own changes, and for that reason I would just as soon offer you the original, uncut template for you to fold, spindle, and mutilate as you see fit. Go to this page and copy/paste what you see.

The big space issue

In the course of doing homework for this series I came across this "Blogger Buzz" page that references user complaints about the big space at the top of ... blogs using the Bluebird template. To decrease the big space, the post's author recommends that users add a

#main #menu { position: absolute; right: 21px; }

rule to the template's style block. I looked at that rule and said, "This isn't going to do anything": the menu div is off to the side - indeed, it is removed from the normal flow of the document by virtue of being floated - and shouldn't be playing a role in the big space issue. In the event, replacing the menu div's float:right; style declaration with the position:absolute;right:21px; declaration set had no effect.

Inspection of the CSS for the template divs at the top of the page allows one to quickly see which stylings are causing the big space issue; here are the changes you want to make:
(1) Get rid of the Title div's padding-top:10px; setting (or decrease it to a smaller value).
(2) Shrink the Title div's font-size to 32px (as though it were an h1 heading).
(3) Lose the DateHeader div's margin-top:30px; setting (or decrease it to a smaller value).
That'll do it, folks.

The "Simple" template

For this blog I opted to use a new "Simple" Blogger template. Skimming through the Simple template source gives me the feeling that I'm looking at a parody of a Web document: there are 144 divs in this thing, can you believe that? Running the first The Reptile7 Metablog post through the W3C's markup validator generates 51 errors and 6 warnings - impressive, huh?

The template's Template zone concludes with a Revert to classic templates section via which I can "revert" to Blogger's Rounders classic template if I so choose; for that matter there's nothing stopping me from replacing the Simple template source with the Bluebird template source. However, a classic template precludes access to many new features such as the template designer - features that I by and large couldn't care less about. Actually, there is one such feature that is relevant to what I do: I can execute JavaScript with the Simple template (as long as there aren't any < characters in that JavaScript).

One very annoying aspect of the Simple template: I cannot check links in Preview mode (as I can at my Bluebird blog). I am able to work around this problem but Blogger really needs to get it sorted out.

We will probably return to non-technical territory in the next post.

Friday, August 2, 2013

No Comment

OK, it's time for me to eat some crow. My approach to incorporating a simple comments facility into an ordinary Web page didn't work out as well as I envisioned it would. But let me tell you about it anyway, why not? (At the least you can have a good laugh at my expense.)

The HTML

The first thing we need is a text field into which the user can enter a comment: the most basic choice for this field is a textarea box (that's what Blogger uses - check the source of this page). Second, we should put a text box for the user's identity/name just above the textarea box. Third, after the textarea box we'll want a button that when clicked posts the user's comment.

<form id="inputForm" action="" method="">
Your Name: <input id="nameInput" name="username"><br>
Type your comment into the field below:<br>
<textarea id="commentTextarea" name="usercomment" cols="50" rows="10"></textarea><br>
<button id="commentButton" type="button">Click here to post your comment</button>
</form>


We will load the user's comment into a commentDiv div, which we'll place above the inputForm form:

<div id="commentDiv"></div>
<form id="inputForm" action="" method="">
...


Comment display

We can display the user's comment and identity by writing the values of the commentTextarea and nameInput fields to the innerHTML property of the commentDiv div. The innerHTML property was introduced by Microsoft for IE 4, has long had cross-browser support, and is currently on track to be standardized in a DOM Parsing and Serialization specification.

document.getElementById("commentButton").onclick = function ( ) {
    document.getElementById("commentDiv").innerHTML += document.getElementById("commentTextarea").value + "<br>"
    + "- posted by: " + document.getElementById("nameInput").value + "<br><br>";
    document.getElementById("commentTextarea").value = ""; }


The preceding function also clears the textarea box by setting its value to an empty string.

Remembering the user

Naturally we will want to display the user's identity in the nameInput field if the user returns to our page; we can do this by putting the identity in an HTTP cookie when the button is clicked

/* Add the following code to the commentButton.onclick function: */
var expDate = new Date( );
expDate.setFullYear(expDate.getFullYear( ) + 1);
document.cookie = "myTotallyUniqueCookieName=" + encodeURIComponent(document.getElementById("nameInput").value)
+ "; expires=" + expDate.toUTCString( );


and then retrieving the identity and writing it to the nameInput field's value upon a return visit.

window.onload = function( ) {
    var nameIndex = document.cookie.indexOf("myTotallyUniqueCookieName");
    if (nameIndex != -1) {
        var valueIndex = document.cookie.indexOf("=", nameIndex) + 1;
        var endstr = document.cookie.indexOf(";", valueIndex);
        if (endstr == -1) endstr = document.cookie.length;
        document.getElementById("nameInput").value = decodeURIComponent(document.cookie.substring(valueIndex, endstr)); } }


Setting the cookie

• The cookie's expDate expiration date is set one year into the future by the setFullYear( ) command.

• It is left to the reader to come up with a suitable myTotallyUniqueCookieName for the cookie's name attribute value.

• The encodeURIComponent( ) operation will be unnecessary for most user identities - we wouldn't need it for a Joe, a Mary Ann, or a reptile7 - but at least when using Safari we would need it (and its companion decodeURIComponent( ) operation in the window.onload function) for a name like Günther or Thérèse that strays outside the ASCII character range.

Getting the cookie

• Mozilla's current stringObject.indexOf( ) page is here.

• The document.cookie property gives a name1=value1; name2=value2; ... return for the cookies it holds. The nameIndex variable indexes the starting m of myTotallyUniqueCookieName; for a first-time visit, nameIndex is -1 and therefore nothing happens. The valueIndex variable indexes the first character of the user input we are fishing for; the endstr variable bounds the end of the user input.

Demo

In the iframe below:
(1) Enter your name or other identity into the Your Name field.
(2) Type something into the textarea box; your textarea input may contain any mixture of text and HTML markup*.
(3) Click the button.
(*If I may make a little suggestion, use
<span style="color:red;">This is red text</span>
for your textarea entry and see what you get.)



The isolated iframe src page is here - check its source for the full coding.

There's just one not-so-little problem with my comments facility. The innerHTML assignment does not permanently write a comment to the page: refresh the page and the comment will be gone. Relatedly, other users will not see your comment and you won't see their comments. Clearly, this is something you cannot do solely on the client side; it is necessary to store comments on the server side and then use the comments to dynamically write the page for its users. (Man, did I dream up this idea before my morning coffee or something?)

We'll wrap up the "Notes on the Bluebird Template" series in the following entry - we'll chat a bit about what happens in the document head and then maybe I'll have a few comments about the so-called "Simple" template that this blog uses.

Saturday, July 27, 2013

Notes on the Bluebird Template, Part 5

It's way past time that we got to the post part of the Bluebird template, and we'll do that today. The template's <BlogDateHeader> ... </BlogDateHeader> node, which we discussed two entries ago, is followed by a Post div

.Post { margin-bottom: 20px; font-size: 15px; padding-right: 15px; line-height: 22px; font-family: arial, helvetica; color: black; }
...
<div class="Post"> ... </div>


that contains the post title, the post itself, and a byline for the post.

The post title

Blogger assigns a multidigit ID to each of my posts; this ID serves as a fragment identifier for an anchor that precedes the post title.

<div class="Post">
<a name="<$BlogItemNumber$>"> </a><br />
...the post title...


FWIW, 7217738745400984168 is a typical <$BlogItemNumber$>. If there's a link somewhere to this anchor, I can't find it. Keep the anchor if you want, but I'd throw it out.

The anchor is followed by a somewhat-confusing block of code:

<BlogItemTitle>
<span class="PostTitle">
<BlogItemURL><a href="<$BlogItemURL$>"></BlogItemURL>
<$BlogItemTitle$>
<BlogItemURL></a></BlogItemURL>
</span><br />
</BlogItemTitle>


As you would guess, the post title is the replacement text for the <$BlogItemTitle$> reference. But what about the rest of it? The <BlogItemURL> ... </BlogItemURL> nodes and the link markup they contain are/were related to a "Link field" feature that Blogger has evidently abandoned. Moreover, the <BlogItemTitle> ... </BlogItemTitle> node seems to have a purely descriptive purpose, i.e., it doesn't do anything to the post title as far as I can tell.

The title is styled as follows:

.PostTitle { font-size: 16px; font-weight: bold; font-family: arial, helvetica; }

The post

...
</BlogItemTitle>
<$BlogItemBody$><br />


The post is the replacement text for a <$BlogItemBody$> reference that immediately follows the BlogItemTitle node. The post text is styled by the font-size, line-height, font-family, and color property declarations in the .Post { ... } style rule given earlier.

The post and its title are taken from their respective input fields at the "Create post" or "Edit post" page.

The post byline

Here is a typical reptile7's JavaScript blog post byline:

The post byline

The byline is held by a PostFooter span:

.PostFooter { margin-bottom: 10px; margin-left: 0px; color: gray; font-size: 10px; }
...
<span class="PostFooter"> ... </span>


The byline begins with a
- posted by <$BlogItemAuthorNickname$>
string; the <$BlogItemAuthorNickname$> reference returns the author's Display Name as set in the Identity section of the Edit User Profile page.

Next we have the post's 'permalink':

@ <a href="<$BlogItemPermalinkURL$>" title="permanent link"><$BlogItemDateTime$></a>

<$BlogItemPermalinkURL$> returns the URL of the post's individual post page; as for the link text, <$BlogItemDateTime$> returns a value based on the selected option of the Timestamp Format selection list in the Formatting subsection of the Dashboard Settings zone.

(A timestamp is not meant to be a dynamic feature and should not be created via a client-side script. If you want to append a timestamp to a block of content, then you should look at your watch, say "It's 2:53 in the afternoon," and type 2:53 PM into a suitable element - at least that's what I would do.)

If we're at the main page or one of the archive pages and if comments on the post are allowed, then the post's permalink is followed by another link that points to a separate "Post a Comment" page and whose text indicates the number of published comments the post has.

<MainOrArchivePage><BlogItemCommentsEnabled>
<a href="<$BlogItemCommentCreate$>"<$BlogItemCommentFormOnclick$>><$BlogItemCommentCount$> comments</a>
</BlogItemCommentsEnabled></MainOrArchivePage>


<MainOrArchivePage> </MainOrArchivePage> are "conditional tags" à la the <ItemPage> </ItemPage> construct we encountered in Part 2 of this series.

• The <BlogItemCommentsEnabled> ... </BlogItemCommentsEnabled> node is turned on or off if comments on the post are enabled or not, respectively:

Post settings

<$BlogItemCommentCreate$> returns the URL of the "Post a Comment" page. Bizarrely, <$BlogItemCommentFormOnclick$> returns a JavaScript statement that sets location.href to the <$BlogItemCommentCreate$> URL:

location.href = post-a-comment-pageURL;

According to Blogger's "Comments Tags" page, <$BlogItemCommentFormOnclick$> includes the code that opens the link in a popup window, if you have that option selected - an option that Blogger seems to have abandoned. In practice, the browser ignores the location.href assignment (no errors are thrown): in the Notes on invalid documents section of the HTML 4.01 Specification, the W3C stipulates, If a user agent encounters an attribute it does not recognize, it should ignore the entire attribute specification (i.e., the attribute and its value). You can alternatively give the link a target="_blank" attribute in order to open it in a new window.

• As for the <$BlogItemCommentCount$> in the link text, I trust you can figure that one out.

The PostFooter span concludes with a <$BlogItemControl$> reference, which is replaced by
(1) a Email Post image-link to an "Email Post to a Friend" page and
(2) a Edit Post image-link to the "Edit post" page via which the post can be edited.

I am not inclined to discuss the Comments part of the Bluebird template; as noted in Part 1 of this series, my concern here is in applying the Bluebird template to the creation of normal Web pages vis-à-vis reproducing the template's blog-centric features. But then I thought, "Is it really that difficult to add a simple comments facility to an ordinary Web page?" As a matter of fact, it isn't - I'll show you what I came up with in the following entry.

Monday, July 15, 2013

Notes on the Bluebird Template, Part 4

A sidebar adorns the right side of the Bluebird template.

The Bluebird template sidebar

The sidebar is framed by a <div id="menu"> ... </div> div. The menu div is the second-in-source-order div in the template and the first child of the main div; both on the page and in the source, the menu div appears where it does because it is floated right. Here's the menu div's CSS:

#menu { border-left: 1px solid #000; border-bottom: 1px solid #000;
float: right; padding: 10px; width: 160px;
margin: 0px 0px 10px 10px; background-color: #eee; }


The menu div has an #eeeeee background color, which I do not particularly care for but has never bothered me to the point that I felt a burning need to change it.

The sidebar content can be divided into three sections: a description section, a profile section, and an archives section.

Description

The Basic subsection of the Dashboard Settings zone features a Description field for describing the blog.

The Basic subsection of the Settings zone

As shown by the preceding screen shot, the Description field's value can contain textual markup (for two paragraphs and a link in my case).

The menu div's first child is a Description div that holds the Description field value, which is the replacement text for a <$BlogDescription$> reference.

#Description { padding: 0px; padding-top: 10px; font-size: 12px; font-weight: normal; }
...
<div id="menu">
<div id="Description"><$BlogDescription$></div> ...


All of the padding properties have an initial value of 0 and therefore the padding:0px; style declaration can be removed. The font-weight property's initial value is normal and therefore the font-weight:normal; declaration can also be thrown out.

Profile

(N.B. Some versions of the Bluebird template do not have a SideBar div and wrap the archives section in an Archives div. What I describe in this and the next sections was true of the Bluebird template in March 2005, when I began blogging.)

#SideBar { font-size: 12px; margin-top: 15px; }
...
<div id="SideBar">
<!-- The profile section: -->
<$BlogMemberProfile$>
<!-- The archives section: -->
...
</div>


The menu div's second child is a SideBar div that holds both the profile and archives sections of the sidebar. I access my Blogger profile via a widget in the upper-right-hand corner of the Dashboard; if at my Edit User Profile page I
(a) upload a myPhoto.jpg Profile Photo,
(b) enter a Display Name in the Identity section (as is required),
(c) complete the Location section, and
(d) provide an Introduction in the Extended Info section, then
the <$BlogMemberProfile$> reference in the SideBar div is replaced by the following code:

<div id="profile-container">
<h2 class="sidebar-title">About Me</h2>
<dl class="profile-datablock">
<dt class="profile-img">
<a href="http://www.blogger.com/profile/10603056373768030580">
<img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJm5Hz5bzABaho0GwcfwRK0uTTAKpSlE4uUZt0cKBFevzwfqT-Rr2l6OGLZOM21qhiFhnUsqeWw0N_7w57C0LWrgHeeSJ8ZcuCIH7fPrEaXAJ0VQc_iNow5HhQDMr6WjuTJ379qWZSYF-W/s1600/myPhoto.jpg" width="80" height="58" alt="My Photo">
</a>
</dt>
<dd class="profile-data">
<strong>Name:</strong>
<a rel="author" href="http://www.blogger.com/profile/10603056373768030580"> A. Peak </a>
</dd>
<dd class="profile-data">
<strong>Location:</strong>
New Orleans, LA, United States </dd>
</dl>
<p class="profile-textblock">Introduction text...</p>
<p class="profile-link"><a rel="author" href="http://www.blogger.com/profile/10603056373768030580">View my complete profile</a></p></div>


In-source-order commentary

• The sidebar-title h2 inherits a font-size of 12px from the SideBar div -
h2.sidebar-title { font-size: inherit; }
- pretty small for an h2, whose default font-size is 24px.

• The HTML dl, dt, and dd elements are detailed here.

• The profile-img dt is given an inline rendering (the dl, dt, and dd elements normally have a block-level rendering), but its only content is an image-link whose image component - the myPhoto.jpg photo - is floated left:
.profile-img { display: inline; }
.profile-img img { float: left; margin: 0 10px 5px 0; }

The former rule serves no purpose, whereas the latter declaration set should be applied to the profile-img dt:
.profile-img { float: left; margin: 0 10px 5px 0; }

• The Name: and Location: labels are given a block-level rendering by:
.profile-data strong { display: block; }

• The margin-left of the profile-textblock and profile-link p(aragraph)s is set to 0 (with respect to the SideBar div, their containing block):
.profile-textblock, .profile-link { margin-left: 0px; }
These settings are not overridden by the subsequent
p { margin: 0px 10px 10px 10px; }
rule in the style block.

The profile code contains not one, not two, but three links to my 10603056373768030580 User Profile page - a bit overkill, wouldn't you say? The link is fair enough but I would lose the first two of these links.

Archives

<!-- The archives section: -->
<strong>Archives</strong><br />
<BloggerArchives>
<a href="<$BlogArchiveURL$>"><$BlogArchiveName$></a><br />
</BloggerArchives>
<script type="text/javascript" language="Javascript">
if (location.href.indexOf("archive") != -1)
    document.write("<strong><a href=\"<$BlogURL$>\">Current Posts</a></strong>");
</script>


The <BloggerArchives> ... </BloggerArchives> node is a container for links to the blog's archive pages. The <$BlogArchiveURL$> reference is replaced by a URL for an archive page. The replacement text for the <$BlogArchiveName$> reference is based on the selected option of the Archive Index Date Format selection list in the Formatting subsection of the Dashboard Settings zone.

<a href="http://reptile7.blogspot.com/2005_03_01_archive.html">March 2005</a><br>
<a href="http://reptile7.blogspot.com/2005_04_01_archive.html">April 2005</a><br>
<a href="http://reptile7.blogspot.com/2005_05_01_archive.html">May 2005</a><br>
<a href="http://reptile7.blogspot.com/2005_06_01_archive.html">June 2005</a><br> <!-- Etc. -->


If we're at an archive page, then a script appends to the link list a Current Posts link that points to the main page (we previously encountered the <$BlogURL$> reference in our discussion of the Title div).

Script notes
(1) The language attribute of the script element is deprecated, but you knew that, right?
(2) If you're going to validate the page, then be sure to escape the </ character sequences in the a(nchor) and strong element end-tags, i.e., document.write("...Current Posts<\/a><\/strong>");.

One last point:
When my Archives link list began getting unwieldy, I capped the height of the SideBar div at 300px and set the div's overflow to auto so as to clip but provide scrollbar access to the beyond-the-div part of the list - this is not part of the template but I thought I'd give it a quick mention.

We'll discuss the template's Post div in our next installment.

Thursday, July 4, 2013

Notes on the Bluebird Template, Part 3

Having covered the Bluebird template's Title div in the previous post, we move on today to the template's date header.

The date header sits between the blog title and the post title

Proceeding in source order:
• The Title div element's next sibling* is a <Blogger> ... </Blogger> node (for lack of a better word).
• The Blogger node's first child* is a <BlogDateHeader> ... </BlogDateHeader> node.
• The BlogDateHeader node contains a class="DateHeader" div element that holds the date header, which is the replacement text for a <$BlogDateHeaderDate$> reference.
(*I am ignoring inter-tag white space for my use of these terms.)

<div id="Title"> ... </div>
<Blogger>
<BlogDateHeader>
<div class="DateHeader"><$BlogDateHeaderDate$></div>
</BlogDateHeader> ... </Blogger>


The DateHeader div is styled as follows:

.DateHeader { border-bottom: solid 1px #c3cfe5;
font-size: 18px; text-align: left; margin-top: 30px; width: 300px;
margin-bottom: 0px; color: gray; font-weight: bold; }


If more than one post is published on a given date, the date header
(a) is displayed at each individual post page but
(b) only appears once for those posts at the main page or at an archive page.

How to configure the date header

At the www.blogger.com/home Dashboard, go to the Settings zone

Blogger Dashboard zones

and then to the zone's Language and formatting section.

The Setting zone's Language and formatting section

The Formatting subsection features a Date Header Format selection list of 16 date header options from which to choose.

Coding the default date header

As shown by the preceding screen shot, the default Blogger date header has a Day, Month Date (preceded by a 0 if in the 1-9 range), Year format:



Creating this format with JavaScript is not at all difficult:

<div id="dateDiv" class="DateHeader"></div>
<script type="text/javascript">
var now = new Date( );
var days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var date = ((now.getDate( ) < 10) ? "0" : "") + now.getDate( );
var today = days[now.getDay( )] + ", " + months[now.getMonth( )] + " " + date + ", " + now.getFullYear( );
document.getElementById("dateDiv").textContent = today;
</script>


Quick script deconstruction

(1) We begin by creating a now Date object.
(2) We set up a days array of day names that maps onto the 0-6 returns of the Date object's getDay( ) method.
(3) We set up a months array of month names that maps onto the 0-11 returns of the Date object's getMonth( ) method.
(4) We get the date of the month; if the date is in the 1-9 range, we prepend a 0 to it.
(5) We piece together the various parts of the date header and assign the resulting string to a today variable.
(6) We load today into the DateHeader div.

Mozilla's current Date object page is here; go here for links to pages for the getDay( ), getMonth( ), getDate( ), and getFullYear( ) methods of the Date object; go here if you are unfamiliar with the ?: conditional operator.

It is left to the reader to adapt the above code to other Blogger date header formats.

Link styling, take two

In the previous post I neglected to mention that the Bluebird template's style block also contains a
a { text-decoration: none; }
rule that will de-underline all links on the page even if we throw out the style block's
#Title a { text-decoration: inherit; color: inherit; }
rule. To ensure that all of our links are blue and underlined, we should throw out the latter rule and change the former rule to
a { color: blue; text-decoration: underline; }.

We'll discuss the template's sidebar in our next installment.

Wednesday, June 26, 2013

Notes on the Bluebird Template, Part 2

Welcome back to our discussion of the Blogger.com Bluebird classic template. The Bluebird template very prominently displays the blog title at the top of the page, and that title is as good a place as any to begin our template deconstruction. The blog title is held by an id="Title" div, whose full coding is given below:

#Title { font-size: 43px; padding-left: 0px; padding-top: 10px; text-transform: none; }
#Title a { text-decoration: inherit; color: inherit; }
a:hover { background-color: #c3cfe5; }
...
<div id="Title">
<ItemPage><a href="<$BlogURL$>"></ItemPage>
<$BlogTitle$>
<ItemPage></a></ItemPage>
</div>


The Title div is the fifth-in-source-order div in the template; it is the second child of the main div that frames all of the non-background content. (We will discuss the Title div's previousSibling, the menu div that contains the sidebar on the right side of the template, at a later point.)

The blog title (reptile7's JavaScript blog in my case) is the 'replacement text' for the <$BlogTitle$> reference. The title's font size is set to 43px, which is about 33% larger than that for h1 element text and which gives the title a bolded appearance. A padding-top:10px; style pushes the title down a bit from the top edge of the main div. BTW, the CSS text-transform property's initial value is none and therefore the text-transform:none; declaration can be thrown out.

If the Title div's containing document is for the blog's main page (http://reptile7.blogspot.com/) or for one of the blog's archive pages (e.g., http://reptile7.blogspot.com/2010_01_01_archive.html), then the div's only content will be the blog title. However, if the div's containing document is for one of the blog's individual post pages (e.g., http://reptile7.blogspot.com/2013/05/subtract-other-items-update.html), then the <ItemPage></ItemPage> conditional tags will wrap the blog title in an anchor element with a href attribute set to <$BlogURL$>, whose replacement text is the URL for the blog's main page. Long story short: At an individual post page, the blog title will link to the main page.

Style-wise, our new <a href="<$BlogURL$>"> ... </a> link
(a) inherits the text-decoration of its Title div parent, i.e., it won't be underlined (the initial value of the CSS text-decoration property is also none),
(b) inherits the color of its Title div parent, i.e., it'll be black for almost all users, and
(c) is given a #c3cfe5 background-color if we mouseover it.
I myself like blue and underlined links, and consequently would throw out the #Title a { text-decoration: inherit; color: inherit; } style rule.

A non-database ItemPage

We can easily duplicate the ItemPage functionality with a bit of JavaScript/DOM programming.

var mainpage = location.pathname == "/";
var archivepage = location.pathname.indexOf("archive") != -1;
var itempage = !mainpage && !archivepage;

window.onload = function ( ) {
    var titleDiv = document.getElementById("Title");
    if (itempage) {
        var titleLink = document.createElement("a");
        titleLink.setAttribute("href", "http://myblog.blogspot.com/");
        titleLink.textContent = "Title of My Blog";
        titleDiv.appendChild(titleLink); }
    else titleDiv.textContent = "Title of My Blog"; }


At the blog's main page the location.pathname return is / and at an archive page location.pathname contains archive; by process of elimination, we are at an individual post page if location.pathname is not / and does not contain archive.

If we are at an individual post page, then we
(1) create an empty anchor element,
(2) equip the anchor element with a href attribute that points to the main page's URL,
(3) load the blog title into the anchor element, and finally
(4) load the completed anchor element into the Title div.
If we are at the main page or an archive page, then we simply load the blog title into the Title div.

Of course, you might prefer to ditch the ItemPage/anchor markup and just go with a
<div id="Title">Title of My Blog</div> title, and that would be fair enough.

Blogger tags, take two

In the previous post I stated that the <tagName> ... </tagName> construct is an XML element, but I'm not so sure about that now. On the one hand, the browser sees it as an element node, it serves a descriptive purpose to an extent, and the tagName name is case-sensitive. However, it is clear from this post that <ItemPage></ItemPage> at least is as much a subroutine call - an onIndividualPostPage event handler, if you will - as it is a structural unit. Perhaps we should refer to <tagName> ... </tagName> as a function or operation - these terms are not wholly satisfactory but they're better than "tags", which implies a static structure.

We'll discuss the template's date header in our next installment.

Monday, June 17, 2013

Notes on the Bluebird Template, Part 1

From time to time I get comments on the 'skin' of my technical blog:
I sегiouslу lοvе your website. Eхcellent colоrs & theme. Dіd уou creаte thіs website yοurself? Рlease reply back aѕ I'm trying to create my own personal site and would like to find out where you got this from or exactly what the theme is called. Thank you! Feel free to visit my weblog: nagelpilz
reptile7's JavaScript blog makes use of Blogger.com's "Bluebird" classic template, which was created by Evhead and Glish. I thought it would be worthwhile to take a look at the Bluebird template given that it is no longer available from Blogger.com - as you may know, resurrecting outdated code is a 'theme' of what I do.

Basic structure

The Bluebird template has a simple structure that is based on a set of ten div elements. These divs have id or class names that (for the most part) straightforwardly describe what they contain: a main div frames all non-background content, a Title div holds the blog title, each post sits in a Post div, etc.

The template look

The Bluebird template

The Bluebird template's head element holds a style block that styles the template's body element, the aforementioned div elements, and other body element descendants. The template's characteristic look - its blue-stripe frame - results from the body's background-color:#c3cfe5; and the main div's margin:20px;.

<style type="text/css">
body { margin: 0px 0px 0px 0px; font-family: arial, helvetica; background-color: #c3cfe5; }
#main { margin: 20px; border: 1px solid #000; background-color: #fff; padding: 0px 0px 15px 15px; }
...
</style>


As shades of blue go, #c3cfe5 is a bit dull, but if we pushed the body background to pure blue, then it wouldn't be quite so bluebird-y, would it?

Template tags

Like all of the Blogger.com classic templates, the Bluebird template is littered with what are called "Blogger tags" or "template tags", of which there are two main types:

(1) <tagName> ... </tagName>

Although the author of the aforelinked "Template Tags: defined" article can't be bothered to say so, these "tags" are in fact XML elements. Some of these elements serve as containers for repeating units of content.

(2) <$tagName$>

I don't know what exactly these things are, but I can tell you some things about them. These "tags" are some sort of database-related construct, and they function just like SGML entity references, more specifically, they are replaced by text or markup from a database when a template page is rendered by the browser. (And given their resemblance to SGML entity references, I think it was a bad call on Blogger's part to give them a markup-like appearance - a &tagName; formulation would have been much more appropriate.) Their Node.nodeName return is #text, meaning they are objects that implement the Core DOM's Text interface.

My primary goal in writing about the Bluebird template is to set out the template's HTML and CSS so that a 'Weekend Silicon Warrior' can apply the template to the creation of normal Web pages, and consequently I will keep discussion of the template tags to a minimum (we won't be able to avoid them completely). We'll take up the other highlights of the template in the following post.

Friday, June 7, 2013

What You Are Is Lonely

About three weeks ago I checked out Tegan and Sara's Heartthrob album from my local library. For some reason I had it in my head that Tegan and Sara make 'jangle pop' à la early R.E.M.; corroboratingly, upon downloading the CD track names from the Web, the responding database assigned "Indie Rock" to the iTunes Genre header. Boy, was I in for a surprise! Heartthrob is a modern pop record with a new-wave sensibility; sound-wise, Tegan and Sara have more in common with the Go-Go's or even ᗅᗺᗷᗅ than with the Indigo Girls.

Although somewhat derivative in places, Heartthrob is overall an enjoyable listen. My favorite cut on the album is "Drove Me Wild", and "Goodbye, Goodbye" is almost as good - these songs definitely belong on the radio. I also appreciate the Radiohead-ish artsiness that adorns some of the album's later tracks; it would be great to hear an entire record in the vein of "Now I'm All Messed Up".

Checking the credits, I see that most of Heartthrob was produced by Greg Kurstin. Hope springs eternal that someday Geggy Tah will reunite - Sacred Cow is my favorite record from the 1990s - but I'm not holding my breath on that.

Bronski Beat's The Age of Consent will be our next musical selection.

Wednesday, May 29, 2013

Just Say No, Part 2

I also saw Sweet at the Chestnut Cabaret in 1990 or so. Or perhaps I should say I saw half of Sweet. The band was led by guitarist Andy Scott, and the late Mick Tucker was behind the drum kit, but vocalist Brian Connolly and bassist Steve Priest were replaced by other performers. The show was OK - gratifyingly the band's regular set included "Sweet F.A.", one of my favorite Sweet songs - but I left that night feeling that I hadn't seen the real Sweet on account of Connolly's absence.

A few years later, during my time in Britain, I chanced upon an article on Connolly in a tabloid; this was shortly after the release of the film Wayne's World, which to my understanding features "The Ballroom Blitz" in some way (I haven't seen it). Frightfully, the article reported that Connolly was confined to a wheelchair - it was accompanied by a photograph of Connolly in a wheelchair - and that he had a medical condition that caused him to shake constantly. Nonetheless, the article put a positive spin on the situation, saying that Connolly was heartened by Wayne's World-triggered public re-interest in Sweet and that he wanted to go out on the road and perform with Sweet as he once did.

But that photo, oh my goodness, what happened? To make a long story short, Connolly had 'stepped into the ring' with alcohol, and lost. For a period of about ten years - from the mid-1970s to the mid-1980s - he drank and drank and drank and as a result ran his health into the ground. By the time he finally woke up and realized "This has to stop" the damage had been done. For the last ten years of his life, his body was not much more than a shell; he limped to the age of 51 before dying in early 1997.

In the song "Cooks County" from the Who's It's Hard, Pete Townshend, himself a Sweet fan, says:

So don't you abuse that body
It'll snap without assistance my friends

I thought of these lyrics when Whitney Houston died and I thought of them when Amy Winehouse died; they apply to Brian Connolly, to Elvis Presley, to a lot of people.

Speaking of Whitney Houston, at the time of her death a local talk-radio personality here in New Orleans, WRNO's John Osterlind, played an audio clip of her singing "The Star-Spangled Banner", and I have to say that it was as impressive a rendition of the national anthem as I have ever heard. At the height of her vocal powers, Houston was a force to be reckoned with. And now she and her talent are gone.

As much as we might wish we could go back in time and force people to take better care of themselves, it's just not possible to do that.

So be good to yourself: you can choose to follow Luscious Jackson's philosophy of "Live slow, die old". Sometimes fate deals you a bad hand - by all accounts Johnny Ramone took care of himself, and yet still died of prostate cancer in his mid-50s - but there is no need to tempt fate in this regard. To unnecessarily die before your time is neither heroic nor noble: it is a waste.

Friday, May 24, 2013

Reflections on... Foghat

In 1990 (give or take a year) I saw Foghat do a show at the Chestnut Cabaret in West Philadelphia. Back in the 1970s there was a brief period when I was really into Foghat, and I leapt at the chance to see Foghat in a small club. "Lonesome Dave" Peverett was the only member of the classic Foghat lineup on stage that night; indeed, if I recall correctly the band was billed as either "Lonesome Dave's Foghat" or "Dave Peverett's Foghat".

I own five Foghat albums: Energized, Fool for the City, Night Shift, Foghat Live, and Stone Blue. Looking back at those records, it is clear to me that Foghat was a band whose energy greatly surpassed its songwriting chops. (But hey, if you're not such great songwriters, then the least you can do is crank up the energy level, right?) My very favorite Foghat song is Energized's "Step Outside", a funky, atypical-for-Foghat track with a James Brown influence - "loosen up baby, 'cause time's getting tight" - it's a shame Foghat didn't do more songs like that.

Anyway, back to the show. The band's regular set was highlighted by (of course) Willie Dixon's "I Just Want to Make Love to You" and Stone Blue's "It Hurts Me Too"; the encore included Chuck Berry's "Maybellene". I'm sure the band also did "Slow Ride" and "Fool for the City" but I just don't remember them.

IMO the real attraction was Lonesome Dave himself. Peverett was a true professional who could sing, play rhythm guitar, and play lead guitar with equal aplomb; it was a pleasure to watch him perform. And as I watched him, it occurred to me that the 'Foghat identity' began and ended with Peverett: Foghat was Peverett and Peverett was Foghat, with the other band members being a superfluity, an assessment with which, I have no doubt, Peverett would have vehemently disagreed.

The only disappointing thing about the show was the poor turnout - there couldn't have been more than 20-25 people there - this was a band that was playing large venues at the time of Foghat Live. The small crowd did not seem to dampen Peverett's spirits, however. Towards the end of the set he even said that the band had a new record coming out, but I wondered, "How many people are going to buy that record?"

Sadly, Peverett died of cancer in early 2000. There's actually a current version of Foghat, with original drummer Roger Earl, thrashing around out there; it tours and has even released a few records. It's anyone's guess what Peverett would think of the present-day Foghat: maybe he would want the show to go on, and maybe he would say, "Give it a rest, lads"; ultimately it is up to the fans to determine how long it keeps plugging away.

Sunday, May 19, 2013

Listen to the Music

Without music to decorate it, time is just a bunch of boring production deadlines or dates by which bills must be paid.
- Frank Zappa

Every three weeks or so I hike over to my local library and check out a music CD. Listed below is a chronological tab of the CDs I have checked out since January 2006, when I began this activity.

Artist Title
Miles Davis The Complete Birth of the Cool
Jah Wobble's Invaders of the Heart Take Me to God
Paul McCartney Driving Rain
Yoko Ono/Ima Rising
Semisonic All About Chemistry
Fu Manchu California Crossing
Paul Simon Graceland
Ned's Atomic Dustbin Are You Normal?
Lisa Loeb Hello Lisa
Res How I Do
Everclear Sparkle and Fade
Ani DiFranco Evolve
Dashboard Confessional A Mark, a Mission, a Brand, a Scar
Everclear Songs from an American Movie, Vol. 2: Good Time for a Bad Attitude
Wheat Per Second, Per Second, Per Second... Every Second
U2 The Joshua Tree
Terry Radigan Radigan
The Afghan Whigs Gentlemen
Radiohead Kid A
The Rolling Stones Exile on Main Street
Pavement Brighten the Corners
R.E.M. Reveal
Radiohead Hail to the Thief
Yo La Tengo I Am Not Afraid of You and I Will Beat Your Ass
Yeah Yeah Yeahs Show Your Bones
Sara Evans Born to Fly
James Iha Let It Come Down
Juliana Hatfield Please Do Not Disturb
Simon & Garfunkel Bridge over Troubled Water
Bonnie Raitt Fundamental
Dixie Chicks Wide Open Spaces
U2 How to Dismantle an Atomic Bomb
Thom Yorke The Eraser
Maria Mena White Turns Blue
The Twilight Singers Twilight as Played by the Twilight Singers
Jessica Andrews Now
Meat Beat Manifesto Subliminal Sandwich
Jonatha Brooke 10¢ Wings
The Flaming Lips At War with the Mystics
Heather Myles Highways and Honky Tonks
Jackson Browne Running on Empty
Susan Werner I Can't Be New
Cheap Trick Rockford
Alannah Myles Rockinghorse
Philip Glass Songs from Liquid Days
Bananarama Pop Life
Bruce Springsteen Nebraska
Aretha Franklin Jump To It
Jonatha Brooke Steady Pull
Maria McKee Maria McKee
Peter Gabriel Us
Indigo Girls Come On Now Social
The Shamen En-Tact
SHeDAISY The Whole SHeBANG
The Bravery The Sun and the Moon
Björk Volta
Norah Jones Not Too Late
Radiohead In Rainbows
David Byrne Uh-Oh
The Juliana Hatfield Three Become What You Are
The Breeders Mountain Battles
Lily Allen Alright, Still
The Kills Midnight Boom
Sarah Harmer You Were Here
Veruca Salt American Thighs
Susanna Hoffs Susanna Hoffs
KT Tunstall Drastic Fantastic
Tori Amos Abnormally Attracted to Sin
Ace Frehley Anomaly
The Mars Volta Octahedron
Robert Plant Pictures at Eleven
Susan Tedeschi Wait for Me
Beth Orton The Other Side of Daybreak
The Rolling Stones Bridges to Babylon
Slash Slash
Gwen Stefani The Sweet Escape
Steve Vai Sound Theories Vol. I & II
Alannah Myles A-lan-nah
Indigo Girls Swamp Ophelia
Arctic Monkeys Humbug
Christina Aguilera Bionic
Sade Soldier of Love
Amy Winehouse Back to Black
Lucinda Williams West
Lou Reed Rock and Roll Heart
Death Cab for Cutie Narrow Stairs
Duffy Endlessly
R.E.M. Accelerate
P!nk Funhouse
Janis Ian God & the FBI
Madeleine Peyroux Careless Love
Joss Stone Introducing Joss Stone
Alison Krauss & Union Station Paper Airplane
She and Him Volume Two
Alanis Morissette Flavors of Entanglement
The Murmurs Blender
Veruca Salt Eight Arms to Hold You
Luscious Jackson Natural Ingredients
Donna Summer Crayons
Colbie Caillat Breakthrough
Alicia Keys The Element of Freedom
The Arcade Fire The Suburbs
Jeff Beck Emotion and Commotion
Radiohead The King of Limbs
Norah Jones The Fall
Jane's Addiction The Great Escape Artist
Katie Melua The House
The Flaming Lips Embryonic
Britney Spears Femme Fatale
Trisha Yearwood Where Your Road Leads
The All-American Rejects Kids in the Street
Fiona Apple The Idler Wheel Is Wiser Than the Driver of the Screw and Whipping Cords Will Serve You More Than Ropes Will Ever Do
Roberta Flack The Very Best of Roberta Flack
Andy Summers Synaesthesia
Sarah McLachlan Laws of Illusion
Christina Aguilera Back to Basics
The Mars Volta Noctourniquet
Madonna Hard Candy
Stephen Malkmus and the Jicks Mirror Traffic
And currently...
Tegan and Sara Heartthrob

Tuesday, May 14, 2013

Just Say No

As obscure as it is (or at least as I perceive it to be), my technical blog gets its fair share of comment spam. Historically, most of that spam has concerned pharmaceuticals in some way.

I've culled some favorites from my pharmaceutical spam collection and I'd like to share them with you. Not so surprisingly, the comments below were all authored by "Anonymous".

Our first two selections would seem to indicate that not everyone is using pharmaceuticals in a prescribed way:

buy ambien online ambien cr 12.5mg cost - ambien and alcohol party

buy ambien online ambien 6 hours of sleep - ways get high ambien

Of course, pharmaceuticals are not just for you and your partying friends. Who needs "The Total Transformation" (no, I am not going to provide a link for this) when you can give your kids some diazepam?

buy diazepam online diazepam dosage for kids - diazepam emergency drug

Don't forget to save some for the family dog:

buy tramadol online reviews tramadol online pharmacy - tramadol 50mg used dogs

Just what Fido needs: some tramadol to chill him out. And I wouldn't want my fellow ailurophiles to feel left out:

buy valium online cat anxiety valium - valium online order

We've even got one for the walrus owners in the audience - goo goo g'joob!

cheap ambien no prescription ambien walrus needs more robot - ambien side effects for the elderly

Next, we have two "soma" comments. Per Aldous Huxley's Brave New World, I had thought that soma was a fictional thing - clearly I'm behind the curve on all of this.

buy soma buy soma online us pharmacy - buy soma store

buy soma where to buy soma bras - what is carisoprodol 350 mg (soma)

Soma bras?? My imagination goes to work: someone out there is selling bras that have been soaked in a soma solution so that wo/men can ingest soma by wearing them. (I hope I'm not giving anybody any ideas here.) As it happens, there is a lingerie retailer called Soma Intimates.

Moving on, if you're in the market for some fake xanax bars, we've got you covered:

buy xanax online no prescription cheap xanax drug test navy - order fake xanax bars

So how exactly are these people any different from illegal drug pushers? Oops, I spoke too soon:

xanax online Boston how to buy xanax online forum - xanax bars mixed with weed

Some of this spam gets through the Blogger spam filter and ends up in the "Published Comments" section; here are a few examples:

vimax, vimax, vimax vimax, vimax, vimax vimax, vimax, vimax vimax, vimax, vimax vimax, vimax, vimax

buy xanax online xanax overdose brain damage - signs drug abuse xanax

buy tramadol usa tramadol high triglycerides - tramadol death by overdose

I guess the first guy is really into vimax, huh? As for the brain damage and death by overdose of the latter two comments, it sure makes you want to rush out and try some xanax and tramadol, doesn't it?

Needless to say (and my snide commentary aside), America has a serious drug problem, and we are not talking meth, crack, or pot. Where is Nancy Reagan when we need her?

Thursday, May 9, 2013

Unmasked

I began blogging in March 2005. For exactly seven years I maintained an 'anonymity shtick', more specifically, I didn't specify my name or an email contact in the menu div in the upper-right-hand corner of my blog template; I noted that I lived in New Orleans and that was it.

In retrospect my use of an anonymity shtick was probably inspired by my view of album cover art; as someone who came of age prior to the 'death of vinyl', it occurred to me back in the day that the coolest album covers are those on which artists say as little about themselves as possible - think Led Zeppelin's Houses of the Holy or Pink Floyd's Wish You Were Here. I could relatedly say that anonymity added a bit of mystique to my otherwise thoroughly nerdly identity. (I am very much the nerd I would seem to be from my blog: what you see is what you get, folks.)

As regards writers who work in the Web coding field, anonymity is not at all uncommon. If you go through the lists of contributors at the bottom of Mozilla's JavaScript Guide and JavaScript Reference portals, you will see that almost all of those contributors use pseudonyms. HTML Goodies slinked into anonymity once founder Joe Burns cut his ties with the site. Neither the JavaScript Kit guys nor the DevGuru guys tell you who they are. So I was in pretty good company.

"But didn't you get bored with it after a while?" That I did. And I would have ditched my anonymity shtick a lot sooner were it not for my fear that I would get hit with an avalanche of spam were I to do so; thankfully that has not happened over the past year. (Now watch the spam roll in...)

The primary reason I ditched my anonymity shtick was that I wanted to 'raise my profile' as part of an inchoate plan to leverage my blog in an employment-related way - more on this in a future post. Besides the publicity and boredom factors, however, there was a little something extra that pushed me over the edge.

In mid-March 2012 - in Blog Entry #244 - I discussed an "Adding Rotating Images to Your Web Site" tutorial at the HTML Goodies site. The "Rotating Images" tutorial contains a small amount of layer element/object code even though layers have long been obsolete. (Actually, "obsolete" doesn't do the situation justice: layers are only supported by Netscape 4.x, and absolutely no one should be using Netscape 4.x in this day and age - the only people who should have Netscape 4.x on their computers are archivist types such as myself - it would be more accurate to say that layers are extinct.) This being the case, I felt that someone in charge at HTML Goodies should have stepped in and said to the tutorial author, "Dude, you need to get the layer code out of your article." But who would that someone be? The About HTML Goodies sector of HTML Goodies gives no information as to who is currently running the site.

Like other HTML Goodies tutorials, the "Rotating Images" tutorial is followed by a comment thread. HTML Goodies' comment threads are not moderated; the commenters on these threads are very much left to their own devices. The "Rotating Images" tutorial concerns animation, which is a classic JavaScript area, and the "Rotating Images" commenters were asking various animation-related questions but not getting any answers, and as I was reading through the comment thread I thought, "The HTML Goodies 'management' should be responding to at least some of these people." But again, HTML Goodies is silent on who makes up that management.

And all of a sudden anonymity didn't seem so cool, hip, or edgy, but rather unfocused, chaotic, and even incompetent to an extent: "Can't we do better than this?" And so shortly after finishing work on Blog Entry #244 I added my name and an email contact to the aforementioned menu div.

Of course, if there were anything controversial about what I do, then someone would have taken the trouble to 'out' me long ago, but there isn't (Henry Kissinger's academic politics are so vicious precisely because the stakes are so small dictum notwithstanding).

Getting back to writers who work in the Web coding field, the folks at the top of the food chain - the technologists who craft specifications for the W3C - do tell you who they are. I'm not in their league, but that doesn't mean I can't aspire to be in their league.

So here's to transparency, here's to accountability, here's to setting the bar high: here's to the end of anonymity.