Сложение строковых переменных содержащих цифры.

Что делает?

При сложении двух переменных типа String, содержащих в начале этих переменных цифры, эти цифры складываются.

Пример:


$a = "1500 стр.";

$b = "2500 стр.";

echo $a + $b; // 4000

Возможная проблема при использовании.

Данная особенность языка работает только, если цифры находятся сначала строки, если это не так ($a = количество 1500 страниц), то сложения цифровых частей строки не произойдет, отбрасывается только правая часть.

Применение.

Основная польза от применения это скорость в сравнении с применением регулярного выражения (/[0-9]{1,}/i).  Однако будьте внимательны и применяйте, когда точно уверены, что символов перед цифрами не будет

 
Xo66uT7 2011MySQL, codelifehack

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

Частично скрываем email’ы, которые получаем из БД.

Что делает?

Скрывает часть символов в email, чтобы нельзя было его использовать в плохих целях.

Пример.

SELECT
 INSERT(user_info.email, 3, 4, '...') AS modif_email,
 user_info.name,
 user_info.surname
 FROM
 user_info

Нас здесь интересует строчка:

SELECT
 INSERT(user_info.email, 3, 4, '...') AS modif_email,

Функция (именно функция, есть еще другой INSERT) INSERT заменяет 4 символа начиная с третьего на символы … (три точки) в строке user_info.email. Краткое описание функции INSERT(str,pos,len,newstr)

Возможная проблема при использовании.

Наша замена может попасть на символы которые при замене выдадут полноценный email, пока коллизий не выявлено.

Применение.

Нам нужно построить рейтинг пользователей, но по понятным причинам мы не можем показывать на сайте email’ы наших пользователей.
Нам нужно показать что мы знаем email пользователя (который оставил предложение о продаже на сайте) и при определенных условия мы готовы его показать.
Ну и конечно же ваш вариант.

 
Xo66uT16 Май 2011Новости
Логотип ZFConf

В воскресенье (15.05) побывал на конференции ZFConf. Хочу поделиться своими впечатлениями.

Организация и проведение.

Конференция проходила в Санкт-Петербурге, у станции метро Электросила, что примечательно, место, где проходила конференция, находится в 50 метрах от метро, вышел из него и ты уже на месте. Сам зал просторный, хорошо оборудованный. Для каких целей его использует Ленгипротранс (организация, на территории которой проходила конференция), я не знаю, но по-моему зал можно использовать даже как кинотеатр. Хороший проектор, отличный звук, помогала также хорошая акустика в зале. Все доклады проходили строго по плану, никто чужое время не занимал, никакой суматохи и опозданий докладчиков. На кофе-брейках никаких проблем с едой и напитками не было, возможно дело в сторонней кетеринговой компании, не знаю, но организаторы молодцы.  Вообще вся организация на пять с плюсом.

Доклады и докладчики.

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

  • История разработки собственного ORM
    К сожалению этот доклад я проспал, все таки воскресенье.
  • Воюем за ресурсы
    Алексей Качаев – молодец, сделал конференцию, отличный рассказчик, все четко, ясно и по делу. Алексей выступил с двумя докладами, суммарно говорил около 2-х часов. Сам он участник проекта ZF, поэтому ему было что рассказать. Рассказ был по результатам оптимизации конкретного проекта с примерами и кодом, который Алексей выложил на gihub. Меня как раз интересовала подобная реализация для уменьшения нагрузки. Как представится возможность обязательно попробую.
  • Behavior Driven Development
    Отличный доклад, пища для размышления team лидам и менеджерам, использование актуально в компании в целом или в проектах. Мне как разработчику было интересно конкретное применение и возможности.
  • Разделение труда: Организация многозадачной, распределенной системы в Zend Framework с помощью Job Queue
    Отличный доклад, некая альтернатива использованию метода Алексея Качаева по экономии ресурсов. К сожалению инструмент Job Queue платный, что-то в районе 4к зеленых в год. Альтернативный gearman хорош, но пока без визуальных инструментов, хотя проект развивается. Доклад был с практической точки зрения и по результатам собственного применения в компании докладчика.
  • Как может помочь среда разработки при написании приложения на Zend Framework?
    о чем был доклад неясно, какая связь с ZF, тоже не ясно. Просто мини-тур по основным возможностям PhpStorm, 90% которых сейчас есть в любой IDE.
  • Что такое Sphinx
    доклад слишком поверхностный для тех доклада, опять же непонятно как связан с темой Zend Fw, хотя нужно отдать должное – докладчик отличный, да и ему было что рассказать, судя по общению в кулуарах. Возможно, что конкретно рассказывать, он решал в последний момент. Об этом свидетельствует так же то, что были полностью английские слайды, давно лежащие в запасниках подготовленные для зарубежной аудитории. Хотя с английским у меня проблем нет, но многие термины все же вызывали проблему. Как кто-то справедливо заметил в зале: А можно перевод?
  • Создание REST-API для сторонних разработчиков
    доклад не плохой, но для меня все это было уже известно. Да и доклад был коротким для такой большой темы, кто уже знаком с oAuth (таких в зале было человек 5-10) ничего нового не узнал, кто нет, опять же получил только поверхностную информацию.
  • Гибкая архитектура Zend Framework приложений с использованием Dependency Injection
    Отличнейший доклад от Алексея. Был мини инсайд, Алексей рассказал о планах реализации DI в будущей версии ZF 2.0.

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

