Blog

One of my goals for the new BeSquishy.com is to make it a content and data services provider. There are several sites that offer hooked like content services, such as Disqus' comment system, and I believe it is the future of content management. A lot of people do not have the time, resources, or experience to set up their own web site and deal with upgrades, backups, and troubleshooting. They often get a hosted solution, settle for a service that doesn't meet all of their needs, or jump from solution to solution trying to find one that will allow their sites to adapt with their changing needs. I, personally, appreciate how many open source solutions there are, but for someone that just wants something they can mold to their needs, it can be a tedious process to narrow down the choices.

What I want to do is split up content services and the data that powers them and offer the two as services. It will start with data manipulation, then ways to create, store, and retrieve data. The idea is to make the data available so it can be used in any way, both server and client side. It will include session management  and act, in a lot of ways, like a remote database. The goal here is to enable someone to build a rich web site from purely hosted data and HTML/Javascript. It could even be a good developer tool for prototyping, as I intend to offer data exporting and ways to backup all of the stored data.

For content services I want to provide interfaces to go with the data, also hosted and available to be used in any way. Much like Disqus offers a hosted comment system, BeSquishy will allow you to hook in content and data that is managed and stored remotely. That's the idea anyway.

BeSquishy isn't online yet, but the true value to the experience I hope to offer through it is it will be open source and open for anyone to contribute to it. I don't plan to charge for it, but if there is enough demand there is a potential for premium services or dedicated support. I think it's the future of content management and so far I've been pretty lucky when it comes to predicting things like that. There are also other things I want to offer through BeSquishy, but they are related to the idea above, in one way or another, and it is way too early to get into those :)

Almost 4 years ago BeSquishy.com was my project of focus, a hosted content management system built on a hybrid of Xaraya and the codebase that would become Clay. I stopped development of BeSquishy.com to further develop Clay into a standalone framework, with the hope of one day building the BeSquishy.com content management system on just Clay. Well, we're not there yet, but BeSquishy.com is coming back in a different way. Clay isn't feature rich enough yet to support a hosted content management system on its own, but it is getting closer. This time around BeSquishy.com will serve as the flagship web site for promoting Clay and will offer services built on Clay, along with other initiatives. It could one day move back in the direction it was once going, but times have changed and so has the way people use the Internet. There are many web sites out there that offer the older BeSquishy-like functionality, although I have yet to find anything close to a full realization of BeSquishy's ambitions; Facebook is probably the closest at this point. This time around BeSquishy will cater more to web developers and open source intiatives it sponsors. 

Starting off I plan for BeSquishy to offer some web services that I feel will make web developers' lives a little easier, some of which are available else where, some are not. BeSquishy will be completely open and anything it offers will be open sourced for collaboration. Everything won't be tied to Clay, although I imagine a lot of the code/initiatives developed through BeSquishy will be included in Clay in one form or another. It will be a separate entity, but will have close ties to the Clay Project as a sponsor.

Between illnesses in my family and a never ending busy work schedule, I am not sure exactly when BeSquishy will makes it appearance. I have a vague idea for a timeline. I have long planned to have clay-project.com online by the end of July, so I imagine BeSquishy.com could show up sometime around that timeframe as well. I plan to create a GitHub organization and begin throwing some ideas in there for the first few web services to offer. I'll keep you updated.

12:17 am

I've been a little sick lately, so i haven't focused on as much development as I'd hoped. I have done some work on Clay, but not a lot to ClayCMS. You can see the latest changes on the project's GitHub page.

The biggest changes have been to the templates system. While creating the MT developer theme, I noticed a few bugs from features I hadn't tested in a long while and some ways to improve the template handling. The templates system has always allowed the theme to override application templates, images, stylesheets, and javascript. The way it was before was a little confusing, so I made it more of a drop in solution. Now the theme has it's own templates, images, styles, and scripts folders, but it can also have an applications folder. The applications folder mimics the applications, using the same folder structure. This will hopefully simplify the learning curve for themes and help a developer recognize if an overridden item has changed in the original application.

I expanded the applications' ability to specifiy which templates to use within their class methods (Component Actions). Before it was done by setting the object property $template to a string of the template name:

$this->template = 'toolbar';

would use the template toolbar.tpl in the application's /templates folder.

You can also use subfolders in the template name:

$this->template = 'includes/toolbar';

would use the template toolbar.tpl in the application's /templates/includes folder.

The new addition (you can still use the string for an in-application template), allows you to set the template using an array. This array allows you to specify a template from another application or from a theme:

$this->template = array('application' => 'blog', 'template' => 'toolbar');

$this->template = array('theme' => 'simplestyle_4', 'template' => 'toolbar');

In both cases above it would use the toolbar.tpl template in the /templates folder of whatever the first key is set to.

I also expanded the application object's template method, allowing a 2nd parameter to override the template origin, template name, and override/supplement data provided in template variables.

