<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://blog.psychopy.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://blog.psychopy.org/" rel="alternate" type="text/html" /><updated>2026-06-03T14:04:03+00:00</updated><id>https://blog.psychopy.org/feed.xml</id><title type="html">PsychoPy Blog</title><subtitle>For discussions about PsychoPy/JS, Pavlovia and the community</subtitle><entry><title type="html">Ambassador Story: Creating Experiments with PsychoPy and Pavlovia at ACNS 2025</title><link href="https://blog.psychopy.org/perspectives/ben_lowe_acns2025/" rel="alternate" type="text/html" title="Ambassador Story: Creating Experiments with PsychoPy and Pavlovia at ACNS 2025" /><published>2026-02-13T11:00:00+00:00</published><updated>2026-02-13T11:00:00+00:00</updated><id>https://blog.psychopy.org/perspectives/ben_lowe_acns2025</id><content type="html" xml:base="https://blog.psychopy.org/perspectives/ben_lowe_acns2025/"><![CDATA[<p>In August 2024, I had the pleasure of meeting Dr. Rebecca (Becca) Hirst at the European Conference on Visual Perception (ECVP). During this time, I expressed my genuine enthusiasm for PsychoPy, and in exchange, she showed me one of the UK’s finest establishments for a night out on the town: Popworld, Aberdeen—networking done right, if you ask me. About a year later, Becca offered me the opportunity to be a PsychoPy ambassador in Australia (where I was based at the time) under the recently established <a href="https://www.psychopy.org/ambassadors/index.html">PsychoPy Ambassador Scheme</a>. Suffice it to say, I accepted with little-to-no hesitation.</p>

<p>This opportunity came at a great time, too, as the Australasian Cognitive Neuroscience Society (ACNS) 2025 conference was right around the corner. And so, with the permission of Becca, Prof. Jon Peirce (PsychoPy’s CEO), and the organisers of ACNS, I put together a three-hour beginner-level workshop to be run on the first day of the conference, titled <em>Creating Experiments with PsychoPy and Pavlovia</em>. As said on the tin, the workshop focused on building experiments in PsychoPy and deploying them online via Pavlovia, with an emphasis on practical workflows and common pitfalls.</p>

<p><img src="/assets/images/acns2025.jpg" alt="Workshop at ACNS 2025" class="img-super-right" style="width:75%" /></p>

<p>I was quite nervous going into the session. I’d never run a workshop before—let alone one on behalf of a company! However, once things got underway, those nerves quickly gave way to excitement. The participants were engaged, asked great questions, and brought a real sense of curiosity to the room. It was so cool to see people actively experimenting, troubleshooting together, and gaining confidence in tools that can sometimes feel intimidating at first.</p>

<p>Overall, the experience was a delight, and I’d happily run another workshop like this in the future. I am very grateful to both Open Science Tools and ACNS for the opportunity. 😊</p>

<p>One final note: I have now left Australia, which means PsychoPy will be looking for a new Australian ambassador. If that’s something you’d be interested in, I’d strongly encourage you to get in touch. The role is a fantastic way to support the community and share tools you care about!</p>]]></content><author><name>Dr Benjamin Lowe</name></author><category term="perspectives" /><category term="psychopy," /><category term="ambassador," /><category term="australia," /><category term="ACNS," /><category term="conference" /><summary type="html"><![CDATA[In August 2024, I had the pleasure of meeting Dr. Rebecca (Becca) Hirst at the European Conference on Visual Perception (ECVP). During this time, I expressed my genuine enthusiasm for PsychoPy, and in exchange, she showed me one of the UK’s finest establishments for a night out on the town: Popworld, Aberdeen—networking done right, if you ask me. About a year later, Becca offered me the opportunity to be a PsychoPy ambassador in Australia (where I was based at the time) under the recently established PsychoPy Ambassador Scheme. Suffice it to say, I accepted with little-to-no hesitation.]]></summary></entry><entry><title type="html">PsychoPy Studio: the app we love, reimagined</title><link href="https://blog.psychopy.org/psychopy/psychopy_studio/" rel="alternate" type="text/html" title="PsychoPy Studio: the app we love, reimagined" /><published>2026-01-09T13:34:00+00:00</published><updated>2026-01-09T13:34:00+00:00</updated><id>https://blog.psychopy.org/psychopy/psychopy_studio</id><content type="html" xml:base="https://blog.psychopy.org/psychopy/psychopy_studio/"><![CDATA[<p>It’s now over 20 years since PsychoPy’s humble beginnings as an open-source Python library to help users present high-precision stimuli and collect responses from participants. Since 2009 PsychoPy has provided, in addition to the Python library, an application that included Builder and Coder interfaces for creation of experiments. That application was, itself, written in Python using wxPython to provide widgets that could be used to support Windows, MacOS and Linux whereas similar proprietary packages (like E-Prime, or Presentation) were only available on Windows.</p>

<p>In essence, while wxPython made possible a lot of what we managed to achieve over the last 15 years, it also has some disadvantages and we have taken the step to rewrite from the ground up with a more modern “web-based” technology stack.</p>

<p><img src="/assets/images/PsychoPyStudio2026.png" alt="PsychoPy Studio splash screen 2026" class="img-super-right" style="width:75%" /></p>

<p>We’re very excited at this point to be releasing the new app, which goes by the name PsychoPy Studio and we hope you’ll enjoy the advantages it brings, which are summarised below.</p>

<p>Note, by the way, that the PsychoPy and PsychoJS libraries are unaffected by this change. While the technologies in the app will be dramatically different, your studies will run exactly as before, subject to the normal continuous improvements.</p>

<h1 id="faster-load-times">Faster load times</h1>

<p>We all know that the PsychoPy application has always taken a very long time to launch. You don’t want to shut it down for fear of having to watch another iteration of that splash screen!</p>

<p>So the first noticeable advantage of the PsychoPy Studio application is that it will load in a flash (well, about 2 seconds). After loading the application will continue performing other tasks, like installing and loading whatever Python libraries you need, which is what PsychoPy spent a long time doing at launch, but the application will be there ready for you while those things carry on in the background.</p>

<h1 id="modern-interface">Modern interface</h1>

<p>You’ll hopefully also quickly notice a more modern look and user-interface features that we can relatively easily provide that would have been very hard in wxPython. It doesn’t look vastly different, because we think there were a lot of good things about the existing interface that we wanted to keep, but we’re hoping you’ll notice a lot of minor improvements to the usability.</p>

<h1 id="better-cross-version-reproducibility-with-multiple-python-versions">Better cross-version reproducibility, with multiple Python versions</h1>

<p>Although PsychoPy has, for many years, supported the rare (possibly unique?) ability to switch itself to an older state so that you could install a newer version of the app but run your study in the version you created it in. We think that’s a very important feature of the software for the sake of reproducibility.</p>

<p>But that feature always had a limitation that it was stuck with whatever Python interpreter and dependencies had been shipped with the app. If you installed a new version of PsychoPy that shipped with Python 3.10, then you could only switch with <em>useVersion</em> back to PsychoPy versions that supported Python 3.10 (which means at least PsychoPy 2023.2.x).</p>

<p>PsychoPy Studio does not include/need any Python in itself, because it isn’t written using Python. What it does is install 1 or more Python “environments” for each version of PsychoPy you use, supporting all PsychoPy releases from 2022 initially.</p>