Все написанное относится только к моему видению конференции, судя по количеству присутствующих конкретно ZF интересует не так много людей, поэтому, я так понимаю, была цель разнообразить количество участников докладами связанными просто с PHP и хайлоад (Sphinx). Полностью относящихся к ZF докладов было всего 4.
Конференция очень понравилась, хочу еще.

 
Xo66uT5 Май 2011JQuery
jquery

Любой пользовательский интерфейс, даже самый примитивный, сегодня не обходится без ajax запросов. Хорошо когда запросы проходят практически мгновенно, благодаря большой скорости соединения пользователя или по другим причинам, но что делать когда запрос длится очень долго? Нужно как-то сообщить пользователю, что все хорошо, скрипт не повис, отправка данных идет, полет нормальный. Для этого обычно отображают индикатор загрузки.

Используя JQuery.ajax очень легко отобразить и убрать индикатор загрузки когда это необходимо. Для этого существуют 2 события beforeSend и complete, на которые легко повесить соответствующее отображение индикатора.  Ниже я создаю div по событию beforeSend (запрос начался) и уничтожаю его по событию complete (запрос завершен).

div.ds-loading {
 background-image: url("/images/admin/loader.gif");
 background-repeat: no-repeat;
 position: fixed;
 width: 126px;
 height: 22px;
 z-index: 11111;
}
$.ajax({
  url: '/admin/photos/delete',
  data: "photo_id=" + photo_id,
  success: function(){
  },
  beforeSend: function(){
    //создаем div
    var loading = $("<div>", {
      "class" : "ds-loading"
    });
    //выравним div по центру страницы
    $(loading).css("top", ($(window).height()/2)-($(loading).height()/2)).css("left", ($(document).width()/2)-($(loading).width()/2));
    //добавляем созданный div в конец документа
    $("body").append(loading);
  },
  complete: function() {
    //уничтожаем div
    $(".ds-loading").detach();
  }
});

Но что делать, если таких запросов очень много? Вешать на каждый ajax запрос обработчики событий? Благодаря тому, что в JQuery 1.5 добавили дополнительные методы для работы с ajax, стало возможным, легко и непринужденно отобразить индикатор для всех JQuery ajax запросов выполняющийся на сайте, с помощью метода $.ajaxSetup. Просто добавляем следующий код перед началом первого ajax-запроса.

$.ajaxSetup({
  beforeSend: function(){
    //создаем div
    var loading = $("<div>", {
      "class" : "ds-loading"
    });
    //выравним div по центру страницы
    $(loading).css("top", ($(window).height()/2)-($(loading).height()/2)).css("left", ($(document).width()/2)-($(loading).width()/2));
    //добавляем созданный div в конец документа
    $("body").append(loading);
  },
  complete: function() {
    //уничтожаем div
    $(".ds-loading").detach();
  }
});

Теперь нам не нужно вешать обработчики событий на каждый вызов JQuery.ajax, этот функционал теперь преднастроен в каждом вызове.

 
zend_framework

Небольшой lifehack zendhack, по получению списка названий месяцев\дней для отображения в view.

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

Проблема

Я столкнулся со следующей, мне необходимо было вывести список названий месяцев в году, все бы хорошо, но в русском языке названия месяцев могут быть не только в именительном падеже, но и в родительном, в отличие от английского (February, Февраль -> Февраля). А Zend_Framework в результате следующего кода:

$datearray = array('year' => $date->toString("yyyy"), 'month' => '2');
$other_date = new Zend_Date($datearray);
$other_date->get(Zend_Date::MONTH_NAME);

выводит только месяц в родительном падеже.

Решение

Покопавшись в классе Date метода для вывода месяца в именительном падеже я не нашел. Тогда я полез в xml файл с переводом (Zend/Locale/Data/ru.xml) и там увидел, что раздел с месяцами в именительном падеже присутствует. Посмотрев как обычные методы Zend_Date получают информацию из файла с переводом, я нашел способ как можно вывести имя месяца.

Zend_Locale_Data::getContent("ru_RU", 'month', array('gregorian', 'stand-alone', 'wide', $i));

где $i – номер месяца без лидирующего нуля (1..12)
Кстати таким образом можно выводить любые данные из файла с переводом, просто идя по DOM структуре XML файла.