All Our Yesterdays by Jorges Luis Borges

Borges loved the sonnet, and I love his All Our Yesterdays (not Todos Nuestros Ayeres — the poem’s title was originally published in English*). And so I thought I’d translate the poem into English much like I did Borges’ Spinoza.

Robert Mezey has already translated All Our Yesterdays, but it doesn’t rhyme. I thought I’d translate the poem and preserve the rhyme, albeit structured differently. The original is rhymed ABBA CDDC EFFE GG. I’ve rhymed the translation in the classic Shakespearean form of ABAB CDCD EFEF GG.

All Our Yesterdays
I want to know: which who of all the whos
I’ve been is due my past? The boy who traced
out Latin lines hexameter that hues
lustrous of passing years have now effaced?
Perhaps that lad who sought those savage selves —
tigers and panthers — or the curves precise
of maps and charts in father’s library shelves
is he to whom belongs my past concise?
Or he who pushed a door ajar where lay
a dying man in everlasting sleep,
yes he the boy who kissed in the bright of day
the face departing, dead, forsaken deep?
I am all those who are no more. In vain
I am this night those lost to life’s domain.

All Our Yesterdays*
Quiero saber de quién es mi pasado.
¿De cuál de los que fui? ¿Del ginebrino
que trazó algún hexámetro latino
que los lustrales años han borrado?
¿Es de aquel niño que buscó en la entera
biblioteca del padre las puntuales
curvaturas del mapa y las ferales
formas que son el tigre y la pantera?
¿O de aquel otro que empujó una puerta
detrás de la que un hombre se moría
para siempre, y besó en el blanco día
la cara que se va y la cara muerta?
Soy los que ya no son. Inútilmente
soy en la tarde esa perdida gente.

* the original poem, written in Spanish, was published with the title All Our Yesterdays in English. The title references Macbeth, who said famously:

Tomorrow, and tomorrow, and tomorrow,
Creeps in this petty pace from day to day
To the last syllable of recorded time,
And all our yesterdays have lighted fools
The way to dusty death. Out, out, brief candle!
Life’s but a walking shadow, a poor player
That struts and frets his hour upon the stage
And then is heard no more. It is a tale
Told by an idiot, full of sound and fury,
Signifying nothing.

Retrying Selenium Tests

Selenium tests are dreamy: how spectacular that your whole UI can be given a right thrashing on a variety of browsers! But intermittent Selenium test failures… now, they are truly the bane of one’s existence, especially when they hold up progress in a continuous build environment.

So enter: the retry test listener.

In my company’s suite of Selenium tests, there’s a small percentage that always seem to fail intermittently. We mark those tests as retry candidates, and if they do fail, they’ll be given another shot at passing.

To get something similar set up, firstly, implement an ITestListener like so:

public class RetrySeleniumTestListener implements ITestListener {
    private static final Logger LOG = LoggerFactory.getLogger(RetrySeleniumTestListener.class);

    @Override
    public void onTestFailure(final ITestResult result) {
        final IRetryAnalyzer retryAnalyzer = result.getMethod().getRetryAnalyzer();
        if (retryAnalyzer != null && retryAnalyzer instanceof RetrySeleniumTestCounter && ((RetrySeleniumTestCounter) retryAnalyzer).isOnFirstRun()) {
            LOG.info("Test failed on first run and will be marked as skipped: " + result);
            // You might ask: why not set this result as skipped in RetrySeleniumTestCounter? 
            // That's too late and the change in status is ignored. 
            // Have to do it here instead.
            result.setStatus(ITestResult.SKIP);
        }
    }

    /*
        Here would be the the implementations of the other methods of ITestListener
     */
}

Next up, implement an IRetryAnalyzer like so:

public class RetrySeleniumTestCounter implements IRetryAnalyzer {

    private int retryCount;

    @Override
    public boolean retry(final ITestResult result) {
        if (retryCount < 1) {
            retryCount++;
            return true;
        }
        return false;
    }

    public boolean isOnFirstRun() {
        return retryCount == 0;
    }
}

And then annotate your intermittently failing test methods and test classes appropriately like so:

