<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>http://schof.org/</id>
  <title>Schof.org Atom Feed</title>
  <updated>2011-07-01T00:00:00Z</updated>
  <link href="http://schof.org/" rel="alternate"/>
  <link href="http://schof.org/atom.xml" rel="self"/>
  <author>
    <name>John Mark Schofield</name>
    <uri>http://schof.org</uri>
  </author>
  <entry>
    <id>tag:schof.org,2011-07-01:/2011/freak_show_deluxe_june/</id>
    <title type="html">Freak Show Deluxe at the Hollywood Fringe Festival</title>
    <published>2011-07-01T00:00:00Z</published>
    <updated>2011-07-01T00:00:00Z</updated>
    <link href="http://schof.org/2011/freak_show_deluxe_june/" rel="alternate"/>
    <content type="html">&lt;p&gt;I&amp;#8217;ve never met a nicer bunch of freaks than the artists of the &lt;a href="http://freakshowdeluxe.com/"&gt;Freak Show Deluxe&lt;/a&gt; (&lt;span class="caps"&gt;FSD&lt;/span&gt;), a retro-futuristic collection of acts rescued from carnival side shows and the seamy, late-night side of state fairs.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;FSD&lt;/span&gt; is an entertaining, funny, and often cringe-inducing show &amp;#8212; I saw their act twice before I started shooting them, and enjoyed myself immensely both times.&lt;/p&gt;
&lt;p&gt;For a group of people who can seem somewhat intimidating on stage, they&amp;#8217;re an amazingly gracious, kind, and funny group backstage. I was honored to be there for the three shows I shot.&lt;/p&gt;
&lt;p&gt;I wasn&amp;#8217;t surprised by how hard working these professionals were &amp;#8212; it&amp;#8217;s common in small theater. I wasn&amp;#8217;t prepared, however, for how much these people damage themselves in the course of their acts. Some of it is incidental to the act &amp;#8212; you can&amp;#8217;t walk on broken glass without cutting yourself occasionally &amp;#8212; and some of it is done deliberately in cold-blooded preparation for a show. (Don&amp;#8217;t worry. I wasn&amp;#8217;t able to catch most of the mayhem on camera, and I promised not to reveal some of it.)&lt;/p&gt;
&lt;p&gt;However, most of what happens on stage is exactly what it appears to be. &lt;a href="http://www.flickr.com/photos/schof/5892627061/in/set-72157626971280483"&gt;This is what your back looks like&lt;/a&gt; after you&amp;#8217;ve had a concrete block broken on your chest while laying on a &lt;a href="http://photos.schof.org/Theater/Freak-Show-Deluxe-June-2011/17841106_33QK68#1364203945_8Pq8TTh"&gt;bed of nails&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As usual, I&amp;#8217;ve got &lt;a href="http://photos.schof.org/Theater/Freak-Show-Deluxe-June-2011"&gt;a small collection of my favorite photos&lt;/a&gt; up at &lt;a href="http://photos.schof.org"&gt;photos.schof.org&lt;/a&gt;, which I&amp;#8217;d recommend anyone interested in &lt;span class="caps"&gt;FSD&lt;/span&gt; take a look at.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.flickr.com/photos/schof/sets/72157626971280483/"&gt;rest of my shots are up on Flickr&lt;/a&gt;, but I really expect that only &lt;span class="caps"&gt;FSD&lt;/span&gt; cast members and their mothers will be looking at that &amp;#8212; there&amp;#8217;s a whopping 443 photos there.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;d like to offer a sincere thanks to the &lt;span class="caps"&gt;FSD&lt;/span&gt; cast &amp;#8212; I&amp;#8217;m incredibly glad that they welcomed me into their backstage lives, and I&amp;#8217;m very happy to have met such a talented and friendly bunch.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:schof.org,2011-05-14:/2011/smugmug_and_flickr/</id>
    <title type="html">A Little More Clarity About SmugMug and Flickr</title>
    <published>2011-05-14T00:00:00Z</published>
    <updated>2011-05-14T00:00:00Z</updated>
    <link href="http://schof.org/2011/smugmug_and_flickr/" rel="alternate"/>
    <content type="html">&lt;p&gt;I started my online photo display using &lt;a href="http://flickr.com/photos/schof"&gt;Flickr&lt;/a&gt;, but I then changed to &lt;a href="http://smugmug.com"&gt;SmugMug&lt;/a&gt; because I liked the kinds of galleries I could create on SmugMug much better than the ones I created on &lt;a href="http://flickr.com/photos/schof"&gt;Flickr&lt;/a&gt;, and because SmugMug allows me to use my own domain name, &lt;a href="http://photos.schof.org"&gt;photos.schof.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, there&amp;#8217;s two types of photo collections I want to publish to the web, and I&amp;#8217;m finding that I need both SmugMug and Flickr to make that happen. (I could probably do it with two separate SmugMug sites, but since I already have a paid Flickr account, I&amp;#8217;m going with both.)&lt;/p&gt;
