Category Archives: Software Development

A little history of interactive simulations and PLATO

When I started teaching over 40 years ago, I first thought about writing a textbook. Since there were a couple good textbooks in the field, and since I was fascinated by the visual interface of the new Macintosh computers, which had just been released, I became interested in developing interactive computer simulations.

A colleague, who had written a couple textbooks in another field, once asked me how developing computer simulations compared to writing textbooks. I didn’t have a good answer on the spot, but later thought more about his question. One difference is that textbooks are expected to have a few typos, but computer programs must work. I learned later that the fact that programs must work meant to our patent office that they are “tools” and, thus, property of the university, unlike written articles and books, which are property of the individual professor!

My development of Reactor Lab started in earnest when Apple released HyperCard 2.0 in 1990. The drag and drop visual layout and very high level, plain English programming made it possible for a prof doing research as well as teaching to develop simulations. That said, designing, developing, and debugging computer programs is a very time consuming process.

Because of that, my wish is that, rather than relying on individuals or a small group to make educational simulations, as many resources could be applied to that endeavor as is applied to making computer video games!

As long ago as Reactor Lab was begun, other systems had appeared before. I recently rediscovered PLATO in the 1976 article “The Potential of PLATO” by Evan Jenkins. The PLATO project started at the University of Illinois in 1960 and was the first generalized computer-assisted instruction system.

By 1976, PLATO systems hosted interactive simulations of chemistry experiments. A couple screenshots from Jenkins article are shown below. Used in the experiments were plasma display screens with a 16×16 array of IR sources and detectors to detect where the student touched the screen. The first screen below shows separate components of a laboratory distillation system. The student touched on a component and then touched where it should be placed on the column. The second screen shows a completed system and a plot of results. Spots on the screen allowed student user to change temperatures.

In 1976 I finished graduate school at Berkeley and headed to GM Research. My computer use at Berkeley involved punch cards, and computers at GM were big IBMs in special rooms. It wasn’t until a couple years later that I purchased the first mobile lab computer at GM Research, a DEC PDP 11/03, to do experimental control and data collection. So PLATO in that era was at the forefront of computer development!

PLATO distillation column components in 1976 PLATO distillation column in operation

Please send us a message letting us know what you think at support@reactorlab.net

AI in education – thoughts after a few experiments

At the Web Labs page for AI experiments, I have posted six simulations to date. I am now thinking that current AI agents might not be so helpful for individual students to create simulations during a study session. I have found that it can take quite a few prompts to get a reasonable simulation. So my current thinking is that agent-created simulations may be useful for students in other contexts.

One context might be for students or student groups working on week-long or term projects. Another might be an instructor-led development of a simulation with classroom participation by students.

In many cases, I think the most productive uses of AI agents will be by instructors developing finished simulations for use by their students and for use by the instructors in demonstrations.

Please send us a message letting us know what you think at support@reactorlab.net

How can AI be used in education? Some thoughts

Artificial intelligence agents are getting more powerful by the day. For a couple months, I have been using GitHub Copilot in Visual Studio Code to help develop simulations and to learn about concepts in front-end web programming. In Copilot, you can select between a couple different AI agents. Recently, I subscribed to Anthropic’s Claude to use as a standalone app.

There has been concern expressed in media about students using AI to cheat on assignments and exams. I am not so concerned; “blue book” tests and personal interviews can let students show what they understand. Rather, I want to spend my time thinking how these tools can help people learn. Too many students, you say? Then you need to hire more human instructors, not fewer!

One practice I recommend to instructors is to model how you use AI to do your work and to learn new concepts and techniques. This can be done in live or recorded lessons.

I am thinking about how students themselves can use AI agents to help their studies. One idea is that a student could ask an AI agent to make a simulation that demonstrates a concept they are learning about.

That involves a couple different aspects. One learns how to clearly communicate concepts about a subject in the process of crafting a prompt that produces the desired result. And one learns from a well-crafted simulation.

See my experiments at Web Labs, AI experiments.

Please send us a message letting us know what you think at support@reactorlab.net

Intro to Web Labs

This is from the first page of the Web Labs wiki on our Github site:

Web Labs is a project of ReactorLab.net. Our purpose is to provide labs which help people understand physical systems through active participation.

Many of the labs are interactive simulations of the type “continuous simulation” or “system dynamics simulation.” In this type of simulation, the system evolves continuously as simulation time proceeds. The user can change input parameter values during evolution of the system, thus changing the simulation results.

Some labs are not dynamic but provide one set of outputs with each experiment. Labs 13-15 and 16-18 are like this.

