Originally published on eve.gd on 2 December 2010, last updated 6 September 2026.
Read this post on the web (with images, PDF and citation details)
I've used the snow so far this morning to start some pythonic refactoring of Rockaby.
As I mentioned in my project announcement, Rockaby started life several years ago and it was a quick morning's worth of hacking about in .NET to build something that I thought nobody would ever see. As such, the code was hideous and messy. For the first code-drop, I simply transliterated the .NET code into Python/Django. This made for some grim view manipulation:
# build an index of where this character occurs
CharacterPages = []
Parts = []
# create a list of lists (to store page numbers)
for counter in range(0,len(pynchon.parts.Parts.FormattedPartNames)):
Parts.append([])
for episode in episodes:
if character_name in episode.characters:
Parts[episode.part - 1].append(episode.episode)
epChars = episode.characters.replace('\r\n', '\n').split('\n')
for s in epChars:
epCharsSplit = s.split('->')
if epCharsSplit[0].lower() == character_name.lower():
splitPages = epCharsSplit[1].split(',')
for pageNum in splitPages:
CharacterPages.append(pageNum)
ret = ''
for counter in range(0,len(pynchon.parts.Parts.FormattedPartNames)):
part = Parts[counter]
part.sort()
if (len(part) > 0):
ret = ret + '<p class="p1"><span><a href="/parts/' + pynchon.parts.Parts.SanitizedPartNames[counter + 1] + '/" title="' + pynchon.parts.Parts.FormattedPartNames[counter + 1] + '">' + pynchon.parts.Parts.FormattedPartNames[counter + 1] + '</a>:'
for i in part:
ret = ret + ' [<a href="/episodes/' + pynchon.parts.Parts.SanitizedPartNames[counter + 1] + '/synopsis/episode_' + str(i) + '/" title="Synopsis of ' + pynchon.parts.Parts.FormattedPartNames[counter + 1] + ' Episode ' + str(i) + '">' + str(i) + '</a>],'
ret = ret[0:len(ret) - 1]
ret = ret + '<br/></span></p>'
Anyway, the latest commit replaces that mess with the following view:
episodes_used = {}
presentation = []
for charsepinfo in charsinepisodes:
if not charsepinfo.episode.part in episodes_used:
episodes_used[charsepinfo.episode.part] = []
episodes_used[charsepinfo.episode.part].append(charsepinfo.episode)
The models have now also been updated in the move towards abstraction from its original Pynchon-specific context. See the latest commit for details.
This reference list has been generated, in many cases, through an automated process and may therefore contain errors or incomplete metadata. It is provided purely as assistance for finding the items mentioned within this post.
1. Rockaby refactoring commit on Google Code <http://code.google.com/p/rockaby/source/detail?r=54a0f9af87f4b0b9003d4278b071d5c385b4b755>
http://code.google.com/p/rockaby/source/detail?r=54a0f9af87f4b0b9003d4278b071d5c385b4b755