Tooth and Nail (novel)

Tooth and Nail is a 1992 crime novel by Ian Rankin, originally entitled Wolfman. It is the third of the Inspector Rebus novels.

Tooth and Nail
1st edition (under original title)
AuthorIan Rankin
Original titleWolfman
CountryScotland
LanguageEnglish
GenreDetective fiction
Published1992 Century
Media typePrint
Pages304 pages
ISBN0-7528-7727-5
OCLC60513004
Preceded byHide and Seek 
Followed byStrip Jack 

Plot summary

Rebus is drafted in by Scotland Yard to help track down a cannibalistic serial killer called the Wolfman, whose first victim was found in the East End of London's lonely Wolf Street. His London colleague, George Flight, isn't happy at what he sees as interference, and Rebus encounters racial prejudice as well as the usual dangers of trying to catch a vicious killer.

When Rebus is offered a psychological profile of the Wolfman by an attractive woman, it seems too good an opportunity to miss.

Connections to other Rankin books

  • Journalist Jim Stevens from Knots and Crosses and non-Rebus book Watchman makes a cameo appearance, again basing off his status quo in Watchman.
  • Rebus remembers the line "There are clues everywhere" at one point, a reference to the taunting messages he receives in Knots and Crosses.
  • Rebus briefly thinks "don't talk to me about Hyde", a reference to the events of Hide and Seek.
  • Morris Gerald Cafferty makes his first appearance, in the background as a gangster Rebus has to give evidence against.

Writing Tooth and Nail

In the Exile on Princes Street foreword to Rebus: The Early Years, Rankin says he was living in London at the time of writing and didn't enjoy it, so "I brought Rebus to London so he could suffer, too". The original title was Wolfman but Rankin's American edition editor came up with the title Tooth and Nail, which Rankin "liked better" as it kept the early title sequence ([something] & [something]) going.[1]

gollark: This is not ideal. How can we use more without boring things like cryptominers?
gollark: Okay, this might fix it, pushed.
gollark: If the issue is what I think it could be, then it's accidentally dropping? data on the threshold of the rolling counter region incorrectly.
gollark: ```nimproc pollTargets(ctx: Ctx) {.async.} = for row in ctx.db.all("SELECT * FROM sites"): var (id, url, rollingTotalPings, rollingSuccessfulPings, rollingLatency, rollingDataSince) = row.unpack((int64, string, int64, int64, int64, Option[Time])) let res = await ctx.pollTarget(url) let threshold = getTime() # drop old data from rolling counters if rollingDataSince.isSome: for row in ctx.db.iterate("SELECT status, latency FROM reqs WHERE timestamp >= ? AND timestamp <= ? AND site = ?", rollingDataSince.get, threshold, id): let (statusRaw, latency) = row.unpack((int, int)) rollingTotalPings -= 1 rollingLatency -= latency if statusRaw <= 0: rollingSuccessfulPings -= 1 # add new data rollingTotalPings += 1 rollingLatency += res.latency if int(res.rtype) <= 0: rollingSuccessfulPings += 1 ctx.db.transaction: ctx.db.exec("UPDATE sites SET rc_total = ?, rc_success = ?, rc_latency = ?, rc_data_since = ? WHERE sid = ?", rollingTotalPings, rollingSuccessfulPings, rollingLatency, threshold, id) ctx.db.exec("INSERT INTO reqs (site, timestamp, status, latency) VALUES (?, ?, ?, ?)", id, getTime(), int(res.rtype), res.latency)```This is the core algorithm.
gollark: Actually, æææææ who even knows.

References

  1. Rankin, Ian (2000). Rebus: The Early Years. London, UK: Orion Books. pp. vii–viii. ISBN 978-0-75283-799-4.


This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.