Ивенты ноября — jsTalks и Mageconf

В ноябре было два интересных события — jstalks и mageconf.

jsTalks прошло 26 ноября в Днепропетровске в клубе Рио. Организатор — фирма Wix, которые делаю систему для сайтоконструктора (напоминает ucoz). Вместо стандартного для таких мероприятий «актового зала» выбрали неплохой клубешник в центре. На входе давали фирмовые баффы, правда качества не очень ;)

Доклады были разного уровня, узнал для себя новое о CoffeScript и KnockoutJS. Сам же рассказывал о клиентской javascript шаблонизации.
По отзывам всем понравилось, особо не скучали, всегда можно было поговорить, и сама обстановка располагала.

@sergebezborodov и @timlar_ua

MageConf прошла 3 декабря в Киеве, в Экспоплазе. На входе фирмовые пакетики, ручки, блокноты — как обычно, всякая дребедень. Проходило в две секции php и magento.

Первый доклад был общим, растянулся на час, но смысл можно выразить словами «magento, классно, x.com, развитие, рост». Крутили промо ролик, как парниша накодил за пару часов шоп в консольном виме на маженте и заработал кучу бабла, улыбнуло.

Сама Magento интересовала не  сильно, пошел на секцию php, доклад был о сервис-ориентированной архитектуре, рассказчик очень волновался, что он хотел донести осталось непонятно. Дальше шли «Взаимодействие с асинхронными системами на php» и «О преднамеренном» программировании», на последнем Виталий Коротун безперерывно тараторил и шутил с залом, в итоге конечная мысль - серебряной пули нет, программирование говно.

Приятный момент, что за лучший вопрос докладчику давали лицензию php storm.

Потом пошли на обед, по заверению организаторов в районе есть масса кафешек, которые в большей части были закрыты (китайскую еду за еду не считаю). В результате дошли до нивок и решили что конференция не стоит гастрита — поехали в центр пообедать и гулять. В итоге, судя по твитам, народу больше нравилось троллить чем слушать.

Те кто были «в теме» после конфы собрались на #YiiBeerAfterParty где отлично провели время, в принципе ради этого и поехали в Киев.

#YiiBeerAfterParty


Преобразование даты формата MySql в JavaScript Date

Часто при разработке фронтента приходится работать с датами на Javascript. В js объекте Date имеется статический метод parse, который может разобрать практически все, но кроме даты формата MySql ’2011-10-21 17:08:00′.

На stackoverflow наткнулся на простое и элегантное решение.

// разбиваем дату на части [ Y, M, D, h, m, s ]
var t = "2010-06-09 13:12:01".split(/[- :]/);
 
// Передаем каждый элемент в конструктор, если время не указано ставим нули
var d = new Date(t[0], t[1]-1, t[2], t[3] || 0, t[4] || 0, t[5] || 0);
 
alert(d);
// -> Wed Jun 09 2010 13:12:01 GMT+0100 (GMT Daylight Time)

Для большего удобства можно добавить новый метод к классу Date:

Date.createFromMysql = function(mysql_string) {
   if(typeof mysql_string === 'string') {
      var t = mysql_string.split(/[- :]/);
      return new Date(t[0], t[1] - 1, t[2], t[3] || 0, t[4] || 0, t[5] || 0);          
   }
   return null;   
}

Автоматическое подключение js файлов в Yii Framework

Если посмотреть js файлы многих сайтов, то, в большинстве случаев, можно увидеть файлы типа scripts.js, main.js, functions.js и т.д. в которых тысячи строк самых разных скриптов, и половина которых скорее всего не нужна на этой странице. Другой крайностью является десятка два подключаемых файлов, которые создают лишнюю нагрузку на сервер.

При разработке приложений на Yii я выработал следующую методику организации js файлов.
Полностью


  • 27.09.2011
  • Yii

Расширяем Active Record в проекте на Yii Framework

Yii Framework предоставляет достаточно функциональный AR для взаимодействия с базой, однако очень часто не хватает некоторой «магиии» для более удобной работы.

В своих проектах я добавил несколько полезных функций в класс, скачать который можно ниже.

Функционал:

  • автоматическое обновление полей даты создания и последнего обновления записи в таблице
  • удобные функции для начала и завершения транзакции
  • трансляция сообщений об ошибке в контроллер
  • автоматическое создание slug записи и поля title

Код на GitHub
Установка:
Положить файл в components или любую другую директорию по желанию. Унаследовать свои модели от класса ActiveRecord.


  • 17.07.2011
  • Yii

Техническая сторона проекта Все бланки

 

 

 

 

 

 

 

Как и любая хорошая идея, идея создания сайта пришла после того, как я пытался найти нужный бланк для сдачи отчетности для ЧП. Стоит сказать, что украинские сборники бланков напоминают сайты конца девятосных годов, где искать приходится браузерным поиском по Ctrl+F. После недолгих раздумий, решил сделать сайт с простым названием «Все бланки» Полностью


Тестирование Javascript кода с помощью QUnit

Еще пару лет назад javascript использовали для различного рода «украшательств», то сейчас на js может быть написано больше половины бизнес логики приложения. С ростом объемов кода встает вопрос о его качестве и соответственно unit тестировании.
Именно о теме тестирования js кода написана хорошая статья «Automating JavaScript Testing with QUnit» от известного разработчика jQuery плагинов — Bassistance (Jörn)


Днипроавиа или украинский сервис

В конце апреля приобрел билет на рейс Бельбек — Борисполь, который осуществляется авиакомпанией Днипроавиа. Взял обычный электронный билет. Сегодня утром приехал в Бельбек, какой то бородатый мужик на входе сообщает, что все рейсы отменены. Сначала подумал что шутит, но объявление приклеенное на дверь развеяло все сомнения. Мой рейс в Дюссельдорф из Борисполя на пол четвертого дня.

Звоню в коллцентр, с вопросом что за хрень? На что примерный ответ «технические проблемы бла бла бла». Решено ехать в Симферополь,  ближайший рейс на который есть надежда попасть — авиакомании Мау в 7 утра, регистрация заканчивается в 6:30. Из Бельбека выехали в 5:40.  Стоит сказать что нестись по 200 км/час по нашим трассам не очень приятно, радует что было утро и пустая дорога. В Симферополе побежал в кассу, была Кийавиа — быстро сделали билет и придержали регистрацию, за что им и спасибо.

Из беседы с менеджером выяснилось, что рейсы отменили по техническим причинам и физически уведомить каждого пассажира им не удалось.  Поиск по гуглу не нашел никаких упоминаний на их сайте информации об отмене, есть пара ссылок по которым говорится об отмене рейсов из-за финансовых проблем Днипроавии, где рейсы из Бельбека не значатся.

Для полноты картины беседа с менеджером

 


isset и array_key_exists — в чем различие?

array key exists

Многие пхпшники недоумевают зачем сделана функция array_key_exists, когда есть обычный isset.
Проверочный код:

$testArray = array(1 =>; 'Первый', 'second' => 'Второй');
var_dump(isset($testArray[1]));            // =>; bool(true)
var_dump(array_key_exists(1, $testArray)); // => bool(true)

Если в массив попадает значение null, то тут сразу возникают отличия в их работе

$testArray = array(1 => 'Первый', 'second' => 'Второй', 3 => null);
 
var_dump(isset($testArray[3]));              // => bool(false)
var_dump(array_key_exists(3, $testArray));   // => bool(true)

В проверках следует применять array_key_exists если в массивах возможно значение null. Поведение isset в данном случае вполне оправдано, исходя из документации: «Determine if a variable is set and is not NULL«.


  • 10.03.2011
  • php

Структура директорий для проекта на Yii Framework

Прекрасное руководство о том, как организовать структуру директорий проекта на Yii. Рассмотрен пример с применением локальной и общей конфигурации приложения.


  • 08.03.2011
  • Yii

array_map_recursive для php

В php, к сожалению, не имеется функции array_map которая могла бы рекурсивно пробежаться по массиву. Но есть кастомное решение, которое нормально работает:

function array_map_recursive($func, $array) {
    foreach ($array as $key => $val) {
        if ( is_array( $array[$key] ) ) {
            $array[$key] = array_map_recursive($func, $array[$key]);
        } else {
            $array[$key] = call_user_func( $func, $val );
        }
    }
    return $array;
}

  • 01.03.2011
  • php