> Here are some experiences I went through in similar
> situations :
>
> Try to imagine what it is to be on a small both 5x10,
> (1.5m x 3 m) feet or 10x10 feet, (3m x 3m), for a
> week. We will not have a bigger booth.
....
Same experience when caring of a small stand for my Ministry : placed at
the end of a looong way through the exhibition halls, just near a boat
(real size) with a captain loudly speaking in a micro 4 meters above the
ground...
Peoples were so tired that they passed their way.
Are we sure that the target public is well reached at a central booth ?
It is better to think about effective (real life) ways to contact people :
in my opinion, simpler demos distributed in small places (schools...)
about simple day-to-day useful problems are very important.
In a large conference, the people are burried into a very thick layer of
flashy informations. Probably others react like me : soon I am bored by
the fact that graphic screens are so uniforms, seen from the paths.
If we want to interest somebody, we must provide real life information,
easy to put into work on real life hardware.
Better is to provide solutions to unanswered problems : one very powerful
example coming in my mind is (in the 'always poor' school context) to
demonstrate the power of the remote X usage, linked with a well installed
application server.
It seems so evident for UNIX guys, but the M$ users are not even aware of
that possibility.
I am writing a menu generator, to provide the equivalent of the KDE menu
remotely.
Execute 'mkmenu > rmenu' to build the real 'rmenu'; mkmenu it is a perl
script the /opt/kde/share/applnk structure to generate a tcl/tk driven
menu, usable remotely by the X-clients.
Sure Beowulf ... is terrible, but it does not seem linked to the
day-to-day problems of the majority of our target, and I am not sure to
meet many demonstrators able to build such an application.
REM -----------------------------------------------------------------
I repeat that a QNX-like demo, based on RAM disk and a specialized CD-ROM
(for ease of space use) without any local HD installation would be a
reassuring promotion medium.
Alain
#!/usr/bin/perl
# $Id: mkmenu,v 2.1 1999/06/06 12:32:22 root Exp root $
# Special characters : <>^"�!}{][|`\@~#��
#-------------------------------------- MKMENU------A.Empain'99----
$DIR="/opt/kde/share/applnk";
#------------------------------------------------------------------
sub init {
@DIRS=();
@FILES=();
$LEVEL0=&level($DIR);
$HST=`uname -n`; chomp $HST;
$SEP="#----------------------------------------------------";
print "#!/usr/X11R6/bin/wish\n";
print "menubutton .mb -text \"HOST: $HST\" -menu .mb.menu -relief raised\n";
print "pack .mb -padx 5 -pady 5\n";
# print "set m [ menu .mb.menu -tearoff 1]\n\n ";
}
# --------------------------------------------------------
sub show {
print "$SEP";
$i=join("::", @DIRS);
print "______Dirs______\n$i\n";
$i=join("::", @FILES);
print "______Files______\n$i\n";
}
# --------------------------------------------------------
sub dirlist {
($cwd)=@_;
@DIRS=();
@FILES=();
chdir($cwd);
open(IN,"ls -1 |");
while (<IN>) {
chomp;
$item=$_;
if ( -d $item ) {
# print "DIR: $cwd--$item\n";
push (@DIRS, "$cwd/$item");
}
else {
# print " $item\n";
push(@FILES,"$cwd/$item");
}
}
}
# --------------------------------------------------------
sub file {
my($full)=@_;
my(@pth)=split("/",$full);
return($pth[$#pth]);
}
# --------------------------------------------------------
sub level {
my($full)=@_;
my $level=split("/",$full);
return($level-$LEVEL0);
}
# --------------------------------------------------------
sub getpar {
my ($file,$targ)=@_;
my $line=`grep $targ $file`; chomp $line;
my($tag,$txt)=split("=",$line);
return $txt;
}
# --------------------------------------------------------
sub filter {
my($str)=@_;
my $i;
if ( ! $str=~/%/ || $#field == 1) { return $str; } # Ok
# else contains %fields to be discarded
my(@field)=split(" ",$str);
$txt=$field[0];
for ( $i=1; $i<=$#field;$i++) {
if ( $field[$i]=~/%/ || $field[$i+1]=~/%/ ) {
# discard % field or switch field followed by %
last;
}
$txt="$txt $field[$i]";
}
return $txt;
}
# --------------------------------------------------------
sub menu {
my $item=shift(@LID);
my $path=shift(@WAITING);
&dirlist($path);
print "\n$SEP\n";
if ( $item eq "" ) {
$M="m";
print "set m [ menu .mb.menu -tearoff 1 ]\n";
}
else {
($BASE,$TAG)=split(/\./,$item);
$M="$BASE$TAG";
print "set $M [ menu \$$item -tearoff 0 ]\n";
}
# ------------- cascade
my $id="a";
for ($i=0; $i<=$#DIRS; $i++) {
$IT=&file( $DIRS[$i] );
print "\$$M add cascade -label $IT -menu \$$M.$id\n";
push(@LID,"$M.$id");
push(@WAITING,"$DIRS[$i]");
$id++;
}
print "\$$M add separator\n";
# ------------- commands
for ($i=0; $i<=$#FILES; $i++) {
$X=$FILES[$i];
$EXEC=&filter( &getpar($X,"Exec=") );
$NAME=&getpar( $X,"Name=");
print "\$$M add command -label \"$NAME\" -command { catch { exec $EXEC }
}\n";
}
}
# ====================================================
# MAIN
# ====================================================
# load the first step
&init;
@WAITING=($DIR);
@LID=(""); # signal the first step
&menu;
while( $#WAITING > 0 ) {
&menu;
}
#&dirlist($DIR);
#&menu("m","b",1);
#&dirlist("$DIR/Alpha");
#&menu("m","a",0);
#&dirlist("$DIR/Applications");
#&menu("m","b",0);
#&dirlist("$DIR/Games");
#&menu("m","c",0);