I conceptualize, research, design, develop and deploy web-solutions that set new standards in user web experience. Read more...

Available for part-time contract work in Vienna, Austria from the end of March



RSS Latest in the Blog

Using «PHP Quick Profiler» with Ajax Backends

PHP Quick Profiler (PQP) is a small and handy script that makes code reviews easy and painless. The creators describe it as

Given that all reviews check against the same list of requirements, we've found ourselves repeating the same tasks over and over again. We spend a lot of time echoing queries, memory stats and objects to the browser just to see how they are being used in the code. To reduce this repetition, we invested some time creating something we've called the PHP Quick Profiler — we call it PQP for short. It's a small tool (think Firebug for PHP) to provide profiling and debugging related information to developers without needing them to add a lot of programmatic overhead to their code.

One thing it fails to do, however, is to profile ajax-backed requests, which eat up more and more system actions on modern websites these days. A de facto standard in debugging ajax-based applications has always been FireBug — a state of the art extension for FireFox. Thus my attempt to marry the two in order to produce a perfect debugging/profiling couple.

Read On...

Jan. 04, 2010Comments (2)
Posted In: php, programming, profiling, performance


Implementing tree-like comment structures in relational databases

Letting site visitors leave comments on whatever content you present on your site seems like a commonplace feature these days. Not so often, but yet still mainstream, are tree-based comment structures, where users can start an easy-to-follow online discussion.

Over the past 10 years I have seen about a dozen different implementations of variuos comment thread engines in relational databases, the most popular being the Adjacency List Model (recursive) with quite a few mutations implementing various cache techniques. I have also witnessed several smarter approaches, such as the use of the Nested Sets model, some insane implementations of stacks or combinations of the above.

Joe Celko, the mastermind behind much of today's SQL, prefers to use a model known as the “Frequent Insertion Tree” for forum-like structures in his well known book "SQL for Smarties: Advanced SQL Programming", however I do not agree that it is a viable solution to this common programming brainteaser. Joe Celko is suggesting a non-trivial approach to a rather simple problem, moreover it is not the most efficient way to solve it.

Here is my approach...

Oct. 27, 2009Comments (0)
Posted In: programming, trees, databases


Hacking the iPhone / End of Confidentiality

Savvy iPhone users should think twice before jailbreaking their pretty iPhones. What seems like a painless procedure is in fact the end of your confidentiality, as from that point onward anyone sharing the same wi-fi hot spot as you are can read your sms (email, contact data, notes et cetera). Here is how:

  1. Figure out what the IP Address of the target's iPhone is (either use a network scanner, or simply look it up in your router)
  2. Login into the target's iPhone via ssh, this is done by issuing the following command from the terminal ssh root@ip-address, when prompted for the password type in alpine. Voila, you have root (aka the user who can do anything) privileges on the target's iPhone.
  3. The SMS Database can be found in /private/var/mobile/Library/SMS/sms.db, copy this file to your computer.
  4. The file is an SQLLite Database which can be easily navigated with one of the third party tools such as SQLLite Database Browser.
  5. Enjoy.

Sep. 15, 2009Comments (3)
Posted In: unix, iphone, security


Adding PHP Extensions under Mac OS X 10.6

I guess every mac user was waiting for the release of Mac OS X 10.6 Leopard Snow (also known as “Barsik” in cold Russia), and most of us have upgraded the day it hit the shop shelves.

Unfortunately, for the few web developers using this beautiful platform for their work the upgrade was not as clean as promised by apple. After rebooting I've found an unwanted upgrade to PHP, which, I must admit, now has more extensions than the one shipped with OS X before, but is still lacking support for PostgreSQL and WDDX.

It was natural to turn my head towards entropy.ch which has been a safe harbor for anyone working with php on a mac, yet Marc has not yet ported any of his packages to work on 10.6. Not willing to downgrade, I decided to gain control over my system again and walk the path of a real unix Jedi — compile all the necessary extensions myself.

Continue Reading...

Sep. 15, 2009Comments (15)
Posted In: mac, php, unix


InTerra Deluxe Announcement

Every software project goes through a certain life cycle (whatever model you use) which consists of: planning, design, implementation, verification and maintenance. Effective completion of one stage ensures the ease of completion of the stage to follow. Should one make a small mistake somewhere early during planning or design, its consequences could be catastrophic later on during system maintenance, halting the project's evolution and growth.

The original InTerra blog engine has some unpleasant characteristics that make its evolution for the public rather problematic. Unfortunately, back in 2004 I did not have a vision to create a blog engine to be used by anyone but me, thus little thought was invested in the design of the engine's core. Since then, a small weekend project has grown, becoming one of the top-performing blog engines in the world easily holding 50000+ page views on a mediocre shared web-hosting plan. The fan base helped create dozens of skins and a set of useful extensions, yet plug-in developers have always fallen victim from absence of sensible documentation and lack of standardised API. Today, the development of a sensible extension interface and proper documentation are tasks that make little sense, as this would mean rewriting almost the whole engine core, here is why:

  • Although the current engine core uses (to some extent) an object oriented paradigm, one must keep in mind, that in the times of PHP 4 proper OOP was not around. What one can easily achieve today, was simply not possible some five years ago. Thus, most of the main components have to be rewritten to allow easier extension management.
  • As the initial blog machine was developed for personal use only, I decided to go with Pareto's rule and not make an administration interfaces — implementing all admin functions inside the client side templates. Moreover, many of InTerras auto-processed functions have no management interface at all, as there was no space for them on the client side. This has to be changed.
  • The classic engine works in Single Author Mode only, an admin interface shall also allow for user/author management.
  • My initial attempt at categorising content via a set of categories AND tags, made a spaghetti-like structure difficult to understand for the casual user. Categories have to be abandoned as a whole.
  • Lack of centralised file management. The current implementation of file management is, generally, rather weak, allowing for simple file uploads per blog entry only. Files and images are a very important part of any web project and one has to have full control over them.

Hence, I have decided to totally freeze InTerra Classic in its current state and gradually roll out the development of InTerra Deluxe, which shall be documented in this blog to the most complete extent.

Sep. 06, 2009Comments (6)
Posted In: interra



Contact

Thanks for looking. I'd love to hear from you.

Vienna

Mag. Alexey Kulikov

Hamburgerstrasse 6/7

1050

Vienna, Austria

London

Alexey Kulikov, MSc

87 Floral St

WC2E

London, England

General Questions:

me@elance.at

New Business:

biz@elance.at