A lab is composed of one or more JavaScript objects representing process units. Each process unit object contains data describing its current and past state, and methods which provide for changes in the unit’s state as simulation time proceeds. A process unit may exchange data with other process units.

In Dynamic labs, simulation time proceeds in incremental steps. At each step, all process units update their inputs from other units, then update their own state based on their current state and the state of the other units from which they get inputs. The methods by which units update their state involve algebraic and ordinary differential equations, and also may involve partial differential equations. This method of stepping in time is the Euler method of approximate solution of ordinary differential equations. Web Lab’s approximate solutions should not be used to design actual systems.

Design Philosophy

We are developing the Labs using plain JavaScript, with few or no libraries.

We construct labs using one or more “process units” which are independent objects but which can send and receive data from each other. This independence allows new labs to be constructed by using existing process units from old labs and adding new units. This is an example of modular simulation.

We have tried to make the code easy to read and understand. Because of this reason, relatively many lines are used to specify lab units and plot info.

For example, in process_plot_info.js there are many lines like this to specify a plot:

plotInfo[pnum]['xAxisShow'] = 1; // 0 false, 1 true
plotInfo[pnum]['xAxisMin'] = 0;
plotInfo[pnum]['xAxisMax'] = 1000;
...
etc.

And in a process unit’s initialize method, variables are specified like this:

initialize : function() {
//
let v = 0;
this.dataHeaders[v] = 'k_300';
this.dataInputs[v] = 'input_field_RateConstant';
this.dataUnits[v] = '(units depend on order)';
this.dataMin[v] = 0;
this.dataMax[v] = 1000;
this.dataDefault[v] = 1.0e-7;
//
v = 1;
...
etc.

The specifications could be shortened by loading values as indexed elements into a single array. That, however, would make the code more difficult to read and write.

While our strategy does result in more lines of code, they don’t all have to be typed separately, with use of copy, paste and edit.

Please send us a message letting us know what you think at support@reactorlab.net

Design your own reactor network in Web Labs

The desktop version of Reactor Lab had a lab that allowed you to design a reactor network with units that you selected and placed on a flowsheet. See our Annual report 2005 at the Desktop Lab tab above. That desktop version was built with the development tool LiveCode. If you have a LiveCode subscription, you can run a copy of the desktop Lab you download from our github site.

We are focusing on our Web Labs, now that we no longer support the desktop version. Today we posted our web version of the networks lab at the Web Labs tab, Reactors, Reactor Networks lab.

This web version was built with simple Javascript with no added libraries. It works by inserting and removing html code linked to Javascript objects as units are added and deleted from the flowsheet. This lab is less complex than apps which also build flowsheets, such as Aspen Plus and COCO, but this lab is easy to use to gain basic understanding of reactors and system dynamics.

Below are three screenshots: one from the new Web Lab (top) and two from the desktop Lab. In the bottom screenshot, you can see a reactor network that utilizes both local desktop units and remote units, where the local and remote units exchange messages over the Internet during a dynamic simulation.

Please send us a message letting us know what you think at support@reactorlab.net

Reactor Networks in Reactor Lab's Web Labs
Reactor Networks in Reactor Lab’s Web Labs (2025)
Reactor Networks in the Desktop Reactor Lab, circa 2005
Reactor Networks in the Desktop Reactor Lab (2005)
Reactor Networks in desktop Reactor Lab
Reactor Networks in desktop Reactor Lab exchanging messages with remote unit on Internet during dynamic simulation (2009)

What is the permaweb?

The permaweb is composed of web pages and services running on the arweave blockchain.

Since arweave is a blockchain, web sites posted to arweave are permanently stored on the peer network. This service is provided by arweave for a one-time fee, which is computed to provide distributed storage hundreds of years into the future.

If ReactorLab.net’s current host goes out of business, or our lifetime hosting plan ends (!), the permaweb version will live on.

We thank onlyArweave.com for introducing us to arweave and the permaweb. We use the Simply Static WordPress plugin to export a static version of the site, then upload the site to ardrive.io, which puts it on the arweave permaweb. The one-time payment in AR tokens is made using the Wander browser extension. Dynamic sites which store and retrieve data on the permaweb can also be hosted on the permaweb. “Static” is in the sense of the look of the site not changing; Javascript and dynamic Web Labs still work well.

What is a blockchain? See our Web Labs on Blockchain, Crypto.

Please send us a message letting us know what you think at support@reactorlab.net

What happened to the desktop Lab?

As of July, 2022, I am no longer providing downloads of the desktop versions of our software.

After retiring from the university eight years ago, I stopped maintaining the desktop (standalone, executable) versions for several reasons.

The main reason is that web technology has developed to the point that interactive web apps can be written once, then distributed and run on all varieties of mobile devices and computers. One important development has been the dramatically increased speed of Javascript in web browsers, which enables fast computation and graphics animation.

Another reason is that I have chosen not to spend the cost in time and money required to update and build desktop executables for multiple operating systems, as the versions of our development tool, LiveCode, and operating systems change.

The source code of our desktop software is posted at our GitHub site.

Please see our Web Labs, for which the source code is also posted at our GitHub site.

Please send us a message letting us know what you think at support@reactorlab.net

Links to external sites open in new browser tabs.

Getting started with Javascript

The interaction in our Web Labs is programmed with Javascript. Javascript is not as easy to code as is LiveCode, the language of our desktop app. But Javascript has other advantages: free to use, web browsers have Javascript interpreters built-in which execute Javascript very fast, and you can leverage the Javascript you learn to do many things with web pages.

Quick: How to write Javascript and display in web browser

1) Use a text editor like Apple’s TextEdit to create an .html file, e.g., mytest.html

