webdev-tales
webdev-tales
Webdev Tales
38 posts
Бывает, что долгое время посвящаешь решению какой-то задачи, а через какое-то время забываешь это решение. Теперь постараюсь записывать.
Don't wanna be here? Send us removal request.
webdev-tales · 11 years ago
Text
Как подружить PhpStorm и SVN 1.8
PhpStorm не поддерживает работу с SVN версии 1.8.* из коробки. Если вы попробуете открыть каталог с проектом под этой версией SVN в PhpStorm, то увидите сообщение об ошибке.
Разработчики PhpStorm предлагают использовать клиент командной строки для обхода этой ситуации. Надо скачать любой такой клиент (например, Slik SVN) и в настройках PhpStorm указать на его исполняемый файл. 
Если же вы работаете с Tortoise SVN, то и эту программу можно настроить для работы их командной строки и привязать к PhpStorm. Для этого просто при установке Tortoise SVN не забудьте включить опцию command line client tools, которая отключена по умолчанию.
Tumblr media
Потом всё тоже самое. В настройках PhpStorm указываем на svn.exe из папки Tortoise SVN.
Tumblr media
1 note · View note
webdev-tales · 11 years ago
Note
Здравствуйте! В последние несколько дней перестал работать скрипт рейтинга кинопоиск, можете решить данную проблему?
Здравствуйте. Kinopoisk изменил url по которому доступна информация о фильме. Внёс изменения в код на github. Не забудьте обнулить кеш страницы.
0 notes
webdev-tales · 12 years ago
Text
Внедрение версионной миграции базы данных в PHP проекте
Зачем это нужно?
Команда программистов исправно выполняет задачи в рамках вашего проекта, при этом так же активно программисты меняют схему БД или данные, которые в ней находятся. Когда вы заливаете выполненные задачи на продакшен вам необходимо и обновить схему боевой БД. При этом в базе необходимо сделать только те изменения, которые соответствуют заливаевым задачам. Кроме этого, могут возникнуть ситуации когда необходимо откатить изменения как кода, так и схемы БД.
Как это сделать просто?
На данный момент существует огромное количество библиотек, которые позволяют выполнить миграцию БД. Я рассмотрю Doctrine Migration Tool, как одну из самых распространённых библиотек для php проектов.
Использование Doctrine Migration Tool в виде PHAR файла
PHAR - это исполняемый архив в PHP, он позволяет упаковать много файлов в один, в р��зультате чего Ваше приложение может работать с целой библиотекой, как с одним файлом.
Doctrine Migration Tool в виде PHAR файла (doctrine-migrations.phar) можно сделать самостоятельно из исходников или просто скачать уже готовый. Эти ссылки ведут на мой форк проекта doctrine/migrations. В нём есть несколько изменений, полезных для работы с MySQL базами.
Конфигурация
PHAR файл надо положить в корень проекта. Кроме этого файла в корень помещаются файлы migrations.yml и migrations-db.php. А также подготовить каталог, в котором будут храниться миграции.
migrations.yml
Описывает настройки миграции. Вот пример файла:
name: My Project Migrations migrations_namespace:  MyProjectMigrations table_name: migration_versions migrations_directory: migrations
migrations-db.php
Этот файл настраивает подключение к базе данных. Пример файла:
return array(    'driver'    => 'pdo_mysql',    'host'      => 'localhost',    'user'      => 'dbuser',    'password'  => 'userpassword',    'dbname'    => 'myproject' );
Работа с doctrine-migrations.phar из консоли
Подробно работа описана в официальной документации, здесь же я просто приведу основные моменты.
Генерация классов миграции
Выполняем команду
php doctrine-migrations.phar migrations:generate
После этого в папке для миграции появится файл Version20130923222729.php следующего содержания
<?php namespace MyProjectMigrations; use Doctrine\DBAL\Migrations\AbstractMigration,    Doctrine\DBAL\Schema\Schema; class Version20130923222729 extends AbstractMigration {    public function up(Schema $schema) {    }    public function down(Schema $schema) {    } }
Теперь вам остаётся в метод up записать SQL выражение, которое будет выполнено при применении миграции. В метод down записывается SQL выражение, которое может откатить изменения из метода up.
Допустим вот так будет выглядеть класс миграции
<?php namespace MyProjectMigrations; use Doctrine\DBAL\Migrations\AbstractMigration,    Doctrine\DBAL\Schema\Schema; class Version20130923222729 extends AbstractMigration {    public function up(Schema $schema) {        $this->addSql(            'CREATE TABLE addresses (id INT NOT NULL, street VARCHAR(255)            NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB'        );    }    public function down(Schema $schema) {        $this->addSql('DROP TABLE addresses');    } }
Проверка статуса миграций
В любой момент можно посмотреть в каком состоянии находятся миграции. Для этого выполняем команду
php doctrine-migrations.phar migrations:status
На экран будет выдано сколько миграций применено, сколько есть новых миграций, какая текущая версия базы данных и т.п.
Применение миграций
Для того чтобы применить все доступные миграции необходимо выполнить команду
php doctrine-migrations.phar migrations:migrate
После этой команды все доступные миграции будут применены к базе данных. Если вы хотите подстраховаться перед применением миграций и посмотреть, что произойдёт, то можно добавить ключь -dry-run, который сымитирует применение миграций, но в БД их не запишет.
php doctrine-migrations.phar migrations:migrate -dry-run
Откат миграций
Для того чтобы откатить базу до определённой версии необходимо выполнить команду migrate с указанием версии до которой надо откатиться.
php doctrine-migrations.phar migrations:migrate 0
В таком виде будут откачены все ревизии дл исходного состояния БД. Если надо до определённой версии, то вместо 0 надо указать нужную версию.
Возможные проблемы
Unknown database type enum requested
Если эта ошибка возникает при просмотре статуса или исполнения миграций, то значит в вашей базе данных присутствуют поля с типом ENUM. Дело в том, что Doctrine не поддерживает этот тип поля и некоторые другие (SET, например). Официальная документация по Doctrine предлагает переназначить этот тип поля в строковый тип. К сожалению эта возможность не предусмотрена в официальном doctrine/migrations, но в моём форке этот нюанс учтён. Для этого надо сделать дополнительные настройки в migrations.yml
name: My Project Migrations migrations_namespace: MyProjectMigrations table_name: migration_versions migrations_directory: migrations mapping_types:    enum: string
Creating archive "build/doctrine-migrations.phar" disabled by INI setting
Если вы собираете свой собственный doctrine-migrations.phar и встретили эту ошибку, то в php.ini сделайте следующие изменения:
phar.readonly = Off
Интеграция с PHPStorm под Windows
Создание bat-файла
Чтобы в Windows было удобно запускать doctrine-migrations.phar можно создать bat-файл и положить его рядом с PHAR файлом.
@php "%~dp0doctrine-migrations.phar" %*
Теперь можно запускать bat-файл с командами doctrine/migrations. Например:
migrations.bat migrations:status
Настройка Command Line Tool Suppor в PHPStorm
В окне Settings -> Command Line Tool Support добавляем новую команду. Описываем её следующим образом:
Custom Tool
Tool name: Doctrine Migrations
Tool path: путь/к/migrations.bat
Alias: mgr
Запуск команд миграции в консоли PHPStorm
При работ�� в IDE через комбинацию клавиш Ctrl+Shift+X открываем консоль и в неё пишем, например:
mgr migrations:status
и наблюдаем результат выполнения прямо в IDE.
Tumblr media
3 notes · View notes
webdev-tales · 12 years ago
Note
Здравствуйте, установил информер рейтинга фильмов kinopoisk, но вместо "Кинопоиск" отображаются кракозябры и так с любыми русскими символами. Как исправить проблему с кодировкой? CMS: dle 10 win-1251
Здравствуйте! Я думаю, что вам надо сохранить файл kinopoisk.js,  переконвертить его в кодировку win-1251 и потом уже подключить к проекту.
1 note · View note
webdev-tales · 12 years ago
Photo
Tumblr media
Сегодня Google Analytics вот таким образом поздравил с 1 апреля! В первый момент сердце ёкнуло.
8 notes · View notes
webdev-tales · 12 years ago
Text
Информер рейтинга фильмов kinopoisk и imdb обновлён до версии 0.3
Kinopoisk - это jQuery плагин, который с лёгкостью позволяет добавить на вашу страницу информер о рейтинге фильма. В новой версии добавлено кеширование информации о рейтинге, что позволяет не запрашивать каждый раз базу Кинопоиска при отрисовке информера, что сказывается на быстроте его загрузки. Пр умолчанию данные кешируются на сутки, но вы всегда можете изменить это значение на удобное для вас.
Для кеширования данных был выбран Local Storage, поэтому в каких-нибудь древних версиях IE (меньше 8) может и не работать. Последнюю версию плагина можно забрать на github.com. Подробное описание на русском есть там же или в этой статье.
4 notes · View notes
webdev-tales · 12 years ago
Text
Тёмные цветовые схемы для JetBrains PHPStorm IDE
Многие IDE, которые я пробовал, предлагают по умолчанию светлые цветовые схемы. Но мне больше по душе тёмные. Поэтому во всех IDE, в которых мне удалось поработать, я первым делом настраивал тёмную схему. Где-то это удавалось легко, где-то нельзя было её сделать принципиально.
В PHPStorm настройка цветов очень гибкая и практически любую мелочь в нём можно настроить как тебе удобно. Поэтому я сделал свою тёмную цветовую схему, которую назвал Solito. Выглядит она вот так:
Tumblr media
По клику большая картинка
Обратите внимание, что цветовая схема распространяется только на окно редактирования кода. Остальной интерфейс PHPStorm зависит от настроек темы и до выпуска PHPStorm 6-ой версии там были только светлые темы.
Но с выходом 6-ой версии была выпущена тёмная тема Darcula, которая делает тёмной не только окно редактирования кода, но и весь интерфейс программы. С этой темой в 6-ой версии появилось и несколько тёмных цветовых схем. Но так как у меня есть некоторые свои привычки и требования к цветам, то я решил на основе схемы Darcula сделать свою схему, с учётом личных пожеланий. Эту схему я назвал Blade и выглядит она вот так:
Tumblr media
По клику большая картинка
Эти две схемы я выложил на github.com, поэтому если у вас есть желание посмотреть на них в деле, то заходите и качайте. Сейчас я полностью работаю на схеме Blade, поэтому возможно буду вносить в неё какие-то коррективы, что отобразится в виде коммитов на github.
Установка схем очень простая:
Копируете *.icls файлы в папку с цветовыми схемами (например, C:\Users\<username>\.WebIde60\config\colors)
Запускаете PHPStorm IDE
Устанавливаете нужную тему в Settings -> Appearance -> Theme
Выбираете имя схемы в настройке File -> Settings -> Editor -> Colors & Fonts
Пользуйтесь на здоровье!
1 note · View note
webdev-tales · 12 years ago
Text
Информер рейтинга фильмов kinopoisk и imdb обновлён до версии 0.2
Kinopoisk - это jQuery плагин, который с лёгкостью позволяет добавить на вашу страницу информер о рейтинге фильма. Этот информер показывает рейтинг с сайтов kinopoisk.ru и imdb.com. Вам не надо устанавливать на свой сайт никаких серверных скриптов, он не использует никаких картинок, только файлы плагина с javascript и css. О самом информере, как он работает и примеры его использования, можно почитать в этой статье. 
Сегодня в код плагина добавились важные изменения:
Вместо идентификатора фильма на кинопоиске в плагин можно  передавать ссылку на него такого вида: http://www.kinopoisk.ru/film/566055. Например так:
<div class="kinopoisk" data-movie="http://www.kinopoisk.ru/film/566055">
Исправлены ошибки, когда перетирались параметры информера (количество звёзд, порядок отображения и т.п.), если на одной странице было несколько информеров с разными параметрами.
8 notes · View notes
webdev-tales · 12 years ago
Text
Ошибка при работе оптимизатора CSSTidy с CSS-правилом @media
CSSTidy позволяет оптимизировать css файлы перед тем как выложить их на сайт. Но недавно обнаружил, что сжатие правила @media происходит неправильно. Вот такую конструкцию
@media (min-width: 980px) { ... }
CSSTidy сжимает так:
@media min-width: 980px { ... }
Причём такой код после сжатия отрабатывает в некоторых браузерах (например Chrome), но ломается в других (например Firefox).
К счастью существует форк CSSTidy на github разработчики которого решили эту проблему. Поэтому, если вы используете в своих скриптах @media, то не используйте CSSTidy с официального сайта.
0 notes
webdev-tales · 12 years ago
Text
Работа с Node.js в PHPStorm под Windows
Удобство работы в IDE - это в основном автодополнение кода, грамотная подсветка, проверка синтаксиса, запуск, отладка и т.п. Если вы работаете со скриптами для Node.js, то в JetBrains PHPStorm необходимо сделать несколько манипуляций, чтобы работа с ними была удобной.
Устанавливаем Node.js
Для начала надо скачать и установить Node.js под Windows. Установка максимальна проста и не вызывает вопросов. После неё в списке программ  появится Node.js.
Tumblr media
Устанавливаем плагин Node.js в PHPStorm
У PHPStorm есть плагин для Node.js, но он не идёт в стандартной поставке, поэтому его надо установить из репозитория: Settings - Plugins - Browse repositories - NodeJS - Download and install. Плагин скачается и попросит перезапустить PHPStorm. 
Tumblr media
После перезапуска на панели инструментов появится кнопка Node.js. Нажав на неё можно проверить, что плагин нашёл установленный ранее node.exe.
Tumblr media
Конфигурируем плагин Node.js в PHPStorm
Для того, чтобы в PHPStorm заработала подсветка синтаксиса и автодополнение конструкций Node.js необходимо установить исходники главных модулей Node.js (из-за того, что под Windows Node.js идёт как бинарный файл). PHPStorm упрощает эту процедуру. Для этого надо кликнуть в окне настройки плагина на кнопку Configure и PHPStorm выкачает необходимые файлы из сети. Если всё пройдёт гладко, то окно должно показать вот такую картинку:
Tumblr media
После этого необходимо проверить в настройках, что библиотеки Node.js включены. Идём в Settings - JavaScript - Libraries и проверяем галки.
Tumblr media
После этого IDE должна начать правильно подсвечивать синтаксис и работать с автодополнением Node.js скриптов.
Tumblr media
Обратите внимание, что PHPStorm стал различать файлы в которых содержится код Node.js и JavaScript, не смотря на то, что расширение у них одно (шарик на иконке файла с Node.js стал зелёным).
Запуск и дебаг скриптов Node.js
Если кликнуть на файле со скриптом для Node.js правой кнопкой мыши, то в контекстном меню появя��ся пункты для запуска скрипта.
Tumblr media
Выбираем Run и если до этого конфигурация для запуска сделана не была, то откроется окно с настройкой.
Tumblr media
По идее, в окне по умолчанию уже всё должно быть настроено, так что можно сразу запускать скрипт. Но если вам необходимы какие-то тонкие настройки, то вы всегда можете добавить их в этом окне.
После запуска вы можете наблюдать в окне Run сообщения скрипта, ставить его на паузу, останавливать. А в коде использовать точки остановки.
Tumblr media
Удачной работы с Node.js в PHPStorm! 
3 notes · View notes
webdev-tales · 12 years ago
Text
Работа PHPStorm с CoffeeScript под Windows
CoffeeScript — это язык/надстройка/сахарная пудра над обычным JavaScript. Он позволяет избавиться от излишнего синтаксиса JavaScript, поэтому код на CoffeeScript получается короче и яснее.
Код, который напис��н на CoffeScript,  компилируется в обычный JavaScript, а тот уже используется в веб-странице.
JetBrains PHPStorm IDE уже из коробки умеет подсвечивать синтаксис CoffeeScript, работать с его структурой, использовать автокомплит, а так же показывать JavaScript код, в который скомпилируется программа.
Для начала надо проверить, что подключен плагин для работы с CoffeeScript.
Tumblr media
Теперь можете спокойно в своём проекте начинать писать код на CoffeeScript.
Tumblr media
Откроется окно, разделённое на две части - слева CoffeScript, справа JavaScript.
Tumblr media
Но кроме всего этого, было бы неплохо ещё и компилировать CoffeeScript в JavaScript из IDE. 
Для начала нам надо скачать сам CoffeeScript. Забираем его из репозитория в какую-нибудь папку (например, Z:\coffee-script).
Теперь у нас есть два способа компилировать CoffeScript в JavaScript. Рассмотрим первый.
Первый способ: alisey / CoffeeScript-Compiler-for-Windows
Забираем эту программу из репозитория и кладём exe-файл в подкаталог bin в папке, куда вы поместили CoffeeScript.
Например, так:
Tumblr media
После этого надо прописать coffee.exe в PHPStorm. Идём в Settings - External Tools и добавляем новый инструмент.
Tumblr media
В данном конкретном случае в параметрах прописано, что компилятор берёт текущий файл и компилирует его в папку js в этом же проекте. Можно прописать и по-другому: компилировать все файлы в папке или проекте и т.п. Тут уже читаем внимательно описание ключей.
Теперь нам остаётся только проверить, что всё работает. Открываем в PHPStorm файл с CoffeeScript кодом, нажимаем на нём правой кнопкой мыши и выбираем пункт меню coffee / Coffee Compiler.
Tumblr media
Результатом работы станет файл test.js в папке js проекта.
Tumblr media
Теперь, если вы откроете index.html, в котором прописан вызов test.js, то JavaScript отработает, как мы и ожидаем.
Второй способ: Node.js
Для тех, кто не сталкивался с Node.js поясню, что это серверная реализация JavaScript. Т.е. код, написанный на JavaScript выполняется не в браузере, а на сервере. Поэтому, установив Node.js мы сможем не только с его помощью компилировать CoffeeScript в JavaScript, но и тут же его исполнять.
Для начала надо скачать и установить Node.js под Windows. Установка максимальна проста и не вызывает вопросов.
Далее мы можем поступить аналогично только что описанному варианту - подключаем Node.js как внешний инструмент и параметрами задаём правила компиляции скриптов.  
Но есть ещё один вариант. У PHPStorm есть плагин для Node.js, он не идёт в стандартной поставке, поэтому его надо установить из репозитория: Settings - Plugins - Browse repositories - NodeJS - Download and install. Плагин скачается и попросит перезапустить PHPStorm. 
После перезапуска на панели инструментов появится кнопка Node.js. Нажав на неё можно проверить, что плагин нашёл установленный ранее node.exe.
Tumblr media
Этот плагин позволяет не только организовать компиляцию CoffeScript, но и запуск его в консоли (в принципе и запускать любой JavaScript код).
Кликнув п��авой кнопкой внутри открытого файла с CoffeeScript выбираем Create Run / Debug configuration.
Tumblr media
После этого в появившемся окне настраиваем запуск скрипта. 
Tumblr media
После чего у нас появляется конфигурация, для запуска скрипта test.coffee. Проверяем, что всё работает.
Tumblr media
Можно настроить конфигурацию для компилирования скрипта.
Tumblr media
Почему-то в версии PHPStorm 5.0.3 (на момент написания статьи это последняя версия) не передаются параметры указанные в поле "CoffeeScript parameters". Поэтому я их записал в параметры Node.js.
Таким образом для файла у нас получилось две конфигурации - одна для запуска скрипта, а вторая для его компиляции.
Можно совместить оба подхода в работе с CoffeeScript. На мой взгляд, компиляция через внешний инструмент удобнее тем, что там можно задать компиляцию не отдельного скрипта, а, например, всей папки. А вариант с Run / Debug configuration использовать по прямому назначению - для запуска и отладки скрипта.
2 notes · View notes
webdev-tales · 12 years ago
Text
Пару слов о работе с сессиями в php младше 5.4.0, используя объект
Если вы пишите класс на php для переопределения методов работы с сессиями, то не забудьте дополнительно зарегистрировать завершающую функцию session_write_close() через register_shutdown_function(). 
Дело в том, что при завершении скрипта PHP разрушает все объекты, а так же вызывает session_write_close(). И так может случится, что объект, который будет использоваться для записи сессии (например, если вы записываете сессию в БД через метод объекта базы данных) уже будет разрушен. 
Но если использовать register_shutdown_function('session_write_close'), то это будет гарантировать, что завершение сессии вызовется до того, как PHP начнёт разрушать объекты.
Что интересно, этот эффект проявляется не на всех версиях PHP. Например у меня, в версии 5.3.3 он не проявлялся и вылез только при переходе на старшую версию.
В мануале в разделе о session_set_save_handler эта особенность упоминается, но при поддержке старого кода, где при переходе на другую версию php вдруг начинают странным образом отрабатывать сессии (обычно с ошибками, что метод не является методом объекта или, что не найден класс) об этом сразу не вспоминается.
2 notes · View notes
webdev-tales · 13 years ago
Text
Easy Xdebug - расширение для Firefox для работы с Xdebug
Однажды я рассматривал вопрос о том, как настроить отладку php-кода с помощью Xdebug и PhpStorm. Для того, чтобы запускать отладку страницы, было предложено пользоваться марклетами, которые подготовила команда JetBrains. Они работают правильно и без проблем, но единственный недостаток, что занимают приличное место в браузере.
Tumblr media
Поэтому, после некоторых поисков, было обнаружено правильно работающее расширение под Firefox, которое реализует функционал марклетов и при этом занимает совсем немного места - две иконки на панели расширений.
Итак - Easy Xdebug.
2 notes · View notes
webdev-tales · 13 years ago
Text
Информер рейтинга фильмов kinopoisk и imdb без серверных скриптов
Как-то в процессе работы над одним сайтом, я столкнулся с задачей отобразить на сайте информер с рейтингом кинофильма. Сам рейтинг решено было тянуть с сайта kinopoisk.ru, так как он позволяет получать рейтинг по запросу вида http://www.kinopoisk.ru/rating/89515.xml. Как это сделать с использованием серверных языков (например, php) мне было ясно сразу. А вот можно ли сделать информер без них, средствами только javascript - это был вопрос. И вот, как результат решения этой задачки, появился jQuery плагин Kinopoisk. Вы можете скачать его и подробно ознакомится на странице на github.com.
Ниже я просто объясню как им пользоваться.
Обратите внимание, что информер работает даже на этой странице, хотя она и находится в блоге на tumblr, который не позволяет использовать серверные скрипты. Так что если у вас блог на похожей платформе, то, возможно, это решение будет полезным.
О плагине
Kinopoisk - это jQuery плагин, который с лёгкостью позволяет добавить на вашу страницу информер о рейтинге фильма. Этот информер показывает рейтинг с сайтов kinopoisk.ru и imdb.com. Вам не надо устанавливать на свой сайт никаких серверных скриптов, он не использует никаких картинок, только файлы плагина с javascript и css.
Начало
Подключить jQuery и плагин:
<script src="http://yandex.st/jquery/1.7.2/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="kinopoisk.min.css" /> <script type="text/javascript" src="kinopoisk.min.js"></script>
Использовать плагин следующим образом: (89515 - идентификатор фильма на kinopoisk.ru):
<div class="kinopoisk" data-movie="89515"></div>
Результат:
Вот и всё!
Настройки
Порядок рейтингов
Установка порядка показа рейтингов (["kinopoisk", "imdb"] по умолчанию):
<div class="kinopoisk" data-movie="89515" data-order='["imdb", "kinopoisk"]'> </div>
Результат:
Если нужен только один рейтинг:
<div class="kinopoisk" data-movie="89515" data-order='["imdb"]'> </div>
Результат:
Диапазон звёзд
Можно установить нужный вам диапазон звёзд (10 по умолчанию):
<div class="kinopoisk" data-movie="89515" data-range=5 ></div>
Результат:
API
Вы можете использовать API для контроля работы плагина.
<div id="my-rating"></div> <script> $("#my-rating").kinopoisk( { "movie": 326, "range": 5, "order": ["imdb", "kinopoisk"] } ); </script>
Можно изменять шаблоны информера отдельно для каждого типа рейтинга.
<div id="my-rating2"></div> <script> $("#my-rating2").kinopoisk( { "movie": 327, "order": ["kinopoisk"], "kinopoisk_template": '<div>' + 'Рейтинг: <span class="kp_stars">$stars</span>' + '<span class="kp_rating">$rating</span>' + '<span><small>(Голосов: $vote)</small></span>' + '</div>', } ); </script>
Лицензия
Этот плагин находится под двойным лицензированием MIT и GPL2, так же как и сам jQuery.
4 notes · View notes
webdev-tales · 13 years ago
Text
Поле-призрак при обновлении записи в MySQL
Немного курьёзная ситуация, но некоторое количество времени она отняла в своё время, поэтому запишу её в блог.
Появилась ошибка MySQL такого плана:
Ошибка MySQL: Unknown column 'update_date' in 'field list'. Запрос: UPDATE `service` SET `status`= 1 WHERE id=123
Первый вопрос, который возник: почему идёт ругань на update_date, если в запросе это поле даже не упоминается?
После этого была проверена таблица service и поле update_date в ней было обнаружено в полном здравии.
Далее были проведены различные варианты запросов на обновление таблицы, которые все неизменно приводили к такой ошибке.
Гугление дало ссылки на несколько форумов, где пользователи, столкнувшиеся с такой ошибкой, просто неправильно формировали запрос к БД. А так же пару советов "перегрузить БД" :)
Какое-то время было убито на раздумья и всяческие тесты, когда решение пришло неожиданно и заставило пожурить себя за невнимательность. Оказалось, что на таблицу service был навешен триггер, который был призван обновлять поле update_date, но в таблице order, отслеживая, когда услуги, входящие в заказ, обновляются. А поля update_date в таблице order как раз и не было.
Таким образом при обновлении записи в таблице service, триггер пытался изменить поле update_date в таблице order и не находил его. Дело усугубилось тем, что в таблице service было своё поле update_date, которое и забрало на себя основное внимание, вызвав большую часть недоумения.
4 notes · View notes
webdev-tales · 13 years ago
Link
Просто отличная статья на живых примерах об организации процесса разработки в одном взятом проекте. Обязательно на досуге изучу её подробнее и пройдусь по всему тому великолепию ссылок, которое есть в статье. Пока, к сожалению, наша команда работает по принципам 2008 года относительно команды TargetProcess.
1 note · View note
webdev-tales · 13 years ago
Text
Проверка соблюдения стандартов кодирования в PHP на примере связки Denwer3 + Code Sniffer + PhpStorm4 + SVN
Если над проектом работает несколько человек, то рано или поздно встаёт вопрос, что неплохо было бы выработать общие правила кодирования. Так как, когда код оформлен единообразно, то значительно улучшается его читаемость, да и ошибки увидеть проще.
Конечно, попытка внедрения стиля кодирования в команде программистов может вызвать на первом этапе сопротивление тех, кто не любит писать комментарии к классам и методам или тех, кому придётся пересмотреть свой стиль написания кода. Но как показывает мой опыт, если программистам предоставить удобный инструмент для отслеживания стиля, то переход на единый стандарт пройдёт менее болезненно, а через некоторое время вопрос "Зачем это надо?" будет совершенно не актуален.
Ниже я рассмотрю настройку рабочего места PHP програмиста, для работы с автоматическим контролёром стиля кодирования PHP Code Sniffer.
Буду отталкиваться от того, что используется операционная система Windows с установленным пакетом Denwer3.
Для того, чтобы поставить Code Sniffer нам необходимо использовать PEAR, который в стандартной поставке Denwer3 не идёт. Поэтому  после установки Денвера, надо установить ещё и пакет расширений (при выключенном вебсервере).
Так выглядит директория с php до установки пакета расширений (D:\WebServers5.3.1 - это директория в которую установлен Denwer, у вас она может быть другая):
Tumblr media
Так выглядит директория с php после установки пакета расширений:
Tumblr media
Теперь нам надо установить PEAR - это репозиторий пакетов расширений PHP. Для этого надо в директорию с php скачать файл http://pear.php.net/go-pear.phar.
Дальше нам придётся работать с командной строкой, поэтому используйте любую программу, которая умеет это делать (например FAR) или стандартным средством Windows cmd.exe.
В каталоге Денвера с php надо запустить go-pear.bat. Если вы работаете с несколькими копиями Денвера или Денвер установлен у вас на флешке, то на вопрос PEAR'a ставить его в систему или локально надо ответить local. Затем PEAR ещё раз попросит вас проверить все директории, куда он производит установку и спросит, переписать ли php.ini. Везде отвечаем утвердительно. Всё, PEAR установлен.
Теперь надо поставить сам PHP_CodeSniffer. Для этого опять же в каталоге с php в командной строке пишем:
pear install PHP_CodeSniffer
Ошибка "No releases available for package "pear.php.net/PHP_CodeSniffer" может возникнуть, когда установка PEAR уже выполнялась до этого. У PEAR'a есть кеш, который просто надо чистить между установками. Находится он в "C:\Documents and Settings\<Пользователь>\Local Settings\Temp\pear".
После установки в директории PEAR появится каталог PHP, в котором и располагается CodeSniffer.
Tumblr media
В поставке Code Sniffer'а уже идёт несколько стандартов кодирования: PEAR, PHPCS, Squiz и Zend. Поэтому можно использовать один из них. А можно написать и свой собственный стандарт (об этом я расскажу чуть позже). Так же можно гибко настроить сниффер, чтобы выборочно проверять директории проекта, ведь в нём могут использоваться сторонние библиотеки, приводить которые к своему стандарту кодирования не стоит.
Теперь поговорим о том, как использовать Code Sniffer. Об этом подробно написано в документации к пакету. Если кратко, то в каталоге с php есть bat-файл phpcs.bat. Если запустить его из командной строки, например так:
phpcs.bat X:\home\sl-dima\www\index.php
То он проверит указанный в параметре файл и выдаст по нему отчёт:
FILE: X:\home\sl-dima\www\index.php -------------------------------------------------------------------------------- FOUND 2 ERROR(S) AFFECTING 1 LINE(S) --------------------------------------------------------------------------------  10 | ERROR | Missing @license tag in file comment  10 | ERROR | Missing @link tag in file comment --------------------------------------------------------------------------------
Можно указать не только один файл, но и целую директорию. Если ваша IDE поддерживает работу с командной строкой, то можно на горячую кнопку повесить вызов phpcs.bat с передачей параметром пути к открытому в IDE файлу.
Но если вы пользуетесь IDE JetBrains PHPStorm 4, то в нём поддержка Code Sniffer включена в стандартные возможности программы, что позволяет подсвечивать ошибки стиля кодирования прямо в IDE.
Необходимо зайти в File - Settings - Inspections - PHP и поставить галку напротив PHP Code Sniffer validation. В появившемся окне указать путь до phpcs.bat и выбрать тот стиль кодирования, который хотим использовать.
Tumblr media
После этого ваш код будет автоматически проверяться на соответствие стилю кодирования и подсвечиваться в IDE. При наведении на подчёркнутый код можно получить сообщение от Code Sniffer, в чём он видит ошибку.
Tumblr media
Итак, инструмент для проверки стиля кодирования у нас есть. Но никто не может помешать нерадивому программисту его отключить или просто не использовать. Для того, чтобы все в команде выполняли договорённость о едином стиле кодирования, Code Sniffer можно подключить к вашей системе контроля версий с помощью хука. 
В документации Code Sniffer'a подробно описано как ��одключить хук к системе контроля версий SVN. Хук позволит при коммите любого кода в SVN проверить его на соответствие стандартам и если они нарушены коммит не пройдёт, а будет выдан отчёт о найденных ошибках. На просторах интернета можно найти и описание хука для GIT.
Таким образом мы получили удобный инструмент для автоматического отслеживания стиля кодирования. Если у вас и вашей команды есть сомнения в необходимости этого, просто попробуйте на каком-нибудь новом проекте и я уверен, что положительный результат не заставит долго ждать.
11 notes · View notes