Hello all! We have a
lotto cover in this changelog, as we've fallen behind with updates recently. So much has happened since the last time we posted one, so we're going to list everything here, and then certain topics we'll cover in more detail in separate posts.
Additionally, we'll be using a new format for changelog releases going forward. We're deprecating the use of semantic versioning because with our multiple products that all overlap, complexity abounds. So in the interest of keeping things simple, we'll be using named versions going forward, corresponding to the week of the year we do the current release.
We've decided to use mythological creatures and will have (around) 26 versions a year, which is 52 weeks / 2 = 26, which conveniently is the number of letters in the alphabet. So the next version we'll be releasing is "Ipotane".
Okay, here's what's happened in the last couple months!
- Deployed our newest product, Next Sandbox! In-browser, real-world, shareable computing environments.
- Drastically improved the project loading and timeout screens.
- Added a basic Dashboard to the website.
- Converted to a minute-based pricing model for our users.
- Added referral functionality for earning free credits.
- Added a number of new reports available for download for our enterprise customers.
- Added support for LaTeX in instructions.
- Allow up to 2GB of memory usage for all containers, when available.
- Added ability to exclude files from save snapshot.
- Support JSX syntax highlighting in JS files.
- Added GraphQL syntax highlighting.
- Added Parity to the Rust stack.
- Added Blockchain, Swift, and R skills.
- Deployed a React stack.
- Added a "blackjack" Codey!
- Added a list of use cases for Sandbox.
- Set up nt.dev/<stack> and nt.dev/last URLs.
- Allow custom parameters to be passed in with account join URL.
- Drastically improved how terminals work to address longstanding bug and improve performance.
- Changed to non-root nt-userin projects vsrootuser, which was incorrect for a number of reasons.
- Drastically improved the performance of the project directory sidebar, especially with a high number of files.
- Removed the need to use #! /bin/bashin startup and build scripts.
- Improved styles of file menus in projects.
- Cleanup of settings sidebar in projects.
- Default to "dark" theme going forward.
- Ensure sandboxes are upgraded upon page reload, if necessary.
- Improved executable code editor snippets.
- Improved use of PubNub to prevent messages being dropped.
- Start auto-saving Jupyter notebooks every 10 seconds by default to prevent lost data.
- Upgraded to dotnet v2.2 on C# stack.
- Changed term "Lesson" to generic "Content".
- Improved display of images and tables in instructions.
- Improved the "checking" state of task check boxes.
- Improved wording for "next lesson" dialog.
- Reset scroll when changing panes in Creator.
- Update editor instructions styling to better match final result.
- Added emails for more actions and improved all emails (much prettier now!).
- Changed to retro user icons vs identicons.
- Improved account and profile styles.
- Improved user drop down.
- Addressed several memory leaks in project interface.
- Disable snippet runs when the sandbox has been shutdown.
- Fix memory alert font color in content editor.
- Fixed bug in GitHub logins for users with no names.
- Fixed chmod/chown not being applied during sandbox launches.
- Fixed help tour skipping Codey introduction.
- Fixed scrolling bug in code editor for Firefox.
- Removed extra spacing atop videos.
- Removed thin white line that sometimes appeared in projects.
- On-boarded Joe, our new Systems Engineer!
- Improved the speed of a core piece of our infrastructure by 20x (isn't tech fun?) ― soon to be 100x.
- Switched to BEM standard for our CSS.
- Switched to CSS grid layouts.
- Switched to CSS variables.
- Updated documentation and added documentation for Sandbox.
We're excited to announce the release of Next Tech's newest product: Next Sandbox!
The Next Sandbox provides access to real-world computing environments in 2 seconds directly from your browser. Rather than installing the programming language or software you want to use on your computer, you can just click a button and access that language or software right away using a browser-based development tool.
We built Sandbox to solve two key problems we experienced ourselves as developers almost every day:
- Installing software is hard. Even experienced developers can struggle with this and it's something that can get in the way of trying out new ideas. It's nice to have something works out of the box so you can focus on innovating.
- When you do install software on your computer yourself - especially if you just want to test it - it can quickly clutter your environment. Maybe you want to try the newest version of Java, but installing it on your computer could cause issues with your current version.
The Next Sandbox addresses these issues by shifting the burden of installing software off of you and onto us. But that's okay, we've been doing this for years! The Next Sandbox is based on the same infrastructure and interface that powers our product for teaching and learning tech skills, which is used by leading educational companies all around the world.
Here's what a sandbox for the Python programming language looks like when you first launch it:
The Next Sandbox provides access to the same development environment that our content has been delivered alongside for years.
But of course, we added some new special features just for Sandbox 😁
We've added a new section of our site that lets you create and view your sandboxes. We're especially a fan of the page used for creating new sandbox, aptly dubbed the "launchpad":
Inside a sandbox, you can configure a few pieces of its environment:
- Startup Script: The Bash script run when the sandbox first loads.
- Build Script: The Bash script run when the Run button is clicked, but before the Run Command.
- Run Command: The command that is used to execute the program in your sandbox.
Note that these can be (and often are) blank! Sandboxes are often used for things well beyond compiling and executing programs.
The ability to share a sandbox combined with the environment configuration makes for an extremely powerful tool. In just a few seconds, you can spin up a new sandbox, add some code, configure the environment (if necessary), and then send that sandbox's share URL to others.
When someone click a share URL, they're given a copy of that sandbox with its current code files. Check out the Use Cases section below for some exciting ways this can be used!
.devdomains launched, we made sure to jump on nt.dev right away. You can use it to launch new sandboxes right from your browser, for example:
We also own nt.run and have some fun features planned for that coming soon!
We've begun compiling a list of ways you can use Sandbox here. It includes a list of ways it can be used for programming, data science, web development, and in a classroom.
You can check out the docs for Sandbox here.
For a long time, Next Tech serviced only enterprise customers in a "B2B2C" fashion, meaning we sell our products to companies who in turn bundle it up and sell it to their users.
However, over the last six months we've begun to work on building our own users base that get direct access to our content library and now our Sandbox product.
We debated between a subscription and usage-based pricing model for some time, and in the end went with usage-based. Specifically, we now charge $0.01 per minute you are actually on the page ― meaning that you have the page focused ― with a sandbox or lesson open.
You can learn more about how this works here.
Upon sign up you'll also receive $10 in free credits. And you can refer others to earn more!
Note that this does not affect our enterprise pricing model. That is still billed based on the amount of time a code environment is live vs actively used and pricing is negotiated on a per-contract basis.
You can now set your preferred editor theme and keymap from your account preferences. This ensures course activities and sandboxes are always loaded with a consistent style that fits your editor preferences.
These values default to the "dark" theme and the "default" keymap. You can learn more about those in our docs!
We've created some new reports to make it easier for our enterprise customers to track their usage and engagement metrics!
Project Usage Digest Reportshows the number of base minutes, billable minutes, and total minutes for each project in a course per day. It also tells you how many projects were launched that day, the number of users who launched those projects, and the number of times your users launched those projects.
Course User Engagement Reportshows the number of base minutes spent by each user per course per day. It also includes some basic user information, such as email, registration date, and when the user was last active.
These reports are available for download each month as
.csvfiles on your account page.
You can read more about these reports in our docs.
We've released a number of significant improvements for the terminals!
Previously, each new terminal opened spawned a new websocket connection, which is not how websockets are meant to be used. Now, only one is opened for all the terminals on the page.
This fixes a bug that has cropped up intermittently over the years where the number of outstanding websocket connections in the browser would hit its limit because we were spawning too many. Turns out browsers have a fixed maximum number of websocket connections and don't flush them until the browser is restarted!
It also means each new terminal launching takes < 1 second. Click here to launch a Python sandbox and see what that looks like! After your initial terminal loads, just click the
+and select Terminal to start a new one.
And last but certainly not least, terminals now support text wrapping, thanks to the folks at Xterm.js. This means they behave essentially like your local terminal does by reflowing the text as you resize the terminal!
Previously, startup and build scripts needed to include a "hashbang" statement, e.g.:
echo "foo" > /home/nt-user/workspace
Everyone (including us!) forgot to add the hashbang almost all the time, so we checked how these features were currently being used, and turned out 99.98% of the time, these were just Bash scripts anyway.
As such, these scripts are now always run with Bash. Any content that previously didn't use Bash has been updated to do so.
Historically, projects have used the
rootuser with a working directory of
/root/sandbox. We decided to use this user years ago to prevent issues with permissions, and while it worked at the time, we realized that using the
rootuser caused some issues:
- It doesn't accurately portray the real-world situations outside of our environment.
- Many programs refuse to run as rootinitially and require to be overridden to allow it.
As such, we've migrated to a new user called
nt-user(Next Tech user) and working directory at
/home/nt-user/workspace. This user still has
sudoaccess, so they can still do anything
Old content has not been updated to use this new user and will continue to function as always. Future content will use nt-user.
We've launched a referral program so you can share Next Tech with your friends and earn $5 in extra credits each time someone joins with your referral link and activates their account!
Anyone you refer will also receive an extra $5 in credits thanks to you for a total of $15 in credits upon sign up.
You can view your referral URL here.
(note that these credits do not apply to enterprise accounts)
We've improved the performance of the directory sidebar when many files are created or deleted. This has resulted in a 10x speed improvement!
Previously the directory sidebar was re-rendered each time a file was created or deleted. This would cause the web page to become slow or unresponsive when there were many files in the directory sidebar, since it could mean re-rendering it hundreds or even thousands of times.
We've optimized it so that now so that when many files are created or deleted at once, only one re-render is necessary.