Переехал на http://mokevnin.github.com
p.s. Старые статьи останутся здесь.
Ruby, Rails
воскресенье, 3 июня 2012 г.
вторник, 1 февраля 2011 г.
От списков смежности к материализованному пути
Понадобилось перейти с parent_id (все было сложнее, но для простоты опустим) на материализованный путь (MP). Если в кратце то мы начинаем хранить полный путь до текущего узла в специальном текстовом поле значения которого выглядят примерно так '2/5/64/345/3451', при этом сам текущий узел не входит в этот путь.
суббота, 11 декабря 2010 г.
Приготовьтесь выбрать два из трех
Этюд из книги "97 этюдов для архитекторов программных систем". Автор - Билл де Ора.
Иногда ввод некоторого ограничения или отказ от какого-либо свойства улучшает архитектуру, делает ее более простой и экономичной. Желательные свойства обычно группируются по три, но попытки описать и построить систему, обладающую всеми тремя свойствами, как правило, дают результат, посредственный во всех трех отношениях.
Иногда ввод некоторого ограничения или отказ от какого-либо свойства улучшает архитектуру, делает ее более простой и экономичной. Желательные свойства обычно группируются по три, но попытки описать и построить систему, обладающую всеми тремя свойствами, как правило, дают результат, посредственный во всех трех отношениях.
суббота, 20 ноября 2010 г.
Человеческий фактор или «соглашения не работают»
Представьте ситуацию. Вы со своей командой, после очередной итерации, обсуждаете слабое покрытие кода тестами и решаете что с понедельника текущего момента все пишут тесты как для нового кода, так и для всплывающих багов. Это кажется разумным (кто-то вспоминает последний неудачный деплой), все поддакивают и довольные расходятся с мыслью, что ну вот теперь то у нас точно все будет отлично. Приходит время следующего собрания на котором во время вопроса «а как у нас с тестированием» большинство отводит глаза. Результат ясен, все осталось по старому.
Можно конечно попытаться вычислить тех кто этого не делает, выяснить почему так происходит, провести воспитательную беседу) и это даже поможет на какое-то время. А потом пройдет время и все станет по прежнему. Причем те люди которые следуют соглашениям по данному вопросу, в другом вопросе могут делать все по своему и наоборот.
Можно конечно попытаться вычислить тех кто этого не делает, выяснить почему так происходит, провести воспитательную беседу) и это даже поможет на какое-то время. А потом пройдет время и все станет по прежнему. Причем те люди которые следуют соглашениям по данному вопросу, в другом вопросе могут делать все по своему и наоборот.
среда, 10 ноября 2010 г.
27го ноября, Киев. Совместная конференция ZFConf Ukraine & MageConf
27го ноября в Киеве пройдет бесплатная, международная совместная конференция ZFConf Ukraine & MageConf.Цель конференции - объединить лучших специалистов PHP и Zend Framework Украины, России и других стран СНГ.
ZFConf Ukraine – первая в Украине конференция по Zend Framework, проводится в партнерстве с ZFConf Russia и сообществом zendframework.ru. ZFConf Russia была первой конференцией по Zend Framework и прошла в марте этого года в Санкт-Петербурге, Россия, собрав более 200 участников из России, Беларуси, Украины, Литвы и других стран СНГ
четверг, 30 сентября 2010 г.
Счастье для всех, даром. И пусть никто не уйдет обиженным.
В процессе работы над текущим проектом накопилось достаточно много, интересного и не очень, кода с которым хотелось поделиться. Какое то время назад я начал выкладывать некоторые классы на гитхаб. Сегодня я добавил много чего нового и надеюсь кому то это будет полезным. Часть классов покрыта тестами, часть я просто выдрал из кода и толком не проверял. Кое какая документация есть на гитхабе, но ее еще нужно дописывать. Здесь я в кратце расскажу что зачем, а так же иногда буду писать статьи в блог www.wddx.ru описывающие работу того или иного класса.
ссылка http://github.com/mokevnin/zf-extension
Ext_File - толстый компонент от нас с lcf. Это не финальная версия, а скорее прототип того что мы хотим на zf2. Еще остались не разрешенные вопросы, но в целом компонент значительно мощнее и гибче текущего Zend_File. Я собираюсь в этом месяце написать большую статью на хабр о проделанной работе (с вариантами использования) в надежде получить фидбек и заинтересованность zf сообщества.
Ext_Form_Element_File - используется вместе с Ext_File
Ext_View_Helper_Breadcrumbs - очень простые и юзабельные хлебные крошки (порт рельсового плагина)
Ext_Webdav_Client - клиент для работы с вебдавом, пока просто расширяет Zend_Http_Client и добавляет новые глаголы
Ext_Filter_Tidy - фильтр tidy (нужно доделать передачу опций фильтрации)
Ext_Controller_Action_Helper_Theme - поддержка тем (смена шаблонов)
Ext_Controller_Action_Helper_Di - внедрение зависимостей через аннотации
Ext_Controller_Action_Helper_Check404 - проверка на пустоту (выбрасывает 404 когда нужно)
Ext_View_Helper_Short - укорачивает текст до нужного размера ( с фильтрацией и поддержкой целых слов)
Ext_View_Helper_Qf - http://www.wddx.ru/2010/08/blog-post.html
Ext_View_Helper_Inner - нужен в циклах вьюх для того чтобы проверить что я нахожусь внутри блока. Используется, например, для расстановки сепараторов между элементами.
Ext_Db_Adapter_Pdo_Pgsql - эмуляция вложенных транзакций. Мы используем в тестах.
Ext_Application - поддержка локальных конфигов (для каждого разработчика) и удобная загрузка
Ext_Db_Table_Abstract - пара тройка полезных методов и переопределение select row rowset
Ext_Db_Table_Row - полезные методы и findParentRow теперь делает один запрос для всего набора в котором был этот row. То есть теперь можно в цикле, который проходит по набору, делать findParentRow и в реальности будет выполнен один запрос к базе для всего набора и сохранен внутри.
Ext_Db_Table_Rowset - набор полезных методов для различных выборок из набора и представления данных в более удобном виде
Ext_Db_Table_Select - http://habrahabr.ru/blogs/zend_framework/98877/
Сразу скажу что там многие вещи нужно причесывать, но пользоваться можно уже сейчас. Буду рад вопросам и предложениям и критике.
ссылка http://github.com/mokevnin/zf-extension
Ext_File - толстый компонент от нас с lcf. Это не финальная версия, а скорее прототип того что мы хотим на zf2. Еще остались не разрешенные вопросы, но в целом компонент значительно мощнее и гибче текущего Zend_File. Я собираюсь в этом месяце написать большую статью на хабр о проделанной работе (с вариантами использования) в надежде получить фидбек и заинтересованность zf сообщества.
Ext_Form_Element_File - используется вместе с Ext_File
Ext_View_Helper_Breadcrumbs - очень простые и юзабельные хлебные крошки (порт рельсового плагина)
Ext_Webdav_Client - клиент для работы с вебдавом, пока просто расширяет Zend_Http_Client и добавляет новые глаголы
Ext_Filter_Tidy - фильтр tidy (нужно доделать передачу опций фильтрации)
Ext_Controller_Action_Helper_Theme - поддержка тем (смена шаблонов)
Ext_Controller_Action_Helper_Di - внедрение зависимостей через аннотации
Ext_Controller_Action_Helper_Check404 - проверка на пустоту (выбрасывает 404 когда нужно)
Ext_View_Helper_Short - укорачивает текст до нужного размера ( с фильтрацией и поддержкой целых слов)
Ext_View_Helper_Qf - http://www.wddx.ru/2010/08/blog-post.html
Ext_View_Helper_Inner - нужен в циклах вьюх для того чтобы проверить что я нахожусь внутри блока. Используется, например, для расстановки сепараторов между элементами.
Ext_Db_Adapter_Pdo_Pgsql - эмуляция вложенных транзакций. Мы используем в тестах.
Ext_Application - поддержка локальных конфигов (для каждого разработчика) и удобная загрузка
Ext_Db_Table_Abstract - пара тройка полезных методов и переопределение select row rowset
Ext_Db_Table_Row - полезные методы и findParentRow теперь делает один запрос для всего набора в котором был этот row. То есть теперь можно в цикле, который проходит по набору, делать findParentRow и в реальности будет выполнен один запрос к базе для всего набора и сохранен внутри.
Ext_Db_Table_Rowset - набор полезных методов для различных выборок из набора и представления данных в более удобном виде
Ext_Db_Table_Select - http://habrahabr.ru/blogs/zend_framework/98877/
Сразу скажу что там многие вещи нужно причесывать, но пользоваться можно уже сейчас. Буду рад вопросам и предложениям и критике.
суббота, 4 сентября 2010 г.
Named scope для Zend Framework
Работая с базой, постоянно приходится писать множество методов поиска. Вот типичный сценарий:
Предположим, что нам надо выводить список пользователей на сайте. Вначале это может быть так - $user_table->fetchAll(). А если нужно выводить только девушек? Напишем метод getFemaleUsers(). А только тех, кто не забанен и имеет аватарку? А вывод в админке только девушек, но без учета статуса пользователя?
В конце концов мы получим вагон методов, которые частично друг друга перекрывают или вообще делают одно и тоже, а различается только сортировка. А ведь их еще нужно тестировать...
Предположим, что нам надо выводить список пользователей на сайте. Вначале это может быть так - $user_table->fetchAll(). А если нужно выводить только девушек? Напишем метод getFemaleUsers(). А только тех, кто не забанен и имеет аватарку? А вывод в админке только девушек, но без учета статуса пользователя?
В конце концов мы получим вагон методов, которые частично друг друга перекрывают или вообще делают одно и тоже, а различается только сортировка. А ведь их еще нужно тестировать...
Подписаться на:
Сообщения (Atom)