Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dynamic fitb #1931

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open

Conversation

dbrianwalton
Copy link
Contributor

Here is a pull request that will implement dynamic fill-in-the-blank (FITB) problems using a library for dynamic generation of mathematical expressions and the RunestoneComponents/fitb/ with added functionality that supports it. Functionality is dependent on a pending release by Runestone of an updated components library.

I tried to keep elements of different functionality in separate commits.

First commit: Editing text utilities that were going to be needed

  • Edit xsl/pretext-text-utilities: Add some additional templates for quoting text, quoting escaped text, and quoting text after stripping extra white space.

Second commit: Implementation of the HTML version

  • Add xsl/pretext-runestone-fitb.xsl: creates the RS json structure as well as the parsing of the setup and evaluation blocks
  • Edit xsl/pretext-runestone.xsl: define a new type of exercise
  • Edit xsl/pretext-text-utilities: Forgot one of the quote-text utilities in earlier commit
  • Edit xsl/pretext-assembly.xsl: Add #fillin as one of the Runestone interactive types.
  • Edit xsl/pretext-common.xsl: Necessary to add #eval as a possible special tag inside math mode for when dynamic content appears
  • Edit xsl/pretext-html.xsl: Add import of FITB xsl. Note that there is a new variable defined to distinguish whether the mode requires use of the static seeds (used in creating standalone HTML pages to extract information for static version). Also made minor modification for treatment of #fillin to account for new usage.

Third commit: Additional modifications necessary to support the generation of static versions

  • Edit pretext/pretext: Add option for "-c dynamic" to create a generated file of text substitutions for an instance of dynamic exercises. Defines the dest-dir for substitutions (dynamic_subs --- maybe just dynamic?)
  • Edit pretext/pretext.py: Define new function dynamic_substitutions that generates standalone HTML files in tmp-dir, uses a local http.server and playwright to render a static version, and extract the substitutions to store in generated file.
  • Add xsl/extract-dynamic.xsl: extraction file for creating the standalone HTML, sets the variable indicating usage of static seeds to true.
  • Edit xsl/pretext-assembly.xsl: inserts a layer between assembly and exercise to apply the substitutions and strip out all of the dynamic xml for static mode and just copy for dynamic mode
  • Edit xsl/pretext-common.xsl: needed to add exercises as a type that can require a standalone file name. I added this with other interactives, although maybe it seems to be a different type of object.
  • Add xsl/pretext-dynamic.xsl: wrapper to implement the standalone page--not currently used but could be wanted if exercises should have stand-alone version. (Should this be deleted for now?)
  • Edit xsl/pretext-html.xsl: the standalone files weren't functional without adding primary navigation (maybe there was some javascript dependency this enabled?) It appears that standalone pages don't get the same HTML header as a standard page in the document.
  • Edit xsl/pretext-runestone-fitb.xsl: Had an error that didn't appear until trying to extract substitutions for solutions (don't currently appear in Runestone exercises)
  • Edit xsl/publisher-variables.xsl: Define the location for the dynamic substitutions (needs to match what is used in the python scripts)

Fourth commit: Addition of examples in sample article

  • Edit examples/sample-article/sample-article.xml: Added a new section to make it easier to debug. Could probably just be part of the earlier section of other Runestone interactive exercises.

** New/Reuse of Tags ** (hopefully I remembered to list them all)

  • exercise/setup: This has an existing usage in Runestone fillin. This was modified to introduce additional tags parsed by the fitb xsl to generate dynamic content
  • exercise/evaluation: New tag to contain xml structure defining evaluation and feedback when checking answers. This XML also is parsed separately by fitb xsl
  • eval[@expr]: This is the tag for dynamic substitution. Similar to how var is used by WeBWorK, except this is only used for evaluating the dynamic environment and is not used for an input field.
  • fillin: This is the tag adopted for identifying where to put an input field.

The structure of the xml defining the dynamic mathematical objects and the feedback is meant to be sandboxed away from the rest of the PreTeXt markup.

Note: The HTML support for also including JSXGraph natively (no i-frames to be connected to the dynamic content) in these exercises is ready but requires figuring out how this should integrate with the workflow for rendering static images.

@dbrianwalton
Copy link
Contributor Author

Commit 08440a2: There was an evaluation error where a method was called at a state where that method was not valid. This was fixed. Also, the first example in the sample-article (find an interpolating cubic polynomial) could have random instances that were impossible to solve (root at x=0 and simultaneously asking for f(0)≠0). This required updating random routines to allow for dynamically determined end-points, which involved some new markup inside de-objects.
(Updated javascript was updated to npm package btm-expressions@0.1.3 — relevant for Runestone side)

