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.