$this->template($dashboard, array('application' => 'system', 'template' => 'toolbar', 'data' => array('message' => 'This is overridden from the page template'));

The way this works is $dashboard is an array created from using $this->action() on an application object. The 2nd part, another array, adds to or overrides parts of the array provided by $dashboard. The 'data' array defines a variable $message that can be used in the system/templates/toolbar.tpl template. In the example I made it come from a page template, but any template has access to $this->template() and can include other templates. 

I also created a new API to replace the Pager I made a few weeks ago (the one at the bottom of this page). The old Pager used an application object, while new the Pager uses a static application library (class) that is called as an API. It doesn't create any new objects, like the old one did, and seems to be a little more efficient. Application objects aren't resource hogs anyway, but every little optimization helps.

I updated TinyMCE in the Clay repo to the latest version.

Finally, I worked a little on a code highlighter, so I can show highlighted code in blog posts. I may make it into a TinyMCE plugin, but I haven't decided exactly which route to take yet. I am leaning toward a lighter solution than TinyMCE, perhaps something using HTML5. If I move to a different WYSIWYG editor, I will create an option so you can choose which editor to use. I have managed to get a little work done while being sick, but I'm hoping I'll feel better soon so I can focus on something a little more complex...like the ClayCMS privilege system, blocks, hooks, etc.

I pushed the MT theme today to GitHub. You can browse the theme on GitHub here:

https://github.com/clay/clay/tree/d6a47bddd8e807c97fec2cc5ecdad22cfc3734ae/html/claycms/themes/mt

Keep in mind that is the current tree, so if I push a change you wont see it with that URL.

I'm working on a theme for developers to use as a starter theme. It's going to replace the older Empty theme, which is out dated at the moment. Empty will be renamed and restyled to use the new CSS requirements in ClayCMS (though they are still evolving). 

The developer theme will have a page template that is fairly void, just showing the theme output methods. It will also have a separate page that is the beginning of our theme documentation. I'm building it for Valter to use to get to know the theme system better, but decided I may as well make it a standard feature :)

Side note: documenting code usually shows where there is room for improvement, this is another case of that. I've added a few theme system features to the TODO list since I started documenting the theme.

I've pushed the latest code of ClayCMS to the Clay repository, along with everything that was once in the clay-installer repository. 

CLAYCMS IS ALPHA CODE

Disclaimer: ClayCMS should not be used on a production server! It is considered Alpha (pre-Beta) code and has a lot of work left.

If you want to check it out, head over to the Clay Repository at GitHub.com. If you want to help let me know or fork it and send some pull requests!

Now that I have some help with the project, I will be opening the development and plans a lot more.

Tonight I've deleted a few of the repositories on GitHub for Clay [http://github.com/clay]. I decided the way I was doing it before was going to be too complicated to maintain. Now we have the clay-framework and clay repositories. We also still have mycfsite and mycfplatform, which will be examples of using the Clay Framework and serve as SDKs. 

The clay-framework repository will be used for development of just the framework. 

The clay repository will be used for the development of platforms using Clay Framework and will include the Installer, most stable packages, and additional libraries not included with the Clay Framework.

I'm happy to welcome Valter Lorran as a new developer on the Clay Project. Valter is a Brazilian student and will be working on the Clay Framework (and hopefully more) with me. Awesome news :)

I've been wandering around the Internet looking for Open Source projects to invite to OContext. It's a project and initiative I've started, based on the same idea as my recent blog about Data Strategy and Context. The project is currently hosted on Google Code: OContext.

The project intends to create an open standard for data context in web services. The context is the words that describe the data, so it can easily be recognized and treated properly on any system it is transferrred to or requested from. 

If anyone is interested in joining this initiative, email me at david.dyess AT gmail.com. Just put OContext in the subject so it'll get my attention.

Check out this article about the icons we use everyday :)

"What happens when all the things we based our icons on don't exist anymore? Do they just become, ahem, iconic glyphs whose origins are shrouded in mystery?" - Scott Hanselman

I forgot to list this last night, but I have some experimental code for it already. The Activities app is a stream app that will use Hooks to build a list of users' activities on the site. It will probably start out as an all-in-one list for the site, that can be broken down into individual users. It's the same kind of functionality Facebook started with, except they fed their's too many steroids. Eventually it will use a contacts system to allow users to network. Pretty typical for social networking functionality. 

It's when the REST server comes into play that this app gets more exciting :) More to come on that line of thinking later.

Here are some apps and features I hope to be adding to ClayCMS over the next few of months (or at least working on):

  • Hooks - Most likely part of the Apps application, Hooks will use the Services API to allow apps to share, display, or pull in features of other apps. The Filter app's use of Services will likely be a basis for this application.
  • Forms app - currently there is an API named ClayDO (Clay Data Objects) that I have built a code-level form generator with. It uses the various form elements as objects and allows me to build entire forms from within an application's code. That Form API is a ClayDO object-type, but in the future I plan to extend it into an app that can be used to build forms from the user interface and Hook them into other apps.
  • Objects app - potentially a replacement to ClayDO in the future, it's purpose is to have ClayDO's object relational mapping at the application level for more intuitive use of the UI and APIs.
  • REST - REST is a way to move or manipulate data between systems using simple requests. I plan to build a REST Server and Client into Clay that will allow you to tranfer information between sites and services. The Client will be able to use REST services offerred from other sites, while the Server allows you to open up data to be used in new ways. [This is part of the reason I want to start a Data Context initiative between open source projects - to allow sites built on different software to easily talk to eachother.]
  • Blocks app - I've worked on this quite a bit already, but I have some work to do to keep it in line with my performance goals for ClayCMS. Blocks will be similar to Xaraya's Blocks, but not nearly as complex. They will be more along the lines of mini-apps, more than likely.
  • Pages app - This should be higher up the list, as it will likely come sooner than some of the others. The Pages app will allow you to use a WYSIWYG editor to put whatever content on a full page that you want. It will also have a few prepared pages, such as a contact form, that will fill in some missing functionality until more apps come along. I have considered using the Pages app as a type of navigation tool, allowing you to use Blocks and other Applications within a page (maybe even with shortened URL support). It will be simple at first and I'll build on it from there.
  • Social app - I've worked on this one some. It is intended to offer social tools for other apps to use, such as Facebook comments, content sharing features, post to x social network, and other social networking features.