
After a lot of experimentation and rearchitecting, AkashaCMS 0.9 is now available.
Markdown is great for writing content but we sometimes need certain precise HTML. Processing the HTML generated by a Markdown library can give the required flexibility.
Markdoc is Markdown with extensions making it like a template engine sort of.
Live rebuild, rendering Markdown and AsciiDoctor, multiple template engines, in a few lines of code.
While Mahabhuta is the package giving AkashaCMS its server-side DOM processing ability, it is potentially useful separately from AkashaCMS. The new CLI mode for Mahabhuta allows DOM processing in command-line scripts, and could be useful in developing or testing Mahafuncs.
Why limit your blog posts, audio or video to just one website? Creating good quality well structured content (text, audio, video, etc) is a long process. Most content management systems make it hard to reuse content from one website to another. Many of us want the freedom to intelligently reuse content on multiple websites, or e-books, but are prevented from doing so by the CMS. What would "content freedom," similar to "software freedom," or the ability to freely reuse and repurpose content, look like?
TypeScript improves over regular JavaScript by adding compile time type checking, which helps catch certain errors early before you ship code. I'm hoping to improve AkashaCMS quality by moving to TypeScript. Continuing the trial, I've converted Mahabhuta to TypeScript.
TypeScript improves over regular JavaScript by adding compile time type checking, which helps catch certain errors early before you ship code. I'm hoping to improve AkashaCMS quality by moving to TypeScript. As a trial run two modules have been converted.
Drupal is an excellent content management system that serves a long list of major organizations. With an open source CMS (Drupal, Wordpress, etc), what happens when you want to move the content to another CMS platform or use it for other purposes? How easily can you export your content from one CMS and import it into another CMS? In this post we explore converting content held in a Drupal website to be used by AkashaCMS.
It's very convenient when a static website generator can automatically watch the source files, automatically rebuilding any changed pages, and automatically updating a browser tab. Having the web page automatically rebuilt is almost as good as a WYSIWYG editor. Some statically generated website projects require complex directory configurations. A new Node.js package, spun off from the AkashaCMS project, aims to support such complex directory relationships, while automatically watching files in those directories, and emitting events that can drive automated rebuilding of changed or added files.
There's a wide variety of JavaScript/CSS libraries to spiff up the front-end of a website. In some cases we'll use the same CSS/JavaScript on every page if only for consistent layout code. But in some cases we need a library only on specific pages. For example, the GridJS library makes it easy to implement fancy tables with sorting and searching capabilities, but we probably don't want to use it on every page on the site.
In AkashaCMS, the blog-podcast module determines which files are included in a given blog by the layout templates. The layout template turns out to be a useful way of determining the kind of document for each file. In other words, a blog post would use the blog.html.ejs layout template. That assumption works until you start implementing other layout templates, which I've done on the AkashaCMS news blog to correspond to adopting Liquid and Nunjucks templates.
Following yesterdays project, today I implemented support for Nunjucks in AkashaCMS. I also took it a step further and ensured we can use Nunjucks for implementing Partials, and used it to implement some of the core Partials. Nunjucks is a project of the Mozilla foundation, and is a port of the Jinja2 template engine from Python to JavaScript. It has many powerful features, while promising to be very small and fast.
Two ideas, JAMStack and static website generators, are getting attention as a way to simplify website and web application development, while simultaneously being vague unclear marketing terms. Both talk about static assets for website, but what does that really mean? To help decode the vague marketing words, let's examine the technologies, see how they differ, and try to figure out if there's anything important to learn.
AkashaCMS was designed to support multiple layout rendering engines, but I never went beyond implementing EJS templates. The EJS template engine is competent, but there are many other engines with huge capabilities that could potentially be useful in AkashaCMS. I have two thoughts in mind, to bring in more powerful template engines, but to also find which template engine has the best performance. In other words, it's possible to improve AkashaCMS performance by adopting a different template engine.
When presenting code snippets it is useful to have the code highlighted properly. With the Markdown documents used in AkashaCMS it is easy to use code snippets since the Markdown language directly supports this. But sometimes we want to include an external file and have it treated similarly.
WYSIWYG is a useful document editing model, but in an AkashaCMS project there hasn't been a way to do that. The tools for AkashaCMS let us edit Markdown files in a programmers editor, like Visual Studio Code, but then we're left to our imagination as to how the page will look. It's easy to set up a preview mode in an AkashaCMS project using a simple command-line HTML server and an external web browser. But it's not well integrated with the editing experience, and in practice I never did it. There is a Visual Studio Code extension that makes this better offering a good preview experience right inside VSCode.
I'm finally getting around to implementing much-needed tests for the AkashaCMS system. Not only can each module now be quickly verified, it is now easy to test features as they're being developed. The final step is implementation of an automated system (using Jenkins) to run the tests on every push to the repository, and if the version number in package.json has changed to publish the package.
It's helpful on many levels to have an author byline, and author bio, on web pages. Both of these help your readers know who you are and can act to build credibility for a website. Today we have released a new plugin to serve that purpose.
I have put a lot of work into developing AkashaCMS, and have used it to develop several websites comprising thousands of total pages. I often whether the time I spend on developing AkashaCMS is worth it, given the lost opportunity to write content for my websites. AkashaCMS is a reflection of my concern over the energy and resource consumption involved in regular dynamic CMS's like Wordpress or Drupal. Getting good performance on a dynamic CMS requires a virtual private server (VPS), adding to the cost and resource consumption. We should all be worried over the climate change and environmental impacts of our choices, including how we host our websites.
UML diagrams are widely used in software engineering, and I'm working on an AkashaCMS project that's meant to be used for software documentation websites. While looking around I found a Markdown-it plugin to support rendering UML diagrams after placing a small UML descriptor in the Markdown file. It's easy to use, and better yet easy to integrate with an AkashaCMS website.
A major change was made to the AkashaRender and Mahabhuta API's back in March/April. I had held back on publishing an update to these modules but they've been in use long enough to prove their stability. The changes improve configuration files, and make it easier to reuse MahabhutaArray's outside of an AkashaRender project.
For the AkashaRender/Mahabhuta 0.7 release we added a critical API change making it easier to configure Plugin's and MahabhutaArray's. While some of the Plugin's have been updated, not all have.
Setting rel=nofollow or other attributes on outbound links is critically important. Search engines take a dim view of outbound links where there is a monetary gain -- e.g. an affiliate link -- that lack the rel=nofollow attribute. Automatically setting appropriate affiliate referral codes on all relevant external links is important for fully monetizing external links. In this article we'll go over a new package that handles both those tasks. It has an easy-to-use API where HTML enters the processor, and processed HTML is given as a result. The methodology can be expanded to handle approximately a zillion other HTML DOM processing tasks.
Bootstrap v4 has been out for a long time, and it's high time we here in the AkashaCMS project moved forward. I've just gone through the exercise of converting akashacms.com to use Bootstrap v4, and should therefore document what I had to do. It wasn't terribly hard but I think it was harder than necessary, and will study how to streamline the process.
The big goal with AkashaRender is simplifying the content editing experience. Until now that meant encuraging the use of Markdown when editing content, and EJS for writing templates. Markdown isn't the only easy-to-use content format. AsciiDoc is widely used especially in book authoring, and is far more powerful than Markdown.
Initial AsciiDoc support has been added to AkashaRender. This post is being written with the AsciiDoc Renderer, and the AkashaCMS Example website has a corresponding test page.
A purpose of a system like AkashaCMS is simplifying the work of content authors to more efficiently write their content. The task of simplifying work is multi-faceted and can be taken in many different directions.
The task at hand was to collapse the <figure>/<img> combination into a simplified tag.
This combination is the preferred way of presenting images, especially when there's to be a caption.
Yesterday I announced the 2nd edition of Creating eBooks with Markdown and Open Source Tools is available on the Amazon Kindle store, and will be available on other marketplaces soon. I also tangentially talked about the lack of other tools with similar capabilities. It seems from my incomplete survey of the market that software to create EPUB's or static HTML websites usually require either an installed server-side rendering system, or else a heavy-weight WYSIWYG desktop-publishing application.
What the AkashaRender, AkashaCMS, AkashaEPUB system offers is lightweight tools that run on your laptop yet produce websites or EPUB's built using the latest web techniques.
Let's talk about that for a bit.
In June and July, I set about updating the AkashaCMS toolchain to be based on AkashaRender. The AkashaEPUB toolchain also had to change, and that necessitated a new edition of Creating eBooks with Markdown and Open Source Tools. This book is the official guide for using AkashaCMS/AkashaEPUB tools to build electronic books. The major feature addition, despite it being much easier to configure AkashaRender to produce EPUB's, is that you can now publish to both EPUB and Website from the same content.
I haven't found another system to do that - to publish exactly the same content as either EPUB or a Website. Okay, that's not quite right since Gitbook can publish to EPUB, MOBI, PDF or online. However, Gitbook limits you to using their servers which just doesn't make sense. Rendering EPUB's and Websites is a lightweight lightweight enough to run on your laptop. Why use a SaaS eBook-publishing system that ensnare's you into using their server? With AkashaEPUB, you get a light-weight system that can run on any computer, and publish EPUB's or websites.
It's now required that outbound links to sites that pay money (e.g. affiliate marketing) be marked with rel=nofollow. Your visitors might feel comforted being informed that a link leads to an external site, and perhaps to know what site that is.
The akashacms-embeddables plugin has long been a sore thumb, being overly complicated in part because of the wide variety of methods for embedding content from other sites. It may seem utterly simple when you paste a URL into a Facebook or Twitter status message, or a Wordpress blog post, and voila the embedded HTML snippet automatically pops up. Under the covers certain kinds of magic is done with oEmbed and OpenGraph protocols. A couple years ago when I started the akashacms-embeddables plugin that stuff either was immature, or I didn't understand it, or didn't know about it, or something, but the initial versions of the plugin didn't take advantage of those protocols, and instead had lots of special casing and hard-coded understanding of how to construct a Twitter iframe.
Now that the new AkashaRender-based system is published, I wanted to take the opportunity to clean up the akashacms-embeddables plugin. I've found a pair of packages that make retrieving oEmbed and OpenGraph data very nice and easy.
A couple years ago I grew dissatisfied enough with the design of akashacms, the previous processing engine in AkashaCMS. It was a powerful system, with it I built several large websites, wrote a book, and so forth. But its inner structure had grown organically into a bit of a mess. My pondering about what to do led me to implement a complete rewrite. The new rendering engine, AkashaRender, is more flexible and is more sensibly organized. It is also incompatible with the older system.
Over the last week I have deprecated the old akashacms-based system, and have published updates to everything including the plugins and this website. This blog post goes over what's happened.
Mahabhuta can now, with its version 0.5 release, emerge from the shadows of AkashaCMS and serve a useful purpose in its own right. DOM processing in the style of jQuery is now possible in Node.js server applications. The update makes it more feasible to integrate Mahabhuta into applications other than AkashaCMS, including integration into Express applications.
Supposedly selling products via a website and having a shopping shopping cart requires a dynamically generated website using a content management system. But, there are online store services which can be added to any website, even ones built as static HTML files.
It occurred to me, potential AkashaCMS users need a helping hand to start a blog.
In the book I'm writing now, I want footnotes. Therefore repurposing existing code was the order of the day.
The initial version of AkashaEPUB demonstrated the need to hugely simplify book configuration. That's been done.
Pages can now be written as JSON data, that's formatted through a partial into HTML. Pages can now declare their own CSS or JavaScript files.
Achieved a major goal with AkashaEPUB - the guidebook has been successfully uploaded to several online eBook marketplaces.
Since the last news in February, I had the crazy idea to repurpose AkashaCMS to support building EPUB's. That's now finished, and a guidebook has been written.
Major amount of work went on the last two weeks, restructuring AkashaCMS to allow pluggable rendering chains, using it in a Grunt workflow, and generate EPUB files.
Nearly a year in the making, with v0.4.x AkashaCMS is greatly improved, faster, uses server-side jQuery-style DOM manipulations, and more.
The Boilerplate team just released version 5, which has now been rolled into akashacms-theme-boilerplate.
Since Boilerplate forms the basis for AkashaCMS theming, and since they just released version 5, it seems necessary to hold the 0.4.x release to integrate the latest Boilerplate.
Now that AkashaCMS is reaching its 0.4.x milestone, what am I thinking of for the 0.5.x release
On the cusp of its 0.4.x release, AkashaCMS creator David Herron announces the ownership transfer of AkashaCMS to the new AkashaCMS organization.
They say every content management system becomes a blogging platform. Whether or not that's true, it's just become true for AkashaCMS. A new AkashaCMS plugin allows the creation of multiple blogs within an AkashaCMS website.
Since last weekend I've been working on Mahabhuta, the new element-oriented template system using jQuery's API, in AkashaCMS. The goal was to verify that it's useful by attempting to implement some important things with it. I'm happy to say that Mahabhuta is living up to what I hoped. I've been able to reduce complexity in AkashaCMS and the path is clear to perhaps removing the Kernel template engine, because the functionality I sought with Kernel is now available via Mahabhuta.
I'm about to release an AkashaCMS v0.3.x update that represents a major rewrite of the rendering system, and the addition of support to use the jQuery API on the server side to manipulate rendered pages. Both of the changes are major, and take AkashaCMS to a new level of flexibility. First, Website authors will be able to use any combination of template engine on each page, giving better flexibility over page formatting. Second, the capability to use server-side jQuery calls means a different approach to inserting content into the page (versus traditional templates) plus we can implement filters to make broad-based content tweaks.
I hate the typical user experience around viewing and distributing PDF files (or other document formats). Usually we're forced to download the file to our local computer, then view it using a separate viewer. It litters the Downloads directory with old files we've downloaded, and it's somewhat jarring to find yourself suddenly having to navigate to a separate viewer application. Further, an external viewer probably doesn't work well on a mobile device where the operating paradigm is quite different from desktop computers.
Today's web is supposedly about fancy software on both server and client, building amazingly flexible applications merging content and functionality from anywhere. What, then, is the role of old-school HTML websites? In particular, why am I wasting my time building AkashaCMS and not building websites with Drupal?
I'm pleased to announce that AkashaCMS has reached version 0.3.0. This version has been over a year in development and isn't quite what I'd intended, but it is a result of the actual needs during the past year. The primary change was to architect AkashaCMS to support plugins, a move which allowed the creation of several useful plugins.
I'm going to be declaring AkashaCMS 0.3.x pretty soon, and I have an interesting new feature in the works. The idea is to support multi-way extensibility of the processing of a website via the configuration file. The implementation is a form of "plugin" that allows anybody to write a module that extends the configuration of an AkashaCMS site, add new processing functions, hooks at different steps of the processing, and add directories managed by the plugin containing assets, layouts or partials.
Okay, that was pretty dense so let's take it one step at a time.