@rbeezer
Copy link
Collaborator

rbeezer commented Feb 17, 2023

In part for my own benefit. To work with "test" JS from Runestone with this PR:

  1. Grab https://runestone.academy/cdn/runestone/test/webpack_static_imports.xml
  2. Place into your distribution at xsl/support
  3. Use string parameter: debug.rs.services.file support/webpack_static_imports.xml

@rbeezer
Copy link
Collaborator

rbeezer commented Feb 19, 2023

OK, need some help. Was saving this for Friday Drop-In.

  • Have Runestone test JS being incorporated.
  • Can process sample article with pretext/pretext and dynamic component.
  • Can build HTML (non-Academy) output. The two problems are not functional.

Seem the substitution file is sort of hollow, below. I see some of this stuff in the HTML output. I think the "regular" FITB in the sample book are broken (iirc), which I take as a sign that the new JS is in play?

Any thoughts? Walking through this at a Drop-In with screensharing would be fine - no rush on my end.

examples/sample-article/gen/dynamic_subs/dynamic_substitutions.xml

<xml><dynamic-substitution id="dynamic-fitb-simple-formula"><eval-subst expr="x1">[%= toTeX(x1) %]</eval-subst>
<eval-subst expr="x2">[%= toTeX(x2) %]</eval-subst>
<eval-subst expr="x3">[%= toTeX(x3) %]</eval-subst>
<eval-subst expr="y0">[%= toTeX(y0) %]</eval-subst>
<eval-subst expr="base_cubic">[%= toTeX(base_cubic) %]</eval-subst>
<eval-subst expr="base_yint">[%= toTeX(base_yint) %]</eval-subst>
<eval-subst expr="y0">[%= toTeX(y0) %]</eval-subst>
<eval-subst expr="base_cubic">[%= toTeX(base_cubic) %]</eval-subst>
<eval-subst expr="y0">[%= toTeX(y0) %]</eval-subst>
<eval-subst expr="A">[%= toTeX(A) %]</eval-subst>
<eval-subst expr="cubic">[%= toTeX(cubic) %]</eval-subst>
</dynamic-substitution><dynamic-substitution id="function-decomposition"><eval-subst expr="composition">[%= toTeX(composition) %]</eval-subst>
<eval-subst expr="innerFormula">[%= toTeX(innerFormula) %]</eval-subst>
<eval-subst expr="innerFormula">[%= toTeX(innerFormula) %]</eval-subst>
<eval-subst expr="innerFormula">[%= toTeX(innerFormula) %]</eval-subst>
<eval-subst expr="outerFormula">[%= toTeX(outerFormula) %]</eval-subst>
</dynamic-substitution></xml>

@bnmnetp
Copy link
Contributor

bnmnetp commented Feb 20, 2023

I might expect the statement to be missing, but I would have thought the old fitb would continue working... @bjones1 ?? Did more of the json change than just adding in the html to the json?

@rbeezer here is the html that the runestone build generates for fill ins currently, and they are working on my overview build....

<div class="runestone">

   <div data-component="fillintheblank" data-question_label="2.2.1" id="fill1512"  style="visibility: hidden;">
   <script type="application/json">
   {"problemHtml": "<p>How many bowling pins are used when bowling?\nYou can put spaces before or after the number without affecting\nthe correctness of the answer.\nYou can provide the answer in decimal (10), hexadecimal (0xA),\nbinary (0b1010), or using scientific notation (1e1).</p>\n<input type=\"text\" name='' />", 
"dyn_vars": null, 
"blankNames": {}, 
"feedbackArray": [
  [{"number": [10, 10], 
     "feedback": "<p>Correct.</p>\n"}, 
   {"number": [16, 16], 
    "feedback": "<p>Incorrect. (Note that solutions can be provided in any base\nas well).</p>\n"}, 
   {"regex": "^\\s*.*\\s*$", 
    "regexFlags": "", 
     "feedback": "<p>Incorrect. Note that the last option given, regardless of\nits content, matches any response not already matched by\nthe previous feedback options. For example, <code class=\"docutils literal notranslate\"><span class=\"pre\">:x:</span></code> would\nwork in the same way.</p>\n"}
  ]]}
   </script>
   </div>
   </div>
    

