Also, I've made a lot of progress toward enabling internationalized experiments. I've also now have translations of the BCST and Bechara Gambling task into polish, chinese, and korean, and translation of TOL into Spanish (and Portuguese soon). Those of you who want translated versions of these tasks can now do translations of text strings and run by specifying a two-character country code in the launcher. This comes at a slight cost--korean and chinese fonts are now included, making the download about 50% larger than last time. Also, I've moved to a default font which handles western characters much better, so accents on most European languages should be handled seamlessly.
Also, along with a windows installer, I'm releasing a stand-alone version for windows (in case you don't want to install it), and a .deb suitable for some Ubuntu linux systems. I once again have PEBL running on OSX, and will work toward a distributable version of PEBL 0.11 on OSX in the near future.
Software can be downloaded from:
More details are copied below in the release notes below.
PEBL Version 0.11
- Fixed a number of insidious and nasty memory leaks. These caused the
parameter passed to any function to not be cleaned up when the
function exited. Also, most graphical objects were never cleaned up
when PEBL finished using them. For short experiments, this probably
made little difference, but it could lead to memory growing
the experiment uses a control loop to repeatedly call a function, or
for experiments that take a long time. These massive changes will in
the long run improve performance of PEBL substantially, but there may
be edge cases here and there that create unwanted crashes.
- Fixed the GetInput function so it accepts the uppercase characters
on numbers and other special characters. This only help US
- Added a new canvas object to allow an easy resettable drawing object.
- Added SetPixel() function to allow you to draw on any graphical
widget (labels, imagebox, canvas, textbox, but not windows or
- Also, made MakeGabor() function which uses SetPixel and canvases to
create parametric gabor patches.
- After several versions without an OSX release, I once again
have a version of PEBL that runs on OSX. It is not as polished as
most Mac users expect, but seems to work fairly well. I'm not
releasing an OSX version of 0.11 right away as there are a lot
of issues needed to handle to distribute on OSX, but can give help
compiling it, and will work toward a precompiled version.
- One sort of important change in how parent/children are handled.
Previously, you could add a child to a parent and it would stay
there until removed, no matter what. Even if you did this within a
Function, and kept the object in a local store which got deleted
when the function was done. This would of course give you no way to
access it later, so it probably only happened occasionally, for
widgets that remained on screen forever. No more. Now, you need to
pass the variable out of the function or make it a global, because
a locally-defined widget will get destroyed when the function ends,
and will get removed from the parent automatically.
- A number of changes to make translation easier:
- Created new global variables gPEBLBaseFont, gPEBLBaseFontSerif,
gPEBLBaseFontMono, which name, by default, the newly-included DejaVu
series fonts. This should improve translation, because the previous
'default' font had poor coveragge for international characters, while
DejaVu has much better. Plus, for character sets DejaVu doesn't
handle, you can override with a custom font which should then work
for helper functions like EasyTextBox().
- Added three new DEJAVU fonts, which are now used by default in most
experiments. This will have enable easier internationalization,
because DEJAVU will work for a wider variety of scripts
- Added ukai and UnBatang fonts to enable handling of Chinese,
Korean, and Japanese text.
- The command-line option --language is now available. This does
two things. First, it sets the global variable gLanguage to the string
specified on the command line. This is used to select text
strings in order to choose the proper translation on several of the
battery tests. Currently, the iowa task, the bcst,
task, and the Tower of London task will look for gLanguage and
select text strings based on it, but only a crude spanish version
(--language "ES") exists for TOL and no alternate translations exist
for the other tasks. In addition, it will set the gPEBLBaseFont
specified to ukai.ttc if you specify CN, or UnBatang.ttf if you
specify KO or JP.
- Translation of BCST into polish, Korean, and Chinese.
- Translation of Bechara's cardsort into Polish, Korean, Chinese.
- Translation of TOL into spanish, as a demo (gracias google). A
Portuguese version is in the works.
- Created new global variables gPEBLBaseFont, gPEBLBaseFontSerif,
- Changed WaitForClickOnTarget to go from end to front, rather than
front to end. This should make it easier to click on the topmost of
overlapping targets. See poetry demo for example.
- Note that Draw() function allows 'imprinting' images on other widgets.
- The last parameter of MakeFont() was previously not well documented
or completely consistent. Using 1 gives the font (and ultimately,
the label) a solid background; using 0 gives it a clear background,
and so ignored bgcolor. Previously, using 1 did the same thing, but
rendered the text without smoothing so it could look blocky. I've
changed this so it renders smoothly in both cases. This should not
impact textboxes, because the background is still in effect. It
will impact EasyLabel, which now renders transparently, rather than
in a color matching the background.
- Changed the order of precedence of unary minus and power
function. previously, -1^2 was +1; now it operates as expected.
Rest(): returns end of a list
Insert(): puts an item into a list
RemoveSubset(): removes a subset of elements from a list
ListBy(): aggregates a list by sublists defined by another list.
Sample(): pick one item from a list.
MakeAttneave(): create an attneave shape.
SegmentsIntersect(): see if two segments intersect
ToRight(): see if a point is to the right of a segment
GetAngle3(): get the angle abc
ConvexHull(): finds convex hull of a set of points
ResetCanvas(): erases anything that has been drawn on a canvas
GetEasyInput(): simple way to get text input.
MessageBox(): simple way to give a message
IsText(): is this text?
IsString(): is this text?
MakeCanvas(): creates a canvas
IsCanvas(): tests whether something is a canvas
SetPixel(): changes the color of a pixel on a canvas
SetPoint(): identical to SetPixel
WaitForMouseClickWithTimeout(): make a click within a time limit.
PEBL TEST BATTERY VERSION 0.6
- scales: A set of four visual-analog scales commonly used for
rating comfort. Can be embedded within another experiment.
- Item-order test: see two character strings and determine whether they
are the same or different.
- Clock test: attentional vigilance task: pips on a clock face light up
once per second; respond when a pip is skipped.
- Corsi blocks: classic visuo-spatial working memory task.
- Tapping: tap as fast as you can
- Tower of Hanoi: crude version of TOH task.
- Device mimicry: Make copies of a figure with a 4-df etch-a-sketch
- objectjudgment: Are two attneave shapes identical? Are they identify
- ptracker: Compensatory tracker task
- visual search: Classic visual search paradigm; fairly flexible.
Tower of London: Substantial improvements; We now include about 10
pre-canned published problem sets, including Fimbel's and TOL-R.