Subversion – использование нескольких веток разработки

Владимир | | Subversion.

Картинка для subversion
В этой статье я продолжу рассказ об использовании Subversion – одной из самых популярных на сегодняшний день систем контроля версий.

В этот раз речь пойдет об использовании нескольких веток разработки.

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

Допустим, вы закончили разработку первой версии web приложения (или просто сайта). Теперь нужно перенести его на сервер хостера. В большинстве случаев при этом придется изменить параметры подключения к базе данных, отключить вывод подробного описания ошибок, profiling и т.п. Скорее всего, эти изменения затронут несколько файлов.

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

Как раз в этом случае нам и пригодится возможность Subversion создавать параллельные ветки разработки.
Читать дальше

Web разработка. Когда использовать JavaScript библиотеки для проверки форм

Владимир | | Ajax, CodeIgniter, HTML, JavaScript.

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

В случае web приложений ситуация только усложняется.

На мой взгляд, существует три основных источника проблем:
1) ошибки пользователя (тут вряд ли можно что-то сделать);
2) необходимость проверять данные на стороне сервера;
3) необходимость сообщать посетителю об ошибках без перезагрузки страницы.

Кроме того, существуют два способа отправки данных формы:
1) обычный (с перезагрузкой страницы);
2) асинхронный (ajax запрос, без перезагрузки страницы).

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

Например. jQuery Validation Plugin, о нем, кстати, написана очень хорошая статья Проверка данных форм.
Для prototype тоже есть несколько аналогичных библиотек: Dexagogo и JSValidate.

Принцип их работы примерно одинаков. Создаете форму с правилами (обычно они указываются в атрибутах class полей формы), подключаете библиотеку, если нужно, пишите свои собственные правила.
Читать дальше

Анонс web приложения

Владимир | | RSS events.

RSS events logo
Хочу представить web приложение, разработку которого я только что закончил! С чем себя и поздравляю 🙂 !

Приложение называется RSS events и размещено по адресу rssevents.simplecoding.org.

По сути, это приложение – попытка создать web аналог программы-напоминалки (органайзера).

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

После этого вы подписываетесь на эту ленту и просматриваете напоминания с помощью RSS ридера.

Естественно, использовать это приложение имеет смысл, только если вы регулярно читаете RSS.

Теперь несколько слов о принципе работы.

Как я уже говорил, для каждого напоминания указываются два параметра, которые определяют когда оно будет добавлено в ленту. Эти параметры «дата» и «периодичность».

Кроме того, в настройках можно указать, за сколько дней до даты напоминания оно будет помещено в ленту (по-умолчанию, 5 дней).

Например, дата напоминания – 20 июля 1998 года, периодичность – ежегодно, а в настройках указано, что нужно показывать напоминания за следующие 5 дней.
Это значит, что данное напоминание будет отображаться в ленте с 15 по 20 июля каждого года. Т.е. значение года в этом случае не играет никакой роли.

Еще один пример. Дата напоминания – 5 сентября 2005 года (понедельник), периодичность – еженедельно. В ленту включаем записи за последние 4 дня.
В этом случае запись будет отображаться в ленте с пятницы по понедельник каждой недели.

Как видите, все довольно просто.

Я буду рад услышать любые отзывы, пожелания, советы и замечания, которые вы можете оставить в комментариях или отправить мне на email (vova_33 at gala dot net).

Разработка на JavaScript. Эффекта морфинга с помощью Scriptaculous

Владимир | | CSS, HTML, JavaScript.

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

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

В этой статье мы рассмотрим пример использования очень интересного эффекта из библиотеки ScriptAculousморфинга.

По определению, морфинг – это плавное преобразование одного объекта в другой.

Он очень часто используется в компьютерных играх и кинематографе.

К сожалению, возможности JavaScript в плане работы с графикой значительно скромнее, чем у библиотек вроде DirectX или программ нелинейного видеомонтажа. Т.е. вы не сможете сделать прямоугольный блок с текстом круглым или плавно преобразовать один шрифт в другой.