@Listeners({ RetrySeleniumTestListener.class })
public class DataExtractsSeleniumTest extends AdmanagerSeleniumTestCase {

    @Test(retryAnalyzer = RetrySeleniumTestCounter.class)
    public void testCannotAccessFunctionalityForUsers() {
        // Contents of intermittently failing test method
    }
}

Selenium then knows to apply the test listener to the annotated class, and the retry counter is then applied to the annotated methods.

And voilà, those intermittently failing tests now get a second chance at passing.

The Cunnilingus Suite: When Prince Goes Down South

Ah Prince. You’ve also given us Wendy and Lisa, and you’ve given us Vanity 6 and Apollonia purifying herself in the waters of Lake Minnetonka. Are you about female empowerment, or are you about female objectification? Whichever is the case, there is no doubt that in the boudoir Prince is a thoroughgoing egalitarian who revels in mutual sexual gratification. He gets off when she gets off, and what becomes clear to any Prince fan is that he loves to go down south and sing its praises. So much so, in fact, that I make the following claim: no other musician has written as many songs featuring cunnilingus, and no one has written as many songs describing how joyously good it is.

And so here I present Prince’s Cunnilingus Suite, the evidence I submit to prove the claim that Prince is indeed the musical world’s greatest panegyrist of the pudenda. In all, it’s eleven songs featuring cunnilingus from the wet pen of the purple one. There are probably more I’ve missed, and there are plenty more that suggest more, and then there are the songs that are from the point of view of the pussy, but for now, here are fifteen songs that require no cunning to figure out that cunnilingus is indeed what they’re about.

Come from the album Come
Come is a sweltering 11-minute paean to pleasuring one’s partner. It’s immense and intense and full of cunnilingus. A funky, sexual standout in Prince’s oeuvre.

Lickin’ you inside, outside
All sides, up and down
(Come)
With my tongue in the crease, baby I go ’round
When I go down, down, down

If I Was Your Girlfriend from Sign O’ The Times
A stone-cold Prince classic about physical and emotional intimacy.

And would you, would you let me kiss you there
You know, down there where it counts
I’ll do it so good, I swear I’ll drink every ounce
And then I’ll hold you tight and hold you long
And together we’ll stare into silence

Automatic from 1999
Written, produced and arranged by Prince. He’s a control freak, except in the boudoir, where he relishes relinquishing control.

I’ll go down on you all night long, it’s automatic
Yes I will, babe

Head from Dirty Mind
When Prince’s tongue is not down south, it’s lodged firmly in his cheek: Head is hilarious, morning, noon and night.

And you said, “I must confess,
I wanna get undressed and go to bed.”
With that I jammed, you fool,
You married me instead
Now morning, noon, and night
I give u
Head
Til you’re burnin’ up

Lovesexy from the album Lovesexy
Might this be the only case of back-to-back songs featuring cunnilingus on any album? This and the following song can be lapped up on the Lovesexy album, which was released after a religious awakening that didn’t seem to staunch any of Prince’s libidinousness.

U want (Lovesexy) me to s…suck around your living room
Ha Ha
Yeah, U…U want me to walk right down your halls
mmm hmmm
Lovesexy
U want me to swivel in your love seat
Don’t U baby’
U want me to write my name on your walls
U want me to write my name

When 2 R In Love from The Black Album and Lovesexy
Prince’s version of high romance and loving devotion.

When 2 R in love
The thought of his tongue in the V of her love
In his mind, this thought it leads the pack

On The Couch from Musicology
Cunnilingus pops into Prince’s mind while watching the TV. Just like that.

Love Jones is on the TV again, baby
Ooh, I wanna go down south, yeah

Insatiable from Diamonds and Pearls
Insatiable is filthy. I’m actually a little frightened of the song. Cunnilingus is the least of it.

Even if I wasn’t thirsty,
I would drink every drop

The Other Side of the Pillow from The Truth and One Night Alone… Live
He’s staunchly a Jehovah’s Witness at this stage and has disavowed his cussing past. Praise be to cunnilingus, though. Praise be indeed.

Cool as the other side of the pillow
(You’re my baby)
Smooth, I wanna drink you all out

