Search
Write a publication
Pull to refresh
11
0
Виктор Павлович Гришко @Yeah

Пользователь

Send message

Разработка через тестирование с Zend Framework и PHPUnit

Reading time7 min
Views4.6K
Проведя последние несколько дней за изучением документации по Zend Framework, я был приятно удивлен новым функционалом, который был добавлен в последнюю версию этого каркаса Web-приложений.
Моей первой мыслью было осознание скорости, с которой взрослеет технология PHP.
Легкость совместного использования Zend Framework и PHPUnit — это, на мой взгляд, одно из наиболее значительных достижений.

Читать дальше →

Использование Delegate и Undelegate в jQuery 1.4.2

Reading time5 min
Views8.8K
jQuery
В комментариях к анонсу версии 1.4.2 было много вопросов по поводу 2-х новых методов, появившихся в новой версии jQuery
Вы наверное слышали, что в jQuery 1.4.2 было добавлено 2 новых метода: .delegate() и .undelegete(). Эти два метода предназначены для тех же целей, что и методы .live() и .die() ссответсвенно, они только используют другой синтаксис.
узнать больше

Накопительная сборка ZF в один файл

Reading time2 min
Views894
В тему объединения PHP-классов в Zend Framework'е (и других, следующих таким же соглашениям наименования и размещения) публикую свое решение, реализующее __autoload с накопительной сборкой автозагружаемых классов.

В нем учтены две известные проблемы:
  1. В файлах содержащих переменную __FILE__ осуществляется подстановка этой переменной.
  2. Обрабатывается случай параллельного выполнения скриптов.

Решение базируется на примере реализации __autoload из книги Дмитрия Котерова по PHP5 и идее описанной тут.
Читать дальше →

Перевод — BoxedIce делится опытом перехода с MySQL на MongoDB

Reading time6 min
Views7.5K
Ссылка на эту статью уже мелькала на Хабре и я столкнулся с интересом к ней. Многие испытали проблемы с освоением оригинала на английском и я решил перевести ее.

Заметки об использовании MongoDB в продакшене


Год назад в июле я писал о том, что мы перешли с MySQL на MongoDB.
Мы запустили MongoDB в продакшене для сервиса мониторинга Server Density. С тех пор прошло 8 месяцев и мы столкнулись с некоторыми вещами.
Читать дальше →

Zend_Db_Table_Select Dynamic Finder

Reading time4 min
Views1.3K
Привет, Хабр! Dynamic Finder

Написал класс, использующий Zend_Db_Table_Select и позволяющий использовать Dynamic Finder в моделях в проектах на Zend Framework. Статья о том, что этот класс умеет, а также ссылка на исходный код предлагаются вашему вниманию.

Что это, зачем?



Dynamic Finder – способ, позволяющий получать данные из таблицы БД, записывая названия искомых полей в виде названия метода класса, а значения этих полей — в качестве аргумента метода. Например, может использоваться в экземпляре класса модели, связанной с какой-либо таблицей БД.

Dynamic Finder позволяет избежать написания ряда методов вида getById(…), getByLoginAndPassword(…), getAllByCountry(…) внутри модели в виде построения полноценных SQL-запросов и выборок. Вместо этого, в данной реализации достаточно подключить Dynamic Finder к модели должным образом, и, далее, программист может использовать эти методы модели непосредственно в контроллере или представлении. При этом реально эти методы в модели вообще не существуют.

Таким образом, экономится время работы программиста.

Dynamic Finder уже был реализован в том или ином виде в различных библиотеках и фреймворках, в частности, в Ruby on Rails.

В данной реализации Dynamic Finder является надстройкой, использующей Zend_Db_Select / Zend_Db_Table_Select, и предназначен для выборок из только одной таблицы.
Читать дальше →

Тонкости использования селекторов аттрибутов в CSS

Reading time4 min
Views35K
CSS может связываться с HTML элементами используя любые из его атрибутов. Вы наверняка знаете о классах и ID. Проверим это в HTML:
<h2 id="first-title" class="magical" rel="friend">David Walsh</h2>

