#!/usr/bin/perl # # Telepathy: a study in mind over matter # by Jim Garrigues # # http://dvneo.com/telepathy # MD5 signature http://dvneo.com/telepathy.md5 # # Version 1.1 # 10/21/2006 - changed numeric data from decimal to hex - jg # 10/16/2006 - original release 1.0 - Jim Garrigues # # This perl program was created by Jim Garrigues to research the possibility of # affecting random computer data with the human mind. # # It should run from the command line in a terminal window that supports ANSI # escape sequences. More specifically, it was designed to run in a standard # "Terminal" window on Mac OS X. It should also do well in a "CMD" or "COMMAND" # window in Microsoft Windows, assuming you have Perl installed on the computer. # It should also do well in most default terminal windows in linux that support # the color extensions to the VT100 escape sequences. # # This program is copyright 2006 by Jim Garrigues. # It can be freely distributed without modification. # # This program can be modified and redistributed as long as the following # statement is included in the modified code and visible to the end user: # #---------------------------------------------------- # This program has been derived from a perl program # written by Jim Garrigues. The current version of # the original program can be found on the internet # at http://dvneo.com/telepathy #---------------------------------------------------- # # Using this program: # 1) Copy this file to your computer. # 2) Open a terminal window on your computer. # 3) Make sure the file is executable. # 4) Type the name of the program to start it: # /path_to_program/telepathy # In Microsoft Windows you may have to type: # perl C:\path_to_program\telepathy # 5) To skip viewing these comments you can start this program with an argument # of your choice. # 6) Press the key to generate each new line of data. # 7) Press one of the following letters followed by the key to quit the # program: # Q q X x # 8) Exiting by pressing -C will most likely leave the headers at the top # of your window. # 9) Each line of data consists of these columns: # A) A random 16 bit number displayed as blocks of color and numerically, # one block for each bit. Each block is actually two "characters" wide in # order to make each bit look relatively square. This number (or set of 16 # random bits) will be referred to as the "data". # B) The number of Zero bits in the data. # C) The number of One bits in the data. # D) The total number of Zero bits in the last 23 lines of data subtracted # from the total number of One bits in the last 23 lines of data. # E) The number of lines where column D stays in one of the three categories: # # a) negative # b) zero # c) positive # # This column will also be referred to as the current "run". # Statistically, this column should hover around zero. # F) Maximum run during this session. # G) Maximum negative run (more zero bits than one bits) # H) Maximum zero run (same number of zero and one bits) # I) Maximum positive run (more one bits than zero bits) # # My theory is that if a person can consistantly "make" high run values in any # of the three categories, then the person's mind must be affecting the # randomness of the data. # # I do not know whether holding down the key has anything to do with # one's ability to affect the data. # # If you think your mind is "telling" you when to press the key, then # holding it down would be pointless. # # If your mind is actually changing the random numbers that the computer uses, # then holding down the key should not be a problem. # # Try it both ways. Figure it out for yourself. # # Can your mind draw pictures in the bit patterns? # # Please send any feedback you have to telepathy at # dvneo.com (obfuscated to reduce spam). # # END OF COMMENTS - do not remove this line # Display the above comments before starting the session. $opt = shift; if ($opt eq "") { $INTRO="<$0"; $count=0; open INTRO; while () { last if /END OF COMMENTS/; print; $count++; if (($count % 23) == 0) { print "**** Press the key for more introduction,"; print " q to QUIT, or s to START NOW\r"; $key = ; exit(0) if $key =~ /^q/; print "\033[A\033[J"; last if $key =~ /^s/; } } close INTRO; unless ($key =~ /^s/) { print "Press the key to start.\n"; ; } } $block = "__"; # used in column A # # Define background colors and other escape sequences # $black = "\033[40m"; $red = "\033[41m"; $green = "\033[42m"; $yellow = "\033[43m"; $blue = "\033[44m"; $purple = "\033[45m"; $cyan = "\033[46m"; $white = "\033[47m"; $normal = "\033[m"; $top = "\033[H"; $bot = "\033[24H"; $clear = "\033[J"; $set_region = "\033[2;24r"; $clear_region = "\033[r"; # If you want to change the color of the output # it is best to do it in the next two lines: $one = $green; $zero = $black; $one_block = $one.$block.$normal; $zero_block = $zero.$block.$normal; $color_pattern = "MS------- 16 Data Bits -------LS"; $color_count = "$zero_block $one_block"; $offset = "$one_block-$zero_block"; # # Display the header line and set the scrolling region # print "$top$clear"; print "$color_pattern Data | $color_count $offset Run MR MR- MR0 MR+"; print "$set_region"; # # Initialize the data store # $sumlen = 23; for ($i=0; $i<$sumlen; $i++) { $z[$i]=0; $o[$i]=0; } $run = 1; $maxrun = 0; $maxneg = 0; $maxzer = 0; $maxpos = 0; $last_sign = 0; # # This is the main loop of the program # while (1) { # # If the program is started with the "-speed" option then don't wait for keyboard input. # if ($opt eq "-speed") { print "\n"; } else { # # Wait for user input. # $k = ; $k =~ tr/QqXx/QQQQ/; # # Clean up and exit if user types one of four "Quit" codes. # if ($k =~ /Q/) { print "$clear_region$bot"; exit(0); } } $a = rand(0); $a *= 65536; $a = int($a); $c = pack("n1",$a); $b = unpack("B16",$c); # # Convert bits to color blocks # $bstr = $b; $bstr =~ s/1/o/g; $bstr =~ s/0/z/g; $bstr =~ s/o/$one_block/g; $bstr =~ s/z/$zero_block/g; # # Count the number of 1 bits # $ones = $b; $ones =~ tr/10/1/d; $ones = length($ones); # # Count the number of 0 bits # $zeroes = $b; $zeroes =~ tr/01/0/d; $zeroes = length($zeroes); # # Rotate old data out while adding up the bits # $zs = 0; $os = 0; for ($i=0; $i<($sumlen-1); $i++) { $zs += $z[$i] = $z[$i+1]; $os += $o[$i] = $o[$i+1]; } # # Add the new bits # $zs += $z[$sumlen-1] = $zeroes; $os += $o[$sumlen-1] = $ones; # # Calculate column D # $diff = ($os - $zs); # # Check for runs in column D # if ($diff == 0) { # checking for runs of zero $sign=0; if ($last_sign == 0) { $run++; } else { $run=1; } $last_sign = 0; } else { # checking for runs of + or - $sign = $diff/abs($diff); if ($last_sign == $sign) { $run++; } else { $run=1; } $last_sign = $sign; } # # Updating max run of any type # if ($maxrun < $run) { $maxrun = $run; } # # Updating max run of zeroes # if ($sign == 0) { if ($maxzer < $run) { $maxzer = $run; } # # Updating max run of negatives # } elsif ($sign == -1) { if ($maxneg < $run) { $maxneg = $run; } # # Updating max run of positives # } else { if ($maxpos < $run) { $maxpos = $run; } } # # Print a line of data # printf("%s %04X | %2d %2d %6s %3s %3s %3s %3s %3s", $bstr, $a, $zeroes, $ones, $diff, $run, $maxrun, $maxneg, $maxzer, $maxpos); }