TkResolver++ - Psychokinesis testing software Contents ========== * A personal introduction * An introduction to the software * Debian dependencies * Quick start guide * Analysing results A personal introduction ========================= This software suite is a stab at answering one question: * Are the positive experiments done in the area of psychokinesis producing valid results? I took it upon myself to answer this question after investigating the area of psi research and finding a great deal of hand-flapping and irrationality; not so much on the side of psi researchers but more so from their critics. For the most part, criticism took the form of "LOL" which, to me, is no criticism at all and evidence of a closed mind. It seemed that the question was still open with, on one side vehement closed-mindedness and on the other an inquisitive interest that has difficulty quantifying something that is, unfortunately for the argument, very difficult to measure; the human psyche. In an effort to answer as best I can, and for my own benefit, the question of whether psi effects are genuine and measurable, I set out to write some software to use the time-honoured random number generator as a basis for interaction with an experimental participant, and to measure the influence, if any, of the participant on the generator. There is nothing new in this. The interest that I had in doing so was to see the output of a statistical analysis, "p = 0.018", and be sure, in my own mind, that the experimental conditions, the software and the analysis, was valid. I wanted to see with my own eyes whether such an experiment could produce a statistically significant result. TkResolver++ is the result of this effort. I have produced a limited amount of data and this is on-going. I have not yet produced enough data to satisfy my curiosity or determine the validity of any significant result (and I have gotten significant results.) In the meantime, I am releasing this software so that others who may have similar interests can perform their own experiments and see with *their* own eyes whether a significant result is attainable and valid. Bob Ham, December 24th 2007 An introduction to the software ================================= The software is written in C++. It is split up by functionality into different libraries which are used by specific programs, each in different directories. They are as follows: * libtkcommon Provides utility functionality such as wide-character to multi-byte string conversion, ternary data types, etc. * libtkdb Provides one central class, Database, which provides methods for static and dynamic interaction with the database. * libtkdbui Provides generic database user interface components; lists of table contents, with and without generic record addition functionality * libtkalgorithm Contains a single class, Algorithm, and supporting types. "Algorithms" describe the probabilities that are used when drawing a trace down the screen in an experiment. * libtkrandom Provides all randomness-related functionality such as: drivers for different sources of entropy, binary decision trees, and true random numbers. * libtkmp Provides arbitrary precision maths functionality, including matricies and complex numbers. This is for use in libtkanalysis. Current implmentation is lacking an arbitrary precision real gamma function due to problems accessing Lanczos' paper describing a method for approximating the function. * libtkanalysis Provides classes for analysing and visualising experimental data from the database. * libtkquery Implements a language for querying experiments by their properties. Uses lex and yacc to provide a lexer/parser, the output of which is compiled into SQL. * libtkresolver Provides the code to perform a single experiment; getting and recording data from an entropy source, drawing onto the screen and returning results. * algorithm This program is just for investigating algorithms. It is supplied with an algorithm specification which it parses and analyses, printing various information including the offsets that it describes and their probabilities. * tkresolver This is a test program to execute a single experiment. * experimenter This is the main user interface, used to select various experimental variables, the location and experiment operators, add notes and execute control experiments. * analyser This program performs extensive statistical analysis of the database, including a t-test. It outputs an analysis report to the console and also displays graphs visualising the analysed data. Debian dependencies ===================== The following Debian packages are needed for compilation: libboost-dev libgmp3-dev libgsl0-dev libsdl1.2-dev libgtkmm-2.4-dev libglibmm-2.4-dev libgconfmm-2.6-dev libcurl4-gnutls-dev libusb-dev gnuplot build-essential flex bison libtool automake libodbc++-dev Quick start guide =================== Before running any experiments, you must set up the database; a new schema is required and a user for the software. The default username used in TkResolver++ is 'psi'. See your database manual for how to create new database schemas and users. There is an sql script in the sql/ directory called table-creation.mysql. It is written specifically for mysql but should work with other RDBMSs. Assuming mysql is being used, the script should be executed like so: $ cat sql/table-creation.mysql | mysql -p -h -u [ enter password ] Next, you must set up an ODBC data source for the software to use. The default name that the software expects is 'TkResolver++' but you can select the name at runtime. An example ~/.odbc.ini file is as follows: [TkResolver++] Driver = MySQL ODBC 3.51 Driver Server = localhost Database = psi For those having trouble setting up unixODBC (God knows I had enough trouble) here is an example odbcinst.ini file: [MySQL ODBC 3.51 Driver] DRIVER = /usr/lib/libmyodbc3.so SETUP = /usr/lib/libodbcmyS.so Standard GNU build tools are used so the software can be compiled with just: $ ./configure $ make To execute the experimenter, change into the directory and execute the 'tkresolver-experimenter' program: $ cd experimenter/ $ ./tkresolver-experimenter You should be presented with a database login dialogue box. Select the appropriate data source (if the correct one isn't selected) and enter the username and password for the user you created earlier. The main experimenter window appears. Select an appropriate "Randomness source", and hit the "Test" button at the bottom of the screen. This will do everything that a normal experiment will do, but it will be flagged in the database as a test execution. A screen should change to all black with 5 blocks. They will disappear in a 5-second countdown. After the countdown is finished, the experiment will start. A line is drawn down the screen from the top to the bottom, possibly scrolling for some time if the appropriate experimental variables have been selected. Hitting the escape key will end the experiment (without writing any results to the database.) When the experiment is finished, a dialogue box will appear allowing you to edit or enter notes to be recorded with the experiment's data. Click on the "OK" button and the data will be written to the database. The window will freeze until this is complete (which may be some time depending on the amount of data collected.) Analysing results =================== To analyse the database, a program called `tkresolver-analyser' is located in the analyser/ directory. It requires a query file to determine which experiments to analyse. The query language is very simple. Expressions are of the form VALUE OP VALUE where VALUE can be a boolean (true/false), an integer, a real, a string enclosed in double quotes or a property identifer enclosed in square brackets like so: [algorithm spec] The OP can be >, >=, <, <=, = or !=, with obvious meaning. Alternatively, the case-insensitive keyword "like" can be used. This is translated to an SQL LIKE keyword which can be used in string comparisons. Some example expressions follow: [algorithm spec] = "1 1" [time] <= 30 [retriever name] != "pseudo" [control] = false [notes] like "%some text%" A list of properties is contained in the file sql/table-creation.mysql. Expressions can be combined using '&' (and) and '|' (or) logical operators. They can also be contained within brackets. Some fuller examples follow: [algorithm spec] = "1 1" & [test] = false & ([time] < 30 | [scrolled] = 0) [retriever name] = "pseudo" | [test] = true | [control] = true The analyser program must be supplied with the name of a file containing a query using the '-q' option. The program also takes a '--help' option to print out a listing of accepted options.