This comes up now and then, and it's probably a good time to
talk about it for the most recent wave of newbies in our
midst. Here are some basic problem solving skills it might
be useful to acquire:
1. If you have something you want to do, don't automatically
assume that there is a single Max external that will accomplish
your specific goal. While that may be true, it is more likely
that the solution you seek will involve some lower-level funtionality.
The fact that you don't automatically know what
single object or objects you need is a result of your being
ignorant - lots and lots of more experienced users don't auto-
matically know what to look for, either.
Even more users with quite a lot of experience discover along
the way that there was another way to do something all along.
The trick is learning how to look intelligently. While
wallpapering the Max list the second you have a question at all
may seem expedient for the moment, many users have found that
the search for a solution itself will direct them to riches
they didn't know about.
2. How might you go about hunting around for things more
intelligently? One way which is, in my experience, not
intuitively obvious to new users involves doing searches
in PDF documents. As people have said and will say again,
the help file does NOT contain everything you need to know;
merely those things most commonly used. PDf searching is quick
and may be PARTICULARLY useful to people for whom English is
not a first language. Best of all, you can put all your PDFs
in a single folder and direct Acrobat to search in the entire
folder (i.e. everywhere). New Jitter users routinely seem to
completely miss all kinds of things covered in detail in the Jitter
Tutorial, probably because they assume that the online html is
all they'll ever need. Ain't so. So try a few keywords for your search.
3. Doing exactly the same search in the Max archives will
quite likely also be very very useful, that those searches
may also bring up some code examples. They will also save
you one iteration on the Max list - the one where someone
answers your question by telling you it's already in the
4. Often, new users [who are already prone to thinking that
there is a simple/secret Max object that does some incredibly
complex thing] won't start thinking of their problem in smaller
units. A request of the form, "Hi! I want to use my computer
keyboard to randomly play frames in a movie and scrub stuff from
a buffer. How do I do that?" is actually three requests rolled
a. What do I do to get data from my keyboard? Can I do that?
b. How do I play individual frames in a movie?
c. How can I scrub audio stored in a buffer?
Whenever possible, at least make some attempt to break down
your problem. You may find that you either know something
about how to do bits and pieces of it, and it's more likely
that posting a query that implies you've done already invested
a little though equity by trying to break your problem down
will get you more answers and better ones.
5. Once you get some of the answers you seek [either a piece
of code or advice on where to look for your answer], there's
the question of joining things together so that they work. Here
is the point where almost everyone agrees that spending some
time in the tutorials REALLY matters. Almost every single
Max problem breaks down into three bits:
a. The Max code that does the work you want in the end will
expect some kind of message that tells it what to do. You
need to know what that message IS, or you'll be staring
at the patch like a cow at a passing train.
b. At some point, there's something someplace in your
patch that is spitting out or generating control data.
A video camera, a MIDI keyboard, your computer keyboard,
a little Max applet that calculates a Navier-Stokes
equation, whatever. You need to understand what form that
output takes. Is it a stream of numbers? Is is a bunch of
lists? Is it data from a serial port? Does it come from a
bunch of places? One of the things that you need to know
has to do with what those messages are, and how Max does
what it does. Read the Overview chapter in the Fundamentals
manual. Read "How MSP Works" and the Audio I/O chapter in
the MSP tutorial. Ditto the "What is a matrix?" and opening
tutorials in Jitter. If you don't know that stuff, you'll be
making all kinds of mistakes all the time you can avoid
with a little effort.
c. Finally, the question for you and every other schlub in
the Max world is: "How to I take the messages from the
start end of the chain [camera/keyboard] I am getting
and put them in a form that the Max objects at the end of
my patch chain will understand?" Not only is that THE THING
THAT EVERYONE DOES ALL THE TIME, what you wind up with as
a result will, in time, become part of another chain of
Max things that will have you asking questions a., b., and
c., all over again.
And how do you know that stuff? Max is about passing data
here and there, in the form of messages or matrices. Those
reading assignments in b. above? That's where the stuff is
talked about. The poor drudge who actually learns how to
handle and route messages, figure out how to read a manual
pages, and those dreary things is the person who's playing
hare to your tortoise. As Eno's Oblique Strategies say,
"Always first steps."
If you engage in the input/transformation/output stuff
making Max patches for long enough, you'll know for yourself
what I'm about to tell you: There is almost ALWAYS more than
one way to do anything in Max, and it's not necessarily the
case that the way someone you know does it is the only right
way to do things. One sure sign of a beginner is that they'll
ask how something is done in a way that implies that there's
only one solution. Asking someone else how they would do a
task you've thought through enough to verbalize clearly is
a near sure way to discover all kinds of interesting approaches
that other people have. Collecting huge folders of possible
solutions to all kinds of problems won't make you a better Max
programmer. Finding the ones that make sense to *you*, and
doing so in the midst of solving a problem [which reinforces
your learning] will.
Finally, there are as many different questions and ways of
questioning as there are questioners. Having said that, I
honestly think it's safe to say that - in general - you'll
have the best luck doing some amount of your own searching
about before posting questions, and you'll also find that the
quality of the solutions you get from others will generally
be in direct proportion to the impression that you've already
done some of the work rather than that you're trying to get
someone to do your work for you. Likewise, demonstrating your
commitment to a wider community by being polite enough to
ask good questions is also reinforced by sharing the
solutions your receive, or posting the ones you arrive
at. They may, in turn, lead to other refinements from
other readers, thus rewarding you again.
I meet people all the time who labor under the misapprehension
that Max is composed of a series of secret tricks that only
the cognoscenti know. The regularity of it makes me sad. If
there *is* a Max secret, it is probably that quite a few of
the people who appear to be really bright have discovered in
the course of making mistakes and poking around while solving
their own problems what the people who asked them for their
answers won't ever figure out. The journey is as important
as you believe the destination to be.
Good luck, and happy hunting. Now that I've typed a bunch
of things I say in various ways in various places, I'll be
able to refer to it as this post.