Thinking Man(Image credits)

I am not a web designer. I think of myself as more of a content provider (a blogger to be specific) than a web designer. So, when I decided to move on from blogger to my own web hosting, I spent hours in search of a good content management system. I have worked with WordPress before and I understand that it is a blogging platform (though many argue that it can be a complete and powerful website solution as well), I found some of the features to be rather unsatisfactory. Then there is Drupal, very feature rich but very complicated for the first timer. I read somewhere that it has a steep learning curve but pretty much easier afterwards. Using a third-party solution kind of takes away the amount of control that I can exercise in a self-developed code. So I had this very lucrative option of creating my own website from scratch. I was in a dilemma regarding what to do, whether to go for my own code, or start initially with a third party software like Drupal or Joomla! or perhaps, WordPress. Drupal is good and many plugins have been developed to enhance its functionality, but I seriously don't understand how its menus work. It was really a huge turn off (Not now, I have got the hang of it).

On the other hand learning a new language always brings a fresh perspective to the way we think and methods always transcend language boundaries. I considered the option of putting up a basic site on Drupal and share my development of this new CMS with all of you. My only concern was that I would become too distracted in providing content that I would never write the CMS or even learn a new language. So I went back to the drawing board for a while to learn a new language. I am comfortable in C, so I looked for its nearest relatives in web development, PHP and Python. I like Python more than PHP, but PHP has more resources on web development and seems to be more popular on this front. So, PHP it is for now. Though I would like to make a Python equivalent of the same. Now that I have a fairly good idea of how to go about designing a basic CMS, here we are, on Drupal, talking about a CMS that we wish to develop.

You will see me using (and sometimes misusing) terms like 'Patterns' as in Singleton Pattern, Publish/Subscribe Pattern, Observer Pattern etc. Bear with me, it is my first learning experience with OOPS and by the end of it, I hope to have a pretty good idea of what are the basic concepts of OOPS. I will try to document as many details of the design code here in verbose form as possible, but again, it is solely your responsibility to debate and challenge assumptions. So let me know where I go wrong and make it a social project rather than a demonstration. I am no pro here, you might be.

These tutorials will be organized in the form of a book. The navigation aid will be on the sidebar, from where you can go to various pages that have been published. Though I will try to push a complete page at a time, pages will be updated in case new flaws, or additions that now seem logical are found. Suggestions Open, 'Change' is the only constant here.

Important: A word about code presented in this book section.

The code goes to GIT repository, but individual files, or demonstration files will be provided as direct download links. But, there is one caveat. These links are wrapped in an advertised adfly link, that is in an effort to hire better resources and of course my pocket money which will be used to get better resource, so it is a recursion there. So you have to wait for 5 or 8 seconds if you just need those files. But if you are coding with me, well, the code is scattered on the page. My aim is to promote learning, so if you come with that intention to learn or to help me learn, you don't need advertisements. But if you come for the end products, I think 8 seconds are trifle.

Also, I am lazy when it comes to testing. So, even though I do some premeptive testing with the test cases I can think of, and then those which emerge on a catch as catch can basis, such that the code works under ordinary conditions, there are certain cases which I am totally oblivious to owing to my ignorance. For example, security. I did not know that PDO is not developed in PHP but is a C++ compiled library which is one reason why it avoids SQL Injection (because it takes user input as string and not literally). This was one of the factors I had to step back and rethink of why my CMS was not yet ready. It did not use PDO, and I have a newly found admiration for it.

Before we actually delve into the design and implementation of the CMS, I wish to tell you what I want this project to become and why. I am fascinated with 'analytics': data crunching, probability, and people, in general. We've all heard about tools like 'regression, 'estimation' and other jargon, I've heard-them too. But I want to see them in action, I want to know how we transform data into something more valuable with the help of these mathematical tools. I think that first-hand experience is the best one. I know that there is Google Analytics doing a fabulous job in providing such information, but that is a black box. I like white boxes. I don't like APIs whose source is not available (trust issues :P). Plus, it is a great learning experience. By understanding human behavior, we can become good humans ourselves, if not 'Evil geniuses' :P. Second, I want the design to be closest to obvious and a free style design (but of course, not truly :P). Theming is something I don't understand. So, I intend to leave that to the site owners. The aim will be to provide a lot of granularity in frontend design and robustness in the backend.

The language will be more informal and I will try to be nice in hope that it will encourage healthy conversations and friendships and of course, networking. References will be cited and credits will be given to the deserving. This work is under a creative commons, share alike, non-ported license, so feel free to share the word, but with due credit, or I will haunt you if I find you plagiarizing our content. The code will be released under the aegis of Open Source GPLv2 and LGPL license, where similar conditions are imposed.

I am not well versed in HTML5 but I hope we can build up our repertoire as we proceed and lastly, I am not very aesthetic at coding. I will make things work, but the backend can be ugly, so in case you have an approach in mind, feel free to share it here. You can write directly to me on any or all of the social media platforms linked in the header of the site (but please, don't spam. First impressions often last longer than the person himself.) or you can comment here itself. I am eager to learn from you, and above all, to hear from you.

Now enough with the talking, let's get started!