Runestone Academyhttps://blog.runestone.academy/Interactive Textbooks for Computer Science, Data Science and moreHugoen-usSun, 28 Jun 2026 00:00:00 +0000First Time Contributors Accelerate Progresshttps://blog.runestone.academy/2026/06/28/first_time_contributors.htmlSun, 28 Jun 2026 00:00:00 +0000https://blog.runestone.academy/2026/06/28/first_time_contributors.html<p>I hope your summer is off to a good start! June has been a busy month with changes big and small. I&rsquo;m thrilled so say that we have <strong>five first time contributors</strong> to the project this month. Not to mention significant contributions from returning contributors as well. I&rsquo;ve been taking advantage of the quieter days to do a lot of behind-the-scenes work &ndash; some of it the kind of cleanup that has been on my list for a very long time. Most of it falls into three buckets: tightening up security, modernizing the plumbing that runs both runestone.academy and the self-hosted installations, and continuing to retire the old code. I could not have done it without the help of the community and my trusty sidekick Claude. Here are the highlights from the last couple of weeks:</p> <ul> <li>Security fixes across the book, assignment, and admin servers</li> <li>More progress retiring the original 2011 web framework &ndash; the old Peer Instruction pages and most of the old instructor admin pages are gone</li> <li>A switch to <a href="https://docs.astral.sh/uv/">uv</a> for all of our Python services, which makes installs and builds much faster</li> <li><a href="https://caddyserver.com/">Caddy</a> as an option for serving Runestone with automatic HTTPS</li> <li>A new user menu and a consistent set of icons across the interface</li> <li>A/B testing and a new reflection step for Peer Instruction</li> <li>A lighter-weight translation system for the interactive components</li> </ul> <h2 id="a-word-about-security">A word about security</h2> <p>We completed a focused security pass across the servers and fixed a handful of issues &ndash; among them a server-side request forgery hole in the image proxy, a peer-chat channel that did not require an authenticated user, and several instructor actions that did not check that you actually owned the course you were acting on. None of these require anything from you other than running a current release, but I wanted to be transparent that the work happened. If you self-host, updating to the latest version picks all of it up.</p> <h2 id="retiring-more-of-the-old-code">Retiring more of the old code</h2> <p>Longtime readers know I have been chipping away at retiring the code based on the web framework the project was built on back in 2011. This stretch took several more bites out of it. The old Peer Instruction controller and views are gone, fully replaced by the new versions. I also retired the bulk of the old instructor admin pages &ndash; course and student management, the old assignment builder, exam resets, and the logs &ndash; all of which now live in the new services. A few pages (grading, Manage Practice, and the editorial page) are staying on the old stack a little longer until their replacements have had more time to soak. The student progress report and a couple of small activecode endpoints moved over as well. We are getting close to the clean slate I have been hoping to reach by the end of the summer.</p> <h2 id="faster-installs-and-easier-https">Faster installs and easier HTTPS</h2> <p>A couple of the changes are mostly for those of you who run your own Runestone server or like to dig into the code. We moved the whole project from Poetry to uv for managing dependencies and building. In practice this means installs and builds are dramatically faster, and I think it makes the project a little friendlier to contribute to. We also added Caddy as an alternative to nginx for the front door. The big draw there is automatic HTTPS &ndash; Caddy can obtain and renew certificates for you with almost no configuration &ndash; which makes standing up a secure instance much easier. You can keep using nginx if you prefer; Caddy is simply there as an option now.</p> <h2 id="a-more-consistent-interface">A more consistent interface</h2> <p>On the interface side, PreTeXt books get a new user menu, and I replaced the old icons with a single consistent set throughout the site. This is part of the larger effort I have mentioned before to make the experience feel like one cohesive system rather than a collection of separate ones. The navigation bar is now shared between the book pages and the login and account pages. I would love feedback on how it looks and feels.</p> <h2 id="new-tools-for-peer-instruction">New tools for Peer Instruction</h2> <p>For those of you using Peer Instruction, there are two additions worth trying. You can now run a small A/B test comparing different discussion modes, with each student&rsquo;s group remembered across sessions, and we fixed a bug where the instructor&rsquo;s own vote was sneaking into the chart. Asynchronous Peer Instruction can also include an optional Likert-scale reflection step that you can turn on per course. If you use peer instruction in your classes, I would really like to hear whether these are useful. Much of this work is done as part of a PhD research project! Its important example of how <strong>pedagogy drives progress!</strong></p> <h2 id="lighter-more-flexible-interactives">Lighter, more flexible interactives</h2> <p>Finally, a quieter but satisfying piece of work in the interactive components: we replaced the old jQuery-based translation library with a small, dependency-free one of our own and moved ActiveCode, fill-in-the-blank, multiple choice, Parsons, and drag-and-drop over to it. Drag-and-drop questions can now also be authored in JSON and XML, which is part of a longer effort to make question authoring more uniform across component types. The Cardsort question behavior was also modified based on feedback from teachers, students and researchers at the PROTEUS (Pretext Runestone Open Textbooks for Engaging Undergraduates in STEM) workshop held in Ann Arbor the week of June 14th. Its great to have this kind of community involvement and feedback!</p> <h2 id="thanks-as-always">Thanks, as always</h2> <p>This is a community effort, and I am grateful for everyone who reports issues, sends pull requests, and is patient with a project that does not have a full-time support staff. Version 8.8.1 is out, so self-hosters can pick up everything above by updating. If you run into trouble, please open an <a href="https://github.com/RunestoneInteractive/rs/issues">issue on GitHub</a> with as much detail as you can, and if you just want to share feedback or ask a question, the <a href="https://runestone.academy/ns/books/published/PTXSB/rune.html">public forums</a> are the best place. Thanks, and happy summer!</p>Grader and Login Updateshttps://blog.runestone.academy/2026/05/25/grader_and_login_updates.htmlMon, 25 May 2026 00:00:00 +0000https://blog.runestone.academy/2026/05/25/grader_and_login_updates.html<p>Welcome to summer, at least for many of you! This week we have a couple of updates that we would love feedback on. First, we have rewritten the grader, similar to the way we rewrote the assignment builder. We still need to add support for regrading an assignment for multiple students at once. Our focus has been on manually grading and reviewing individual questions. You can get to the new grader from the assignment builder by clicking on the &ldquo;Grade&rdquo; button for an assignment. You can also use this <a href="https://runestone.academy/assignment/instructor/grader">URL directly:</a>.</p> <p>Secondly we have also started work on a new login/registration system. The new login system is backward compatible with the old system, but we are hoping to get feedback on the new look and flow. You can try it out at <a href="https://runestone.academy/admin/auth/login">logging in here</a>. Or substitute <code>register</code> for <code>login</code> in the URL to see the new registration page. A new change course page is also available at <a href="https://runestone.academy/admin/auth/my_courses">My Courses</a>. This will give us a single login and registration system instead of the current mix of old and new pages. It should also eliminate issues where you appear logged in on one page but not another.</p> <p>Thirdly we have ongoing work on the peer instruction. It is already <a href="https://runestone.academy/assignment/peer/instructor">here</a> I have an open PR that I am looking at this week that fixes some bugs and adds the async peer interface.</p> <p>Finally, we have been working on a major refactoring of the code base. The goal is to make it easier to add new features and maintain the system going forward. We are nearly at the point where we can retire the code based on the initial web framework the project was built on in 2011. Not every feature is going to make the transition. But with all of the new services being based on a modern web framework, and having factored out the database access code into its own API, we are in a much better position to add new features and maintain the system going forward. Hopefully this will also make it easier for others to contribute to the project. We are nearly at the point where we can retire the code based on the initial web framework the project was built on in 2011. Not every feature is going to make the transition. But with all of the new services being based on a modern web framework, and having factored out the database access code into its own API, we are in a much better position to add new features and maintain the system going forward. Hopefully this will also make it easier for others to contribute to the project.</p> <p>We will continue to work on these and make updates to the gradebook as well. Once all of these features are done and well tested, we will begin to make them the default, and eventually remove the old code. We will be sure to give plenty of notice before we do that, but we would love to get feedback on the new features as soon as possible. The goal is to have the old code removed by the end of the summer so we can start the school year with a clean slate.</p> <p>We are also looking at improving the overall consistency of the user interface, as the system currently contains at least three distinct page styles. For student-facing pages, we want the experience to feel cohesive rather than like a collection of separate systems. We are also reviewing the instructor-facing pages with the same goal in mind, and we would welcome feedback there as well.</p> <p>Some of the features we are considering eliminating, or replacing include:</p> <ul> <li>The practice feature, based on spaced repetition, which is not widely used (although very effective) and is not well integrated with the rest of the system. We are considering replacing it with a new feature that would use AI models to generate personalized practice questions for students based on their performance in the course. This is still in the early stages of development, but we would love to get feedback on this idea.</li> <li>The current student progress feedback page is another feature we are evaluating. Usage appears to be low, and some of the functionality added to the new grading page may ultimately replace it. Longer term, we would like to provide instructors with better insight into student learning: which concepts students are struggling with, which concepts they have mastered, and where intervention may help most. We are exploring ways to present this information more effectively than simple assignment or quiz scores, and we would love feedback on what would be most useful to you.</li> </ul>Runestone Guiding Principleshttps://blog.runestone.academy/2026/05/12/runestone_guiding_principles.htmlTue, 12 May 2026 00:00:00 +0000https://blog.runestone.academy/2026/05/12/runestone_guiding_principles.html<p>Runestone exists to improve how students learn by making learning <em>active, observable, and improvable</em>. We believe students learn best when they engage directly—writing code, solving problems, answering questions, making mistakes, and receiving immediate feedback. Passive reading is not enough. Runestone is built to support that cycle at scale.</p> <h2 id="active-learning-first">Active Learning First</h2> <p>Runestone is designed around interaction, feedback, and engagement. Every feature must support students doing—not just consuming.</p> <h2 id="students-are-the-primary-beneficiary">Students Are the Primary Beneficiary</h2> <p>Instructors adopt Runestone and institutions support it, but students are who we build for. When priorities conflict, we ask: <em>does this help students learn?</em></p> <h2 id="open-by-default">Open by Default</h2> <p>Runestone is free and open source. Anyone can run it, modify it, and extend it. Our hosted platform, Runestone Academy, exists to make adoption easy for instructors who cannot or do not want to run their own server.</p> <h2 id="student-privacy-is-non-negotiable">Student Privacy is Non-Negotiable</h2> <p>We collect only the data necessary to support learning. Personally identifiable student data is never sold, shared, or used for purposes unrelated to education.</p> <h2 id="accessibility-is-a-requirement">Accessibility is a Requirement</h2> <p>All students must be able to use Runestone. Accessibility is not an enhancement—it is a baseline requirement. If something is not accessible, it is not finished.</p> <h2 id="data-serves-learning">Data Serves Learning</h2> <p>Runestone collects fine-grained interaction data to improve learning outcomes. We are not in the business of surveillance. Every piece of data we collect must have a clear pedagogical purpose.</p> <h2 id="insight-over-data">Insight Over Data</h2> <p>Raw data is not the goal. Runestone provides instructors with actionable insights—tools that help them understand student progress and intervene effectively.</p> <h2 id="interoperability-over-lock-in">Interoperability Over Lock-In</h2> <p>Runestone integrates with other systems using open standards whenever possible. We avoid proprietary approaches that trap users or create unnecessary complexity.</p> <h2 id="pedagogy-drives-technology">Pedagogy Drives Technology</h2> <p>New capabilities should have a clear rationale in learning science. Runestone is a platform for pedagogical research, and that research tradition should inform what we build and why. New features must be justified by their impact on teaching and learning, not by technical novelty.</p> <h2 id="empower-instructors">Empower Instructors</h2> <p>Runestone amplifies the effectiveness of instructors. It does not attempt to replace them, automate them away, or reduce teaching to a dashboard.</p> <h2 id="simplicity-enables-sustainability">Simplicity Enables Sustainability</h2> <p>Every feature carries a long-term cost. We favor simple, maintainable solutions and resist unnecessary complexity—even when it is tempting.</p> <h2 id="focus-is-a-feature">Focus is a Feature</h2> <p>We deliberately choose what not to build. Protecting the core mission matters more than expanding scope.</p> <h2 id="built-for-research">Built for Research</h2> <p>Runestone supports pedagogical research through transparency, reproducibility, and ethically collected data.</p> <h2 id="community-over-institution">Community Over Institution</h2> <p>Runestone&rsquo;s long-term sustainability depends on a broad community of contributors, adopters, and advocates — not on any single maintainer, organization, or funder. We make decisions that strengthen collective ownership.</p> <hr> <p>What Runestone Is Not ====================</p> <p>Not a Learning Management System &mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;- Runestone complements LMS platforms; it does not attempt to replace them.</p> <h2 id="not-a-content-authoring-system">Not a Content Authoring System</h2> <p>Content is authored using external tools such as PreTeXt. Runestone focuses on delivery, interaction, and insight.</p> <h2 id="not-a-high-stakes-assessment-platform">Not a High-Stakes Assessment Platform</h2> <p>Runestone is built for learning, practice, and formative assessment—not secure, high-stakes exams.</p> <h2 id="not-a-data-brokerage">Not a Data Brokerage</h2> <p>Runestone does not monetize student data—period.</p>A Farewell to RSThttps://blog.runestone.academy/2026/04/22/a_farewell_to_rst.htmlWed, 22 Apr 2026 00:00:00 +0000https://blog.runestone.academy/2026/04/22/a_farewell_to_rst.html<p>The end of the semester is approaching, and with it comes the beginning of Summer development time!</p> <p>In a few days I will release Runestone 7.13.6, this marks the last release of Runestone that will support RST as an authoring language. That is probably not true, the 7.13 line will continue for key bug fixes, but it will be the last release that will include new features for RST.</p> <p>What does this mean for Runestone? Well, just over six years ago we formed a partnership with the PreTeXt project to use their XML-based authoring language as the basis for Runestone. We have been very happy with that decision, and it has allowed us to add a lot of features to Runestone where I can focus on the interactive features and not worry about the authoring language. PreTeXt is a very powerful author language, and it is being used by a growing number of projects. It has a great focus on accessibility and is designed to be easily converted to a variety of output formats. When two open source projects can work together to create a better product, that is a win for everyone.</p> <p>If you are an author and have not converted your book to PreTeXt, I encourage you to do so. The conversion process is not difficult, and there are a number of resources available to help you. The PreTeXt project has a number of people willing to help with the conversion process, and there are a number of tools availble to help with the conversion, not to mention LLM-based tools like Copilot Claude Code and ChatGPT. If you have questions about the conversion process, please reach out to me or the PreTeXt community for help.</p> <p>We will continue to develop and support the interactive elements of Runestone like activecode, parsons problems, and the various interactive widgets that we have developed over the years. Future updates to the componenents will be released in the 8.x line, although I don&rsquo;t see a reason to push them to pypi, the <code>runestone build</code> command will not build anything in the 8.x line.</p> <p>If you absolutely must have a new feature in RST, you are welcome to add it to the <code>legacy_support</code> branch of the Runestone repository, but I will only support critical bug fixes on that branch, so if you want a feature merged you will need to provide the ongoing support for it.</p> <p>I&rsquo;ll have more to say about our summer development goals in the next few weeks, but I wanted to get this news out as soon as possible so that authors have plenty of time to make the transition to PreTeXt, current users of RST will not be surprised by this transition. Nobody should be surprised as I&rsquo;ve been talking about it for years.</p>Easy Installhttps://blog.runestone.academy/2026/03/16/easy_install.htmlMon, 16 Mar 2026 00:00:00 +0000https://blog.runestone.academy/2026/03/16/easy_install.html<p>I know that running your own server is not for everyone, but we want to make it was easy as possible for Runestone to support the students who need us. But sometimes Government regulations or institutional policies make it difficult to use a third party hosting service. For those of you who want to run your own server, we have created an easy install script that will set up a Runestone server on your machine. This script will install all the necessary dependencies and configure the server for you.</p> <p>To use the easy install script, copy and paste the following command into your terminal:</p> <div class="highlight"><pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>bash &lt;(curl -fsSL https://raw.githubusercontent.com/RunestoneInteractive/rs/main/init_runestone.sh) </span></span></code></pre></div><p>This will download and run the easy install script. The script will ask you a few questions about your setup, It will then install all the necessary dependencies and configure the server for you. You will need to have Docker installed on your machine for this to work. If you do not have Docker installed, there are some great tutorials online that can help you get started such as <a href="https://docker-curriculum.com/">Docker for Beginners</a>.</p> <h2 id="why-run-your-own-server">Why Run your own Server?</h2> <p>There are a few reasons why you might want to run your own server:</p> <ul> <li>You may have legal or institutional requirements that we as a small non-profit, open-source organization cannot meet. We are committed to the <strong>National Data Privacy Agreement</strong> But we understand that some institutions may have additional requirements that we cannot meet. If this is the case, running your own server may be the best option for you.</li> <li>You want to have more control over your data and how it is stored.</li> <li>You want to be able to customize the server to fit your specific needs.</li> <li>You want to be able to run the server on your own hardware.</li> <li>You want to be able to run the server in an environment that does not allow third party hosting services.</li> </ul> <p>All of these are valid reasons, and we understand that running your own server is not for everyone. We are here to support you regardless of how you choose to use our software. If you have any questions about running your own server, please feel free to reach out to us on our <a href="https://discord.gg/f3Qmbk9P3U">public forums</a> or <a href="https://github.com/RunestoneInteractive/rs/issues">GitHub</a>. We are happy to help you get set up and answer any questions you may have. We also welcome contributions to the easy install script, if you have any improvements or suggestions please let us know!</p> <p>I would also like to acknowledge Tyler Conzet for his work on the easy install script. Tyler was a former student of mine and has been a great contributor to the Runestone project. He has done a lot of work on the easy install script and has made it much easier for people to run their own servers. Thank you Tyler!</p> <h2 id="keeping-up-to-date">Keeping up to date</h2> <p>If you choose to run your own server, it is important to keep it up to date. We are constantly making improvements and adding new features to the software, and it is important to keep your server up to date in order to take advantage of these improvements. We recommend that you check for updates regularly and apply them as soon as possible. You can check for updates by running the following command in your terminal:</p> <div class="highlight"><pre tabindex="0" style="color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#24909d">cd</span> /wherever/you/installed/runestone </span></span><span style="display:flex;"><span>docker compose pull </span></span><span style="display:flex;"><span>docker compose stop &amp;&amp; docker compose up -d </span></span></code></pre></div><p>Occasionally it may be necessary to run a database migration when we make changes to the database schema. If this is the case, we will provide instructions on how to run the migration. We will also provide instructions on how to roll back the migration if something goes wrong. We recommend that you back up your database before applying any updates, just in case something goes wrong. Most updates should be seamless, but occasionally we add more data to the database in the form of new columns or new tables. These migrations will not result in the loss of any data, but it is always a good idea to have a backup just in case something goes wrong.</p> <h2 id="feedback">Feedback</h2> <p>As this is a new feature, we would love to hear your feedback on the easy install script. If you have any suggestions for improvements or if you encounter any issues, please let us know on our <a href="https://discord.gg/f3Qmbk9P3U">public forums</a> or <a href="https://github.com/RunestoneInteractive/rs/issues">GitHub</a>. Your feedback is invaluable to us and helps us improve the software for everyone. We are committed to making the easy install script as user-friendly and reliable as possible, and we appreciate any feedback you can provide.</p> <p>Join our Community &mdash;&mdash;&mdash;&mdash;&mdash;&ndash;</p> <p>As always, our mission is to provide free and open educational resources to everyone! We are committed to supporting our students and instructors regardless of how they choose to use our software. If you have any questions or need help with anything, please don&rsquo;t hesitate to reach out to us on our <a href="https://discord.gg/f3Qmbk9P3U">public forums</a> or hang out with us on zoom! Our weekly zoom schedule is <a href="https://mathtech.org/events/">available here</a>. And you can always drop in on our zoom <a href="https://mathtech.org/dropin">during one of the scheduled times here</a>. We are always happy to help and we welcome your feedback and suggestions and just being a part of our community. It is amazing what can happen when people come together face to face and share their ideas and experiences. We are grateful for everyone who has contributed to the project and we look forward to continuing to work together to make education more accessible and engaging for everyone. Thank you for being a part of our community!</p> <p>Brad</p>Mid-term Updateshttps://blog.runestone.academy/2025/10/10/mid_term_updates.htmlFri, 10 Oct 2025 00:00:00 +0000https://blog.runestone.academy/2025/10/10/mid_term_updates.html<p>It has been a relatively calm Fall 2025 semester! Thanks to everyone for your patience and issue reports. I had a wonderful September exploring six of our amazing national parks! I am back to work and have been able to address a number of issues and feature requests. Here are some highlights:</p> <ul> <li>New course creation page</li> <li>Grading Updates &ndash; <strong>Se note on timezones below</strong></li> <li>LTI 1.3 bug fixes</li> <li>Improved user interface for creating assignments</li> <li>Bug fixes and performance improvements</li> <li>We are making good progress toward removing the legacy instructor interface and hope to have this completed in summer 2026.</li> <li>Improvements to student accommodations</li> </ul> <p>One specific change that I would like to highlight is:</p> <ul> <li>We will now accept late submissions for assignments as long as you have the accept late submissions option enabled. Whether you have checked the released grades option or not. This was a highly requested feature and I am glad to be able to deliver it.</li> <li>To support this change we have added a new attribute for every course, which is the home <strong>timezone</strong> for the course. You should go to the course settings page and set this to your local timezone. This will ensure that all assignment due dates are interpreted correctly. If you do not set this, it will default to UTC which may cause confusion. This also prevents students from changing their timezone to get around due dates. If you have any questions about this, please let me know.</li> </ul> <p>I am also considering adding an accommodation that would allow instructors to email students a link to an assignment that is not yet visible. This would allow students with accommodations to access assignments early or late. Please let me know if this would be useful. This is different than the current &ldquo;visible&rdquo; option in that the assignment would not be visible to students unless they had the link.</p> <p>This is a community effort, and I am grateful for everyone&rsquo;s contributions. Thank you! For those of you who are new, welcome to the community! Please remember that this is a volunteer effort, we don&rsquo;t have full time staff of support people to answer your questions. qn Please be patient and respectful of others&rsquo; time and efforts, please use our <a href="https://runestone.academy/ns/books/published/PTXSB/rune.html">public forums</a> to ask questions or discuss problems. If you find that something is not working, please take some time to investigate and report the <a href="https://github.com/RunestoneInteractive/rs/issues">issue on GitHub</a>. The more information you can provide, the better! Do not presume that because you are having a problem, that everyone else is. Please help us help you! You may use the software differently from others. We welcome constructive feedback and suggestions.</p> <p>For those of you that use our accommodations feature I would love to hear your feedback. I am considering adding the option to allow students to access an assignment if they have a direct link to a non-visible assignment and have an accommodation that allows them to do so. Please let me know if this would be useful.</p>GenAI in CS Consortiumhttps://blog.runestone.academy/2025/08/22/genaiconsortium.htmlFri, 22 Aug 2025 00:00:00 +0000https://blog.runestone.academy/2025/08/22/genaiconsortium.html<img src="https://blog.runestone.academy/2025/08/22/genaiconsortium/GenAILogo.png" width="600" alt="GenAI Consortium Logo" /> <p>Exciting news! Runestone Academy received funding from the GenAI in CS Consortium to support educators in strategically integrating genAI into their teaching methods and curricula. The consortium is a destination for academics seeking example courses and overall guidance. <strong>Check it out at</strong> <a href="http://TeachCSwithAI.org">TeachCSwithAI.org</a></p> <p>Our first project will be to integrate Runestone books with <a href="https://www.learningclues.com/">Learning Clues</a> to provide secure 24x7 tutoring for your students. Students will be able to ask questions, and have a conversation with AI with all of the responses grounded in the content provided on Runestone Academy.</p>Fall 2025 Transitionshttps://blog.runestone.academy/2025/08/17/fall_2025_transitions.htmlSun, 17 Aug 2025 00:00:00 +0000https://blog.runestone.academy/2025/08/17/fall_2025_transitions.html<p>Welcome back! Registrations have begun to soar for the Fall 2025 semester, and we are excited to see many new faces joining our community. As we prepare for the upcoming semester, here are some important updates and transitions to keep in mind. We realize that transitions like this can be challenging and confusing, we appreciate your patience and understanding as we work through these changes.</p> <h2 id="new-instructor-dashboard">New Instructor Dashboard</h2> <p>You will notice a revamped instructor dashboard. It has a new look, and uses a modern web framework on the backend. <a href="https://github.com/RunestoneInteractive/rs/issues">Please let us know if you encounter any issues</a> as the backend code is new. Please check existing issues before you make a new one. This new dashboard should replicate the old functionality, but we may have missed some edge cases in our rewrite. The old dashboard will remain available, probably for the entire 2024/2025 year, but I won&rsquo;t be fixing any bugs or doing any enhancements to the old interface. Think of it as a faithful backup in case something critical goes wrong with the new dashboard.</p> <h2 id="new-assignment-builder">New Assignment Builder</h2> <p>The story for the new assignment builder is similar. It has been completely rewritten using a modern web framework on the backend. Notably, the database for the two builders is identical and shared. You can see the assignments in both. <strong>Really Important</strong> The old assignment builder used the authoring language restructuredText plus our extensions for you to write questions. The new assignment builder uses a different approach, rather than saving the RST for you to edit, the new assignment builder saves the questions in a JSON format. I have tried to write a converter and have converted old <code>activecode</code>, <code>shortanswer</code>, and <code>multiple choice</code> questions to the new json format so you can edit those old question in the new assignment builder. That was a <strong>one time conversion</strong>. If you write new questions in the old assignment builder you <strong>will not</strong> be able to edit them in the new assignment builder. Please use the new assignment builder - we think it is much more user friendly and easier to use. The old questions had a myriad of options <code>:option:</code> in the RST. Many of them were experimental, or implemented for a particular project and many of them are not that useful. So far we have only added the most used options to the new assignment builder. If you find that you need an option that is not available, please let us know.</p> <p>As with the instructor dashboard, please report any issues you encounter. The old assignment builder will also remain available for the 2024/2025 year, but it will not be receiving any enhancements or bug fixes.</p> <h2 id="lti-13-support">LTI 1.3 Support</h2> <p>Many schools have told us they are moving to LTI 1.3 for their LMS integration and will no longer support LTI 1.1. We have added support for LTI 1.3 in addition to the existing LTI 1.1 support. LTI 1.1 support is <em>only available through the old instructor dashboard</em>, and I won&rsquo;t be moving any support to the new dashboard since most schools will no longer support 1.1.</p> <p>Unfortunately LTI 1.3 will need to be configured by your LMS administrator. We have been testing it out in production with Canvas, Moodle, and D2L. If you want to use LTI 1.3 you will need to create an <a href="https://github.com/RunestoneInteractive/rs/issues/new/choose">issue on github</a>` to have us enable your domain. As you will read on the issue template, if your school is going to require us to fill out forms and provide things like HECVATs and VPATs and then LTI 1.3 support is a paid feature. As an open source project we do not have the resources to fill out forms for every school that wants to use our software. If you are a small school or a school in a developing country please let us know and we will work with you to get LTI 1.3 enabled.</p> <p>On the positive side, if you are using 1.3 and you have pre-released your assignment (on the grading page), then grades will be automatically sent back to your LMS. This is a big improvement over LTI 1.1 where you had to remember to push the grades back.</p> <h2 id="more-to-come">More to Come</h2> <p>We are continuously working on improving the platform. There are only a few more things to migrate away from our old web framework. These include:</p> <ul> <li>Grading</li> <li>Peer Instruction</li> <li>Practice</li> </ul> <p>As we migrate each of these components we will keep the old in place so they can be used in parallel. I hope that all of the above can be completed by the end of the school year so that we have a fully modernized code base for fall 2026. As with any system that has been around for a long time, there are lots of features that have been added over the years. We will be evaluating each feature to see if it is still useful and if it is worth migrating to the new framework. We have a lot of usage data to help us make these decisions, but if you find that a feature you use has not been migrated, please let us know.</p> <p>Brad Miller<br> Professor Emeritus, Luther College<br> Founder, President, Chief Developer, Runestone Academy</p>Docker Images for Macs and Linuxhttps://blog.runestone.academy/2025/08/01/images_for_macs_and_linux.htmlFri, 01 Aug 2025 00:00:00 +0000https://blog.runestone.academy/2025/08/01/images_for_macs_and_linux.html<p>One of my hoped for quality of life improvements for the Runestone platform is to make it easier for everyone to run a Runestone server own their own computer. This is especially important for authors who want to test their books locally before pushing them to the Runestone server. We made great progress on this front a couple years ago when I created a container registry on github to hold our docker images for all of our servers. The problem was that the images were built for x86_64 architecture, and so they would not run on ARM based machines like the new Apple Silicon Macs. I didn&rsquo;t know how to build multi-architecture docker images, and I didn&rsquo;t have the time to learn how to do it.</p> <p>Like many things in life, solving the problem is not that hard if you take the time to learn how to do it. I finally carved some time out of my routine of fixing bugs and adding features to learn how to build multi-architecture docker images. I am pleased to announce that we now have images for the Runestone servers that will run on both <code>x86_64</code> and <code>ARM</code> architectures. This means that you can now run a Runestone server on your Mac or Linux machine without having to build the images yourself! These images are the same images we use in production, so you can be sure that they are stable and reliable.</p> <div class="attention"> <div class="title"> <p>Attention</p> </div> <p>Details on how to get configured and running are here: <a href="https://runestone-monorepo.readthedocs.io/en/latest/running.html">Runestone Server Setup</a>. In my experience the vast majority of the problems that people have when trying to run a Runestone server on their own machine are related to the configuration of the server. The sample env file should work for most people, but you may need to tweak it a bit to get it to work on your machine. If you run into problems, please feel free to create an issue on our GitHub repository, and we will do our best to help you get it working.</p> </div> <p>The next step would be to create a script that will automatically get the server up and running with minimal user intervention. If anyone is interested in helping with that, please let me know. I would be happy to work with you to get it set up.</p>Mid-July Updatehttps://blog.runestone.academy/2025/07/19/mid_july_update.htmlSat, 19 Jul 2025 00:00:00 +0000https://blog.runestone.academy/2025/07/19/mid_july_update.html<p>Today is July 19, 2025, and we are excited to share the latest updates with you. We have been hard at work on several projects, and we are pleased to announce that we have made significant progress on the following:</p> <p><strong>LTI 1.3</strong>: We are continuing to roll out LTI 1.3 support across more Learning Management Systems (LMS). This integration will enhance the usability of Runestone in various educational environments, making it easier for instructors to incorporate our resources into their courses. We are happy to report that we have successfully tested it with Desire2Learn, Moodle, and Canvas. If you want to get LTI 1.3 set up for your course please <a href="https://github.com/RunestoneInteractive/rs/issues">create an issue</a> on our GitHub repository, and we will assist you in the setup process. Note there is a special category for LTI Support issues. Please refer to the LTI documentation in <a href="https://guide.runestone.Academy">The Instructor Guide</a> for more information. If you have questions please ask them on the <code>#lti_community_support</code> channel in the Runestone discord.</p> <p><strong>New Assignment Builder</strong>: The new assignment builder has been well received, and we are continuing to refine it based on user feedback. We have added several new features, and fixed many bugs. The assignment builder now supports a wider range of question types, including fill-in-the-blank and matching questions. We encourage all instructors to try it out and share their experiences with us.</p> <p><strong>Quality of Life Improvements</strong>: We have made several quality of life improvements to the platform, including: - Improved Course Selection Page - Improved Instructor Dashboard - Better support for MathJax and LaTeX rendering in several areas - Support for attaching pdfs, and image files to short answer questions - many more small improvements to the user interface</p> <p><strong>Internals</strong> : We have made significant internal improvements to our platform, including updates our logging system, optimizing our database queries, and improving the overall performance of the site. These changes will help us provide a more reliable and efficient system.</p> <p>The internal updates also make it easier for anyone to contribute to Runestone. If you are interested in helping out with a feature or a bug fix I would welcome your help! The documentation is available at <a href="https://runestone-monorepo.readthedocs.io/en/latest/index.html">Runestone Development Docs</a>. If you have any questions or need assistance, please feel free to reach out to us. We have especially simplified the process by creating database API&rsquo;s to do most everything you need to do with the database. No need to know or use SQL.</p> <h2 id="book-updates">Book Updates</h2> <p>As we continue the transition to writing books in PreTeXt there are several books that are no longer being updated in their original format. In particular the following books have been replaced by new versions:</p> <ul> <li><em>How to Think Like a Computer Scientist</em> (<code>thinkcspy</code>) switch to <code>httlacs</code></li> <li><em>CSAwesome</em> now has a new edition and a new look, You should switch to <code>csawesome2</code> which follows the latest college board standards for APCSA.</li> <li><em>Problem Solving with Algorithms and Data Structures using Python</em> <code>pythonds</code> has been replaced by <code>pswadsup</code>.</li> <li><em>Problem Solving with Algorithms and Data Structures using C++</em> <code>cppds</code> has been replaced by <code>cppds2</code>.</li> <li><em>C++ for Python Programmers</em> <code>cpp4python</code> has been replaced by <code>cpp4py-v2</code>.</li> <li><em>Java for Python Programmers</em> <code>java4python</code> has been replaced by <code>java4py2</code>.</li> <li><em>How to Think Like a Computer Scientist C++ edition</em> (<code>thinkcpp</code>) has been replaced by <code>thinkcpp2</code>.</li> </ul> <p>We&rsquo;ll mark these and other books as deprecated in the library in the next few weeks to make it easier to find the latest version.</p> <h2 id="retiring-restructuredtext">Retiring restructuredText</h2> <p>This is a good time to remind everyone that the markup extensions to restructuredText will no longer be developed. In fact there are quite a few features that are supported in PreTeXt that are not supported in restructuredText. If you are writing a new book, or updating an existing book, we encourage you to use PreTeXt. Beginning with the 8.0 release of the runestone components, we will not include the python code for the markup. Beginning with that release we will just provide the javascript for the interactive components. We look forward to continuing to develop new and innovative interactive components that support student learning with Markdown in PreTeXt.</p>Mid-June Updatehttps://blog.runestone.academy/2025/06/14/mid_june_update.htmlSat, 14 Jun 2025 00:00:00 +0000https://blog.runestone.academy/2025/06/14/mid_june_update.html<p>Today is June 14, 2025, and we are excited to share the latest updates with you. We have been hard at work on several projects, and we are pleased to announce that we have made significant progress on the following:</p> <ul> <li><strong>LTI 1.3</strong>: We launched LTI 1.3 today. This will allow Runestone to be integrated into many more LMSs and will make it easier for instructors to use our platform in their courses. For now you will need to contact us in order to use this feature, but we will be rolling it out to all users over the course of the summer.</li> <li><strong>New Instructor Dashboard</strong>: We have been working on a new instructor dashboard that will provide a more streamlined and user-friendly experience for instructors. This includes improved navigation, and better organization. It also provides us with a base to continue porting and updating code that has been with us for more than a decade, and badly needs a refresh. This will become the default destination for instructors from the user menu, as we update books. In the meantime the url is <code>/admin/instructor/menu</code></li> </ul> <img src="https://blog.runestone.academy/2025/06/14/mid_june_update/menu.png" class="align-center" width="600" alt="New Instructor Dashboard" /> <ul> <li><strong>Peer Instruction Interface</strong>: We have made significant improvements to the peer instruction interface.</li> <li><strong>Accessibility Improvements</strong>: We have been working steadily on improving the accessibility of our platform. This includes making sure that all of our interactive elements are keyboard accessible, and that they work well with screen readers.</li> <li><strong>Assignment Builder</strong>: We have been working on a new assignment builder that will allow instructors to create assignments more easily. This includes the ability to add multiple choice questions, short answer questions, and more. This is now the default from from the new instructor dashboard. We know there are still some rough edges, but please give it a try and let us know what you think.</li> <li><strong>Internal Improvements</strong>: We have been working on a number of internal improvements to our platform, including updating our dependencies, improving our logging, and optimizing our code for better performance.</li> </ul> <p>All of these updates are part of our ongoing effort to improve Runestone Academy and provide a better experience for instructors and students. We appreciate your support and feedback as we continue to work on these projects. You can help us by trying out the new features and letting us know what you think. Reporting bugs and issues is extremely helpful, and we appreciate your patience as we work to resolve them.</p>Summer Roadmap 2025https://blog.runestone.academy/2025/05/28/summer_roadmap.htmlWed, 28 May 2025 00:00:00 +0000https://blog.runestone.academy/2025/05/28/summer_roadmap.html<p>I&rsquo;m excited to share our roadmap for the summer of 2025! This summer brings a number of projects both large and small. Here is a high level overview of what I hope to accomplish:</p> <ul> <li><strong>Launching LTI 1.3</strong>: This has been in development for a while, and we are excited to finally launch it. This will allow Runestone to be integrated into many more LMSs and will make it easier for instructors to use our platform in their courses. It will also pass back grades for students immediately. <strong>How can I help?</strong> If you are an instructor and would be willing to test this out with your LMS please let us know! We want to make sure this is rock solid for the Fall! BTW, if you have a big IT department who is going to ask me to fill out a bunch of forms and sign a bunch of documents, please know that this will be a paid for feature. I just don&rsquo;t have the time and energy to fill out a bunch of forms and sign a bunch of documents for free. I&rsquo;ll announce the pricing for this in a few week.</li> <li><strong>JOBE Updates</strong>: This is also essentially complete, and updates Java to Java 21 and C/C++ compiler to gcc-14.2. This will allow us to support the latest versions of these languages in our interactive textbooks. <strong>How can I help?</strong> If you are an instructor who uses JOBE in your course, please let us know if you have any specific needs or concerns with this update.</li> <li><strong>Manual Grading updates</strong>: There are very few things that need manual grading any more. But this is probably the key thing to port away from web2py to FastAPI. I&rsquo;m not sure what this will look like but I welcome ideas, sketches, and mockups.</li> <li><strong>New Textbooks</strong>: We have a number of new textbooks in the works, including a new book on Quantum Computing, and a new book on Computer Security. We will also be phasing out the RST version of how to think like a computer scientist and replacing it with the PreTeXt version.The same goes for the python data structures book. Also a brand new PreTeXt version of CSAwesome, and a PreTeXt version of Python for Everyone. Each new book that goes from RST to PTX exposes a few bugs, or feature requests. These are fun to find and fix. <strong>How can I help?</strong> If you are an instructor who has used the books in the past we definitely don&rsquo;t want regressions, so please check them out!</li> <li>The <strong>New Assignment Builder</strong>: This is ready to be called a beta!!, but it is going to be out in the fall. Its available now from the assignment page, and we would really love to have you try it out. Some of the work left to do is to make current problems compatible with this new assignment builder. That may take a bit of time, so please be patient.</li> <li><strong>Accessibility Improvements</strong>: We are committed to making Runestone more accessible to all users. This summer we will be continuing our work on improving the accessibility of our interactive elements. This includes making sure that all of our interactive elements are keyboard accessible, and that they work well with screen readers. <strong>How can I help?</strong> If you can install the WAVE accessibility tool in your browser, and run it on Runestone Academy, we would love to hear about any issues you find. Many a11y issues are easy to fix, so if you are just getting into web development this is a good starting point for you.</li> <li><strong>New LLM based features</strong>: The first step in this is to allow an instructor to store their LLM API token on Runestone Academy. We have some great new features for automatically generating parsons problems, and for chat within the peer instruction interface. I&rsquo;d also like to add a feature that helps instructors make lesson plans for their courses. And lots more. We would love to hear your ideas for how we can use LLMs to improve the Runestone experience. <strong>How can I help?</strong> If you are an instructor who has used LLMs in your course, please let us know what features you would find most useful.</li> <li><strong>Digital Ocean Spaces for template files</strong>: This is a small but important change that will allow us to store template files in a more efficient way. This will help us reduce the size of our docker images and make it easier to scale up/down.</li> <li><strong>New Fluent based logging</strong> This is mostly under the hood stuff, but this will centralize the logging from all of our workers and make it easier to debug issues that arise. <strong>How can I help?</strong> If you are a developer who has worked with our codebase in the past, we would love your help implementing this and making sure it works well.</li> <li><strong>Porting the remaining code from web2py to FastAPI</strong>: This has been a long ongoing project, but we need to make a final push to get the remaining code ported over. This will allow us to take advantage of the performance improvements that FastAPI provides and make it easier to maintain our codebase in the future. <strong>How can I help?</strong> If you are a developer who has wondered how to get started in the past, we would love your help porting the remaining code.</li> <li><strong>Making more anonymous data avilable for educational research</strong>: We have a lot of data on how students interact with our platform, and we want to make more of that data available for educational research. This will help us understand how students learn and how we can improve our platform. <strong>How can I help?</strong> If you are an educational researcher who is interested in using our data, please let us know and we can work together to make that happen.</li> <li><strong>Making a clean break with RST</strong>: We have been using reStructuredText (RST) for a long time, but we are ready to make a clean break and move to PreTeXt (PTX) for all of our textbooks. This will allow us to take advantage of the features that PTX provides and make it easier to maintain our codebase in the future. We will start by making a branch for the runestone 7.7 series. In case there are critical bug fixes. Runestone components 8.0 and beyond will continue to be on main.</li> <li>Lots of little things&hellip;</li> </ul> <h2 id="i-have-suggestions">I have suggestions!</h2> <p>If you have suggestions for features or improvements that you would like to see in Runestone, please let us know! We are always looking for ways to improve the platform and make it more useful for instructors and students. Please feeel free to reach out to us by creating an issue on github. Please do not email me.</p> <p>This feels like a good time to thank all of our contributors who have helped us get to this point. We are a small team, but we have a lot of great people working with us to make Runestone the best it can be. Thank you for your support and for using Runestone!</p> <p>A Note on Open Source &mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&ndash; As we embark on this summer roadmap, I want to take a moment to reflect on the nature of open source software and how it relates to our work at Runestone Academy. Open source is a collaborative effort where anyone can contribute, but it doesn&rsquo;t mean that every suggestion or request will be implemented. We appreciate all ideas and feedback, but we also need to prioritize our resources and focus on what aligns with our goals.</p> <p>We are a small team of people who are passionate about open educational resources. The other day I asked GPT to help me come up with an infographic that might help non-coders understand how open source works. Here is what we came up with:</p> <img src="https://blog.runestone.academy/2025/05/28/summer_roadmap/opensource_infographic.png" class="align-center" width="600" alt="Open Source Infographic" /> <p><strong>Note</strong>: The mathematics example was GPT&rsquo;s idea, not mine. But I like the analogy. So if you are a mathematician, please don&rsquo;t be offended.</p> <p>Here is <strong>another way</strong> to think about it: Open source software is like a <strong>community garden.</strong></p> <p>Anyone can plant something, anyone can weed, and anyone can enjoy the harvest. But if you walk into the garden and say, “You should plant tomatoes over there,” the response is usually, “That&rsquo;s a great idea—would you like to help plant them?”</p> <p>In open source:</p> <ul> <li>Developers contribute their time voluntarily.</li> <li>Ideas are welcome, but implementation is not guaranteed.</li> <li>If you want something changed, you have a few options: Do it yourself (if you can code). Find someone who will (sometimes you can pay or persuade). Make a compelling case and hope a contributor finds it worthwhile.</li> </ul> <p><strong>Open source thrives on shared goals, not demands.</strong> It&rsquo;s a gift economy—like Wikipedia or community theater. Participation is appreciated, but it doesn&rsquo;t come with customer support unless someone offers it.</p> <p>If you have made it this far, I hope you understand that we are always looking for ways to improve Runestone Academy, but we also need to be realistic about what we can accomplish with our limited resources. We appreciate your understanding and support as we continue to work on making Runestone the best it can be.</p>Miller Named Distinguished Member of the ACMhttps://blog.runestone.academy/2025/02/12/distinguished_member.htmlWed, 12 Feb 2025 00:00:00 +0000https://blog.runestone.academy/2025/02/12/distinguished_member.html<p>Runestone Academy founder and president, Dr. Bradley Miller, has been named a Distinguished Member of the Association for Computing Machinery (ACM) for his contributions to the development of recommender systems for eCommerce and interactive textbooks for computer science and mathematics. The ACM is the world&rsquo;s largest educational and scientific computing society, and this honor is given to only 1% of its members. Dr. Miller was recognized for his work in the development of the Runestone Interactive platform, which has been used by over 1 million students and teachers around the world to learn computer science. He has also been a leader in the development of open educational resources (OER) and has been a strong advocate for the use of technology in education.</p> <p>&ldquo;Each year we look forward to selecting a new class of ACM Distinguished Members from among our worldwide association of 110,000 colleagues,&rdquo; explained ACM President Yannis Ioannidis. &ldquo;ACM&rsquo;s motto is &lsquo;advancing computing as a science and profession.&rsquo;&rdquo;</p> <p>I am really honored to be recognized by the ACM for my work in computer science education and open educational resources. I have been fortunate to work with many talented people over the years, and this award is a reflection of their hard work as well. I am especially grateful to the Runestone team for their dedication and commitment to making computer science education accessible to all. As a Professor Emeritus of Luther College, I&rsquo;m especially proud of this honor; if you look at the other 55 people named this year they are from Google, Microsoft, and lots of prestigious research universities around the world. I am proud to be a part of this community and to be able to contribute to the advancement of computing as a science and profession. I look forward to continuing to work with my colleagues in the field to make computer science education more accessible and effective for all students.</p> <p>You can read more about the announcement <a href="https://www.acm.org/media-center/2025/february/distinguished-members-2024">On the ACM Website.</a></p>DDoS Updatehttps://blog.runestone.academy/2024/09/18/ddos_update.htmlWed, 18 Sep 2024 00:00:00 +0000https://blog.runestone.academy/2024/09/18/ddos_update.html<img src="https://blog.runestone.academy/2024/09/18/ddos_update/ManyHats.png" style="width:100.0%" alt="Many Hats" /> <p>The Distributed Denial of Service (DDoS) attack is ongoing. Even after I moved our load balancer to new hardware and a new IP address. This means that the attackers are not just targeting the IP address of the load balancer, but they are targeting &ldquo;runestone.academy&rdquo; by name. This is a much more serious attack and it is taking a lot of time to mitigate.</p> <p>I&rsquo;ve learned a lot about how to mitigate these attacks and I&rsquo;m implementing the solutions as quickly as I can without causing a lot of downtime. I&rsquo;m sorry for the inconvenience this is causing you. I think are to the point where we have minimized it. When a new wave of attacks hits it just takes a minute or so to block the attackers. So, just keep that in mind, take a breath, wait a minute and refresh your page. I&rsquo;m also sorry that I have to spend so much time on this instead of working on new features for Runestone.</p> <p>These kinds of sustained attacks do not come for free. There are literally thousands of IP addresses involved over a period of days. This is not just a kid in a basement with a botnet. This is a reasonably well-funded and well-organized attack. I&rsquo;m not sure what the motive is, but it is clear that they are not going to give up easily. Could it be an evil publisher trying to squash free textbook distribution? Could it be one of our &ldquo;competitors&rdquo; trying to take us down? Could it be a foreign government trying to disrupt education in the US? I don&rsquo;t know. I do know that I&rsquo;m not going to give up easily either.</p> <p>The cartoon at the top was generated yesterday by DALL-E. It is a cartoon of me wearing many hats. I thought it was appropriate for the situation. GitHub co-pilot suggested that I should be wearing a tinfoil hat. I&rsquo;m not sure that would help. It also suggested that I should write that I am working with the NSA, CIA, and Department of Homeland Security to track down the attackers. That is certainly not true. I&rsquo;m just a guy trying to keep the Runestone servers up and running.</p> <p>I also want to assure you that, so far, the attack has been limited to, and stopped by the load balancer, our application servers and database are secured behind the load balancer and an additional firewall. So, even if the load balancer were to go down, the application servers would still be up and running. Yes, timeouts of API calls to save data to the database might happen, but you should get a dialog if that happens, so that you can reclick the button and have it save the latest answer again.</p> <p>Again, please remember to check the <a href="https://status.runestone.academy">Runestone Status Page</a> if you are having trouble accessing the Runestone books. It updates every 5 minutes and is served from a completely different server, so is unaffected by the DDoS attacks.</p>Distributed Denial of Service 2024https://blog.runestone.academy/2024/09/10/distributed_denial_of_service_2024.htmlTue, 10 Sep 2024 00:00:00 +0000https://blog.runestone.academy/2024/09/10/distributed_denial_of_service_2024.html<p>Well, Fall certainly started off with a bang this year. Registrations are ahead of last year, web traffic is also way up, and we are seeing a lot of adoptions of new books in the Runestone ecosystem.</p> <p>We are also seeing a lot of new attacks. Specifically, we have been subject to a Distributed Denial of Service (DDoS) attack each day. This is where a large number of computers are used to flood a target with traffic, causing the target to become overwhelmed and unable to respond to legitimate requests. For example yesterday from about 7:30AM Central to 1:30PM Central, we had over 5 million bogus HTTP requests sent from around 6,000 different IP addresses. All were identical trying to send some kind of binary request. A little research indicated that they were probably trying to create some kind of buffer overflow in the web server that would allow them to gain access.</p> <p>The attack stopped on its own yesterday afternoon. But then it started up again this morning, though not with as much intensity.</p> <p>We have been able to mitigate the attacks by blocking the IP addresses of the attacking machines, but it is a constant game of whack-a-mole. Thankfully, there is an automated system called <code>fail2ban</code> that can help us with this. Until we get it fine-tuned there is a possibility that some legitimate users may be blocked. If you are having trouble accessing the Runestone books, please let us know.</p> <p>We have also been working with our hosting provider to help us with this. They are supposed to provide some level of protection against DDoS attacks, but they claim that it only applies if the attack is against a large part of their cloud.</p> <p>I&rsquo;m not sure why we are being targeted. Maybe it is just mischief, maybe we just got caught up in the middle of a range of IP addresses being attacked, We don&rsquo;t have any money to pay a ransom and it we haven&rsquo;t been asked to. No matter the motive, it is a good reminder that the internet is a dangerous place and that we need to be vigilant in protecting our systems.</p> <p>If you have trouble accessing Runestone and are wondering if it is just you or if the site is down please check <a href="https://status.runestone.academy">The Runestone Status Page</a></p> <img src="https://blog.runestone.academy/2024/09/10/distributed_denial_of_service_2024/runestone_status.png" style="width:100.0%" alt="Runestone Status" /> <p>The top bar shows the current status of the Runestone servers. If the bar is green then everything is good. The orange-red bars crossing the green indicate times when the site was not available to the majority of 7 severs around the world that check periodically. the wider those bars, the longer the site was unavailable. The vertical green bars are the &ldquo;Appdex score&rdquo; which is a measure of how responsive the site is. The higher the better. This page is served completely independent of our servers so if you can&rsquo;t reach the Runestone site you should still be able to reach this page. Also, please know that when access to the site is not perfect I get notified by text and email so I can jump in and try to fix things.</p> <p>Hopefully, things will smooth out now and you can focus on teaching and learning! Thanks for your patience.</p> <p>Brad</p>Runestone Originshttps://blog.runestone.academy/2024/08/16/runestone_origins.htmlFri, 16 Aug 2024 00:00:00 +0000https://blog.runestone.academy/2024/08/16/runestone_origins.html<p>I come from a long line of educators, my father, and both of my grandmothers were teachers. I was lucky enough to spend time with each grandmother many summers during my childhood years. Each of them loved to bring me on adventures. My grandmother on my mother&rsquo;s side was a teacher in rural Minnesota. She took me to see the Petroglyphs and to Pipestone National Monument, and many other places. My grandmother on my father&rsquo;s side was a teacher in a one room school house in Northern Minnesota. She would take me to school and give me a nickle to say the pledge of allegiance. She would also take me on other adventures, including going to see the Kensington Runestone near Alexandria, MN. I was always fascinated by the story of the Runestone and the mystery of its origins, and of course Vikings! I have always loved to learn and to teach and I think that my grandmothers had a lot to do with that, both of them helped me become an early reader and supplied me with lots of books. I hope that you enjoy learning and teaching from the Runestone books as much as I have enjoyed creating and maintaining Runestone Academy.</p> <p>A few days ago I got to revisit the Runestone when we visited our friends who live near Alexandria. Here I am on the site where the stone was found, entangled in the roots of a poplar tree.</p> <p><img src="https://blog.runestone.academy/2024/08/16/runestone_origins/runestone.png" alt="Runestone"></p> <p>The Runestone is a 200 pound slab of rock that was found in 1898 near Kensington, MN. The stone is covered with runes that tell the story of a group of Norsemen who came to the area in 1362. The stone is controversial and many people believe it is a hoax. The stone is now on display in the Runestone Museum in Alexandria, MN. I&rsquo;ve never understood why an illiterate farmer would go to the trouble of carving a 200 pound stone with a story that no one could read. I prefer to think that the stone is real and that it tells the story of a group of Norsemen who came to Minnesota 130 years before Columbus.</p>Summer Developmentshttps://blog.runestone.academy/2024/08/12/summer_developments.htmlMon, 12 Aug 2024 00:00:00 +0000https://blog.runestone.academy/2024/08/12/summer_developments.html<p>The Runestone developers have been busy this summer. Here are some of the highlights:</p> <h2 id="beta-of-new-assignment-builder">Beta of new Assignment Builder</h2> <p>We have been working on a new version of the Assignment Builder that will allow you to create questions without knowing RST or PreTeXt. Its completely rebuilt from the ground up and is much more user friendly, using modern web technologies like React and Redux. We are looking for people to try it out. The current assignment builder will remain available, and contains a link for you to try the new version.</p> <h2 id="real-time-score-updates">Real Time Score Updates</h2> <p>We now detect when a student has submitted an answer to a question that is part of an assignment. When they submit the answer, we will update the score in the grade book in real time. This is a feature that has been requested by many of our instructors and students. Students will see their current score on the assignment page as well as the assignment selection page. You will also notice that most questions now have an extra little icon to indicate that the question is correct or incorrect. This makes the questions consistent. We plan to also add an icon to indicate that the question is part of an assignment, but thats not ready yet.</p> <h2 id="peer-instruction-improvements">Peer Instruction Improvements</h2> <p>Peer instruction now has a great new instructor page for you to view a summary of what happened during peer instruction. You can see how many students answered each question, and how many students got the question correct. You can also see how many students answered each question correctly on the first try. This is a great way to see how well your students are understanding the material. We have also added an option to allow the students to record who they talked with if you don&rsquo;t want to use the chat feature on the web page but would prefer your students talk to each other face to face.</p> <h2 id="chapter-activity-report-addition">Chapter Activity Report Addition</h2> <p>Another feature that many people have asked for is a simple summary to show how many of the activities on each page a student got correct. This is now available in the drop down menu of Chapter Activity Report called &ldquo;Number of activities Correct&rdquo;</p> <h2 id="book-discussion-forums">Book Discussion Forums</h2> <p>On the home page for your course, you may see a link to a discussion forum for the book the course is using. These links are only available if you are an instructor, and we encourage you to use them to ask questions, and share ideas and materials with other instructors using the same book. In the coming years we hope to build a community of instructors around each book, and provide more structured ways to share materials, such as quizzes, exams, assignments, slides, and other materials. We know we don&rsquo;t always provide everything you need, and we hope that by building a community of instructors around each book we can help you find the materials you need. These forums will only work if you participate, so please join in and help us build a community around the books you are using.</p> <h2 id="using-lti">Using LTI?</h2> <p>If you are using LTI you will notice a big change that we hope you appreciate. Instead of showing the assignment list to students, they will see a message reminding them that they need to launch the assignment from your LMS. In the past this has been the source of much confusion for students, and we hope this change will make it more clear to them that they need to launch the assignment from your LMS.</p> <h2 id="textbook-improvements">Textbook Improvements</h2> <p>Many textbooks have had lots of improvements as well. More of the books have been converted to PreTeXt and have a more modern look and feel, and we keep adding new textbooks all the time. We have added many math books at various levels, We encourage you to tell your Mathematics friends to check us out. We encourage you to tell all your friends to check us out.</p> <h2 id="new-authoring-features">New Authoring Features</h2> <p>We have overhauled the <strong>fill in the blank</strong> questions to make them dynamic. That is imagine you have a simple question what is 2+3? Questions that are written to take advantage of this feature will have a button labeled &ldquo;Randomize&rdquo; that will change the numbers in the question.</p> <p><strong>Parsons problems</strong> also have a new option to allow the student to run the code they have created. Once the student has a correct arrangement of the blocks a button will appear so that the student can run the code in an ActiveCode window. This is a great way to allow the students to interact with the code they have created, and even make small changes to see what happens.</p> <h2 id="bug-fixes">Bug Fixes</h2> <p>There have also been many bug fixes and improvements to the system. We are always working to make the system better and more reliable.</p> <h2 id="more-to-come">More to Come</h2> <p>We have many more features in the works, such as overhauling the grading page, and providing better summary reports about assignments. We are always looking for feedback from our users. If you have a feature you would like to see, or a bug you would like fixed, please let us know. We are always looking for ways to make the system better. Join us in our <a href="https://discord.gg/f3Qmbk9P3U">Discord channel</a>. We would love to hear from you.</p>We are Hiringhttps://blog.runestone.academy/2024/08/12/we_are_hiring.htmlMon, 12 Aug 2024 00:00:00 +0000https://blog.runestone.academy/2024/08/12/we_are_hiring.html<p>Are you passionate about computer science education? Do you want to &ldquo;democratize&rdquo; textbooks for the 21st century?</p> <p>We have grant money to hire a half time developer/devops/support person. The possibilities are endless! You would get to work with me and other volunteers in the Runestone community to help make Runestone better.</p> <ul> <li>Help out with bug fixes and/or feature requests for Runestone Academy</li> <li>Answer first line support emails from instructors</li> <li>Help Monitor Google groups that support our books and proactively address questions from instructors.</li> <li>Build and push weekly updates to our docker registry</li> <li>build and push weekly book updates to our servers</li> <li>Help develop tests for key parts of the system</li> </ul> <p>Should be proficient with at least some of the following: Python, SQL, Javascript, React, Docker. If you know Kubernetes and could help us migrate from docker compose to Kubernetes that would be super cool. You must be able to work efficiently from the command line. Must be able to work independently and be self motivated.</p> <p>If you are interested fork our repository and submit a pull request with a fix or a feature request. This is your chance to impress me. You can find our repository at <a href="https://github.com/RunestoneInteractive/rs">https://github.com/RunestoneInteractive/rs</a> Our live site which serves about 90,000 students each semester is at <a href="https://runestone.academy">https://runestone.academy</a></p> <p>Runestone Academy LTD is a 501(c)(3) non-profit corporation. We are an equal opportunity employer. We are committed to diversity and especially encourage members of underrepresented communities to apply.</p>Collaborative NSF Grants Awarded to Runestone Academy, Michigan, Duke, Virginia Tech, and Berea and American Institute of Mathematicshttps://blog.runestone.academy/2024/06/11/first_nsf_award.htmlTue, 11 Jun 2024 00:00:00 +0000https://blog.runestone.academy/2024/06/11/first_nsf_award.html<p><img src="https://runestone.academy/runestone/static/_images/nsf-logo.png" height="64" alt="NSF Logo" /> Runestone Academy LTD got good news this week. We received our first collaborative NSF Grant! The grant (#2336758) <em>Testing the Effects of Peer Discussion</em> is a collaborative research project with the University of Michigan, Duke University, Virginia Tech, and Berea College! The grant will allow us to study the effects of different modes of discussion during peer instruction sessions on student learning in computer science. As I was writing this post I got a second email from the NSF indicating that a second proposal had also been awarded!! (#2334768) <em>Collaborative Research: PreTeXt-Runestone: Open Textbooks Engaging Undergraduates in STEM</em> which is a Collaboration with Mathematics educators at the University of Michigan and the American Institute of Mathematics.</p> <p>We are excited to be working with two amazing teams of researchers and educators. We are also excited to be able to provide a platform for this research.</p> <h2 id="peer-instruction">Peer Instruction</h2> <p>The first grant will allow us to improve the Peer+ platform on Runestone Academy. The grant will fund the following activities:</p> <ul> <li>Improve the A/B testing mechanism on Runestone to better compare synchronous text-chat versus verbal discussion in the context of Peer Instruction (PI).</li> <li>Add hundreds of existing questions for CS2 (in Java and C++) and discrete math to Peer+ on Runestone Academy.</li> <li>Test the use of Large Language Models (LLMs) to improve the interactivity of the asynchronous text-chat.</li> <li>Test Peer+ in CS1, CS2, and discrete math courses at the four institutions mentioned earlier.</li> <li>Improve the instructor interface to reduce the time to find existing PI questions.</li> <li>Improve the instructor interface for authoring new PI questions.</li> <li>Conduct an instructor workshop to improve knowledge of PI and best practices.</li> <li>Add additional instructor support to help writing PI questions for ebooks.</li> </ul> <h2 id="pretext-and-runestone-for-stem">PreTeXt and Runestone for STEM</h2> <p>The second grant will advance our knowledge of the process of developing content for three novel interactive questions for four PROTEUS textbooks (PreTeXt- authored textbooks hosted in HTML format on the learning analytics platform Runestone Academy) and their use in classrooms. The project seeks to answer the following questions: How do groups of textbook users (students, teachers, authors, and researchers) work together to write interactive questions designed to elicit multiple ways of students&rsquo; thinking in classrooms? and How do students and instructors use those interactive textbook questions in their classrooms? The interactive questions are (i) Short Answer free response, (ii) Matching Exercises, and (iii) Parsons Problems. These will be embedded in textbooks for calculus and linear algebra (Active Calculus, Boelkins, 2022; APEX Calculus HTML Edition; Hartman et al, 2022; First Course in Linear Algebra, Beezer, 2022; and Understanding Linear Algebra; Austin, 2022), chosen because they vary in their support for active teaching, use of visualizations, and emphasis on proof. This grant also provides support for Runestone Academy to make a new hire in the area of development operations and technical support! Yahoo!!</p> <h2 id="summary">Summary</h2> <p>The process of getting these grants was no small feat! Writing the grants was the easy part. Then, back in December, we learned that both had been recommended for funding. But that was just the beginning. In order for Runestone Academy to be awarded the money, we had to go through a rigorous review process to demonstrate that we were capable of managing the grant. This forced us to &ldquo;grow up&rdquo; a bit and add in more processes and procedures to our small operation. It&rsquo;s all about checks and balances in the accounting world! To be clear, Runestone has been a part of several NSF grants in the past but as a contractor, not as a collaborating Principal Investigator.</p> <p>Once we passed the &ldquo;New Performer&rdquo; process then we just had to wait. As you may know the NSF budget was held up in congress for a while, and funding is tight. We were not sure if we would get the grant or not. But this week we got the good news! We are excited to be able to start the project and to be able to work with such an amazing team of researchers and educators. We are looking forward to the results of the study and to sharing them with the community. This is a real boost for Runestone Academy and all of our students, teachers, and collaborators! Hopefully this will help demonstrate our legitimacy and help us to secure more funding in the future.</p>SIGCSE 2024: How do you do it?https://blog.runestone.academy/2024/03/24/sigcse_2024.htmlSun, 24 Mar 2024 00:00:00 +0000https://blog.runestone.academy/2024/03/24/sigcse_2024.html<img src="https://blog.runestone.academy/2024/03/24/sigcse_2024/booth_2024.png" class="align-center" alt="Runestone Booth at SIGCSE 2024" /> <p>A second SIGCSE is in the bag for Runestone as an exhibitor. It was a good year. It was amazing to see so many people who have been using Runestone for years and to hear their stories. The number of people who stopped by the booth to just say <strong>thank you</strong> was really overwhelming! I hope you all know that your gesture will keep me going for months! It was also great to see so many new faces who were just learning about Runestone. I am always amazed at the number of people who have never heard of Runestone before. I guess that is a good thing, it means there are still lots of people to reach.</p> <p>It was great to connect with so many colleagues from years past. I was able to catch up with people I have not seen in years. I was also able to meet some new people who I have only known through email, Zoom, or Discord. It was great to put real live faces to names.</p> <p>It was so interesting to hear the questions that people asked. This year felt different than years past. The top questions were &ldquo;How do you do it?&rdquo; &ldquo;How do you keep Runestone going?&rdquo; &ldquo;How do you keep it free?&rdquo; &ldquo;Are you <em>really</em> free?&rdquo;&quot; And, &ldquo;do you have a book that covers X?&rdquo; But the question I want to address in this post is <strong>how do we keep it going?</strong> I understand that in this day and age the assumption is that &ldquo;if it&rsquo;s free online then the user is the product.&rdquo; But that is not how we roll, that is not our mission, that is not our model. We are a non-profit and we are here to serve the community. We are not here to make money off of you or your students. We are here to help you teach and learn computer science and math. Our North Star is to make computer science and mathematics education <strong>accessible to everyone.</strong></p> <p>We had answered that question so many times that we determined that we needed to create a new table banner for next time. We also decided that we could have a tongue in cheek answer for the rest of the conference, so Rob created a tip jar. We had a lot of fun with that! Some people were so amused that they threw in a dollar! We are not going to get rich off of that, but it was fun.</p> <img src="https://blog.runestone.academy/2024/03/24/sigcse_2024/tipjar.png" class="align-center" alt="Tip Jar" /> <p>Here is the answer to the question &ldquo;How do you do it?&rdquo; We are a non-profit. We are funded by donations, grants, memberships, and ads. We have a small team of volunteer developers who put their effort into Runestone. We have a medium community of authors who help us keep Runestone up to date. We have a large community of students and teachers who help us find bugs and suggest improvements. Yes, professional copyeditors are great, but the masses of students and teachers are even better.</p> <p>A second part of the solution is to serve ads through the <a href="https://ethicalads.io">Ethical Ad Network</a>. We don&rsquo;t like ads in general but the Ethical Ad Network is great because they don&rsquo;t do any tracking! Also, we don&rsquo;t show ads to students who are registered for a course.</p> <p>Finally, we do have a <a href="https://www.patreon.com/runestone">Patreon</a> account, and a <a href="https://github.com/sponsors/RunestoneInteractive">Github supporter</a> account, and of course you can <a href="https://runestone.academy/donate">donate directly</a> We would love to have your support! We are always looking for new ways to fund Runestone, if you are independently wealthy and want to fund us, we would love to talk to you! If you have a contact at a foundation that might be interested in funding us, we would love to talk to them! If you have a contact at a company that might be interested in funding us, we would love to talk to them! We are always looking for new ways to fund Runestone.</p> <p>Over the long term we are looking for solutions that will enable us to remain true to our mission of making computer science education accessible to everyone. We know there are many commercial offerings that have been <em>free</em> and then pulled the rug out from under all of the schools that could not pay. That is not who we are. We are committed to keeping the content and as much of the instructor interface free as we can, while planning for the day that Rob and Brad decide to step aside and really retire. It might mean a freemium model, it might mean a subscription model, it might mean a different model. We are open to ideas and suggestions as long as we can remain true to our mission.</p> <p>In the meantime, we are always looking for new contributors. If you are interested in helping out, please let us know. We are always looking for people to help us with content, with the platform, with the community, with the business side of things. We are always looking for new ideas and new ways to make Runestone better.</p>