Marlin’s Gottahack
– 1998 Nov 30 – PREV HOME NEXT
Warner
----------
Spent the last week in Miami just before
Thanksgiving visiting the Warner Brothers music printing office/warehouse. It
was pretty neat. You never seen such huge piles of music books. They use a
Heidelberg press for their four color covers and some big huge sucker that
slams out and folds up about 16 pages at a pop. They got gluing machines and
trimmers an all kind o’ fancy stuff down at the thing there.
Looking at the huge warehouse of finished
cases of books and the folk running around doing order fulfillment got me to
thinking about the automated Epsom printer factory that I saw in Japan many
years ago. The Epsom factory was full of industrial robots that assembled the
printers and had about 2 people on the line that did the two jobs that were too
hard for the machines. As I recall one of the too hard jobs involved wrapping
an internal cable once around a supporting post and plugging it into a socket.
Anyway, I talked with the manager about robotizing the factory and was told
that he had looked into it. The problem was that it would cost about a million
to convert, would do nothing to increase revenue, and would take years to pay
off.
Seems to me that the internet is going to
encourage more and more mail order business and this in turn should encourage
someone to work on a more generic warehousing solution. I imagine that there
would be some economies of scale for someone to build the BIG robot controlled
warehouse that takes raw goods in bins in one door, and stuffs miscellaneous
collections of them into boxes for shipping to customers out the back door.
This outfit would in turn simply provide generic mail order support for anyone
that makes non-perishable packaged goods. Perhaps that is the direction that
Amazon is heading.
In any case, the trip was informative and
helps us understand what Warner us up to and why they are working with us and
what we can be doing to get the most out of the Sunhawk/Warner relationship. Of
course, afterwards we came home and chowed down a lot o’ turkey. I assume that
most of you all did the same.
Puzzle #3
-------------
This is my all time favorite out of years of
collecting these things.
Bob thinks up two numbers that each have at
least 2 digits (that means that the numbers are both >= 10). Bob tells Peter
the Product of the two numbers but does not tell him the two numbers. (note
that Peter, and Product both start with the letter "P". This is the
sort of detail that separates the really great puzzles from the mundane)
Similarly, Bob tells Sally the Sum of the two numbers, but not the two numbers.
The following conversation ensues:
Sally: Bob told me the sum but I don’t know
what the two numbers are.
Peter: He told me the product but I also
don’t know what the two numbers are.
Sally: Oh, really, you don’t know the two
numbers? In that case I now know the two numbers.
Peter: Oh, if that is true, then I also know
what the two numbers are.
What are the two numbers?
The thing that I find entertaining about this
puzzle is that you, the reader, are given almost no information. You are not
told the sum, the product, or the two numbers, yet there is still sufficient
info to solve the problem.
Quod
---------
Have you ever walked up to a glass door and
found the word "lluq" printed on it? How long do you stare at that
word pulling or pushing on the door trying to get in or out before you realize
that it is mirrored because it was written on the other side of the glass and
is really the word "pull". You then pull the door and even before the
muscles in your arm have begun the contraction your brain racing ahead tells
you, "No, you are supposed to pull from the other side so that means you
have to push from this side." to late, you are already pulling the door.
This is a frustration and a total waste of
time. Hey, I know that this is not a major crisis, ozone hole, holy war,
collapsing economy, social fabric being ripped apart kind of thing. Sometimes
it is easier to fix the simple things before you get around to the bigger ones.
It’s just a reflex. You see a bug in the code, you rip it out, even if you were
going in after a bigger one.
The solution is as obvious as the problem
once that you recognize that it is a problem. Our alphabet contains many
bilaterally symmetric letters and also mirror pairs that can be read right
through the glass. If the word for push was something like, "boup"
and the word for pull was "quod" the word would work from either
direction. Now I’m not saying that those are the best words that we could be
using, I just use that as an example.
Finally we come to the audience participation
part where you help decide the future of the English language. It’s our
language after all. Has a very efficient if somewhat anarchic voting system
with no electoral college scata in the way. You just use any damn word you want
any way you want and if its cool, if it is copacetic with other folks - I mean,
if it grabs their fancy, rings their chimes or is in some way a rad gnarly
sorta thang that people start using - then it is voted into the language. It’s
that simple. You don’t have to write your congressman. You don’t need to get
permission from your mom. You don’t have to set your clock an hour ahead. You
just start quoding the doors instead of pulling them.
You don’t even have to go out with your
spraycans and start screwing around with other peoples glass houses, just quod
your wagon to the store, quod items off the shelves, boup your money across the
counter and go home. JUST DO IT!
Don’t get me wrong, I don’t mean to say that
we will face no opposition. Anytime you try to start using new words the
thought police are hanging around nearby trying to eliminate perfectly fucking
good words that don’t match with the way they want to use them. They will
explain to you that what the word you are using actually connotes is ... and go
off into some paranoid fancy that if you refer to certain bodily parts or
functions or use gendered pronouns you must be some kind of stupid shit for
brains. Just smile, thank them for their kind word, and boup past them.
Symmetry Groups – Points, Strips, &
Wallpaper
----------------------------------------------------------------
A few years back I hacked out a
"doodle" program that lets you choose a symmetry group and then when
you scribble the machine would keep your drawing in that group. I only
implemented the point groups and the strip groups and did not get around to the
wallpaper groups. As is usually the case, I started with the simple ones and by
the time I got to doing the wallpaper group realized that I had done the whole
thing backwards and should start over. I have discovered over the years that
while it is sometimes difficult to rip up and throw away code that you have
just written it is trivial to just wait a few years and lose it to the ravages
of office moves and upgrades to the compiler. Thus now that that code is lost I
am starting in on this problem again.
I figured that I can use this toy problem to
introduce myself to writing JAVA. If I am still capable of learning, I will
eventually post this doodle program where you all can play with it, but I
thought I’d preview some of it here in outline for those of you that prefer to
hack these things up for yourselves.
The doodle program is surprisingly addictive.
You put in random scribbles and it flips and rotates the mess to give you
something VERY symmetric (I mean, duh, that’s why they call them symmetry
groups) You can draw like M. C. Escher with out doing any work. (humm… sounds
like unsupportable marketing hype to me) If I could figure out how to capture
screen images I could show you hundreds of examples.
I started out writing this up by just leaping
right into the code. Then I got to thinking that not all of you are
mathematicians and might need an introduction to the symmetry groups before I
pound into the code. As usual, what started out as a quickie intro to symmetry
groups turned into a long unintelligible math ramble. So it goes. I’ve decided
to go with the math lecture first and save the code for a future date.
The symmetry groups are built up out of a
handful of elementary symmetries, Translation, Rotation, Mirror, and Glide. A
picture has one or more of these symmetries if you can apply the transformation
to the picture and end up with exactly the same picture. Thus a picture has a
mirror symmetry if there is an axis where you can flip the picture over along
that axis and the resultant picture is an exact duplicate of the original. The
letter "M" for example has a vertical mirror axis right down the
middle. "S" has a "2 fold" or 180 degree rotational
symmetry about the central point. "+" has a 4-fold rotational
symmetry.
Translation is simple but leads us
immediately into infinite pictures. Why, because if the picture had a boundary,
when you pick it up and slide it over you would be moving the boundary but by
definition you must get the same picture from applying the transformation. So
there is no boundary. Basically the point symmetries are finite. They have no
translations and consist only of rotations and possibly mirrors. If you have a
single Translation you are in the strip group, where you MUST be infinite in
the direction of the translation but you COULD be finite perpendicular to the
translation. If you have 2 Translations, you are in a wallpaper group where you
fill the plane. (If you have 3 translations, then you are out in space in one
of the crystallography groups which we are not going to get into here)
The only elementary transformation that might
not be immediately familiar is the Glide. The Glide is simply a combination of
a mirror and a translation in the direction of the mirror. The easiest way to
show it is by example:
M M M M M
W W W W W
This figure (which should be infinite because
it has a translation) has a horizontal glide plane between the lines. You first
perform a mirror about that line which turns the M’s into W’s but the simple
mirror does not get them lined up correctly. Then you translate the mirror
image horizontally to line everything up. That single operation, Mirror
combined with translation along the axis of the mirror is a Glide.
The symmetry groups are made up of combinations
of those 4 simple operations. There are not very many symmetry groups. There
are only two infinite families of point symmetries, 7 strip symmetries and 17
wallpaper symmetries. (A mere 2 countable infinities plus 24. Heck, we’re not
even close to the Mahlo compact cardinalities!)
I am not going to list them all here (well,
actually I am, but I did not know that when I started) but I will describe a
few to give you the idea of what they look like.
You got exactly 2 infinite families of point
symmetries. They are the simple n-fold rotations R(n) about a single point. The
other is the dihedral family D(n) which looks just like R(n) except that it has
n mirror planes that all run through the center of the rotation. (The n mirror
planes are of course equally spaced looking like the spokes of a bicycle wheel)
The seven strip guys look something like
this: they all have a single translation vector, which I will think of as being
horizontal. My example with the M’s and W’s above is a strip with a horizontal
glide down the middle of the strip. (Note the difference between the glide,
which mirrors an M into a W and slides it into place, and the translation,
which takes an M and translates it horizontally into then next M.) If the W’s
had been exactly under the M’s you would have a group with a single Horizontal
mirror instead of a single Horizontal glide. (If you wanted to get really techy
you would eliminate all references to mirrors and treat them as merely a
special case of a glide that just happens to have a translation component of 0
but fuck that. Mirrors are easier to think about and easier to talk about. They
stay!)
The fact is, the M’s and W’s exhibit other
symmetries – You can drop in a Vertical Mirror plane down the middle of every
single M or every single W. That mirror reflects the entire strip into a copy
of itself. Thus you can also have an infinite sequence of vertical mirrors. The
other symmetry is a point of 2 fold rotation at the center of the imaginary
line that joins the leg of the W to the nearest tip on an M. If you rotate the
entire strip 180 degrees about that point, the M rotates into the W and vice
versa. All the strip groups are combinations of these features.
The complete list of the strips along with
their ancient names is:
P111 – the strip group with only a single
translation
P1A1 – the strip group with a single
horizontal glide
P1M1 – the strip group with a single
horizontal mirror
PM11 – the strip group with a sequence of
Vertical mirrors.
P112 – the strip group with a sequence of 2
fold rotations
PMA2 – the strip group with a horizontal
glide and an alternating sequence of vertical mirrors and 2folds
PMM2 – the strip group with a horizontal
mirror, a sequence of vertical mirrors, and 2folds located at the mirror
intersections.
Just for the record, the M’s and W’s from
above is actually an example of the PMA2 group.
Ah what the heck, now that I’ve come this far
I might as well tell you the names of the wallpaper groups as well. They all
have the two translations, I will not list all of the symmetries for each
group, only the distinguishing ones and I will sort them into little clusters
based on their most complicated rotational symmetry.
--Groups with no rotations--
P1 – two translations
PG - a sequence of vertical glides
PM - a sequence of vertical mirrors
CM – an alternating sequence of vertical
mirrors and vertical glides
--Groups with 2 fold rotations--
P2 – a lattice of 2 fold rotations
PGG – a lattice of Horizontal and Vertical
Glides (the 2folds are forced at the centers of the lattice rects)
PMM – a lattice of Horizontal and Vertical
Mirrors (2folds forced at mirror intersections)
PMG – Horizontal Mirrors with Vertical Glides
CMM – alternating Mirrors and Glides in both
the Vertical and the Horizontal directions.
--Groups with 3 folds--
P3 – lattice of 3 folds
P3M1 – Mirrors laid out in grid of
equilateral triangles (3 folds forced at 3way mirror intersections)
P31M – Same as P3M1 but has extra 3 folds not
forced by the mirrors located in the centers of the equilateral triangles
bounded by the mirrors.
Note both P3M1 and P31M also force a grid of
glide planes but I’m not saying where they are, so there.
--Groups with 4 folds--
P4 – square lattice of 4 folds (forces 2
folds in centers of squares)
P4G – Just like PGG except the intersections
of the Glides are 4 fold rotations. Well not just like, because as soon as you
add the 4 folds it forces a bunch of other glide planes running at 45 degree
angles, which forces more 2 folds. I’m sure you get the picture.
P4M – PMM with 4 folds located at the mirror
intersections, which forces….
--Groups with 6 folds--
P6 – Triangular lattice of 6 folds which
forces a bunch of 3folds and 2 folds
P6M – same as P6 except you run mirror planes
through all the 6folds which forces … you know, stuff.
TADA! That’s all.
If any of you are still awake after all of
that, I applaud you. It helps me to write this all out before I start hacking
on the code.
As I said, code next week. It may sound
complicated, but that is just the math talking. The code is really very simple,
like 20 lines (with several hundreds of lines of initialization code, and
thousands of lines of library routines, and millions of lines of operating
system code of course)