Love 2 the 9s the Love Symbol album
This song seems so innocent musically…

Could u lie down on a bed of thorns
While I drink your ocean dry

The Continental from the Love Symbol album
Tell Me How You Wanna Be Done from Crystal Ball

Conjecture is rife that Alphabet Street is actually about Prince writing out the alphabet with his tongue, and the G that’s missing in the alphabet’s recitation is a reference to the G-spot. Whatever might actually be the case on Alphabet Street, the following lyrics are most definitely about the alphabetical application of the tongue, and Prince thought them to be so good that they’re featured on two songs.

Tell me how u wanna be done (how u wanna be done)
Shall I write the alphabet, (A-B-C-D-E-F-G)
Or shall I just write my name
U tell me, u’re the ruler in this telephone game

Superfunkycalifragisexy from the Black Album
Perhaps the only time Prince is not unequivocally in favour of cunnilingus is while a woman is menstruating. That’s not to say he doesn’t see some clear benefits.

The blood is real good if you drink it real fast
But the aftertaste just lasts and lasts

Love Machine from Graffiti Bridge
Love Machine combines Prince’s love of prime numbers and cunnilingus in the one stanza.

Don’t lie, u want some love that will make u cry
17 tongues licking from the neck down moving in a quickspeed circular motion
round and round, I said it round and round,
like u like it, I can lick it like u like it.

One Kiss At A Time from Emancipation
He’s well and truly married at this stage. Sounds like Mayte Garcia, his then wife, was a lucky woman.

And every nervous twitch that happens when my tongue is there
Your lips, up and down your back and every single hair

Un Crucigrama Críptico: A Cryptic Crossword in Spanish

I’m hardly qualified for the job, but it had to be done: I created a Spanish-language cryptic crossword in the style of the English-language cryptics the Anglophone world knows and loves.

I hadn’t been able to find a Spanish cryptic on the internet. Now when I search for one, I find the one I created. Hopefully some time soon, I’ll find plenty more Spanish cryptics which aren’t my own. No doubt a native speaker of Spanish will do a better job of creating them.

A Short Story: The {Eulogy}

The {Eulogy}

Seven words. All I could show for the forty-three minutes that had passed since the eleventh hour of the day were seven words. I write multi-threaded machine-learning algorithms with ease; the ability to write in languages that are not computational, however, eludes me. I was attempting to write a eulogy which I was to deliver that evening for my dearly departed Beatrice, yet by noon, I had written practically nothing. I had avoided writing the eulogy for over a week, and now four hours were all that remained before I would have to depart for the funeral. I grew pensive; I had calculated that if my rate of word production were to continue, I would have only thirty five words prepared by four o’ clock — a mere trifle for the lady that continues to be, even more so in death, the unrequited love of my life.

I had spent the majority of my years concealing my love for Beatrice. She had died young — not long after having celebrated her twenty-seventh year on this mortal coil — and I had had the pleasure of sharing intimacies with her that only propinquity through time and the implausibility of carnal relations make possible. Thus, finding the right words to do her memory justice without revealing the full depth of my feelings was proving especially difficult. I hoped that something other than my own inadequacies were at fault and apportioned blame to my keyboard. I swapped it for my mother’s in the next room, but on the basis of my writing all of twelve words in the subsequent hour, I concluded that a keyboard accustomed to writing human code is no better at forming sentences than another accustomed to writing computer code.

All I could show for the 103 minutes that had passed since the eleventh hour of the day were now nineteen words. Vaguely in search of inspiration, I did as procrastinators do: I experimented with fonts, I corrected my posture, I fiddled with curtains, I rearranged the room. Twenty-eight minutes later: still nothing had been added to nineteen words.

Soon enough, twenty-eight minutes ticked over to twenty-nine, and what was innocuously and inertly even became indivisibly and intrepidly odd. Nineteen words of trite eulogising were still nineteen words, but they had now become fifty-seven letters, seven spaces, three commas, two line-breaks and two full stops. The unflinching starkness of the idle computer screen had flipped my mind: I could no longer perceive words, only the arbitrary characters they consisted of. Grief was no longer a word imbued with meaning; instead, it was a seemingly haphazard arrangement of characters that consisted of a g followed by an r, an i, an e and an f, all of which stood together as arbitrarily as would a t followed by a k, a p, a % and an x. Nothing on the screen had changed; something significant inside my head had.

