I started an article reflecting on Anahita's history and goals. It was supposed to be just a paragraph, but it grew to become an independent blog post. Apparently, I like to ramble on when it gets to talking about Anahita. You can find the published article here:
TL;DR after building a learning management system for an old-school education company, I was inspired to build a more democratic and distributed online learning and knowledge sharing platform. I left my job, focused on my new company, grew a team, got down to coding. At the time we thought social networking was the solution to all humanity's ailments, but then alternative facts, click-bait content, and extremist ideas started spreading around on mega giant social media. After some reflection, we decided to focus on building tools for open science and data. Our goal is to make Anahita the lightest viable unit required to set up a knowledge sharing and collaboration platform. We want brutal minimalism to be at the core of our design philosophy.
So as for the action plan, here is what's happening:
UPDATE: this is already done in Anahita 4.4.0
We are still using some code from Nooku Framework, named Koowa. We're going to merge them all with Anahita framework and take out every bit that isn't being used. We've been doing this quietly in every maintenance release. We expect this refactor to be done in the next couple of maintenance releases.
We are developing an Anahita React app which will be the web-based user interface for Anahita. We are also using the React Material UI to build the user interfaces primarily for mobile users while accommodating desktop users too. A lot of concepts and code used in this app can later be reused in custom mobile or desktop apps for Anahita. Through this process, we are also improving Anahita's RESTful API. The development will continue until we have most of the existing features in the React App, plus some improvements.
In the current codebase, Anahita renders most of the user interfaces in the server side and then it uses JQuery to fetch or post data or animate the user interface elements. JQuery is like stick and stone technology in comparison to React or mobile application development frameworks. We are going to get rid of server-side rendering altogether and remove every bit of library and code in Anahita responsible for rendering HTML pages. The Anahita PHP codebase will only provide a RESTful API to a graph architecture on top of a relational database. This API can be extended by installing Anahita apps. This will further reduce the size of the Anahita code base which is currently around 11MB, but we estimate to be cut to half.
Anahita is a platform and framework. We want it to be specialized enough to function as a graph architecture for developing knowledge sharing apps and services. Meanwhile, we refuse to turn it into a specific product for a specific case scenario and specific target audience. Productization may result in a short-term gain, but it'll take away Anahita's ability to evolve and adapt in an ever-changing environment. With that in mind, we want to build apps and tools that are commonly used by researchers, scientists, and collaborators. For example:
I think there is no need to explain why we need to start using Docker and Kubernetes technologies as well as other continuous integration and deployment tools. Having proper release engineering tools in place will make Anahita deployment easier on cloud computing platforms such as AWS, Azure, or BlueOcean.
Questions, comments, feedback? Let me know in the comments please.