mReschke 2011-04-14
One of my very first programs was of top secret nature. An Apple Basic program that presented a list of options (from 1 to 9 because I didn't know how to accept more than one character). Options like, Access the FBI databank, or view this or that top secret encrypted file. Of course the options didn't really do much, perhaps print an ASCII formated box that had some gibberish a ten year old would write. I remember spending weeks programming one option to display a bunch of random ASCII characters at random points on the screen, much like an old school matrix screen saver.
One of my old VB6 favorites was called qArchive or qInfoKeeper. A windows .exe application that prompted for a username and password, once authenticated a window with a treeview of files and folders on the left (I love treeviews) and a notepad like text editor on the right. You could create documents and save them to folders in the tree view. The files were even encrypted with an unbreakable encryption technology by adding 20 to the ASCII value of each character!
Of course as the years went on my applications became more advanced (slowly), but they all seemed to be centered around data content. Every year I would learn a new language or build a new computer with a new operating system and each time I would start from scratch and attempt to create a new and improved content management system.
Around 2002 I worked as an IT Administrator/Developer for a telecommunications company where I developed a few dozen applications and scripts for them in VB6. Around 2003 they decided that they needed a web application that would allow employees and clients all over the world to login and access tons of the companies information (charts, graphs, records, timeclock, finance...). I had never developed any sort of web application before, though I was very familiar with web servers, database servers, network servers...(they didn't call me a techie for nothing). PHP and perl were the big ones back then and a quick internet search revealed that PHP was the best choice for web development. So I spent a few days and familiarized myself with PHP and HTML and all of the lovely post/get/session/cookie stuff that goes along with it. The application I developed was of decent complexity (~20k lines of code), it integrated with several dozen databases and application API's to obtain its data and metrics. It was hosted on a Windows 2000 server using IIS with MySQL as its back end. I wrote an accompanying VB6 service .dll that generated and automated much of the data gathering on a complex schedule...blah blah I'm rambling on, point is, this is what kicked off my entry into the incredible and ever expanding world of web application development.
Naturally since I now knew a new language and development technology I had to start developing a web based content management system. The early beginnings were rough. I wasn't a very good engineer when it came to optimizing code or organizing it. I didn't even know what object orientation was and I wasn't super good at database concepts, design or queries (so couldn't have been that good). The very first mreschke.com was an absolute piece of junk by my standards today, but at the time, it was the accumulation of my knowledge, and it was beautiful.
I started development on mreschke.com around 2004 (you can still visit the original site here. I was still using PHP and MySQL though it was running on a Windows 2000 box with IIS (nasty garbage). I purchased the mreschke.com domain and used dnsexit.com as my free dynamic DNS provider. As with most applications that I develop it never reached a final version. I was so new to web technology that after coding 5 to 10 thousand lines I would realize that there were much better ways to do what I was doing and after getting sick of trying to update the old code to the new standards, I would simply start over. I am a perfectionist and dealing with inefficient code is not something I enjoy. I'm not quite sure how many versions of mreschke.com I coded before I had what I called mrcore 1.0, must have been several dozen, each ranging in size from 1000 to 5000 lines of code.
Looking back, I can now see the reason I created so many versions was because the core architecture or the foundation of the code was wrong. A good application is based on how well the core of the system is designed. This is the idea behind all those glorious framework and design methods, like PHP Symfony, or the Zend Framework, or Code Igniter or the MVC design pattern. You must have an efficient, quality and organized framework developed to handle the applications basic layers such as database and ORM (object-relational mapping) layers, authentication layers, session layers...and so on.
It took months of writing all those aborted versions of mreschke.com before I finally ended up with what I call mrcore. Even mrcore version 1.0, by my standards today was complete garbage, but it had a "core", a foundation, an adequate (at the time) framework on which I could be content expanding upon. It wasn't full object orientation, but it was close enough that each application or page could utilize the same authenticated user data and use the same page layout (header, footer...no repeated code). I didn't use many objects or classes, but my code was separated very well into organized folders and files for each task (session code, database queries...). Each page would always start by including the core.class.php code. The core was responsible for converting the session data into variables and contained all the main functions used by each page, the bootstrap as some call it. You can read more details about the original mrcore 1.0 by reading this.
The first mrcore (not the first mreschke.com) was around for several years. I didn't code on it too much nor did I add any content to it because like my other attempts, it started to show its weaknesses. Sure it was a multiuser, theme-able system, but creating content was a matter of simply writing a HTML page. There was no standard formatting, no common look and feel to the content itself. If I decided to change my core (header, footer, links) theme, my content was still static. It was a good start, but it was quite inadequate as a place to hold all of my "valuable information". My perfectionism once again controlled my actions. Since my content management system was not "perfect" and too static, I was hesitant to start creating content for it.
Sometime in 2006 I decided my primary goal should be to decide what the actual content should be. I had spent years developing these little content management systems but never really had any content to fill them with. I would build these applications because I have always loved the "idea" of content, but never really had any of my own. 2006 was also the year I started my exciting endeavor into the world of Linux/GNU and at last, I realized I had something to write about; IT & Development tutorials, documentation and notes. So now I knew what I could start writing about and realized my current HTML style content system would never do, this is when I discovered the magic of wiki. I found an open source wiki parser for PHP known as Text_Wiki. So I built my first wiki application into mrcore and called it mrticles. Mrcore 1.0 largely stayed the same, still had the File Manager, still had the Links Manager, but the home page was now my first (id #1) wiki article.
Soon after I had advanced development on mrticles I realized that I rarely used actual files stored in my mrcore profiles home directory, my content was now completely contained in each "article". Files could even be uploaded to each article and be web accessible for wiki linking. I also realized that my mrcore javascript link treeview was never used because any links I needed would be in the wiki. I realized that by adding the wiki include feature, each wiki document would include or inherit a main wiki page that would actually display my left side menus which I wrote to contain links like 'Home', 'Search'... So the old mrcore header and left side menu became obsolete. The entire system was basically ran from a wiki. The persistent page header, footer and menu links were all a series of included wiki articles, an entire website written in dynamic wiki code. The core was simply there to control database layers and authentication, it was no longer used to display much of anything.
I soon realized that the old mrcore 1.0 method of HTML frames was not going to work anymore. Now that I had content, with urls like mreschke.com/mrcore/mrticles/Home I needed to be able to use the URL to share links, and with frames, thats not possible, every page's URL is simply "mreschke.com". So I made yet another effort to redesign the core using divs instead of frames, and to focus on mrticles instead of the Link Manager or File Manager. So mRcore 2.1 was born. It had a very similar look and feel, but mrticles was at the center of attention. Along with the div changes, I had also re-written the entire core into "even better" code with the release of mRcore 2.0.
I used the mrcore 2.1 (div) series website system (still multiuser by subdomain) for a long time. Even though it started getting on my nerves after about a year, I continued to add wiki articles and small code features here and there. The most notable change was to the theme, I removed all blue mrcore header, logo and left side blue menu and used the wiki code to display absolutely everything. Here is a screen shot of the final mrcore 2.x or 3.x (whatever I called it) version:
And when I say mRcore 4.0 is perfect, I mean its perfect relative to my level, it doesn't hold a candle to something like the code that powers MediaWiki, PHPBB, Drupal, Wordpress... or the absolute genius behind frameworks like Symfony and Code Igniter.
Nothing yet.
Very sexy clean class based code. Best code I've ever written. Very efficient and easy. If you need to make a drastic change to how the system operates and flows, it is now very easy todo because of the classes. Example: When I converted to mrCore 2.1 (div's insteat of frames), the change took about 4 hours, even though EVERYTHING changed. The classes made my life easier, which is why I built mrCore 2.0
NO MORE FRAMES!!!! Yes, I am finally free from those awefull frames. Now with sexy Div's governed by style sheets. The skins are now in one folder per skin and no longer use a database. Style sheets rule the core now. Skinning of every application (filemanager, links, main pages, page overrides) are done by the skin. Users have full and complete control of every aspect of mrcore 2.1. Finally, Freedom!!!
Worked around 20 hours 2008-03-28 to 2008-03-30 Stared conversion to valid XHTML 1.0 Transitional. Finished the core (header, links, body). Now \ just need to work on all other apps (I did finish and validate mRticles and started LinksManager).
Standardize all mrcore apps (mostly linksmanager and filemanager) Build Skin chooser Clean Links & Filemanager XHTML Make a class template based on latest knowledge. Use as a template when creating new application. Fix and clean and solidify all .css files for packaging (IE too)
The original mrcore was a frame based, multiuser (by subdomains) PHP framework for building web content. The system was designed to be multiuser. Each user could have their personal site with their own skin and their own content. The url to their site was their username.mreschke.com. So each user was a subdomain (or profile as they were called). The default (blank profile template) application consisted of a blue header frame with the mReschke logo in the left corner. There was a blue left frame, below the header which had a 'home' and 'login or logout' link, along with a very cool, but very poorly designed, javascript tree view of definable links and folders/subfolders. I could control which treeview links every user had by modifying the default.mreschke.com profile. In the default treeview links, there was a 'File Manager' and 'Link Manager' link. These were the two primary applications contained in mrcore. The link manager allowed the user to modify their treeview links and folders. You could create/rename/delete/move folders, and create/rename/delete/move links. You could also specify a custom icon for each link, and its link targer (_top, _blank...). You could also set folders or links to public (the world) or private (only you). The File Manager looked very similar to the link manager, but managed the files in the profiles home directory, rather that the mr_links MySQL database table. Each profiles home directory was web accessible (via IIS as the original time) through their subdomain. So by using the filemanager to edit their index.php file, they could modify their username.mreschke.com home page. Basically, mrcore 1.0 was a web based filemanager, and a very simple "core" frame layout with authentication functions.
I was not very familiar with wikis or blogs at that time, nor was I knowledgeable enough to code one.
The original mrcore did not contain a wiki system, it basically a user editable website which could be customized per subdomain. It was very basic and frame based, written sometime in 2004 - 2005. It was a multiuser system. Each user, or profile as they were called, was also the subdomain. So mreschke.com was the main site, linux.mreschke.com was another site, utilizing the same core (hence the name, mrcore) application. Each subdomain (profile/user) had its own skin and base directory. This allowed me to easily create various site with customized content, though at the time, I had absolutely no content. I built a content management framework with no content to put in it :). Later I realized that I didn't have content because mrcore 1.0 was not efficient or adequate enough for me to waist time writing content.
During the same period as mrcore 1.0 (still original frame based code) I realized that what I really needed was a wiki system, something better than just creating HTML files.
To create content, I built a PHP filemanager, and each user had his own home directory within that domains directory. Using the filemanager, one could create test.html and the page would be accessible at mreschke.com/test.html
blah, blah, fixme
Created around 2007-11-01 ~80% complete on 2007-12-09 Non class based code. Very sloppy beginnings Frame based