&lt;p&gt;My photography workflow is simple &amp;#8212; I&amp;#8217;ll shoot as much as I can when I&amp;#8217;m on location, trying to catch the peak of action, the peak of emotion, while still being in focus (except for the rare cases where being out of focus works). I end up deleting about 80 to 90% of the photos.&lt;/p&gt;
&lt;p&gt;So on a typical shoot I&amp;#8217;ll click the shutter release 1,500 times &amp;#8212; perhaps 100 to 300 of those shots will make my first cut. All of these are decent shots that I don&amp;#8217;t mind other people seeing. But there&amp;#8217;s still far too many of them.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll then go through and pick out the 10 to 20 real winners &amp;#8212; they&amp;#8217;re the photos I&amp;#8217;m really happy with, and that I&amp;#8217;m proud to have my name on.&lt;/p&gt;
&lt;p&gt;I have been publishing these on SmugMug, and I&amp;#8217;ll continue to do so &amp;#8212; photos.schof.org, my SmugMug site, will be my portfolio site.&lt;/p&gt;
&lt;p&gt;However, I&amp;#8217;d also like to publish the larger collection of images, so that the people I&amp;#8217;ve shot (and anyone who&amp;#8217;s &lt;em&gt;really&lt;/em&gt; interested) can view them. It&amp;#8217;s entirely possible some of the people I shot in the larger project just won&amp;#8217;t end up in the small pool of final selects, but I&amp;#8217;d still like them to see their pictures.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve been using SmugMug for that as well, but that has resulted in my &lt;a href="http://photos.schof.org"&gt;photos.schof.org&lt;/a&gt; SmugMug site being a little muddled and confused.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll be moving the large galleries over to Flickr, and using SmugMug solely for my portfolio, starting immediately.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:schof.org,2010-11-24:/2010/smugmug/</id>
    <title type="html">New photos.schof.org Gallery via SmugMug.com</title>
    <published>2010-11-24T00:00:00Z</published>
    <updated>2010-11-24T00:00:00Z</updated>
    <link href="http://schof.org/2010/smugmug/" rel="alternate"/>
    <content type="html">&lt;p&gt;I&amp;#8217;ve been using &lt;a href="http://flickr.com/photos/schof"&gt;Flickr&lt;/a&gt; for quite a while, and been satisfied with it &amp;#8212; but I&amp;#8217;ve been looking for a better way to host my photos. I wanted something that I could host on my domain, and I wanted both galleries/sets (groups of photos on a topic or event) and the ability to do slideshows or otherwise showcase photos that I like.&lt;/p&gt;