Этот один элемент имеет три аттрибута: ID, class и rel. Для выбора элемента в CSS вы можете использовать селектор ID (#first-title) и селектор class (.magical). Но знаете ли вы, что можно использовать для выбора атрибут rel? Это так называемый селектор атрибута:
h2[rel=friend] {
  /* woohoo! */
}

Читать дальше →

О классификации кода

Reading time4 min
Views1.7K

О, коде

Когда я пишу код, мне нравится отдавать себе отчёт о том, что именно я делаю.

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

В этом посте я бы хотел рассказать о разных типах кода и дать несколько советов, которые помогают мне и ночью перед демой, и при дизайне больших API.

Читать дальше →

TDD для начинающих. Ответы на популярные вопросы

Reading time8 min
Views51K
Исходники проекта написанного с помощью TDD. Visual Studio 2008/C#
Для написания тестов использована библиотека xUnit, для создания mock-объектов – Moq.




На очередном собеседовании, спрашивая о TDD, я пришел к выводу, что даже основные идеи разработки через тесты не поняты большинством разработчиков. Я считаю, что незнание этой темы – большое упущение для любого программиста.

Мне задают много вопросов про TDD. Из этих вопрсов я выбрал ключевые и написал на них ответы. Сами вопросы вы можете найти в тексте, они выделены курсивом.
Читать дальше →

Алгоритм коллаборативной фильтрации

Reading time2 min
Views16K
Коллаборативная фильтрация (англ. collaborative filtering) — это метод, который даёт автоматические прогнозы исходя из наколенной информации о интересах и вкусах пользователей.

Чаще всего можно рекомендовать музыку или книги уже имея какие-то данные о пользователе. Например, Amazon или Ozon запоминают, что я ищу или куда ходил и из этих данных строит мне рекомендацию. Но лучше, чтобы пользователь сам вводил их в свой профиль, можно даже ему рассказать, что у вас эта система стоит и чтобы он сам мог выбирать что ему дать в следующий раз.
Читать дальше →

Cache ресурс для Zend Framework

Reading time3 min
Views2.6K
Всем привет. Сразу хочу сказать что статья расcчитана для тех, кто уже хорошо знаком с данным фреймворком. В новых версиях Zend Framework придумана концепция инициализации компонентов приложения через плагины ресурсов. В стандартной поставке имеется достаточное их количество, но одного я так и не нашел. Таковым является кэш. Побродив по просторам Интернета и не найдя аналогов, я решил написать свой. И так, приступим.

Читать дальше →

jQuery.Tree

Reading time2 min
Views25K
Товарищ caffeine искал плагин к jQuery, который делает дерево с чекбоксами, которые имеют три состояния — установленный, снятый и «чуть-чуть установленный». Не нашел, попросил меня написать. Я написал и делюсь со всеми желающими.
Ой, как интересно

Глубокая трассировка в Internet Explorer

Reading time3 min
Views3.1K
image
После прочтения поста Стива Сойдерса о бесплатном инструменте — dynaTrace Ajax, я был дико заинтригован. Он предлагает полную анализ трассировки в IE6-8, включая JavaScript, прорисовку и сетевой трафик. Я протестировал несколько сайтов, но более интересный результат получил с тяжелым JavaScript'ом в Gmail в IE8.
Читать дальше →

Многопоточное скачивание в cURL на PHP

Reading time7 min
Views35K
В данном топике представлена на мой взгляд удобная и функциональная реализация многопоточного скачивания на cURL для PHP. Возможно кому-то она будет полезна, а мне принесёт инвайт ;)

Скачиванием через cURL не пользовался пусть даже из интереса только ленивый. Будь-то из консоли, либо реализуя код на каком-либо ЯП. Решения блокирующего скачивания одной ссылки валяются на каждом углу сети, к примеру на php.net. Однако, если рассматривать реализации на PHP, то такой подход подчас не подходит ввиду высоких временных затрат на вспомогательные операции ( dns lookup, request waiting и подобные ). Для скачивания большого числа страниц последовательный вариант не приемлем. Если устраивает — дальше можно не читать :)
Читать дальше →

MongoDB — варим хороший кофе

Reading time4 min
Views18K
Введение

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

Сегодня мы поставим MongoDB, ниже рассмотрим свежеиспеченный ХабраЛоггер и пошпионим за главной страницей Хабра в реальном времени.
Читать дальше →

Ошибки конфигурирования nginx (или как правильно писать рерайты)

Reading time4 min
Views100K
Привет, хабралюди!

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

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

Ошибка номер 1, самая фатальная.

Определение города и региона России по IP

Reading time2 min
Views7.9K
И так, 13 Марта, 2009 16:07 появилась следующая новость на данном ресурсе "Долгожданный XML-сервис!!!".

