Saturday, July 24, 2010

PEBL 0.11 Released

I've released PEBL Version 0.11 and version 0.6 of the PEBL Test battery Version 0.11 contains a lot of under-the-hood fixes to memory management. Previously, PEBL had a number of memory leaks which could end up crashing the system if it ran for too long. Most (all?) are now gone, which should improve performance. Also, a new widget called a 'canvas' is available, which lets you create more complex widgets, do pixel-drawing and other cool stuff. Using it sometimes can (reliably) cause crashes the program on windows that I have not yet tracked down, so think of it as fairly experimental right now.

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

Major changes:

  • 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
    out-of-control if
    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
    keyboards probably.

  • 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.
Minor changes:

  • 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.
New functions:
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.


New tasks:
  • 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.

I've also included a set of tasks designed for an upcoming paper, called the "PEBL Cognitive Decathlon". Among several existing tasks, it also includes:
  • Device mimicry: Make copies of a figure with a 4-df etch-a-sketch

  • objectjudgment: Are two attneave shapes identical? Are they identify
    if rotated?

  • ptracker: Compensatory tracker task

  • visual search: Classic visual search paradigm; fairly flexible.
Major improvements:
Tower of London: Substantial improvements; We now include about 10
pre-canned published problem sets, including Fimbel's and TOL-R.
Post a Comment