&lt;p&gt;I think I&amp;#8217;ve found that with &lt;a href="http://smugmug.com"&gt;SmugMug&lt;/a&gt;. I&amp;#8217;ve only been using them for a few days, but I&amp;#8217;m quite happy with them so far. I&amp;#8217;ve created &lt;a href="http://photos.schof.org"&gt;photos.schof.org&lt;/a&gt;, and it&amp;#8217;s got most of my recent work on it already.&lt;/p&gt;
&lt;p&gt;SmugMug, like Flickr, has integration with Adobe Lightroom built into Lightroom, so using it is easy &amp;#8212; in fact, I think I like the SmugMug plugin for Lightroom better than the Flickr one.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll keep you posted &amp;#8212; but right now, I&amp;#8217;m a happy SmugMug user!&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:schof.org,2010-07-19:/2010/memory_part_one/</id>
    <title type="html">The Elasticity of Memory, Part I</title>
    <published>2010-07-19T00:00:00Z</published>
    <updated>2010-07-19T00:00:00Z</updated>
    <link href="http://schof.org/2010/memory_part_one/" rel="alternate"/>
    <content type="html">&lt;p&gt;My father says my mother hallucinates, but I don&amp;#8217;t think &amp;#8220;hallucinate&amp;#8221; is the right word. It&amp;#8217;s not as if you&amp;#8217;re with her and she sees people who aren&amp;#8217;t there. Instead, later she remembers things &amp;#8212; sometimes very vividly &amp;#8212; that never happened.&lt;/p&gt;