<p>Those different Python environments can be loaded with different sets of plugins, different dependencies and can even be entirely different version of Python itself. And you can have as many environments as you like, for as many versions as you need to support in your lab!</p>

<h1 id="better-separation-easier-installations">Better separation, easier installations</h1>

<p>The new application is being developed more independently of the library, which is better for development, and reduces installation headaches.</p>

<p>At present PsychoPy has a very large number of dependencies, and it can be hard to know which are needed by the application versus being needed by the library - if you don’t use the application because you prefer to write code in your own development environment, then the number of dependencies you need is very much less.</p>

<p>In the new system you will either install the Studio application, which will then install whatever Python versions and dependencies it needs automatically as a second step. Or you will install the library simply into your own Python environment. It’s more clear which one you need and the dependencies will reflect your own work.</p>

<p>In particular, this should be a huge bonus for Linux users, where installing the original PsychoPy app was most difficult due to the need to compile wxPython on each different version of the operating system.</p>

<h1 id="the-future---creating-studies-in-pavlovia-and-on-tablets">The future - creating studies in Pavlovia and on tablets</h1>

<p>There’s another feature that we think is going to be huge in this new development which is that, because the app is basically written as a web page that is then packaged inside an electron app, it could also be rendered as an actual web page. That means you could find yourself, in the future, able to edit web-based experiments directly on Pavlovia. It also means we could support editing on Android or iOS devices, for instance, because the app no longer requires Python and all the dependencies.</p>

<h1 id="how-does-all-this-goodness-even-work">How does all this goodness even work?</h1>

<p>A lot of software engineers in the world of user-interface development, in recent years, have been focussed on building web applications. It means that JavaScript is where the most modern user interfaces are being written. To make those work in an application that feels like a local “native” app there are then systems like Electron and Tauri that basically allow you to make websites into applications with access to the things developers expect, like the local filesystem which websites normally don’t get access to, for obvious security reasons. You can see the attraction for the developers - JavaScript has become amazingly powerful and can run on any device that supports web browsers (OK, so your washing machine probably won’t run PsychoPy anytime soon, but pretty much everything else can).</p>

<p>So this is the direction of travel for a huge number of software applications now. Even very substantial applications these days, like the Visual Studio Code editor, are basically web pages running in Electron to turn them into native apps.</p>

<p>So our new app uses the Svelte web development framework, inside an Electron shell. It’s all open-source on GitHub, with an MIT license and anyone that knows JavaScript can contribute to the future of the project.</p>

<p>All in all, we’re very excited, and hope you’ll enjoy this new phase of PsychoPy development.</p>]]></content><author><name>Jon Peirce</name></author><category term="PsychoPy" /><category term="psychopy," /><category term="history" /><summary type="html"><![CDATA[It’s now over 20 years since PsychoPy’s humble beginnings as an open-source Python library to help users present high-precision stimuli and collect responses from participants. Since 2009 PsychoPy has provided, in addition to the Python library, an application that included Builder and Coder interfaces for creation of experiments. That application was, itself, written in Python using wxPython to provide widgets that could be used to support Windows, MacOS and Linux whereas similar proprietary packages (like E-Prime, or Presentation) were only available on Windows.]]></summary></entry><entry><title type="html">To build, or not to build, that is the question</title><link href="https://blog.psychopy.org/psychopy/build-or-code/" rel="alternate" type="text/html" title="To build, or not to build, that is the question" /><published>2024-08-14T14:25:41+00:00</published><updated>2024-08-14T14:25:41+00:00</updated><id>https://blog.psychopy.org/psychopy/build-or-code</id><content type="html" xml:base="https://blog.psychopy.org/psychopy/build-or-code/"><![CDATA[<p>This is a somewhat heated debate - we have scientists arguing passionately<sup id="fnref:academics" role="doc-noteref"><a href="#fn:academics" class="footnote" rel="footnote">1</a></sup> for both sides; that users must always write their own code by hand, or that people should use a graphical user interface to write the code for them. Luckily PsychoPy provides both interfaces, so both groups can be happy.</p>

<p>It is true that PsychoPy Builder was <em>originally</em> designed as a tool to support non-programmers and, when creating that interface, Jon was still expecting to use hand-written code for his own studies. That changed. As Builder became more capable, the number of studies that it could cope with grew. The number of studies that warranted the additional hassle<sup id="fnref:hassle" role="doc-noteref"><a href="#fn:hassle" class="footnote" rel="footnote">2</a></sup> of writing code by hand shrank. It’s true that there are likely to be some places that code is necessary or useful - a pure no-code solution could not achieve the level of flexibility that code can, or to do so it would have to be just as complex as writing the code yourself - but by providing an interface that accomplishes all the common tasks by graphical components, and then allows extensions with code where needed, we might get the best of both worlds. By around 2015, all of Jon’s own studies were being created in PsychoPy Builder, with Code Components added, where needed, to achieve the sort of non-standard features that aren’t possible in “no-code” solutions.</p>

<p>Actually, on reflection, the notion of the debate from <em>both</em> sides is not quite true on this occasion. On this topic, the argument nearly always comes from those in favor of hand-writing the code. There is, for many, a belief or assumption that the people using the graphical builders are only doing so because they lack the skills or commitment to write their code by hand. Here, we aim to readdress that balance by considering the genuine scientific advantages that might arise from builder-style interfaces. We will also consider some of the common arguments for why scientists should write code by hand and how much merit these arguments have.</p>

<p>Advantages of a Builder interface</p>
<ul>
  <li>An abstraction of your experiment design</li>
  <li>Best current practice</li>
  <li>Generalizing to other systems</li>
  <li>Reusable in the future</li>
  <li>Fewer bugs</li>
  <li>Speed of authoring</li>
</ul>

<p>Common arguments for hand-writing code</p>
<ul>
  <li>I just like writing code</li>
  <li>I like to know what my code is really doing</li>
  <li>I like my code to be clean, whereas generated code is ugly</li>
  <li>With code I can get help from ChatGPT</li>
</ul>

<h2 id="advantages-of-a-builder-interface">Advantages of a Builder interface</h2>

<p>Before considering some of the reported disadvantages of using a graphical interface, let’s consider some of the advantages that it may bring, beginning with developing a greater understanding of the representation that a Builder experiment in PsychoPy actually is.</p>

<h3 id="an-abstraction-of-your-experiment-design">An abstraction of your experiment design</h3>

<p>When you create a study using Builder, you specify very precisely the features you want your experiment to have, without necessarily dictating the manner by which that should be achieved. For instance, you specify the exact nature of your stimuli and responses, such as the timing, the spatio-temporal form and the responses you consider valid. Consider this a very precise, detailed Methods section except that it literally contains every part of information needed to run the study, unlike the average Methods section.</p>

<p>As with a Methods section, there may be times where it becomes important to specify exact details of how something was achieved, notably when we use particularly novel methods or when the exact implementation details will have a big impact on results but, in general, specifying what the experimenter aimed to present and when is the appropriate level of detail. If that is the case then you may well choose to use hand-written code for that part of your study, but it doesn’t necessitate that you hand-code everything. You may need a very particular stimulus configuration but randomizing your trial order is probably not something that requires exact specification.</p>

