|
Что быстрее PHP или PERL
Ответить на
этот вопрос однозначно нельзя. Дело в том, что Perl существенно отличается от
PHP. Первый - довольно продвинутый и мощный интерпретируемый язык, а второй
создавался исключительно для работы в вебе. Поэтому, когда кто-то Вам скажет,
что PHP круче Перла, пошлите его на три буквы. Эти языки сравнивают в неравных
условиях.
PHP легче -
это факт. При запуске демона httpd (веб-сервер Апаче) он сразу же подгружает
интерпретатор. Поэтому при запросах к скриптам нет бессмысленных и
ресурсоемких загрузок процессора. Скрипт сразу же идет на выполнение, поэтому
и говорят, что PHP очень шустрый. И хотя при использовании PHP тратится
дополнительная память (каждый потомок хватает модуль php), при большом
количестве обращений мы получаем выигрыш в производительности.
Процесс
выполнения Perl-скриптов в стандартном виде несколько иной. При обращении к
такому скрипту, Апаче загружает интерпретатор, а тот выполняет код. При этом
тратится довольно много памяти. Не менее 2 мегабайт на каждый процесс. Обычно
от 4 до 6 мегабайт. Выходит, что каждый раз при обращении к скрипту сервер
производит загрузку тяжелой программы - интерпретатора. Но это не значит, что
Перл-скрипты выполняются медленнее. Это значит, что при работе с Perl сервер
испытывает большую нагрузку.
При больших
нагрузках получаем следующее: сервер, использующий PHP легче справляется с
запросами и может обработать больше клиентов. В то время сервер с сайтами на
Perl будет подтормаживать.
Ситуация легко
разруливается следующим образом (mod_perl - убогий, я о нем говорить не буду):
на сервер с Perl ставится прекрасный модуль fast_cgi (http://fastcgi.com). Он
позволяет существенно снять нагрузку с сервера за счет того, что после первого
запуска скрипт не выгружается из памяти, а ждет следующий запрос. При этом
скрипт будет работать столько, сколько нужно, оставаясь в памяти. Никакой
лишней нагрузки на ресурсы сервера. Та же идея, что лежит в основе PHP.
Простые
CGI-скрипты отличаются от FastCGI-скриптов всего несколькими строчками да и структурой.
Например, скрипт может при первом запуске соединиться с MySQL и постоянно
держать это соединение. Для того, чтобы скрипт работал именно под управлением
FastCGI вызывается библиотека FCGI. Она легко ставится под Linux или Unix.
#!/usr/bin/perl
use FCGI;
my $request = FCGI::Request();
…
Действия, выполняемые при инициализации
скрипта (например, коннект к БД)
…
while($request->Accept() >= 0)
{
…
Основные действия, которые должен выполнять скрипт
…
}
…
Действия при завершении (редко нужно)
…
При выполнении
запросов скрипт как бы гоняется по циклу: ожидание - обработка - ожидание -
обработка. В реале (под Linux или Unix) это спящий процесс, который находится
в режиме Accept.
Если запросов
очень много, то сервер может запустить еще копию процесса. Это жрет некоторое
количество памяти, но в целом увеличивает производительность сервера и ведет к
экономии ресурсов.
Вывод
напрашивается сам собой. Кому нравится Php, пусть использует его и не обвиняют
Perl. Связка Perl и FastCGI - лучший ответ на такие обвинения. При сложных
задачах PHP уступает Perl на стадии выполнения кода, он выигрывает лишь в
стадии загрузки. Но использование FastCGI сводит на нет это преимущество. Так
что выбор между языками зависит от специфики задачи и уровня разработчика.
Perl сложен для новичков, но позволяет решать огромный пласт задач помимо
веб-направленных (например, работа в фоновом режиме и обеспечение работы
сайта). PHP легок в освоении и удобен при создании разного рода
веб-приложений.
Например, РМП
ProtoPlex построен на Perl-скриптах. Некоторые из них работают как Fast-CGI,
некоторые работают в обычном режиме. Крупные и часто используемые скрипты
лучше перевести на FastCGI. Не каждый хостинг-провайдер поддерживает эту
технологию. Мне известны только ValueHost и Ди-Нет. На Валуе я хостился
раньше, на Ди-Нет - сейчас. Ускоренный Perl дает возможность держать крупные
интерактивные сайты на виртуальном хостинге, поэтому все больше провайдеров
ставят себе этот полезный софт.
Системы голосования на
web-серверах.
В практической
работе web-мастера сегодня все чаще встает задача организации процесса
голосования по какому-либо актуальному вопросу, и это постепенно становится
таким же стандартом и признаком хорошего тона, как наличие на сайте гостевой
книги, чата или web-форума. Конечно, если вы новичок, или у вас нет времени,
или для вас не очень критичны детальная статистика опроса или эксклюзивность
дизайна, теперь можно воспользоваться стандартным сервисом http://www.voting.ru/
(так же как и http://www.guestbook.ru/ для организации
гостевой книги), но в некоторых случаях (особенно для организации достаточно
валидных политических анкетирований) необходимо бывает более детально углубиться
в теорию и практику организации процесса голосования именно на своем сервере.
Формулировка задачи и возможные инструменты для ее решения
Сегодня на многих сайтах можно встретить формы голосования. Тематика у них,
как правило, самая разнообразная: от секса до политики, от устойчивости
операционных систем персональных компьютеров до рейтинга музыкальных альбомов.
Книжные магазины спрашивают мнение о книгах, стоматологические сайты - об
отношении к "суперновой" зубной пасте... Все эти задачи в простейшем
случае сводятся к одной:
Есть ВОПРОС.
Есть несколько вариантов ОТВЕТОВ.
Посетитель должен выбрать правильный с его точки зрения ответ (при этом он
имеет право узнать, какова полная картина голосования в данный момент).
На самом деле, если бы все было так просто, существовал бы один или
несколько простых скриптов (вроде раздаваемых на http://www.script.ru/),
которые можно было бы брать за основу и переделывать под конкретные нужды. Но
при внимательном рассмотрении оказывается, что здесь существует еще масса
тонких моментов и подводных камней. Поэтому я полагаю, что универсального
скрипта подобного рода просто не существует, и лучше всего углубляться в
процесс написания системы голосования, начиная с простых примеров, шаг за
шагом отслеживая возможные возникающие проблемы и при этом четко понимая, как
можно научиться их обходить.
Итак, если с исходной формулировкой задачи все более или менее понятно, то с
методом ее решения нужно определиться. В принципе, вариантов использования
голосования на сайте не так много. Я постараюсь осветить варианты реализации
некоторых из них.
Разделим для начала задачу на два класса: "простой счетчик" и
"счетчик со статистикой".
В качестве инструментов я предлагаю выбрать PHP3 (http://www.php3.net/)
в качестве on-line-препроцессора и Perl5 (http://www.perl.com/)
для off-line-обработки.
Язык PHP3 уже достаточно распространен среди хостинг-провайдеров (webmaster.comset.net)
как в России, так и за рубежом. Он был создан специально для написания
скриптов, исполняемых на стороне сервера. Для сервера Apache он работает в виде
дополнительного модуля, обеспечивая высокую скорость работы и удобство
программирования.
Программа на PHP представляет собой файл на языке HTML с включенными в него
тегами PHP, которые выглядят следующим образом:
<? команды ?>
Таким образом, вы можете легко подготовить весь дизайн страницы в любимом
редакторе HTML, а затем вставить в него необходимые команды PHP.
Простой пример программы голосования
С чего начинается система опроса? Правильно, с формы. Итак:
<form method=POST action="stat.phtml">
На президентских выборах победит:<br>
<input name=vote type=radio value="0">мэр Лужков<br>
<input name=vote type=radio value="1">мэр Петушков<br>
<input type=submit value="Go!">
</form>
Поместим эти строки в наш файл vote.html. Обратите внимание на то, что суффикс
у обработчика формы .phtml, а не .html или .cgi. Так обычно обозначают скрипт
для PHP. Вам не требуется делать этот файл исполняемым, так как его выполняет
сам сервер. И, соответственно, вам не требуется выкладывать его в отдельный
каталог cgi-bin.
Поставим задачу как "Сделать счетчик для каждого варианта ответа".
В простейшем случае файл stat.phtml должен содержать следующие строки:
<?
$errmsg="; // Изначально ошибок нет.
$fp=fopen('vote.dat','w+'); //Откроем файл для записи,
но не очищая его.
if ($fp) { // Если не открыть, сообщим об ошибке.
// Прочитаем строку, уберем в конце ее лишний '\n' и
// разделим ее по символу "\t" (табуляция) в массив.
$votes=split("\t",chop(fgets($fp,80)));
$votes[$vote]++; // Увеличим на 1 наш голос.
rewind($fp); // Отмотаем файл в начало.
// Запишем в него массив счетчиков, склеив элементы через
знак табуляции.
fputs($fp,join("\t",$votes));
fclose($fp); // Закроем файл.
} else $errmsg.=' Не открыть файл голосования';
?>
После исполнения этого кода массив $votes будет содержать результаты
голосования (счетчики), а строка $errmsg - сообщение об ошибке (или будет
пустой, если ошибок не было). Так как $vote - это значение переменной vote из
формы файла vote.html (в таком виде программа на PHP получает значения полей
вызывающей формы) и оно может быть равным 0 или 1 (как следует из атрибута
value тегов input формы), то его удобно использовать в качестве индекса в
массиве счетчиков.
Файл vote.dat должен быть доступен на запись пользователю, от имени которого
работает www-server. Этот вопрос следует уточнить у системного администратора
вашего сервера. Обычно достаточно сделать его доступным для записи (группе)
командой ftp
chmod 660
Можно вывести результаты голосований в виде таблицы (эти строки можно записать
тоже в stаt.phtml):
<?
// Запишем в виде массива ответы.
$names=array('мэр Лужков','мэр Петушков');
?>
<table>
<tr>
<td>Кандидат</td>
<td>Голосов</td>
</tr>
<? for ($i=0; $i<sizeof($votes); $i++) : // Цикл по всем
счетчикам ?>
<tr>
<td><? echo $names[$i] ?></td>
<td><? echo $votes[$i] ?></td>
</tr>
<? endfor // Конец цикла ?>
</table>
От простого к сложному
Вот и все? А вот и нет... У такой программы масса недостатков:
1. Ее очень неудобно администрировать. То есть чтобы сменить вопрос или ответ,
придется изменить 2 файла и не забыть про файл счетчиков. Это не всегда просто
и всегда не быстро...
2. Переменная $vote получает значение как параметр value поля input формы.
Нехороший человек может изменить форму, скачав ее на свой компьютер и выполнив
ее оттуда с новым значением поля, например 5. Тогда в статистике будет
выводиться не 2, а 6 строк. Также очень интересное значение будет - 1.
3. Нехорошему человеку ничто не мешает нажать кнопку "Go!" не один,
а, скажем, сто раз. Более того, совсем плохой человек даже нажимать кнопку не
будет, ибо достаточно иcпользовать весьма простую программу для отправки формы
сколько угодно раз... Обсуждение подобных продуктов-накрутчиков не входит в
рамки данной статьи, а вот защита от этого нас весьма интересует.
Эх, усложнять так усложнять. Убьем сначала первого зайца. Давайте заведем
отдельный файл "конфигурации" опроса и переименуем vote.html в
vote.phtml. Вот пример такого настроечного файла (назовем его vote.cfg):
# Файл счетчиков
vote.dat
# Вопрос
Кто будет президентом?
# Ответы
мэр Лужков
мэр Петушков
Будем игнорировать пустые строки и строки, начинающиеся с символа #.
Первая строка - имя файла, вторая - вопрос, а следующие - ответы.
Теперь, если написать "умный" обработчик vote.cfg, можно легко
менять анкету на странице опроса, не меняя скриптов. Доверить изменения
настроечного файла можно даже неспециалисту (см. врезку).
Таким образом файл vote.phtml, содержащий форму, будет выглядеть так:
<?
$errmsg=";
// Загрузка конфигурации
$fp=fopen('vote.cfg','r');
if ($fp) {
// Читать файл, пропуская комментарии и пустые строки.
while ($line=chop(fgetss($fp,200))) if (!ereg('^( *)|(
*#.*)$',$line)) break;
$cntFile=$line;
while ($line=chop(fgetss($fp,200))) if (!ereg('^( *)|(
*#.*)$',$line)) break;
$cntQuestion=$line;
$cntName=array();
while ($line=chop(fgetss($fp,200))) {
if (ereg('^( *)|( *#.*)$',$line)) continue;
$cntName[]=$line;
}
fclose($fp);
} else $errmsg.=' Не открыть файл конфигурации голосования.';
?>
...
...
<form method=POST action="stat.phtml">
<? echo $cntQuestion ?><br>
<? for ($i=0; $i<count($cntName); $i++) : ?>
<input type=radio name=vote value="<? echo $i ?>"><?
echo $cntName[$i] ?><br>
<? endfor ?>
</form>
Как видите, наша форма совсем не зависит от количества и содержания данных.
Код загрузки файла конфигурации можно вынести в отдельный файл, скажем
vote.cfg.inc, и включать его командой include:
<? include('vote.cfg.inc') ?>
Теперь файл stat.phtml будет выглядеть так:
<?
include('vote.cfg.inc');
$errmsg=";
if ($vote>=0 && $vote<count($cntName)) {
$fp=fopen('vote.dat','w+');
if ($fp) {
$votes=split("\t",chop(fgets($fp,80)));
$votes[$vote]++;
rewind($fp);
fputs($fp,join("\t",$votes));
fclose($fp);
} else $errmsg.=' Не открыть файл голосования';
} // else это попытка хака.
?>
Выводим результаты голосований в виде таблицы:
<table>
<tr>
<td>Кандидат</td>
<td>Голосов</td>
</tr>
<? for ($i=0; $i<count($cntName); $i++) : // Цикл по всем
счетчикам ?>
<tr>
<td><? echo $cntName[$i] ?></td>
<td><? echo $votes[$i] ?></td>
</tr>
<? endfor // Конец цикла ?>
</table>
Итак, мы устранили недостатки 1 и 2 первоначального варианта. Решение же
задачи 3 требует более сложных действий. Напомню, речь идет о
"накрутках", когда нехороший человек пытается проголосовать не один,
а много раз. К сожалению, полностью избежать накруток очень тяжело. В общем
случае задача состоит в том, чтобы не допустить повторное голосование. Для
этого надо как-то идентифицировать посетителя. Для поиска новых механизмов
идентификации вам пригодится полезная функция phpinfo(), которая выводит всю
доступную информацию о посетителе (и многое другое) на экран. Что нам может
пригодиться?
1. Cookies
Можно в начале файла stat.phtml (до вывода первого символа) проверить наличие
переменной, например, if (isset ($reload)). Если она определена - значит,
отказать в голосовании, если нет, то использовать функцию setcookie
('reload','yes') и разрешить голосование. Недостаток такого метода очевиден:
накрутчик может отключить куки. Но такой метод спасает от случайных обновлений
страницы stat.phtml.
2. REMOTE_ADDR
Это ip-адрес посетителя. Можно его запомнить в хэш-файле. Вот так:
<?
$MIN_TIME=30*60; // Минимальное время для разрешения
повтора (30 мин.)
$voteOK=0; // По умолчанию нельзя.
$db=dbmopen('vote','w');
if ($db) {
if (dbminsert($db,$REMOTE_ADDR,time())==0) { // Новый
посетитель
$voteOK=1;
} else { // Посетитель уже был
// Если он был давно, то можно...
$time=dbmfetch($db,$REMOTE_ADDR);
if (time()-$time>$MIN_TIME) {
// Разрешая, надо обновить время последнего доступа.
dbmreplace($db,$REMOTE_ADDR,time());
$voteOK=1;
}
}
dbmclose($db);
}
?>
Далее в программе можно пользоваться логической переменной $voteOK, которая
показывает, можно ли посетителю менять счетчик или нет. У этого метода,
конечно, есть свои достоинства и недостатки. К достоинствам можно отнести его достаточную
параноидальность. Она же и главный недостаток. Из-за применения этого метода,
например, лукавит счетчик "Рамблера". Все дело в том, что
$REMOTE_ADDR - это и ip-адрес прокси-сервера, если посетитель идет через такой
сервер, и ip-адрес моста, если посетитель заходит из локальной сети своей
фирмы. Таким образом, в СПб может оказаться всего сотня-другая хостов, что
несколько не соответствует действительности. Пользователи, выходящие в
Интернет с помощью модема, как правило, получают ip-адрес динамически, и
следующий посетитель вашей страницы может быть с тем же ip, но это будет
другой компьютер. Можно использовать $MIN_TIME, как в моем примере, то есть
через этот интервал времени ip считается не использованным. Получаса обычно
хватает. Вы можете использовать более сложный ключ, включая такие переменные
запроса, как HTTP_X_FORWARDED_FOR, REMOTE_PORT, HTTP_USER_AGENT, но, в отличие
от REMOTE_ADDR, первые две из них легко подделываются злоумышленниками, а
REMOTE_PORT может быть у каждого запроса новый.
Таким образом, с применением интернет-технологий в опросах (показах баннеров,
счетчиках и т. п.) не избежать искажения результатов статистики. В ваших руках
как разработчика опроса есть только возможность достичь максимального
приближения к идеалу. Это поле деятельности для искусственного интеллекта.
Экспериментируйте, делитесь со мной результатами...
Допустим вариант с off-line-обработкой статистики. Программа stat.phtml может
просто записывать результат голосования и данные о пользователе в
последовательный файл, в конец этого файла-журнала. Информацию о результате
голосования можно брать из файла результатов. Некая же отдельная процедура,
написанная на Perl, будет запускаться раз в полчаса, анализировать такой
журнал и записывать результат в файл счетчиков. Если вы предполагаете, что по
вашей анкете будут голосовать как минимум раз в пару минут, то лучше пойти по
такому пути:
<?
$fp=fopen('vote.log','a');
$time=time();
fputs($fp,"$vote\t$time\t$REMOTE_ADDR\t$HTTP_USER_AGENT\t$
HTTP_X_FORWARDED_FOR\n");
fclose($fp);
$fp=fopen('vote.dat','r');
//Открываем только на чтение!
$votes=split("\t",chop(fgets($fp,80)));
?>
Такая программа будет отрабатывать максимально быстро. А обработчик журнала не
будет сильно нагружать компьютер, так как будет выполняться весьма редко по
компьютерным понятиям.
#!/usr/local/bin/perl -w
#
# Простой анализатор журнала.
#
use strict;
# Читаем журнал
open LOG,'<vote.log' or die;
my @votes=();
while (<LOG>) {
chomp;
my ($vote,$time,$addr,$agent,$proxy)=split/\t/;
$votes[$vote]++;
}
close LOG;
# Записываем счетчики.
open CNT,'>vote.dat' or die;
print CNT join "\t",@votes;
close CNT;
exit;
В принципе, off-line-обработчик может не просто записывать данные в файл, а
генерировать сам html-файл статистики. Так можно поступать на очень
загруженных системах для минимизации нагрузки на процессор сервера. Конечно,
надо бы читать и файл vote.cfg, проверять поля $vote и т. д...
Примеры статистической обработки результатов голосования
Как видите, во время выполнения программа получает массу полезной информации о
пользователе. Да и анкета может не ограничиваться одним вопросом. Как только
условия работы программы начинают выходить за рамки поставленной в начале
статьи задачи в сторону усложнения статистики, on-line-обработка результатов
сразу начинает отходить на второй план.
В общей задаче анкетирования присутствуют несколько вариантов ответов на
вопросы, не предусмотренные и просто текстовые ответы, статистика данных о
посетителе. Еще, в принципе, можно отслеживать изменение статистики во времени
в случае продолжительных интернет-тестов. И вряд ли для этого стоит заводить
базу данных SQL для хранения данных анкеты - даже для обработки десятков тысяч
анкет достаточно и простого текстового файла, как в расмотренном нами примере.
В этой статье нет возможности рассмотреть даже малую часть всех вариантов
статистической обработки. Самое простое, что приходит на ум, - это динамика
ответов (за равные промежутки времени) и распределение респондентов по
географии.
Коротко рассмотрим оба случая, а файл журнала оставим от предыдущего примера.
А. Динамика ответов
#!/usr/local/bin/perl -w
#
# Простой анализатор журнала со статистикой по времени.
#
# Статистика по дням.
use strict;
# Читаем журнал
open LOG,'<vote.log' or die;
my @slices=();
my $slice=-1; # Номер среза по времени.
my $last=0;
my @stamp=();
while (<LOG>) {
chomp;
my ($vote,$time,$addr,$agent,$proxy)=split/\t/;
my $day=floor($time/(24*60*60))*(24*60*60); # Приводим
время к началу дня.
$slice++ if $last!=$day; # Следующий день наступил.
$slices[$slice][$vote]++;
$stamp[$slice]=$day;
}
close LOG;
# Записываем счетчики.
open CNT,'>vote.dat' or die;
my $i;
for ($i=$#slices; $i; $i-) { # По всем дням в обратном порядке.
print CNT $stamp[$i],"\t"; # День
print CNT join "\t",@slices[$i]; # Счетчики
print CNT "\n";
}
close CNT;
exit;
В результате выполнения это программы файл vote.dat будет содержать строки
следующего вида:
ВРЕМЯ<tab>счетчик1<tab>счетчик2...
По этим данным можно построить красивый график изменения показаний счетчиков
по времени, что может характеризовать, в частности, результаты рекламных
кампаний персон из нашего самого первого примера.
Ясно, что после прокрутки по телевидению удачного клипа количество голосов за
данного кандидата должно увеличиться, - особенно если рекламный ролик будет
каждые десять минут прерывать модный боевик. И будет особенно радостно это
увидеть наглядно!
Б. Статистика по географии
О географическом положении посетителя можно узнать как по его ip-адресу, так и
прямо задав вопрос в анкете. Не будучи социологом по образованию, не буду
углубляться в дебри вопроса "Можно ли доверять ответу
пользователя?", но и ip-адресу тоже особенно доверять не стоит. Несмотря
на это некую оценку географического положения респондентов получить вполне
возможно.
По ip-адресу можно получить информацию из двух источников. Во-первых, это
доменное имя. Во-вторых, это данные о регистрации сети. Рассмотрим подробнее
оба источника.
Доменное имя мы можем получить из переменной $REMOTE_HOST, если web-сервер
успел его определить, или командой
nslookup <ip-адрес>
в противном случае.
Однако ни для кого уже не секрет, что сервер с именем qq.spb.ru может
находиться в США, а www.zzz.com - в Петербурге. Так что анализ самого имени
нам ничего не даст. А вот регистрирующий орган (INTERNIC, RIPN, etc) нам, в
первую очередь, поведает о географическом положении владельца домена. Получить
эту информацию можно как воспользовавшись командой
whois домен.ru@whois.ripn.net
так и подключившись к серверу whois, вводя запросы последовательно, что нас как
раз устроит в поставленной задаче. Все бы хорошо, но не на все домены имеется
информация. Пример - тот же домен spb.ru.
Тогда можно определить сеть посетителя. Запишем ip-арес в виде xxx.yyy.zzz.0 и
запросим также по протоколу whois орган, регистрирующий сети:
whois 194.105.206.0@whois.ripe.net
В зависимости от сервера результат вывода может иметь иной формат, но
программу можно настроить на все такие серверы. Сервер whois.ripe.net, в
частности, предоставляет поля address и country в выводной информации,
характеризующей географическое положение владельца ip-сети.
К сожалению, и этот метод не дает стопроцентной гарантии. Вы можете обнаружить
большую сеть, подсети которой находятся в различных, весьма удаленных друг от
друга, регионах. Что ж, если вам требуется совсем точный результат, то
автоматизация тут будет только помощником, решающим большую долю задач, а
спорные вопросы придется выяснять вручную.
Я не буду приводить пример обработки журнала с анализом географии
респондентов. Это уже большая и серьезная программа, напишите ее сами - это
хорошая гимнастика для ума...
Визуализация результатов обработки статистики голосования
Итак, мы получили чудесную статистику по нашей анкете. Как ее вывести?
Самый простой вариант - это таблица из строк вида
Ответ - Счетчик
Именно такой вывод осуществлен в нашем примере, рассмотренном выше.
Однако хочется иметь более красивый вид страниц. Особенно в этом вас будет
убеждать дорогой дизайнер, осуществляющий разработку внешнего вида проекта.
Давайте его послушаем... Итак, что мы можем выжать из таблицы? На таблицах
языка HTML мы можем построить красивую столбцовую диаграмму. Даже трехмерную.
Ведь в наших руках такой умный инструмент, как PHP.
Построим диаграмму по последнему примеру с изменением счетчиков во времени.
Пусть по горизонтали изменяется время, а по вертикали - величина счетчика. Для
каждого варианта построим отдельный график:
<?
include('vote.cfg.inc');
$base=80; // Максимальная высота полоски.
$fp=fopen('vote.dat','r');
$votes=array(); $max=0;
$time=floor(time()/(24*60*60))*(24*60*60); // Начало сегодня.
for ($i=0; $line=chop(fgets($fp)); $i++) {
$tmp=split("\t",$line);
// Индекс там расчитывается хитро, поскольку может быть день,
когда не было голосования.
$ind=floor(($tmp[0]-$time)/(24*60*60)); // Кол-во дней от
сегодня.
$votes[$ind]=$tmp;
// Вычисляет максимальное значение счетчика. Заносит в $max.
getMaxVote($tmp);
}
// $votes содержит все голосования.
?>
...
...
<table cellpadding=3 cellspacing=o border=0>
<? for ($i=0; $i<count($cntName); $i++) : ?>
<tr>
<td><? echo $cntName[$i] ?></td>
<td><table cellpadding=0 cellspacing=0 border=0>
<tr>
<? for ($j=0; $j=count($votes); $j++ ?>
<td width=8 height=<? echo $max ?> align=bottom><img
src="bar.gif" width=8
height=<? echo floor($votes[$j][$i+1]*$base/$max) ?>
border=0></td>
<? endif ?>
</tr>
</table></td>
</tr>
<? endif ?>
</table>
В принципе, можно нарисовать графики отдельно, во время off-line-обработки - в
виде изображений в формате GIF, используя такие пакеты, как ImageMagic или GD,
имеющие интерфейс к Perl. PHP (с подключеными модулями графики) может тоже
рисовать графики, и даже весьма изощренные, но это не задача для
on-line-препроцессора. Мы, например, даже не включили в on-line-версию PHP
поддержку графических библиотек. Хотя удобство PHP побудило меня собрать
отдельно off-line-интерпретатор PHP, работающий из командной строки. Вот в
него-то и включены все возможные функции.
***
Думаю, в этой статье я достаточно полно описал вопрос анкетирования на
web-страницах. Как обычно бывает в таких случаях, начав с простой задачи, мы
подошли к более общей ее постановке. Надеюсь, что мои рассуждения немного
помогли разобраться в построении систем голосования не только авторам домашних
страничек, но и достаточно профессиональным разработчикам...
Как отправить файл
(например, настроенный файл vote.cfg) на сервер без ftp?
Это можно сделать средствами PHP на сервере Apache в OC UNIX.
Для начала создадим файл upload.html с формой загрузки файла:
<FORM ENCTYPE="multipart/form-data"
ACTION="do.upload.phtml" METHOD=POST>
<INPUT TYPE="hidden" name="MAX_FILES_SIZE"
value="10000">
send this file:<INPUT NAME="userfile" TYPE="file">
<INPUT TYPE="submit" value="Send File">
</FORM>
Обратите внимание на параметр ENCTYPE тега <FORM>. Поле userfile имеет
тип file, что указывает броузеру вывести текстовое поле с кнопкой
"Обзор" или аналогичный для выбора файла.
Скрытое поле MAX_FILE_SIZE должно быть расположено до поля ввода файла, а его
значение определяет максимальный размер передаваемого файла ы бфйтах.
Файл do.upload.phtml получает следующие переменные:
$userfile - имя временного файла на сервере, в который был записан принятый
пользовательский файл. Имя переменной соответствует имени поля типа file.
Таким образом вы можете передать несколько разных файлов, используя одну и ту
же форму upload.phtml.
$userfile_name - оригинальное имя файла, заданного в форме.
$userfile_size - размер принятого файла в байтах.
$userfile_type - тип MIME (mime-type) принятого файла если броузер
поддерживает эту информацию. строка, например, "image/gif".
Часть userfile описанных переменных - это имя поля INPUT с типом TYPE=file.
Для примера мы выбрали имя userfile.
По умолчанию файлы записываются сервером во временный каталог. Вашей программе
следует удалить такой файл после использования. "Русский" Apache
может перекодировать пересылаемый файл из кодировки пользователя в базовую,
принятую на сервере. Наверное, правильно было бы перекодировать текстовую
информацию и оставлять без изменений остальные типы файлов. Обычно правильно
настроенный Apache так себя и ведет.
Пример файла do.upload.phtml:
<?
if ($usefile_size<10000) {
$fi=fopen($userfile,'r');
if ($fi) {
$fo=fopen ('vote.cfg','w'); // игонорируем оригинальное
имя файла.
if ($fo) {
// здесь можно проверять структуру файла и т.п.
$fwrite($fo,fread($fi,$userfile_size));
fclose($fo);
} else $errmsg.='Не открывать файл на запись.';
fclose($fi);
unlink($userfile); //Удаляем временный файл.
} else $errmsg.='Не открыть временный файл.';
} else $errmsg.='Размер превышает 10К.';
?>
...
...
<? if (errmsg==") : //загружен успешно ?>
загружено <? echo $userfile_size ?> байтов.
<? else :?>
Ошибка: <? echo $errmsg ?>.
<? endif ?>
...
...
Если сервер вашего провайдера поддерживает PHP, то вы легко сможете создавать
динамические страницы, сочетая это с загрузкой файлов данных (прайс-листов,
конфигураций, новостей и т.п.) через форму. При этом лицо, отвечающее за
загрузку файлов, может не знать вашего пароля доступа к содержимому сервера -
все пароли вы назначаете сами. Описание этого скрипта и других полезных
функций вы можете найти на сайте http://webmaster.comset.ru
Закачиваем файлы на
FTP-сервер
На написание
этой статьи меня натолкнуло письмо, пришедшее от подписчика моей рассылки.
Я всегда пишу статьи о тонкостях web-дизайна, но ни разу ещё не писал о
закачке файлов на сервер.
Чего непонятного в закачке я не пойму, всё наглядно описывается в письме,
которое приходит после регистрации в ваш почтовый ящик. Хотя, как показывает
практика, некоторым всё же стоит это объяснить. Для супер-простоты пойдём по
шагам.
Выбираем
программу. Некоторые мастера на начальном этапе своей деятельности для закачки
файлов используют стандартный проводник Windows'а. Я бы не рекомендовал это
делать. Если сравнивать закачку файлов с помощью проводника с закачкой с
помощью специального ftp-клиента, то получится то же самое, если сравнивать
скачивание файла с помощью стандартного браузерного "даунлодера" с
профессиональным (ReGet, FlashGet): скорость загрузки, функции и т.д..
Программ ftp-клиентов существует великое множество. Это количество исчисляется
сотнями, если не тысячями. Самые известными и современными на данный момент
являются CuteFTP, 3D-FTP и SmartFTP. Я бы посоветовал вам использовать
программу 3D-FTP. В принцыпе, все программы работают одинаково, но у 3D-FTP
очень красивый интерфейс и имеется поддержка скинов. Интерфейс этих программ
напоминает интерфейс знакомого каждому Windows Commander'а. Окно разделено на
2 части. В левой часте окна находятся файлы вашей машины, в правой - файлы
сервера.
Настраиваем
программу. Программу (я буду описывать настройку на примере 3D-FTP) мы
выбрали, осталось её настроить. Для настройки необходимо зарегистрироваться на
одном из хостинг-провайдеров (narod.ru, holm.ru, hostmos.ru, by.ru и т.д.).
После регистрации вам придёт письмо с регистрационными данными. Открываем
программу, ищем в верхнем левом углу кнопочку "Connect" с
изображением планеты, нажимаем на неё. Появилось окно, в котором ищем в правой
колонке меню кнопочку "New", нажимаем. В появившемся окне в строчке
"Site Name" пишем название сайта (пример: Мой супер-пупер сайт). В
следующей строчке прописываем ftp-адрес хостера. Его можно посмотреть в
письме, которое пришло после регистрации (у narod.ru ftp-адрес - ftp.narod.ru,
у holm.ru - ftp.имя_сайта.h10(h1, h11).ru). Далее убираем галочку около
"Log in as Anonymous User". Пишем в поле "FTP User name"
ваш логин, а в поле "FTP Password" ваш пароль. По желанию можно
заполнить поле "Local Init Dir". Это директория (папка), где
находится ваш сайт. Нажимаем "ОК". Теперь ваше подключение появилось
в поле подключений. Всё должно работать. Подключаемся к интернету, выделяем
это подключение и нажимаем "Connect". Если в правой колонке после
попытки подключения появились дериктории сайта, значит вы всё правильно
настроили и можете закачивать свои файлы. Для обычных файлов (не cgi-скриптов)
чаще всего служит дериктория "www", либо она называется
"htdocs", либо как-то ещё. Закачиваем в неё "индексный" файл,
открываем браузер, прописываем адрес сайта и всё! Страница загрузится в
браузере.
Всё гениальное
просто! Как видите, ничего сверхсложного нет.
Устанавливаем скрипты
Сегоднешняя
статья для самых-самых начинающих. Началось всё с того, что мне в гостевой
книге посетитель попросил, чтобы я рассказал об установке скриптов и я
вспомнил, что когда-то сам столкнулся с этой проблемой, но в интернете не
нашёл ни одной статьи на эту тему, пришлось также писать в разные форумы и
гостевые книги о просьбе.
Установить скрипт проще простого. Для начала ищем хостинг, который бы
поддерживал скрипты. Из бесплатных я советую Fatal.ru или Holm.ru. Потом
скачиваем с сайта Woweb.ru скрипт, который вы хотите установить (желательно
для начала скачайте русский, чтобы легче разобраться). Скрипт скачал, осталось
разобраться, закачать и установить.
Открываем скаченный архив, ищем файл readme.txt или readme.html, открываем и
читаем. Самое главное - найти те строчки, где написано, какие права доступа
нужно указать на тот или иной файл. Права доступа обычно обозначаются
трёхзначным числом (например 777). Права доступа должны быть написаны для всех
файлов (кроме файлов с расширением .html).
Берём любой уже настроенный FTP-клиент (об этом я уже писал в статье "Закачиваем
файлы на FTP-сервер"). Теперь подключаемся к интернету,
соединяемся с сервером и закачиваем файлы строго по инструкции, то есть файлу
README. Помните! Если вы скачали CGI-скрипт, его нужно устанавливать в
директорию "cgi-bin", предназначенную специально для таких скриптов,
иначе у вас ничего работать не будет!
Итак, файлы скрипта закачали, теперь настроим. Вот здесь нам и пригодится те
самые права доступа, которые мы так упорно искали в файле README. Теперь
смотрим права доступа для каждого файла и ставим их. Как это сделать? По
закаченному в интернете файлу кликаем правой кнопкой. Ищем в меню строчку
"Сменить атрибуты", либо "CHMOD", либо "Change
Attributes", появится окно, где будут написаны четыре цифирки, вот их-то
нам и нужно заменить на нужные. После установки всех файлов в браузере
прописываем адрес скрипта, всё должно работать. Если не работает, значит либо
вы где-то ошиблись, либо скрипт нерабочий, либо ваш хост не поддерживает
скрипты.
Удачи!
Java-сервлеты
Чтобы получить
более глубокое понимание значения Java-сервлетов, я решил побеседовать с Полом
Коттоном, президентом и генеральным директором компании Live
Software, Inc., занимающейся разработками в области Java и
расположенной в Сан-Диего, штат Калифорния. Live Software является создателем
JRun, продукта, позволяющего стандартным Web-серверам выполнять Java-сервлеты.
Пол также один из соавторов книги Java Unleashed, опубликованной в Sams.net.
Если у Вас появятся дополнительные вопросы, Вы можете связаться с ним через pc@livesoftware.com.
Чем отличается Java-сервлет от Java-аплета?
В принципе, сервлет является зеркальным отражением аплета. Сервлет можно
рассматривать как аплет для сервера. Сервлеты выполняются на Web-сервере так
же, как аплеты выполняются в Web-браузере. Браузер может отправить запрос на
выполнение сервлета напрямую; то же самое браузер делает, когда напрямую
обращается к аплету.
Нужен ли для сервлетов специальный сервер?
Первое, что Вам нужно для выполнения Java-сервлетов, так это установленная на
сервере Java Virtual Machine (JVM). Это аналогично выполнению Java-аплетов в
браузере. Браузер, поддерживающий аплеты, просто обязан работать с виртуальной
машиной. Таким образом, и серверу для выполнения сервлетов потребуется
виртуальная машина.
Кроме того, сервер должен поддерживать Java Servlet API. Данный API,
разработанный компанией JavaSoft, определяет, как и когда сервлет
взаимодействует с сервером. По своей сути, Servlet API - это хорошо
сформулированный набор функциональных команд для получения и отправления
информации на сервер и с сервера. Сервлет должен уметь обращаться к
специфическим для сервера переменным, дeлать переадресовывания, посылать сообщения
об ошибках и т.п. Java Web Server компании Sun поддерживает Servlet API и,
естественно, имеет свою JVM.
Таким образом Java Servlet API зависит от Java-Web-сервера?
Нет. Servlet API - это набор Java-классов, которые можно скачать
непосредственно с сайта Sun, и не так уж важно с каким сервером Вы работаете.
Это всё называется Java Servlet Development Kit. Когда вы будете скачивать
этот инструментарий, Вы найдёте в нём набор плагинов, с помощью которых Вы
сможете обновить свой Netscape, IIS или Apache. Это простейшие имплементации,
не претендующие на всю полноту функциональности. Но для начала их вполне
достаточно. Но Вы можете воспользоваться и другими продуктами.
Мы в Live Software специально создали JRun, с помощью которого теперь можно
работать с сервлетами, написанными для Java Servlet API, на любом сервере.
JRun представляет собой набор Java-классов, реализующих весь спектр функций,
необходимых для того, чтобы приложение могло выполнять сервлеты. Кроме этого,
мы написали специфический для каждого Web-сервера код-мост для связки с JRun.
В настоящее время наш продукт работает с Microsoft's IIS 3.0 и 4.0,
Microsoft's Personal Web Server для Windows 95, и совсем недавно мы закончили
работы над интеграцией JRun с WebSite Professional компании O'Reilly. А так же
приступили к проектированию JRun под Macintosh Web server WebStar.
Меня и в самом деле серьёзно заинтересовала возможность реализации продукта
для WebSite. У нас уже были достаточно интересные наработки, поскольку мы
тесно общаемся с его создателем Бобом Денни (Bob Denny). Интегрирование JRun в
WebSite означает, что на сегодняшний день из всех созданных под Windows 95 и
NT серверов, пока только WebSite предлагает полный набор сервлетной
функциональности. Работая на WebSite, сервлеты могут наследовать все
специфические особенности управления доступом, имеющиеся в WebSite, позволяя,
таким образом, аутентифицировать пользователя даже для каждого отдельного
сервлета. Мы также осуществили интеграцию администраторского интерфейса JRun с
программой администрирования WebSite. Скоро для пользователей WebSite 2.0
появится update с полной поддержкой сервлетов, который в свою очередь войдёт в
следующий релиз WebSite.
Как бы Вы объяснили разницу в создании приложений из сервлетов и приложений на
базе CGI?
Во-первых, использование Java для разработки CGI уже значительно удобнее и
менее проблематично, чем работа с С, Perl или другими программными языками.
Хотя бы потому, что Java объектно-ориентированный (т.е. предназначенный для
CGI) язык, и в нём более совершенна поддержка построения Web-приложений. Но
что важнее, он представляет собой более простую и дружественную среду
разработки. К примеру, в сервлете достаточно воспользоваться несколькими
простыми командами для печати, чтобы отправить информацию в Web. С помощью
Servlet API разработчику не нужно беспокоиться о проблемах внутренних
процессов сервера. Данные для форм, хедеры, cookies и прочее управляются не
Вами, а соответствующими классами сервлета. Кроме того, поскольку сервлеты
написаны на Java, Вы можете гонять их с одного сервера на другой, не обращая
внимания на операционные среды или тип сервера. Преимущество самой технологии
Java в том, что "написанное однажды работает везде".
Perl развил это понятие. Вы можете написать на Perl программу и пользоваться
ею на разных серверах. Но Perl - это интерпретируемый язык, поэтому он будет
медленнее загружаться и выполняться из-за необходимости обращаться к
переводчику для скрипта Perl. Не секрет, что уже появились решения для запуска
переводчика Perl параллельно с процессом выполнения программы, но Java пока
остаётся более надёжным и устойчивым языком для разработки CGI-приложений.
А теперь об отличиях между условиями работы CGI и сервлетов. Сервер запускает
всего одну виртуальную машину, а сервлет загружается только один раз при
первом обращении. Ему не нужно повторно загружать до тех пор, пока его
содержание не измениться. А, будучи модифицированным, сервлет может
перезагрузиться без необходимости перезагрузки сервера.
Сервлет постоянно находится в памяти и поэтому быстро выполняется. Статичная
или обновляемая информация может предоставляться независимо от количества
обращений к сервлету, что позволяет большому кругу пользователей получить к
ней доступ. Например, если мне нужно отправить нечто в базу данных, я могу
приступить к выполнению операции через самостоятельную нить и попросить
пользователя вернуться ещё раз через пятнадцать минут.
Ещё одним важным моментом является тот факт, что сервлеты это модульные
конструкции, каждая из которых может выполнять самостоятельную операцию, или
объединяться в более сложные архитектуры. Сервлеты могут взаимодействовать
друг с другом. Таким образом, мы можем создавать так называемые
"сервлетные цепочки". Я могу брать результат работы одного сервлета
и передавать его другому для дальнейшей обработки. Это очень удобно, поскольку
самим сервлетам без разницы, как их собираются использовать.
Не могли бы Вы привести несколько примеров сервлетов?
Простым примером может быть создание информационного фильтра. Предположим, у
нас есть сервлет для поиска текстовых форм в базе данных и отправки их
пользователю. Независимо от него, Вы можете написать ещё один сервлет, к
примеру, для дифференциации языков, который будет заниматься сортировкой
английских фраз и пытаться перевести их, к примеру, на французский язык. Вы
можете связать их вместе, чтобы результат поиска передавался для дальнейшего
перевода.
Инициировать эту операцию можно, указав последовательность сервлетов, как
показано в образце:
/servlet/DBRequestServlet,
FrenchTranslatorServlet
Используя
сервлетные цепочки, Вы можете так переводить результат работы любого сервлета,
а не только своего собственного.
В качестве другого примера можно привести привычный "модификатор".
Мы написали сервлет, который берёт страницу в виде окна и трансформирует её в
страницу в виде таблицы. Это наиболее удобный способ подготовки всевозможных
презентаций, так часто используемых в Web. Сервлет располагает содержание
страницы в том порядке и в том стиле, который Вам нужен. Если пользователь не
хочет видеть тяжеловесную графику, я пропускаю документ через сервлет, который
удаляет все крупные изображения. И хотя это можно делать и в CGI, сервлеты
значительно проще.
Можно ли сказать, что Java Servlet API находится на ранней стадии разработки?
Определённо, так сказать можно. Тем не менее, поскольку Servlet API достаточно
прост, следовательно, он достаточно стабилен.
Servlet API, как и сам Java, постоянно совершенствуется. JavaSoft намерена
добавить в него ещё несколько характеристик. Предполагается, что в следующей
версии Servlet API появится встроенный механизм отслеживания сессий. JRun
будет его поддерживать с первых дней.
Намерена ли Sun поддерживать Servlet API?
Компания Sun
собирается это делать. Должен отметить, что они достаточно серьёзно относятся
к своему Java Web Server. Не знаю, чем это вызвано. Рассматривая его как
средство разработки для сервера, с уверенностью можно говорить, что это
отличный инструмент. Но как Web-сервер, он пока уступает по скорости и
функциональности другим серверам. И поскольку у Вас есть возможность
использовать сервлеты на любом сервере, большой необходимости иметь именно JWS
нету.
А готов ли рынок для Java-сервлетов?
Мы занимаемся разработками для Web уже много лет, и что более всего меня поражало,
так это тот факт, что все пытаются реализовывать одни и те же программы. Но мы
на сам то деле не всегда способны усовершенствовать что-то, созданное кем-то
другим. Поэтому мы предлагаем нечто новое. Сервлеты могут изменить
существующий порядок вещей. У Вас появляется возможность находить и
использовать компоненты, выполняющие большое количество различных операций, из
которых Вы можете создавать свои приложения. С кодом CGI в этом плане всё
гораздо сложнее.
К примеру, Вы написали сервлет, позволяющий Вам подключаться к серверу системы
платежей типа CyberCash. Существует не менее дюжины скриптов для выполнения
этой процедуры. Некоторые удобные, некоторые не очень. К стати, скрипты для
CyberCash написаны на Perl. Наш сервлет для CyberCash работает быстро,
небольшого размера, а главное платформенно-независим. Такой сервлет вполне
может стать стандартным компонентом любой электронной торговой системы.
Вы выпускаете продукт под названием LiveSite, который позволяет
взаимодействовать с Java-сервлетами с помощью вставки специальных меток в
HTML. Данный продукт предназначен для разработчиков Cold Fusion и ASP.
LiveSite - это сервлет, который поддерживает около сотни макросов,
вызывающихся пользователем при обращении к HTML. Все эти макросы выполняют
полезную работу типа управления вводом/выводом данных файла, обработки строк,
доступа к базам. Что выделяет LiveSite, так это то, что сервлеты тоже могут
распределяться в документе HTML в виде новых макросов. Администратор может
назвать сервлет любым именем макроса. Макрос инициирует сервлет внутри
документа HTML, передаёт сервлету параметры и форматирует результат для
отображения на странице. То есть, это удобное и простое средство использования
сервлетов.
Похоже, что сервлеты - это наиболее удачный сегодня способ применения Java.
Аплеты слишком медлительны и выполняются только на клиентской стороне. А как
Вы считаете?
Моё личное мнение заключается в том, что Java слишком мощное средство, чтобы
использоваться на клиентской стороне. Гораздо большего результата при создании
клиентских приложений можно добиться с помощью Dynamic HTML.
Но как средство для сервера, возможности Java неограниченны. Вы не зависите ни
от браузера, ни от версий JVM, так болезненно настроенных по отношению к
клиенту. Вы можете сразу же использовать новейшую версию JDK, поскольку не
надо беспокоиться о его поддержке в браузере. Один последний пример нашей
работы. Мы написали Java-сервлет для обработки Java-кода, встроенного в
документ HTML. Мы создали единственную новую метку "<JAVA>",
позволяющую Вам вставлять Java-код в свой HTML, когда вам это необходимо.
Когда нам нужна страница, наш сервлет возьмёт HTML, создаст из него другой
сервлет, выполнит его, а результат передаст серверу. Вам даже не нужна
полноценная среда разработки. Это очень удобно для небольших задач, состоящих
из нескольких строк Java-кода. Я уверен, что количество приложений, которые
можно создать из Java-сервлетов, просто не ограниченно
ПО необходимое для
web-дизайнера (мастера)
Здесь я решил
описать элементы необходимые для создания сайта…
Все программы, которыми я пользуюсь -
(я считаю, что это один из лучших наборов):
Редактор:
CoffeeCup HTML Editor v.9.5 (многофункциональный редактор, понадобится для
ручного исправления и создания HTML-кода, визуальные же, такие как -
Dreamweaver или Microsoft Front Page редакторы не могут полностью
контролировать процесс создания web-странички, а также оставляют очень много
«мусора» (лишних ненужных, неиспользуемых тэгов))
FTP Менеджер:
Total Commander v.6.0 (для закачивания файлов на сервер)
Браузер
(Browser):
Microsoft
Internet Explorer 6.0 и Netscape Navigator 6.0
Вообще в настоящее время имеется только три браузера, заслуживающих упоминания
- это "Microsoft Internet Explorer", "Netscape Navigator"
и "Opera".
Для проверки внешнего вида Ваших страничек Вам придется использовать именно
их. Причем на компьютере желательно иметь все три браузера (у меня стоит
Microsoft Internet Explorer 6.0 и Netscape Navigator 6.0). Нормальная
(профессионально) выполненная WEB-страничка должна одинаково выглядеть в любом
из браузеров.
Графические
пакеты:
Для растровой
графики
Adobe Photoshop 7.0
(для создания всех графических элементов) или Paint Shop Pro 7.0 (поддерживает
фильтры от Adobe Photoshop (количество фильтров огромно, но нужных для web – немного; они способны повысить
работоспособность в Adobe Photoshop и 2-3 нажатиями создать отличные
эффекты)) Нужно иметь умение:
Сканирования
фотографий;
Коррекции отсканированных
и готовых фотографий, в том числе - тоновой и цветовой коррекции;
Ретуши фотографий;
Кадрирования;
Понимания различий в
форматах графических файлов;
Грамотного
использования фильтров;
Работы со слоями и
т.д.
Для векторной
графики
Corel DRAW 11.0 или Adobe Illustrator 10 - они обе являются лидерами в своих
областях… Нужно иметь умение:
Работать с графическими объектами (группировка, наложение, получение
нестандартных объектов);
Работать с кривыми и узлами кривых;
Работать с направляющими и сеткой;
Разбираться в цветовых моделях (RGB, CMYK, HSB);
Работы с текстом - разместить его на любой кривой;
Грамотного использования градиентов и заливок (включая фрактальные);
Грамотного использования эффектов и т.д.
Macromedia Flash v.6.0 (практически это стандарт для использования в Web
векторных изображений, обладает собственной средой разработки и позволяет
создавать отличную векторную анимацию)
Ulead GIF
Animator v.5.0
(программа, позволяющая Вам создавать анимированные GIFы, обладает очень
мощными средствами оптимизации и впринципе может заменять на начальном этапе
всю работу с анимацией).
Утилиты:
Adobe PageMaker 6.51 (профессиональный издательский пакет для вёрстки,web-дизайна, оформления документации)
Browser Sizer
1.03а (с помощью которой можно проверить, как будет выглядеть та или иная
web-страница на мониторах с различным экранным разрешением, без изменения параметров
настройки монитора в Windows)
Fine Reader
6.0 (программа для распознавания текста, которая поможет сэкономить массу
времени, избавляя от ручного набора напечатанных текстов (я ей пользуюсь для
перевода различных статей и текстов с различных языков, а также огромная
помощь при программировании – поскольку большинство хороших учебников на
других языках))
Оптимизация
JPEG Optimizer
GIF Optimizer
HTML Optimizer
Я считаю это
более-менее полный список ПО для создания для занятия WEB дизайном. Не все из
этих программ конечно нужно иметь сразу, но для профессионального подхода к
делу требуется не менее этого.
А для начала достаточно какого-нибудь браузера, визуального редактора
(напр. Dreamweaver или Microsoft Front Page) и ftp менеджера, а уже по мере накопления
опыта Вы освоите и другие программы из вышеуказанного списка.
Введение в Cookies
Что такое
cookie?
Cookie является решением одной из наследственных проблем HTTP спецификации.
Эта проблема заключается в непостоянстве соединения между клиентом и сервером,
как при FTP или Telnet сессии, т.е. для каждого документа (или файла) при
передаче по HTTP протоколу посылается отдельный запрос. Включение cookie в
HTTP протокол дало частичное решение этой проблемы.
Cookie это небольшая порция информации, которую сервер передает клиенту.
Клиент (броузер) будет хранить эту информацию и передавать ее серверу с каждым
запросом как часть HTTP заголовка. Некоторые cookie хранятся только в течение
одной сессии, они удаляются после закрытия броузера. Другие, установленные на
некоторый период времени, записываются в файл. Обычно этот файл называется
'cookie.txt'.
Что можно
делать с помощью cookie?
Сами по себе cookies не могут делать ничего, это только лишь некоторая
информация. Однако, сервер может на содержащуюся в cookies информацию.
Например, в случае авторизованного доступа к чему либо через WWW, в cookies
сохраняется login и password в течение сессии, что позволяет не вводить их при
запросе каждого запаролированного документа. Другой пример: cookies могут
использоваться для построения персонализированных страниц. Чаще всего
встречается такое - на некотором сервере Вас просят ввести свое имя, и каждый
раз, когда Вы заходите на первую страницу этого сервера, Вам пишут что-то типа
"Hello, your_name!". На использовании cookies также часто строят
функцию оформления заказа в онлайновых магазинах, в частности, в Амазоне,
такая своеобразная виртуальная корзина покупателя, как в обычном реальном
супермаркете.
Какие броузеры поддерживают механизм cookies?
Не все, конечно, однако самые популярные поддерживают. Я точно знаю, что
Netscape (начиная с самой первой версии), Microsoft IE (трешка и четверка -
точно, про предыдущие не знаю), Mosaic
Установка
cookie.
Как выставлять cookies клиенту зависит от того, как они будут использоваться в
дальнейшем. Это можно делать как с помощью скриптов,так и с помощью META-тагов
HTML. Можно манипулировать временем жизни выставленных cookies и устанавливать
место, в котором установки действительны. Общий формат установки таков:
Set-Cookie: NAME=value; EXPIRES=date;
DOMAIN=domain_name; PATH=path; SECURE
Установка
cookie с помощью HTML.
Простейший способ выставить cookie - использовать соответствующий META-таг в
заголовке <HEAD> </HEAD> любого статического HTML документа. Это выглядит следующим образом:
<META
HTTP-EQUIV="Set-Cookie" CONTENT="NAME=value; EXPIRES=date;
DOMAIN=domain_name; PATH=path; SECURE">
Установка
cookie с использованием Perl/CGI.
Другой способ выставить cookie - с помощью серверного скрипта. На Perl это
будет выглядеть примерно следующим образом: перед тем как выдавать серверный
ответ генерируется HTTP заголовок
print
"Content-type: text/html\n";
print "Set-Cookie: username=aaa13;
expires=Friday,31-Dec-99 23:59:59
GMT; path=/win/internet/html/;
domain=citforum.ru;\n\n";
Чтобы прочитать скриптом значение cookie, которое было
установлено ранее, и соответствующим образом выполнить скрипт, используется
переменная окружения HTTP_COOKIE. На Perl это будет выглядеть так:
$cookie = $ENV{'HTTP_COOKIE'};
При использовании SSI для просмотра значения cookie можно применить директиву:
<!--#echo var="HTTP_COOKIE"-->
Установка
нескольких cookie одновременно.
Как с помощью HTML, так и с помощью скриптов можно устанавливать несколько
cookie разом:
HTML:
<META
HTTP-EQUIV="Set-Cookie" CONTENT="NAME=value; EXPIRES=date;
DOMAIN=domain_name; PATH=path; SECURE">
<META HTTP-EQUIV="Set-Cookie"
CONTENT="NAME=value; EXPIRES=date;
DOMAIN=domain_name; PATH=path; SECURE">
Perl/CGI:
print "Content-type:
text/html\n";
print "Set-Cookie: NAME=value; EXPIRES=date;
PATH=path;
DOMAIN=domain_name; SECURE\n";
print "Set-Cookie: NAME=value; EXPIRES=date;
PATH=path;
DOMAIN=domain_name; SECURE\n\n";
Импортирование информации
с чужого сайта на свой сайт в свой дизайн
Импортирование
информации с чужого сайта на свой сайт в свой дизайн. (На примере
импортирования прогнозов погоды с Yahoo.)
Добре,
господа!
Пример
предназначен для тех, кто начинает работать с php, и не только для них.
Результатом
работы программы(скрипта) является прогноз погоды на 5 дней для любого,
интересующего Вас города, выводимый в виде, который нравится именно Вам, а не
дизайнерам сайта-донора.
Информация в
таких случаях берется с известных серверов прогноза погоды (где не пишут фразу
"запрещено использование информации" и т.п.). В данном случае
используется сервер http://weather.yahoo.com , на котором есть страницы с
погодой для довольно большого количества городов, и практически всегда можно
найти если не интересующий Вас город, то ближайший ему и идентичный по
погодным условиям.
Это
законченный проект, работающий на сайте http://sim-sim.ru в разделе туризма
"погода в мире".
Единственным
недостатком является лишь то, что админу приходится вводить в текстовый файл
(возможен вариант с mysql, но в том случае мне было проще сделать в файле)
название населенного пункта на родном языке и ссылку на страницу с прогнозом
погоды на него на сервере Яхо. Но никто за Вас этого делать не будет.
Посему, скрипт
состоит из 2-х частей:
1. Файл с
администрированием (вводится в первую строку название города, на следующей
строке - ссылка). Разбирать работу данной части, думаю, не стоит, комментариев
более чем достаточно.
2. Файл с
самой программой. Работа программы будет подробно описана ниже.
1.
Администрирование.
Выводим на
экран форму с паролем pass. В окне вводятся: номера названия ссылки Затем,
после нажатия на кнопку и проверки пароля, записываем новый список в файл.
<html>
<head>
<title>admin weather</title>
</head>
<body>
<?php
$adr=$DOCUMENT_ROOT."/weather/weather.ini";
// адрес файла, в котором и будут записываться названия городов со ссылками
$password='pass';
// простенькая система авторизации
$eror='Password
eror!';
$old=file($adr);
// читаем то, что сейчас есть в файле
if ($submit) {
// проверяем на нажатость кнопки
if ($pass==$password) {
$fp=fopen($adr,"w");
fwrite ($fp,
$ini); // записываем в файл измененные данные
fclose($fp);
$old=file($adr);
}
else {
echo $eror;
}
}
?>
<form method=post action="<?php echo
$PHP_SELF?>"> // информация, введенная в форму, обрабатывается этим же файлом
password:<input type=text name=pass><br>
inicialisation:<textarea name="ini"
rows=15 cols=60>
<?
for ($i=0; $i<sizeof($old); $i++) {
echo $old[$i],
""; // выводим на экран текущий вариант файла
}
?>
</textarea>
<br>
<input type=submit name="submit"
value="Enter">
</form>
</body>
</html>
После ввода
информации в файл в виде, получаем:
50
Ларнака
http://weather.yahoo.com/forecast/Larnaca_CY_f.html
51
Пафос
http://weather.yahoo.com/forecast/Paphos_CY_f.html
"44"
- номер города.
"Ларнака"
- название города.
"http://weather.yahoo.com/forecast/Larnaca_CY_f.html"
- ссылка на погоду в городе Ларнака на Яхе.
Ссылки на
города организовываются по принципу:
<a
href=http://www.sim-sim.ru/catalogue/weather.php?weather=50>Ларнака</a>
А можно так:
<a
href=http://www.sim-sim.ru/catalogue/weather.php?city=Ларнака>Ларнака</a>
Но если город
из друх слов, то в пробелах пишем "%20"
В таком
случае, номера городов в списке не нужны:
Ларнака
http://weather.yahoo.com/forecast/Larnaca_CY_f.html
Пафос
http://weather.yahoo.com/forecast/Paphos_CY_f.html
Если у нас не
текстовый файл, а mysql, то все проще.
Если кому
понадобится вариант с mysql, пишите мне totoeval@mtu-net.ru
2. Программа
(собственно, адаптер чужого кода к Вашему сайту).
<table width=100% border=0 cellspacing=0
cellpadding=2 bgcolor=<? echo $brdcolor; ?>>
<tr>
<td>
<br>
<!----------------------- FORECAST
------------------------->
<?php
$ini=$DOCUMENT_ROOT.'/weather/weather.ini';
$region=file($ini);
// читаем файл со списком городов-ссылок а массив $region
// определение
координат искомого города
for ($i=0;
$i<sizeof($region); $i++) {
if (trim($region[$i])==$weather) { // ищем номер города в списке
$city=trim($region[$i+1]); // название города
$adr=trim($region[$i+2]); // адрес страницы
}
else {
}
}
// если у нас
передается информация не номером города, а названием, то:
for ($i=0; $i<sizeof($region); $i++) {
$city=str_replace($city,"%20","
"); // заменяем
"%20" на
" "
if
(trim($region[$i])==$city) { // ищем название города в списке
$adr=trim($region[$i+1]); // адрес страницы
}
else {
}
}
// Входная
информация для дальнейшего кода - $adr (адрес страницы прогноза погоды для
города на сайте http://weather.yahoo.com)/ и $city - название города на родном
языке.
//
// фразы для поиска
полезной информации. Оригинал фраз можно обнаружить на странице, например,
этой , проанализировав код.
// здесь
заводим в переменные фразы, по которым будем искать нужную информацию
(градусы, описания погоды, картинки). Используем фразы до и после необходимой
информации.
Этот блок в
будущем придется изменять, когда на оригинале (weather.yahoo.com) изменится
код страниц.
$begin_screen='FORECAST
----'; // начальная фраза таблицы с прогнозом погоды
$end_screen='</b></td></tr></table></td></tr></table>';
// последняя фраза таблицы
$post_gradus='</font></b><'; // после градусов
$before_gradus='<font size="3"
face="arial">'; // перед градусами
$before_image='http://us.i1.yimg.com/us.yimg.com/i/we/fc/';
// перед картинкой
$post_image='.gif'; // после картинки
$before_forecast='top><font
face="arial" size="2">'; // перед фразой погоды
$post_forecast='</font></td><td>';
// после фразы погоды
// массивы для
переводов даты и описаний погоды с английского языка на родной (в данном
случае использован вариант перевода с буржуйского на язык, которым
разговаривал Ленин.
$endat=array("
","Mon","Tue","Wed","Thu","Fri","Sat","Sun","May","Jul","Jun","Aug",
"Sep","Oct","Nov","Dec","Jan","Feb","Mar","Apr");
// английские даты
$rudat=array("
","понедельник","вторник","среда","четверг","пятница","суббота","воскресенье",
"мая","июля","июня","августа",
"сентября","октября","ноября","декабря","января","февраля","марта","апреля");
// родные даты
$eng=array("
","Thunderstorms","Sunny","Partly
Cloudy","Showers","Rain","Mostly Cloudy","Tstorms","Drizzle","Cloudy","Flurries","Fog","High","Low","Clear","Sleet",
"Rain/snow","Snow
Showers","Mixed Snow", "Rain",
"Snow","Mixed"); // английские описания погоды
$rus=array("
","гроза","ясно","переменная
облачность","ливень","дожди","облачно","гроза","изморось","пасмурно","снегопад",
"туман","день","ночь","ясно","дождь
со снегом","дождь со снегом","мокрый снег","снег
с дождем","снег","переменно"); // российские аналоги
погоды
$brdcolor='#ffffff';
// цвет рамки таблицы прогноза (белый)
$bgcolor='#eeeeee';
//цвет фона ячеек таблицы (лучше - цвет фона страницы)
// А Здесь
начинается код программы, который изменять не придется.
// занимаемся
созданием даты, выводимой на экран.
Функция time()
даст нам текущее время. Функцией date(d." ".M,$t[$i]) получаем дату
текущего и последующих 4 дней, а date(D,$t[$i]) дает нам дни недели всех 5
дней. А затем переводим даты с английского языка на родной.
$t=array(4);
$d=array(4);
$dn=array(4);
for ($i=0; $i<=4; $i++) {
$t[$i]=time()+$i*86400;
$d[$i]=date(d." ".M,$t[$i]);
$dn[$i]=date(D,$t[$i]);
for ($j=0;
$j<sizeof($endat); $j++) { // переводим слова в дате и получаем даты на
родном языке
$d[$i]=str_replace($endat[$j],$rudat[$j],$d[$i]);
$dn[$i]=str_replace($endat[$j],$rudat[$j],$dn[$i]);
} // и получаем
даты на языке, которым разговаривает наш нонешний Вова
}
// начинаем
обрабатывать страницу.
// Выясняем
строки начала и конца таблицы с прогнозом погоды. Затем, будем работать именно
с этим блоком.
$screen=file($adr);
// читаем страницу с прогнозом погоды в переменную $screen
for ($i=1;
$i<sizeof($screen); $i++) { // обрабатываем строки с первой по последнюю
if (strpos($screen[$i],$begin_screen)==false) { //находим начало таблицы с прогнозом
if (strpos($screen[$i],$end_screen)==false) { //находим ее конец
}
else {$m=$i;
// $m - номер последней строки таблицы
}
}
else {$k=$i;
// $k - номер первой строки таблицы
}
} // Получаем
с $screen[$k] по $screen[$m] - нашу таблицу с погодой. Потом будемработать
именно с ней, чтобы не было лишних совпадений, и быстро работала программа.
// Можно ее
выводить в "родном дизайне, но нам это не нравится
// Начинаем
искать полезную информацию.
$grad=array(9);
// массив из 10 чисел градусов температуры окружающей среды
$zed=0; //
счетчик градусов
for ($i=$k;
$i<=$m; $i++) { //работаем с градусами
if
(strpos($screen[$i],$before_gradus,0)==false) { //если нет градусов в строке
(если нет фразы, стоящей перед градусами.
}
else {// если
есть градусы в строке
$string_grad=$screen[$i];
// сохраняем строку с градусами в переменную
$string_grad=explode($before_gradus,$string_grad);
// разбиваем строку на массив строк по разделителю, которым является фраза
перед градусами, таким образом, мы получаем в 1 элементе массива строку,
которая начинается собственно с самого градуса погоды.
$end_grad=strpos($string_grad[1],$post_gradus,0);
// определяем позицию начала фразы, идущей после градуса.
$grad[$zed]=substr($string_grad[1],0,$end_grad);
// первый градус получаем, как подстрока, с 0-го символа до начала фразы после
градуса.
$zed++; // инкремент счетчика градусов
$end_grad=strpos($string_grad[2],$post_gradus,0);
$grad[$zed]=substr($string_grad[2],0,$end_grad); // второй градус
$zed++; //
инкремент счетчика градусов
}
} // в результате
чего, мы получили все градусы на нашей странице
// переводим фаренгейты в цельсии
for ($i=0; $i<=9; $i++)
{$grad[$i]=round(5/9*($grad[$i]-32));
}
// в варианте
с забиранием информации со страницы с цельсиями
// эту строку
стоит просто закомментировать. Я оставил так, просто каприз.
// переводим
фаренгейты в цельсии
// находим
слова погоды абсолютно аналогично поиску градусов
$zed=0; //
счетчик описаний погоды
for ($i=$k;
$i<=$m; $i++) { //работаем с описаниями
if (strpos($screen[$i],$before_forecast,0)==false) {
//если нет описания погоды в строке
}
else {// если
есть описания в строке
$string_grad=$screen[$i];
// сохраняем строку с описаниями в переменную
$string_grad=explode($before_forecast,$string_grad);
$end_grad=strpos($string_grad[1],$post_forecast,0);
$forec[$zed]=substr($string_grad[1],0,$end_grad);
for ($j=0;
$j<sizeof($eng); $j++) { // перебираем все варианты слов в описаниях
$forec[$zed]=str_replace($eng[$j],$rus[$j],$forec[$zed]);
// переводим слова
}
$zed++; //
инкремент счетчика описаний
}
} // в
результате чего, мы получили все описания погоды на нашей странице
$zed=0; //
счетчик слов картинок аналогично
for ($i=$k;
$i<$m; $i++) { //работаем с картинками
if
(strpos($screen[$i],$before_image,0)==false) { //если нет описания погоды в
строке
}
else {// если
есть картинки в строке
$string_grad=$screen[$i];
// сохраняем строку с картинками в переменную
$string_grad=explode($before_image,$string_grad);
$end_grad=strpos($string_grad[1],$post_image,0);
$for_img[$zed]=substr($string_grad[1],0,$end_grad);
$zed++; //
инкремент счетчика картинок
}
} // в
результате чего, мы получили все картинки на нашей странице
?>
// публикуем результаты:
<table width=100% cellpadding=0 cellspacing=0
border=0>
<tr><td width=20% align=center><font
size=3><b
><? echo
$city; // выводим название города, для которого отображается прогноз погоды
?></b><br></font></td></tr></table
><table width=100% cellpadding=0 cellspacing=0
border=0>
<tr><?
for ($i=0;
$i<=4; $i++) { // выводим на экран ячейки с датами и днями
echo "<td width=20% align=center><font
size=2><b>$d[$i]<br>$dn[$i]</b></font></td>";
}
?></tr
></table
><table width=100% cellpadding=0 cellspacing=0
border=0 bgcolor=<? echo $brdcolor; ?>
><tr><td
><table width=100% cellpadding=2 cellspacing=1
border=0
><tr><?
$zed=0; //
счетчик выводимых градусов
for ($i=0;
$i<=4; $i++) { // выводим ячейки с прогнозами - картинки, градусы, описания
$zed1=$zed+1;
echo "<td width=20% align=center
bgcolor=$bgcolor valign=middle><img
src=../pic/".$for_img[$i].".gif border=0
alt=".$forec[$i]."><br><br><font
size=2>".$forec[$i]."</font><br><br><font
size=3><b>".$grad[$zed]."°C<br>".$grad[$zed1]."°C</b></font></td>";
$zed=$zed+2;
}
?>
</tr></table>
// картинки
можно привязать к картинкам Яхи (названия аналогичных по погоде совпадают, как
в моем случае), а можно сделать массивы соответствия слов-описаний погоды и
Ваших картинок. Это по-желанию. Что долговечнее, трудно судить. И
фразы-описания они могут изменить, и картинки переименовать. Можно, конечно
договориться с админом Яхи, чтобы они не меняли один из этих элементов и
отталкиваться от него, но у меня не было его телефона:о)
</td>
</tr>
</table>
Теперь
программа работает, и ее можно вставлять в свой дизайн. Вот вариант:вышеупомянутая Ларнака
Если кого
заинтересуют "вариации на тему" или возникнут вопросы, прошу писать
мне totoeval@mtu-net.ru . А также, пишите все, кто сможет посоветовать другие
варианты. Всегда рад критике и возможности повысить свой уровень.
Студия дизайна. Много ли
надо чтобы организовать её?
Студия
дизайна. Много ли надо чтобы организовать её? По большому счёту можно даже не
регистрироваться как юридическое лицо. Ведь что такое организация? Минимум два
человека, стремящихся к достижению общей цели. Целью здесь выступает
удовлетворение человеческих потребностей в области веб-дизайна, а также
сопутствующих ей и извлечение прибыли. У вас также могут отсутствовать такие
существенные затраты как приобретение (аренда) офиса, необходимого
оборудования, программного обеспечения… Я не говорю что это правильно. Я
говорю, что этого можно избежать, по крайней мере на первых порах.
Чтобы удовлетворять потребности нужно обладать соответствующими навыками либо
самому, либо иметь под рукой людей, которые этими навыками владеют. Рассмотрим
основные навыки, необходимые студии для соответствия профессиональному уровню,
который и является одним их главных критериев достижения успеха в этом деле.
Прежде всего - это дизайн как таковой.
Студия должна иметь профессионального дизайнера. Здесь важно отметить, что
дизайнер и художник - две разных ипостаси. Дизайнер, в отличие от художника использует
в своей работе, а нередко и кладёт в её основу не им созданные художественные
ценности. Норма в профессиональном дизайне сегодня - использование покупных
фотографий и заказной графики, не говоря уже о шрифтах. Дизайнер должен
владеть передовыми профессиональными графическими пакетами для обработки и
создания растровой, векторной графики, а нередко и специализированным
программным обеспечением для рендеринга трёхмерных объектов. Т.е. для
дизайнера ярко выражен его синтез с компьютерными технологиями.
Дело обстоит совершенно иначе, когда мы говорим о художнике. Умение рисовать -
талант совершенно отдельный от таланта дизайнера, и к тому же в гораздо
большей степени врожденный и слабо поддающийся развитию. Работа художника это
всегда элемент индивидуальности, особый почерк, недоступное фотографии
парадоксальное сочетание начал обобщения и детализации. Привлекательность
художественной графики заключается в неизбежной неточности мазков, аморфности
пятен краски, брызгах, подтёках… Время от времени в услугах художника
появляется необходимость. Он также необходим для разработки логотипов.
Качественный, стильный дизайн это очень важно, ибо по одёжке встречают. Но это
далеко не всё.
Программинг. Наличие группы талантливых профессиональных программистов - это
крайне важный фактор успеха. Нельзя определить, что важнее: дизайн или
программинг, т.к. эти два направления призваны дополнять друг друга. Чистый
HTML-код веб-страниц, корректное отображения оных в различных популярных
версиях браузеров, владение DHTML, Java Script, Java, CSS, XML, Perl, PHP,
ASP, VBasic, MySQL, MS SQL, Oracle, Flash - всё это мгновенно поднимает студию
на качественно иной уровень - уровень профессиональных веб-студий, услуги
которых оцениваются в тысячи долларов.
Многое зависит от руководителя - лидера студии. Он должен, как минимум, иметь
чёткое представление об аспектах работы каждого профессионала студии и самому
быть профессионалом в одной из областей. Он отвечает за планирование,
организацию работ над очередным проектом, мотивацию людей и контроль над ходом
выполнения работ. Креативное мышление, чёткая координация усилий, вписывание в
поставленные временные рамки, справедливое вознаграждение работников
соответственно их вкладу в проект - признаки грамотного руководства и успеха
студии в целом.
Руководитель - лицо студии. На нём лежит бремя общения с клиентом. Общения
корректного, вежливого, внимательного, направленного на демонстрацию
профессионализма студии, выяснение потребностей и предпочтений клиента,
убедительную презентацию готового проекта.
Численность персонала студии веб-дизайна прямо зависит от объёма работ.
Логично, что чем более раскручено имя студии, тем больше клиентов у студии.
Соответственно необходимость в своевременном выполнении заказов диктует
дополнительный набор персонала.
Необходимо отметить также, что совокупные знания и средства студии должны
обеспечить реализацию таких направлений как интернет-маркетинг - раскрутка
сайтов в сети; работу над контентом - информационным наполнением сайтов;
консалтинговые услуги - квалифицированные консультации; производство
качественных баннеров с потенциально высоким CTR; постоянное отслеживание и
ориентацию на передовые течения и технологии, имеющие отношение к веб-дизайну.
В этой связи, на сегодняшний день я могу порекомендовать к освоению
технологию, за которой будущее - Macromedia Flash.
Секрет успеха для вас может крыться также в осознании одной важной вещи.
Интернет имеет способность стирать для своих обитателей такие понятия как
географическая зона, уровень жизни. И будь вы хоть чукотской студией
веб-дизайна (но профессиональной) - вы имеете уникальную возможность
предложить свои услуги всему миру и получить за свою работу вознаграждение,
эквивалентное стандартам развитых стран с развитой экономикой.
Успех студии веб-дизайна делают люди этой студии. Чёткая специализация под
призмой профессионализма; грамотная координация всех звеньев системы;
впечатляющий набор знаний и навыков, доступных студии; качество - как
ассоциация имени студии; известность и слава - как совокупность
вышеперечисленного - вот те секреты, ведущие к успеху.
Так много ли надо, чтобы организовать студию веб-дизайна? Думаю, вы получили
ответ на этот вопрос.
Я тебя слепила как душа
просила, а потом что было...
Не спеши,
Паровоз
Хотим сделать сайт, уже знаем о чем он будет, для кого он будет и что там
будет. Не знаем только одного - как и с помощью чего будем его делать. Давайте
разберемся сейчас, чтобы не было мучительно больно потом.
Благими намерениями...
Все, даже господин Лебедев, когда-то начинали. Все мы открывали блокнот,
писали в него строчку <html> и надолго задумывались "а что,
собственно, дальше?". А дальше надо действительно подумать, хорошо
подумать, так как помимо идеи сайта, материалов, кучи различного софта и
неуемного энтузиазма, надо продумать механизм сайта. Или, говоря по
новомодному, "движок". В самых простейших случаях можно конечно
обойтись и без него, то есть сотворить некую структуру, обозвать структурные
единицы разделами, забить под завязку эти разделы нужной и полезной информацией,
поставить на сайт голосование, форум, гостевую, счетчики от сторонних
ресурсов. Потом связать все это хозяйство в единый организм сотней
перекрестных гиперссылок и залить получившийся шедевр на сервер. Замечательно!
Что-же мы такое сделали? А сделали мы себе очень большие проблемы. Представим
себе такую ситуацию: на нашем сайте около сотни страниц (пусть даже не сотня,
а всего десять), разделенных по десяти разделам. Половина из всех наших
страниц в организованном беспорядке напрямую ссылается на другие страницы
(ссылки вида http://www.yourserver.ru/section/info.html), а на другую половину
можно попасть только из страниц из первой половины. И вот у нас назрела
необходимость один, самый большой и грандиозный раздел, поделить на три
поменьше. Разделили, но что это? Посетители начинают нас заваливать письмами о
том что не могут найти тот материал, этот. Страница с ошибкой 404 (страница не
найдена) становится самой посещаемой у нас на сайте (впору на ней баннеры
крутить). Что нам приходится делать? Идем по всей своей сотне страниц и правим
внутренние ссылки, проверяем и снова правим, потом снова правим и снова
проверяем. Спустя пару дней сайт снова работает как часы, все ссылки верны и
посетители больше не ругаются. А неделей позже мы добавляем пару новых
материалов, новый раздел и начинаем проходить все круги ада по новой.
Заканчивается все это рано или поздно всегда однинаково: сайт перестает
обновляться, а его владелец, сказав "А ну его, мы лучше наш, мы новый мир
построим", переезжает но новый адрес и лепит очередной шедевр, который,
если вебмастер не сделал надлежащих выводов, ждет судьба предыдущего. Знакомая
ситуация? Лично мне года три назад, когда я не знал даже азов
веб-программирования, приходилось практически ежедневно обновлять проект,
состоящий из более чем сотни страниц в семи разделах. Я продержался три
месяца. Поэтому, если ваш проект будет размером больше 10 страниц и вы
собираетесь его дальше развивать, в первую очередь необходимо продумать
навигацию на сайте, вывод материалов, организацию перекрестных динамических
ссылок и массу других мелочей. А толково организовать все это хозяйство можно
с помощью какого-либо языка программирования, технологии SSI и прямых рук
(наличие последних есть необходимое, но не есть достаточное условие). Вот и посмотрим,
как нам такой механизм организовать.
Чтобы что-то сделать, надо знать что именно
Для создания "движка" сайта нам понадобится любой язык
программирования (Perl, PHP, ASP, JSP,...), и, если есть такая возможность,
SSI и доступ к любой базе данных. В этой статье я не буду касаться технической
стороны создания механизма, в этой статье я расскажу о том, что это должен
быть за механизм, какие функции он должен выполнять и какую выгоду мы от этого
получим. Начнем с определения целей, ради которых будут ломаться копья:
одинаковый стиль дизайна для всех
страниц и смена дизайна всего сайта за 5 минут;
доступность любого материала при его
логическом перемещении в любое место сайта без какой-либо правки ссылающихся
на него страниц;
легкость и оперативность изменения
любых материалов и настроек структуры сервера через веб-интерфейс;
безболезненное добавление новых
материалов в уже сложившуюся структуру сайта;
полный учет и статистика перемещений
пользователя по внутренним ссылкам сервера и выхода за его пределы.
Задачи поставлены, теперь разберемся с их решением. Вообще говоря есть три
принципиальных пути, первый с использование шаблонов и языка программирования,
второй - с использованием SSI, а третий является комбинацией двух первых. Мы
рассмотрим первый вариант, тк о втором я расскажу подробно в другой статье, а
третий, на мой взгляд, весьма неоднозначен.
Физика и лирика
Шаблон - наше спасение. Поясню на примере: у нас есть некий раздел с
десятком-другим статей, дизайн этого раздела не меняется от статьи к статье,
так зачем нам держать для каждой статьи отдельную страницу, занимая место на
сервере и создавая себе вышеописаные проблемы? Правильно, незачем. Поэтому для
этого раздела мы создаем шаблон, в нем в то место, где будет выводиться сам
текст статьи вставляем самопальный тег типа <ARTICLE> и сохраняем
полученное творение под именем article_template в директорию на нашем сервере.
Затем пишем небольшой скрипт viewarticle.cgi, который, в зависимости от
передаваемых ему данных, будет брать этот файл article_template, искать в нем
тег <ARTICLE> и подставлять вместо него статью, ID которой этому скрипту
был соответственно передан в запросе вида
http://www.yourserver.ru/cgi-bin/viewarticle.cgi?id=XX, где XX - номер
запрашиваемого материала. А сам материал тем временем в виде обычного
тексотового блока (может быть даже приправленного html-тегами) лежит себе в
базе данных. И все, если статья была успешно извлечена из своего хранилища и
не менее успешно подставлена вместо тега <ARTICLE>, можно совершенно
спокойно выдать пользователю получившийся документ. Просто? Очень! Таким-же
образом можно обрабатывать например теги <COUNTERS> для подставления
кода счетчиков, <MENU> для навигационного меню, <VOTE> для вывода
голосования и любые другие уникальные теги для других целей. Аналогичным
образом можно написать шаблоны для абсолютно всех страниц сайта. Надеюсь не
нужно обьяснять, что каждый материал должен иметь свой уникальный ID. А сейчас
посмотрим что еще полезного можно сделать на основе нашего механизма. Ну, во-первых,
можно максимально оперативно добавлять, редактировать и удалять любые
материалы (если соберетесь удалять, поставьте вместо тела удаленной статьи
небольшое обьяснение пользователю, что и почему удалили и где можно найти этот
материал сейчас, или просто расскажите анекдот:)). Во-вторых, можно не
беспокоиться за вызов этого материала из любой точки сайта или вообще сети,
так как адрес у нее теперь один на века. В-третьих, графическое оформление
всех материалов всегда будет соответствовать общему дизайну сайта, так как
поменять дизайн одного шаблона в тысячу раз проще чем дизайн тысячи страниц.
В-четвертых, если вы дополните свой механизм несложной системой статистики, вы
будете знать про свой сайт все: кто, куда, откуда и зачем пришел. В-пятых, вы
навсегда избавитесь от ошибки 404 на своем сайте, так как в любой момент
сможете контролировать своиства всех внутренних ссылок на вашем сайте. Можно
привести еще аргументы, и шесть, и семь, и еще много, но разве уже приведенных
недостаточно?
...То и полюбила!
Если немного пошевелить мозгами и руками, можно достаточно быстро создать
очень удобную систему управления своим сайтом. Вы поразитесь тому, как вы
раньше жили по другому. Ваш сайт будет работать как часы даже в период
глобальных изменений, и ни один посетитель не уйдет разочарованным
Adobe Photoshop:
разработка собственных эффектов
Adobe
Photoshop предоставил пользователям огромное количество самых изощренных
эффектов, применяя которые можно преобразить изображение до неузнаваемости.
Однако если вашей неуемной фантазии не хватило стандартных эффектов,
воспользуйтесь возможностью создания собственных фильтров.
Существует два
основных инструмента для создания собственных эффектов: Custom («Заказной») и
Displace («Смещение»).
На заказ
Команда Custom
позволяет создавать собственные фильтры, суть которых в «смешивании» соседних
пикселов. Они применяются для усиления и уменьшения резкости изображения,
создания рельефов, сглаживания и др.
Редактируют
фильтр в диалоговом окне Customs («Заказной»): Filter • Other • Custom
(«Фильтры» • «Еще» • «Заказной»). В нем, помимо маленького окна для
предварительного просмотра изображения, имеется матрица 555 ячеек и две опции:
Scale («Масштаб») и Offset («Смещение»). Для того чтобы видеть результат
действия разрабатываемого фильтра, должен быть установлен флажок на опции
Preview («Просмотр»).
После нажатия
на кнопку OK выделенная часть изображения обрабатывается в соответствии с
введенными в матрицу числами, т. е. фильтр уменьшает текущее значение яркости
каждого пиксела на значение из центральной ячейки матрицы. Затем он умножает
значения яркости соседних пикселов на значения из ячеек матрицы, расположенных
вокруг центральной (при этом все пустые ячейки матрицы игнорируются).
Полученные произведения суммируются и делятся на значения параметра Scale, к
частному добавляется значение Offset. Далее фильтр переходит к следующему
пикселу из выделенной области и повторяет вышеописанные действия.
Если сильно
увеличить яркость, то выделенная область станет белой. Для получения более интересного
результата необходимо отслеживать, чтобы сумма всех элементов матрицы
составляла единицу. При этом не следует вводить слишком большие значения:
чтобы получить оригинальный и красивый эффект, достаточно использовать числа
от 0 до 9. Применение больших значений приводит к тому, что изображение
становится резким и слишком светлым. При использовании меньших значений
полученный рисунок, напротив, будет очень темным.
|

|
|
Результат применения
фильтра. Таблица была составлена абсолютно случайно, однако результат
довольно интересный
|
Когда сумма элементов матрицы превышает единицу, результат можно
откорректировать, изменяя значение параметра Scale (например, если сумма равна
3, то это число и следует ввести в Scale). В противном случае (когда результат
сложения меньше единицы) следует наращивать значение центрального элемента
матрицы. Необходимо учесть, что допустимо вводить только целые значения: в
матрицу — от -999 до 999, в Scale — от 1 до 9999 и в Offset — от -9999 до
9999.
Значения в
ячейках, расположенных по горизонтали и вертикали по отношению к центральной,
регулируют резкость изображения. Для усиления резкости изображения нужно
вводить отрицательные значения в левую, правую, верхнюю и нижнюю ячейки
(эффект можно смягчить, увеличив значение в центральной ячейке и использовав
соответствующее значение параметра Scale). Для уменьшения резкости, наоборот,
требуется задавать положительные значения.
Для выделения
контуров изображения следует вводить в центральную ячейку небольшое
отрицательное число, а в соседние с ней — единицы и двойки. Для увеличения
освещенности границ и одновременного ослабления резкости следует увеличить
число в центральной ячейке и задать необходимое значение параметра Scale.
Как уже
отмечалось выше, если сумма элементов матрицы меньше единицы, создается
затемненное изображение (лишь с намеками на яркость в точках высокой
контрастности). Такой фильтр тоже допустимо использовать, причем можно
создавать его различные и очень интересные модификации. При этом небесполезно
изменять значение параметра Offset.
|

|
|
Такая
таблица повышает резкость. Если увеличить число в центральной ячейке матрицы
и использовать соответствующее значение Scale, можно смягчить эффект
|
Когда сумма элементов матрицы равна нулю, следует использовать значения от 100
до 300 (указанный диапазон обеспечивает наиболее интересные и красивые
эффекты). Для того чтобы осветлить темное изображение, в Offset следует
вводить отрицательные величины.
Если числа в
ячейках матрицы по мере их удаления от центральной будут возрастать, а в
центральной ячейке окажется единица, получится эффект направленного ослабления
резкости. При этом следует подобрать такое значение параметра Scale, чтобы
изображение не стало белым. Причем допустимо увеличивать значения в ячейках
как только центрального столбика (либо только центрального ряда), так и в
самых различных их сочетаниях.
Вводя
отрицательные числа в различных комбинациях, можно создавать фильтры усиления яркости,
а несимметричные матрицы обеспечивают рельефность изображения.
|

|
|
Карта
смещения (диагональная градация черного) и результат ее применения
|
Смещение
Для вызова
фильтра Displace используется команда Filter • Distort • Displace («Фильтры» •
«Искажение» • «Смещение»). С его помощью деформируют изображение, перемещая
цвета определенных пикселов выделенной области. В результате можно создать
интересную текстуру. Если до начала работы с фильтром не была выделена
конкретная область изображения, изменения будут происходить на всем рисунке.
При работе с
фильтром Displace задаются направление и расстояние, на которое следует
переместить цвета, т. е. создается так называемая «карта смещения» (она
представляет собой отдельный графический файл). Значения яркости в карте
смещения влияют на то, какие именно пикселы будут изменяться и как далеко
переместятся их цвета.
|

|
|
Результат
использования текстуры «бумага» в качестве карты смещения
|
Черные области
карты смещения перемещают цвета пикселов на максимальное расстояние вправо и
вниз. Более светлые участки (до серого средней интенсивности) перемещают их на
меньшее расстояние. Белые области карты смещения сдвигают цвета пикселов
максимально влево и вверх. Значение яркости около 50% представляет серый цвет
средней интенсивности и используется для указания областей, которые останутся
без изменений.
Для того чтобы
использовать карту смещения в фильтре Displace, ее нужно предварительно
сохранить на диске как плоское изображение в формате Photoshop (черно-белое
либо цветное). Очень важно, чтобы карта смещения не содержала слоев. Кстати,
команда Displace распознает только формат PSD, т. е. файлы форматов PICT, JPEG
и проч. не могут использоваться. Главным инструментом для создания карт
смещения являются черно-белые градации.
Карта смещения
может содержать один или несколько каналов цвета.
Если карта
смещения содержит более одного канала цвета, то первый канал указывает
горизонтальное смещение, второй — вертикальное. Считается, что карта содержит
более одного канала цвета в случае цветного изображения или наличия канала
маски.
|

|
|
Для
получения этого изображения в качестве карты смещения использовался один из
файлов стандартного набора Photoshop
|
Зачастую при редактировании
изображений искажаются их граничные области. Это происходит по двум причинам.
Первая: переход от серого к черному и от серого к белому на карте смещения
происходит слишком быстро. Второй причиной может быть переход от светлого к
темному цвету (при переходе от темного к светлому подобный эффект не так
заметен). Смещения цвета следуют направлениям, указанным в карте. Скажем, при
переходе от светлого цвета к темному на карте смещения серый пиксел смещает
выделенные цвета изображения вправо, следующий, более темный пиксел — еще
правее и т. д. В результате получается очень резкое смещение, которое и
обусловливает указанное искажение изображения.
Чтобы избежать
этого, на карте следует делать более плавные переходы от светлого к темному, а
переходы от темного к светлому — более резкими.
При работе с
Displace большинство параметров эффекта указываются в диалоговом окне. В нем
можно задать степень смещения цветов изображения (в процентах) по горизонтали
(Horizontal Scale) и по вертикали (Vertical Scale).
Если работа
ведется с ранее сохраненной картой смещения, то она вполне может оказаться
меньше обрабатываемого изображения. Допустимо либо масштабировать карту для
достижения необходимых размеров, либо просто повторить карту многократно
внутри изображения. В первом случае в опции Displacement Map («Карта
смещения») диалогового окна Displace следует выбрать Stretch to Fit («По
размеру»), во втором — Tile («Плитка»).
Переключатель
Undefined Areas («Неопределенные области») предоставляет возможность указать способ
окраски пикселов по краям выделенной области. По умолчанию установлен флажок
Repeat Edge Pixels («Повторять пикселы на гранях»). В этом случае пикселы по
краям окрашиваются в те же цвета, что и пикселы по периметру выделенной
области. Это может привести к очень сильной вытянутости изображения. Подобного
эффекта можно избежать, окрашивая пикселы на границах карт смещения в серый
цвет средней интенсивности и постепенно увеличивая яркость или затемнение по
направлению к центру. Чтобы добиться повторения изображения внутри
неопределенных областей, необходимо установить флажок Wrap Around
(«Завернуть»).
Итог
Создание
собственных эффектов в Adobe Photoshop требует определенного опыта и
мастерства. Однако порой лучше потратить время и усилия на разработку одного
собственного фильтра, сразу обеспечивающего желаемый результат, чем применять
для этой цели десять стандартных.
В 99 случаях из 100 Flash
лучше не использовать
Оставим в
стороне споры об охоте как не относящиеся к делу, перейдем к пациенту и
займемся вскрытием. Во-первых, определимся с терминами. Usability будет
звучать на русском как Функциональность. Во-вторых, чтобы понять что же
понимает J.N. под словами функциональность и эргономика, я отошлю
любознательных читателей к статьям End of Web Design и Usability Metrics. Особенно рекомендую
прочесть отзыв читательницы на статью 'Конец Веб Дизайна' - вам станет понятней
отчего это Jackob так активно выступает против таких новомодных штучек как
Flash.
Flash имеет
тенденцию ухудшать дизайн по трем причинам: он поощряет злоупотребления в
дизайне, он нарушает фундаментальные интерфейсные припципы принятые в Веб и он
отвлекает от основного содержимого сайта.
Так-с, следует
сразу принять во внимание, что Jackob пишет не вообще обо всех сайтах, а о
тех, где на первом месте информация, их содержимое. Оставим на время
развлекательные и игровые порталы, у них свои, несколько отличные требования.
Т.е. будем рассматривать среднестатистический сайт, который ставит своей целью
предоставить какую-то информацию своему посетителю.
Поощряет
злоупотребления в дизайне
Заставки были
первыми ласточками в ряду веб злоупотреблений. Появившись на десктопах они
были призваны улучшить "время отклика" программ. Например если при
загрузке программы идут интенсивные вычисления и инициализация достаточно
длительна имеет смысл показать пользователю заставку, которая будет
свидельствовать что запуск проходит нормально. Этот своеобразный
психологический прием для улучшения воспринимаемой производительности за счет
установления обратной связи с пользователем. Что же мы получаем при
рассмотрении Веб? Совершенно обратный эффект. Заставки увеличивают время
доступа к нужной информации! И тут уже надо очень хорошо взвесить насколько
художественная их ценность перевешивает ухудшение функциональности.
А что же
Flash? Во-первых, Flash поощряет использование ничем неоправданной анимации.
Заметьте что не вообще анимации, а именно неоправданной. Я что-то не встречал
на сайтах Flash объектов статических, как-то все больше анимированных.
Дизайнер попадает под давление технологии, раз уж помещать, так пусть уж и
двигается. Отсюда вывод: честно задайте себе вопрос, можно ли отказаться от
анимации и от графики для реализации этой части дизайна. И если ответ
положительный, то лучше отказаться, а приложить больше сил на организацию
удобного пользовательского интерфейса. А что касается PhotoShop, то его
применение так же следовало бы снизить, ведь применение графики так же снижает
функциональность (см. Д.Кирсанова).
Отсутствие у
моего браузера плагина не должно стать препятствием для доступа к сайту. Не
надо забывать, что пользователи зачастую используют самые разные браузеры (не
только IE и NN) и различные платформы. И далеко как не все пользователи
устанавливают поддержку Flash при инсталляции Windows, и уж совсем не многие
решаться инсталлировать нечто через Веб. Ну если только им ваш сайт позарез
нужен. Рекомендую прочитать на этот счет отзыв Артемия Лебедева о книге Якоба Нильсена.
И о юзабилити.
Что касается
нестандартных элементов управления, то это не такая уж и безобидная вещь.
Используя собственные элементы вы принуждаете пользователя изучать ваш сайт на
уровне еще одной программы. Как только он перейдет на другой сайт, этот
процесс повторится и т.д. Основной элемент организации интерфейса -
ожидаемость, оказывается разрушенным. Отсюда рост ошибок, увеличение времени
на освоение, а значит и снижение функциональности.
Нарушает
пользовательский интерфейс принятый в Веб
Кнопка BACK - по
оценке экспертов это одна из наиболее часто используемых кнопок в браузере.
Результат не соответствующий ожиданиям отрицательно сказывается на интерфейсе.
Цвета ссылок -
это один способов навигации, зачастую нарушается и при использовании CSS.
(Flash аниматоры - не забудьте об этом в следующих проектах)
Размер шрифта
- снижение возможностей настройки (неправильная работа с CSS так же
способствует таким нарушениям)
Поиск в
пределах страницы - тексты преобразованные в графику не поддаются поиску. Тоже
относится и к статической графике. Текст должен оставаться текстом.
Невозможность
индивидуальносй настройки - отступление от стандартов графических интерфейсов,
где пользователь является инициирующей стороной.
Рассогласуется
с основным содержимым сайта и отвлекает от него
Если
содержимое сайта часто обновляется, то большие вставки Flash анимации могут
прийти в противоречие и рассогласование с содержимым. А концептуальная
анимация автоматически не сгенерируется 8-))
Информация от
Flash презентаций обычно весьма поверхностна. Поэтому ее и следует
использовать в качестве рекламных вставок, но никак не для навигации или
предоставления важной и критичной информации.
Зачастую
непозволяет предоставить пользователям именно то, что им нужно. Приходится
признать, что информация, которая требует особого преобразования для
представления, имеет гораздо меньше шансов дойти до конечного потребителя.
Конечно чтобы поставить фикус в угол стоматологического кабинета не требуется
поступать в мед. институт, но чтобы предоставить информацию о зубных
заболеваниях во Flash, а не в HTML усилий придется затратить настолько больше,
что успех становиться сомнителен. (Юлии Соляник: реклама это хорошо, но
обратите внимание на сочетание слов - CORE VALUES, основной контент, главное содержание
сайта).
Выводы:
технология Flash безусловно имеет право на жизнь. У нее есть ниши в которых
она имеет весьма немного конкурентов (например создание презентаций). Помимо
общих проблем дизайна, которые присущи и другим технологиям (например СSS) при
необдуманном использовании, Flash имеет свои собственные ограничения. А
поэтому при его использовании следует взвесить его влияние на функциональность
создаваемого сайта, преимущества и альтернативные способы решения
поставленного задания. И безусловно, никакая анимация не спасет сайт с
посредственным содержанием.
Каждому овощу
- свой фрукт!
Памятка заказчику
веб-дизайна или о том, как выбирать разработчиков для создания веб-сайта
Вам нужен
сайт? Как и любое другое серьезное дело, разработка сайта требует финансовых
затрат и подчас немалых. Поэтому важнейшим вопросом становится выбор
исполнителя.
Обычно, это происходит так: Руководство фирмы принимает решение о
необходимости разработки сайта. Среди сотрудников фирмы назначается
исполнитель этого решения. Его первым шагом является составление нескольких
требований, которым должен отвечать будущий сайт. Типичные требования:
стильный дизайн, информация о нашей фирме, новости, прайс лист, контактная
информация. (Именно здесь часто, совершается первая ошибка, которая затем
приводит к плачевным результатам. Обычно сотрудник фирмы, который составляет
необходимые требования, а затем и тексты для самого сайта, - является
профессионалом в занимаемой им должности, но не профессионалом по разработке
веб-сайтов. Скорее, не потому, что он не способен этому научиться, а лишь
потому что у него не было большого опыта и многолетней практики в этом деле.)
Затем происходит поиск специалистов, которые могли бы осуществить подобную
разработку. Здесь существует несколько различных вариантов:
1. Поиск специалиста среди знакомых и друзей
2. Поиск исполнителей посредством поисковых систем и каталогов
После того как перечень возможных исполнителей составлен, получены их
предложения и начинается процесс выбора наилучшего. Основным критерием
автоматически становится цена.
Стоп! Именно здесь и совершается вторая серьезная ошибка. Нет, мы не
собираемся здесь набивать себе цену. Вы ни разу не задавали себе вопроса -
почему цены внешне одинаковых вещей могут существенно отличаться? Ответом
может быть второй вопрос: Вам приходилось сталкиваться с китайским
ширпотребом? Основное отличие заключается в качестве. И именно оно в сочетании
с ценой должно быть ключевым фактором, определяющим выбор разработчика.
И так, поговорим о качестве. Прежде всего сайт это не только красивая картинка
с текстом. Те кто говорят иначе не увидят разницы между красивым макетом
автомобиля и самим автомобилем.
Итак, что же включает в себя создание сайта? Условно можно
выделить 5 этапов:
1. Разработка концепции будущего сайта
2. Создание сайта(дизайн и программирование)
3. Этап контентного наполнения (какую информацию, как и в каком
объеме размещать)
4. Раскрутка и продвижение сайта, привлечение партнеров, создание
партнерских программ, создание постоянной аудитории и т.д.
5. Постоянное техническое обслуживание и и развитие сайта
Каждый из этих этапов должен быть выполнен на безупречно качественном уровне.
Именно тогда сайт даст максимальную отдачу и с лихвой окупит все затраты на
его создание. Превратившись в полноценное интернет-представительство, в
виртуальный офис, эффективность работы которого иногда сравнима с
деятельностью офиса реального.
К сожалению, подавляющее большинство существующих студий и некоторые из
самостоятельных разработчиков, - качественно выполняют только второй этап, а
остальные обычно не выполняют вообще либо выполняют, но ни о каком качестве
говорить не приходиться. Эффект от таких разработок или нулевой или даже
отрицательный. Поэтому, прежде всего поинтересуйтесь у потенциального
исполнителя что он может Вам предложить. Если разговор не заходит дальше
разговора о создании необходимых скриптов, дизайне и стоимости создания каждой
странички, при этом Вас уверяют что ниже цен Вы не найдете, то можете быть
уверены - это непрофессионал и ему не стоит доверять. Нужно помнить, что у
каждой вещи есть своя цена и стоит она ровно столько, сколько она стоит. И
если кто-то предлагает Вам евроремонт за 40$ или 600-й Мерседес за 1000$, то
кроме настороженности такие предложения не должны ничего вызывать. Поэтому
необходимо помнить, что непрофессиональных разработчиков интересуют только
быстрые деньги, но никак не качество, и уж тем более судьба созданного ими
сайта. Именно поэтому важно найти исполнителя, который не только создаст для вас
красивый и запоминающийся сайт, но и всячески будет содействовать Вам в его
популяризации и привлечении целевой аудитории, т.е. грамотно выполнит все 5
этапов.
Особенно отметим, что один человек эффективно осуществить выполнение всех 5-и
этапов практически не в состоянии, т.к. для этого нужно обладать чрезвычайно
большим объемом знаний и опыта и времени. Значит автоматически выбор должен
ложиться на профессиональные коллективы, занимающиеся веб-разработками, чтобы
деньги не были потрачены в пустую.
Надеемся, что эта памятка лишний раз убедит Вас в том, что качественно
выполнить любую работу могут только профессионалы, которые отлично знакомы со
своей областью деятельности и это позволит Вам сделать правильный выбор студии
для создания собственного сайта.
|