I publish blog articles every week mainly focusing on the challenges of practical web application development. If you have a question or challenge that you would like to write about on my blog - contact me through my twitter - @romaninsh.

Over the holidays I've been working away on Agile UI to achieve a considerable progress. The dependencies are pretty tangled up, but I've tried to explain them in the diagram above.

If you are not familiar with "Agile UI" - it is an open-source project I'm currently developing with a goal to create "Out-of-the-box UI" that any PHP developer would be able to "use" instead of "reinventing".

Read more..

Disjoint Subtypes in PHP

Published in Blog on 04/01/2017

The pattern of disjoint subtypes has been helping me throughout my PHP career. I started using it back in 2003 [when I was building a web portal] for our schools "computer club" ( However, I later used the approach with commercial projects.

I'd like to tell you more about Disjoint Subtypes approach, what are the benefits of the approach and how it can be implemented and used efficiently in modern PHP.

Read more..

Homemade Replacement for CodeKit

Published in Blog on 22/12/2016

Since I have purchased CodeKit I have been having problems, where it occassionally hangs, consumes too much memory or crashes. I it only to compile JADE/PUG files, so I decided to create my own solution based on some open-source utilities.

I appreciate all the advanced features of CodeKit, but if you are looking for just a lightweight solution to compile your files instantly, then my script will work for you:

Read more..

Untangling Spaghetti Code

Published in Blog on 30/06/2016

A few months ago my oldest web application was replaced after it was in daily use over 15 years unchanged. An extreme case, no doubt.

Most web apps, if not looked after properly, may gradually become more and more difficult to maintain. This gradual erosion slowly changes your application into a bowl of spaghetti code.

What causes deterioration? How to prolong the life of your code? How to make it more maintainable? In this article, I'm sharing some of my findings and future plans that may give you a great solution for the problem.

Read more..

History of Agile Toolkit

Published in Blog on 14/03/2016

Agile Toolkit is my software project that I have started all the way back in 2000 and has been in my care for almost 2 decades now. This projects reflects my desire to simplify life of a web developer and introduce some unique concepts in web development.

What Motivated me to create Agile Toolkit?

Agile Toolkit was created to solve the re-usability problem as I was having while creating series of admin interfaces for a rather simple websites. All of those sites would implement interface where certain type records had to be listed, created, deleted and modified. In a modern days we call this a CRUD (Create, Read, Update, Delete), but back in 2000 this rather new concept. Eventually more modules were added allowing more than the 4 basic actions which resulted in the early name of the framework: "a-modules".

Read more..

Real-life Database example for Agile Toolkit

Published in Blog on 02/02/2016

Agile Toolkit is a PHP web framework with a particularly powerful ORM (Object-relational mapping) engine. This ORM goes much further beyond translating your data records into objects. It is fluent with joins, expressions, conditions and subqueries helping developer to take full potential of SQL engine through object-oriented interface.

To help illustrating some of these features, I have created a new enhancement to the Agile Toolkit Kitchen Sink project. The best part, you can download this project and explore it on your laptop, it's available on GitHub.

For data I decided to use a standard test_db repository, that creates about 300,000 employee records in the database along with 2,8 millions of salary records. The data is relational and can be seen in the following ER Diagram:


Within just 3 hours of coding, I've managed to build an interface where a user can find answers to various questions such as:

  • What is a current salary of a specific employee
  • What was employee salary for a specific date in time
  • What was average employee salary at the time of hiring
  • Who was hired with a largest salary
  • How many employees were working during 1 jan of 1995
  • And many other questions.

The interface for pulling all this data is really simple:


And a LIVE DEMO is also available:

Read my new blog article where I'll look into some of the implementation details, that can be invaluable for you if you want to learn Agile Toolkit better.

Read more..

Announcing split of DSQL from Agile Toolkit

Published in Blog on 29/01/2016

DSQL is a SQL Query Builder of Agile Toolkit - an object-oriented library which helps your PHP application reliably build "SELECT .. FROM .. WHERE .." queries.

DSQL is about to become a stand-alone component. As the part of our Agile Toolkit roadmap we will be moving DSQL, ORM and CSS into their own open-source projects. This change will help us improve the foundation of our framework.

I am looking for open-source enthusiasts who would like to help me with this project. If you would like to help - read my article and fill out simple form at the bottom.

Read more..

Traditionally CSS frameworks have relied on ability to combine multiple CSS classes for widget styling. While one class may specify the name of the widget (dropdown-menu), a supplimentary class (dropdown-menu-right) will define some property such as positioning of a menu:

<ul class="dropdown-menu dropdown-menu-right">

Over the past few years I have worked with Agile CSS which relies very heavily on the concept of modifiers allowing your HTML code to specify size, alignment, paddings, selection of color palette and many other properties. Next example uses Agile CSS to style a span in a format of a green circle with a border:

<span atk-swatch-green atk-padding-xsmall atk-text-baseline-reset atk-border-outline></span>

The heavy focus on "modifiers" makes one of the unique points of Agile CSS - ability to design entirely new widgets with very little additional CSS code and by focusing of re-usability. This approach have proven to be quite effectie at designing custom layouts, custom widgets and custom color schemes.

I know the author of Agile CSS pretty well and in the latest branch he has started using a new way of specifying CSS modifiers through data-XX attributes. This produces a cleaner HTML code and has also reduces size of your style.css file. Here is the HTML example which is using new style modifiers:

<span class="atk-swatch-green" data-shape="circle" data-padding="all-xs" data-text="baseline-reset" data-border="outline"></span>
Read more..

During the last few years I have migrated all my web applications from a classic LAMP server setup into Ubuntu running Dokku-alt PaaS manager. Despite some strong benefits there are very few articles/tutorials on how to configure and get your web apps running. This week I am writing about fundamental differences, benefits and challenges as you try out to build your own PaaS.

Read more..