Exciting Milestones in Toolips Development Journey
Written on
Chapter 1: Project Overview
This year, I've been making significant strides in finalizing an ambitious array of projects.
Introduction
At the beginning of this year, I embarked on the journey to refine my experimental web development framework alongside a pure-Julia notebook editor. While these packages have generally met their intended purposes effectively, they were initially developed over time for various other projects. The main goal now is to streamline the code; whenever I wanted a new feature for Toolips, I would create an extension. Gradually, much of this extension code has been integrated into the core Toolips framework. The latest release aims to consolidate more code within the base Toolips project and enhance its functionality.
This update is a crucial step towards my overarching objectives — Toolips 0.3 now supports about half of the ecosystem I envision for the language. Alongside this release, I will also introduce my other ongoing projects, Gattino 0.1 and Olive 0.1. I have shared this journey before, but as we approach late March, I can confidently say we’ve made significant progress. The initial major phases of this process are now complete, starting with a discussion about ToolipsServables.
Last month, I quietly launched ParametricProcesses, a project that introduces a parametric Worker type designed to distribute computations across various hardware. This is a game changer for Toolips; the web framework now leverages ParametricProcesses for task monitoring and management. While I see potential for improvement in how this package is implemented within Toolips, it appears to be quite effective at a high level for managing different types of processes.
Furthermore, another critical dependency for Toolips, which is still in development for version 0.3, is ToolipsServables. This package offers advanced templating features for HTML and CSS, among other servables, and provides a scripting interface atop the actual WebServer infrastructure that powers some impressive capabilities. ToolipsServables is nearly a comprehensive solution. I’m taking my time to register this project, aiming to use it extensively with Toolips first. I’m also contemplating relocating the ClientModifier interface to ToolipsServables.
Although I am moving beyond this project, actively utilizing it to develop the rest of the ecosystem, I believe it's essential to pause and assess any potential adjustments. One significant drawback is that this unregistered package renders Toolips 0.3 currently unusable unless you have a machine equipped with both developed packages: toolips and session.
Despite the general delays on these projects and the hold-up with ToolipsServables, Toolips itself is nearing completion. I still need to implement tests and possibly revise some aspects of the multi-threading previously mentioned. As it stands, all clients are served through a single thread, which then routes individual requests to additional threads. The challenge here is that we can't serialize a Stream of this nature (HTTP.Stream) to transfer it to a different thread. However, we might manage this if the main thread operates the server rather than executing it asynchronously. This approach would allow us to distribute tasks to another thread, which I consider ideal.
Currently, I am focusing on ToolipsSession. This crucial extension serves as an excellent test case for Toolips 0.3 and its integration with extensions. So far, things are progressing smoothly in this area, and I’m making substantial revisions to the session code. I’m also enhancing garbage collection for both Session and Toolips, leading to a noticeable reduction in memory and CPU consumption overall.
As a brief aside, there are some subtleties to the performance improvements. The server operates much faster, and websites generally consume less memory. However, the initial memory usage when starting the server is higher, which presents an interesting trade-off. Simply loading Julia and Toolips will utilize around 180MB. I found that an asynchronous website I would classify as "moderately complex" could serve 2000 clients in under 7 seconds while using less than 1GB of memory. The garbage collection subsequently reduced this to just over 250MB.
Once I wrap up the new version of ToolipsSession, I will move on to ToolipsSVG. After this extension is finalized, I will begin releasing these packages, starting with ToolipsServables and culminating with ToolipsSVG. ToolipsSVG is a direct dependency for Gattino, a nearly finished plotting library that will also be ready for launch once ToolipsSVG is available. Following that, I’ll dedicate significant time to Olive and the other Toolips extensions. I have also updated the README file to include both the new and old ecosystems, providing a clear comparison of what is being retained.
The Toolips 0.3 ecosystem is much more streamlined, which is advantageous because it reduces the number of new packages I need to create. A significant portion of the code from various extensions has been incorporated into Toolips or transitioned to another Toolips extension that has been upgraded to version 0.3. For instance, the tmd from ToolipsMarkdown is now part of Toolips, and base64img from ToolipsBase64 is included in ToolipsServables. This consolidation enhances accessibility, as I aimed to refine the inclusions and exclusions specifically.
Additionally, I plan to develop a comprehensive documentation website to centralize all project documentation. I have always aspired to produce high-quality documentation, which has been a shortcoming since I never felt ready to invest the necessary time into such an undertaking. However, I am now aiming to launch it soon, and I hope to integrate it with my other projects, Laboratory and OliveCreator, by creating interactive and Olive-based documentation.
Naturally, I have numerous plans. These writings may indeed reflect the musings of a somewhat eccentric individual. Regardless of how unconventional I may appear, this journey excites me immensely. The year has unfolded beautifully thus far, and I am deeply grateful to those who have taken the time to appreciate my work. This recognition means a lot to me! I have plans to roll out some straightforward Toolips tutorials soon, which should lead to even more content. Thank you all for following along! Wishing you a wonderful day!
The first video, On the Verge | Official Trailer | Netflix, offers an engaging glimpse into the upcoming project, setting the stage for what’s to come.
The second video, THROWN - on the verge (OFFICIAL VIDEO), showcases the artistic journey, highlighting the connections and themes explored throughout the development process.