Although we tend to conceive of all things in their own customary aspect, we are not beholden to conceiving of any one thing in any one aspect. A tiger, for instance, is customarily nothing more than a tiger: it prowls, it entrances, it hunts, it kills. From another aspect, however, a tiger is a not-quite-infinite collection of atoms organised into interrelated molecular arrangements that constitute the entirety of perhaps the most magnificent and majestic of sublunary creations. After twenty-nine minutes of benumbed inactivity, I had come to see language as a grand set of elemental particles arranged to form a metaphorical tiger as graceful, alluring and deadly as any of its corporeal particulars out in the wild. In this new light, the g, the r, the i, the e and the f were but five linguistic atoms forming a lexical molecule that is part of the literary tiger known as English. The molecular bonding of a t, a k, a p, a % and an x, on the other hand, formed the basis of mutant cells in a beast not meant for this earth.

Such alchemical thoughts turned my mother’s dormant keyboard into a linguistic periodic table. Sitting there were all the signs of any import, the very building blocks of any possible permutation of the English language, and perhaps to demonstrate the veracity of my conceptual meanderings, tapping away before me were the countless keystrokes that would generate literature of the highest order. As if it were a Pianola player piano, I was privy to the pitta-patta-pitta that on my mother’s keyboard produces Joyce rewritten in Shakespearean English, another new-and-improved translation of Madame Bovary or Sappho’s lost poetry. In the form of keystrokes, I was beholding apocryphal histories of the future, crackpot scientific theories of the past and the nature of God that I once thought ineffable. Alas, although I could see the keystrokes, my computer screen was recording nothing. I bashed away at the keyboard in an attempt to capture at least some skerrick of these literary confabulations, but to no avail: my fingers were no match for the touch-typing hand of literature’s masterful and ethereal scrivener.

Frustration and the fabulous do not freely mix. My visions subsided as quickly as my agitation grew, and the only vestiges of my frenzied tapping were 1001 letters, ninety-two spaces, seventeen commas, fourteen semi-colons, eight line breaks, four quotation marks, three question marks, two dashes and not a single word from the English language that I could recognise. I had beheld untold literary treasures, yet all I had managed to record was a nonsensical collection of characters not even a madman would claim as his own.

The eulogy that would dutifully honour my beloved’s memory was, alas, still no closer to being written in time for my oration at her funeral. Others with more commonplace minds would perhaps have eked out something commensurately commonplace in whatever time remained and sensibly disregarded similar literary psychoses as diversionary. I, however, am possessed of a mind that programs computers. In the form of keystrokes, I had seen an ordinary keyboard churn out literature of genius, and my predilection for programming had me mulling over how this could be recreated and captured. Instead of wrangling with human code, I planned to write what comes naturally to me and develop computer code that would programmatically assemble a eulogy for my Beatrice as dazzling as any in literature’s history. It is the holy grail, the philosopher’s stone, El Dorado; so too is my computer, which can do in a second the work of thousands in a year. My pipe dream was standing on the shoulders of another pipe dream, but one that had been made real. In that, I took solace.

I began programming with zeal. I wrote in Lisp — how else to write a program of such awesome scope than with a functional programming language of such brevity? — and the first cut of my program generated a file of no more than 10,000 characters, all randomly selected and all randomly terminated on a full stop. As expected, the file was gibberish. I tinkered: I made vowels more likely to appear; I practically eradicated obscurer characters such as curly brackets; I introduced paragraph breaks and I allowed for text to be italicised. All of this, however, was the rudimentary prelude to the much more complicated task of incorporating distribution statistics for each letter of the alphabet into the program, so that a q, when rarely selected, would almost certainly be followed by a u. I was plunging headlong into developing an algorithmic representation of each letter’s relationship to itself, its twenty-five neighbours and the punctuation marks that feature in any sentence worthy of the name. Even though I was well aware of how complex the project would be, as I surveyed the great variety of possible and probable combinations, I could do nothing to beat back the dismay engulfing me upon surmising that I too was likely to have passed away before having developed a program that would somewhere approach the semi-structured malleability of the English language.