Тем не менее, можно изменить цвет и размеры блоков и шрифтов, их границы, фон и т.п.

Как это работает
Читать дальше

Разработка на JavaScript. Управление выполнением кода во время работы эффектов Scriptaculous

Владимир | | HTML, JavaScript.

scriptaculous afterFinish
Недавно столкнулся с интересной особенностью работы эффектов в scriptaculous, о которой и хочу рассказать.

Примечание. Для тех, кто не слышал о scriptaculous, поясню. Это очень удобная JavaScript библиотека, которая значительно упрощает работу с элементами web страницы, позволяет создавать различные визуальные эффекты, элементы управления, поддержку drug&drop и т.п. В общем, советую попробовать.

Возвращаюсь к возникшей проблеме.

Нужно было применить эффект подсветки к блоку текста, а затем удалить этот блок.

На первый взгляд, кажется, что задача решается двумя строками кода:

new Effect.Highlight('textBlock', {startcolor:"#FFFFFF", endcolor:"#FF0000", duration:2});
$('textBlock').remove();

В первой строке создается эффект подсветки и применяется к элементу с id= 'textBlock'.
Параметры эффекта:
startcolor – цвет блока в начале эффекта;
endcolor – цвет блока в конце эффекта;
duration – длительнось эффекта в секундах.

Во второй строке функция remove() удаляет блок.

Но, оказалось, что этот код не работает. Т.е. блок удаляется до того как отработает эффект.

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

Решение

Специально для таких ситуаций каждый эффект scriptaculous имеет четыре свойства: beforeStart, beforeUpdate, afterUpdate, afterFinish (думаю, названия говорят сами за себя). Значением этих свойств должно быть имя функции, которую нужно выполнить на соответствующем этапе работы эффекта.

В качестве параметра эта функция принимает объект с информацией об эффекте и блоке, к которому он применяется.

Например, описанная задача решается как:

new Effect.Highlight('textBlock',
	{startcolor:"#FFFFFF",
	endcolor:"#FF0000",
	duration:2,
	afterFinish: function(o) {
		o.element.remove();
	}
});

Как видите, значением параметра afterFinish является анонимная функция, в которой и выполняется удаление текстового блока.

Примечание. Свойство element, параметра функции (o), позволяет работать с блоком страницы, к которому применяется эффект.

Если вы хотите больше узнать о библиотеке scriptaculous, советую почитать:
1) официальный сайт (англ.);
2) раздел JavaScript этого блога;
3) статью «Подсветка элементов web страницы»;
4) книгу «Prototype and Scriptaculous in Action» (англ.).
Кстати, если книга кому-нибудь нужна, пишите в комментариях, могу выслать на eMail или выложить для скачивания.

Удачи!

Ускоряем разработку. Шаблоны для Eclipse

Владимир | | Eclipse, PHP, Разное.

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

Одной из таких возможностей является автодополнение кода. На сегодняшний день она реализована во многих редакторах, а в IDE стала стандартом де-факто.

Принцип работы этой функции простой. Набираете часть слова, нажимаете Ctrl+Space (может быть другое сочетание клавиш) и появляется список с возможными вариантами автодополнения.

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

В общем, небольшим набором таких шаблонов для Eclipse PDT я и хочу поделиться.

Этот набор я создавал для быстрой вставки комментариев в php код (используется формат phpDocumentor).

Скачать xml файл с шаблонами comments_templates.xml
Читать дальше

Как реализовать асинхронную загрузку файлов с помощью JavaScript и PHP

Владимир | | CodeIgniter, HTML, JavaScript, PHP.

Логотип к статье Асинхронная загрузка файлов

В комментариях к одной из предыдущих статей меня попросили показать пример загрузки файлов на север с помощью технологии AJAX и фреймворка CodeIgniter.