@dbrianwalton
Copy link
Contributor Author

dbrianwalton commented Feb 20, 2023 via email

@bnmnetp
Copy link
Contributor

bnmnetp commented Feb 20, 2023

Which package do I need to update?

@dbrianwalton
Copy link
Contributor Author

I don't know why replying by email obscured the name of the package. btm-expressions version 0.1.3 had the error, and 0.1.4 should have fixed it.

@bjones1
Copy link
Contributor

bjones1 commented Feb 20, 2023

I might expect the statement to be missing, but I would have thought the old fitb would continue working... @bjones1 ?? Did more of the json change than just adding in the html to the json?

No, but the "new" fitb setup requires the HTML for the problem (even for non-dynamic problems) to be placed in the problemHtml entry of the JSON data. The old FITB setup put this data directly into the HTML of the problem. So, we do need a tweak on the PreTeXt side to account for this -- @dbrianwalton?

@rbeezer
Copy link
Collaborator

rbeezer commented Feb 21, 2023

Another attempt at this, prior to to today's Drop-In. Substitutions file is now smaller for me and Playwright is not finding the Not sure what needs to change in response to discussion:

  • test JS from RS CDN. webpack XML seems unchanged from before.
  • I don't think they are any new commits here, I have 08440a2 as the tip.
  • "problemHtml" key. Should I be making a change to switch to this?

This can wait for Drop-In...

@bjones1
Copy link
Contributor

bjones1 commented Feb 21, 2023

Thanks for taking a look. Yes re: problemHtml key, but I haven't looked at that source to determine where to change it. I'm guessing @dbrianwalton would know this code fairly well. I should be there for (part of) the drop-in.

@dbrianwalton
Copy link
Contributor Author

The test archive on RS CDN is not yet updated to pull in the updates on the btm-expressions javascript code. It is seeing v0.1.3. With an update today to remove a toString method on BTM class, this now should see v0.1.5.

The "problemHtml" key also needs to be worked through to ensure that old-style FITB problems work. That's really part of what is needed to resolve the complementary RunestoneComponents pull request.

@rbeezer
Copy link
Collaborator

rbeezer commented Feb 21, 2023

Thanks for the updates! Keep me posted here?

@rbeezer
Copy link
Collaborator

rbeezer commented Feb 24, 2023

I have "new" JS from Runestone, and working with latest branch here. Using pretext/pretext to get the dynamic component.

See log below.

I see div.dynamic-fitb-simple-formula in an INFO message and it seems to exist on the page.

However playwright seems to say it cannot find div.dynamic-fitb-simple-formula-substitutions. I see this on the page, but it seems to be buried inside the JSON blob? Is there a mismatch?

Off to try a brute-force hack...

Rob