Be that as it may, I persevered with my endeavours for some two hours. Although I could not claim that my program had generated anything one would call literature, distinct progress had been made: an n often followed an i, no word ended with a j, an a would often stand alone, and from the inauspicious beginnings of “oly$PcC+!oa <Q* ll?pH”, I had managed to produce “Nasper, cart tulo jammalikire, a teaef nolt caflow”.

All the same, I knew no funeral address would come of my programmatic endeavours by the time my Beatrice would be laid to rest, and I now had only fifty-five minutes in which to compose a eulogy. I could waste no more time on whimsy and switched over to my word processor. Once again I was face to face with my literary trial; once again I failed to assemble a set of characters for my beloved Beatrice in the conventional manner.

Beatrice was born on the 2nd of April, 1975. A fresh batch of literary idleness had my mind again wandering from the task at hand as it began to ponder the essence of that date as a number. 020475 equates to 20,475, and in that form Beatrice’s date of birth became my calculator’s plaything as I endeavoured to unearth the properties of this most sanctified of numbers. I came to learn that the number is divisible by 3 and 6,325; 5 and 4,095; 7 and 2,925; 9 and 2,275; 13 and 1,575; 15 and 1,365; 21 and 975; 25 and 819; 35 and 585; 39 and 525. This meant that 20,475 had at least 20 factors – a remarkable feat for an odd number of not so large a size.

To prove that this number really was extraordinary, I tried to find factors for 311,299, the largest number anyone can be represented by according to their date of birth. I was astounded: not a single figure could I find that would divide evenly into the largest numerical representation of a calendar year. 311,299 is a forlorn and introverted loner of a prime number. By contrast, my beloved’s numerical form, 20,475, although less than a tenth the size of 311,299, is an attractive and gregarious marvel that abounds with fellow numbers seeking its association.

I had discovered what I would say at the funeral by way of a calculator. Whilst I consider myself a Romeo at heart, my version of the lovelorn Montague could never express himself like Shakespeare’s upon meeting Juliet’s lifeless body. I speak in mathematics, not iambic pentameter, and after such a drawn-out process, I was exceptionally relieved to have found something that spoke of my lady’s everlasting brilliance as only the timeless nature of mathematics could. Nevertheless, I had to write about numbers in words, so the thirty-seven minutes I had left to craft the eulogy still remained a daunting prospect. And as a programmer of computers, much more inclined to bits and bytes as opposed to syntax and grammar, the valence of Beatrice’s date of birth suggested another possibility much more to the liking of my procedural mind.

Literary minds imbue certain words with certain colours and suppose they possess properties not ordinarily perceivable to the untrained or untalented; musical minds do much the same with notes and chords. Analogously, mathematical minds find numbers have their own individual characters, a certain few of which possess talismanic qualities that can be employed in the service of resolving problems. 20,475, a number I freely admit I had not extensively considered before, became that talisman, that harbinger of light into the darkest corners of benighted ignorance and confusion. And as confusion was certainly the only thing I had programmatically assembled until then, I concluded that if 20,475 were to be interpolated into my program’s workings, it would come to produce the text that I was scheduled to deliver at the funeral. Only a short hop then had me supposing that if my program were to generate 20,475 files of text, that last collection of characters, the 20,475th, would acclaim Beatrice’s much cherished memory better than any other collection of characters possibly could.

The unexpected heat and humidity of the late April day augured well for the success of so improbable a venture. I was merging numerical mysticism with algorithmic rigour in a way that harkened back to Pythagorean times, and I garnered strength from knowing that I was pursuing a course blazed long ago by the genius of the ancients. With the illustrious example of the Hellenes as my guide, I made some final changes to my program and executed it. 20,475 files of randomly curated text were being created, and after seventeen minutes of operation, my computer came to rest with only ninety-seven seconds remaining before I was to depart for Beatrice’s interment. Steeped in hubris, I opened the fateful file feeling as if the success of my programmatic exploits had already been foretold. But like the prognostications of the oracles of times long past, interpretation and prophecy were shown once more to be natural bedfellows, for instead of finding myself with the text that would make even Beatrice’s sworn enemies pay tribute to her exalted memory, my disbelieving eyes read three times over exactly the same collection of characters that you are now reading.

