I'm doing some upgrade tests this week, so if all goes well, I may be upgrading the site. This is one of, if not, the biggest upgrades I've done on Clay, so I'm not sure what to expect yet. I'm doing the testing locally, so (hopefully) there wont be any downtime. This is the upgrade from Clay 1.1 to 1.3, so if you've been following the blog you have an idea how much work has gone it.
Clay 1 now has over 1200 code commits on github. I've been working on rounding out Clay 1.3 and I'd planned on updating the site today, but I got sidetracked working on the Pages app and then some other things came up.
On my marathon to Clay 1.3, I forgot to update the comments app, so that is what I've mostly been working on lately. A lot of comment systems, that work with as a plugin, create orphanned data when something they are attached to is deleted. Clay supports a delete hook, which resolves that, so I've made sure it is supported by the comments app.
Something interesting I've done lately is hook a plugin to a plugin, by hooking a markdown plugin into comments. It works perfectly, even the update and delete hooks.
Other than those things, I've been working on my Bible app. It is coming along and I plan to put it online when I upgrade to 1.3. It'll also drive a few other apps in Clay 1.3.x, such as categories and pages, maybe even a simple forum.
Finally, I also plan to build a store front app in the not so distant future. I'm not sure what I'll sell yet.
Our story begins like no other: a message is typed on one computer and then sent to another. It wasn't even sent to another person. When Ray Tomlinson sent that first email in 1971, to himself, he began something that has forever changed the world. It was before the Internet, but it was a step, a step among many beginnings that has shaped the digital world in which we live.
Philosophically, every action has an effect, an affect, and a return. We are finite beings and we see the world in a finite plain, but the reality is beginning is infinite and end is infinite. The digital world we live in provides infinite possibilities, but we are so consumed by the finite now, that we lose sight of the beginnings and the ends.
The Internet today is seen as a few conglomerate services provided by seemingly infinite corporations. The Internet is Facebook or YouTube. It's Google. It's Netflix. It's Amazon. I remember when it was Compuserve. It was AOL. It was MySpace. It was Digg. It was Yahoo! We built PHPBB forums for our friends. We built GeoCities web pages. It was infinite, it was beginnings.
We look at what we have today and we think, "this is it, this is what we wanted." Just as we did when we signed into AOL or committed our code to CVS. That wasn't it, it was only what we had. This isn't it either, it's just what we have. The Internet is changing as much now as it ever has, we are infinitely on the cusp of what we want it to be. One day we will look back at the Internet we have now and marvel as much as we can looking back today.
The future of the Internet isn't a single social network. Facebook is not the end, at least not the only end. It's just a beginning of many beginnings. We have come too far for that to be true and we haven't gone nearly far enough. The future of the web is social, just as one of the first beginnings was when Ray Tomlinson sent himself an email across a room.
The inception of the social web is upon us, we are on the cusp of what we want. We don't need a social network to build it, we are the conglomerate, we are the social web and what we build will only be a beginning.
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.