PTX:DEBUG   : Using http.server subprocess 1006023
PTX:INFO    : Storing dynamic substitutions in file /home/rob/mathbook/mathbook/examples/sample-article/gen/dynamic_subs/dynamic_substitutions.xml
PTX:INFO    : extracting substitutions for exercise with identifier "dynamic-fitb-simple-formula" on page http://localhost:8888/dynamic-fitb-simple-formula.html
PTX:INFO    : Closing http.server subprocess
PTX:DEBUG   : Log data from http.server:
PTX:DEBUG   : 127.0.0.1 - - [24/Feb/2023 09:44:14] "GET /dynamic-fitb-simple-formula.html HTTP/1.1" 200 -
PTX:DEBUG   : 127.0.0.1 - - [24/Feb/2023 09:44:15] "GET /external/misc/book-cover-google-art-project.jpg HTTP/1.1" 200 -
PTX:DEBUG   : 
Traceback (most recent call last):
  File "/home/rob/mathbook/mathbook/pretext/pretext", line 817, in <module>
    main()
  File "/home/rob/mathbook/mathbook/pretext/pretext", line 694, in main
    ptx.dynamic_substitutions(
  File "/home/rob/mathbook/mathbook/pretext/pretext.py", line 1124, in dynamic_substitutions
    asyncio.get_event_loop().run_until_complete(extract_substitutions(dynamic_exercises, baseurl, dyn_subs_file))
  File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
    return future.result()
  File "/home/rob/mathbook/mathbook/pretext/pretext.py", line 1036, in extract_substitutions
    exercise_substitutions = await elt.inner_html()
  File "/home/rob/mathbook/python-virtual/rab/lib/python3.10/site-packages/playwright/async_api/_generated.py", line 16047, in inner_html
    return mapping.from_maybe_impl(await self._impl_obj.inner_html(timeout=timeout))
  File "/home/rob/mathbook/python-virtual/rab/lib/python3.10/site-packages/playwright/_impl/_locator.py", line 386, in inner_html
    return await self._frame.inner_html(
  File "/home/rob/mathbook/python-virtual/rab/lib/python3.10/site-packages/playwright/_impl/_frame.py", line 615, in inner_html
    return await self._channel.send("innerHTML", locals_to_params(locals()))
  File "/home/rob/mathbook/python-virtual/rab/lib/python3.10/site-packages/playwright/_impl/_connection.py", line 44, in send
    return await self._connection.wrap_api_call(
  File "/home/rob/mathbook/python-virtual/rab/lib/python3.10/site-packages/playwright/_impl/_connection.py", line 419, in wrap_api_call
    return await cb()
  File "/home/rob/mathbook/python-virtual/rab/lib/python3.10/site-packages/playwright/_impl/_connection.py", line 79, in inner_send
    result = next(iter(done)).result()
playwright._impl._api_types.TimeoutError: Timeout 30000ms exceeded.
=========================== logs ===========================
waiting for locator("xpath=//div[@id='dynamic-fitb-simple-formula-substitutions']")
============================================================

@rbeezer
Copy link
Collaborator

rbeezer commented Feb 24, 2023

Off to try a brute-force hack

Maybe not so fast, I see how that -substitutions div might get rendered onto the page for playwright to find.

@rbeezer
Copy link
Collaborator

rbeezer commented Feb 24, 2023

And a rendering of dynamic-fitb-simple-formula.html from the temporary directory fails to show an exercises. Inspector says:

GEThttps://runestone.academy/cdn/runestone/test/runtime.8f782b49f25513.bundle.js
[HTTP/1.1 404 Not Found 398ms]

@rbeezer
Copy link
Collaborator

rbeezer commented Feb 24, 2023

Over the hump. Runestone CDN had it wrong. Substitutions finish normally. Onward.

@rbeezer
Copy link
Collaborator

rbeezer commented Feb 24, 2023

Alright! I'm getting dynamic problems and a nice PDF version. Very good. So I am finally in a position to test thoroughtly and review (but maybe not this morning). Thanks.

@bjones1
Copy link
Contributor

bjones1 commented Feb 24, 2023

Wow, fantastic! Very exciting! Let me know if I can help on the JavaScript side.

@rbeezer
Copy link
Collaborator

rbeezer commented Apr 3, 2023

I've been tninking you might be making some changes? (A force-push is fine.)

Or is the ball in my court?

@dbrianwalton
Copy link
Contributor Author

It has been in my court, but schedule was particularly busy.

I believe I have the HTML version working now with the static and dynamic styles. I have included rewrites of the static fitb examples from sample-book and have them working in a modified sample-article for testing purposes. I think you (@rbeezer) were saying that you would be able to write the preprocessor that could go from the old markup to this new style?

A push of this update will be posted shortly. I have not yet gone back through to see about the static output, but wanted to get this uploaded for you to look at.

@bnmnetp
Copy link
Contributor

bnmnetp commented Apr 11, 2023

@dbrianwalton I cannot recreate the problem on the page you linked to. It was shortly after your post that I made the most recent fixes. I see the current implementation of the fillins does not use the prescribed pattern, so I don't imagine your new code does either.

@dbrianwalton
Copy link
Contributor Author

The issue I raised (#1967) was not actually about this pull request, but was discovered while I was working on this pull request, and so I don't think has anything to do with the fillin code.

@dbrianwalton
Copy link
Contributor Author

I discovered that the Runestone Services file that is available right now for testing this branch (https://runestone.academy/cdn/runestone/test/webpack_static_imports.xml) has a typo inside.

It says to use runtime.8fe782b49f25513.bundle.js but the directory listing indicates this should have been runtime.8fe5782b49f25513.bundle.js. Note the first four/five characters of the hash: 8fe7 vs 8fe57.

Referencing @rbeezer's note above, if the file is downloaded as currently stands, then the line can be edited to add the missing 5 and get the components to successfully load.

@bnmnetp
Copy link
Contributor

bnmnetp commented Jun 8, 2023

Hey @dbrianwalton I have a group of authors that are very eager for this PR to be merged. What can I do to help make that happen?

@dbrianwalton
Copy link
Contributor Author

I had thought this was left at a point where it was waiting for @rbeezer to do some review, and then he had a series of other responsibilities that he wasn't able to look through things until later. One of the issues was that there was a typo regarding which runtime.bundle.js was being used (see my comment before this). I don't know if that was addressed. Otherwise I have been thinking that it was on Rob's side of things. I've been sidetracked on various department responsibilities and otherwise should have followed up.

@bnmnetp
Copy link
Contributor

bnmnetp commented Jun 9, 2023

Thanks @dbrianwalton

The "typo" may have been a typo at one point because you may have gotten a hand edited version.... but the webpack_static_imports.xml file gets updated automatically with every release of the runestone components. That is working just fine for all our builds.

I'll talk with @rbeezer about this some more during drop in today.

Thanks for the update.

@dbrianwalton
Copy link
Contributor Author

This is what I meant:

I followed @rbeezer's comment from Feb 17:

  1. Grab https://runestone.academy/cdn/runestone/test/webpack_static_imports.xml
  2. Place into your distribution at xsl/support
  3. Use string parameter: debug.rs.services.file support/webpack_static_imports.xml

I then process my XML using pretext with the appropriate string parameter to create HMTL files. When I open the HTML in my browser, the fillin problems don't work. Actually all of the Runestone components fail to work.

The browser develop tools reports an error: "Failed to load resource: the server responded with a status of 404 (Not Found)" and the resource it was trying is "https://runestone.academy/cdn/runestone/test/runtime.8fe782b49f25513.bundle.js"
That file name comes from the webpack_static_imports.xml.

When I went digging in the actual folder I saw that the name of the file is missing a single character in the hash. Instead of starting "8fe78" it is supposed to start "8fe573". Adding the character in name stored in my downloaded copy of webpack_static_imports.xml gets things working again.

I don't know where to post this as an error for the server.

@dbrianwalton
Copy link
Contributor Author

@rbeezer I tried to put together a possible xsl conversion that would take the style of FITB using "var" to the new version using "fillin" and with the revised evaluation block in place of what used to be setup. That is found in xsl/pretext-assembly.xsl. I tried to make it so that other uses of var don't get touched. This is what commit ec8fefb attempts.

For reference, there are (temporarily) the old problems that were in sample-book/rune.xml copied into sample-article/sample-article.xml next to my new problems but directly coded in the new style. It is not my intention of leaving those in the sample article, but you had suggested having examples of the old problems as they would be coded now.

@bnmnetp
Copy link
Contributor

bnmnetp commented Jun 9, 2023

OK, @dbrianwalton that was so long ago, I'm surprised that test hasn't been overwritten many times, but the typo is just a typo on my part in trying to get things set up for you. I've modified the webpack_static_imports.xml to fix that typo. It is not a server problem. Just a problem with trying to hack something for you to test with that I long since forgot about.

Sorry for the confusion.

Brad

@bjones1
Copy link
Contributor

bjones1 commented Oct 24, 2023

Per @rbeezer's email, is still dead or alive? Doenet seems like a great alternative to this; unless @dbrianwalton wants to keep going on this, I'd suggest closing this PR.

@dbrianwalton
Copy link
Contributor Author

dbrianwalton commented Oct 24, 2023 via email

@dbrianwalton
Copy link
Contributor Author

I have been working through the dynamic fitb exercises to rebase on master. I'm a little scared to just force my rebased code to the original branch and so created a new branch dynamic-fitb-rebased on my repo.

Key changes from the rebase:

  • Changed from visible-id to @Label when generating static versions b/c visible-id not yet generated at the assembly stage required.
  • Stand-alone files used to extract expressions from dynamic code to use in static code required copying the _static/css+js files to tmpDir.
  • Some original content had moved from xsl/pretext-common.xsl to xsl/pretext-text-utilities.xsl that created conflicts, so needed to update relevant content.

In my own verification of the code, my computer is stuck on FontAwesome missing when generating PDF, but the LaTeX file looks good. I think the PreTeXt side is working.

@dbrianwalton
Copy link
Contributor Author

I did notice that I am creating a TypeValue error on the Runestone logging side because my object that stores the mathematical expressions has an environment variable for the math environment is referenced within objects in its own catalog of known expressions. This creates a circular reference that JSON doesn't like when the object is being stored in the log. I will want to see how to avoid this issue so that the Javascript console is clear of any errors — the object does not need to be stored, but the code just pushes everything in anyway.

@dbrianwalton
Copy link
Contributor Author

@bjones1 I'm hoping to get this PR finished. It is going to require updating/recreating the necessary PR on the RunestoneComponents side based on the current state of that project.
Are you able to spearhead that task? (I'm verifying some changes to the btm-expressions library that will eventually need to be linked in on that side.)

@bjones1
Copy link
Contributor

bjones1 commented Mar 26, 2024

Unfortunately, no. The work I did on the Runestone side was done before the big code reorg, and would probably require re-implementing this entirely, plus need a lot of buy-in from @bnmnetp. My time is pretty committed on other projects, sadly.

@bnmnetp
Copy link
Contributor

bnmnetp commented Mar 26, 2024

@bjones1 The structure of the code for the components is essentially unchanged. It lives in a new place in the monorepo but everything below the runestone folder is identical.

The PR would somehow need to be moved to the new repo.

I don't really remember how "fully baked" the runestone side of the PR was.

@bjones1
Copy link
Contributor

bjones1 commented Mar 26, 2024

Brad, thanks. That might make the task a lot easier. I'll look to see the difficulty involved to retarget the PR.

@dbrianwalton
Copy link
Contributor Author

@bjones1 I have just made a PR to the Runestone rs repository that I believe implements all of the items that you had in the original repo. Hopefully that helps.

@rbeezer Would you like me to create a new PR based on the updated current status of Pretext and close this one out?

@rbeezer
Copy link
Collaborator

rbeezer commented Apr 2, 2024

create a new PR based on the updated current status of Pretext

It'd be nice to keep all the discussion here. Can you force-push a new version of the branch, emanating from someplace close to the current head?

@dbrianwalton
Copy link
Contributor Author

I have made the force-push. The underlying Runestone javascript that this is based on is no-longer supported by the test repository that was made two years ago. It can be created using RunestoneInteractive/rs#476 and following the _static instructions https://runestone-monorepo.readthedocs.io/en/latest/javascript_feature.html.

I'm not sure how best to proceed at this point. What can I do next?

@rbeezer
Copy link
Collaborator

rbeezer commented Apr 20, 2024

Dear Brian,

Took this for a spin today. Without looking too hard, everything procedural looks fine. In other words, I can rebase onto master, build the sample BOOK for non-RS-hosted HTML and all seems well. I've not gone as far as to enable the new JS.

  • @bnmnetp was concerned that instructor-authored FITB, which live only in his database, were going to break. I built the sample book to see if the HTML for those examples (Section 5.15) were changing. It appears they do not. Is that accurate? In other words "old" HTML for RS FITB will still function?
  • The only changes I do see in HTML output are extra stuff at the top of the cross-reference knowls and standalone pages for YouTube videos, such as navbar items. But they don't render. I can't really figure out what change is causing that, despite searching the commits on obvious strings. Not too critical, but still curious.
  • Eventually we'll want some examples (same ones would be OK) in the sample book, since that is where all the Runestone components testing happens.

Brad and I have talked about this some. Getting PreTeXt, Runestone, and this PR all tested and coordinated at one time might be trouble asynchronously. What do you think about using physical proximmity to our advantage when in Tacoma? That's valuable time, but this is worth it. And Brad and I could do some further testing/review you might suggest that would get us best-prepared for that.

Rob

@dbrianwalton
Copy link
Contributor Author

@rbeezer I have finished my semester and have been going through the Runestone code more carefully. Before I was just doing text comparison between @bjones1 work and the current Runestone single repo. I have been looking at how the code is being implemented so that I will be better prepared to talk about that side of things.
I definitely could use time at the workshop to go through this. Here are some preliminary answers:

  • As far as I can discern, the updated code looks for the existence of an additional field in the problem JSON structure (dyn_vars). If that is missing, the code uses the old tests. If it is present, then the additional structure for randomization and substitution takes place.
  • One area I don't yet understand on Runestone is storage in the database. I've added a comment on the Runestone PR relating to this.
  • I have problems in the Sample Article and could add as many necessary examples in the Sample Book as are desired or convenient.

In terms of further review/testing, the main thing I don't know about is the Runestone database/storage aspect.

I will see if I can find what is up with the cross reference knowls.

@rbeezer
Copy link
Collaborator

rbeezer commented Jun 5, 2024

That all sounds real good. (A bit distracted trying to get the workshp organized.)

Good news on supporting both old and new styles, @bnmnetp will like that. Getting this merged will be a priority for me at the workshop.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants