stoimen.com/blog

web developing

Archive for January, 2010

What are validators?

In very very breve these are methods which can validate some data, usually user input, against some specific rules. Imagine there’s a web form that is always checked for empty fields or some fields that may contain valid e-mail addresses. This is so common that became everyday routine to almost all of us. However smart developers make abstractions that help them reuse all this functionality. Even smarter developers make use of frameworks. And for those of you, using Zend Framework, there’s no need to write most of the common used validators, simply because they come with the framework itself.

Technically you’ve various validators in zend, such as Zend_Validate_Alnum, Zend_Validate_Email or Zend_Validate_Regex. All these are extremely useful when it comes to automatic, bullet proof validation, but I’m going to talk more about one specific validator.

Zend_Validate_Db_RecordExists

Although the implementation is nothing more than just a chunk of code and doesn’t pretend to be difficult, the idea of such validator is genius indeed. It really helps you do some amazing job.

Image you have to check some database record existence. Then comes in help this validator. In fact I’m pretty sure almost everyone has experience with such kind of task. Simply because the registration process almost always requires it. When you try to register new user you more often check for the username existence. Although you may solve the problem with other technique by catching the exception the database is throwing for duplicate entries, this should be assumed just as an example.

I’m pretty sure this validator can be really useful in many occasions!

  • 0 Comments
  • Filed under: zend framework
  • CSS default position value

    position:absolute?

    Recently I was working on a problem where some DOM elements inherited the absolute position from their ancestors. Well this is pretty rare, but however it happens from time to time. If you’re wandering, as I was, how to disable this and to call the default property value just stop hesitating. The default property is static. So you can simply write:

    #element_id {
       position:static;
    }
  • 0 Comments
  • Filed under: css
  • What better example than that coming both from YouTube and Vimeo. Although video tag is not supported except under Safari and Chrome, that’s the future everyone’s going to embed sooner or later.

    And if these “big players” are going that way, don’t hesitate to follow them! HTML5 is really what we as web developers were waiting for so long and even all of the problems during its standardization process it’s really cool there will be tags like video.

    What YouTube is doing today, perhaps will seem normal to everyone tomorrow. However there are some questions still with no answer, as where the flash possibility to add ads into the player is going?! But we’re about to see great things from these two sites!

    Just check out these two links:

    Youtube HTML5

    Vimeo

    Although the documentation of Zend Framework is one of the most well structured documentation I’ve ever read it happened to me to stuck into it. And that happened exactly when I tried to use the date component of ZF – Zend_Date.

    Why I’d prefer Zend_Date?

    We all know what the date function of PHP is, and what it does. It has reach set of formating string that help you do the job but as I’m working mostly on multilingual projects almost every project needs multilingual dates, and more or less nobody wants only numbers into the dates. And all this is pretty natural, instead of using the simple

    01.01.2010

    format, which beside it’s natural ugliness is not clear. Because as you may know in the US this can be understood as month.date.year, while in Europe this is date.month.year. And when it comes to dates like 02.01.2010 this can be really frustrating.

    Beside this ugly format, you can choose to format your dates either with:

    1 January 2010 or 1 Jan 2010

    which is clear enough, but it’s only for english speakers. You know that in a spanish speaking country you should format the same date as:

    1 Ene 2010

    where “ene” means enero – january in spanish. How should you overcome this natural PHP problem?

    Well the answer is by using Zend_Date

    The problem I found in Zend_Date usage is that the native copy/paste technique from the doc page doesn’t seem to work. What the doc page says you is:

    // setup the default timezone
    date_default_timezone_set('Europe/London');

    and than you can simply request a date with:

    $date = new Zend_Date(‘2010-01-02’);
    echo $date->get('d MMM yyyy');

    where this should print 1 Jan 2010.

    It’s a shame that this doesn’t work. The good part is that this problem can be overcome very simply. You just need to setup some more things just before calling the get method.

    First setup a cache mechanism where you can cache the date locales. This is really good practice because it speeds up the framework when dealing with dates. Just add those lines after the default timezone is set:

    // setup the default timezone
    date_default_timezone_set('Europe/London');
    
    $locale = new Zend_Locale(‘es_ES’);
    Zend_Registry::set('Zend_Locale', $locale);
    
    $frontendOptions = array(
    		'lifetime' => 600, // 10 minutes
    		'automatic_serialization' => true
    );
    
    $backendOptions = array(
                    'cache_dir' => '../cache/'
    		);
    
    // getting a Zend_Cache_Core object
    $cache = Zend_Cache::factory('Core',
    		             'File',
    		              $frontendOptions,
    		              $backendOptions);

    First you setup the Zend_Locale – a locale for the entire application and set it up in this example for spanish, than setup the cache mechanism.

    This is a typical cache setup for Zend Framework. If you’d like to dive more into cacheing you can checkout the doc pages for Zend_Cache.

    After these lines just setup Zend_Date options with:

    Zend_Date::setOptions(array('format_type' => 'php',
                       'cache' => $cache));

    This is really what you need to do to start. All these lines of code you may place into the bootstrap.php or into some front controller plugin.

    Then you can call Zend_Date’s get method wherever you’d like in every controller you need it!

  • 0 Comments
  • Filed under: zend framework
  • Array merge in JavaScript

    What makes array to merge in JavaScript?

    Actually there aren’t so many array functions in JavaScript. As you know you can join, sort, etc. which methods are pretty basic. What I’d like to do is something similar to PHPs’ array_merge and than array_unique.

    With JavaScript that seems pretty impossible. You can merge them with the .concat function as in the example bellow:

    var a = [1,2];
    var b = [3,4];
    a.concat(b);

    this gives you array with four elements. But when it comes to trim all the duplicates as it’s array_unique in PHP, well that’s really impossible. You’ve to do it by yourself, and I don’t thing this is the best technique. That slows down the code and you should avoid it!