<p>With PsychoPy, the underlying file format is basically an XML file with an open specification and you could actually go and edit that description of your experiment manually if you chose to. The Builder interface is really just a way of visualizing and editing those XML files, which are then used by the software to generate Python or JavaScript files.</p>

<p>Specifying an abstract description of your study, rather than its exact implementation details, has several advantages that we will come onto next, notably the fact that the description can be generalized to any other platform for generating experiments and the fact that the current best practice may change, and the fact that</p>

<h3 id="generalizing-to-other-platformslanguages">Generalizing to other platforms/languages</h3>

<p>In time, the software we use changes. Our supervisors will crow about how they used to store their code on some archaic computer in a long-obsolete storage device (do you remember floppy drives? tape storage? punch cards?!) and wrote their experimental code on a series of languages that have changed across time (such as Assembly Language, then C, then Visual Basic, Matlab and Python). It won’t be long before some new language appears on the scene and supersedes the current options.</p>

<p>When that transition to a new language occurs, as it surely will, having all the lines of code, written in a language that nobody understands anymore, is a lot less useful than having a very precise description of exactly what the code was written to achieve. When Pelli and Watson wrote their paper on QUEST adaptive staircases they provided a piece of code written in BASIC as the most precise description of the method they could conceive, and if you still have a BASIC compiler it will probably still work. Unfortunately, in 2024, that code is surprisingly unhelpful to many people in trying to understand the algorithm with very little understanding of that language, which in the 1980s had been ubiquitous.</p>

<p>Potentially we could translate line-by-line the code of a study into our new target language, or get AI to make the translation for us. Unfortunately, languages often don’t have direct line-by-line translations; language logic and structure can differ as well as individual words.</p>

<p>This has been shown by the fact that PsychoPy Builder can now output a choice of Python or JavaScript file from a single experiment, and it could easily be extended to output other language implementations, where those provide a similar stimulus/response feature set.</p>

<p>With an abstract definition, the author of the final code only needs to understand the language they are writing the code in, not the implementation details of the language it comes from. That makes a Builder experiment more future-proof than a Python script.</p>

<p>The principle that an experiment builder platform can be made language agnostic became particularly noticeable during the global Covid-19 pandemic, when scientists all over the world were suddenly prevented from going into their labs. If they wanted to try and run their studies online instead, rather than wait out the lockdowns with no new data, they needed to switch to using JavaScript in order to run their study. Those users that had written their studies by hand in Python code were faced with the daunting task of having to translate their code line by line or to start from scratch with a new platform (like jsPsych) in order to run their studies. Conversely, those that had created the study in PsychoPy Builder, had an abstraction of the study description already and PsychoPy could use that, relatively painlessly, to switch to generating an almost identical study online. It was a painful time for everyone, but slightly less so for the Builders.</p>

<h3 id="reusable-in-the-future">Reusable in the future</h3>

<p>Maybe worrying about preserving your experiment for future computer languages seems too far into the future for the average scientist, but most can relate to going back to a script they have received from a colleague or from “past you”. When you write a piece of code, you hopefully understand it, but that doesn’t mean that “future you” in a year or two will still understand it.</p>

<p>Even if you are competent in the language the study was written in, even if it was written by “past you”, modern studies typically run to hundreds of lines of code, often written in a hurry with bits bolted on at the last minute, sometimes including clever “tricks” that seemed genius at the time but the meaning of which is now lost in time. A graphical representation, with code snippets to cover the less-standard details, is much easier to understand in the future. Reusability has been improved.</p>

<p>Many scientists are also somewhat nervous about sharing their code. They have no formal computer training and they fear that peers will laugh at their inefficient code or, worse, find a bug that changes the interpretation of their data. A study written in a graphical interface feels less scary to share. You don’t need to be a PsychoPy expert to work roughly what a PsychoPy Builder experiment is doing from its graphical interface. Again, reusability has been improved.</p>

<p>Using a Builder interface with clear visualization of the key parts of your study is just you being kind to “future you” and to others around you by providing something we all can understand.</p>

<h3 id="best-current-practice">Best current practice</h3>

<p>Very few scientists and programmers read the entire manual of a programming language. They maybe look at a few demos of the features they need and hopefully check the sections on things they care particularly about, like “how do I make sure my timing is good?” or “how do I calibrate my monitor?”. But very few read the whole manual and really know the best practice for the software.</p>

<p>The software does. It was written by the same team that wrote the underlying library and knows more of the details and limitations. For instance, PsychoPy has a distinction between regular timing and non-slip timing (where the timing will autocorrect for small over-/under-shoots to keep total time exact). Non-slip timing isn’t something that most users probably have a good grasp of and use in their scripts but they get it “for free” if they use PsychoPy Builder.</p>

<p>Furthermore, even the diligent user that read the entire manual when they learned the software probably didn’t keep up to date with every change since. Although relatively detailed changelogs are available and, indeed, GitHub allows you to check every line of changed code between versions, nobody has the time to go through this on each release. Users will tend to write code that was optimal at the point when they first learned the language.</p>

<p>The code being generated by PsychoPy Builder can be, and is, updated alongside changes to the underlying library to reflect the current recommendations of the developers.</p>

<p>As an example of this, the main function in PsychoPy to check keyboard responses was originally <code class="language-plaintext highlighter-rouge">event.getKeys</code>. This function worked reasonably well, especially if it was called repeatedly while no visual stimuli needed updating, but the later <code class="language-plaintext highlighter-rouge">Keyboard</code> class has considerably better performance and flexibility. Most critically, it checks and time-stamps keypresses in a separate CPU process so that it isn’t hampered by stimuli being rendered at the same time. Builder has naturally been using this higher-performance system as the default for years but, we suspect, hand-written code by perfectly competent programmers is still likely to use the lower-performance <code class="language-plaintext highlighter-rouge">event</code> module, which is still widely found in demos, and is the recommendation of ChatGPT at present.</p>

<h3 id="speed-of-authoring">Speed of authoring</h3>

<p>The most obvious advantage of using a graphical interface is the speed of creating a study. The user doesn’t need to spend nearly as much time (or mental resources) thinking through the code and the steps of their study. Whereas creating a relatively “standard” study in some programming languages would take weeks, in the PsychoPy library we’re proud to say it might typically take hours for a proficient programmer but in the Builder it can be generated in just a few hours. Indeed the question of whether it ever takes more than a few hours to fully program a study depends almost always on how much additional hand-written code is needed to augment the Builder generated-code in this study.</p>

<p>Being able to create experiments faster, especially by not wasting time on regular repetitive needs like setting up trial ordering and response gathering, is really a fundamental advantage to any laboratory.</p>

<p>Science needs us to be productive and we should be investing our neural resources and time in solving scientific questions rather than fulfilling basic tasks.</p>

<h3 id="fewer-bugs">Fewer bugs</h3>

<p>As well as being quicker, experiments created in a graphical interface will tend to have fewer bugs. While writing thousands of lines of code any scientist or programmer is likely to make occasional errors. In hand-written code one slip of the keyboard can have a profound effect on the successful execution of the study, and the effects of the bug may only be apparent very much later.</p>

<p>Of course, using a graphical interface does not completely insulate us against human error - we can still type values incorrectly into the boxes or configure a stimulus in the flow of the experiment. It also adds a new element of trusting that the code generated by the computer is correct, although, at least with PsychoPy this is something readily available to check.</p>