2) In that file, write starting and ending html “script” tags, <script></script>, then enter your Javascript code between those tags. The script tags separate your Javascript code from the html in the file. Save the file.

3) Open that file using your web browser and see the output of Javascript document.write statements which you have typed between the script tags, e.g., document.write('hello');

4) After each change in your .html file, save the file and reload (refresh) the browser page to see the changes.

5) To view the output of the console.log statements, open the browser’s Javascript console. In Safari, select Develop > Show Javascript Console ( command-option-C ). New output appears at the bottom of the console window in Safari.

6) Example of a minimal .html text file to run Javascript in your web browser. All you need in the .html file is a script tag with your Javascript:

<script>
  // two slashes start a comment to help you remember what you are doing, does not execute
  document.write('hello'); // display output on web page
  // values between ' ' or " " are "strings" of text characters
  let aa = 3; // save value 3 in memory location you declare and label aa (aa is a "variable")
  console.log('minimal JS example, aa = ' + aa); // display in browser's Javascript console
  // now that a value is stored in new variable aa, we can use the value by using aa
  let bb = 2*aa; // multiply 2 times the value in aa and store value in new variable bb
  document.write('<br> bb = ' + bb); // note html line break tag <br> to start new line
</script>

7) console.log and document.write are standard, built-in “functions.” A function is a block of code to which you can supply input information within the parentheses (e.g., ‘hello’) and returns some output. You can write your own functions so that you don’t have to repeat the same code in different places.

8) You can view the html code of any web page in your browser. In Safari, select Develop > Show Page Source ( command-option-U ).

Here is a link to my examples of interactive controls https://richardherz.github.io/example-controls/index.html

The easiest way to view the code for one of these examples is to go to that example’s code at https://github.com/RichardHerz/example-controls

There are many sites that teach Javascript. Javascript.info looks good. W3schools is a great Javascript reference and place to learn other web technologies such as HTML, CSS, and graphics.

Evolution of Reactor Lab

Reactor Lab celebrated its 27th anniversary in March 2020. Starting in 2003, the desktop version was integrated with the Internet, with advanced features for that time.

These advanced features included automatic download and installation of updated files for off-line work, a conference (chat) room for discussions within Reactor Lab, and the ability to run process simulations involving local units and units at other locations in the same system. At that time, one could not assume constant connection to the Internet, as we do now. Once, from San Diego, I had a three-way discussion with a person in Michigan and a person in Turkey in the conference room.

I retired from the University of California at San Diego – UCSD – in 2014. Since then, my interest has shifted from the desktop version, which was constructed with LiveCode, to the HTML5-based Web Labs at this site.

This shift has been for a number of reasons, including omnipresent Internet connection in much of the world, almost everyone has access to the web and a web browser without having to download an application file, and the fast speed of Javascript built into web browsers.

That said, desktop apps have advantages over web pages such as saving data files to disk. In Web Labs, one has to go through an extra step to copy text from a popup window and save to a disk file. There are so many features that were built into the desktop Reactor Lab that duplicating them all in HTML5 might not happen.

I used to post standalone application files for Windows and Macintosh. With the evolution of operating systems and the evolution of LiveCode, I no longer wish to make the revisions necessary to build standalones.

However, one can continue to use the desktop Reactor Lab on Windows, Mac, and Linux. This can be done by opening Reactor Lab in LiveCode, version 8.0 or higher. LiveCode can be obtained at LiveCode.com. Download the free, open-source version of Reactor Lab from my github site at github.com/RichardHerz.

Instructions for how to do this are posted at the Download tab.