Відвідализ Ігорем на вихідних конференцію ЛОБ 2019. Пошкодував, що не взяли з собою маркетологів, бо контент більшою частиною був про маркетинг. Тому оцифровую конспект, щоб зашарити його одразу усім. Continue reading
Category Archives: Work
Проблема з capifony
Якщо в вас виникла схожа трабла
cap deploy /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:191:in `find_file_in_load_path': no such file to load -- (LoadError) from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:179:in `load_from_file' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:89:in `load' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:86:in `block in load' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:86:in `each' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:86:in `load' from Capfile:3:in `load' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:93:in `instance_eval' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:93:in `load' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:180:in `load_from_file' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:89:in `load' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:86:in `block in load' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:86:in `each' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/configuration/loading.rb:86:in `load' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/cli/execute.rb:65:in `block in load_recipes' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/cli/execute.rb:65:in `each' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/cli/execute.rb:65:in `load_recipes' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/cli/execute.rb:31:in `execute!' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/lib/capistrano/cli/execute.rb:14:in `execute' from /home/stfalcon/.rvm/gems/ruby-2.1.1/gems/capistrano-2.15.5/bin/cap:4:in `' from /home/stfalcon/.rvm/gems/ruby-2.1.1/bin/cap:23:in `load' from /home/stfalcon/.rvm/gems/ruby-2.1.1/bin/cap:23:in ` |
$ rm ./Capfile $ capifony . |
PS. Тепер буду вести цей блог виключно українською або англійською.
Программисты не любят KISS?
Картинку взял из статьи “Будьте проще (и к вам потянутся люди)“. Статью можно почитать.
Вот один из свежих примеров
На одном из проектов сделали доску объявлений и там есть фича “Пожаловаться на объявление” (вдруг в тексте что-то противозаконное и т.д.). Фича работает через ajax — т.е. нажав на ссылку “Пожаловаться” пользователь видит всплывашку аля “Спасибо! Мы рассмотрим вашу жалобу.”.
Заметка по VichUploaderBundle
Долго мы мудохались (по другому не скажу) с парой-тройкой багов, которые полезли в результате использования VichUploaderBundle. И главное мы к ним возвращались по 2-3 раза на разных проектах за последние полгода :).
Symfony’s form component cleanup
Наименее костыльное решение предложили здесь. Чтобы постоянно не прописывать data_class в формах я добавил его в DefaultOptions для FileType и отправил PR в Symfony2. Чуть позже доделаем тесты и думаю PR примут.
The file is not updated if there are not other changes in the entity
Это хитрый баг, который возникает когда в форме меняется только файл. Словили его когда решили обновить логотип для спонсора на http://fwdays.com. Сегодня я выделил время на дебаг и понял, что нормальным путем проблему не решить. Смотрите сами:
... // биндим данные на форму // - запускаем дата трансформеры // - дергаем сеттеры сущности (setFile и др.) $form->bind($request); // валидируем форму // в $file должен быть объект загружаемого файла (UploadableField), чтобы пройти валидацию if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); // готовим сущность к сохранению в БД // вычисляется хеш объекта и определяется его состояние (новый, обновленный и т.д.) // здесь дергается хук preUpdate (обновление) или prePersist (новая сущность) и файл физически перемещается в место назначения, но // !! если нужно просто обновить файл, то проблема т.к. имя файла (которое хранится в БД) ещё не изменилось, а preUpdate запускается только если в сущности есть изменения !! $em->persist($entity); // сохранение данных $em->flush(); ... |
Получается, что нужно зааплоадить новый файл и засетить его имя в сущность до того как отправить сущность в persist() менеджера сущностей. Иначе Doctrine не видит изменений в сущности, не дергает хук preUpdate и аплоад средствами VichUploaderBundle не происходит :(.
Спасает костыль от автора бандла, который предлагает делать в сущности поле updatetAt и обновлять его если в сеттер файла приходит что-то новенькое:
public function setFile($file) { $this->file = $file; if ($file instanceof UploadedFile) { $this->setUpdatedAt(new \DateTime()); } } |
Как-то так 🙂
Debian & “Transport endpoint is not connected”
Такая проблема возникает время от времени. Поэтому записываю решение, чтобы не опять искать.
Если работа системы была завершена некорректно, то в системе остается файл блокировки mongodb “/var/lib/mongodb/mongod.lock”.
Логично, что для возобновления нормальной работы его нужно удалять и заново стартовать монгу.
sudo rm /var/lib/mongodb/mongod.lock; sudo service mongodb start |
Шпаргалка по PEAR
Примерно раз в полгода я запускаю в консоли pear и лезу в хелп или гуглю нужные команды (хорошо если натыкаюсь на http://pear.php.net/manual/en/guide.users.commandline.commands.php или на http://pear.php.net/manual/en/guide.users.commandline.channels.php)
Итак. На примере обновления PHPUnit до версии 3.6.0RC4.
1. Просмотр списка каналов
$ pear list-channels
2. Просмотр всех доступных пакетов с определенного канала
$ pear list-all -c pear.phpunit.de
3. Обновить все пакеты
$ sudo pear upgrade-all
4. Разрешаем установку бета версий
$ sudo pear config-set preferred_state beta
5. Обновиться до определенной версии пакета
$ sudo pear upgrade phpunit/PHPUnit-3.6.0RC4
6. Посмотреть список установленных пакетов
$ pear list -a
Пока все 🙂
PS. Разгребаю черновики записей в блоге
Простые правила сильного текста
Беседовали о том, какие у нас херовые плохие тексты в портфолио. И Олег скинул ссылку на вот это видео:
Меня зацепило и решил попробовал изменить описания категорий.
Вот такое было описание для категории “Веб-разработка”:
Специализируемся на разработке больших и средних сайтов/порталов с нестандартным функционалом. Умеем справляться с большими нагрузками и с радостью беремся за решение сложных задач. В работе используем PHP (Symfony2, Zend Framework, Doctrine2), JavaScript (jQuery, YUI, MooTools), SQL (MySQL, PgSQL), HTML5, багтрекер Redmine и системы контроля версий (SVN, Git).
А вот такое стало:
Делаем стартапы. Справляемся с большими нагрузками и решаем сложные задачи. Используем современные инструменты и практики разработки.
Что скажете?
UPD. Для “Дизайн сайтов” тоже текст укоротили.
Было:
Первое впечатление о сайте, которое формируется у посетителя, очень сильно зависит от его дизайна и удобства использования. Мы поможем сделать это впечатление наиболее положительным, разработав красивый и функциональный дизайн для Вашего сайта.
Стало:
Создаем удобный и функциональный дизайн
Конференция для веб-разработчиков «ZFConf 2012»
21 апреля в Москве пройдет очередная ежегодная конференция для веб-разработчиков ZFConf 2012, посвященная популярной платформе Zend Framework.
В этом году с докладом выступит гость из Италии — Enrico Zimuel из Zend Framework Core Team. А также Виктор Фараздаги, Александр Веремьев, Алексей Качаев и многие другие специалисты.
На сайте опубликован полный список докладов и открыта регистрация.
Доклады
Zend Framework 2, a quick start Enrico Zimuel (Zend Technologies, Zend Framework Core Team)
Code Generation и Scaffolding в Zend Framework 2 Виктор Фараздаги (Simple Square, Senior Developer)
Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL Александр Веремьев (Zend Framework contributor)
Распределенные сетевые приложения c Zend Framework 2 и ZeroMQ Алексей Качаев (Сogniance, Senior Software Engineer)
Dependency Management в PHP и Zend Framework 2 Кирилл Чебунин (Creara, Senior PHP Developer)
Кеш без промахов средствами Zend Framework 2 Никита Грибалев (Nival, Lead PHP Developer)
Проектирование архитектуры, внедрение и организация процесса разработки на примере собственного проекта на основе ZF Антон Великанов (Sand Sign, Founder&CEO)
Capistrano для деплоймента PHP-приложений Роман Лапин (Evercode Lab, Senior Developer)
PS. И небольшое промо видео 🙂
Ubuntu, KnpConsoleAutocompleteBundle и php 5.3.10
Есть такой клёвый бандл KnpConsoleAutocompleteBundle от KnpLabs, суть которого заключается в автоподстановке команд для скрипта консоли Symfony2.
Т.е. набираешь “./app/console doc” жмешь [Tab] и получаешь “./console doctrine:”. Жмешь [Tab] ещё два раза и получаешь все варианты комманд:
$ ./app/console doctrine: doctrine:cache:clear-metadata doctrine:generate:form doctrine:cache:clear-query doctrine:mapping:convert doctrine:cache:clear-result doctrine:mapping:import doctrine:database:create doctrine:mapping:info doctrine:database:drop doctrine:query:dql doctrine:ensure-production-settings doctrine:query:sql doctrine:generate:crud doctrine:schema:create doctrine:generate:entities doctrine:schema:drop doctrine:generate:entity doctrine:schema:update |
Вобщем удобно очень :).
Одна проблема — не работает под Ubuntu )). Есть даже тикет соотвествующий от Люиса Кордовы “does not work on ubuntu debian“. В тексте issue он дает ссылку на translate моей темы “проблема с ConsoleAutocompleteBundle” с форума zf.ru.
Так к чему я это пишу? Прошел почти год с того момента как я столкнулся с этой проблемой. Ну, думаю, должны были за это время все разрулить и баг пофиксить. Разворачиваю тестовое приложение, настраиваю, ставлю бандл, настраиваю, пробую автокомплит и разочаровываюсь — проблема осталась (((.
Показал ссылку на обсуждение бага Жене (наш админ) и он посоветовал мне установить php 5.3.10 с ppa. И вот когда я его поставил, то все заработало! Ура 🙂
PS. На всякий случаю запишу, что ставил я его вот так:
$ sudo add-apt-repository ppa:nginx/php5.3 $ sudo aptitude update $ sudo aptitude upgrade --full-resolver |
Несколько шпаргалок по Symfony2
Нашел на задворках своего HDD несколько шпаргалок по Symfony2. Лучше выложу их сюда, а то когда нужно, то фиг найдешь. Думаю, что они будут многим полезны.
Путь HTTP запроса в Symfony2 (jpg)
Автор Benjamin Dulau
Как работают формы в Symfony2 (pdf)
Автор Andréia Bohner