<p>Certainly the PsychoPy team are very strong advocates of piloting your study very carefully, checking the timing, the log files and the data files before proceeding with data collection, however you generate your task.</p>

<p>While we aren’t aware of any data around the topic of whether hand-written or Builder-generated code has fewer bugs, we have a strong suspicion it is the latter.</p>

<h2 id="common-arguments-for-hand-writing-code">Common arguments for hand-writing code</h2>

<p>Despite these arguments in favor of graphical experiment builders, like that in PsychoPy, a large number of scientists are very resistant to the idea of using such an interface. As one former colleague of mine once explained, “It just feels dirty to use something so easy”!</p>

<p>So let’s consider some of the common arguments for hand-writing your own code.</p>

<h3 id="i-like-to-know-exactly-what-my-code-is-doing">I like to know exactly what my code is doing</h3>

<p>This by far is the most common argument for hand-writing code. We certainly agree that learning to code is really important and having as much understanding of the underlying Python code of your study is a worthwhile endeavor in understanding certain features and limitations of the platform that you use. That is why we wrote PsychoPy to expose the script to you, and why all the source code of the underlying libraries is available, so that the user truly can completely understand the code of their study. (We note that not all graphical interfaces make this possible, or at least easy, and that is a source of some concern).</p>

<p>However, the truth is that a high percentage of users that write their own code do not have as deep a level of understanding as we would consider necessary. Indeed, as mentioned above, even if they have excellent understanding at one point in time, it can be very easy to let your knowledge of the current best-practice slip, and this is something that constantly changes, as libraries improve, as the languages improve and as operating systems change.</p>

<p>So, if you find yourself saying that you like to know exactly what your code is doing, ask yourself whether you really do. When you look at the Builder-generated code are there parts where you aren’t clear why PsychoPy takes a seemingly unintuitive step. Is it possible that PsychoPy Builder is taking something into account that your hand-written code does not, that it does something useful you hadn’t yet understood?</p>

<p>Of course, there are going to be some programmers that do have a better grasp of things like Python, OpenGL and computer timing than the PsychoPy development team, and will write better code than the Builder as a result, but we suspect these are relatively few as a percentage. To the reader that is an exceptional programmer that has been offended by this section, we sincerely apologize.</p>

<h3 id="code-is-more-flexible-than-a-graphical-user-interface">Code is more flexible than a graphical user interface</h3>

<p>Certainly, if a graphical interface could generate all the realm of experiments that can be created in a programming language, that graphical interface would probably be so complex it would be at least as hard to use as the programming language itself.</p>

<p>For the PsychoPy team, that was never the goal. The aim has always been, as XXX the author of Perl put it, to “make easy things easy and make hard things possible”. The best way to achieve that goal is, we believe, a graphical interface to cover the majority of standard tasks, combined with a coding interface that allows you to build whatever level of flexibility on top of that with your own code.</p>

<p>Nobody ever suggested that scientists would stop writing code at all. PsychoPy provides the opportunity to include Code Components that augment your study and these can be used to include all manner of exciting additions. This is an extremely important part of PsychoPy’s design and future-proofing, that the feature set does not stop with just the components that are already built in.</p>

<p>When we hear that users need to hand-write code in order to gain flexibility, we tend to find that they underestimate what can be achieved with a well-written Code Component. Code Components bring all the flexibility of Python with code that can be injected almost anywhere in your study, to run at initialisation, at the start of each trial, on every screen refresh etc.</p>

<p>This code can include custom classes that the scientist has written (benefiting from inheritance from PsychoPy’s built-in classes) and can even override behaviors of existing code in the study. Due to the powers of the Python language, you could, for instance provide a new method to override the behavior of the <code class="language-plaintext highlighter-rouge">Window.flip()</code> function, you could insert this new function into your Code Component, or you could import that from another file to be reused in other studies. If you find yourself using this functionality a lot, you could even make your life easier by creating a Custom Component (an under-used feature of PsychoPy) or making it available to others as a plugin.</p>

<p>There might be a very small number of behavioral studies that really require you to write a script with no Builder-generated code at all - where you really need to break out of the concept of trials entirely, for instance or don’t want a stimulus window to appear. For nearly all other cases, allowing Builder to write the bulk of the code and adding your specialist code into the experiment seems closest to that goal of making easy things easy and hard things possible.</p>

<h3 id="but-i-like-writing-my-own-code">But I like writing my own code</h3>

<p>This is another common sentiment. For many users, the problem-solving task of writing the code is a hugely enjoyable and rewarding part of the job. As scientists that have become software authors, we probably feel this more strongly than almost anyone. It was Jon’s enjoyment of writing code that led him to spend so much time developing PsychoPy and that led Becca to work for Open Science Tools. We get it.</p>

<p>Again, in PsychoPy, you can use those Code Components to go the extra mile and create your studies that are richer than than would have been possible without, and you will naturally get to “scratch” that coding “itch” along the way.</p>

<h3 id="i-like-my-code-to-be-clean-whereas-generated-code-is-ugly">I like my code to be clean, whereas generated code is ugly</h3>

<p>We do appreciate this aspect as well. It is true that Builder often has to write more verbose code than you would do manually, because you know your intention before you start writing the code whereas Builder has to prepare for a very general solution and that often needs more code.</p>

<p>The PsychoPy team have always aimed to make Builder-generated code as readable as possible, with plenty of comments and avoiding more advanced programming “tricks” that only coding aficionados would understand. That said, the greater priority is that the code works to support a wide range of study and that it runs fast, especially while stimuli are being rendered. Those are greater priorities than readability given that the code is primarily meant to be <em>run</em> rather than <em>read</em>.</p>

<h3 id="with-code-i-can-get-help-from-chatgpt">With code I can get help from ChatGPT</h3>

<p>This rise of ChatGPT and other Large Language Models (LLMs) is an interesting development in terms of how to generate code for studies. These are interesting and fun tools. Certainly the LLMs we have used (ChatGPT and Google’s Gemini) have clearly been trained on PsychoPy code and are capable of generating PsychoPy code as a result. They could be used in a variety of ways, all the way from “how can I make these lines more efficient” to “create me a study that does…”.</p>

<p>Most interestingly, it seems the same PsychoPy users advocating for writing code “so that you know what it’s doing” would prefer to use AI than use Builder. To be clear, you know <em>much less</em> what AI is doing than what Builder does. Builder has been written to generate the same code every time, following known rules by the creators of the software. While AI-generated code may look sensible and provide useful ideas at times, it has several downsides.</p>

<p>First, to provide enough detail to your AI tool for it to know exactly what your experimental script should look like, is to provide the same set of details that your Builder experiment requests from you in creating your study. If you don’t give all of those details, if you don’t remember all the parameters required to define your stimulus for instance, then your study will be under-specified. ChatGPT won’t tell you that it needs more information - it will just generate something that the researcher did not want.</p>

<p>Second, akin to the issue that people hand-writing their code have a strong potential to be out of date, that is also very much the case for LLMs. The material on which LLMs are based will tend to be based on what is found online, through GitHub for instance. Older code examples online will tend to remain, and often even have more links pointing to them, so the LLM will have a tendency to be outdated. Again, Builder is written by the team that creates the PsychoPy code, and generates code according to the current best practice.</p>