Тогда я ответил, что это несложно и пообещал показать пример. Но, я поторопился и забыл упомянуть о паре «нюансов», связанных с этой операцией 🙂 . Так что, исправляю ошибку.

Механизм отправки

Прежде всего, нужно четко понимать, что отправить (загрузить) на сервер файл с помощью AJAX нельзя.

Тем не менее, можно организовать процесс загрузки так, что с точки зрения посетителя загрузка будет выглядеть асинхронной. Т.е. посетитель укажет имя файла и нажмет кнопку «Загрузить». После этого, увидит умную надпись вроде «Подождите, идет загрузка…» или какую-нибудь анимацию. А после окончания загрузки – сообщение с результатами. Страница, которую он видит, перезагружена не будет.

Но при этом отправка файла будет выполнена обычным способом.

Идея заключается в использовании невидимого фрейма (iframe), атрибута формы target и JavaScript.
Читать дальше

Web разработка. Автоматическое создание методов на PHP

Владимир | | PHP.

Заставка к статье Автоматическое создание методов на PHP

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

Типичный пример – методы установки и чтения свойств (или, если использовать английскую терминологию, getters and setters). Названия этих методов обычно совпадают с названиями свойств класса, только к ним добавляется приставка get или set.

Примечание. Свойства и методы класса – это переменные и функции, объявленные в нем.

Написать такие методы несложно. По-идее, они должны просто возвращать/присваивать значение свойствам. Но на практике, при присваивании нужно еще и проверять полученное значение.

Теперь представьте, что вы пишите класс, который должен хранить данные одной записи из таблицы в базе данных. А в этой таблице 20 полей. Т.е. нужно написать 40 методов. Они, конечно, простые, тем не менее, каждый все равно должен быть протестирован, а это приличный кусок работы.

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

Идея заключается в использовании метода __call(). Если этот метод объявлен в классе, то вызовы всех несуществующих методов будут переданы ему. Первый параметр __call будет содержать имя вызванного метода, а второй – массив с переданными параметрами.

Рассмотрим небольшой пример. Допустим, у нас есть класс.
Читать дальше

Плагины WordPress. Как бороться со спамом в комментариях

Владимир | | WordPress, Разное.

Stop spam
С недавних пор кто-то решил, что этому блогу очень не хватает спама в комментариях и упорно старается исправить ситуацию 🙂 .

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

Примечание. Для создания captcha я использовал Math Comment Spam Protection Plugin.

Но с недавних пор (недели 2 назад) начал появляться спам в трекбеках (где-то по 5-10 штук в день).

Первое время я удалял его вручную, но это дело мне быстро надоело 🙂 .
Читать дальше

PHP framework CodeIgniter. Управление внутренней адресацией

Владимир | | CodeIgniter, htaccess, PHP.

CI router
В этой заметке я покажу, как использовать встроенный роутер CodeIgniter'а для решения одной несложной задачи.

Прежде всего, пару слов о том, что это такое и зачем нужно.

Как вы, наверное, знаете CodeIgniter – это php фреймворк, одними из основных достоинств которого являются простота использования и низкая ресурсоемкость. Тем не менее, его возможности практически не уступают более «тяжелым» аналогам.

Одной из таких возможностей и является роутер. Он позволяет с помощью несложных правил настроить внутреннюю адресацию сайта по своему вкусу.

Любой запрос браузера передается роутеру, а уже потом – контроллеру. Таким образом, можно изменить любой из параметров запроса. Например, перенаправить запрос другому контроллеру или добавить/удалить параметры.

Делается это достаточно просто. В файле /application/config/routes.php нужно задать правила в виде:

$route[‘выражение’] = "новый_адрес";

выражение – здесь можно использовать регулярные выражения, которые будут использоваться для проверки того, нужно ли применить данное правило к полученному адресу или нет.

Теперь переходим к нашей задаче.
Читать дальше