Git Blame: List a Particular Author’s Files Across a Code Base

My goal: to have git tell me which files across the breadth of our current code base have lines of code in them that are attributed to a particular author.

My googling for a script came up with bubkes, so I decided to write my own and share that on the internet. No doubt there’s a better way of doing this, and no doubt there’s a better bash script possible (my bash scripting skills are rudimentary at best), but what I did does do the job.

Here’s the bash script:

#!/bin/bash

matchGitBlame() {

	if [[ "$1" == *$2* ]]
	then
		local count=`grep -o "$2" <<< "$1" | wc -l`

		if [ $count -gt 0 ]
		then
			echo "$count : $2 : $3"
		fi
	fi
}

files=`find . -type f`
name=$1
name2=$2

for file in $files
do
	blame=`git blame $file`
	matchGitBlame "$blame" "$name" "$file"
	matchGitBlame "$blame" "$name2" "$file"
done

If you execute the script like so (the script works with one or two author names as attributes):
./blame-script.sh authorName1 authorName2 > blame-script-results.txt && sort blame-script-results.txt -rVo blame-script-results.txt

you should find in the file named blame-script-results.txt something like the following:

180 : authorName1 : ./Breadcrumb.java
43 : authorName1 : ./ManagementTrail.java
41 : authorName1 : ./DashboardTrail.java
24 : authorName2 : ./NavigationTabsPanel.java
17 : authorName1 : ./DropDownMenuPanel.java
5 : authorName2 : ./ManageReportDropDownMenuPanel.java
1 : authorName1 : ./CrumbItem.java

Philip Roth on Politics in Art

From what I consider Roth’s best book, I Married A Communist:

“Politics is the great generalizer,” Leo told me, “and literature the great particularizer, and not only are they in an inverse relationship to each other – they are also in an antagonistic relationship. To politics, literature is decadent, soft, irrelevant, boring, wrongheaded, dull, something that makes no sense and that really oughtn’t to be. Why? Because the particularizing impulse is literature. How can you be a politician and allow the nuance? As an artist the nuance is your task. Your task is not to simplify. Even should you choose to write in the simplest way, a la Hemingway, the task remains to impart the nuance, to elucidate the complication, not to deny the contradiction, but to see where, within the contradiction, lies the tormented human being. To allow the chaos. To let it in. You must let it in. Otherwise you produce propaganda, if not for a political party, a political movement, then stupid propaganda for life itself — for life as it might itself prefer to be publicized.”

Best-of-Three Coin Toss: The Most Likely Way to Win

Always pick whatever side of the coin comes up first, i.e. if heads comes up on the first toss, always choose heads thereafter.

The reasoning: There’s probably some kind of minimal bias one way or another in the coin or in the tosser’s toss. Assuming there’s no data to help you out beforehand for determining the bias, as soon as you get your first piece of data in the form of the first coin toss, chances are the bias is towards whatever side of the coin turns up.

The complication: If the probability distribution is 90% heads and 10% tails and tails happens to come up up first, well, you’re very likely to lose a best-of-three coin toss series by always choosing tails. But if no one actually knows the probability distribution beforehand, you’re better off always choosing the side of the coin that comes up first for a short coin-toss series. Larger coin-toss series, i.e. a best of twenty series, will mean that if the bias is sufficiently skewed, it is indeed better to change your coin-flip choice in light of results.

Top Ten Prince Songs You Might Not Have Heard

Prince is coming to Melbourne, and on Monday night I’ll be five rows from the stage with a iridescent smile on my face and the funk in my hips.

The last time Prince was in town, his jam on All The Critics Love You In New York during the encore was the highlight, even if only diehards such as myself would have known of the song. And that’s generally the problem for diehards attending the big shows of the big names: they will have already heard the hits done to death and could do with their own personal favourites getting a run rather than the same-old same-old.

