Message #4

From: David Vanderschel <>
Subject: Fwd: Re: [MC4D] Re: phew, at last… [4^4 solution]
Date: Fri, 01 Aug 2003 19:24:32 -0000

Date: Sat Apr 6, 2002 10:43 am

— In, Jay Berkenbilt <ejb@q…> wrote:

> i hope it’s ok with you that i expand the recipient list to
> the mc4d mailing list. this is definitely the place for these
> discussions so don’t be afraid to use it.

I’ll second that – many of us are interested to learn of new
accomplishments. If memory serves, this makes Jonathan the third
person to solve the 4^4 version of the puzzle. I worked on it in
dribs and drabs over several months back in 1999 thinking I didn’t
really have any competition, and then Roice jumped in and knocked it
out in one weekend, helping me to secure my place as number two! (I
was also the second person to solve the 3^4.) I don’t believe anyone
has conquered the 5^4. I haven’t even attempted it. There are no
elements of the 5^4 that aren’t present in the 3^4 or the 4^4, both of
which have elements not found in the other. None the less, although
solving the 5^4 would not involve substantial breaking of new ground,
it would be an amazing feat of concentration and persistence, and
would probably be more difficult than the 4^4 just because of the
shear number of pieces.

Jonathan – I’m curious… have you taken a look at the 3^4 since you
finished the 4^4? I’d be interested to get your reaction. I think
Roice and I were both struck by how small and simple the 3^4 looks
after finishing the 4^4, but then I shouldn’t be putting words in
anyone else’s mouth. :-)

> regarding graphics programming, my strongest advice is to use java
> instead of c++. i found myself literally 4 times as productive
> using java due to it’s simplicity, robustness, and excellent class
> libraries. as a complete coincidence i happen to be doing some
> scientific programming using the java3d library which though it
> a huge and often confusing api, takes care of most of the really
> nasty details of driving the native 3d graphics libraries, video
> cards, etc.

I had intended to work on a java port of mc4d, but I never got around
to it. It turns out that, at least as of January, it’s pretty hard to
get java3d to run on Linux without crashing the X server. However,
XFree86 4.2.0 has recently come out, and I now have it on my laptop.
Perhaps I should try again. I’ve been sitting on a 2.2 release of
mc4d for some time now. I’ve made a few minor enhancements or fixes
to the Linux version but, for some reason, I am no longer able to
build a working version. There are some major redisplay problems with
positioning of buttons. It looks like there’s either a recently
created bug in the Athena widget set or else the code is accidentally
relying on some undocumented behavior. I spent a few hours trying to
track this down but haven’t looked at it since early February. I
should try that again with the new X release. It’s unfortunate that
this system uses Athena widgets. Athena widgets were developed by MIT
Project Athena in the late 80’s. (I was there at the time.) X11 had
just come out (replacing X10 in 1987 or so) and the only programming
interface was raw Xlib, which is very low-level and prohibitively
difficult to write anything complex in. There was work on Xt, the X
toolkit, which provided some framework for the creation of widgets. A
few people at Athena implemented a widget set called Athena widgets
which was intended more as a proof of concept than anything else. At
the time that Don wrote the original UNIX version of the puzzle, this
was the only practical and freely available widget set for X. This is
certainly no longer the case. Between various open versions of Motif,
Gtk, and quite a handful of other options, there is really no reason
to be using Athena widgets anymore. The way the code is structured,
it wouldn’t be too hard to write a new front-end. The button stuff is
quite simplistic in comparison to the drawing logic, but, in the Linux
code, that’s just polygons with all the 4d -> 3d and 3d -> 2d mapping
being done in the code itself. (The windows version uses a 3d
library, eliminating the need for the code to do the 3d -> 2d mapping.
I’d think a java port would do the same, especially with java3d.) I’m
sure Don or Daniel can correct me if I’ve misrepresented anything

In any case, if you want to start messing with the source code, the
version I have in version control is newer than what’s on the web
site. Maybe we should put this project on sourceforge. (See if you’re not familiar with this.)

> regarding toggling visibility of the invisible face, we briefly
> tried that but found the resulting display was totally
> unusable. you mention "transparency" though which would be
> different but i suspect won’t be helpful. my dream would be to
> model the precise 4d analog of a 3d mirror and place it in the 4d
> scene such that the invisible face becomes visible from a
> direction. i guess that the 4d "reflection" would appear as a 3d
> object embedded within a 3d mirror appearing like a solid block of
> glass. i have no idea how to do this though. perhaps you’ll figure
> it out!

We tossed a number of interesting user interface ideas around a few
years ago. My particular favorites are having multiple simultaneous
views active so that you could, for example, look at the "front" and
the "back" of the puzzle at the same time thus being able to see all
the cubies at the same time. Another feature I had thought about was
the ability to do something or have the puzzle in some mode where you
can select one polygon and have some highlighting appear on all the
other polygons that are part of the same piece as the selected one.
This could happen automatically as you move the mouse around or could
require some action. This feature should be switchable. I think it
would be especially useful for a novice, but I suspect you’ll agree
that once you’ve solved the puzzle, you have to have a pretty good
ability to do that matching on your own. It would be useful to
combine these two features so that if you select a piece on one view,
it highlight’s on the other view as well.

Supporting these features would be pretty hard with the current
implementation because of the way the view is connected with the
state, but not impossible. They are separated somewhat in the code,
but the code knows that there is only one of each.

> Jonathan Vaughan wrote:
> > Seeing as I now have Linux :) I would like to start doing
> > some C++ and graphics with it, and I figured that poking around
> > in the source code for MC4D should give me somewhere to start. I
> > was wondering whether I could try adding a feature that toggled
> > the transparency of the outer layer of hyperstickers - this
> > would make 4^4 a bit easier in the early stages and give me a
> > chance of doing 5^4 :)

It’s great to find out that some people are using the Linux
version. :-)

> > Any advice about development environment for C++ under
> > Linux? Is there an equivalent of Visual C++ or does everyone
> > just use GCC and Emacs?

There are some more visual environments for Linux. Borland has one.
There’s also something called Kylix or something like that. They
advertise in Dr. Dobbs journal or Linux journal. I may not have the
name right. However, I believe that emacs and gcc are the best way to
go. When you start getting more proficient, you’ll probably feel that
your hands are too tied by the graphical front-ends. Also, I’m not
aware of any free graphical integrated environments for Linux. Then
again, I wouldn’t be the right one to advice about that though since
I’ve been living and breathing emacs, gcc, and make for 15 years…

                            Jay<br> --- End forwarded message ---