Most peer-to-peer file sharing
applications suffer from a lack of trust
in the other "peer". When you download
a file, you never quite know what you're going to get. All you know is the file name (and possibly file size and a few other minor attributes). You have to actually download the file to see if it's what you want.
I propose that the idea of thumbnails be generalized to other file types and be used in P2P applications. The "thumbnails" could be transferred either along with search results or on request by the user.
The method used to create a thumbnail for a particular file should be configurable, so it can be adjusted for particular needs or extended to new types. Under Unix, this could just be a matter of a list of MIME types and corresponding thumbnail generating scripts.
It would be the serving machine's responsibility to make the thumbnail in a reasonable format (or to just say no). The receiving machine would be responsible for letting the user view it in some appropriate way. The receiving machine should have the option of refusing thumbnails larger than some fixed size.
Some suggestions for thumbnailing various file types:
- Images: Create a traditional scaled-down version of the image to some appropriate size, in the same format as the original. Alternatively, the thumbnail could be hand-created by scaling only part of the image. Typical size: a few Kb.
- Audio: In particular MP3's, but this also applies to OGG, WAV, etc. Take a few seconds from the middle of the audio file and encode as a 128kb/s MP3. Typical size: <100 KB.
- Text: Plain text or other formats that encode text (HTML, word processor, etc.). Take the first 250 characters from the document, as plain text. Typical size: 250 B.
- Video: A JPEG image with some frames from the video (eg. a grid of 9 frames from equally-spaced positions in the video). Typical size: <100 KB.
- Archives: TAR-balls, ZIP files, etc. Send a list of the filenames in the archive (up to some maximum). Typical size: a few KB.
Creating some of these thumbnails would be computationally heavy. So, they should probably be cached after initial creation or created in advance.
Along with the thumbnails, some useful meta-data should be sent. For example, the length, encoding details and ID3 tag of an MP3; the dimensions of an image; length, size and encoding and audio track information for a video.
So, is somebody going to implement this for me, or what?