&lt;p&gt;At first these were visits from people she knew &amp;#8212; her father, her sister, old friends. It was easy for us to tell these things weren&amp;#8217;t real &amp;#8212; her father has been dead 20 years, her sister hasn&amp;#8217;t left Denmark in 30 years, and her friends weren&amp;#8217;t visiting either.&lt;/p&gt;
&lt;p&gt;She&amp;#8217;s come to accept that these things aren&amp;#8217;t happening &amp;#8212; though she had to call her sister in Denmark before she believed us that Greta wasn&amp;#8217;t here.&lt;/p&gt;
&lt;p&gt;Now she remembers things that are harder for her to verify on her own, so she asks us about them.&lt;/p&gt;
&lt;p&gt;Today she called and asked if I&amp;#8217;d had a bunch of friends over last night. I don&amp;#8217;t live with my parents, and hadn&amp;#8217;t been there last night, but I did have lunch there yesterday, and their next-door neighbors Daniel and Tatiana came over with their daughter Priscilla to visit for a while. Once I was sure Mom wasn&amp;#8217;t talking about Priscilla and her parents, I knew this was another dream memory, and told Mom so.&lt;/p&gt;
&lt;p&gt;&amp;#8220;Well, your Dad says the same thing, so I guess they weren&amp;#8217;t really here.&amp;#8221;&lt;/p&gt;
&lt;p&gt;Later I asked her about the memories. &amp;#8220;Today we talked about Daniel and Tatiana and Priscilla coming over yesterday, which did happen, and about a bunch of my friends coming over last night, which didn&amp;#8217;t happen. Is there any difference between those two memories for you?&amp;#8221;&lt;/p&gt;
&lt;p&gt;&amp;#8220;Oh, yes! They&amp;#8217;re very different. When your friends come over it&amp;#8217;s like a Swedish movie. It&amp;#8217;s just dozens of young girls flitting around in white dresses. They&amp;#8217;re very nice, and don&amp;#8217;t cause any problems. They&amp;#8217;re just always moving around the house. I just assumed they were your friends.&amp;#8221;&lt;/p&gt;
&lt;p&gt;In some ways my mother is in the hardest part of dementia. She&amp;#8217;s losing her reality, her ability to tell fantasy and imagination from reality, and she&amp;#8217;s still alert and thoughtful enough to know it&amp;#8217;s happening. At first this hit her very, very hard.&lt;/p&gt;
&lt;p&gt;The hardest hit was also one of the most mundane. We were in the doctor&amp;#8217;s office, and she needed to give a urine sample, and she had gone to the restroom before we left the house, so the medical assistant gave her a dixie cup full of water.&lt;/p&gt;
&lt;p&gt;My mom gave the empty cup back, and somehow that got transmuted in her mind to her giving a urine sample. And no matter how much my father and I insisted that she hadn&amp;#8217;t given a sample, she stood firm. It wasn&amp;#8217;t until all the nurses in the office and the doctor confirmed that she hadn&amp;#8217;t given a sample that she realized she was wrong.&lt;/p&gt;
&lt;p&gt;This simple error shook her much more than thinking her dead father was visiting. She could no longer trust the evidence of her eyes and ears and mind.&lt;/p&gt;
&lt;p&gt;All of this raises thorny questions about the nature of reality that I don&amp;#8217;t feel qualified to talk about. Our eyes and ears and other senses are the instruments we use to model the world in our own heads. But our brain is an instrument as well, and when it&amp;#8217;s not working correctly it doesn&amp;#8217;t matter how sharp your vision or how sensitive your hearing. We&amp;#8217;re all using imperfect instruments to perceive our world.&lt;/p&gt;
&lt;p&gt;All of this completely terrifies me. Not only because of the obvious impact on my mother, but because I&amp;#8217;ve become aware of my attachment to my own rationality and ability to perceive the world accurately. I&amp;#8217;m a student of Buddhism, and I&amp;#8217;ve found the knowledge that all things end to be a comfort as we approach the end of my parents&amp;#8217; lives. I&amp;#8217;ve come to accept the inevitability of death &amp;#8212; but this is rubbing my face in the liklihood of my own loss of awareness before death &amp;#8212; and it will take much more meditation before I come to accept that.&lt;/p&gt;
&lt;p&gt;My mother grew up in a small farming village in Jutland, in Denmark. It&amp;#8217;s the kind of place that people in Copenhagen make fun of, filled with people the city-dwellers think of as ignoramuses with funny accents.&lt;/p&gt;
&lt;p&gt;She went from there to an elite boarding school near the capital, and eventually from there to America, where she met my father, earned a Master&amp;#8217;s Degree, taught in high schools and colleges, and had a son.&lt;/p&gt;
&lt;p&gt;She&amp;#8217;s always been proud of her academic ability, a voracious reader of newspapers and news magazines and books.&lt;/p&gt;
&lt;p&gt;Lately she&amp;#8217;s come to terms, at least a lot more, with the fact that she can&amp;#8217;t trust her own brain or her own perceptions. It no longer seems to shake her so deeply when she finds her memory at odds with reality. She even jokes about it now &amp;#8212; when I offered to take her to the Library she said there&amp;#8217;s no need. &amp;#8220;The best part of Alzheimer&amp;#8217;s is that you can read the same book over and over again and not mind.&amp;#8221;&lt;/p&gt;
&lt;p&gt;She sometimes gets frustrated &amp;#8212; more so on good days than bad &amp;#8212; when she asks me five times in ten minutes if I&amp;#8217;d like steak for dinner (I&amp;#8217;m a vegetarian) and realizes how many times she&amp;#8217;s asked the question.&lt;/p&gt;
&lt;p&gt;On bad days, though, she doesn&amp;#8217;t realize &amp;#8212; just asks again and again &amp;#8212; and this actually seems easier for her. Alzheimer&amp;#8217;s is a disease that may actually get easier for her as it progresses.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m very thankful for one thing &amp;#8212; that this doesn&amp;#8217;t seem to be changing the basic nature of my mother. She&amp;#8217;s losing her reality, but she&amp;#8217;s not losing herself. She actually seems to be getting sweeter, more gentle, more loving, and more able to express that love as the disease progresses. Even her fantastical memories are of people she loves coming to visit, or of friendly young people filling the house.&lt;/p&gt;
&lt;p&gt;At least for now, she&amp;#8217;s still the mother I love and the mother who loves me. And I&amp;#8217;m going to treasure that for as long as it lasts.&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;UPDATE&lt;/span&gt; September 3, 2010: This essay was &lt;a href="http://www.dakim.com/blogs/caregiving/2010/09/03/the-elasticity-of-memory-part-1/"&gt;republished on the Dakim.com blog&lt;/a&gt;.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:schof.org,2010-05-20:/2010/multi_file_object/</id>
    <title type="html">Creating a Custom File Object in Python</title>
    <published>2010-05-20T00:00:00Z</published>
    <updated>2010-05-20T00:00:00Z</updated>
    <link href="http://schof.org/2010/multi_file_object/" rel="alternate"/>
    <content type="html">&lt;p&gt;I ran into an interesting problem recently at work. We had six gigabytes of data in 58,000 media files of various types that we needed to install off of a &lt;span class="caps"&gt;DVD&lt;/span&gt;. For various historical reasons, these files were put in one large tar file, which was split into one-gigabyte chunks so that our installer software didn&amp;#8217;t choke on it.&lt;/p&gt;