<p>Third, the LLM does not have any understanding of the <em>meaning</em> of the code it writes or how the code actually works. The way that LLMs work, put very simply, is to regurgitate and combine phrases that it has encountered previously and generates the plausible phrases responses to a particular prompt.  Builder-generated code ultimately comes from the same developers that know <em>why</em> this code is written this way.</p>

<p>Fourth, the LLM does not create reproducible outputs. Its responses are probabilistic and it generates a different output each time you ask a question. Builder is deterministic, following a fixed set of explicit rules, that you can openly investigate in the source code, and it will always generate the same script for the same code for a given study (for a given version of the software, which can be forced during the compilation of the script).</p>

<p>Lastly, when there are gaps in an LLM’s “knowledge” it never alerts you that it doesn’t “know” the answer. It just makes an answer up. When you ask ChatGPT to provide references on a discussion, it will often simply make up plausible-sounding papers, that don’t actually exist. With code, ChatGPT will assert that functions and arguments exist that simply don’t! OK, those errors you may work out soon enough because the code will simply not run. What about when code looks correct to a novice user, and runs without error, but fails to achieve the aims of the researcher or makes more subtle mistakes by not “understanding” the underlying meaning of the phrases it puts together.</p>

<h2 id="ultimately">Ultimately</h2>

<p>We really don’t want researchers to think there’s a right and wrong - people are different and should use whatever tool works best for their particular needs. If you have reasons to hand-write code, if you read this and aren’t convinced, that’s fine too. PsychoPy will always provide interfaces to allow scientists to work with the tools on whatever levels work for them. We believe in diversity.</p>

<p>This post was written because we do want people to make their decision from an informed position.</p>

<p>We, despite being relatively competent programmers, would not dream of writing a study from scratch in hand-written code unless we absolutely had to. But it is a personal choice and, as long as “coders” aren’t looking down on “builders” for their choice, we won’t look down on “coders” either.</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:academics" role="doc-endnote">
      <p>PsychoPy users are mostly academics, after all, and one thing academics do well is hold their viewpoints passionately <a href="#fnref:academics" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:hassle" role="doc-endnote">
      <p>including the initial debugging, the mistakes, the issues that one failed to think about (that would have been handled correctly in the Builder-generated boilerplate code) <a href="#fnref:hassle" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Jon Peirce</name></author><category term="PsychoPy" /><category term="builder," /><category term="coder," /><category term="psychopy" /><summary type="html"><![CDATA[This is a somewhat heated debate - we have scientists arguing passionately1 for both sides; that users must always write their own code by hand, or that people should use a graphical user interface to write the code for them. Luckily PsychoPy provides both interfaces, so both groups can be happy. PsychoPy users are mostly academics, after all, and one thing academics do well is hold their viewpoints passionately &#8617;]]></summary></entry><entry><title type="html">Perspective story: Sue Lynn Mah</title><link href="https://blog.psychopy.org/perspectives/suelynn_mah/" rel="alternate" type="text/html" title="Perspective story: Sue Lynn Mah" /><published>2024-05-03T13:13:41+00:00</published><updated>2024-05-03T13:13:41+00:00</updated><id>https://blog.psychopy.org/perspectives/suelynn_mah</id><content type="html" xml:base="https://blog.psychopy.org/perspectives/suelynn_mah/"><![CDATA[<h2 id="origin-story">Origin story</h2>

<p>I was first introduced to PsychoPy when I did my undergrad in the University of Nottingham Malaysia Campus. I believe it was the second week of lab practicals and we were already taught how to build our own PsychoPy task - it was of course a Stroop task. It then evolved into other cognitive tasks such as the Navon task, mental rotation etc. One of the assessments for my lab practicals was to build a psychopy task on the spot! To say I was thrown into the deep end would not be an exaggeration   😂 Fast forward to second year, I was building all my PsychoPy tasks pretty much independently and dipped my toes in Python programming for my final year project because editable textboxes were not a thing yet.</p>

<p>After graduating, I started my PhD in Psychology at the University of Nottingham UK. This is when I really started getting into more advanced coding concepts. I attended the in-person PsychoPy workshop back when it was all taught from Coder View which made me appreciate having a Builder View even more! Although, having said that, being exposed to the “under the hood” code made the next phase of my PsychoPy journey slightly easier because a <em>little</em> thing called Covid happened.</p>

<h2 id="intermediate-user-of-psychopy">Intermediate user of PsychoPy?</h2>

<p>When the pandemic hit, all of my tasks were already built and ready for data collection but we could not collect any in-person data which meant that I had to figure out how to get my experiments to Pavlovia so that I could collect data online. Pavlovia had just been introduced for a couple of months so features like the slider was not available just yet. My thoughts back then was “Well I’ll just build my own slider then!”. And attending the in-person workshop back in my first year was really helpful because the idea of coding something from scratch didn’t seem that scary. And with some guidance from the <a href="https://discourse.psychopy.org/" target="_blank">forum</a>, I eventually got a rudimentary slider working and my data collection was back on track!</p>

<p>I then started helping my friends to build/debug their tasks which increased my confidence as a PsychoPy user which eventually led to me helping out externally researchers and was also asked to support one of the first online PsychoPy workshops. One of my Pavlovia tasks was also shared externally and was used in <a href="https://www.sciencedirect.com/science/article/pii/S2215001321000421" target="_blank">study</a> that was later published.</p>

<h2 id="the-next-phase-of-my-psychopypavlovia-journey">The next phase of my PsychoPy/Pavlovia journey…</h2>

<p>Towards the end of my PhD, I was employed by <a href="https://opensciencetools.org/" target="_blank">Open Science Tools</a> and began my life as a Science Officer helping researchers around the world and from various fields create bespoked PsychoPy/Pavlovia tasks and lead workshops. This job sits between academia and industry so I was happy to still be able to keep a connection within the academic community. Here’s a picture of my attending the BPS Bristol conference!</p>

<p><img src="/assets/images/suelynn.jpg" alt="Sue Lynn at BPS CogDev." class="img-super-right" style="width:75%" /></p>

<p>This role has also allowed me to expand my knowledge of Python and Javascript which has led me to create some cool gamified tasks such as this <a href="https://run.pavlovia.org/Consultancy/bart_in_space" target="_blank">BART task</a> or this <a href="https://run.pavlovia.org/Consultancy/multiplication_game" target="_blank">mathematical cognition task</a>. <em>Note: These tasks have been shared with permission</em>.</p>

<p>As someone who’s background is in psychology, I would never have thought that I would be able to venture into the world of software development. At this point, I’m somewhat of a <strong>“super user”</strong> of PsychoPy/Pavlovia so when I’m not doing consultancy work, I’m creating demos on the forum and Pavlovia as well as writing documentation for the software. My time as a Science Officer has now come to an end and I will be switching my focus onto more research-based roles within academia. This does not mean that my PsychoPy/Pavlovia journey is ending though. I foresee myself creating more gamified-tasks when inspiration strikes, my friends randomly messaging me questions on why their task is not working and occasionally go forum-surfing when I have some spare time to kill 😄</p>]]></content><author><name>Sue Lynn Mah</name></author><category term="perspectives" /><summary type="html"><![CDATA[Origin story]]></summary></entry><entry><title type="html">The origins of PsychoPy</title><link href="https://blog.psychopy.org/psychopy/psychopy_origins/" rel="alternate" type="text/html" title="The origins of PsychoPy" /><published>2024-04-23T09:25:41+00:00</published><updated>2024-04-23T09:25:41+00:00</updated><id>https://blog.psychopy.org/psychopy/psychopy_origins</id><content type="html" xml:base="https://blog.psychopy.org/psychopy/psychopy_origins/"><![CDATA[<p>The seeds of <a href="https://psychopy.org">PsychoPy</a> were planted in early 2000s when Jon Peirce was a visual neuroscience postdoc at <a href="https://as.nyu.edu/cns.html">NYU</a>. Jon had been using <a href="https://www.mathworks.com/products/matlab.html">Matlab</a> for his PhD and postdoc work but he was never really a programmer. He was just a psych/neuroscientist using code for his needs.</p>