So here’s my personal top ten selection of B-sides and album tracks that I very much doubt I’ll hear Monday night, but like All The Critics Love You In New York managed to do the last time around, perhaps one of them will sneak into the show.

1. Erotic City

Perhaps the greatest B-side ever put down on vinyl.

Erotic City was literally and figuratively on the flip side to Let’s Go Crazy. No doubt Prince delighted in the thought of unsuspecting kids turning over their newly purchased single of good time funking rock to discover a sinuous, spare, almost mechanical dance song that would revolutionise club music and shock the bejesus out of people who say “bejesus”.

Ridiculously good.

2. PFUnk

The best that Prince can do at this stage of his career is a killer song on a mediocre album. But like so much of Prince’s best work, PFUnk didn’t even appear on an album.

PFUnk is Prince’s rather ungracious response to the rebuke he suffered after issuing legal notices to the relevant parties ordering any product or image of his to be taken down from the internet. Ironically enough, the song was an internet-only release. Happily enough, it was the best thing he’d done in years.

PFUnk is a huge, one-man Funkadelic jam — over seven minutes long; a hard rock chorus, skeletal space-age funk verses; multiple voices, multiple beats; killer solos, killer horn fills; false ending, latin-jazz outro. All that and it features a series of the hardest ones in the business throughout the chorus (the four is silenced every second bar so the one hits harder than a bomb).

3. The Ballad of Dorothy Parker

The Ballad of Dorothy Parker is Prince’s paean to Joni Mitchell, a feminine folk funk classic that’s the equivalent of a fresh summer kiss. And like When Doves Cry, Prince renders a full rhythmic symphony out of programmed drums that make the sparseness of the instrumentation noticeable only in retrospect.

4. Tamborine
Not content with too-fast corvettes as code for sexual frustration (is Little Red Corvette the only smash hit to have been about premature ejaculation?), Prince turned to tambourines that he dreamed being inside of.

One can only assume those dreams were heady stuff — they’re accompanied by manic drums, eastern melodies evoking harems and yet another demonstration of how well Prince can scream.

5. Lady Cab Driver

Prince usually celebrates sex. On Lady Cab Driver, not at all.

Prince brings the funk, but it’s a cold funk, mechanical, emotionless, like the sex he’s seeking. And when he finds it, the frustrations pour out with the climax.

6. New Position

It’s a throwaway song, probably something Prince laid down in an inspired hour or two of fun, and its infectious, slinky and sexy joy should have anyone heading to the boudoir to try out a new position.

7. Irresistible Bitch
Another ridiculously good and ridiculously explicit B-side. So spare that every little line is a memorable hook.

8. Feel U Up

As above, a signature B-side.

9. D.M.S.R.

Some of the slinkiest synthesisers on record — a party starter.

10. 17 Days

Erotic City eclipses its A-side, Let’s Go Crazy. 17 Days can’t do the same against When Doves Cry, but it’s killer nonetheless.

Also continues Prince’s fine fascination with prime numbers: 1999, 7, “17-year-old boys and they’re idea of fun” in Sign O’ The Times, 3121, 1+1+1 is 3, “23 positions in a one-night stand” in Gett Off, 3 Chains Of Gold, 17 Days, “it’s been 7 hours and 13 days” in Nothing Compares to U, and 5 Women.

And for bonus joy, here’s Living Colour’s rendition:

And the honourable mentions: Housequake, Let’s Work, Adore, Sister, Forever in My Life, Girls and Boys, Hot Thing, I Love U in Me, Do U Lie?, Vibrator, G-Spot, 5 Women, Joy in Repetition, Crystal Ball, Eye No, Damn U, Feel U Up, Girl, La, La, La, He, He, He, A Love Bizarre, Scarlet Pussy, Crystal Ball, It’s Gonna Be A Beautiful Night, Sexy Dancer, Bambi, She’s Always in My Hair, Scarlet Pussy, Hello, 1+1+1 is 3, Party Up, How Come U Don’t Call Me Anymore?, Starfish and Coffee.