I made a lot of progress to the base of the Bible app tonight. I have a some ClaySS styling updates that'll be driven by the Bible app, but those shouldn't take very long. Hopefully this week i can finish the menu or get to a good stopping point and get the upgrade ready to deploy. I'll have to do some testing to make sure I havent missed anything, as far as the Clay 1.3 upgrade goes, as well. The Bible site is going to be just the Bible with a search engine at first, then I'll be adding features over time. Hopefully no more than a week or two until i launch it.
The new menu plugin is finally functional as a navbar, i still have to work on the styling for a vertical menu. This plugin has several optional features, including to display the site name, home link, error log link, dashboard link, and user options. Some options will obviously be specific to the menu layout, so more options may be added for the vertical menu. I also plan to have a logo upload/selection option and eventually to add dropdown links.
I added a header plugin group to the theme page templates and the menu is working as expected so far. The reason for so many options is to allow the navbar to be used below the site header or other places on the site, if desired, so it doesn't have to be a single use plugin.
The plugin on my dev build looks and acts exactly like the navbar here, except the links are no longer hard coded into the toolbar template. The toolbar now simply acts as the message center for notifications. Eventually the toolbar will be spun off into a plugin or combined with the menu plugin. Maybe both.
The next step to is work on the vertical styling and add an optional app menu to the app core. The idea there is to allow you to display app features/options in the menu for the app that currently displayed. It'll also allow you to simply load the links for apps without manually adding them one at a time.
I'm making nearly all of the features for the menu plugin optional, because I don't like cookie cutter sites and some of the features will somewhat affect performance.
I've been working on Clay 1.3 again, I've decided to put 2.0 on hold until my business partner is available to help. I have a couple of other sites i want to build with 1.3 in the meantime, so I want to solidify a few features while i have time. I've been working on the menu plugin, which will have horizontal and vertical menu options. My goal is to eventually make the site header customizable by plugins, instead of in the theme, so everything you see at the top of the site will be a part of the menu plugin (optionally).
One of the sites i want to launch is an online bible with commentary. The Bible part is started, but it'll also drive some other features I plan to work on once i get the menu plugin working. It's a site I've wanted to do for years and always got distracted working on something else.
The AF has kept me busy lately so haven't had a lot of time for coding or anything else for that matter. I did try out ApacheBench on Clay 2 tonight. It's a benchmark tool built into Apache. I don't want to mention the results yet, because I need to run some comparison tests against other CMS', but damn...Clay 2 killed it and Clay 1 wasn't all that far behind. Like I said, I want to run some comparisons, but the same benchmarks run on faster systems for WordPress and other popular CMS' aren't even close.
I can tell MySQL connections are my bottleneck, which is probably true for the other tests I've seen, but I ran the tests against a full install of Clay 1 and it still soundly beat them. Once I have time I'll do a match up against the more popular CMS' I've seen benchmarks for just to show a comparison. I can't wait to see what Clay 2 does in a few months, once we finish rewriting the database library and have more optimizations in place. Ironically, my Apache server is setup for development and is quite a bit heavier than I'd run in production.
I'll work on installing some CMS' and when I have time to compile the data I'll put it up here.
I've been really busy lately, so I haven't had time to work on Clay or many other projects. I did manage to get in a little work on Clay 2 this weekend, mostly in the installer. I've rewritten a lot of the configuration handling and cut out quite a bit of almost duplicate code (code that isn't exactly for the same purpose, but functions the same). Once I have the installer working, I'm going to finish Clay 1.3.0 and try to get it on the site.
Since Clay 2 is based on 1.3, instead of 1.1 like we have here, I have to make sure the upgrade path here is compatible with Clay 2. Clay 1.x officially ends with 1.3.x, so the current build of Clay is actually 1.4 (confusing, I know). What that likely means is, eventually, I'll upgrade this site to a pre-2.0 version, but it'll be from the 2.0 repo. That will likely be around 1.7, which is the first planned beta.
I've never managed Clay this way, but it is allowing me to make the next major version really different from the previous, so I'd say it's working. With the changes we have planned and only supporting the latest version of PHP, Clay 2 will be one of the most modern and cutting edge CMS' around.
I have the new template engine working in Clay 2, it's based on the one from Clay 1, but also is fairly different. Clay 1 uses the application object for all templates, including the theme. Clay 2 has it's own class for the theme and templates, which makes the code easier to read and understand context in templates. This of course means, for the first time, there is no backwards compatibility. Clay 2 is already much smaller and uses 1/10 of the memory Clay 1 uses now. Most of that gain is from having smaller application objects and less overhead with a new configuration module.
I've been working on the Clay 1 rewrite to Clay 2. It's going to be significantly different. Clay 1 was rewritten so many times that a lot of spaghetti code crept in over the years. All of that should be resolved and Clay 2 will be much easier to maintain. I'm also dropping a few low-level features, such as the standalone installer and it's packages. I wish I'd known that last month when I converted the Installer to the new front-end, but I'm sure I can transition some of it to the new system, it'll still need an installer.
Clay 2 will be configuration driven, just as Clay 1, so it's mostly implementation changes and not necessarily philosophy changes. I'm still following my own line, it's not a copy of anything else out there. Hopefully it'll work out as planned right now, because I already love the simplicity forming. I thought Clay 1 was simple, but I've been told that was because I lived in it for 10 years. Clay 2 is actually simpler, more modular, and has a smaller footprint.
I will be developing and maintaining Clay 1.3 for as long as is needed until Clay 2 gets here. This isn't one of my year long rewrites without an update, Clay 1 is still alive, I'm just starting on the next chapter as well.
I created a new private repo for Clay 2 today. It will be a complete backend rewrite, with a new file structure, namespaces, installer, and strict types. The frontend will be based on Clay 1.3+, everything else will be touched in one way or another, and it'll like it.
The fan on my aging laptop is dying, so I ordered a new fan and decided to do some upgrades. I've installed SSDs for several people, including my wife's laptop, but I was running an OEM HDD, mainly because the thing just won't die. Well, one of the upgrades is SSD. It's amazing how much faster it is. I'm also doubling my RAM (to 16gb), but it hasn't arrived yet. I'm kind of questioning the need for it now, but I have ran at 80% usage before, somehow. Maybe the upgrades will breathe some new life into some otherwise aging hardware. I should have switched to an SSD a long time ago. I used to always switch out OEM RAM, but when I bought the laptop it was the fastest computer I'd ever owned.
This is the first time in almost a decade I haven't had dual boot with Windows and Linux. I rarely boot to Windows, but I like to have it if I need it. I may just run a virtual machine with Win10 if I need it now.
I bought an external enclosure for my old HDD, mostly intended for backups. No use wasting a drive. If you haven't made the jump to SSD, it's definitely worth it.
Documenting Clay has me thinking about improvements beyond 2.0. I have a while before I get to 2.0, but I like to look ahead; I like to know what I'm writing will eventually look like. Originally 2.0 was supposed to just be front-end updates. I shifted some of the 2.x updates to 1.x because I finished what I had originally wanted to call 2.0 so quickly.
While that all means 2.0 will take a little longer, it gives me an opportunity to make 3.0 even better. For 2.x I will be rewriting a lot of the base classes that make up applications and themes, using their object models more effectively, and recreating a debug layer that will give a developer a better understanding of what is going on behind the scenes. The debug layer hasn't been updated in years and is now only helpful if there is an error. My plan is to give developers a visual demonstration of the data flow and a profiler that gives them insight in how things are working behind the scene.
This will all be possible by moving the data flow out of the current array system and into a central template data object. That move will also shrink the application object and the amount of logic required to determine output. Finally, it aligns better with the features I'm building into 1.x for 2.0 and simplifies template data overall.
I have to finish these docs and 2.0 before I can move on to that, but I should have a good plan when the time comes.
I've been adding documentation to Clay, it's way over due. My goal is to have a readme file in every folder and then a readme file for at least all of the files in the Clay core. I dug up some of my old docs to see if I could use any of them, unfortunately I've rewritten Clay so many times most of them were obsolete.
While documenting Clay I'm also updating code comments and running a generator to document that way as well. I prefer inline comments, which generators don't pick up, so unfortunately it won't replace the need for readme files. It does however give a more verbose view of how Clay works, so I see an advantage to having both.
My goal is to document all of Clay, which will take some time. It'll also give me a thorough code review, so as always, docs are worth the trouble.