<p>Although Jon had no formal computer science training, like many scientists, he became reasonably fluent in programming. He was using Psychophysics Toolbox but, in those days, PsychToolbox couldn’t do all the things it can now - stimuli had to be precomputed as movies, or you had to use sneaky tricks like “lookup table animation”. Those tricks are now long since forgotten (thankfully - they were clever but mind-bending).</p>

<h2 id="the-beginnings-of-psychopy">The beginnings of PsychoPy</h2>

<p>Around this time, there was a lot of talk about “hardware accelerated graphics” and Jon went through the tutorials for using OpenGL. He saw that this would allow a pretty great way to create stimuli that could be generated on the fly, and that meant not having to pre-computer movies in order to generate, say, a drifting Gabor. Jon was pretty excited that this was the way to go for stimulus rendering and he also found that in Python he could execute these OpenGL calls directly in his scripts.</p>

<p>Now, in 2002, Python was not well-known and in many ways was in its infancy (bear in mind that <code class="language-plaintext highlighter-rouge">numpy</code> wasn’t created until 2005!) but Jon was pretty excited by this and set about creating his first stimuli that combined textures (gratings and gaussian blobs) in useful ways to create stimuli like Gabors. It was all done relatively efficiently on the graphics card with really minimal easy-to-use scripts.</p>

<p>That was the beginning of PsychoPy, which was uploaded to sourceforge.net as <code class="language-plaintext highlighter-rouge">psychpy</code> in March 2002 (the “o” got added later but sourceforge didn’t allow names to be changed after registration, so it’s still there on sourceforge).</p>

<p>In 2003, Jon moved to Nottingham University as a Lecturer (Asst Prof, in American terminology) and began using PsychoPy for his own studies from then on.</p>

<h2 id="python-enthusiasts">Python enthusiasts</h2>

<p>In the early years PsychoPy had a few users, a web page, a Google Group, but Jon didn’t really provide much in the way of formal support. PsychoPy was for his lab and he made it available, but if it didn’t work for you on your system that was… well, just unfortunate! Actually, that’s not quite true. Jon discovered that the power of Python meant that he could add things with relatively little effort and so he often spent his evenings and weekends adding features that users requested. He added more stimuli, and the Coder interface, and built the dependencies into an app so it could be installed more easily. That set of features led to the first manuscript about PsychoPy in 2007 (Peirce, 2007).</p>

<p><img src="/assets/images/builder.png" alt="Screenshot of version 1.6 Builder Interface" class="img-super-right" /></p>

<h2 id="2008-9-adding-the-builder-interface">2008-9 Adding the Builder interface</h2>

<p>Jon was teaching psychology undergraduates to use E-Prime in their practical classes at Nottingham. That wasn’t suitable for psychophysics stimuli (it couldn’t create the sort of stimuli that vision scientists need) but it was the only software at the time that had a simple enough graphical user interface for undergraduates (and other non-programmers) to create their own studies. Some discussions with André Gouws at the University of York, encouraged Jon to think about what an ideal graphical interface would look like for PsychoPy and to work out the mechanics of what that might do. This was the beginning of creating the Builder interface. It was a lot of work, mostly in evenings and weekends, but by 2009 this was available with a range of simple stimuli and flow controls, as well as the option to add code snippets. It meant that people could use PsychoPy who didn’t have any programming experience and it quickly gained traction as a teaching tool. The inner workings of the Builder interface have changed very little since that first iteration, although the stimuli and user interface have improved enormously.</p>

<h2 id="increasing-uptake-increasing-features-increasing-precision">Increasing uptake, increasing features, increasing precision</h2>

<p>With a graphical interface the userbase gradually grew. Increasing numbers of departments started using PsychoPy instead of E-Prime (which is expensive and less flexible in the stimuli it can present). This also marked a slight change in direction for PsychoPy because while Jon’s own research was in visual neuroscience, the increasing userbase was more in cognitive psychology and linguistics, areas that particularly valued the graphical user interface.</p>

<p>As the user numbers grew Jon, and additional contributors like <a href="https://github.com/isolver">Sol Simpson</a>, <a href="https://github.com/jeremygray">Jeremy Gray</a> and <a href="https://github.com/hoechenberger">Richard Höchenberger</a>, were working fairly continuously adding further features, like eyetracker support and asynchronous hardware polling, more stimulus types and response options, and generally making the Builder more capable of running studies that were as precise as hand-written code. Indeed, this got to the point that Jon himself started creating his own experiments in the Builder interface rather than by hand (not something he had expected to be doing!).</p>

<p>As PsychoPy grew, however, it became hard to keep up with the support needs on a part-time basis while Jon and the contributors had a range of other commitments. There were increasingly frustrating situations where we would know that a bug existed but couldn’t spend the time fixing it because of other commitments (like marking undergraduate exams).</p>

<h2 id="grant-funding">Grant funding</h2>

<p>Ultimately, what rescued the situation was a grant from the <a href="https://wellcome.org/">Wellcome Trust</a> to port PsychoPy to an online platform (PsychoJS and Pavlovia), followed by a grant from the <a href="https://chanzuckerberg.com/">Chan Zuckerberg Initiative</a>. These grants made it possible for a small team to work full-time on improving the software, documentation and training in the PsychoPy ecosystem.</p>

<p>PsychoPy now has <a href="https://usage.psychopy.org">too many users</a> for us to contemplate going back to a volunteer-based part-time development model. We absolutely depend on the revenue that comes from <a href="https://store.pavlovia.org">Pavlovia site licenses</a> and from <a href="https://psychopy.org/consultancy.html">consultancy work for users</a> in order to provide full-time staff dedicated to the project. That is now possible, thankfully, managed by our social enterprise company, <a href="https://www.opensciencetools.org">Open Science Tools Ltd</a>.</p>

<p>We hope that this model of development, in which the software is provided for free (PsychoPy will be open source always), but with full-time develoment paid for by services, is a useful business model for the future, and potentially for other projects. We hope it means quality can be free to the masses, while also being of a professional quality.</p>

<p>We hope you enjoy using the modern PsychoPy, and thanks for supporting the project in your various ways.</p>]]></content><author><name>Jon Peirce</name></author><category term="PsychoPy" /><category term="psychopy," /><category term="history" /><summary type="html"><![CDATA[The seeds of PsychoPy were planted in early 2000s when Jon Peirce was a visual neuroscience postdoc at NYU. Jon had been using Matlab for his PhD and postdoc work but he was never really a programmer. He was just a psych/neuroscientist using code for his needs.]]></summary></entry><entry><title type="html">Contributor story: Abbey Roelofs</title><link href="https://blog.psychopy.org/perspectives/abbey-roelofs/" rel="alternate" type="text/html" title="Contributor story: Abbey Roelofs" /><published>2024-01-22T15:52:00+00:00</published><updated>2024-01-22T15:52:00+00:00</updated><id>https://blog.psychopy.org/perspectives/abbey-roelofs</id><content type="html" xml:base="https://blog.psychopy.org/perspectives/abbey-roelofs/"><![CDATA[<h1 id="background">Background</h1>