&lt;p&gt;Our installer copied these files to the hard drive, where a Python script concatenated them back into a six-gig tar file, and then extracted the files from the tar file to their final destination.&lt;/p&gt;
&lt;p&gt;As you could guess, this was slow as hell, and I was asked to take a look and see if I could speed it up. I didn&amp;#8217;t think I could do much to speed up extracting files from a tar file, (I figure the Python code in the tarfiles module is probably pretty optimized by now.) but copying the files to the hard drive, then concatenating them on the hard drive seemed like something that could be made much simpler.&lt;/p&gt;
&lt;p&gt;I thought I&amp;#8217;d see if I could mock up a file-like object that would read through each of the split tarfile chunks, as if the file was already concatenated. That would eliminate both the &amp;#8220;copying chunks to the hard drive&amp;#8221; part, and the &amp;#8220;concatenating tarfile chunks into one tarfile&amp;#8221; part. That just leaves extracting files from the tarfile on the &lt;span class="caps"&gt;DVD&lt;/span&gt; (still stored in chunks) and writing the extracted files to the hard drive.&lt;/p&gt;
&lt;p&gt;In a few hours I was able to code up a file-like object that actually worked. No unit tests, but I could pass it as an object to tarfile.open(), and tarfile.open would extract files from it:&lt;/p&gt;
&lt;p&gt;&lt;code class="prettyprint lang-py"&gt;
multifile_obj = multi_file_object.MultiFileObject(list_of_files)
tarfile_obj = tarfile.open(name="content", fileobj=multifile_obj,
                           mode='r|')
tarfile_obj.extractall(path=targetpath)
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s some of that early, ugly code. I&amp;#8217;m presenting it in-line in this article, without a link to a downloadable file, because &lt;strong&gt;you shouldn&amp;#8217;t use this code&lt;/strong&gt;. (If you want good code, go to the download link at the end of this article.) It contains lots of assumptions about how file objects work that aren&amp;#8217;t correct, and has no tests &amp;#8212; but it works.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;NOTE&lt;/span&gt;: In thinking about this, presenting my original code, warts and all, is probably not the best teaching tool. I should probably clean this up and remove (or at least comment better) the errors I made in it. But that will have to be another night.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class="prettyprint lang-py"&gt;
class MultiFileObject:
    """ Creates a file-like object that tarfile can use as a file object.
    Concatenates multiple split files into one file, without actually doing
    that. Reads only bufsize bytes from each file, until it reaches the end
    of the last file.

    NOTE: One possible limitation of this class is that the last chunk of bytes
    read from each file may be smaller than bufsize. As long as calling
    functions depend on getting a return block of None back to indicate the file
    is done, we're good. If they depend on getting a return back of &amp;lt; bufsize
    back, we're not good. We seem to be good so far."""
    def __init__(self, filepaths):
        self.fileobjects = list()
        for filepath in filepaths:
            self.fileobjects.append(
                open(filepath, 'rb'))
        self.maxfileindex = len(filepaths)
        self.fileindex = 0


    def __iter__(self):
        self.fileindex = 0
        for fileobj in self.fileobjects:
            fileobj.seek(0)
        return self

    def next(self, bufsize=DEFAULT_BUFSIZE):
        """ This function is the meat of the class. Does all the hard work.
        Accepts self, and the bufsize to use. Returns a block of bufsize,
        or possibly of slightly small than bufsize if the remaining bytes in one
        of the files is &amp;lt; bufsize.

        Raises StopIteration when out of bytes to return; otherwise returns
        bytes.
        """
        if self.fileindex &amp;gt; self.maxfileindex - 1:
            raise StopIteration
        for currentfile_index in range(self.fileindex, self.maxfileindex):
            while True:
                chunk = self.fileobjects[currentfile_index].read(bufsize)
                if chunk:
                    return chunk
                else:
                    self.fileindex += 1
                    break
        raise StopIteration

    def read(self, bufsize=DEFAULT_BUFSIZE):
        """ This read function mimics the read function available in a true
        file object. We return bytes as long as there are bytes to return;
        then we return None.
        """
        try:
            contents = self.next(bufsize)
            return contents
        except StopIteration:
            return None
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;As an example of one misconception, real file objects don&amp;#8217;t return None when they run out of content to return, they return the empty string. Another is that read() implementations probably don&amp;#8217;t call next() in most file objects. Still, it has the essential parts of a file object. Let&amp;#8217;s look at that.&lt;/p&gt;
&lt;p&gt;I found the &lt;a href="http://diveintopython3.org/iterators.html"&gt;&amp;#8220;Classes &amp;amp; Iterators&amp;#8221;&lt;/a&gt; chapter of &lt;a href="http://diveintopython3.org/"&gt;Dive Into Python 3&lt;/a&gt; very helpful in figuring out how to do this. (Although there are some translation issues in using DiP3 to learn how to code in Python 2, DiP3 is so much better of a book than DiP2 that it&amp;#8217;s worth it.)&lt;/p&gt;
&lt;p&gt;So the first thing we need in any class is an &lt;code&gt; __init__&lt;/code&gt; method. We create some data structures and initialize variables here. Nothing very special.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;__iter__&lt;/code&gt; method is called not just when instantiating the object (as with &lt;code&gt;__init__&lt;/code&gt;) but whenever the iterator is &amp;#8220;started.&amp;#8221; (I&amp;#8217;m sure there&amp;#8217;s a Pythonic term for &amp;#8220;starting&amp;#8221; an iterator, but I don&amp;#8217;t know what it is.) For instance, in the following code:&lt;/p&gt;
&lt;pre&gt;&lt;code class="prettyprint lang-py"&gt;
test_object = MultiFileObject(file_list)

