{"id":25,"date":"2026-01-21T14:02:31","date_gmt":"2026-01-21T14:02:31","guid":{"rendered":"http:\/\/www.posadoble.eu\/en\/?page_id=25"},"modified":"2026-01-21T14:55:45","modified_gmt":"2026-01-21T14:55:45","slug":"history","status":"publish","type":"page","link":"http:\/\/www.posadoble.eu\/en\/history\/","title":{"rendered":"History"},"content":{"rendered":"\n<p><a href=\"https:\/\/www.archimedescms.com\/en\/\"><\/a><\/p>\n\n\n\n<p>The name Posa Doble is new, however  Posa Doble is the 5th major iteration of a content management system dating back to 2002.<br>A time in which WordPress didn\u2019t even exist.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CMS 0 \u2013 2002<\/h2>\n\n\n\n<p>CMS0 was the prequel to CMS1 in 2002.<\/p>\n\n\n\n<p>It allowed the import of .DBF files from the POS system for a computer store.<br>It displayed the products on the site.<br>It was possible to see very crude visitor stats (this was before Google Analytics even existed).<\/p>\n\n\n\n<p>But it was not possible to change any other content.<br>You could log in, but that was it.<br>It was my our very first project in PHP 3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CMS 0.5 \u2013 2002\/2003<\/h2>\n\n\n\n<p>I did an internship at a company that built websites.<br>For that company I build the website of the computer store I worked as a weekend job.<\/p>\n\n\n\n<p>This was an entire website with CMS, but built in MS ASP and Access (yes, the old ASP, not ASP.net) and MS Webserver.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CMS 1 \u2013 2003<\/h2>\n\n\n\n<p>The ASP code from CMS0.5 belonged to the company I did an internship for.<br>With the things I learned from CMS0.5, I created CMS1, but in PHP to use on my own websites.<\/p>\n\n\n\n<p>CMS 1 stored data with MySQL (which didn\u2019t even support foreign keys at the time).<br>Some code of CMS1 is still present in some libraries of CMS5.<br>CMS 1 used standard centralised function libraries.<\/p>\n\n\n\n<p>The system was able to manage texts on sites.<br>CMS1 was used for my company in POS systems (programmed in Delphi b.t.w.)<br>CMS1 was a major milestone and foundation for what was to come\u2026<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CMS 2 \u2013 2004<\/h2>\n\n\n\n<p>CMS 2 is the follow-up of CMS1.<br>CMS2 is basically CMS1 but with one key difference: plug and play modules (if you didn\u2019t count the database).<br>Copy module files into the module directory and you where done. (if you didn\u2019t count the database).<\/p>\n\n\n\n<p>I used CMS2 for 20 years, it was <em>that<\/em> good and <em>that<\/em> freakin\u2019 fast.<br>I used to power the sites of my event company and even later my blogs that supported my YouTube channel.<\/p>\n\n\n\n<p>CMS 2 was completely procedural PHP, instead of object oriented.<br>The development was slow, especially modules with a lot of form elements.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CMS 2.5<\/h2>\n\n\n\n<p>In 2003\/2004 I did another internship with a company that builds websites, but this time with PHP.<br>Here I developed the ultimate CMS, which was more a webapplication framework used for CRM.<br>It could do a wider range of things than just manage websites.<\/p>\n\n\n\n<p>Some innovations:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>an application framework instead of a CMS<\/li>\n\n\n\n<li>object oriented php<\/li>\n\n\n\n<li>plugin module system<\/li>\n\n\n\n<li>multi lingual<\/li>\n\n\n\n<li>multiple function libraries (lib_inet, lib_string etc instead of only lib_std &amp; lib_cust )<\/li>\n\n\n\n<li>separation of Model, View, Controller<\/li>\n\n\n\n<li>URL router<\/li>\n\n\n\n<li>connecting to database with objects<\/li>\n\n\n\n<li>template engine with Smarty<\/li>\n<\/ul>\n\n\n\n<p>In hindsight, the framework was good, but way too slow.<br>It did way too many database requests for example.<\/p>\n\n\n\n<p>The source code belonged to the company, so I couldn\u2019t use it.<br>In hindsight: they ditched the framework after a couple of years, so it wouldn\u2019t have been a big problem to use it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CMS 3 \u2013 2010<\/h2>\n\n\n\n<p>From everything that I learned about developing the CRM1 (CMS2.5), I wanted to create the ultimate web application.<br>But I wanted to do it better.<br>I could start from 0 and leave all the mistakes from CRM1 behind me.<\/p>\n\n\n\n<p>Innovations:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>clear model\/view\/controller separation<\/li>\n\n\n\n<li>controller objects<\/li>\n\n\n\n<li>simple but powerful template engine<\/li>\n\n\n\n<li>increased security<\/li>\n\n\n\n<li>URL router<\/li>\n\n\n\n<li>connect to database with objects<\/li>\n\n\n\n<li>SQL builder to allow database independent querying (whether it is MS Access or Mysql, the code is the same)<\/li>\n\n\n\n<li>database field names are dynamically defined with constants<\/li>\n\n\n\n<li>database knows its own fields\/field-types and can create and update database tables, which allows for easier database refactoring.<\/li>\n\n\n\n<li>Multi website management<\/li>\n\n\n\n<li>authentication system (switching on and off permissions based on user roles)<\/li>\n\n\n\n<li>form generation and HTML DOM elements (with support for form errors)<\/li>\n\n\n\n<li>building menus dynamically<\/li>\n\n\n\n<li>caching functionality is standard integrated in controllers, just enable it with 1 line of code<\/li>\n\n\n\n<li>cronjob.php executes regular maintenance tasks<\/li>\n<\/ul>\n\n\n\n<p>A lot of these ideas were implemented before WordPress and PHP frameworks were even a thing.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Slowness<\/h3>\n\n\n\n<p>A website was an application, so I thought, and I approached it as such (a decision that still hunts me in my darkest nightmares).<br>PHP is not a compiled language, thus very slow with object oriented programming.<\/p>\n\n\n\n<p>I took the Java approach: everything was an object!<br>I asked everything I wanted to know from the TApplication object for example.<br>Every object used TObject as a parent, while the benefits where little.<br>TObjectlist and TObjectListHash where basically array into an OOP jacket with unnessary overhead.<\/p>\n\n\n\n<p>Needless to say, but CMS3 was slow, not even a little bit.<br>I started to simplify components, flatten classes, but it was still slow.<br>It did go the same route as the CRM system developed for my internship company.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Complicated<\/h3>\n\n\n\n<p>Another downside arose: the project has become quite complicated and therefore hard to maintain.<br>It was hard to find stuff: what was where.<\/p>\n\n\n\n<p>For example: for security reasons, it separated the business logic (the framework) from the GUI.<br>The idea was that you stored the framework in a private directory on the server, out of reach for the website user.<br>So the framework had it\u2019s own code base, then on top of that, there were 2 websites with their own code bases:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The CMS was a website and<\/li>\n\n\n\n<li>the public website itself was a website.<\/li>\n<\/ul>\n\n\n\n<p>The CMS was meant to run on a subdomain (to prevent bots from adding \u201c\/admin\u201d to the url).<br>The website was meant to run on the \u201cwww\u201d subdomain.<br>The fragmentation of these component was hair-puller to maintain.<\/p>\n\n\n\n<p>From a programmatic and abstraction standpoint, CMS3 was a great project.<br>But the \u201capplication-for-the-web\u201d approach made it weird and awkward to maintain.<br>It just wasn\u2019t \u201cPHP\u201d enough for a web based approach.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Bug<\/h3>\n\n\n\n<p>What made me eventually quit the project was a very annoying bug.<br>I\u2019ve spent weeks on end to find it, but couldn\u2019t, even with xdebug.<\/p>\n\n\n\n<p>It was a header redirection bug that was related to the authentication system.<br>Sometimes it redirected once, sometimes 5, sometimes 3, sometimes 10, sometimes it timed out.<br>Because I could not find any logical pattern in this behavior, the inconsistency made it impossible to replicate the bug.<\/p>\n\n\n\n<p>Header redirection bugs are insanely hard to debug as you might know.<br>It drove me crazy.<br>I was absolutely devastated: by now, I had put years of my life into this project and had nothing to show for.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CMS 4 \u2013 2015<\/h2>\n\n\n\n<p>CMS4 was a short-lived project of a couple of weeks.<br>It was an attempt to salvage all the work that went into CMS3.<br>I started over by reusing components of CMS3, reprogram them (flatten objects, simplify)<\/p>\n\n\n\n<p>But it did not fix its major speed problems: it was still slow.<br>To start over, I need to reprogram so much, I had given up at this point.<br>CMS2 worked for years on my existing sites, it was the only working system I had.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CMS 5 \u2013 2016 \u2013 \u201cArchimedes was born\u201d<\/h2>\n\n\n\n<p>Then it dawned on me:<br>\u201cwhat if I take CMS2 as a basis and start adding components of CMS3 which I know for 100% sure they are fast and do not cause redirection issues.<br>And slowly I can add more and more components to get the functionality\u201d.<br>This had the added benefit: that I am 100% compatible with CMS2 (remember that all my websites were running CMS2 at this point), because it is literally a layer on top of CMS2.<\/p>\n\n\n\n<p>CMS3 was not compatible with CMS2.<br>It worked!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reused components<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>the \u201clib_\u201d procedural libraries<\/li>\n\n\n\n<li>database objects<\/li>\n\n\n\n<li>form generators + HTML DOM elements<\/li>\n\n\n\n<li>language file handling<\/li>\n\n\n\n<li>rendering templates<\/li>\n<\/ul>\n\n\n\n<p>While the system is built from the ground up.<br>You are still able to find old components dating back to the 2010\u2019s, with some CMS2 code even dating back to 2003.<br>The legacy code to support CMS 2, I hope to remove some day.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Some focus points for CMS5:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Speed, speed, speed \u2192 faster than wordpress\n<ul class=\"wp-block-list\">\n<li>flat classes<\/li>\n\n\n\n<li>less database queries<\/li>\n\n\n\n<li>no classes where not needed. (the URL router is a perfect example)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Mobile compatible and response design<\/li>\n\n\n\n<li>PHP 7\/8 compatible.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">New components<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>very simple url router \u2192 by design<\/li>\n\n\n\n<li>login flood detection and login sessions<\/li>\n\n\n\n<li>notification system<\/li>\n\n\n\n<li>form generator with:\n<ul class=\"wp-block-list\">\n<li>auto flood detection<\/li>\n\n\n\n<li>honeypot to prevent spam<\/li>\n\n\n\n<li>CSRF token support<\/li>\n\n\n\n<li>ReCaptcha support<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>database:\n<ul class=\"wp-block-list\">\n<li>support for joining tables<\/li>\n\n\n\n<li>support for encrypting and decrypting database fields<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>rewritten authentication and authorisation system\n<ul class=\"wp-block-list\">\n<li>it supports user accounts: users, user accounts and user roles<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Archimedes was born<\/h3>\n\n\n\n<p>By now, the project was known mainly as \u201cCMS 5\u201d, or \u201cdragonfly\u201d.<br>Regretfully the name \u201cdragonfly\u201d was already in use for a CMS.<\/p>\n\n\n\n<p>Until I stumbled upon the name: \u201cAchimedes\u201d, the Greek mathematician and physicist.<br>At that time, I was in talks with the computer store where I worked years ago about developing a new POS system for them.<br>For a POS system, you have to calculate the total of an invoice.<br>So the name \u201cArchimedes\u201d fits this project perfectly.<\/p>\n\n\n\n<ul id=\"astra-footer-menu\" class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.archimedescms.com\/en\/software-license-standard\/\">Licensing<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.archimedescms.com\/en\/history\/\">History<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.archimedescms.com\/en\/installation-instructions-windows\/\">Installation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.archimedescms.com\/en\/system-requirements\/\">Requirements<\/a><\/li>\n<\/ul>\n\n\n\n<p>Copyright \u00a9 2026 Archimedes CMS<\/p>\n\n\n\n<p>Scroll to Top<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The name Posa Doble is new, however Posa Doble is the 5th major iteration of a content management system dating back to 2002.A time in which WordPress didn\u2019t even exist. CMS 0 \u2013 2002 CMS0 was the prequel to CMS1 in 2002. It allowed the import of .DBF files from the POS system for a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-25","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"http:\/\/www.posadoble.eu\/en\/wp-json\/wp\/v2\/pages\/25","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.posadoble.eu\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/www.posadoble.eu\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/www.posadoble.eu\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.posadoble.eu\/en\/wp-json\/wp\/v2\/comments?post=25"}],"version-history":[{"count":2,"href":"http:\/\/www.posadoble.eu\/en\/wp-json\/wp\/v2\/pages\/25\/revisions"}],"predecessor-version":[{"id":63,"href":"http:\/\/www.posadoble.eu\/en\/wp-json\/wp\/v2\/pages\/25\/revisions\/63"}],"wp:attachment":[{"href":"http:\/\/www.posadoble.eu\/en\/wp-json\/wp\/v2\/media?parent=25"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}