<p><img src="/assets/images/RoelofsProfilePhoto.jpg" alt="image of Abbey Roelofs" class="img-super-right" style="width:75%" /></p>

<p>Abbey is a great example of someone who is already very accomplished in software development, but has recently begun to contribute to the PsychoPy project. At the University of Michigan, Abbey leads a team of software developers who serve the specialized needs of researchers in the College of Literature, Science, and the Arts. She first came to our attention on the PsychoPy Forum a couple of years ago when she began requesting possible workarounds for certain video-playback bugs in PsychoJS, while at the same time suggesting how to fix the bugs.</p>

<p>Recently, she participated in one of our online contributor workshops to learn the culture of how code contributions are made using Git and GitHub at PsychoPy (probably because she was tired of the bugs!). Most recently, she came to the University of Nottingham to participate in our in-person codesprint, where she added support for additional functions to the Python-&gt;JavaScript translator.</p>

<h1 id="a-day-in-the-life">A Day in the Life</h1>
<p>A typical day for me consists of a mix of writing code, working with others in my group, and meeting with team members or researchers. Because our group serves over 75 academic departments, we get a very wide variety of projects, so the type of code I’m writing varies depending on the day. I might be debugging a behavioral task in PsychoJS for a psychology graduate student, working in LabVIEW to develop a control program for a spectroscopic instrument in the Chemistry department, or creating a new mobile app in Unity and C# to demonstrate cell structure for a biology professor. Our group tries to make sure every project has at least a couple people working on it, so I’ll probably also spend some portion of my day working with my team members. We could be going over pull requests, discussing design options for a project on which we’re collaborating, or doing some pair programming. Finally, because I’m the team lead and responsible for project planning and administrative details, I usually spend a decent bit of my day in meetings. The administrative ones, while necessary, aren’t my favorites, but the meetings with researchers to discuss new projects or get feedback on ongoing projects are always interesting.</p>

<p>Since I work in a role supporting researchers and work on whatever type of programming they need, my use of PsychoPy/PsychoJS tends to be somewhat sporadic. It’s always nice to know, though, that when I do come back to it, there’s a great support community there to help out!</p>]]></content><author><name>Abbey</name></author><category term="perspectives" /><summary type="html"><![CDATA[Background]]></summary></entry><entry><title type="html">Contributor story: Shaylyn Kress</title><link href="https://blog.psychopy.org/perspectives/shaylyn-kress/" rel="alternate" type="text/html" title="Contributor story: Shaylyn Kress" /><published>2024-01-17T09:58:41+00:00</published><updated>2024-01-17T09:58:41+00:00</updated><id>https://blog.psychopy.org/perspectives/shaylyn-kress</id><content type="html" xml:base="https://blog.psychopy.org/perspectives/shaylyn-kress/"><![CDATA[<p><img src="/assets/images/SK.jpeg" alt="image of Shaylyn" class="img-super-right" /></p>

<h2 id="background">Background</h2>

<p>I am a graduate student from Canada, specializing in Cognitive Neuroscience. My research involves neuroimaging with functional magnetic resonance imaging and I developed an interest in open science and open source projects during my undergraduate and early graduate studies.</p>

<p>In 2020/2021, my graduate lab shifted to running studies online.
Our lab had been using other software for experiment design, so the online shift was a great chance for me and other lab members to start using PsychoPy.</p>

<h2 id="psychopy-involvement">PsychoPy Involvement</h2>

<p>The experiments I have designed often involve picture/text stimuli with multiple locations. I often use code components to control the selection of the different locations. In learning PsychoPy, the community forums have been a helpful resource to learn some ways to achieve my study goals and troubleshoot problems as I learned to run studies online.</p>

<p>As I gained experience I was able to start contributing back to the community. I mostly contribute by answering questions on the community forum and I like tackling questions that involve interesting task designs or small code components. Some of these discussions are about figuring out the slight differences in PsychoPy vs PsychoJS and there was a bug in online studies that I helped fix.</p>

<p>My level of participation in the PsychoPy community depends on my research projects. When I am designing new cognitive experiments, I tend to be more active. The PsychoPy community has been a very welcoming place that helped get me involved in open science and open source initiatives. Helping out on the forum is a great way to improve problem solving, coding, and code communication skills.</p>

<p>One of these days I would love to build some PsychoPy experiments for neuroimaging studies. I also would like to design experiments in PsychoPy that capture vocal response times and durations. The Whisper transcription plug-in looks very exciting for this direction.</p>

<p>Contributing to open source projects uses many of the same skills as scientific research. You identify a ‘problem’ (perhaps a research question or computer bug) and make incremental changes based on your hypotheses to learn more about the mechanisms behind your ‘problem’. You should document your changes (research methods, version control) and your observations (research results, code comments and documentation). And if things go well, in the end you may have a research publication, or an open source contribution. In this way, coding is not very different from doing research!</p>

<p>Happy experimenting!</p>

<p>Shaylyn (she/her)</p>]]></content><author><name>Shaylyn</name></author><category term="perspectives" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Contributor story: Hiroyuki Sogo</title><link href="https://blog.psychopy.org/perspectives/hiroyuki_sogo/" rel="alternate" type="text/html" title="Contributor story: Hiroyuki Sogo" /><published>2023-11-22T14:38:41+00:00</published><updated>2023-11-22T14:38:41+00:00</updated><id>https://blog.psychopy.org/perspectives/hiroyuki_sogo</id><content type="html" xml:base="https://blog.psychopy.org/perspectives/hiroyuki_sogo/"><![CDATA[<h2 id="how-did-you-start-using-psychopy">How did you start using PsychoPy?</h2>

<p>When I was a postdoc, I had to use the Eyelink II eye tracker with Matlab/PsychToolbox on a Windows PC. At that time, EyelinkToolbox was available to control Eyelink II from Matlab; however, it had some problems on Windows. So, I looked for another way and found that a sample code with pylink worked fine on Windows. From then on, I started to be interested in Python. A few years later, I got a teaching position at a Japanese university and chose Python as the language for teaching programming. After trying several development environments and libraries, I selected PsychoPy for its ease of building experiments on the Builder interface. I don’t remember when, but I think it was around 2011.</p>

<h2 id="what-are-your-contributions-to-psychopy">What are your contributions to PsychoPy?</h2>

<p>Soon after using the Builder for teaching, I faced problems with Japanese characters. Although the Builder could draw Japanese characters as visual stimuli, it crashed if the path to the experiment files included Japanese characters (more generally, multibyte characters). I told students not to use Japanese characters as folder and file names, but that seemed to be an “unreasonable” requirement for some Japanese students. Even worse, Japanese characters in several audio device names also caused crashes, which could not be avoided without hardware change. To solve the problems, I started to read the Builder source codes and commit fixes to the PsychoPy repository. These problems have been solved in recent versions of PsychoPy.</p>

