A standard way of coming up with new ideas is to juxtapose
two existing well-known ideas to see how they could be
combined. So suppose you're talking about bodies of
information, such as software (either running on your own
computer or accessed through the web). What are the
software features I use day to day?
- a web browser (such as Firefox)
- remembers what I'm doing
- downloads data off the web
- helps me store things on the web
- renders HTML user interfaces
- supports my customizations, like bookmarklets and
Greasemonkey
- Google:
- caches the web
- indexes the web
- computes trust metrics for web pages
- performs boolean queries on large data sets
- excerpts web pages to find the answers to my questions
- Emacs:
- remembers what I'm doing
- helps me make new versions of my files, or write things from
scratch
- automates common processes like feeding a source file to a
compiler and finding the error in the source
- LiveJournal:
- aggregates streams of updates from various friends about
their lives into a single stream
- provides a single namespace to allow me to name the
people I want to be able to see things I write
- provides authentication services on that namespace
- supports high-latency group conversations extending over
days
- hurts people's feelings
- Gaim:
- displays my friends' status in real time
- supports real-time one-to-one conversations
- encrypts conversations and authenticates conversational
partners to provide privacy (with OTR)
- AIM or Yahoo! Messenger
- provides a single namespace to allow me to name people I
want to talk to
- ferries messages back and forth between us
- del.icio.us
- remembers what I've read and tags it so I can find it
again
- tells me what people I know have been reading
- remembers and collates people's annotations of external
web sites
- IRC
- supports real-time group conversations extending over
years, either public or private
- hurts people's feelings
- integrates the functions of the world's largest
distributed systems with one-to-many pub-sub messaging
- Twisted Python
- provides easy programmatic access to many network protocols
- supports concurrent programming
- apt
- tells me about pieces of software
- installs software with very little effort, including its
dependencies
- upgrades software to newer versions
- ls
- lists pieces of information with their titles, ordered
by name, date, or size
- eBay
- categorizes products
- authenticates people
- remembers reputations
- searches product listings
- mediates auctions
- gets me used products cheap
- turns my old stuff into money
- gives me market prices for goods
- grep
- evaluates queries on large unindexed collections of records
- searches large collections for keywords
- returns context around keyword uses
- determines whether something simple is true of a piece
of data
- icewm
- rearranges my screen at my whim
- keeps track of tasks I'm working on
- merges output from many programs
- quickly switches between current tasks with alt-tab
- craigslist
- remembers classified ads classified by geography and type
- displays them by recency
- gets me used products cheap
- turns my old stuff into money
- dict.org
- gives me word definitions
- WordPress/Movable Type
- displays recent articles
- supports high-latency public conversations lasting days
- archives articles at stable URLs to facilitate later
comments and links
- DNS
- makes physical location invisible
- provides worldwide global transparently distributed
read-only database
- Linux
- isolates misbehaving programs from each other
- isolates misbehaving users from each other
- interfaces with innumerable hardware devices
- provides resource sharing for mutually untrusting
parties
- gs
- runs untrusted PostScript programs in relative isolation
from the rest of the world
- provides sensible API for drawing device-independent
graphics
- displays existing documents
- transforms existing documents between formats
- iwconfig
- tells me about my local wireless network
- reconfigures my wireless hardware to attach to that
network
- LinkedIn
- lets me check my friends' resumes
- reminds me of my friends' existence
- squeak
- runs Smalltalk code
- supports interactive experimentation with UI elements
- Snikisniki
- contains and queries heterogeneous semistructured data
expressed as RDF-like triples
- supports easy user editing of that data
- CVS
- maintains multiple versions of a file
- allows multiple copies of a file to be eventually
synchronized when the time is right
- remembers history of a file, so you can tell who wrote
which parts, and when
- WikiPedia
- contains a summary of the world's important knowledge
- lets me search that knowledge
- lets me add to that knowledge, esp. by correcting it
- Google Maps
- displays maps
- displays satellite (and aerial?) photography of the
world
- supports search by address
- supports display of satellite photography by location
- SpamAssassin
- examines incoming mail to guess whether it's spam
- evaluates a user-defined set of rules on the mail to
make this guess
- nopaste
- makes chunks of text URL-addressable to support IRC
conversations
- announces new text chunk URLs and titles in IRC
- URL shortener (makeashorterlink or csua.org/u)
- makes long URLs addressable by shorter URLs, supporting
conversations in media that don't support long URLs well
- tracks popularity of URLs
- Flickr
- stores photos
- categorizes photos in customizable ways
- the Python interpreter
- supports interactive experimentation with OO design and
algorithms
- lets me write simple programs very easily, then scale
them to enormous ones
- pushd/popd
- quickly switches between filesystem locations
- BGP
- routes packets to their desired destinations quickly by
means of interpersonal trust relationships and social
sanctions for broken trust
- gprof
- tells me why things are slow
- lets me view software execution in a different way to
provoke different insights
- Creative Commons
- expresses permission to use, copy, modify, and
redistribute information
- Postfix
- safely stores incoming mail messages so I can read them
- interfaces with other message sources and sinks on the
network
- queues outgoing messages so they don't kill my machine
- units
- remembers the definitions of different units of
measurement
- converts between different units of measurement
- bc or my DHTML calculator
- calculates with numbers
- orkut
- reminds me of the existence of my friends
- reminds me of which friends know one another
- hurts people's feelings
- Pipermail
- turns email into web pages
- permanently records email
- makes email browsable
- xwd
- permanently records what I'm seeing on my screen at the
moment
- Lotus Agenda
- organizes index-card-like items in an ad-hoc fashion
- allows me to program pattern-action rules very easily
- automatically classifies short bits of text
heuristically
- pobox
- provides a stable URL and email address for me
- filters my mail for spam
- forwards my mail to the location where I presently read
and store it
- Bugzilla
- tracks current and future action items
- supports very slow ad-hoc conversations lasting years,
typically about particular software features
- ifconfig
- reconfigures my network
- gives me network usage statistics
- tells me about my network environment
- Wiki
- supports very rapid hypertext creation
- lets me edit, annotate, and correct anything I read
- shares my edits with others
- remembers old versions of Wiki pages
- Babelfish
- translates text from one language to another, poorly,
but often well enough to enable communication
- procmail
- applies pattern-action rules I write to my incoming
email
- gcc
- generates fast machine-code versions of programs
- checks programs for machine-detectable errors
- PHP
- lets me insert little bits of on-the-fly-generated stuff
into web pages
- lets me easily glue together a bunch of C libraries into
a web interface
- supports rapid application development
- supports easy code deployment
- isolates mutually untrusting users from each other
- tcpdump
- tells me about my network environment
- lets me look at my software at a lower level of
abstraction in order to debug it or understand its
performance
- Technorati
- searches recent blog posts with keywords
- finds blog posts that link to a certain URL
- computes trust metrics over blogs
- nmap
- tells me about my network environment
- lists inputs and outputs of large systems
- BitTorrent
- rapidly transfers popular files to many people
- reduces the cost of publishing by five orders of
magnitude
- top
- lists running processes
- explains why my computer is slow
- helps me make my computer not slow
So suppose I crossed some of these two?
- iwconfig and xwd
- permanently records my current wireless network setup so
I can restore it later, or send it to someone else so
they can connect to the same network
- or prints statistics about what I'm seeing on the screen
- PHP and BGP
- lets me insert little bits of on-the-fly-generated stuff
into routing tables
- or, let web pages advertise the services they can
provide, and an easy way to glue a bunch of the services
together to make an integrated service
- or, use interpersonal trust relationships and social
sanctions for broken trust to let a large number of
people update code that runs on my web pages
- Technorati and Linux
- isolates misbehaving blogs from each other
- or, interfaces with innumerable blog backends
- or, interfaces with innumerable search backends
- or, computes trust metrics over hardware drivers
- or, provides resource sharing for blogs (Technorati
already does this, eh?)
- WikiPedia and gprof
- summarizes why all the software in the world is slow
- or lets me view collaborative authoring in a different
way to provoke different insights
- or lets me search histories of past program execution to
see if it was really faster last time, and when it
changed
- or provides hooks into programs to let me search their
execution patterns and add pattern-action rules to them
- nmap and nopaste
- makes information about my network environment
URL-addressable to support IRC conversations
- or announces new network environments, open ports,
etc. on IRC
- BitTorrent and LinkedIn
- rapidly transfers popular files to people I trust
- or reminds me of the existence of files I care about
(maybe new podcasts?)
- or reduces the cost of keeping in touch by orders of
magnitude? Not sure how to do that.
- BitTorrent and xwd
- rapidly transfers what I'm seeing on my screen at the
moment to a bunch of other people all at once --- a sort
of videoconferencing system
- ifconfig and Google
- remembers previous network configurations and lets me
search them
- or computes trust metrics for my network environment (to
turn on or off unencrypted/unauthenticated services)
- or performs queries on large collections of network
configuration information (to find misconfigured or
similar nodes?)
- or gives me statistics about the web
- Babelfish and squeak
- a compiler: translates code from one programming
language to another well enough that it can be run. Or
perhaps even read and edited.
- or, something that supports interactive experimentation
with phrasing in an unfamiliar natural language
- LinkedIn and dict.org
- reminds me of the existence of words (a la word of the day),
- or shows me the "resume" of words --- their uses
throughout the literary canon of the language in question,
- or gives me more information about the companies, jobs,
skills, etc., on people's resumes.
- PHP and Flickr
- lets me insert little bits of on-the-fly-generated stuff
into images,
- or categorizes bits of code in customizable ways,
- or supports easy photo deployment
- Lotus Agenda and IRC
- heuristically organizes chat-lines into topics of
conversation,
- or supports very simple pattern-action rules on chat
lines,
- or allows people to organize chat-lines into topics of
conversation very easily,
- or hurts people's feelings in a very organized fashion,
- or is just like Agenda, only accessible in real time
over a network.
- bc or my DHTML calculator and top
- lets me conveniently make calculations starting from
performance numbers (e.g. the sum of the memory usage of
several processes)
- displays a bunch of numbers computed by data that
changes in real-time, according to user-specified
formulas, and allows me to keep them sorted however I
want
- CVS and Wiki (CVWiki's been around for a long time, I
guess, but...)
- merges changes to a Wiki page made by multiple
contributors, or
- lets me keep a local version of a Wiki offline
- URL shortener (makeashorterlink or csua.org/u) and BitTorrent
- turns any file accessible by URL into a torrent, or
- precaches popular URLs on your computer
- URL shortener (makeashorterlink or csua.org/u) and IRC
- an IRC bot that shortens URLs --- done this already; or
- hurts people's feelings more conveniently, or
- makes previous lines of IRC chat accessible by short IDs
(like perplog --- I guess someone did that already too),
or
- tracks popularity of chatters
- AIM or Yahoo! Messenger and Bugzilla
- provides a single namespace for all bugs --- well, maybe
that's the URL namespace;
- or provides a real-time chat channel for each bug;
- or provides an interface to create new bugs simply by IMing
the bug tracking system;
- or the bug tracker IMs you when a bug you care about is
fixed, or when you're assigned a new bug. At least if
it's really urgent.
- Babelfish and icewm
- translates text in place on my screen in any two
applications between human languages
- icewm and Bugzilla
- keeps track of windows I plan to open to get something
done soon;
- or lets me create, delete, reprioritize, and merge bugs
with a few keystrokes.
- Linux and icewm
- isolates misbehaving programs from each other;
- or rearranges my resource allocation at my whim;
- or keeps track of tasks I've asked the system to do for
me, running them in a queued fashion
- nopaste and tcpdump
- makes captured packets and connections URL-addressable
to support conversations about them;
- or announces new "interesting" network events in IRC
- Creative Commons and eBay
- categorizes freely-redistributable information and
tracks the reputations of its creators;
- or authenticates copyright holders, or those who claim
to be copyright holders, and allows other people to
publicly dispute their claims of authorship;
- or searches freely-redistributable information;
- or just does online auctions without being butt-ugly and
a half.
- Postfix and Flickr
- safely stores incoming photos so I can view them or
forward them to others;
- or categorizes email messages in customizable ways;
- or interfaces with other photo sources and sinks on the
network so I can use a single unified photo-viewing web
site.
- Wiki and Google Maps
- supports very rapid map creation;
- or lets me edit, annotate, and correct any map I read;
- or supports geographical (or at least geometrical) data
embedded in a Wiki;
- or remembers old versions of satellite photography of
the world.
The random combining in this essay was done with this
program:
#!/usr/bin/python
import sys, re, random
def items(infile):
curitem = None
for line in infile:
if line.startswith('- '):
if curitem is not None: yield curitem
curitem = line
elif line == '\n':
if curitem is not None: yield curitem
curitem = None
elif curitem:
curitem += line
def randpair(some_items):
ii = random.randrange(len(some_items))
jj = ii
while jj == ii: jj = random.randrange(len(some_items))
return some_items[ii], some_items[jj]
if __name__ == '__main__':
print ''.join(randpair(list(items(file(sys.argv[1])))))
Many thanks to Matthew O'Connor for the ideas of his I've
incorporated above.