for each_line in test_object:
    print(each_line)

for each_line in test_object:
    print('Line was %s' % each_line)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;__init__&lt;/code&gt; method will only be called once, when test_object is created, but the &lt;code&gt;__iter__&lt;/code&gt; method is called twice; once for each &lt;code&gt;for&lt;/code&gt; line.&lt;/p&gt;
&lt;p&gt;I probably only needed a read() method, but I implemented next() too because it made testing the basic functionality of this file object much easier.&lt;/p&gt;
&lt;p&gt;OK. That gives us a working proof-of-concept. But it&amp;#8217;s not production code. My next step was to read carefully through the documentation on file objects, and write unit tests for each testable statement I found in the docs. I omitted everything about writing, because this class only needs to read for my purposes, and I omitted seek() and tell() because I didn&amp;#8217;t need them, and they seemed like a pain in the ass to implement.&lt;/p&gt;
&lt;p&gt;Honestly, I spent about three hours putting together these unit tests, and I did most of it at home. I was testing much more of the spec than was necessary to complete my task, and it seemed like a poor investment of my work hours. Implementing a more thorough class was something I wanted to do in order to publish this article.&lt;/p&gt;
&lt;p&gt;On another day I spent a few hours rewriting my code until it passed my tests, and then started using it at work. (I work at &lt;a href="http://www.dakim.com"&gt;a great place&lt;/a&gt;. I have permission to open-source code like this that has nothing to do with our core business. The code that provides our competitive advantage is all closed source, and I understand the business reasons for that.)&lt;/p&gt;
&lt;p&gt;I learned a tremendous amount about how file objects work while implementing these tests, and I consider this a really valuable exercise. As a continuation of that exercise, I&amp;#8217;d love to expand MultiFileObject so it supports writing and all the associated methods, as well as seek and tell. It would then be a complete drop-in replacement for the file object. (No promises about when that&amp;#8217;s getting done, though.)&lt;/p&gt;
&lt;p&gt;You can download the code as &lt;a href="http://schof.org/multi_file_object.py"&gt;a Python file&lt;/a&gt;, or check it out of version control &lt;a href="http://bitbucket.org/schof/schof.org/src/tip/assets/multi_file_object.py"&gt;on BitBucket&lt;/a&gt;. I welcome comments and suggestions.&lt;/p&gt;</content>
  </entry>
</feed>