<p>In 2014, the project started to make the Builder UI multilingual. I participated in testing multilingual functions and simultaneously translating the UI into Japanese. Since that time, I have continued to update Japanese translations when new features are added to the Builder or messages in the UI are modified.</p>

<p><img src="/assets/images/hs.jpg" alt="Hiroyuki with the translated version of the book, Building Experiments in PsychoPy." class="img-super-right" /></p>

<p>In addition, I have been publishing tutorials on Builder on my website since 2014. This led to an offer from a publisher to write two books, one is about programming PsychoPy and the other is about online experiments with the Builder and Pavlovia. I also participated in the translation team for the official PsychoPy book (“Building Experiments in PsychoPy”).</p>

<p>I’m not a good programmer at all, and most of the bugs I fixed were easy to fix; however, they would have been difficult to find for users who didn’t use the multibyte characters environment. Even the best programmers will not be able to find all the bugs under various conditions. So, I hope that people with various backgrounds will contribute to the development of PsychoPy.</p>

<h2 id="what-do-you-like-about-psychopy">What do you like about PsychoPy?</h2>

<p>Active development over the years. It has been more than 10 years since I started using PsychoPy. Many tools and libraries I used have disappeared because they could not keep up with the changing PC environment. Nevertheless, I can still use PsychoPy in much the same way as when I first learned it.</p>

<p>There have been several challenges over the last decade, I guess, but the one that was the most impressive for me was the transition from Python 2 to 3. Because the syntax of Python3 is not fully compatible with that of Python2, extensive code rewriting was required to run PsychoPy on Python3. It was truly commendable that the core development team and contributors made it through. Hopefully, PsychoPy will continue to be updated in the future — though, to be frank, it’s a burden for me to update my Builder tutorial if updates to PsychoPy occur too often!</p>]]></content><author><name>Hiroyuki</name></author><category term="perspectives" /><summary type="html"><![CDATA[How did you start using PsychoPy?]]></summary></entry><entry><title type="html">Contributor story: Shun Wang</title><link href="https://blog.psychopy.org/perspectives/shun_wang/" rel="alternate" type="text/html" title="Contributor story: Shun Wang" /><published>2023-11-13T08:57:00+00:00</published><updated>2023-11-13T08:57:00+00:00</updated><id>https://blog.psychopy.org/perspectives/shun_wang</id><content type="html" xml:base="https://blog.psychopy.org/perspectives/shun_wang/"><![CDATA[<h2 id="background">Background</h2>

<p>Shun Wang (王顺 in Chinese) is a user-experience researcher. While at school he studied sociology, a very interesting subject. Out of interest, he has extensively dabbled in computer programming and statistics, starting from computational social science and extending to various interesting fields. He is the main contributor to the Chinese localisation of PsychoPy, and has also contributed to its CI/CD workflows.</p>

<p><img src="/assets/images/shunWang.png" alt="Shun Wang" class="img-super-right" style="width:75%" /></p>

<h2 id="shun-with-psychopy">Shun with PsychoPy</h2>

<p>He discovered PsychoPy in an academic article, and applied it to his works and tasks. He often recommended it to people around him. Then he began to translate PsychoPy’s interface into Chinese so that people from the world’s most populous country could appreciate the software.</p>

<p>Shun has very optimistic expectations for the future of PsychoPy. As initiatives for open science and reproducible research gain popularity among scholars around the world, Shun feels that PsychoPy will play a greater role in the reproducibility and openness of psychological experiments.</p>

<h2 id="shun-with-open-source-software">Shun with open source software</h2>

<p>Shun is very passionate about open source software and is keen on communicating with all kinds of people. At present, he also serves as a team member of the open source statistics software <a href="https://jasp-stats.org/">JASP</a>, where he is responsible for underlying software development and community communication. In addition, he has contributed to several Linux desktop communities and is also a member of the <a href="https://github.com/r-devel">R-devel team</a>. Beyond contributing to language localization there, he is also responsible for some software quality, tirelessly fixing and testing the software to ensure functional stability and consistency. All of this work is done on a voluntary basis.</p>

<blockquote>
  <p>I enjoy collaborating with different people. This not only increases your knowledge, but also makes friends. – Shun Wang</p>
</blockquote>]]></content><author><name>Shun Wang</name></author><category term="perspectives" /><summary type="html"><![CDATA[Background]]></summary></entry><entry><title type="html">Contributor story: Patrick Bolger</title><link href="https://blog.psychopy.org/perspectives/patrick_bolger/" rel="alternate" type="text/html" title="Contributor story: Patrick Bolger" /><published>2023-10-02T10:57:00+00:00</published><updated>2023-10-02T10:57:00+00:00</updated><id>https://blog.psychopy.org/perspectives/patrick_bolger</id><content type="html" xml:base="https://blog.psychopy.org/perspectives/patrick_bolger/"><![CDATA[<h2 id="patricks-background">Patrick’s background</h2>

<p>Patrick was born and raised in Silicon Valley. His PhD at the University of Arizona centred around the language development and psycholinguistics. More recently, he was in the Department of Psychological &amp; Brain Sciences at Texas A&amp;M University, focusing a great deal of his efforts on teaching statistics, in addition to the psychology of language. His undergraduate statistics course ultimately used only open educational resources, the goal being to contribute to making the curriculum more inclusive towards the economically under-privileged. In the wake of the George Floyd murders, he took intensive classroom-diversity training, culminating in him taking further steps to make his courses more <a href="https://mcgraw.princeton.edu/inclusive-and-equitable-teaching/redesigning-equity-inclusion#tab-0-2">explicitly centralised on equity, diversity, and inclusion</a>.</p>

<p><img src="/assets/images/patrick.jpg" alt="image of Patrick Bolger staring at his computer screen" class="img-super-right" /></p>

<p>Patrick is very open about his physical disability, which he considers very minor. Near the culmination of his PhD studies, he developed rheumatoid arthritis, an autoimmune disease characterised by chronic sinuvitis in multiple joints, especially those in the extremities. He managed to get the condition under control within a few years, thereby avoiding the worst potential effects of the disease. He has since found strategies to offset the daily inconvenience of having very weak and inflexible hands. So you might not notice at first glance that he has such a physical disability, but you might notice him getting frustrated with pens/pencils, vacuum-packed jars, and pint glasses covered in condensation.</p>

<h2 id="what-he-does-at-psychopy">What he does at PsychoPy</h2>

<p>Due to his demonstrable dedication to EDI in his pedagogy, Patrick was hired on a grant secured by Jonathan Peirce from the <a href="https://chanzuckerberg.com/">Chan Zuckerberg Initiative</a>. He works alongside the PsychoPy team as a <em>community development champion</em> in the School of Psychology at the University of Nottingham. His job is to foster equity, diversity, and inclusion in the PsychoPy ecosystem. Among other things, he does the following: 1) carries out surveys concerning EDI in the PsychoPy community; 2) organises contributor workshops and codesprints, promoting them in turn to traditionally marginalised groups; 3) runs online software-localisation workshops for various language groups around the world; and 4) solicits contributor stories from those who are seldom heard from in the world of open-source software development.</p>]]></content><author><name>Patrick</name></author><category term="perspectives" /><summary type="html"><![CDATA[Patrick’s background]]></summary></entry></feed>