Latest from the Blog
In April 2019 I cycled from London to Berlin in just 6 days. After 1 day break, I resumed my ride from Poland and reached Riga (Latvia) in another 3 days covering total of 1700km on my road bike.
Although I didn't fully complete my challenge — to cycle all the way from London to Riga in 10 days (2100km), this was an exciting achievement for me regardless.
I've decided to write this blog post with a detailed description. If you want to simply look at the pictures, you can find those at the facebook page: http://facebook.com/LondonRiga2000.
From the start of this year I've been more focused on my cycling. With my new in-door bycicle mount I was able to start cycling during the cold / rainy days.
Being a "geek" I also decided to learn the theory and focus on recording all the possible stats. There are several good articles that focus on CTL, ATL, TSB, but I wanted to rather share my own experience.
Gear, Devices and Software
I've always cycled a little. When I lived in London I had my first road bike for the daily commute. It cost just about £300 on Amazon for my first bike. After I've moved to the Hertfordshire and started enjoying road cycling more I have upgraded to Trek 1.1.
While my cycling equipment has been pretty basic, I have focused on performance data and planning using that to maximize my performance and make cycling more fun.
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".
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" (http://web.archive.org/web/20030204095702/http://team.void.lv/). 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.
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:
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.
Published in Blog on 30/03/2016
Published in Blog on 30/03/2016
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".
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: http://sink.agiletoolkit.org/employees/browse
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.
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.
Published in Blog on 12/01/2016
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>
Published in Blog on 03/01/2016
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.