Это событие необычайно меня обрадовало, ещё бы такой сервис на таком ресурсе и сразу ручки шаловливые зачесались!

Буквально через 10 минут был готов простейший код запроса ip, в ходе обсуждений он получился следующим (сделано на curl):

  function getip($GetRIP)
  {
    $data = "<ipquery><fields><all/></fields><ip-list><ip>".$GetRIP."</ip></ip-list></ipquery>";
    
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, "http://194.85.91.253:8090/geo/geo.html");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    
    $xml = curl_exec($ch);
    curl_close($ch);
    
    //echo $xml;
    
    $messge="!<message>(.*?)</message>!si";
    
    preg_match($messge, $xml, $main_ar["message"]);
    
    if($main_ar["message"][1]!="Not found")
    {
      $district="!<district>(.*?)</district>!si";
      $region="!<region>(.*?)</region>!si";
      $town="!<city>(.*?)</city>!si";
      
      preg_match($district, $xml, $main_ar["district"]);
      preg_match($region, $xml, $main_ar["region"]);
      preg_match($town, $xml, $main_ar["city"]);
      
      $ArMain=array("FIND"=>1,"DISTRICT"=>$main_ar["district"][1], "REGION"=>$main_ar["region"][1],"TOWN"=>$main_ar["city"][1]);
      return $ArMain;    
    }
    else return array("FIND"=>0);    
  }


* This source code was highlighted with Source Code Highlighter.


Читать дальше →

Практика внедрения PHPunit

Reading time7 min
Views8.7K
Уже достаточно сказано о пользе автоматизированного тестирования (например, тут и тут), но до сих пор многие так и не пишут тестов. Одна из причин, как мне кажется, в том что предлагаемые способы автоматизации тестирования сложнее чем необходимо для большинства случаев. Сегодня я хочу рассказать о том как это сделано у нас.

Читать дальше

Задача отображения деревьев в MySql. Способ отображения на хранимых процедурах

Reading time7 min
Views14K
Доброго времени суток.

Очень хотелось поднять вопрос о древовидных структурах в MySql. А конкретно о выборках и хранении данных…
Пользователям Oracle и PostgresSQL живется хорошо, в этих БД есть встроенные средства выборки рекурентных данных (см. Иерархические (рекурсивные) запросы).
Пользователям Mysql приходится работать уже с тем, что есть, то есть работа на стороне клиента.
Поскольку эта тема не однократно поднималась, то я попробую рассказать о конкретной задаче и способе её решения.
Читать дальше →

Разбираемся с анимацией в jQuery

Reading time4 min
Views31K
imageЗдравствуйте. Сегодняшний топик я хотел написать о том, что механизм анимации в jQuery не эффективен, создает кучу таймеров, каждый из которых работает по отдельности, что приводит к чрезмерно частой перерисовки контента и сильно тормозит браузер, и хотел описать некоторые приемы написания «правильной анимации». В ходе подготовки примеров я понял, что я ошибался. Механизм анимации jQuery действительно не эффективен, создает кучу проблем, но причины этих проблем вовсе не в создании большого количества таймеров, а в нечте совсем другом, и, кажется, я добился замечательных результатов в устранении этих проблем.
Читать дальше →

JetBrains WebIDE — публичная сборка #500

Reading time1 min
Views1.4K
Квест «идеальное IDE для PHP» продолжается :) За прошедшую с предыдущей сборки неделю стали доступны две наиболее востребованые фичи — PHPUnit и FTP, ну и конечно мы постарались исправить как можно больше ошибок.

IDE
— начальная версия поддержки удаленных хостов — пока что только FTP upload. (Планируется: открытие удаленного проекта, автосинхронизация, SFTP/SSL/всякие cloud storage). Находится в меню Settings — Deploy&Run.
— Новые удобные закладки (F11)

PHP
— начальная версия поддержки PHPUnit (пока только локальный запуск)
— добавлено выведение типов для переменной в «foreach(...)», элемента массива «array[...]» и тернарного оператора "?:"
— добавлены поиск использований (Ctrl-Alt-F7) и переименование (Shift-F6) для глобальных переменных
— исправлены поиск использований и переименование для статических членов класса
— исправлены различные ошибки форматирования кода и комментариев

Загрузка Анонс

FTP PHPUnit

Information

Rating
Does not participate
Location
Харьков, Харьковская обл., Украина
Date of birth
Registered
Activity