Данная статья предназначена для начинающих программистов, которые никогда не работали с потоками, и хотели бы узнать основы работы с ними. Желательно, чтоб читатель знал основы ООП и имел какой-нибудь опыт работы в Delphi.
Для начала давайте определимся, что под словом "поток" я подразумеваю именно Thread, который еще имеет название "нить". Нередко встречал на форумах мнения, что потоки не нужны вообще, любую программу можно написать так, что она будет замечательно работать и без них. Конечно, если не делать ничего серьёзней "Hello World" это так и есть, но если постепенно набирать опыт, рано или поздно любой начинающий программист упрётся в возможности "плоского" кода, возникнет необходимость распараллелить задачи. А некоторые задачи вообще нельзя реализовать без использования потоков, например работа с сокетами, COM-портом, длительное ожидание каких-либо событий, и т.д.
Всем известно, что Windows система многозадачная. Попросту говоря, это означает, что несколько программ могут работать одновременно под управлением ОС. Все мы открывали диспетчер задач и видели список процессов. Процесс - это экземпляр выполняемого приложения. На самом деле сам по себе он ничего не выполняет, он создаётся при запуске приложения, содержит в себе служебную информацию, через которую система с ним работает, так же ему выделяется необходимая память под код и данные. Для того, чтобы программа заработала, в нём создаётся поток. Любой процесс содержит в себе хотя бы один поток, и именно он отвечает за выполнение кода и получает на это процессорное время. Этим и достигается мнимая параллельность работы программ, или, как её еще называют, псевдопараллельность. Почему мнимая? Да потому, что реально процессор в каждый момент времени может выполнять только один участок кода. Windows раздаёт процессорное время всем потокам в системе по очереди, тем самым создаётся впечатление, что они работают одновременно. Реально работающие параллельно потоки могут быть только на машинах с двумя и более процессорами.
Для создания дополнительных потоков в Delphi существует базовый класс TThread, от него мы и будем наследоваться при реализации своих потоков. Для того, чтобы создать "скелет" нового класса, можно выбрать в меню File - New - Thread Object, Delphi создаст новый модуль с заготовкой этого класса. Я же для наглядности опишу его в модуле формы. Как видите, в этой заготовке добавлен один метод - Execute. Именно его нам и нужно переопределить, код внутри него и будет работать в отдельном потоке. И так, попробуем написать пример - запустим в потоке бесконечный цикл:
Запустите пример на выполнение и нажмите кнопку. Вроде ничего не происходит - форма не зависла, реагирует на перемещения. На самом деле это не так - откройте диспетчер задач и вы увидите, что процессор загружен по-полной. Сейчас в процессе вашего приложения работает два потока - один был создан изначально, при запуске приложения. Второй, который так грузит процессор - мы создали по нажатию кнопки. Итак, давайте разберём, что же означает код в Button1Click:
тут мы создали экземпляр класса TNewThread. Конструктор Create имеет всего один параметр - CreateSuspended типа boolean, который указывает, запустить новый поток сразу после создания (если false), или дождаться команды (если true).
свойство FreeOnTerminate определяет, что поток после выполнения автоматически завершится, объект будет уничтожен, и нам не придётся его уничтожать вручную. В нашем примере это не имеет значения, так как сам по себе он никогда не завершится, но понадобится в следующих примерах.
Свойство Priority, если вы еще не догадались из названия, устанавливает приоритет потока. Да да, каждый поток в системе имеет свой приоритет. Если процессорного времени не хватает, система начинает распределять его согласно приоритетам потоков. Свойство Priority может принимать следующие значения:
tpTimeCritical - критический
tpHighest - очень высокий
tpHigher - высокий
tpNormal - средний
tpLower - низкий
tpLowest - очень низкий
tpIdle - поток работает во время простоя системы
Ставить высокие приоритеты потокам не стоит, если этого не требует задача, так как это сильно нагружает систему.
Ну и собственно, запуск потока.
Думаю, теперь вам понятно, как создаются потоки. Заметьте, ничего сложного. Но не всё так просто. Казалось бы - пишем любой код внутри метода Execute и всё, а нет, потоки имеют одно неприятное свойство - они ничего не знают друг о друге. И что такого? - спросите вы. А вот что: допустим, вы пытаетесь из другого потока изменить свойство какого-нибудь компонента на форме. Как известно, VCL однопоточна, весь код внутри приложения выполняется последовательно. Допустим, в процессе работы изменились какие-то данные внутри классов VCL, система отбирает время у основного потока, передаёт по кругу остальным потокам и возвращает обратно, при этом выполнение кода продолжается с того места, где приостановилось. Если мы из своего потока что-то меняем, к примеру, на форме, задействуется много механизмов внутри VCL (напомню, выполнение основного потока пока "приостановлено"), соответственно за это время успеют измениться какие-либо данные. И тут вдруг время снова отдаётся основному потоку, он спокойно продолжает своё выполнение, но данные уже изменены! К чему это может привести - предугадать нельзя. Вы можете проверить это тысячу раз, и ничего не произойдёт, а на тысяча первый программа рухнет. И это относится не только к взаимодействию дополнительных потоков с главным, но и к взаимодействию потоков между собой. Писать такие ненадёжные программы конечно нельзя.
Синхронизации потоков
Если вы создали шаблон класса автоматически, то, наверное, заметили комментарий, который дружелюбная Delphi поместила в новый модуль. Он гласит: "Methods and properties of objects in visual components can only be used in a method called using Synchronize". Это значит, что обращение к визуальным компонентам возможно только путём вызова процедуры Synchronize. Давайте рассмотрим пример, но теперь наш поток не будет разогревать процессор впустую, а будет делать что-нибудь полезное, к примеру, прокручивать ProgressBar на форме. В качестве параметра в процедуру Synchronize передаётся метод нашего потока, но сам он передаётся без параметров. Параметры можно передать, добавив поля нужного типа в описание нашего класса. У нас будет одно поле - тот самый прогресс:
Вот теперь ProgressBar двигается, и это вполне безопасно. А безопасно вот почему: процедура Synchronize на время приостанавливает выполнение нашего потока, и передаёт управление главному потоку, т.е. SetProgress выполняется в главном потоке. Это нужно запомнить, потому что некоторые допускают ошибки, выполняя внутри Synchronize длительную работу, при этом, что очевидно, форма зависает на длительное время. Поэтому используйте Synchronize для вывода информации - то самое двигание прогресса, обновления заголовков компонентов и т.д.
Вы наверное заметили, что внутри цикла мы используем процедуру Sleep. В однопоточном приложении Sleep используется редко, а вот в потоках его использовать очень удобно. Пример - бесконечный цикл, пока не выполнится какое-нибудь условие. Если не вставить туда Sleep мы будем просто нагружать систему бесполезной работой.
Надеюсь, вы поняли как работает Synchronize. Но есть еще один довольно удобный способ передать информацию форме - посылка сообщения. Давайте рассмотрим и его. Для этого объявим константу:
В объявление класса формы добавим новый метод, а затем и его реализацию:
Используя функцию SendMessage, мы посылаем окну приложения сообщение, один из параметров которого содержит нужный нам прогресс. Сообщение становится в очередь, и согласно этой очереди будет обработано главным потоком, где и выполнится метод SetProgressPos. Но тут есть один нюанс: SendMessage, как и в случае с Synchronize, приостановит выполнение нашего потока, пока основной поток не обработает сообщение. Если использовать PostMessage этого не произойдёт, наш поток отправит сообщение и продолжит свою работу, а уж когда оно там обработается - неважно. Какую из этих функций использовать - решать вам, всё зависит от задачи.
Вот, в принципе, мы и рассмотрели основные способы работы с компонентами VCL из потоков. А как быть, если в нашей программе не один новый поток, а несколько? И нужно организовать работу с одними и теми же данными? Тут нам на помощь приходят другие способы синхронизации. Один из них мы и рассмотрим. Для его реализации нужно добавить в проект модуль SyncObjs.
Критические секции
Работают они следующим образом: внутри критической секции может работать только один поток, другие ждут его завершения. Чтобы лучше понять, везде приводят сравнение с узкой трубой: представьте, с одной стороны "толпятся" потоки, но в трубу может "пролезть" только один, а когда он "пролезет" - начнёт движение второй, и так по порядку. Еще проще понять это на примере и тем же ProgressBar'ом. Итак, запустите один из примеров, приведённых ранее. Нажмите на кнопку, подождите несколько секунд, а затем нажмите еще раз. Что происходит? ProgressBar начал прыгать. Прыгает потому, что у нас работает не один поток, а два, и каждый из них передаёт разные значения прогресса. Теперь немного переделаем код, в событии onCreate формы создадим критическую секцию:
У TCriticalSection есть два нужных нам метода, Enter и Leave, соответственно вход и выход из неё. Поместим наш код в критическую секцию:
Попробуйте запустить приложение и нажать несколько раз на кнопку, а потом посчитайте, сколько раз пройдёт прогресс. Понятно, в чем суть? Первый раз, нажимая на кнопку, мы создаём поток, он занимает критическую секцию и начинает работу. Нажимаем второй - создаётся второй поток, но критическая секция занята, и он ждёт, пока её не освободит первый. Третий, четвёртый - все пройдут только по-очереди.
Критические секции удобно использовать при обработке одних и тех же данных (списков, массивов) разными потоками. Поняв, как они работают, вы всегда найдёте им применение.
В этой небольшой статье рассмотрены не все способы синхронизации, есть еще события (TEvent), а так же объекты системы, такие как мьютексы (Mutex), семафоры (Semaphore), но они больше подходят для взаимодействия между приложениями. Остальное, что касается использования класса TThread, вы можете узнать самостоятельно, в help'е всё довольно подробно описано. Цель этой статьи - показать начинающим, что не всё так сложно и страшно, главное разобраться, что есть что. И побольше практики - самое главное опыт!
Вторая часть серии статей "Использование регулярных выражений в PHP" посвящена решению ряда проблем обработки сложных текстов с помощью "продвинутых" операторов регулярных выражений.
Несмотря на то, что термины данные и информация используются взаимозаменяемо, между ними есть существенная разница. Данные существуют реально. Данные — - это список температур, перечень недавних продаж или опись товара, имеющегося в наличии. Информация — это прогнозы. Информация — это предсказание погоды, прогноз прибылей и убытков и тенденции сбыта. Данные записываются в виде нулей и единиц, в то время как информация обрабатывается мозгом.
Между данными и информацией располагается приложение: механизм, который преобразует одно в другое и наоборот. Например, при покупке книги в Интернете это приложение преобразует вашу информацию — название книги, идентификатор, информацию о банковском счете — в данные: номер заказа, цену со скидкой, характеристики транзакции с использованием кредитной карточки и количество оставшихся в наличии экземпляров книги. Аналогичным образом, приложение преобразует данные в запрос на выборку со склада, отметку об отгрузке и номер отслеживания — информацию, необходимую для реализации продажи.
В действительности сложность создания приложения прямо пропорциональна преобразованиям, которые оно выполняет. Гостевая книга Web-сайта, передающая имя и адрес в поля базы данных, устроена элементарно. С другой стороны, онлайновый магазин, который передает большое количество видов информации в модель данных коммерческой сделки и преобразует данные в информацию для реализации процесса принятия решений, достаточно сложен с точки зрения разработки. Искусство программирования заключается в умелом манипулировании данными и информацией — мастерство, схожее с фиксацией света в живописи.
Как было сказано в первой части, регулярные выражения являются одним из самых мощных средств манипулирования данными. Регулярные выражения лаконично описывают форму данных и раскладывают их на составляющие. Например, следующее регулярное выражение можно использовать для обработки температуры, заданной в градусах по Цельсию или по Фаренгейту: /^([+-]?[0-9]+)([CF])$/.
Регулярное выражение сравнивает начало строки (отображается знаком "крышка" (^), за которым идет знак "+", знак "-", или ничего ([+-]?), за которым следует целое число ([0-9]+), обозначение шкалы — Цельсия или Фаренгейта ([CF]) — и заканчивается концом строки (обозначается знаком доллара $).
В данном регулярном выражении операторы начала строки и конца строки представляют собой примеры операторов нулевой ширины или совпадений по положению, а не по символам. Круглые скобки также не указывают на символы. Зато, если заключить шаблон в круглые скобки, то будет извлечен текст, соответствующий шаблону. Следовательно, если текст полностью сопоставим с шаблоном, то первая пара круглых скобок выдаст строку, представляющую собой положительное или отрицательное целое число, например, +49, а вторая пара круглых скобок - или букву C, или F.
В первой части серии представлено понятие регулярного выражения и были описаны PHP-функции для сравнения текста с шаблонами, а также для извлечения совпадений. А теперь давайте углубимся в изучение регулярных выражений и посмотрим на некоторые "продвинутые" операторы и средства.
Круглые скобки опять приходят на помощь
В большинстве случаев пара круглых скобок используется для описания части шаблона и получения текста, соответствующего этой части. Однако от круглых скобок не всегда требуется получение части шаблона. Как и в сложной арифметической формуле, круглые скобки можно использовать для группировки условий.
Приведу пример. Догадаетесь, какому типу данных соответствует данное выражение?
/[-a-z0-9]+(?:\.[-a-z0-9]+)*\.(?:com|edu|info)/i
Как можно догадаться, это регулярное выражение определяет имена Интернет-сайтов (только для доменов .com, .edu, и .info). Отличием является использование дополнительного оператора ?:. Квалификатор части шаблона ?: отключает функцию извлечения данных, и тем самым дает круглым скобкам возможность обозначать последовательность действий. Например, в данном случае фраза (?:\.[-a-z0-9]+)* соответствует нулю или более элементам строки, например, ".ibm." Аналогично, фраза \.(?:com|edu|info) обозначает последовательность символов, за которой идет одна из строк com, edu, или info.
Отключение функции извлечения информации может показаться бессмысленным, если не подумать о том, что извлечение информации требует дополнительной обработки. Если программа обрабатывает большое количество данных, то отказ от извлечения может быть целесообразным. Кроме того, если вы имеете дело со сложным регулярным выражением, то отключение функции извлечения информации в некоторых частях шаблона может упростить извлечение тех частей шаблона, которые реально нужны.
Примечание: Модификатор i в конце регулярного выражения делает все сопоставления с шаблоном нечувствительными к регистру. Следовательно, подмножество a-z будет сопоставимо со всеми буквами, независимо от регистра.
В PHP есть и другие модификаторы частей шаблона (subpattern). Используя отладчик регулярных выражений, показанный в первой части данной серии (повторно показан в листинге 1), попробуйте сопоставить регулярное выражение ((?i)edu) со строками "EDU," "edu," и "Edu." Если в начале части шаблона задать модификатор (?i), то сопоставление с шаблоном не будет зависеть от регистра. Чувствительность к регистру восстанавливается, как только заканчивается данная часть шаблона. (Сравните с модификатором / ... /i, который применяется ко всему шаблону.)
Листинг 1. Простой отладчик регулярных выражений
Еще один полезный модификатор части шаблона - это (?x). Он позволяет добавлять в шаблон пробелы, что упрощает чтение регулярных выражений. Таким образом, часть шаблона ((?x) edu | com | info) (обратите внимание на пробелы между операторами дизъюнкции, которые добавлены для удобочитаемости) аналогична (edu|com|info). Для того, чтобы добавлять пробелы и комментарии в регулярное выражение, можно использовать глобальный модификатор / ... /x, см. листинг ниже.
Листинг 2. Добавление пробелов и комментариев
Как видно из листинга, при необходимости модификаторы можно объединять. Если необходимо включить в регулярное выражение символ пробела при использовании модификатора (?x), используйте метасимвол \s для поиска любого пробельного символа и \ (обратный слеш с пробелом) для поиска одного пробела, например, ((?x) hello \ there).
Оглядываемся вокруг
В подавляющем большинстве случаев регулярные выражения используются для проверки или декомпозиции входной информации на отдельные "лакомые кусочки", которые записываются в архив данных или сразу же обрабатываются приложением. Общепринятыми сферами применения являются: обработка полей форм, парсинг XML-кода и анализ протоколов.
Еще одна область применения регулярных выражений - форматирование, нормализация или улучшение читаемости данных. Вместо того чтобы использовать регулярные выражения для поиска и извлечения текста, при форматировании они применяются для поиска и вставки текста в надлежащее местоположение.
Вот пример полезного применения форматирования. Предположим, что Web-форма передает приложению значение зарплаты с округлением до целого доллара. Так как зарплата хранится в виде числа целого типа, то перед сохранением переданных данных приложение должно удалять из них знаки пунктуации. Однако при извлечении данных из хранилища, возможно, понадобится изменить их формат и сделать удобочитаемыми с помощью разделителей. В листинге 3 показано, как простой PHP-запрос преобразует сумму в долларах в число.
Листинг 3. Преобразование суммы в долларах в число
Вызов функции preg_replace() заменяет знак доллара, любой пробельный символ и все запятые -- на пустую строку, возвращая то, что предположительно является целым числом. Если проверка функцией is_numeric() подтверждает правильность входных данных, их можно сохранить.
А теперь давайте выполним обратную операцию - добавим к числу знак денежной единицы и запятые-разделители сотен, тысяч и миллионов. Для добавления запятых в определенных позициях можно написать программу для поиска этих компонентов, а можно воспользоваться операторами посмотри вперед и посмотри назад. Модификатор части шаблона ?<= обозначает посмотри назад (то есть влево) от текущей позиции. Модификатор ?= означает "посмотри вперед" (то есть вправо) от текущей позиции.
[pagebreak]
Итак, какие позиции нам нужны? Любое место в строке, при условии, что есть как минимум один символ слева и одна или более групп по три символа справа, не считая десятичной точки и количества центов. Соблюдая это правило и используя два модификатора, анализирующих символы справа и слева от определенной позиции и являющихся операторами нулевой ширины, мы можем достичь цели с помощью следующей инструкции:
Как работает это регулярное выражение? Начиная с первого символа строки и обрабатывая каждый символ, регулярное выражение отвечает на вопрос: "Есть ли хотя бы один символ слева и одна или несколько групп из трех символов справа?" Если да, то наш оператор нулевой ширины заменяется запятой.
Большинство сложных сопоставлений можно реализовать, используя стратегию, аналогичную приведенной выше. Например, вот еще один вариант использования оператора "посмотри вперед", который решает широко распространенную дилемму.
Листинг 4. Пример использования оператора "посмотри вперед" ("предвидение")
Оператор preg_replace() преобразует строку данных, разделенных запятыми, в строку данных, разделенных знаком табуляции. Предусмотрительным образом, он не заменяет запятые в строке, заключенной в кавычки.
Это регулярное выражение при каждом обнаружении запятой (на это указывает запятая в самом начале регулярного выражения) проверяет утверждение: "Впереди не было кавычек или было четное количество кавычек". Если утверждение верно, то запятую можно заменить знаком табуляции (the \t).
Если Вам не нравятся операторы «посмотри вперед» и «посмотри назад» или вы работаете с таким языком, в котором их нет, можно добавить запятые в число и с помощью обычного регулярного выражения. Однако для реализации такого решения потребуется много итераций.
Листинг 5. Добавление запятых
Давайте пройдем по коду. Сначала параметр зарплаты очищается от знаков пунктуации для моделирования ситуации чтения целого числа из базы данных. Затем выполняется цикл в поисках позиций, где за одним числовым символом ((\d) идут три числовых символа ((\d\d\d\): если обнаруживается граница слова, заданная как \b, цикл прекращается. Граница слова -- это еще один оператор нулевой ширины, который соответствует следующим позициям:
* Перед первым символом строки, если это буква слова.
* За последним символом строки, если это буква слова.
* Между буквой слова и небуквенным символом, непосредственно за буквой слова.
* Между небуквенным символом и буквой слова, непосредственно за небуквенным символом.
Таким образом, примерами правильных границ слова являются пробел, точка и запятая.
Благодаря внешнему циклу регулярное выражение перемещается слева направо в поисках цифры, за которой идут три цифры и граница слова. При обнаружении совпадения между двумя частями шаблона добавляется запятая. Цикл должен продолжаться до тех пор, пока оператор preg_replace() находит совпадения, что задано в условии $old != $pretty_print.
Жадность и лень
Регулярные выражения обладают большими возможностями, иногда даже слишком большими. Например, давайте рассмотрим, что произойдет, если регулярное выражение ".*" будет обрабатывать строку "The author of 'Wicked' also wrote 'Mirror, Mirror.'" Вероятно, вы предполагаете, что preg_match() вернет два совпадения, и с удивлением обнаружите, что результат всего один: 'Wicked' also wrote 'Mirror, Mirror.'
Почему? Если не задать иное, то такие операторы как * (ноль или более) и + (один или более) -- "жадные". Если сопоставление с образцом может продолжаться, то они и будут его продолжать до тех пор, пока не будет возвращен максимальный результат из возможных. Для сохранения минимальных совпадений необходимо принудительно заставлять определенные операторы быть "ленивыми". "Ленивые" операторы находят самое короткое совпадение и на этом останавливаются. Чтобы сделать оператор более "ленивым", добавьте суффикс в виде знака вопроса. Пример показан в листинге 6.
Листинг 6. Добавление суффикса в виде знака вопроса
Регулярное выражение ".*?" расшифровывается следующим образом: "найти кавычку, за которой идет ровно столько символов с последующей кавычкой.
Однако иногда оператор * может быть слишком "ленивым". Например, посмотрите на следующий фрагмент кода. Что он делает?
Листинг 7. Простой отладчик регулярных выражений
Что вы загадали? "123"? "1"? Нет результата? На самом деле результатом будет Array ( [0] => [1] => ), означающий, что совпадение было найдено, но никаких данных извлечено не было. Почему? Вспомните, что оператор * ищет совпадения с нулем или более символов. В данном случае, выражение [0-9]* находит совпадение с нулем символов от начала строки, и обработка заканчиваетс.
Для решения данной проблемы добавьте оператор нулевой ширины для привязки совпадения, который заставляет регулярное выражение продолжать сопоставления; /([0-9]*\b/.
Советы и рекомендации
С помощью регулярных выражений можно решать как простые, так и сложные задачи при обработке текста. Начните с небольшой группы операторов и по мере того, как вы будете набираться опыта, расширяйте свой словарь. В качестве вознаграждения за ваши старания -- некоторые советы и рекомендации.
Создание переносимых регулярных выражений с помощью классов символов
Вам уже знакомы метасимволы, например, \s - соответствует любому пробельному символу. Кроме того, большинство реализаций регулярных выражений поддерживает предопределенные классы символов, которые более просты в использовании и переносимы с одного письменного языка на другой. Например, класс символов [:punct:] замещает все символы пунктуации в данном языке. Вместо [0-9] можно использовать [:digit:] и более переносимое замещение [:alpha:] вместо [-a-zA-Z0-9_]. Например, можно убрать все знаки пунктуации, используя:
Класс символов представляет собой более сжатую форму по сравнению с подробным описанием всех символов пунктуации. Полный перечень классов символов можно найти в документации по версии языка PHP.
Как исключить то, что вы не ищете
Как показано в примере с данными, разделенными символом табуляции, в качестве значений, разделенных запятыми (CSV), иногда проще и точнее задать список тех вариантов, которые не нужно находить (сопоставлять). Последовательность, начинающаяся со знака "крышка" (^) будет соответствовать любому символу, не принадлежащему данной последовательности. Например, для проверки правильности телефонных номеров для США можно использовать регулярное выражение /[2-9][0-9]{2}[2-9][0-9]{2}[0-9]{4}/. Используя набор ограничений можно написать регулярное выражение в более явном виде /[^01][0-9]{2}[^01][0-9]{2}[0-9]{4}/. Оба регулярных выражения работают, хотя смысл последнего, вероятно, более понятен.
Пропуск новой строки
Если во входных данных несколько строк, стандартного регулярного выражения будет недостаточно, так как сканирование прекращается на начале новой строки, которая обозначается $. Однако, если воспользоваться модификаторами s или m, то регулярное выражение будет обрабатывать входные данные по-другому. Первый модификатор рассматривает строковую последовательность как одну строку, где точка указывает на начало новой строки (обычно она этого не делает). Второй рассматривает строковую последовательность как несколько строк, где ^ и $ соответствуют началу и концу любой строки, соответственно. Приведем пример. Если задать $string = "Hello,\nthere";, то оператор preg_match( "/.*/s", $string, $matches) параметру $matches[0] присвоит значение Hello,\nthere. (При удалении s будет выдано Hello.)
Поиск по шаблону является настолько обычным занятием в разработке программного обеспечения, что для облегчения этой задачи была создана специальная технология — регулярные выражения. Узнайте, как можно использовать ее при написании кода, прочитав эту статью.
Все устройства получают входную информацию, выполняют какие-либо операции и выдают результат. Например, телефон во время разговора преобразует звуковую энергию в электрический сигнал и обратно. Двигатель потребляет топливо (пар, расщепление атомных ядер, бензин, мышечные усилия) и преобразует его в энергию. Блендер поглощает ром, лед, лайм и кюрасао и взбалтывает их в коктейль Mai Tai. (Или, если вам хочется чего-то изысканного, сделайте Bellini из шампанского и грушевого сока. Блендер – замечательное универсальное устройство.)
Так как программное обеспечение преобразует данные, то каждое приложение фактически является устройством (хоть и виртуальным, так как у него нет физических составляющих). Например, компилятор в качестве входной информации получает исходную программу и преобразует ее в двоичный исполняемый код. Программа прогнозирования погоды генерирует предсказания на основе результатов прошлых (исторических) замеров, а графический редактор обрабатывает пикселы, применяя правила к отдельным пикселам или их группам, чтобы, например, сделать изображение более четким или изменить его стиль.
Так же, как и любое другое устройство, программное обеспечение предназначено для работы с определенным исходным материалом, например, набором чисел, данными XML-схемы или протоколом. Если программе задать некорректную входную информацию — неподходящую по форме или типу, то существует большая вероятность того, что результат будет непредсказуемым и, возможно, даже катастрофическим. Как говорится: "Мусор заложишь - мусор получишь".
На самом деле для решения всех нетривиальных задач необходимо отделять правильные данные от некорректных и отклонять некорректные данные во избежание ошибок в результатах. Это, конечно же, актуально и для Web-приложений, написанных на языке PHP. Неважно, получены ли входные данные из формы для ввода с клавиатуры или в результате выполнения программного запроса Asynchronous JavaScript + XML (Ajax), прежде чем начать какие-либо вычисления, программа должна проверить входную информацию. Возможно, что числовые значения должны находиться в пределах определенного диапазона чисел или представлять собой только целые числа. Возможно, значение должно соответствовать определенному формату, например, почтового индекса. Например, почтовый индекс в США представляет собой пять цифр плюс дополнительный префикс "Plus 4", состоящий из дефиса и 4 дополнительных цифр. Возможно, другие строки также должны состоять из определенного количества символов, например, две буквы для указания аббревиатуры штата США. Строковые данные доставляют особенно много проблем: PHP-приложение должно быть начеку по отношению к злонамеренным программам-агентам, вложенным в SQL-запросы, код JavaScript или любой другой код, которые способны изменить поведение приложения или обойти защиту.
Однако каким образом программа может определить, являются ли входные данные числом или соответствуют ли определенным требованиям, например, к почтовому индексу? На самом деле для реализации проверки путем сопоставления с шаблоном необходим небольшой парсер, создающий конечный автомат, считывающий входные данные, обрабатывающий маркеры, отслеживающий состояние и выдающий результаты. Однако создание и обслуживание даже самого простого парсера может оказаться непростым делом.
К счастью, анализ на основе сопоставления с шаблоном настолько широко распространен в компьютерных технологиях, что с течением времени (примерно с момента появления UNIX®) были разработаны специальные технологии и, конечно же, механизмы обработки, чтобы облегчить рутинную работу. Регулярное выражение (regex) описывает шаблоны посредством лаконичных и удобочитаемых обозначений. Получив регулярное выражение и данные, механизм regex сообщает, совпадают ли эти данные с шаблоном, и если совпадение было обнаружено, что именно совпало.
Вот небольшой пример использования регулярного выражения, взятый из UNIX-утилиты, работающей в режиме командной строки, которая ищет заданный шаблон в содержимом одного или нескольких текстовых файлов UNIX. Команда grep -i -E '^Bat' ищет последовательность символов beginning-of-line (начало строки), обозначаемое "крышкой", [^]), за которым следуют буквы b, a, и t верхнего или нижнего регистра (ключ -i указывает на то, что при сопоставлении с шаблоном регистр не учитывается, таким образом, например, B и b - тождественны). Следовательно, для файла heroes.txt:
Листинг 1. heroes.txt
Вышеупомянутая команда grep выдаст два совпадения:
Batman
Batgirl
Регулярные выражения
PHP предлагает два программных интерфейса регулярных выражений: один -- для интерфейса переносимых операционных систем (POSIX), а второй - для регулярных выражений, совместимых с языком Perl (PCRE). В общем и целом второй интерфейс является более предпочтительным, так как PCRE сам по себе мощнее, чем POSIX, и предоставляет все операторы, используемые в языке Perl. Более подробная информация по обращению к regex-функциям POSIX представлена в документации по языку PHP (см. раздел Ресурсы). В данной статье мы сосредоточим свое внимание на свойствах PCRE.
Регулярные выражения PHP PCRE содержат операторы, позволяющие путем сопоставления находить конкретные символы или другие операторы, определенные местоположения, например, начало и конец строки, начало или конец слова. Регулярные выражения также позволяют описывать альтернативы, которые можно задать альтернативы типа "или"-"или"; повторения фиксированной, изменяемой или неопределенной длины; наборы символов (например, "любая буква от a до m"); и классы, или типы символов (печатаемые символы, знаки препинания). Специальные операторы также разрешают использовать группировку — возможность применить оператор к целой группе других операторов.
В таблице 1 показаны некоторые типичные операторы регулярных выражений. Для создания сложных выражений можно последовательно объединять элементарные операторы из таблицы 1 (и другие).
Таблица 1. Типичные операторы регулярных выражений
Оператор Значение
. (точка) Любой одиночный символ
^ (крышка) Пустая последовательность в начале строки или цепочки
$ (знак доллара) Пустая последовательность в конце строки
A Буква A верхнего регистра
a Буква a нижнего регистра
\d Любая цифра
\D Любой нецифровой символ
\w Любая буква или цифра; синоним - [:alnum:]
[A-E] Любая заглавная буква из A, B, C, D или E
[^A-E] Любой символ, за исключением заглавных букв A, B, C, D или E
X? Найти совпадение по отсутствию или наличию одной заглавной буквы X
X* Ни одной или любое количество заглавных букв X
X+ Одна или несколько заглавных букв X
X{n} Ровно n заглавных букв X
X{n,m} Не менее n и не более m заглавных букв X; если опустить m, то выражение будет искать не менее n заглавных букв X
(abc|def)+ По меньшей мере одно вхождение последовательности abc и def
В следующем примере показано типичное использование регулярного выражения. Например, для web-сайта необходимо, чтобы каждый пользователь регистрировался. Имя пользователя должно начинаться с буквы и содержать от 3 до 10 буквенно-цифровых символов. Для проверки имени пользователя на соответствие ограничениям при отправке данных в приложение можно использовать следующее регулярное выражение: ^[A-Za-z][A-Za-z0-9_]{2,9}$.
Знак "крышка" соответствует началу строки. Первый набор [A-Za-z] соответствует любой букве. Второй набор [A-Za-z0-9_]{2,9} соответствует последовательности, содержащей от 2 до 9 букв, цифр или символов подчеркивания. Знак доллара ($) соответствует концу строки.
На первый взгляд, знак доллара может показаться лишним, однако его использование важно. Если его пропустить, то условиям данного регулярного выражения будет отвечать любая строка, которая начинается с буквы, содержит от 2 до 9 буквенно-цифровых символов и любое количество других символов. Иными словами, если бы не было знака доллара как привязки к концу строки, то подошла бы недопустимо длинная строка с подходящим началом, например, "martin1234-cruft" .
Программирование на языке PHP и регулярные выражения
В PHP есть функции для поиска совпадений в тексте, замены каждого совпадения на другой текст (похоже на операцию "найти и заменить") и поиска совпадений среди элементов списка. Вот эти функции:
Чтобы показать, как работают эти функции, давайте создадим небольшое PHP-приложение, которое будет просматривать список слов на соответствие определенному шаблону. Слова и регулярные выражения будут вводиться из обычной web-формы, а результаты отображаться в браузере посредством функции simple print_r(). Эта программка пригодится, если возникнет желание проверить или отладить регулярное выражение.
PHP-код показан в листинге 2. Все входные данные берутся из обычной HTML-формы. (Для краткости эту форму и PHP-код, отслеживающий ошибки, опустим.)
Листинг 2. Сравнение текста с шаблоном
Вначале с помощью функции preg_split() строка из слов, разделенных запятыми, преобразуется в отдельные элементы. Данная функция разбивает строку в тех местах, которые соответствуют условиям регулярного выражения. В данном случае регулярное выражение представляет собой просто "," , (запятая - разделитель списка слов, указанных через запятую). Слэш в начале и в конце просто показывает начало и конец regex.
Третий и четвертый аргументы функции preg_split() необязательны, но полезны. Добавьте в третий аргумент число n целого типа, если необходимо вернуть только первые n совпадений, или -1, если необходимо вернуть все совпадения. Если в качестве четвертого аргумента задать идентификатор PREG_SPLIT_NO_EMPTY, то функция preg_split() не будет возвращать пустые результаты.
Затем каждый элемент списка слов, разделенных запятыми, корректируется (убираются начальные и конечные пробелы) с помощью функции trim() и сравнивается с заданным регулярным выражением. Функция preg_grep() существенно упрощает процесс обработки списка: просто укажите в качестве первого аргумента шаблон, а в качестве второго - массив слов для сравнения. Функция возвращает массив совпадений.
Например, если в качестве шаблона задать регулярное выражение ^[A-Za-z][A-Za-z0-9_]{2,9}$ и список слов разной длины, то можно получить результат, показанный в листинге 3.
Листинг 3. Результат работы простого регулярного выражения
Кстати, с помощью дополнительного маркера PREG_GREP_INVERT можно инвертировать операцию preg_grep() и найти элементы, которые не совпадают с шаблоном (аналогично оператору grep -v в командной строке). Заменяя 22 строку на $matches = preg_grep( "/${_REQUEST[ 'regex' ]}/", $words, PREG_GREP_INVERT ) и используя входные данные из листинга 3, мы получим Array ( [1] => 1happy [2] => hermanmunster ).
Разбор строк
Функции preg_split() и preg_grep() очень удобны. Первая из них может разбирать строку на подстроки, если подстроки разделяются определенным шаблоном. Функция preg_grep() позволяет быстро отфильтровать список.
Но что произойдет, если строку нужно разобрать на составные части, используя одно или несколько сложных правил? Например, в США номера телефонов обычно выглядят следующим образом: "(305) 555-1212," "305-555-1212," или "305.555.1212." Если убрать пунктуацию, то количество символов сократится до 10 цифр, что легко можно определить с помощью регулярного выражения \d{10}. Однако код и префикс (каждый из которых состоит из трех цифр) телефонного номера США не могут начинаться с нуля или единицы (так как нуль и единица используются как префиксы для междугородных звонков). Вместо того чтобы разбивать числовую последовательность на отдельные цифры и создавать сложный код, для верификации можно использовать регулярное выражение.
Фрагмент кода позволяющий решить эту задачу, показан в листинге 4.
Листинг 4. Проверка американского телефонного номера
Давайте пройдем по этому коду:
* Как показано в таблице 1, в регулярных выражениях используется ограниченный набор специальных символов, например, квадратные скобки ([ ]) для наименования последовательности. Если надо найти такой символ в тексте, необходимо "выделить" специальный символ в регулярном выражении, поставив перед ним обратный слэш (\). Когда символ выделен, можно задать его посик, как и любого другого символа. Если нужно найти символ точки, например, в полном составном имени хоста, то напишите \.. При желании строку можно подать в функцию preg_quote() которая выполняет автоматическую изоляцию всех специальных символов регулярных выражений, как показано в строке 1. Если поставить echo() $punctuation после первой строки, то вы должны увидеть \(\)\.-.
* В строке 2 из телефонного номера убираются все знаки пунктуации. Функция preg_replace() заменяет все символы из $punctuation — операторы из набора [ ] - пустой строкой, эффективно устраняя такие символы. Возвращаемая новая строка присваивается переменной $number.
* В строке 4 определен шаблон верифицируемого телефонного номера США.
* Строка 5 реализует сопоставление, сравнивая телефонный номер, который теперь состоит только из цифр, с шаблоном. Функция preg_match() возвращает 1, если есть совпадение. Если совпадения нет, функция preg_match() возвращает нулевое значение. Если во время обработки возникла ошибка, то функция возвращает значение False (ложно). Таким образом, чтобы проверить удачное завершение, необходимо посмотреть, было ли возвращено значение 1. В противном случае проверьте итоговое значение функции preg_last_error() (если используется PHP версии 5.2.0 или выше). Если оно не равно нулю, то, возможно, был превышен лимит вычислений, например, разрешенная глубина рекурсии регулярного выражения. Обсуждение констант и ограничений, применяемых в регулярных выражениях PHP, представлено на странице, посвященной функциям регулярных выражений PCRE (см. раздел Ресурсы).
Извлечение данных
Во многих случаях необходимо только получить ответ на вопрос: "Соответствуют ли данные шаблону?" – например, при проверке данных. Однако чаще регулярные выражения используются для подтверждения соответствия и получения информации о совпадении.
Вернемся к примеру с телефонным номером. Пусть при соответствии шаблону нам необходимо сохранить код, префикс и номер линии в отдельных полях базы данных. Регулярные выражения могут запоминать совпадающие с шаблоном данные с помощью оператора capture. Оператор capture обозначается круглыми скобками и может использоваться в любой части регулярного выражения. Операции capture можно делать вложенными для поиска подсегментов в извлеченных сегментах данных. Например, чтобы из 10-значного номера телефона извлечь код города, префикс и номер линии, можно использовать следующую строку:
/([2-9][0-9]{2})([2-9][0-9]{2})([0-9]{4})/
Если входные данные соответствуют шаблону, первые три цифры захватываются первой парой круглых скобок, следующие три цифры - второй парой, а последние 4 цифры - последним оператором. Модификация вызова функции preg_match() возвращает извлеченные данные.
Листинг 5. Возврат извлеченных данных функцией preg_match()
Если в качестве третьего аргумента функции preg_match() указать переменную, например, в нашем коде, $matches, то в качестве ее значения будет выступать список извлеченных результатов. Нулевой элемент списка (с индексом 0) - это все совпадение целиком; первый элемент - совпадение, относящееся к первой паре круглых скобок, и так далее.
Вложенные операторы capture извлекают сегменты и подсегменты фактически любой глубины. Сложность с вложенными операторами capture состоит в том, чтобы определить, в какой части массива соответствий находится каждое соответствие, например, $matches. Действует следующее правило: подсчитайте порядковый номер открывающей скобки в регулярном выражении — этот номер и будет индексом нужного совпадения в массиве соответствий.
В листинге 6 показан пример (немного надуманный) извлечения частей городского адреса.
Листинг 6. Код для извлечения городского адреса
Опять все совпадение целиком хранится по индексу 0. А где хранится номер улицы? Если считать слева направо, номер улицы проверяется \d+. Это вторая открывающая круглая скобка слева, следовательно, значением $matches[2] будет 123. В $matches[4] оказывается название города, а в $matches[6] - почтовый индекс.
Продвинутые технологии
Обработка текста – широко распространенная задача, и PHP предоставляет ряд функций, упрощающих выполнение большого числа операций. Обратите внимание на следующее:
* Функция preg_replace() может работать как с одной строкой, так и с массивом строк. Если вызвать preg_replace() для массива строк, замена будет выполнена во всех элементах массива. В этом случае код preg_replace() возвращает массив измененных строк.
* Как и во всех остальных реализациях PCRE, здесь для осуществления замены можно прибегать к сравнению с вложенным шаблоном. Для наглядности давайте рассмотрим проблему стандартизации формата телефонного номера. Заменим все знаки пунктуации точками. Наше решение показано в листинге 7.
Листинг 7. Замена знаков пунктуации точками
Сопоставление с шаблоном и, в случае совпадения, перевод в стандартный телефонный номер выполняется за один шаг.
Многие мои друзья и знакомые часто спрашивают меня о том, как устроен мой сайт, сколько у меня таблиц в базе данных, как я храню данные и по каким полям веду поиск. Я, конечно, не выдаю все свои государственные тайны, но всегда понимаю причину таких вопросов и пытаюсь помочь людям построить быструю и надежную базу данных - т.е. тщательно продумать структуру БД таким образом, чтобы при увеличении нагрузки или объема таблиц динамический веб-сайт не превратился в тормозное усмертие.
А ведь многие новички (веб-строители) даже не догадываются о том, что крупные динамические сайты тормозят вовсе не из-за нагрузки скриптов на процессор, а в основном из-за неоптимизированного или дохленького MySQL-сервера. При этом во многом все зависит от того, как устроена ваша база данных.
Итак, начнем ликбез. Сразу всем вопрос: что делает MySQL во время записи в таблицы типа INSERT или UPDATE? Правильно - БЛОКИРУЕТ ТАБЛИЦЫ и пишет в них данные. Скорость записи и поиска может быть достаточно низкой, поэтому статус таблиц запрещает другим процессам считывать из них данные до окончания операции записи или обновления и снятия блокировки. При этом может получиться так, что во время записи единственного поля в длинные таблицы, ваш MySQL-сервер надолго заблокирует доступ к таблице остальным скриптам.
Например, вы создали таблицу новостей такого типа:
ID - номер, первичный ключ TEMA - тема новости MESS - сообщение, сама новость VIEWS - количество просмотров
При каждом обращении к новостям, скрипт будет выводить саму новость, а потом увеличивать поле VIEWS запросом UPDATE table 'NEWS' set VIEWS=VIEWS+1 where id=ID. При этом количество апдейтов будет довольно высоким. При высокой посещаемости веб-ресурса или при "нападении" на сайт поискового робота (эти ребята страдают многопоточностью и могут запросто повесить ваш сайт своими запросами) несколько одновременных процессов станут пытаться сделать UPDATE и SELECT. При каждом UPDATE таблица будет блокироваться (на это уходит время) и все остальные процессы будут ждать завершения операции. А если таблица достаточно большая? Например, несколько тысяч записей. Ежу понятно, что построится очередь из нескольких десятков скриптов, ожидающих ответа MySQL-сервера. Каждый будет жрать память и держать остальные процессы. В итоге все у вас зависнет и переглючит. Выход: делать вместо одной таблицы несколько. Советую разделять поля по типу их использования. Одну таблицу - только для вывода и редких обновлений или вставок. Другую - для частых обновлений, но редкого вывода. Например, значения счетчика обращений держать отдельно в таблицу вида:
ID - номер, первичный ключ VIEWS - количество просмотров
Сами новости лучше держать в другой таблице, где нет поля VIEWS. При этом таблица с новостями будет тяжелой (много текста, полей, индексов), а таблица COUNT (счетчик) будет очень легкой и быстрой. Таблица NEWS будет кешироваться и выводиться очень быстро при любых объемах, а таблица COUNT будет быстро обновляться из-за того, что она очень легкая (всего два целочисленных поля). Разделение данных по нескольким таблицам существенно ускоряет работу MySQL-сервера. Гораздо быстрее работают несколько мелких запросов по каждой таблице, чем один длинный запрос по одной или нескольким таблицам. Имейте это в виду, чтобы спать спокойно.
Дальше - круче. Чтобы не блокировать лишний раз свои таблицы используйте при вставках директиву DELAYED. Пример: INSERT DELAYED into STAT (ID,IP,UTIME) values (null,$ip,NOW()). Он позволяет серверу ответвлять поток в режиме ожидания, а саму вставку производить тогда, когда сервер освободится от других запросов или поступит следующий аналогичный INSERT DELAYED. Обычно отложенный метод подходит для любых операций с кумулятивными таблицами (когда в основном идут INSERTы, а данные копятся, а не модифицируются), при которых не особо важно когда именно подействуют изменения - мгновенно или через несколько секунд, минут. Например, если хотите собирать IPадреса своих посетителей, УРЛы, по которым они ходят или страницы, откуда пришли, время. При добавлении с задержкой скрипт отработает почти мгновенно, еще до выполнения операции.
Операция UPDATE идет в три этапа: поиск того, что будете менять, затем запись данных, обновление индексов. При этом, чем больше таблица, тем дольше поиск. Если есть индексы, то операция кешируется и выполняется достаточно быстро. Но сам процесс очень емкий. И только дурак не догонит, что большая таблица со множеством индексов и записей, будет тормозить при UPDATE. INSERT же выполняется одним залпом, очень быстро. Поэтому обычно используют аддитивные записи (вставками INSERT) во временные таблицы, потом блокируют основные талицы, суммируют обновления, и плюют их в основную таблицу. Получается, что в основном, главные таблицы работают только в режиме вывода, а обновления идут гораздо реже и быстрее. Например, можно копить данные о загрузках новостей во временной таблице, а по крону или иным образом обновлять счетчик каждые 10 минут (или реже). Это ускорит работу сервера.
При запросах SELECT * FROM таблица скрипт получит все поля данной таблицы. А нужно ли это? Использование * ведет к лишнему расходу ресурсов. Гораздо эффективнее использовать точные названия полей, которые нужны скрипту. Например: SELECT id,name FROM таблица. При таком запросе передача займет меньше времени и понадобится меньше ресурсов. Старайтесь ограничивать вывод при помощи директивы LIMIT. Это также ускоряет вывод.
Поиск по БД идет быстрее если вместо LIKE '%слово%', ставить 'слово%'. Операции с шаблонами регулярных выражений кешируются только в том случае, если в начале отсутствует символ %. Поэтому при построении поисковых запросов с LIKE избегайте начинающих символов %.
При построении таблиц для наиболее используемых полей (при поиске, сортировке и т.д.) обязательно создавайте индексы. Без индексов таблицы будут сильно тормозить. Индексы служат для кеширования и позволяют существенно ускорить вывод данных из таблиц. При этом таблицы будут занимать больше места на диске и в памяти. Но это в наше время не проблема.
Используйте надлежащий тип полей для своих записей. Тип TINYINT занимает 1 байт - самый быстрый. Таблицы с MEDIUMINT быстрее таблиц с INT. Если ставить полям свойство NOT NULL, то в целом их работа будет быстрее. VARCHAR медленее CHAR, поэтому таблицы переменной длины (где есть тип VARCHAR или TEXT) занимают меньше дискового пространства, но работают медленнее.
По своему опыту скажу, что для большинства сайтов подходят изложенные советы по работе с MySQL. Чтобы еще больше ускорить свой сервер, советую частоиспользуемые операции проводить по крону выделенными процессами и писать данные в различные файлы. Например, раз в 20 минут запускать скрипт, который будет создавать файл с новостями. Или например, генерить файл с новостями при их добавлениях или обновлениях. Таким образом, вы экономите на каждом обращении к БД. Интерактивность при этом не теряется, а производительность увеличивается во много раз. Особенно, повторяю, при высокой посещаемости ресурса. Старайтесь отделить интерактивные операции от фоновых. Например, на ПротоПлексе работает один интерактивный движок, но в фоне по заданиям трудятся с десяток различных роботов, которые генерируют часто вызываемые страницы, рассылают письма и т.д. Крупный сайт - это не только то, что вы видите, но и бек-енд (обратная сторона). В фоновом режиме можно быстро и эффективно готовить контент, освобождая основной движок от лишней работы.
В общем, основы должны быть всем понятны. Дробите все на мелочи, будь то запросы, таблицы или операции. Структура БД должна быть такой, чтобы не выполнялось ничего лишнего. Регулярно проводите OPTIMIZE на таблицах с переменной длиной, особенно, если в них идут удаления записей. Тестируйте свои запросы на скорость, упрощайте их.
Flash и трехмерная графика, становятся всё более популярными и востребованными. Программа Swift 3D совместила в себе обе популярные технологии. В пятой версии возможности программы вплотную приблизилась к настоящему 3D-редактору и при этом она не стала громоздкой. Программа не требует от пользователя знаний программирования так же, разработчикам удалось сделать ее легкой в освоении даже для того, кто никогда не имел дело с 3D.
Два в одном, флеш и 3D.
Flash и трехмерная графика, становятся всё более популярными и востребованными. Программа Swift 3D совместила в себе обе популярные технологии. В пятой версии возможности программы вплотную приблизилась к настоящему 3D-редактору и при этом она не стала громоздкой. Программа не требует от пользователя знаний программирования так же, разработчикам удалось сделать ее легкой в освоении даже для того, кто никогда не имел дело с 3D.
Для того чтобы начать работу с программой, необходимо знать «азбуку» создания трехмерной графики. Во-первых, на основе простейших трехмерных объектов строятся трехмерные модели. Затем, для этих моделей настраивается освещение, подбираются материалы. На следующем этапе, если это необходимо, создается анимация и, наконец, последний этап – сохранение визуализированного изображения или анимации в файл.
Scene Editor.
На этапе работы с редактором сцены, выполняется общая настройка объектов, задаются геометрические размеры, выбирается их положение и освещение.
В программе можно использовать стандартный набор простейших шаблонов. Помимо этого, в сцену можно импортировать трехмерные модели в формате 3ds, а также изображения в векторном формате. Такие изображения будут автоматически открываться как трехмерные объекты.
Один из самых востребованных типов объектов, который часто используется при создании логотипов это текст. Для получения объемного текста в каком-нибудь полноценном 3D-редакторе (например, в 3ds Max) сначала нужно создать 2D-форму, а затем придать ей объемность при помощи модификатора Bevel или Extrude. В Swift 3D этот процесс упрощен – текст становится объемным сразу же после нажатия кнопки Create Text. Используя панель свойств, можно выбрать профиль фаски, подходящую гарнитуру шрифта и задать другие параметры.
Несмотря на то, что в программе есть базовый набор 3D-объектов, разработчики также предоставили пользователю возможность создавать трехмерные модели самостоятельно. В зависимости от того, какой метод будет выбран, можно использовать одну из вкладок - Extrusion Editor, Lathe Editor или Advanced Modeler.
Extrusion Editor.
Принцип работы редактора выдавливания, прост: создается некоторая сплайновая форма, которая используется для создания трехмерного объекта с заданным сечением. Такой метод очень удобен для моделирования предметов, имеющих постоянное поперечное сечение вдоль одной из осей.
Принцип построения сплайна по точкам мало чем отличается от создания кривой в любой программе для векторной графики. Для каждой точки можно выбрать один из трех типов излома, а форму линии можно корректировать с помощью касательных. На панели инструментов редактора выдавливания можно найти инструмент для замыкания кривой, а также кнопки для быстрого создания 2D-форм самых распространенных типов: звездочки, стрелки, значка "плюс" и прочих.
Чтобы увидеть результат работы с этим инструментом, нужно вернуться на этап работы с редактором сцены.
Выдавливание можно также производить со скосом, что даст возможность получить несколько иной профиль конечной модели.
Lathe Editor
Еще один инструмент для создания трехмерных поверхностей, на этот раз образованных вращением профиля вокруг некоторой оси. Lathe Editor напоминает редактор выдавливания. Тут опять требуется создать кривую определенной формы, основные инструменты те же самые, разве что нет кнопок для быстрого создания кривых часто используемой формы.
В окне редактора поверхностей вращения следует нарисовать профиль, который будет иметь будущая трехмерная модель. Затем нужно перейти на вкладку Scene Editor и при необходимости настроить параметры созданного объекта, например, указать угол поворота профиля модели или определить число радиальных сегментов. Если в строке Sweep Angle изменить угол, заданный по умолчанию, поверхность вращения будет незамкнутой.
Интересно, что и при работе с редактором выдавливания, и при использовании редактора поверхностей вращения можно анимировать форму кривой.
Advanced Modeler
Режим Advanced Modeler – это настоящая гордость Swift 3D. Главная особенность этого режима – редактирование оболочки трехмерных объектов. Перед вами раскрываются неограниченные возможности управления их формой.
Для перехода в режим редактирования оболочки используется кнопка Edit Mesh. После этого на панели инструментов становятся активными кнопки для редактирования модели на разных уровнях подобъектов.
Можно выделять вершины, ребра, поверхности, а затем выполнять с выделенными подобъектами разные действия, такие как выдавливание, уплотнение сетки, зеркальное отражение, округление и пр.
Возможность работы в режиме редактирования поверхности дает еще одно преимущество – появляется возможность использовать разные материалы для разных частей объекта.
Добавление материалов
После завершения работы над формой объекта нужно выбрать для него материал. Материалы в Swift 3D выбираются исходя из имеющихся в наличии заготовок, которые находятся в палитре материалов. Библиотека пестрит разнообразием. Материалы разделены на несколько категорий: с прозрачностью, блестящие, имитирующие дерево, кирпич, мрамор, камень и т.д.
Назначается материал очень просто: нужно перетащить выбранный образец на объект. При необходимости, настройки материала можно подкорректировать. Для этого нужно дважды щелкнуть по образцу. Можно создать и собственный материал, используя для этого растровое изображение.
Освещение и камеры
Разработчики Swift 3D уделили достаточно много внимания системе освещения. По умолчанию, в виртуальном пространстве используется двухточечная система освещения, причем, положение источников света, добавленных программой по умолчанию, можно изменять (в большинстве 3D-редакторов такой возможности нет). Для этого используется схематический трекбол с двумя отметками источников света. Центр трекбола соответствует центру сцены. С его помощью также удобно подбирать угол освещения объектов трехмерной сцены новыми источниками.
Несмотря на то, что для такой нереалистичной визуализации, как «рисованный» флэш, освещение не очень важно, авторы Swift 3D добавили в программу четыре разных типа источника. Комбинируя их, можно имитировать освещение в разное время суток.
Для того чтобы иметь возможность точно и гибко выбрать угол съемки, в сцене можно использовать виртуальные камеры. Камеры могут быть двух видов – свободные и направленные, с мишенью.
Анимация объектов
Работа с анимацией выполняется на вкладке Scene Editor. Оживление трехмерных объектов происходит благодаря режиму автоматического создания ключей анимации. Этот режим активируется на временной шкале кнопкой Animate. Для того чтобы заставить двигаться объекты сцены, достаточно в этом режиме передвинуть ползунок на нужный кадр и попробовать изменить положение объекта в сцене, например, повернуть его на некоторый угол.
Если выделить в сцене объект, на шкале анимации отобразится список анимируемых параметров. При дальнейшем создании анимации выбранного объекта напротив каждого параметра, который будет анимироваться, будут появляться метки – ключи анимации. Ключи анимации можно перемещать и копировать. Кроме этого, есть возможность изменять характер протекания анимации.
Анимацию объектов можно также создавать, устанавливая траекторию их движения. Для этого служит режим Animation Path Mode, который также активируется кнопкой на временной шкале. Траекторию движения можно установить вручную, хотя в большинстве случаев удобнее использовать готовые варианты движений, находящиеся в библиотеке предварительных заготовок, о которой мы говорили выше.
Поскольку флэш-анимация в большинстве случаев используется для создания анимированного логотипа, как правило, движения такой эмблемы можно заранее предвидеть – логотип может вращаться, перемещаться вдоль окружности или другой геометрической фигуры.
Чтобы воспользоваться заранее заданными параметрами анимации, достаточно перетащить образец анимации из библиотеки на объект в сцене.
Сохранение проекта
Последний этап работы в Swift 3D – предварительный просмотр анимации и экспорт в выбранный формат. Все это выполняется на вкладке Preview And Export Editor. Тут можно покадрово просмотреть анимацию, задать параметры экспорта и выбрать формат файла.
Программа работает с большим числом форматов и дает возможность сохранить анимацию как файл Mov, Flv, Swf, Avi. Кроме этого, возможно сохранение в виде графического файла или в один из форматов векторной графики – Ai или Eps.
Сразу хотим отметить, что при помощи демонстрационной версии программы сохранить проект не удастся. Она дает возможность оценить все функции Swift 3D, однако результат работы можно просматривать только в окне предварительного просмотра, сохранение в файл не работает. Кроме этого, не удастся экспортировать созданные в программе модели в 3ds.
Триал-версию программы можно скачать с официального сайта. Полная версия Swift 3D оценивается в $250. Кроме версии для Windows, существует также версия для Mac OS.
Сам термин «фоторобот» и метод был придуман еще в 1952 году во Франции криминалистом Пьером Шабо. Первый фторобот предполагаемого преступника был сделан из фрагментов разных фотографий и переснятый в отдельный снимок. Постепенно фотографии заменили на рисунки.
Программы и инструменты, которые помогают создавать фотороботы.
Сам термин «фоторобот» и метод был придуман еще в 1952 году во Франции криминалистом Пьером Шабо. Первый фоторобот предполагаемого преступника был сделан из фрагментов разных фотографий и переснятый в отдельный снимок. Постепенно фотографии заменили на рисунки.
Казалось бы зачем нам нужен фоторобот, ведь его основное применение это розыск преступников? Ответов может быть несколько. Возможно кому то захочется вернутся в детство к играм в сыщиков а кому то захочется нарисовать шарж или смешного человека.
Есть и еще одно применение с помощью физиогномического анализа можно создавать не только визуальный портрет но и психологический.
Ultimate Flash Face 0.42 beta.
Ultimate Flash Face (http://flashface.ctapt.de) — это онлайн-фоторобот, лучший из бесплатных сервисов подобной тематики. Лицо человека разделяется на десять составляющих (если смотреть сверху вниз): прическа, форма головы, брови, глаза, очки, нос, усы, рот, подбородок, борода. Каждую «деталь» надо подобрать в соответствующей картотеке.
Чтобы добиться наилучшего результата, фрагменты портрета можно не только перемещать в пространстве, но и растягивать/сжимать по вертикали и горизонтали. Еще одна полезная возможность — выравнивание всего лица относительно выбранного элемента по вертикали. Она пригодится, если вы захотите переместить портрет внутри рамки или не уверены, что удачно расположили тот или иной фрагмент.
Полученный портрет можно распечатать или сохранить на сервере — он будет доступен для просмотра всем желающим. Соответственно, можно изучить и чужие работы. Единственным серьезным недостатком сервиса является невозможность сохранить рисунок на свой компьютер.
«Фоторобот 1.00»
Эта утилита предназначена для создания шаржей и рожиц, так что пытаться добиться с ее помощью портретного сходства бесполезно. Портрет предельно упрощен: глаза, уши, нос и рот — вот и все, с чем можно работать. Перемещаются эти «детали» по лицу с помощью четырех кнопок-стрелок, внутри которых спрятаны кнопки переключения на следующий вариант «детали». К изображению можно добавить подпись.
Веб-сайт: http://superperls.narod.ru/photorobot
Виртуальные стилисты.
Многие женщины часто задают себе и окружающим такие вопросы. Какую прическу мне выбрать? В какой цвет покрасится? Пойдут ли мне очки? Чтобы помочь им с выбором используют метод копирующий фоторобот. Только здесь берется фотография реального человека и «гримируется» с помощью накладных париков, макияжа, головных уборов и т. д.
Именно так устроены специализированные онлайн-сервисы предложенные порталом iVillage Makeover-o-Matic (http://beauty.ivillage.com/stc/hair-styllst/halrstyllst.htlm) или русскоязычный «Виртуальный салон красоты» (http://virtualmakeover.ru).
Загружаем свое фото или выбираем подходящий портрет другого человека, если понравился создаем образ - сохраняем изображение. В «Виртуальном салоне» мужчинам уделено не мало внимания.
Digital Physiognomy 1.60
В этом редакторе представлено необычное использование фоторобота — изучение лица с точки зрения физиогномики. Относиться к этой области знания можно по-разному, сами же разработчики честно предупреждают: «Полученная диагностика свидетельствует не столько о действительно вашем характере и возможном поведении, а о том, как вас в большинстве случаев воспринимает незнакомый, непредубежденный человек, увидевший вас впервые».
Составить фоторобот в Digital Physiognomy можно двумя способами: подбирая подходящие кусочки по картинкам или на основании «словесного портрета» — предложенного программой текстового описания той или иной черты лица (лоб узкий, низкий, глаза маленькие, глубоко посаженные). Когда портрет готов, утилита предлагает три варианта его расшифровки: текст, диаграмма с психологическими характеристиками и типы с точки зрения соци-оники.
Есть в Digital Physiognomy интересная функция — подбор портрета по заданным психологическим характеристикам. Можно узнать, как выглядит самый невезучий человек или самый хитрый. Кроме того, разработчики подготовили около 500 портретов исторических деятелей, политиков, известных актеров, во внешности которых можно детально разобраться.
Мультроботы.
Фотороботы бывают и мультяшными. Это те же составные картинки. Благодаря им можно представить себя художником-мультипликатором.
Наиболее мощным мультяшным фотороботом является South Park Studio (http://sp-studio.de). Этот сервис на основе известного сериала позволяет создавать персонажей в духе мультфильма. К услугам пользователей огромные запасы шаблонов рук, ног, туловищ, глаз, ртов... Всего, чего душе угодно.
Мультробот Dream Avatar (www.tek-tek.org/ dream/dream.php) посвящен ани-ме — фрагменты человечка прорисованы в соответствующей манере. Еще один ресурс такого типа инструментов — Avatares (www.buscarmessenger.com/ avatars. html). Правда, не известно, к какому стилю или направлению его отнести. Но то, что всеми чертами фоторобота он обладает — это точно.
Все-таки хорошая идея пришла в голову Пьеру Шабо. Вроде пустяк, а какова область применений!
Самым распространенным и популярным из профессиональных графических редакторов считается Adobe Photoshop. Но многим профессионалам все возможности «Фотошопа» не нужны в полном объеме, а цена его довольно высокая. Вот и приходится искать более дешевые но с профессиональными возможностями. Таких редакторов в настоящее время существует достаточно много. Один из них Photo Pos Pro от компании Power of Software, у которого есть все возможности профессионального графического редактора.
Photo Pos Pro еще один профессиональный графический редактор.
Самым распространенным и популярным из профессиональных графических редакторов считается Adobe Photoshop. Но многим профессионалам все возможности «Фотошопа» не нужны в полном объеме, а цена его довольно высокая. Вот и приходится искать более дешевые но с профессиональными возможностями. Таких редакторов в настоящее время существует достаточно много. Один из них Photo Pos Pro от компании Power of Software, у которого есть все возможности профессионального графического редактора.
Сколько существует графических редакторов столько же и существует логик работы с ними. С Photo Pos Pro придется немного повозиться, вникая в его логику. К примеру, масштабировать изображение по "горячим" клавишам Ctrl+ и Ctrl– не получится, зато можно масштабировать с помощью левой и правой кнопок мыши, что тоже довольно удобно. Так же отсутствует типовой для всех графических редакторов инструмент Levels в чистом виде. Привычные в других программах операции здесь выполнялись несколько по-другому, и поэтому приходилось внимательно изучать файл справки. И, к сожалению, обращение к справке требует знаний английского языка — программа не локализована.
Когда же немного освоишься в программе, начинаешь понимать, насколько ее интерфейс удобен. Иконки поначалу кажутся маленькими, но привыкаешь к ним быстро. Оригинально выполнены окна панелей инструментов. Их всего два: менеджер слоев и собственно панель инструментов. Менеджер слоев — постоянная панель, а вот панель инструментов меняется в зависимости от выбранного инструмента. Обе панели автоматически сворачиваются и разворачиваются при наведении на них указателя мыши. Это очень удобно, так как панель в развернутом виде нужна только при настройке параметров инструмента, а в остальное время она мешает работе. Автоматическое сворачивание панелей до полосы с названием панели позволяет максимально сосредоточиться на творческой деятельности. Впрочем, при необходимости можно закрепить панели в развернутом состоянии.
Довольно-таки удобно реализован и инструмент выбора цвета. Он находится на правом крае рабочей области программы и включает в себя кроме инструмента выбора цвета еще и возможности по управлению градиентом заливки, текстурой и шаблонами. Здесь также нашлось некоторое отклонение от стандартных правил, хотя инструмент очень удобен. В соответствии с этими правилами цвет фона (background) располагается на инструментах выбора цвета за цветом инструмента (foreground). В Photo Pos Pro все наоборот, и это на первых порах сбивает с толку, но потом привыкаешь и к этому.
Еще удобно сделано в интерфейсе поддержка вкладок. Некоторых редакторах несколько открытых изображений показываются через отдельные окна, что затрудняет навигацию между ними, если открыто много картинок. При использовании механизмов вкладок такая навигация упрощается. Точно так же в виде вкладки может быть встроенный просмотрщик картинок. В самом просмотрщике можно получить полную информацию о любой из фотографий, как о самом файле, так и Exif.
Есть возможность использования фонов, которые можно просмотреть через специальный инструмент Themes Background. Темы фона в этом каталоге разбиты на пять категорий, и общее их количество не очень велико. Хотя можно загрузить бесплатные темы с сайта либо поместить свои картинки в папку Pictures каталога программы, так как в качестве фона используются картинки в обычных графических форматах. Аналогично можно поступить с масками, шаблонами, кистями, текстурами, подкладывая собственные образцы в соответствующие папки. А вот с рамками так не получится, так как для рамок используется собственный формат.
В арсенале инструментов для обработки изображений у Photo Pos Pro есть практически все:
• инструменты выделения, поворота и отображения;
• инструменты перемещения, обрезки и трансформации;
• разнообразные виды кистей, шаблоны, текстуры, градиенты;
• инструменты создания различных форм и линий;
• инструменты пакетной, ручной и автоматической цветокоррекции;
• разнообразные фильтры, маски и эффекты;
• инструменты добавления рамок, текста;
• возможность работы со слоями.
Удобство работы с инструментами все же не такое высокое, как в иных редакторах. Не совсем удобны маленькие и не изменяемые в размерах окна фильтров. В них получаются очень мелкие превьюшки обрабатываемых изображений, поэтому приходится использовать кнопку Preview, либо включать режим AutoPrewiew, который отображает на самом изображении вносимые изменения. А на полную обработку картинки требуются время и вычислительные ресурсы. На слабых компьютерах это будет серьезно мешать дизайнеру. С этой точки зрения системные требования к компьютеру явно занижены разработчиками.
Механизмы эффектов, фильтров, инструментов цветокоррекции работают довольно хорошо. Реализовать какую-нибудь задумку не сможет разве что ну очень "креативный" дизайнер. Набор фильтров богат, хотя совсем уж оригинальных не нашлось. Также не нашлось механизма подключения плагинов сторонних разработчиков, такая функция не помешала бы.
В Photo Pos Pro есть упрощенный инструмент нарезки изображений для Веба: HTML Image Mapper. К нему бы добавить инструмент оптимизации самого изображения для Веба по размеру файла, который здесь отсутствует — и вовсе было бы замечательно.
А в общем Photo Pos Pro — довольно удобный графический редактор, который претендует на уровень профессионального. К нему, конечно, нужно привыкать, но, однажды привыкнув, вы сможете на довольно высоком уровне обрабатывать графический материал, получая профессиональные результаты.
Системные требования:
• операционная система Windows 98/Me/XP/Vista;
• процессор с частотой 350 МГц и выше;
• 256 Mб оперативной памяти;
• 300 Mб свободного места на жестком диске;
• 16-битная цветопередача;
• разрешение монитора 800x600 пикселей.
Те, кто хорошо умеет работать с графическим редактором Photoshop, могут сделать анимированный GIF непосредственно в этой программе. Но создания баннера или анимированной кнопки совсем не обязательно каждому изучать Photoshop. Есть множество специализированных программ для создания анимированной графики, которые в свою очередь имеют множество специальных инструментов и шаблонов, благодаря которым создание рекламного объявления или анимированного логотипа для сайта становится делом нескольких минут.
Программы создающие GIF-анимацию.
Те, кто хорошо умеет работать с графическим редактором Photoshop, могут сделать анимированный GIF непосредственно в этой программе. Но создания баннера или анимированной кнопки совсем не обязательно каждому изучать Photoshop. Есть множество специализированных программ для создания анимированной графики, которые в свою очередь имеют множество специальных инструментов и шаблонов, благодаря которым создание рекламного объявления или анимированного логотипа для сайта становится делом нескольких минут.
GIF Construction Set Professional.
На первый взгляд кажется, что эта программа проста но это не так. Возможности ее очень широки, и, в отличие от многих аналогичных программ, она позволяет компилировать анимационные файлы не только в формате GIF. GIF Construction Set Professional может преобразовывать созданную в ней анимацию или уже готовый GIF-файл в формат Macromedia Flash (SWF). Файл Macromedia Flash имеет свои преимущества и недостатки перед GIF. Так, например, степень сжатия изображения в GIF ниже, и файл SWF может включать в себя не только анимацию, но и звук.
При экспорте созданной анимации в файл Macromedia Flash, следует помнить о том, что если в анимированном GIF можно указать время отображения каждого кадра по отдельности, в файле SWF частота смены изображений будет фиксированной. Кроме этого, файлы SWF, в отличие от GIF не поддерживают прозрачности.
Экспортировать в формат Macromedia Flash циклическую анимацию не получится – файл можно проиграть только один раз. Для имитации многократно повторяющейся анимации необходимо вносить дополнительные изменения в HTML-код страницы, на которой будет расположен SWF файл.
Принцип создания анимированного GIF-файла такой же, как и разработка рисованного мультфильма. Создается группа изображений с несколько измененным рисунком, после чего указывается их последовательность, и все они экспортируются в единый файл. Изображения, из которых будет состоять GIF-анимация, в GIF Construction Set Professional отображены в виде столбца кадров. Инструменты для выполнения различных манипуляций с кадрами «спрятаны» в контекстном меню. Они дают возможность вращать, обрезать, выполнять цветокоррекцию, добавлять эффект тени, выполнять объединение и удаление кадров.
Для файлов, которые помещаются на интернет-странице, очень важно, чтобы их размер был как можно меньше. В утилите GIF Construction Set Professional имеется специальная функция «суперсжатия», благодаря которой программа анализирует код GIF файла и делает размер анимации несколько меньше.
Easy GIF Animator Pro
Эта программа сделана, так чтобы любая задача могла быть выполнена в ней буквально за несколько минут. Реализовано это за счет продуманного процесса создания нового анимационного файла. В программе имеется свои мастера настроек - мастер создания нового баннера и мастер создания новой кнопки. Удобство таких предварительных заготовок еще и в том, что в программе уже заложены стандартные основные размеры баннеров, которые не всегда можно запомнить. В программе содержатся небольшой набор шаблонов кнопок с разными текстурами: мраморные, стеклянные, деревянные и пр.
Чтобы несколько разнообразить монотонное «слайд-шоу» сменяющихся кадров на баннере или на другом графическом элементе интернет-страницы, Easy GIF Animator Pro предлагает использовать анимационные эффекты перехода от одного изображения к другому. Вторая картинка может, например, выезжать из угла кадра или медленно проступать поверх предыдущей. Easy GIF Animator Pro имеет скромный набор инструментов для редактирования каждого изображения в анимации. Однако, несмотря на то, что этот «арсенал» напоминает палитру инструментов программы Microsoft Paint, на практике оказывается, что его вполне достаточно даже для того чтобы сделать текстовый баннер «с нуля». Здесь можно создавать геометрические фигуры, выполнять заливку, добавлять текст и делать заливку изображения градиентным цветом или даже выбранной текстурой.
GIF Movie Gear
В этой программе практически полностью отсутствует возможность редактирования изображений. Единственный способ это сделать – изменять рисунок по пикселам, что не далеко не всегда удобно. Из этого можно сделать вывод, что программа GIF Movie Gear позиционируется не как самостоятельный инструмент для работы с форматом GIF, а как вспомогательная утилита, которую будет уместно использовать в паре с каким-нибудь графическим редактором. В программе даже имеется возможность указать путь на диске к утилите, которая будет запускаться всякий раз, когда возникнет необходимость изменить рисунок кадра.
В GIF Movie Gear хорошо реализована оптимизация выходного файла. Во-первых, с ее помощью можно управлять количеством цветов в индексированной палитре GIF-файла, а также вручную подбирать цвета индексированной палитры и сохранять ее в отдельный файл для повторного использования. Во-вторых, в программе есть целая группа настроек для уменьшения размера файла без потери качества изображения. Среди них – максимально возможная обрезка кадров, устранение ненужных кадров (например, повторяющихся), замена дублирующихся точек изображения с прозрачностью. Эффективность выбранных настроек может быть мгновенно просчитана программой и оценена в процентах сжатия от общего размера анимационного файла.
В GIF Movie Gear можно использовать не только для создания GIF анимации. С помощью программы можно также создавать иконки *.ico (вот тут и пригодится возможность точечного рисунка), обычные и анимированные курсоры (*.cur, *.ani). Кроме вышеперечисленных форматов, изображения могут быть сохранены в виде многослойного файла PSD или в виде секвенции изображений в других графических форматах.
Если необходимо особым образом пометить создаваемый файл GIF, в него можно внедрить комментарий. При этом внешне файл останется прежним, лишь слегка увеличится его размер.
Selteco Bannershop GIF Animator
Эта программа нацелена, в основном на создание баннеров. В списке наиболее часто встречаемых разрешений можно найти все популярные сегодня типы баннеров, от стандартного 468x60 до «небоскреба» (skyscraper). Bannershop GIF Animator имеет специальный режим для быстрого создания анимированного изображения. Работая в нем, достаточно составить список графических файлов, задать задержку перед выводом на экран следующего кадра и все, файл можно сохранять в формате GIF. По такому же принципу работает и мастер создания слайд-шоу из отдельных картинок.
В Bannershop GIF Animator можно использовать анимационные эффекты, которые разделены на три группы – Intro Animation, Animation и Outro Animation. В первом случае можно получить эффект появления выделенного кадра, в последнем – его исчезновение. Отчасти, эти эффекты напоминают эффекты перехода, однако их область применения шире. Они также могут использоваться как видеофильтры. Эффекты еще одной группы, Animation, заставляют изображение двигаться особым образом – скользить, дрожать и переливаться светом.
Если составленная цепочка кадров включает в себя изображения разного разрешения, можно воспользоваться функцией Autosizing Frames, которая будет увеличивать рабочее пространство до тех пор, пока его площади не будет достаточно, чтобы отобразить самый большой кадр.
Нередко при создании текстового баннера приходится использовать символьный шрифт. Для того чтобы отыскать нужный значок, приходится тратить довольно много времени или использовать специальные программы-менеджеры установленных в системе шрифтов.
Создавая текст на баннере, отыскать нужный символ в Bannershop GIF Animator очень просто. Команда Inserт Symbol откроет таблицу со всеми элементами выбранного шрифта. Перебирая названия в списке установленных в системе шрифтов и наблюдая за таблицей, можно легко найти то, что нужно.
Готовую анимацию можно сразу сохранять в виде HTML страницы, в коде которой уже указано название графического файла.
Среди прочих особенностей программы стоит отметить возможность экспорта подготовленной анимации в AVI и поддержку векторного формата WMF, изображение которого растрируется при импорте в программу.
Active GIF Creator
Если необходимо сделать большое количество похожих баннеров, анимированных кнопок или логотипов, стоит задуматься о том, как упростить процесс. В Active GIF Creator это можно сделать с помощью специальных скриптов.
Модуль для работы со скриптами Script Editor является главной "изюминкой" программы. Он дает возможность автоматизировать рутинную работу, записав последовательность действий в отдельный скрипт. Анимационные скрипты – это файлы с расширением *.agif, которые сохраняются внутри проекта и могут многократно использоваться во время работы над ним. Таким образом, можно автоматически перемещать объекты, изменять их размер, управлять их отображением.
Active GIF Creator может оптимизировать размер анимационного файла, в зависимости от указанной скорости модема. В программе можно сохранять Gif анимацию сразу с HTML кодом и при этом подбирать в окне предварительного просмотра цвет фона и текста.
Кроме этого, программа умеет создавать GIF-файлы из командной строки в пакетном режиме. Самостоятельно разобраться с этой возможностью достаточно тяжело, но, тем не менее, ответы, на все вопросы, касающиеся работы с командной строкой, можно найти в технической документации Active GIF Creator.
CoffeeCup GIF Animator
CoffeeCup GIF Animator - это отличный выход для тех, у кого нет никакого желания и времени разбираться со сложными настройками Photoshop только ради того, чтобы сделать аватар. Программа несложна в использовании и при этом имеет все необходимые инструменты для решения такой задачи. Так, например, программа поддерживает импорт видео-файлов, может задавать время задержки для всех кадров GIF-анимации сразу или по отдельности, устанавливать для каждого кадра свое время отображения, задавать цвет, который должен быть прозрачным на изображении. Настроек в программе минимум, и все они помещаются в небольшом окне программы, в котором происходит сборка и предварительный просмотр анимации.
Мастер оптимизации также практически не требует от пользователя никакого вмешательства – достаточно следовать его простым инструкциям, и размер файла будет уменьшен настолько, насколько это возможно, без потери качества изображения. Это достигается за счет ограничения индексированной палитры и устранения присутствующих в файле GIF внутренних комментариев. CoffeeCup GIF Animator также сохраняет сделанную анимацию в SWF, и при этом выводит на экран код, который нужно будет вставить, чтобы файл отображался на веб-странице.
Ulead GIF Animator
Компания Ulead известна, прежде всего, своим программным обеспечением для работы с цифровым видео, поэтому неудивительно, что ее утилита GIF Animator унаследовала черты настоящего видеоредактора. Так, например, программа изобилует всевозможными эффектами, большинство которых перекочевали в GIF Animator из стандартного набора эффектов перехода приложений для обработки видео - Video Studio и Media Studio Pro.
Количество встроенных эффектов можно и увеличить. Для этого в настройках Ulead GIF Animator можно указать расположение фильтров Photoshop и дополнительных фильтров, совместимых с графическим редактором от Adobe. Тут, впрочем, следует вспомнить о том, что со времени выхода последней версии GIF Animator, прошло довольно много времени, и новые фильтры программой от Ulead не поддерживаются.
В режиме, предназначенном для оптимизации файла, рабочая область для наглядности разделена на две части – в одной показываются кадры проекта до сжатия в формат GIF, во второй – после. Изменение настроек сжатия мгновенно отображается на конечном результате. Подбирать «золотую середину» в соотношении размер-качество можно используя ограничение цветовой палитры. Кроме этого, досутпно еще два параметра – Dither, определяющий точность передачи градиентного перехода цвета, и Lossy, отвечающий за количество потерь при сжатии изображения. Управлять кадрами анимации можно либо с помощью панели кадров, где они показаны в виде слайдов, либо с панели настроек, где эта же анимация отображена в виде группы слоев, каждый из которых означает отдельный кадр.
Среди различных форматов экспорта присутствует совершенно неожиданная функция – упаковка созданной анимации в исполнительный EXE-файл. В этом случае на выходе вы получаете один файл, при запуске которого происходит примерно следующее – на экран поверх открытых окон программ выплывает созданное в GIF Animator изображение, а затем воспроизводится анимация. Трудно сказать, какое применение можно найти для этой возможности программы, скорее всего, ее можно использовать для необычного оформления презентации, которая будет начинаться таким неожиданным появлением изображения, либо это может быть просто способ пошутить над коллегой по работе.
Программ GIF-анимации обязательно нужно держать под рукой – чтобы в один прекрасный момент проблема создания анимированного баннера не затормозила всю остальную работу. Для тех, кто постоянно создает анимационные баннеры в больших количествах, следует попробовать в работе редактор скриптов Active GIF Creator, для тех, кому нужно быстро сделать свой аватар или оригинальный юзербар лучше подойдет CoffeeCup GIF Animator. Ну, а если нужен просто универсальный и надежный GIF-аниматор, «на все случаи жизни», советуем присмотреться к хорошо зарекомендовавшей себя программе от Ulead.
Событие - это какое-либо действие, осуществляемое пользователем либо браузером. Например, когда мы щелкаем (кликаем) на ссылке - осуществляется событие, его перехватывает специальный обработчик и перенаправляет нас на нужную страницу; при наведении курсора (указателя мыши) на ссылку в строке состояния (обычно находится в нижней части окна браузера) отображается адрес, так как обработчик "наведения курсора на объект (в данном случае на ссылку)" помещает туда этот адрес и так далее...
а). onmouseout и onmouseover
Для начала наведем курсор на кнопку "Сброс" или "Отправить" и обратим внимание на строку состояния. Вы должны увидеть там надпись с объяснением значения кнопки. Теперь отведите курсор и строка состояния очистится.
Содержимое строки состояния хранится в переменной window.status. Переменная это некоторый объект (можно представить себе ящик), значение которого (содержимое которого) можно изменять. Изменение значения осуществляется операцией присваивания (=), а выглядит она следующим образом:
имя_переменной = "значение"; (какие использовать кавычки: одинарные или двойные значения не имеет)
Поэтому для того, чтобы изменить надпись в строке состояния, нам нужно присвоить переменной window.status нужное нам значение (подсказку к кнопке), а когда курсор будет убран - присвоить пустую строку("").
Вся задача сводится к тому, чтобы определить когда пользователь наводит курсор на кнопку, а когда убирает его. Для этого нужно "сказать" обработчикам этих событий выполнить нужное нам действие. Обработчик события "наведение курсора" - onmouseover, а "отведение курсора" - onmouseout.
Очень многие тэги имеют атрибуты, начинающиеся с on (onclick, onmouseout, onfocus и т. д.). Значение этих атрибутов и есть, задача которую необходимо выполнить соответствующему обработчику. То есть для обработчика onmouseout есть атрибут onmouseout, для onmouseover - onmouseover. И в итоге мы получаем следующее определение кнопок:
Как Вы видите, атрибут onmouseover имеет в качестве значения JavaScript-код: window.status='Щелкните для отправки данных', как только курсор достигает кнопки, обработчик события mouseover - onmouseover, смотрит, что хранится в атрибуте onmouseover и выполняет необходимое действие(присвоение значения переменной window.status). Аналогично действует и обработчик события onmouseout: как только курсор уводиться от кнопки (то есть выполняется событие mouseout), то обработчик события - onmouseout выполняет код, содержащийся в атрибуте onmouseout.
То же самое и со второй кнопкой.
б). <a href="Java Scriptfunction()">Function</a>
Теперь щелкните на ссылке и откроется окошко с подсказкой. Но заметьте, что окно небольших размеров и у него нет панели инструментов - такого силами html не сделаешь! В данном примере мы имеем окно размером 300x200, без панелей инструментов, содержащее документ help.html.
Для того чтобы создать такое окошко существует следующий JavaScript-код:
где:
1. helpWindow - это имя переменной (как window.status, только в данном случае имя выбирается произвольно). Эта переменная нужна для последующей работы с окном (например, закрыть его нестандартным способом - с помощью JavaScript-сценария).
- Зачем? Не проще ли указывать просто имя открывающейся страницы, например help.html?
- А если у нас две копии одной и той же страницы? Или две страницы с одинаковым именем(например, в разных папках)? Вот для того, чтобы не перепутать страницы и свободно работать именно с тем окном с которым предполагаешь и сделанно, так чтобы "окно" присваивалось переменной, так как имя переменной можно выбрать любое.
2. window.open(что-то) - это функция. Функции выполняют определенную задачу, в данном случае window.open() открывает новое окно.
3. help.html - это страница, которую нужно открыть.
4. "" - В кавычках должно быть имя окна, но оно нам не пригодится, поэтому там нулевая строка. В следующих кавычках указываются "параметры открываемого окна": оно не должно содержать панели инструментов (toolbar=0) и должно быть шириной 300 пикселей, а высотой - 200 (width=300,height=200, соответственно).
Теперь все, что нужно это по событию "щелчка" выполнить этот код, однако есть два "но". Во-первых строка очень длинная, чтобы присвоить ее какому-либо атрибуту - будет некрасиво смотреться, да и вызывать неудобства при чтении кода страницы. Во-вторых, первоначальное предназначение ссылки - это переход на другую страницу, но нам переходить никуда не нужно, нам нужно выполнить вместо этого JavaScript-код.
Первое решается написанием функции. Как я уже говорил функция выполняет некоторую задача, причем для использования функции достаточно указать ее имя. Можно не только использовать предопределенные(функции, которые имеется в языке и без нас), но и писать их самому. Обычно функции определяются(пишутся) в разделе HEAD документа, в котором используются:
"function" значит, что дальше будет написана наша функция; help() - это имя функции (оно будет указываться вместо тела функции (между { и })).
Вторая проблема решается тоже довольно просто. Адрес страницы указывается в атрибуте href, а нам надо выполнить JavaScript код вместо перехода по ссылке:
"Java Script" означает, что дальше должен идти JavaScript-код, и что он должен выполняться вместо стандартного перехода по ссылке. В данном случае наш JavaScript-код - это созданная нами функция help().
в). onclick
Нам не остается ничего более, как закрыть окно со справкой. Для этого воспользуемся кнопкой "Закрыть". Но нас интересует то, как работает эта кнопка, а имеет она следующий вид:
Дабы закрыть окно мы сделали щелчок(Click) на кнопке "Закрыть", а щелчок это нажатие и отпускание кнопки мыши, причем и то и другое должно быть произведено на одном и том же элементе (например, на кнопке). Кликая, на кнопке мы активируем обработчик события onClick, который выполняет для нас JavaScript-код, прописанный в атрибуте onclick нашей кнопки. Помните мы открывали окно? Мы писали window.open(), а здесь тоже самое только window.close(). window - это текущее окно, а close() - закрыть.
Это одно из наиболее частоупотребляемых событий.
г). onfocus и onblur
Ну что ж будем ближе подбираться к вводу требуемой от нас информации.
Как я уже говорил: элемент получает фокус когда на нем происходит нажатие кнопки мыши, или на него осуществляется переход посредством клавиши табуляции (Tab), а теряет, когда фокус получает другой элемент. Наше поле для ввода получит фокус тогда, когда пользователь решиться ввести информацию. При этом было бы удобно, чтобы текст с подсказкой ("Введите Ваше имя") автоматически выделялся и посетитель мог его удалить одним нажатием на del, а не удалять по одному символу, или выделять текст вручную. Удобство пользователя свято. Итак, для этого мы воспользуемся событием focus. Для выделения текста используется метод select(). То есть атрибутом к полю надо прописать: onfocus="this.select();", this обозначает, что выделение должно происходить именно в этом текстовом поле (а можно прописать путь и к другому, но это не целесообразно).
А теперь попробуйте ничего не изменяя (или все удалив) убрать фокус (например, щелкнув в любом месте окна, или нажав Tab). Это событие blur, я прописал в нем выполнение функции: onblur="check();". Сама же функция имеет следующий вид (в разделе head страницы с формой между <script> и </script>):
document.forms[0].name.value - это то, что введено в текстовое поле. document - это текущий документ, forms[0] - первая форма на нашей страницы (отсчет с нуля), name = имя поля (задается атрибутом name (<input name="name">)), а value это и есть нужное нам значение (то, что введенно в текстовое поле, к которому м ы и написали путь). Введенное в поле мы присваиваем переменной val (var значит, что дальше идет имя переменной), чтобы в дальнейшем каждый раз не писать весь путь целиком.
Следующее это оператор if(если). Он выглядит следующим образом:
Мы сравниваем содержание переменной val с пустой строкой ('') и с начальной строкой ('Введите Ваше имя'). Обратите внимание, что сравнение не как в математике(с одним =), а сравниваются двума ==. || - или. Функция alert выводит окно с ошибкой (то, что в скобках - это текст ошибки). То есть:
И на всякий случай приведу целиком строку с кодом поля input:
д). onreset и onsubmit
Допустим, что пользователь заполнил форму неправильно, и он хочет очистить все поля формы одновременно: для этого он воспользуется стандартной кнопкой reset. Но что если пользователь щелкнет на ней по случайности (рука дрогнет, или в суете спутает с кнопкой submit), а форма была огромная, и он долго мучился ее заполнять..., ему будет грустно, и еще он будет долго материться. Поэтому хорошо бы у него дополнительно спросить: действительно ли он хочет очистить форму.
Вообще событие reset обрабатывается до очистки формы. А чтобы отменить очистку вообще, нам просто напросто надо вернуть обработчику события значение false, то есть прописать в соответствующем атрибуте: "return false;", а чтобы продолжить очистку: "return true;". А теперь вспомним функцию, которая выдает вопрос пользователю на подтверждение чего-либо, эта функция: "confirm('Вопрос?');". При нажатии "Ok", эта функция заменяется на true, а при нажатии "Cancel" на false. То есть все что от нас требуется, это прописать в теге <form> атрибут: onreset="return confirm('Вы действительно хотите сбросить форму?');". Тогда при нажатии "Ok" там на самом деле будет "return true;", и форма будет очищена, а если "Cancel", то "return false;" и очистка формы будет отменена.
Подобным образом действует событие submit, которое возникает при попытке отправить форму. Поскольку в нашем случае форму отправлять никуда не надо, то у меня просто написано: onsubmit="return false;". И сколько бы Вы не щелкали ничего не изменится (разве что Вы JavaScript отключите).
Обычно же обработчик onsubmit используется для верификации формы (то есть проверки на заполнение всех необходимых полей, правильность их заполнения, скажем, проверка по определенному шаблону и т. п.), для этого создается функция, которая выполняет все действия. Функция должна содержать операторы "return true" и "return false", которые позволяют, заменить функцию на true или false, соответственно, в зависимости от результатов проверки (если успешно, то true, если нет false). Но верификация данных это обширная тема, которая не может быть рассмотрена здесь. Один из примеров базовой верификации я привел, когда объяснял событие blur - подобную функцию можно использовать и здесь. Тогда <form> будет содержать атрибут: onsubmit="return function();".
Но не забывайте, что нельзя ограничиваться одной лишь проверкой языком JavaScript, ибо его поддержка может быть отключена у посетителя, и тогда все Ваши труды по защите...
е). onmousedown и onmouseup
Еще одна пара событий не нашла достойного места на странице, но я ее реализовал в виде кнопки "Button". Причем это не обычная html-кнопка, она реализована в виде двух картинок. Исходная кнопка хранится в файле с именем npressed.jpg, а нажатая - pressed.jpg. Чтобы достичь эффекта нажатия кнопки нам необходимо, чтобы при при щелчке на ней(this) значение атрибута src (путь к картинке) тега <img> менялось на pressed.jpg, а при отпускании обратно на npressed.jpg. Нажатие кнопки обрабатывает onmousedown, а отпускание - onmouseup, то есть здесь все просто:
ж). onload, onunload и onabort
Обработчик события onload активируется, когда начинает загружаться графическая часть страницы (все тексты, графика и т.п.). onload является атрибутом тега <body>. Если честно я не вижу сколько бы реального применения этому событию, зато я нашел, что можно сделать с onunload. onunload это тоже атрибут тега <body>. Событие unload происходит когда мы пытаемся покинуть данную страницу (переходим по ссылке на другую, закрываем окно браузера, обновляем страницу и т. д.). Откройте еще раз окошко справки. Допустим, что пользователь прочитал справку, и хочет отправить форму, или уйдет с нашего сайта, но при этом он забыл закрыть это маленькое окошко с подсказкой, мы на выходе закроем его сами. А для этого тег <body> (у начального документа) у нас будет выглядеть следующим образом:
Вы должны бы помнить, что helpWindow это имя нашего окна (ведь именно этой переменной мы присваивали его открытие: helpWindow = window.open("help.html", "", "toolbar=0,width=300,height=200")), а метод close() закрывает это окно. Некоторые нехорошие люди используют это событие, чтобы когда посетители уходили с его страницы, появлялись какие-либо окна, так называемые pop-up.
onabort - атрибут тега <img>. Когда пользователь отменяет загрузку изображения происходит событие abort. Но отмена загрузки изображения может не входить в наши плане. И в качестве предупреждения у нас может быть написано нечто похожее на
ЗАКЛЮЧЕНИЕ
Есть некоторые события о которых я здесь нарочно не упомянул, потому что не нашел им достойного применения, но Вам они возможно пригодятся, поэтому я уделю им немного внимания.
onchange - обработчик события, который активируется, когда Вы изменяете содержимое текстового элемента или текстовой области (<TEXTAREA>) (например, когда Вы вводите или удаляете очередную букву какого-либо текстового поля).
onselect - обработчик события выбора текста. То есть это событие происходит, когда пользователь пытается выделить текст в текстовом элементе или текстовой области.
onerror - обработчик события error, которое возникает при ошибке загрузки документа или изображения (то есть onerror это атрибут тегов <body> и <img>). Оно возникает при синтаксической ошибке JavaScript-кода (но Вы ведь не будете специально делать в нем ошибки), либо ошибкой времени выполнения (например, если Ваш скрипт выполняет какие-либо вычисления и у Вас по ошибке получится так, что некое число будет делиться на ноль, а это недопустимо - это и есть одна из ошибок времени выполнения).
Так же не забывайте, что я привел лишь по одному примеру из десятков возможных на каждое событие. Здесь главное Ваша фантазия и навыки. Например, события mouseout, mouseover, mouseup, mousedown часто используются для создания выпадающих меню и других визуальных эффектов, но это весьма трудный материал, который требует более глубоких знаний, причем не одного JavaScript.
Поисковая оптимизация – одна из важнейших составляющих в продвижении сайта. И если вы вебмастер или блоггер, то вам в первую очередь нужно понимать основы SEO. Ниже приведены 10 простых правил по оптимизации, которые помогут вам подготовить ваш сайт к продвижению.
Правило 1: Не пытайтесь обмануть системы.
Если вы войдете в комнату, где будут одни ученые с докторскими степенями, думаете, вы сможете обмануть их? Нет. Так и Google имеет тысячи таких комнат с учеными, поэтому будьте уверены, что их обмануть вам не удастся. Избегайте любых советов, которые рассказывают, что вы сможете попасть в top5 за пару дней, при этом иметь великолепный сайт и уникальный контент.
Правило 2: Используйте ключевые слова.
Выберите несколько ключевых слов или фраз для вашего сайта. Используйте их, и слова связанные с ними в своих текстах, статьях. Повторять их постоянно – плохая идея (см. Правило 1).
Правило 3: Его величество «Контент».
Пользователей интересует содержание сайта, а не дизайнерские фишки. Если содержание сайта не уникально и не привлекает пользователей – не ждите их вообще.
Каждая страница вашего сайта должна строиться по схеме перевернутой пирамиды: начинаться с релевантного[1] заголовка H1, который обязательно содержит одно из ключевых слов; и первый абзац текста как краткое описание всей страницы.
Правило 4: Чистый код – правильный код.
Код вашего сайта должен быть читабелен для поисковых систем также как и для пользователей. Выделите основные блоки сайта: навигационное меню, заголовок, текст и т.д. Старайтесь использовать описательные названия классов и идентификаторов для тегов. Для списков используйте тег UL, для текста тег P, H1-H6 для заголовков, и STRONG для жирного текста (для ключевых слов и фраз). И конечно же, используйте верстку на DIV.
Правило 5: Самая важная страница – главная страница.
Как правило, в первую очередь нам необходимо, чтобы поисковые системы увидели главную страницу сайта. Поэтому ее содержание должно быть как можно более содержательным. Заголовки, текст и ссылки должны содержать самые важные ключевые слова, по которым пользователь обязательно будет ее искать.
Правило 6: Ссылки имеют значение.
Поисковые системы обращают особое внимание на ссылки и анкоры[2] ссылок. Старайтесь избегать таких ссылок как «Смотри здесь» или «Далее…». Лучше делать их неиндексируемыми. Анкор ссылки должен быть содержательным, т.е. краткий заголовок страницы на которую она ведет. Например: “Примеры и уроки для вебмастеров” или “Как сделать многоуровневое горизонтальное меню”. Не забывайте и об околоссылочном тексте.
Чем более релевантна ссылка, тем быстрее поисковая система найдет страницу с этой ссылкой. Не злоупотребляйте внешними ссылками[3], которые уведут пользователя на другой сайт. Если ваша страница ориентирована на дизайнерский минимализм, то ссылка на «Минимализм в дизайне» будет иметь место, а вот ссылка с картинки с кошкой будет бесполезной.
Правило 7: Заголовок заголовку рознь.
Каждая страница вашего сайта должна иметь свой уникальный заголовок – Title и краткое описание - Description. Достаточно всего 60 символов, но их значение будет огромным. Помните, что заголовок страницы – это то, что пользователь увидит в ответ на его поисковый запрос, поэтому по заголовку он должен понять найдет он ответ на вашей странице или нет.
Также не забывайте приписывать атрибут title у ссылок:
И атрибут Alt у изображений. Он также должен максимально кратко описывать то, что изображено на картинке:
Казалось бы мелочи, но для SEO это еще один важный способ оптимизации.
Правило 8: Лишним тегам – нет.
Давным-давно теги meta были секретом для SEO, но те дни прошли. Наиболее важным для поисковых систем и пользователей является тег description. Поисковые системы могут использовать его как подпись к ссылкам в результатах поиска. Поэтому убедитесь что вы дали грамотное описание каждой странице.
Правило 9: Карта сайта – лучший путеводитель.
Обязательно сделайте на вашем сайте карту сайта, которая будет содержать ссылки на все страницы сайта. Вы можете создать sitemap для Google с помощью генереаторов, например www.xml-sitemaps.com.
Правило 10: Дизайн – для людей.
Поисковые системы организованы так, чтобы пользователю было сразу понятно, что данный сайт - поисковик. Это значит, что и ваш сайт должен иметь дизайн, который будет говорить сам за себя, сразу давая понять какова тематика сайта. Поэтому чтобы сайт было легко найти, и он привлекал пользователей – сделайте его дизайн по максимуму приближенным к тематике сайта. Задача дизайнера – скорее решить проблему юзабилити, нежели нарисовать еще один шаблон для портфолио.
Все началось до банального просто - любимый директор сказал "Хочу!". Аргументация была следующей:
* Переводится много бумаги для печати и отправки по факсу (клиентов много, потому отправленные счета сразу выбрасываются: найти нужный документ даже через день - нереально)
* Электронная почта "есть в наши дни у всех и каждого" (то, что сам директор ею не пользуется - другой вопрос :-) )
* Тратится меньше времени персонала (не нужно сидеть и ждать перед факсом, стартовать, "прошло"/"не прошло", ...)
* Легче вести учет когда и что было отправлено.
Сначала ставился вопрос отправки документов вообще - что может быть проще? Сохранить таблицу как файл MS-Excel, вызвать внешнюю программу отправки с параметрами - и все. Потом возникли сомнения:
* А вот клиенты отредактируют файл - и будут доказывать что мы такой и отправили,
* В файле передается рисунок печати - они его смогут использовать с какой-нибудь темной целью.
Сразу же было предложено отправить как рисунок, благо я знал, что это можно сделать, но как - еще не представлял. Согласие получено, и вот начались поиски соответствующих программ...
Подбор нужного инструментария
Некоторое время я стараюсь использовать бесплатные программы, а не ломать те, за которые нужно платить деньги. Так что одним из условий (не главным, но в результате выполненным почти на 100%) была бесплатность инструментария.
Понятно, что для получения рисунка на выходе нужен виртуальный принтер, на который можно печатать любой документ. Выходным форматом был выбран tiff как достаточно распространенный, предполагая что его можно будет конвертировать в любой формат, если возникнет необходимость. Были испробованы многие принтеры, встреченные в просторах Internet`а, как бесплатные, так и нет. Большинство из них умеют печатать кроме искомого tiff еще и pdf документы, но не один не удовлетворял условиям передачи в них внешних параметров (важно было указать место сохранения и возможно имя файла для уменьшения коллизий, поскольку работа происходит на сервере терминалов). В конечном итоге выбор пал на AFPL Ghostscript 8.14 for Win32 и драйвер переадресации порта принтера RedMon.
Ghost Script умеет конвертировать данные из ps, eps, pdf в разные форматы (те же ps, eps, pdf, языки принтеров вроде PCL6 от HP, и рисунки). Получать данные он может как из файла, так и из входящего потока (stdin для посвященных). RedMon умеет данные, полученные от драйвера принтера, передавать как входной поток выбранной программе. Кроме того устанавливает несколько системных переменных, одну из которых (%REDMON_USER% - имя пользователя, печатающего документ) мы будем использовать.
Итак - используемый режим связки: установка PS принтера в системе, указание ему виртуального порта RedMon, пересылка исходящего PS потока от принтера на Ghost Script, формирование tif по указанным настройкам.
Настройки для режима работы Ghost Script хранятся в файле одном для всех, потому в схему добавим еще одно звено: RedMon передает данные не Ghost Script, а скрипту WSH, а уже он откорректировав настройки под пользователя, передает дальше поток для Ghost Script. Потому еще одна программа, которая нам нужна: Windows Script 5.6 for Windows. Нужна именно версия 5.6, поскольку во встроенной в Windows 2000 версии 5.1 отсутствует необходимый метод Exec().
Еще возможно нам понадобится компонент для вывода рисунков с прозрачным фоном. Пока приходится использовать Active_BMP, упоминаемый на безвременно почившем hare.ru. Этот компонент умеет отображать прозрачными только 2-х цветные bmp (по крайней мере только с ними у меня получилось добиться прозрачности), но за неимением лучшего... :-) (Если кто знает бесплатный ActiveX компонент для отображения gif с прозрачным слоем - скажите в форум или мыло)
Собственно для отправки почты из командной строки я уже полгода пользуюсь Postie, потому искать ничего нового не пришлось.
Приступим (установка и регистрация программ)
Установка WSH проблем не вызывает (конечно, если вы не попытаетесь установить версию для 9X/NT4 на 2000/XP, как я это сделал, причем осознал это только взявшись за статью - уже месяц сервер живет в этом режиме :-) ): запуск scripten.exe (scr56en.exe), ответы на все вопросы, перезагрузка.
Установка Ghost Script не требует даже перезагрузки. Единственный момент - от пытается по умолчанию установится в каталог %SystemDrive%\gs - я его устанавливал в %SystemDrive%\Tools\gs - так мне удобнее. (ниже в скобках я буду писать свои настройки, с которыми у меня работает живая система).
Для установки RedMon нужно его распаковать в некий каталог (%SystemDrive%\Tools\RedMon) и запустить setup.exe из него. В файлах readme.txt и redmon.hlp находится подробная информация по установке и стандартной настройке redmon.
Регистрация Active_BMP осуществляется распаковкой файлов в каталог (%SystemDrive%\Tools\OLE\ActiveBMP) и запуском из этого каталога "regsvr32 Bmp_1c.ocx".
В дальнейшем каталоги с RedMon и Active_BMP нам не понадобятся, так что про них смело можно забыть (но не удалять совсем с диска :-) ).
Postie устанавливается простым извлечение его в нужный каталог (%SystemDrive%\Tools\Postie).
Теперь нам необходимо настроить принтер. Для этого из папки принтеры выбираем "Добавить". Тип принтера - локальный, отказываемся от автоматического поиска и добавляем порт: тип порта: Redirect Port, имя: RPT1. На следующем шаге выбираем модель PS-принтера (в RedMon рекомендуется Apple LaserWriter II NT или Apple Color LaserWriter 12/600 если вы хотите цветное изображение). Я использовал Apple LaserWriter II NT, т.к. мне нужно было черно-белое изображение. Сразу после этого я переименовал принтер в более соответствующее его функциям название: "Send EMail". Теперь нам необходимо настроить порт. Для этого открываем настройки принтера, ищем страницу "Порты" и жмем кнопку "Конфигурировать порт".
Дальнейшие настройки отличаются от стандартных, описанных в redmon.hlp:
* "Redirect this port to the program:"="cscript.exe" (без кавычек, естественно),
* "Arguments for this programs are:"="Наш\Скрипт\С\Полным\Путем.js" (%SystemDrive%\Tools\gs\PrnUser.js) (в кавычках, если путь содержит пробелы),
* "Output:"="Program handles output"
* "Run:"="Hidden"
* "Run as user" снята (у меня вызывало ошибку, если установлено)
* "Shut down delay:"="300"
Кнопка "Log file" нужна во время отладки всей системы отправки почты, хотя можно оставить запись лога и в рабочем режиме - все равно он перезаписывается, а не накапливается.
Соглашения о настройках
Скрипт, который мы указали в настройках порта, принимает данные с принтера и согласно настройкам, сохраненным из внешней программы (1С или другой), отправляет его по почте как рисунок (в скрипте предусмотрены проверки на корректность значений). Поскольку единственное, что мы можем получить из печатного задания - это имя пользователя (%REDMON_USER%), то с каждым пользователем мы будем работать в его каталоге, при этом одновременная печать 2-х заданий от одного пользователя невозможна. (Если вам удастся передать в скрипт другую информацию из 1С, например: уникальный идентификатор задания или имя файла - сообщите мне). У меня используется самописный компонент SysTools для получения профиля пользователя по его имени. Поскольку он еще только в альфа-версии выкладывать не буду, если кому нужен - вышлю по почте. Итак, предположим, у нас есть каталог, в котором хранятся данные пользователей (%MyProfiles%\User1, %MyProfiles%\User2, ...). К личном каталоге пользователя мы будем создавать подкаталог SendMail для отправки почты.
Временные файлы для работы мы будем хранить во временном каталоге (переменная %TEMP% для системы, поскольку запускаться скрипт будет от имени Local service).
Все остальные настройки и пути к файлам заданы в переменных вначале скрипта - их можно (и нужно) изменить для себя.
Файл, в котором 1С сохраняет настройки называется %UserProfile%\SendMail\mail.ini и имеет следующую структуру: каждая строка - поле=значение, кроме поля BODY, которое обязательно идет последним и может быть растянуто на несколько строк.
Пишем программу
В этом разделе будут показаны и пояснены тексты нескольких модулей, входящих в демонстрационную конфигурацию. Скрипт на языке JavaScript здесь описан не будет, поскольку несоответствует тематике раздела. Надеюсь - комментариев внутри скрипта будет достаточно для пожелавших разобраться в его работе.
Поскольку в 1С не предусмотрена модульная организация программ, то сложные вещи я обычно строю по такой схеме: законченная функциональность - во внешней обработке, параметры в которую передаются через СписокЗначений, и вспомагательная процедура/функция в глобальном модуле, которая этот список заполняет из параметров. Так было сделано и здесь.
Функция запроса параметров отправки почты (кому, от кого, тема и пр.) в глобальном модуле выглядит так:
[pagebreak]
В этой функции переданные параметры записываются в список значений, который передается внешней обработке ПараметрыОтправкиПочты.ert в подкаталоге ExtForms каталога базы данных. Запрос параметров имеет вид:
Возвращенные значения записываются в файл, параметры которого (путь, имя, и т.п.) заданы в конце глобального модуля.
В самой обработке ничего интересного нет: чтение параметров из списка, отображение и проверка параметров при нажатии кнопки Отправить. Если не заданы необходимые параметры (ОтКого, Кому) или адреса E-Mail указаны не правильно - будет выдано сообщение и форма не закроется.
Рассмотрим параметры вызова даной функции:
* Заголовок - заголовок формы, на рисунке - синяя надпись "Тестовый документ №3 от 30.04.04";
* Кому, ОтКого, Копия - E-mail или список E-Mail`ов (через ",");
* Тема, Сообщение - соответствующие параметры письма;
* Запретить - какие поля запрещены для редактирования (на рисунке - поле Тема);
* БезФормы - если 1: форма не отображается и при правильных параметрах письмо отправится автоматически.
Следующая функция вызывает эту и если все прошло успешно - вызывает внешнюю обработку для небольшой предподготовки таблицы при печати и отправки ее:
Здесь уже большая функциональность перенесена на обработку. Она (обработка) вообще не открывается, только выполняет некоторые действия. Рассмортим параметры:
* Таб - Значение типа "Таблица", которую и будем печатать;
* Заголовок, Кому, ОтКого, Копия, Тема, Сообщение, Запретить, БезФормы - просто передаются в функцию глПараметрыОтправкиПочты и подробно рассмотрены в ней;
* Масштаб - масштаб печати таблицы. Если не задан - автомасштаб по ширине.
В обработке всего 2 процедуры: ПроверитьПараметр для проверки корректности переданных значений и ПриОткрытии, в которой подготавливается и печатается таблица. Выглядит весь модуль обработки так:
Код: (1c)
Вот практически и все, что касается программы в 1С. Некоторые сервисные функции, которые не были описаны здесь, можно посмотреть в примере конфигурации. Таким образом ничего сложного здесь нет. Больше сложностей вызывает настройка системы для правильной работы. Выглядит отправленный документ приблизительно так:
Замечания в процессе эксплуатации
Сразу скажу - в боевом режиме система работает недолго (с 15.04.2004), но даже за это время были замечены некоторые "особенности" работы:
* Формат tiff оказался не таким уж стандартным. Потому пришлось его заменить на png. Сделать это нужно в двух местах: в суффиксе исходящего файла в скрипте (чтобы Postie правильно поставил его Content-Type:) и в настройках GS (параметр -sDEVICE=pngmono собственно и задает выходной формат файла). Можно заменить и на еще более стандартный jpeg, но при этом сильно вырастет размер файла. К сожалению gif уже не поддерживается в текущей версии GS (как я понял из документации - из-за возможных проблем с лицензированием этого формата). Можно добится поддержки gif, выдрав ее из исходников предыдущих версий и перекомпилировав текущую, но я пока этого не делал. Возникла мысль передавать в настроечном файле (%UserProfile%\SendMail\mail.ini) параметры, как отправлять изображения (jpeg, tif, png; color/mono; ...) и в скрипте динамически менять.
* PostScript шрифты, идущие в поставке GS, не так хорошо "вылизаны", как TrueType. Потому русские буквы выглядят жирнее англиских. Пока жалоб на это не было :-)
* В новой версии Postie у меня почему-то не работает ключ -bcc (ошибки не выдает, но и не отправляет по указанным адресам). Так и не разобрался - пришлось откатится на старую версию (POSTIE Version 4)
* Хотя ломать ничего и не пришлось, но все-таки мы нарушаем лицензию Postie, который "free for personal use". Может кто знает другую программу отправки почты из коммандной строки?
Благодарности
Моему любимому директору - за неуемный ум и новые интересные задания.
Вадиму Ханасюку - за неопубликованную здесь, но полезную компоненту SysInfo (получение каталога профиля пользователя по имени) и помощь в поиске нужного софта.
Всем сотрудникам, которые не мешали работать.
Для программирования расширенных хранимых процедур Microsoft предоставляет ODS (Open Data Service) API набор макросов и функций, используемых для построения серверных приложений позволяющих расширить функциональность MS SQL Server 2000.
Расширенные хранимые процедуры - это обычные функции написанные на С/C++ с применением ODS API и WIN32 API, оформленные в виде библиотеки динамической компоновки (dll) и призванные, как я уже говорил, расширять функциональность SQL сервера. ODS API предоставляет разработчику богатый набор функций позволяющих передавать данные клиенту, полученные от любых внешних источников данных (data source) в виде обычных наборов записей (record set). Так же, extended stored procedure может возвращать значения через переданный ей параметр (OUTPUT parametr).
Как работают расширенные хранимые процедуры.
* Когда клиентское приложение вызывает расширенную хранимую процедуру, запрос передаётся в TDS формате через сетевую библиотеку Net-Libraries и Open Data Service ядру MS SQL SERVER.
* SQL Sever находит dll библиотеку ассоциированную с именем расширенной хранимой процедуры и загружает её в свой контекст, если она не была загружена туда ранее, и вызывает расширенную хранимую процедуру, реализованную как функцию внутри dll.
* Расширенная хранимая процедура выполняет на сервере необходимые ей действия и передаёт набор результатов клиентскому приложению, используя сервис предоставляемый ODS API.
Особенности расширенных хранимых процедур.
* Расширенные хранимые процедуры - это функции выполняющиеся в адресном пространстве MS SQL Server и в контексте безопасности учётной записи под которой запущена служба MS SQL Server;
* После того, как dll библиотека с расширенными хранимыми процедурами была загружена в память, она остаётся там до тех пор, пока SQL Server не будет остановлен, или пока администратор не выгрузит её принудительно, используя команду :
DBCC DLL_name (FREE).
* Расширенная хранимая процедура запускается на выполнение так же, как и обычная хранимая процедура:
EXECUTE xp_extendedProcName @param1, @param2 OUTPUT
@param1 входной параметр
@param2 входной/выходной параметр
Внимание!
Так как расширенные хранимые процедуры выполняются в адресном пространстве процесса службы MS SQL Server, любые критические ошибки, возникающие в их работе, могут вывести из строя ядро сервера, поэтому рекомендуется тщательно протестировать Вашу DLL перед установкой на рабочий сервер.
Создание расширенных хранимых процедур.
Расширенная хранимая процедура эта функция имеющая следующий прототип:
Параметр pSrvProc указатель на SRVPROC структуру, которая является описателем (handle) каждого конкретного клиентского подключения. Поля этой структуры недокументированны и содеражат информацию, которую библиотека ODS использует для управления коммуникацией и данными между серверным приложением (Open Data Services server application) и клиентом. В любом случае, Вам не потребуется обращаться к этой структуре и тем более нельзя модифицоравать её. Этот параметр требуется указывать при вызове любой функции ODS API, поэтому в дальнейшем я небуду останавливаться на его описании.
Использование префикса xp_ необязательно, однако существует соглашение начинать имя расширенной хранимой процедуры именно так, чтобы подчеркнуть отличие от обычной хранимой процедуры, имена которых, как Вы знаете, принято начинать с префикса sp_.
Так же следует помнить, что имена расширенных хранимых процедур чувствительны к регистру. Не забывайте об этом, когда будете вызвать расширенную хранимую процедуру, иначе вместо ожидаемого результата, Вы получите сообщение об ошибке.
Если Вам необходимо написать код инициализации/деинициализации dll, используйте для этого стандартную функцию DllMain(). Если у Вас нет такой необходимости, и вы не хотите писать DLLMain(), то компилятор соберёт свою версию функции DLLMain(), которая ничего не делает, а просто возвращает TRUE. Все функции, вызываемые из dll (т.е. расширенные хранимые процедуры) должны быть объявлены, как экспортируемые. Если Вы пишете на MS Visual C++ используйте директиву __declspec(dllexport). Если Ваш компилятор не поддерживает эту директиву, опишите экспортируемую функцию в секции EXPORTS в DEF файле.
Итак, для создания проекта, нам понадобятся следующие файлы:
* Srv.h заголовочный файл, содержит описание функций и макросов ODS API;
* Opends60.lib файл импорта библиотеки Opends60.dll, которая и реализует весь сервис предоставляемый ODS API.
Microsoft настоятельно рекомендует, чтобы все DLL библиотеки реализующие расширенные хранимые процедуры экспортировали функцию:
Когда MS SQL Server загружает DLL c extended stored procedure, он первым делом вызывает эту функцию, чтобы получить информацию о версии используемой библиотеки.
Для написания своей первой extended stored procedure, Вам понадобится установить на свой компьютер:
- MS SQL Server 2000 любой редакции (у меня стоит Personal Edition). В процесе инсталляции обязательно выберите опцию source sample
- MS Visual C++ (я использовал версию 7.0 ), но точно знаю подойдёт и 6.0
Установка SQL Server -a нужна для тестирования и отладки Вашей DLL. Возможна и отладка по сети, но я этого никогда не делал, и поэтому установил всё на свой локальный диск. В поставку Microsoft Visual C++ 7.0 редакции Interprise Edition входит мастер Extended Stored Procedure DLL Wizard. В принципе, ничего сверх естественного он не делает, а только генерирует заготовку шаблон расширенной хранимой процедуры. Если Вам нравятся мастера, можете использовать его. Я же предпочитаю делать всё ручками, и поэтому не буду рассматривать этот случай.
Теперь к делу:
- Запустите Visual C++ и создайте новый проект - Win32 Dynamic Link Library.
- Включите в проект заголовочный файл - #include <srv.h>;
- Зайдите в меню Tools => Options и добавьте пути поиска include и library файлов. Если , при установке MS SQL Server, Вы ничего не меняли, то задайте:
- C:Program FilesMicrosoft SQL Server80ToolsDevToolsInclude для заголовочных файлов;
- C:Program FilesMicrosoft SQL Server80ToolsDevToolsLib для библиотечных файлов.
- Укажите имя библиотечного файла opends60.lib в опциях линкера.
На этом подготовительный этап закончен, можно приступать к написанию своей первой extended stored procedure.
Постановка задачи.
Прежде чем приступать к программированию, необходимо чётко представлять с чего начать, какой должен быть конечный результат, и каким способом его добиться. Итак, вот нам техническое задание:
Разработать расширенную хранимую процедуру для MS SQL Server 2000, которая получает полный список пользователей зарегистрированных в домене, и возвращает его клиенту в виде стандартного набора записей (record set). В качестве первого входного параметра функция получает имя сервера содержащего базу данных каталога (Active Directory), т.е имя контролера домена. Если этот параметр равен NULL, тогда необходимо передать клиенту список локальных групп. Второй параметр будет использоваться extended stored procedure для возварата значения результата успешной/неуспешной работы (OUTPUT параметр). Если, расширенная хранимая процедура выполнена успешно, тогда необходимо передать количество записей возвращённых в клиентский record set , если в процессе работы не удалось получить требуемую информацию, значение второго параметра необходимо установить в -1, как признак неуспешного завершения.
.
А вот шаблон расширенной хранимой процедуры, который нам предстоит наполнить содержанием:
Работа с входными параметрами
В этой главе я не хочу рассеивать Ваше внимание на посторонних вещах, а хочу сосредоточить его на работе с переданными в расширенную хранимую процедуру параметрами. Поэтуму мы несколько упростим наше техническое задание и разработаем тольку ту его часть, которая работает с входными параметрами. Но сначал не много теории
Первое действие, которое должна выполнить наша exteneded stored procedure , - получить параметры, которые были переданы ей при вызове. Следуя приведённому выше алгоритму нам необходимо выполнить следующие действия:
- Определить кол-во переданных параметров;
- Убедится, что переданные параметры имеют верный тип данных;
- Убедиться, что указанный OUTPUT параметр имеет достаточную длину, для сохранения в нём значения возвращаемого нашей extended stored procedure.
- Получить переданные параметры;
- Установить значения выходного параметра как результат успешного/неуспешного завершения работы extended stored procedure .
Теперь рассмотрим подробно каждый пункт:
Определение количества переданных в расширенную хранимую процедуру параметров
Для получения количества переданных параметров необходимо использовать функцию:
.
При успешном завершении функция возвращает количество переданных в расширенную хранимую процедуру параметров. Если extended stored procedure была вызвана без параметров - srv_rpcparams ввернёт -1. Параметры могут быть переданы по имени или по позиции (unnamed). В любом случае, нельзя смешивать эти два способа. Попытка передачи в функцию входных параметров по имени и по позиции одновременно - приведёт к возникновению ошибки, и srv_rpcparams вернёт 0 .
[pagebreak]
Определение типа данных и длины переданых параметров
Для получения информации о типе и длине переданных параметров Microsoft рекомендует использовать функцию srv_paramifo. Эта универсальная функция заменяет вызовы srv_paramtype, srv_paramlen, srv_parammaxlen, которые теперь считаются устаревшими. Вот её прототип:
.
.
.
.
.
.
.
.
.
.
pByte - указатель на переменную получающую информацию о типе входного параметра;
pbType задаёт порядковый номер параметра. Номер первого параметра начинается с 1.
pcbMaxLen - указатель на переменную, в которую функция заносит максимальное значение длины параметра. Это значение обусловлено конкретным типом данных переданного параметра, его мы и будем использовать, чтобы убедиться втом, что OUTPUT параметр имеет достаточную длину для сохранения передаваемых данных.
pcbActualLen указатель на реальную длину параметра переданного в расширенную хранимую процедуру при вызове. Если передаваемый параметр имеет нулевую длину, а флаг pfNull устанавлен в FALSE то (* pcbActualLen) ==0.
pbData - указатель на буфер, память для которого должна быть выделена перед вызовом srv_paraminfo. В этом буфере функция размещает полученные от extended stored procedure входные параметры. Размер буфера в байтах равен значению pcbMaxLen. Если этот параметр установлен в NULL, данные в буфер не записываются, но функция корректно возвращает значения *pbType, *pcbMaxLen, *pcbActualLen, *pfNull. Поэтому вызывать srv_paraminfo нужно дважды: сначала с pbData=NULL, потом, выделив необходимый размер памяти под буфер равный pcbActualLen, вызвать srv_paraminfo второй раз, передав в pbData указатель на выделенный блок памяти.
pfNull указатель на NULL-флаг. srv_paraminfo устанавливает его в TRUE, если значение входного параметра равно NULL.
Проверка, является ли второй параметр OUTPUT параметром.
Функция srv_paramstatus() предназначена для определения статуса переданного параметра:
.
.
.
.
.
n - номер параметра переданного в расширенную хранимую процедуру при вызове. Напомню: параметры всегда нумеруются с 1.
Для возврата значения, srv_paramstatus использует нулевой бит. Если он установлен в 1 переданный параметр является OUTPUT параметром, если в 0 обычным параметром, переданным по значению. Если, exteneded stored procedure была вызвана без параметров, функция вернёт -1.
Установка значения выходного параметра.
Выходному параметру, переданному в расширеную хранимую можно передать значение используя функцию srv_paramsetoutput. Эта новая функция заменяет вызов функции srv_paramset, которая теперь считается устаревашай, т.к. не поддерживает новые типы данных введённые в ODS API и данные нулевой длины.
.
.
.
.
.
.
.
.
n - порядковый номер параметра, которому будет присвоено новое значение. Это должен быть OUTPUT параметр.
pbData указатель на буфер с данными, которые будут посланы клиенту для установки значения выходного параметра.
cbLen длина буфера посылаемых данных. Если тип данных переданного OUTPUT параметра определяет данные постоянной длины и не разрешает хранение значения NULL (например SRVBIT или SRVINT1), то функция игнорирует параметр cbLen. Значение cbLen=0 указывает на данные нулевой длины, при этом парметр fNull должен быть установлен в FALSE.
fNull установите этот его в TRUE, если возвращаемому параметру необходимо присвоить значение NULL, при этом значение cbLen должно быть равно 0, иначе функция завершится с ошибкой. Во всех остальных случаях fNull=FALSE.
В случае успешного завершения функция возвращает SUCCEED. Если возвращаемое значение равно FAIL, значит вызов был неудачным. Всё просто и понятно
Теперь мы достаточно знаем, для того чтобы написать свою первую расширенную хранимую процедуру, которая будет возвращать значение через переданный ей параметр.Пусть, по сложившейся традиции, это будет строка Hello world! Отладочну версию примера можно скачать здесь.
. Не рассмотренными остались функции srv_sendmsg и srv_senddone. Функция srv_sendmsg используется для посылки сообщений клиенту. Вот её прототип:
msgtype определяет тип посылаемого клиенту сообщения. Константа SRV_MSG_INFO обозначает информационное сообщение, а SRV_MSG_ERROR сообщение об ошибке;
msgnum номер сообщения;
class - степень тяжести возникшей ошибки. Информационные сообщения имеют значение степени тяжести меньшее или равное 10;
state номер состояния ошибки для текущего сообщения. Этот параметр предоставляет информацию о контексте возникшей ошибки. Допустимые значения лежат в диапазоне от 0 до 127;
rpcname в настоящее время не используется;
rpcnamelen - в настоящее время не используется;
linenum здесь можно указать номер строки исходного кода. По этому значению, в последствие будет легко установить в каком месте возникла ошибка. Если Вы не хотите использовать эту возможность, тогда установите linenum в 0;
message указатель на строку посылаемую клиенту;
msglen определяет длину в байтах строки сообщения. Если это строка заканчивается нулевым символом, то значение этого параметра можно установить равным SRV_NULLTERM.
Возвращаемыме значения:
- в случае успеха SUCCEED
- при неудаче FAIL.
В процессе работы расширенная хранимая процедура должна регулярно сообщать клиентскому приложению свой статус, т.е. посылать сообщения о выполненных действиях. Для этого и предназначена функция srv_senddone:
status - статус флаг. Значение этого параметра можно задавать использую логические операторы AND и OR для комбинирования констант приведённых в таблице:
Status flag Описание
SRV_DONE_FINAL Текущий набор результатов является окончательным;
SRV_DONE_MORE Текущий набор результатов не является окончательным следует ожидать очердную порцию данных;
SRV_DONE_COUNT Параметр count содержит верное значение
SRV_DONE_ERROR Используется для уведомления о возникновении ошибок и немедленном завершении.
into зарезервирован, необходимо установить в 0.
count количество результирующих наборов данных посылаемых клиенту. Если флаг status установлен в SRV_DONE_COUNT, то count должен содержать правильное количество посылаемый клиенту наборв записей.
Возвращаемыме значения:
- в случае успеха SUCCEED
- при неудаче FAIL.
Установка расширенных хранимых процедур на MS SQL Server 2000
1.Скопируйте dll библиотеку с расширенной хранимой процедурой в каталог binn на машине с установленным MS SQL Server. У меня этот путь следующий: C:Program FilesMicrosoft SQL ServerMSSQLBinn;
2.Зарегистрирйте расширенную хранимую процедуру на серверt выполнив следующий скрипт:
Заключение
На этом первая часть моей статьи закончена. Теперь я уверен Вы готовы справиться с нашим техническим заданием на все 100%. В следующей статье Вы узнаете:
- Типы данных определённые в ODS API;
- Особенности отладки расширенных хранимых процдур;
- Как формировать recordset-ы и передавать их клиентскому приложению;
- Чстично мы рассмотрим функции Active Directory Network Manegment API необходимые для получения списка доменных пользователей;
- Создадим готовый проект (реализуем наше техническое задание)
Надеюсь - до скорой встречи!
Волоконная оптика дороже кабелей с медными жилами, но с каждым годом спрос на нее растет. Отчасти это происходит из-за того, что технология монтажа стала намного проще, а стоимость необходимого инструментария постоянно снижается. Без преувеличения можно сказать, что оптическое волокно получило массовое распространение в телекоммуникациях.
Одно из серьезных ограничений в использовании волоконно-оптических кабелей — необходимость особого, аккуратного отношения к их укладке, разделке, соединению и оконцовке, т. е. абсолютно ко всем элементам технического процесса монтажа кабельной линии. Ошибки обходятся весьма дорого — от замены испорченного соединителя до установки соединительной муфты на месте поврежденного кабеля. Тем не менее оптическое волокно активно вытесняет медь не только на магистральных участках сетей связи общего пользования, где почти все новые линии строятся на основе волоконно-оптических линий связи, но даже и на магистральных (вертикальных) участках СКС.
Некоторые особенности работы с волоконно-оптическими кабелями (ВОК) рассматривались в предыдущих номерах, в разделах, посвященных вопросам укладки кабеля. В основном они сводились к набору специальных приемов для захвата кабеля при втягивании в канал, чтобы обеспечить равномерность приложенного тягового усилия, ограничить его максимально допустимым уровнем, а также строго выдержать норму минимального радиуса изгиба. Для успешного выполнения этих задач создан целый набор монтажных приспособлений: кабельные чулки и захваты, электрические и гидравлические тяговые лебедки с электронным управлением и ограничителем усилия, а также защитные устройства, смазка и т. п. «мелочи». Теперь настал черед уделить внимание инструментарию для всех прочих операций.
Основные трудности, которые приходится преодолевать при резке волоконно-оптических кабелей, — броневой покров (стальная лента или стальная проволока) и внутренние силовые элементы (стальной трос). Поскольку оптическое волокно чувствительно к осевым и радиальным деформациям, то волоконно-оптические кабели имеют их в большем количестве, чем медножильные. Это касается не только кабелей для внешней прокладки, но и тех, что предназначены для укладки в зданиях. Правда, последние не всегда содержат силовой элемент из стали. Бронирование, если таковое имеется, осуществляется тонкой стальной или алюминиевой гофрированной фольгой. А так называемые мини-кабели, которые используются для изготовления коммутационных шнуров и выполнения горизонтальных участков СКС, представляют собой одиночное или двойное оптическое волокно в буферном покрытии с одним или двумя защитными слоями полимерной изоляции. Так или иначе, но для большинства волоконно-оптических кабелей недорогие кабелерезы для медных кабелей непригодны. Для них требуется более дорогой инструмент, лезвия которого рассчитаны на резку стали. Впрочем, такой же инструмент необходим и для резки бронированных медножильных.
Первые этапы разделки волоконно-оптических кабелей (удаление верхнего слоя защитных и броневых покровов) выполняются теми же инструментами, что и разделка медножильных кабелей. Никаких особенностей здесь нет — полимерная изоляция и фольга вскрываются резаками, а стальная проволока выкусывается бокорезами. Однако без применения нескольких специальных инструментов не обойтись. Во-первых, это ножницы с керамическими лезвиями или кусачки для удаления нитей из кевлара, которые часто применяются для упрочнения кабеля. Обычные ножницы эти тонкие, гибкие и прочные волокна не режут, а выдавливают или гнут. Во-вторых, это приспособление для снятия полимерной изоляции с мини-кабелей. При выполнении работы не универсальным, а специализированным инструментом риск повреждения оптического волокна существенно снижается, так как его рабочие поверхности имеют фиксированную настройку.
Стоит отметить, что важно хорошо знать конструкцию разделываемого кабеля, так как последний слой защитного покрытия кабеля или изоляцию модулей (групповых элементов, содержащих несколько волокон) нужно удалять с особенной аккуратностью. После удаления всех защитных слоев открывается доступ к одиночным оптическим волокнам в буферном покрытии. На этом сходство заканчивается, и далее работать с волоконно-оптическими кабелями можно только специальным инструментом.
Разделка кабеля может выполняться для оконцовки (монтажа разъемных соединителей) или сращивания (сварки или монтажа неразъемных соединителей).
Разъемные соединители монтируются на мини-кабели или на оптическое волокно в буферном покрытии; для оптического волокна их существует великое множество (ST, SC, SMA, FC, LC, FJ, MT и др.). Некоторые из них выпускаются еще и в нескольких разновидностях, предназначенных для оконцовки различного оптического волокна (многомодового, одномодового, разного диаметра, с различной толщиной оболочки) и отличающихся некоторыми деталями конструкции и технологии монтажа. Такое разнообразие не слишком осложняет работу монтажников. Грамотная техническая политика позволяет резко уменьшить число разновидностей кабелей и соединителей для волоконно-оптических линий связи. Иногда ограничения вытекают из особенностей применяемого оборудования, иногда — оформляются в виде внутреннего стандарта организации. Подобные ограничения и правила просто необходимы, если помнить, что существенная часть достаточно дорогого инструмента и приспособлений предназначена только для оптического волокна или соединителей определенного вида. А в силу высочайших требований к точности обработки и монтажа использование непредусмотренного технологией инструментария почти всегда заканчивается браком в работе. В значительной степени результат зависит и от качества расходных материалов: клеев, растворителей, безворсовых салфеток, шлифовальной и полировальной бумаги.
Итак, после разделки кабеля по шаблону до оптического волокна в буферном покрытии наступает наиболее ответственный момент. С помощью особого инструмента, рассчитанного на оптическое волокно определенного размера, с него удаляют буферное покрытие. Основная проблема — не повредить при этом само волокно, так как при небольшом задире или сколе всю работу придется выполнять еще раз. Поскольку внешне инструменты для этой операции выглядят абсолютно одинаково, производители используют для их маркировки различные цвета.
Затем производится сборка соединителя. Оптическое волокно продевается сквозь отверстие наконечника соединителя и фиксируется с помощью различных видов клея: термоклея (становится пластичным при нагреве), эпоксидного компаунда (полимеризуется благодаря реакции между двумя смешанными компонентами), универсального клея (твердеет после испарения растворителя) или клея с отвердением под воздействием ультрафиолета. Отверстие заполняется клеем с помощью шприца (исключение составляет термоклей, который наносится в процессе производства разъемов). Однокомпонентный клей поставляется уже расфасованным в шприцы, а двухкомпонентный — в отдельной таре. Полученная сборка нагревается в печке (для ускорения процесса отвердения эпоксидного компаунда или разогрева термоклея) или облучается ультрафиолетом.
После склеивания излишки оптического волокна удаляются, а торец сердечника шлифуется и полируется. Для удаления излишков на поверхности волокна резаком (скрайбером) наносится царапина. Резаки могут иметь различный профиль: лезвие (металл, карбид или керамика) либо конус (алмаз или корунд). После нанесения риски волокно отламывается.
Дальнейшая обработка торца выполняется на мате или стекле на нескольких листах наждачной бумаги с убывающим размером абразивного элемента (шлифовальная, полировальная, доводочная). Для фиксации сердечника строго перпендикулярно к поверхности наждака применяется оправка, в которую устанавливается обрабатываемый соединитель. При больших объемах эта операция может быть автоматизирована за счет использования шлифовальной машины.
Качество обработки проверяется с помощью микроскопа. Выпускаемые модели контрольных микроскопов отличаются степенью увеличения и конструкцией. Особенно удобен защитный фильтр для глаз — для блокирования излучения на случай, если оно окажется в подключенном волокне.
Все инструменты для работы с волоконно-оптическими кабелями можно приобрести по отдельности, но чаще всего они поставляются в специально составленных комплектах, куда входит не только инструмент, но и вся необходимая для проведения работ тара, дозаторы, распределители, расходные материалы и защитные средства. Для удобства хранения все это упаковано в органайзер (сумку или чемодан). Восполнение расходных материалов также осуществляется подобранными комплектами.
В зависимости от поставленных задач предлагается как скромный набор минимально необходимых для обработки одного типа оптического волокна средств, так и полный набор для работы с любым оптическим волокном. А вот комплектов, универсальных с точки зрения обрабатываемых разъемных соединителей, очень мало. Объясняется это просто — часть инструмента для их монтажа поставляется только производителями самих соединителей.
Несколько слов тем, кому придется выполнять работы с волоконно-оптическими кабелями на улице. Для защиты от пыли и осадков, а также создания необходимого микроклимата используются теплоизолированные палатки и боксы. Первые легко переносятся и собираются в любом месте; вторые устанавливаются на шасси автомобиля и прицепа.
Говорить о важности сетевых технологий на страницах сетевого издания немного странно, однако мы считаем, что даже среди сетевой публики, многие с трудом знакомы с важностью, особенно в современных условиях, объединения компьютеров в сеть. Статья повествует о важнейших элементах локальной сети, настройки под Windows XP и о наиболее часто задаваемых вопросах, связанных с построением, конфигурированием и администрированием локальных сетей.
Итак, напомним, что сети бывают локальные и глобальные. Локальные сети объединяют некоторое количество компьютеров в пределах одного или нескольких зданий. Такие сети иногда называют интранет. Глобальные сети подразумевают соединение различных локальных сетей в одну общую сеть, называемую Интернет.
Существует мнение, что если ты хоть раз поработал в составе сети, то работа без подключения к сети становиться болезненно тяжело. Да действительно, так, например наши компьютеры объединены в локальную сеть, подключенную с Интернет. Стоит произойти какой-нибудь неприятности с Интернетом, как работать становиться значительно тяжелее. Казалось бы, почему? Ведь по большому счету в сети мы видим просто чужие диски, иногда пользуемся вычислительными ресурсами удаленного процессора. Почему бы ни воспользоваться собственными дисками и мощностью собственного процессора. Все дело в информации. Ведь сегодня сеть это огромная база знаний, созданная усилиями каждого имеющего желание поделиться с другими своими знаниями и умениями. С одной стороны, это превращает сеть в некую «помойку» где из огромного объема информации приходится извлекать полезную информацию, с другой стороны нет ни одного другого электронного или любого off-line источника, способного дать ответ на абсолютно любой вопрос.
Сеть – развращает!
После длительной работы в сети иногда пользователь частично теряет возможность решать многие, простые вопросы обычными средствами. Так, например, поиск какой-либо информации без сети становиться просто невозможной. Единственным, доступным и действенным средством общения является e-mail или Интернет-пейджеры. С одной стороны «жители» сети являются достаточно сильными людьми, однако это касается только сети. В реальной ситуации, «сетевой житель» может быть достаточно слабым и беззащитным существом. Именно поэтому потеря доступа в сеть хотя бы на несколько дней, является достаточно тяжелой потерей для таких людей.
О чем эта статья?
Без сомнения, с точки зрения организации сети Windows XP самая простая операционная система от Microsoft. Точнее сказать, эта операционная система позволяет быстро и эффективно создавать небольшие сети для дома или небольшого офиса.
В этой статье мы расскажем о трех главных составляющих небольшой сети: совместное подключение к Интернет, совместное использование принтера, файлов и каталогов. В первую очередь мы нацеливаем эту статью на людей, только начинающих вникать во все тонкости «жизни» компьютера в сети. Однако и подготовленные пользователи смогут найти для себя не мало интересного.
Несмотря на наличие русской версии Windows XP, мы решили, что все примеры, приведенные в статье, будут для англоязычной версии Windows XP. Это значительно упростит создание сети для неопытных пользователей, использующих англоязычную версию.
Немного истории
Для того, что бы лучше понять превосходство сетевых решений в Windows XP давайте совершим краткий экскурс в историю развития операционных систем Windows. Для некоторых из Вас это отступление может быть раздражающим, однако нам было даже приятно вспомнить, чему мы радовались еще несколько лет назад. Давайте начнем с Windows 3.1.
Операционная система Windows 3.1 имела очень ограниченный инструментарий для организации даже самой простой сети и требовала использование программного обеспечения сторонних разработчиков. Возможно для операционной системы, выпущенной 10-12 лет назад, это было нормально. Специально для рабочих групп Microsoft выпустила Windows 3.11 for Workgroups, которая имела только протокол совместного использования файлов. Позднее в августе 1995 года была выпущена операционная система Windows 95. Несмотря на свою “глючность”, эта операционная система имела более продвинутые сетевые средства, однако по современным меркам все было очень сложно и недостаточно для требований современного пользователя. Через год была выпущена операционная система Windows NT 4.0, с дополнительными патчами и сервис паками. Windows NT 4.0 использовала интерфейс и принципы Windows 95. Главным отличием являлись наличие расширенных особенностей защиты, лучшие средства многозадачности, администрирование пользователей и больший упор на сетевую организацию для бизнес пользователей. Однако реализация сетевых особенностей оказалась еще сложнее, и недоступной для неподготовленного пользователя.
Через 2-3 года после Windows 95 были выпущены операционные системы Windows 98 и Millennium. Windows 98, за исключением NT, была первой настоящей 32-bit версией Windows с полностью 32-bit кодом. В то время как Windows 98 имела некоторые усовершенствование сетевого инструментария и возможностей, они все еще были похожи на Windows 95. Дополнительно Microsoft выпустила “Special Edition” Windows 98, известную как Windows 98 SE, в которой исправлены ошибки в сетевых протоколах. В феврале 2000 Microsoft выпустила Windows 2000. Эта система основана на ядре Windows NT и поэтому ее иногда называют Windows NT 5.0. Windows 2000 имеет очень продвинутые сетевые возможности, однако их реализация пока не проста, и напоминает Windows NT.
И наконец, сегодня мы стали свидетелями выпуска и развития операционной системы Windows XP. Обе версии (Professional и Home) являются очень красивым сочетанием сетевых возможностей NT, 2000 и простого и понятного пользовательского интерфейса.
Теперь, когда мы вспомнили, как развивались сетевые возможности операционной системы Windows, давайте переходить к нашей главной теме.
Физическая установка сети
Для упрощения, предположим, что мы используем в сети три компьютера – два “клиентских компьютера” и один «сервера». Для организации, даже такой маленькой сети нам понадобятся сетевые карты, которые устанавливаются в каждый компьютер, свич или хаб, а так же специальный сетевой кабель, называемый витая пара.
Выбор сетевой карты
В прошлом сетевая карта представляла собой отдельную ISA (для тех, кто не знает это такой старый стандарт слота расширения) или PCI плату. Причем их цена превышала 100$, что несколько ограничивало развития сетей в небольших организациях. Сегодня сетевая карта стала настолько доступной, что частенько ее интегрируют на системную плату. В случае, если Ваша плата не имеет интегрированного сетевого контроллера, то Вам придется воспользоваться внешней PCI платой. Карта должна соответствовать стандарту Realtek 10/100. Она стоит около 10$. Более дорогие карточки имеют множество дополнительных функций, обеспечивающих большую стабильность при передаче данных. Ниже на фотографии показан внешний вид типичной сетевой карты.
При выборе сетевой карты, необходимо обратить внимание на максимальную поддерживаемую скорость передачи 10/100. Это означает, что карта может передавать данные на скорости 10mbps и 100mbps в зависимости от сетевой архитектуры. Дополнительно необходимо, что бы карточка имела разъем RJ-45 (современный стандарт CAT5), поддерживающий скорость передачи 100mbps и обратно совместимый с 10mbps стандартом (именно такой разъем показан на фотографии). Самый последний стандарт “CAT6”, (пока находится в разработке) будет поддерживать скорости от 300mbps до 1gbps. Это означает, что Вы сможете копировать файлы в сети со скоростью 125 мегабайт в секунду. Это быстрее скорости современных жестких дисков. CAT5-E или категория 5 UTP Enhanced так же обратно совместима с 10, 100 и 1000Mbit Ethernet. Использование RJ-45 предпочтительнее, чем RJ-58, или больше известные как BNC. Этот разъем предназначен для подключения на более низких скоростях (ограничена 10mbps) коаксиальным кабелем.
Хаб против свича
Для управления всеми транзакциями (передача блоков информации) в сети используется устройство называемой хаб или свич. В чем отличие между этими двумя устройствами?. Во время передачи пакета данных хаб отправляет их сразу на все компьютеры, что значительно уменьшает пропускную способность канала. Свич, имеет встроенную память, в которой храниться информация о том, к какому порту подключен какой компьютер. Поэтому во время передачи пакета, он отправляется на определенный порт. Кроме того, свич позволяет использовать в сети контроллеры с разной скоростью передачи, при этом общая пропускная способность не будет опускаться до уровня контроллера с минимальной скоростью. Учитывая незначительное ценовое отличие мы настоятельно рекомендуем приобрести именно свич. На сегодняшний день впускаются свичи с 5, 8, 16, 24 или 32 портами. Цена устройства напрямую зависит от количества портов.
802.11a и 802.11b
Говоря об организации сети мы считаем необходимым затронуть вопрос беспроводных сетей, т.е. передающих информацию по радиоканалу. Такие сети становятся все популярнее, т.к. позволяют сделать размещение компьютеров более гибким, а пользователям использующим карманные компьютеры или ноутбуки, получить доступ к сети в любой точке офиса и даже за пределами. На сегодняшний день существует два стандарта 802.11a и 802.11b. Для реализации такого подключения необходимо использовать специальные хабы и сетевые карточки.
Как выбрать свич?
В принципе, любой. Например, мы используем 8-портовый свич от CNET, но другие брэнды, такие как Kingmax, Netgear, Dlink, 3COM так же имеют очень хорошее качество. В общем, в этом вопросе можно довериться компании, которая будет проводить у Вас сеть. Они обычно ставят то, что хорошо работает.
Рекомендации по конфигурированию сервера
Если Ваш сервер не планируется использовать для игр, нет необходимости использовать самый последний процессор Pentium 4 или Athlon XP с большим объемом оперативной памяти и емким жестким диском, а так же с самой последней графической картой GeForce 4. Главное, чего необходимо добиться, это стабильной круглосуточной работой. Так. Как сервер будет использовать Windows XP, он должен быть оснащен минимум 128MB RAM.
В идеале, Вы можете использовать процессор Pentium 2, III или Athlon 500MHz, при этом система будет достаточно хорошо работать в нашей среде.
Конфигурация сети в Windows XP
Установить сетевые параметры в Windows XP Вы можете несколькими способами. Во-первых, вручную. Этот метода предпочтительнее, т.к. позволяет контролировать все настройки. Во-вторых, для тех, кто ничего не понимает в сетевых терминах Microsoft включила мастер установки сети (Network Setup Wizard). Для запуска мастера, необходимо войти в “My Network Places” и нажать на “set up a home or small office network”. Нажмите Next, на втором экране будут описаны некоторые рекомендации по правильной установке. Фактически здесь Вы найдете полное руководство к действию. Нажимаем Next. Теперь для всех клиентских компьютеров Вы должны выбрать вторую опцию (The computer connects to the Internet through another computer on my network or through a residential gateway) и нажмите Next. На следующем экране Вы можете ввести или изменить имя компьютера. Теперь переходим к следующему окну, где мы сможем изменить название рабочей группе. Следующий экран резюмирует сделанные изменения и применяет их. На следующем экране Вам будет предложено создать диск установки сети. Так как мы делаем меленькую домашнюю сеть этот диск можно не создавать. Просто нажмите «Wizard and then Finish».
Мы просим извинить нас за нескончаемые переходы к следующему экрану, однако по другому описать действия мастера невозможно. В дальнейшем мы будем использовать первый, ручной режим.
[pagebreak]
Мастер сетевой идентификации
Теперь необходимо установить имя Вашего компьютера в рабочей группе, к которой он принадлежит. Для этого нажмите Start -> Settings -> Control Panel -> System -> и выберите закладку Computer Name. Сначала нажмите “Network ID”, что позволит активизировать мастер сетевой идентификации (Network Identification Wizard). На первом экране просто нажмите Next. На следующем экране нужно выбрать первую опцию (This computer is part of a business network, and I use it to connect to other computers at work), на следующем экране выберете вторую опцию (My company uses a network without a domain), Это приведет Вас к экрану показанном ниже...
Здесь Вы должны установить название рабочей группы. Эти действия Вы должны повторить на всех компьютерах Вашей сети.
Обращаем Ваше внимание, что некоторые broadband провайдеры используют свою собственную рабочую группу. В этом случае они должны Вас проинструктировать об использовании имени рабочей группы.
IP адресация
Прежде всего вы должны идентифицировать каждый компьютер в сети. Для этого служит так называемая IP (Internet Protocol) адресация. IP адрес – это уникальный номер Вашего компьютера в Вашей сети. IP адрес может быть “статическим” или “динамическим”. В своей внутренней сети Вы можете использовать IP адреса класса C, т.е. в диапазоне 192.168.0.1 до 192.168.0.254. Другими словами в одной рабочей группе может работать до 254 компьютеров. Обычно серверу назначают адрес 192.168.0.1. Когда Вы активизируете совместный доступ к сети (Internet Connection Sharing) по умолчанию Вашему серверу будет автоматически назначен этот адрес.
Конфигурация сервера
Примечание: Под XP и Windows NT для установки сетевых параметров Вы должны войти с правами администратора. OK – установив на все компьютеры сетевые карты, Вам необходимо назначить каждому компьютеру IP адрес. Для этого нажмите Start -> Settings -> Network Connections. Теперь кликните правой кнопкой мышки на “Local Area Connection” и выберите меню Properties. Затем укажите на протокол TCP/IP и нажмите Properties. Перед Вами откроется окно, позволяющее установить все необходимые сетевые параметры...
На скриншоте выше мы показываем настройку IP адреса для сервера. Пока этого достаточно. Ниже мы покажем, как конфигурировать клиентские компьютеры. Для того, что бы Вы лучше понять, как работает сервер в сети, мы приводим примерную схему подключения компьютеров рабочей группы к Интернет, через один компьютер.
Конфигурирование клиентских машин
Выше на скриншоте мы видим, что одному из клиентских компьютеров установлен IP адрес 192.168.0.5. Маска подсети устанавливается автоматически, по этому поводу Вам волноваться не стоит. Обратите внимание, что IP адрес должен быть уникальным, и не может повторяться внутри одной сети. В случае повторного использования IP адреса, Windows сообщит о возникновении проблемы с повторяющимся IP адресом. Ниже на рисунке, показано, что такое клиентский компьютер и его роль в сети.
Совместное использование Интернет
Как мы сказали в начале статьи, современная сеть должна решать три основные задачи: Совместный доступ к Интернет, совместное использование принтера и совместное использование файлов и папок. В принципе, все три задачи уже, так или иначе, решены в некоторых предыдущих версиях Windows. Однако в Windows XP они решены лучше и проще. Итак, в первую очередь давайте рассмотрим реализацию совместного доступа в Интернет. В нашем примере настройки клиентского компьютера мы устанавливаем обращение к серверу с IP адресом 192.168.0.1. Этот адрес указан как адрес шлюза, т.е. компьютера, через который все остальные будут обращаться в Интернет. Тот же адрес мы указываем в качестве первичного DNS (DNS – это сервис который позволяет по символьному имени узла, определить его физический IP адрес). Теперь, зайдите нажмите OK, что вернет Вас в первоначальное меню свойств сетевого соединения. Здесь откройте закладку Advanced и проверьте опцию Internet Connection Firewall. На клиентских машинах эта опция должна быть отключена.
Включение совместного доступа к Интернет
После завершения настройки всех клиентских машин, Вам необходимо активизировать доступ в Интернет на серверной машине. Для этого нужно войти в меню сетевых соединений (Start -> Settings -> Network Connections), выбрать иконку, через которую подключаетесь к провайдеру (по модему или быстрому каналу). В меню свойств учетной записи необходимо выбрать закладку Advanced, где Вы найдете все опции, необходимые для организации совместного доступа …
В первую очередь обратите внимание на включение Internet Connection Firewall для Internet соединения. Firewall – это система защиты, которая работает как защитный щит между внутренней сетью и внешним миром. Internet Connection Firewall (ICF) – это программный продукт, который используется для установки ограничений передачи информации от и к вашей рабочее группе. Мы рекомендуем разрешить эту опцию. В то время как мощность такого программного «щита» не может сравниваться с подобными аппаратными межсетевыми экранами, это сможет в некоторой степени защитить Ваши данные от различных сетевых неприятностей. Теперь обратите внимание на включении опции “Allow other network users to connect through this computer’s Internet connection”, которая позволит другим пользователям входить в Интернет через сервер. Если Вы хотите управлять различными установками учетных записей Интернет с других, клиентских компьютеров, включите опцию “Allow other network users to control or disable the shared Internet connection”. И последняя опция - “Establish a dial-up connection whenever a computer on my network attempts to access the Internet”. Ее включение позволит серверу в случае получения запроса к Интернет с любого клиентского компьютера автоматически установить соединение. Теперь нажмите OK для применения всех сделанных изменений. В принципе, Windows XP не требует перезагрузки при изменении сетевых настроек, однако мы настоятельно рекомендуем это сделать не только на сервере, но и на всех клиентских компьютерах. Теперь, Вы можете попробовать войти в Интернет с любого компьютера в Вашей сети, причем в случае с Windows XP Вы можете спокойно, без необходимости делать дополнительные настройки, использовать программы, подобные ICQ.
В случае если доступа к сети нет, попробуйте сначала проветрить правильность подключения всех кабелей, и включение концентратора или свича. Если все сделано правильно то при подключении сетевого кабеля к Вашей сетевой карте, на экране в tray области (рядом с часами, появиться сообщение о подключении сетевого кабеля на скорости 100 или 10Mb). В случае если этого не происходит, необходимо проверить включение опции отображения индикатора в сетевых настройках и проверить правильность и целостность кабеля. Далее попробуйте в окне DOS набрать команду ping 192.168.0.1, которая проверит соединение с серверной машиной. Если пинг не прошел, необходимо проверить работоспособность и настройку сетевых карт и свича. Кроме того, одной из причин имеющихся проблем может быть установка Windows XP поверх другой операционной системы имеющей настроенную сеть, либо компьютер использовал собственное подключение к Интернет. После неоднократной установки различных, предлагаемых на рынке, версий и вариаций Windows XP, мы пришли к выводу, что для полной работоспособности необходимо устанавливать новую ОС на чистый диск, или раздел.
Статус Интернет соединения
Теперь необходимо коснуться вопроса контроля состояние подключения к Интернет. Особенно это касается случая использования операционных систем отличных от Windows XP. Для доступа к этой опции нажмите Start -> Network Connections. Как Вы можете видеть Windows XP достаточно подробно показывает параметры соединения, такие как скорость соединения и трафик на Вашей клиентской машине. Кроме того, здесь Вы можете отключить Интернет соединение.
Совместное использование принтера
Теперь, когда Вы установили ICS, пришло время настроить принтер для совместного использования в рабочей группе. Эта возможность очень полезна для небольших компаний или отделов. Установив совместный доступ к одному или нескольким принтерам, Вы сможете значительно сэкономить не только на принтерах, но и на времени. Если на Вашем сервере еще не установлен принтер, сделать это можно с помощью меню Printers and Faxes, открыть которое можно так: Start -> Settings -> Printers and Faxes. Как только принтер будет установлен, кликните по его иконке правой клавишей мышки и выберете пункт Sharing...
В открывшемся окне просто нажмите “Share this printer” и наберите имя, под которым принтер будет виден в сети.
Совместное использование и доступ к файлам
И наконец, мы переходим к последнему наиболее частому использованию сети – совместному использования файлов и папок. Эта особенность позволит создавать в компании библиотеку документов, шаблонов и т.д. Открывать и ограничивать доступ к документам различных сотрудников. В общем, полностью организовать документооборот в компании. Честно сказать, с полным документооборотом мы преувеличили. На самом деле для этого необходимо использовать специальные продукты, способные индексировать и архивировать документы, осуществлять быстрый поиск и т.д. Однако Windows XP частично позволяет решить эти задачи, и позволяет сэкономить на приобретении программ третьи разработчиков.
Для того, что бы разрешить сетевой доступ к файлам и папкам нужно в My Computer выбрать диск, к которому нужно открыть доступ, и правой кнопкой войти в свойства диска, где выберите закладку Sharing как показано ниже...
В целом здесь все понятно, однако необходимо обратить внимание, на то, что в случае включения опции “Allow network users to change my files” Вы даете им полный доступ к своим файлам, т.е. не только редактирование, но и удаление. В случае совместной работы с Windows 2000 и NT с точки зрения защиты Вы можете отключить простой режим совместного использования файлов через меню View->Folder Options->[X]Use Simple File Sharing.
Добавление сетевых дисков
Для упрощения доступа к часто используемым сетевым дискам, ВЫ можете добавить их в свое окно My Computer и использовать как обычный диск на Вашем компьютере. Для этого Вам необходимо правой кнопкой мышки кликнуть на сетевое окружение, и в открывшемся контекстном меню выбрать “Map Network Drive...” .
Здесь выберите букву для нового диска, и укажите путь к нему. Если Вы не знаете точного пути, то можете воспользоваться кнопкой “Brouse…”.
Заключение
Конечно же эта статья не может претендовать на звание энциклопедии сетевых возможностей Windows, однако она позволила решить две важные задачи. Те кто достаточно хорошо разбирается в сетях, наверное смогли найти для себя некоторые дополнительные особенности, которые было просто лень искать самостоятельно без особой надобности. Те, кто вообще не разбирается в сетях, смогли понять, что для реализации достаточно эффективной сети вполне достаточно использовать Windows XP.
Однако, для реализации сети в Вашем офисе мы настоятельно рекомендуем обратиться к специалистам. Поверьте нашему опыту, что как только «технический специалист» Вашей компании начинает делать сеть, это становиться в непрекращающийся ремонт в квартире. Постоянно, что-то доделывается, возникают различные «подводные камни» и т.д. Лучше всего обратиться к сетевым специалистам. Причем совсем необязательно обращаться к большим сетевым интеграторам, привыкшим работать в масштабе большого предприятия, использующего несколько сотен компьютеров с различными серверами. Вполне достаточно обратиться к компаниям, имеющим опыт создания небольших сетей, имеющих монтажников, программистов, настройщиков и, что самое главное, службу сервиса. Такая группа специалистов кроме установки сети, подключения к Интернет, сможет решить проблему с установками сетевых версий программ (например, бухгалтерских, дизайнерских, инженерных продуктов). В конце концов, каждый должен заниматься своим делом.
Модель безопасности Windows XP Professional основана на понятиях аутентификации и авторизации. При аутентификации проверяются идентификационные данные пользователя, а при авторизации - наличие у него прав доступа к ресурсам компьютера или сети. В Windows XP Professional также имеются технологии шифрования, которые защищают конфиденциальные данные на диске и в сетях: например, EFS (Encrypting File System), технология открытого ключа.
Аутентификация
Регистрируясь на компьютере для получения доступа к ресурсам локального компьютера или сети, пользователь должен ввести свое имя и пароль. В Windows XP Professional возможна единая регистрация для доступа ко всем сетевым ресурсам. Таким образом, пользователь может войти в систему с клиентского компьютера по единому паролю или смарт-карте и получить доступ к другим компьютерам домена без повторного ввода идентификационных данных. Главный протокол безопасности в доменах Windows 2000 - Kerberos версии 5. Для аутентификации на серверах под управлением Windows NT 4.0 и доступа к ресурсам доменов Windows NT клиенты Windows XP Professional используют протокол NTLM. Компьютеры с Windows XP Professional, не принадлежащие к домену, также применяют для аутентификации протокол NTLM. Используя Windows XP Professional в сети с активным каталогом (Active Directory), можно управлять безопасностью регистрации с помощью параметров политики групп, например, ограничивать доступ к компьютерам и принудительно завершать сеансы работы пользователей спустя заданное время. Можно применять предварительно сконфигурированные шаблоны безопасности, соответствующие требованиям к безопасности данной рабочей станции или сети. Шаблоны представляют собой файлы с предварительно сконфигурированными параметрами безопасности, которые можно применять на локальном компьютере или импортировать в групповые политики активного каталога. Эти шаблоны используются в неизменном виде или настраиваются для определенных нужд.
Авторизация
Авторизация позволяет контролировать доступ пользователей к ресурсам. Применение списков управления доступом (access control list, ACL) и прав доступа NTFS гарантирует, что пользователь получит доступ только к нужным ему ресурсам, например, к файлам, дискам (в том числе сетевым), принтерам и приложениям. С помощью групп безопасности, прав пользователей и прав доступа можно одновременно управлять безопасностью как на уровне ресурсов, так и на уровне файлов, папок и прав отдельных пользователей.
Группы безопасности
Группы безопасности упрощают управление доступом к ресурсам. Можно приписывать пользователей к группам безопасности, а затем предоставлять этим группам права доступа. Можно добавлять пользователей к группам безопасности и удалять их оттуда в соответствии с потребностями этих пользователей. Оснастка MMC Computer Management позволяет создавать учетные записи пользователей и помещать их в локальные группы безопасности. Можно предоставлять пользователям права доступа к файлам и папкам и определять действия, которые пользователи могут выполнять над ними. Можно разрешить и наследование прав доступа. При этом права доступа, определенные для каталога, применяются ко всем его подкаталогам и находящимся в них файлам. Среди групп безопасности, локальных для домена и компьютера, имеется ряд предварительно сконфигурированных групп, в которые можно включать пользователей.
Администраторы (Administrators) обладают полным контролем над локальным компьютером и правами на совершение любых действий. При установке Windows XP Professional для этой группы создается и назначается встроенная учетная запись Администратор (Administrator). Когда компьютер присоединяется к домену, по умолчанию к группе Администраторы добавляется группа Администраторы домена (Domain Administrators).
Опытные пользователи (Power Users) обладают правами на чтение и запись файлов не только в личных папках, но и за их пределами. Они могут устанавливать приложения и выполнять многие административные действия. У членов этой группы такой же уровень прав доступа, что и у групп Пользователи (Users) и Опытные пользователи (Power Users) в Windows NT 4.0.
Пользователи (Users) в отношении большей части системы имеют только право на чтение. У них есть право на чтение и запись только файлов их личных папок. Пользователи не могут читать данные других пользователей (если они не находятся в общей папке), устанавливать приложения, требующие модификации системных каталогов или реестра, и выполнять административные действия. Права пользователей в Windows XP Professional более ограниченны по сравнению с Windows NT 4.0.
Гости (Guests) могут регистрироваться по встроенной учетной записи Guest и выполнять ограниченный набор действий, в том числе выключать компьютер. Пользователи, не имеющие учетной записи на этом компьютере, или пользователи, чьи учетные записи отключены (но не удалены), могут зарегистрироваться на компьютере по учетной записи Guest. Можно устанавливать права доступа для этой учетной записи, которая по умолчанию входит во встроенную группу Guests. По умолчанию учетная запись Guest отключена. Можно сконфигурировать списки управления доступом (ACL) для групп ресурсов или групп безопасности и по мере необходимости добавлять/удалять из них пользователей или ресурсы, что облегчает управление правами доступа и их аудит. Это также позволяет реже изменять ACL. Можно предоставить пользователям права на доступ к файлам и папкам и указать действия, которые можно выполнять с ними. Можно также разрешить наследование прав доступа; при этом права доступа к некоторой папке применяются и к ее подкаталогам и находящимся в них файлам. При работе с Windows XP Professional в составе рабочей группы или в изолированном режиме вам предоставляются права администратора, и у вас есть все права по отношению ко всем функциям безопасности ОС. Если компьютер под управлением Windows XP Professional включен в сеть, параметры безопасности определяет сетевой администратор.
Политика групп
Параметры политики групп позволяют назначать ресурсам права доступа, а также предоставлять права доступа пользователям. Это нужно для того, чтобы требовать запуска определенных приложений только в заданном контексте безопасности (тем самым снижая риск воздействия на компьютер нежелательных приложений, например, вирусов) и конфигурировать различные права доступа для множества клиентских компьютеров. Можно сконфигурировать права доступа на эталонном компьютере, который будет использован как базовый образ для установки на другие рабочие станции, гарантируя, таким образом, стандартизованное управление безопасностью даже в отсутствие Active Directory. Функции аудита позволяют обнаруживать попытки отключить или обойти защиту ресурсов. Можно задействовать предварительно сконфигурированные шаблоны безопасности, соответствующие требованиям безопасности для данной рабочей станции или сети. Шаблоны безопасности - это файлы с предварительно установленными параметрами безопасности, которые применяют к локальному компьютеру или импортируют в групповые политики активного каталога (Active Directory). Шаблоны безопасности используются в неизменном виде или настраиваются в соответствии с определенными задачами.
Шифрование
EFS (Encrypting File System) позволяет зашифровать данные на жестком диске. Риск кражи портативных компьютеров особенно велик, а с помощью EFS можно усилить безопасность путем шифрования данных на жестких дисках портативных компьютеров компании. Эта предосторожность защищает информацию и идентификационные данные от несанкционированного доступа.
2. Корпоративная безопасность
Windows XP Professional поддерживает ряд функций защиты избранных файлов, приложений и других ресурсов. В их числе списки управления доступом (ACL), группы безопасности и групповая политика, а также средства конфигурирования и управления этими функциями. В совокупности они обеспечивают мощную, но гибкую инфраструктуру управления доступом в корпоративных сетях. Windows XP поддерживает тысячи относящихся к безопасности параметров конфигурации, которые можно применять и по отдельности. В Windows XP также есть предопределенные шаблоны безопасности, обычно используемые без изменений или как основа для особой настройки конфигурации безопасности. Эти шаблоны безопасности применяются при: создании ресурса, такого как общая папка или файл; при этом вы вправе воспользоваться заданными по умолчанию ACL или настроить их в соответствии со своими потребностями; распределении пользователей по стандартным группам безопасности, таким как Users, Power Users и Administrators, и принятии заданных по умолчанию параметров ACL; использовании предоставляемых ОС шаблонов групповой политики - Basic (основной), Compatible (совместимый), Secure (безопасный) или Highly Secure (высокобезопасный). Каждая из особенностей системы безопасности Windows XP - списки ACL, группы безопасности и групповая политика - имеет параметры по умолчанию, которые разрешается изменять в соответствии с требованиями организации. Предприятия также вправе применять соответствующие средства для реализации и настройки управления доступом. Многие из этих средств, такие как оснастки Microsoft Management Console, представляют собой компоненты Windows XP Professional, другие поставляются в составе комплекта ресурсов Windows XP Professional Resource Kit.
3. Управляемый доступ к сети
Windows XP содержит встроенную подсистему безопасности для предотвращения вторжений. Ее работа базируется на ограничении прав любого, кто пытается получить доступ к компьютеру из сети до привилегий гостевой учетной записи. Взломщикам или вообще не удастся получить доступ к компьютеру и перебором паролей получить дополнительные привилегии, или они получат только ограниченный гостевой доступ.
Управление сетевой проверкой подлинности
Все большее число систем под управлением Windows XP Professional подключается к Интернету напрямую, а не через домены. Поэтому продуманная система управления доступом (в том числе устойчивыми паролями и разрешениями, сопоставленными учетными записями) важна как никогда ранее. Для обеспечения безопасности следует избегать анонимных параметров управления доступом, обычно связанных с открытыми средами, подобными Интернету. Вот почему в Windows XP Professional по умолчанию все пользователи, вошедшие по сети, работают под учетной записью Guest. Это исключает для злоумышленника возможность войти в систему через Интернет под локальной учетной записью Администратор (Administrator), у которой нет пароля.
4. Упрощенное совместное использование ресурсов
Модель совместного использования и безопасности для локальных учетных записей позволяет выбрать модель безопасности на основе применения исключительно гостевой учетной записи (Guest) либо классическую (Classic) модель безопасности. В гостевой модели при любых попытках войти в систему локального компьютера через сеть применяется только гостевая учетная запись. В классической модели пользователи при доступе через сеть входят в систему локального компьютера под своими учетными записями. На компьютерах в составе домена эта политика не применяется, а по умолчанию используется гостевая учетная запись. Если гостевая учетная запись существует и ей назначен пустой пароль, сетевые пользователи смогут войти в систему и получить доступ к любому ресурсу, разрешенному для доступа учетной записи Guest. При включенной политике "force network logons using local accounts to authenticate as Guest" локальные учетные записи должны аутентифицироваться как учетная запись Guest при доступе через сеть. Эта политика служит для ограничения разрешений локальной учетной записи, обращающейся к системным ресурсам на другом сетевом компьютере. Кроме того, на компьютерах, поддерживающих модель упрощенной защиты общих ресурсов, диалоговое окно Security Properties заменено упрощенным диалоговым окном Shared Documents Properties.
5. Ограничение на учетные записи с пустыми паролями
Для безопасности пользователей, не защитивших свою учетную запись паролем, в Windows XP Professional такие учетные записи разрешено применять только для входа в систему компьютера с его консоли. По умолчанию учетные записи с пустыми паролями запрещено применять для входа в систему удаленно по сети и вообще для любых других действий по входу в систему, кроме как с физической консоли компьютера. Например, нельзя задействовать службу вторичного входа в систему (RunAs - запуск от имени) для запуска программ под учетной записью с пустым паролем локального пользователя. Назначение пароля локальной учетной записи устраняет указанное ограничение на вход через сеть, а также предоставляет ей доступ по сети к любым ресурсам, на которые у нее есть права. Если ваш компьютер не расположен в физически защищенном помещении, рекомендуется назначать пароли всем локальным учетным записям пользователей. Несоблюдение этого требования ведет к тому, что любой пользователь, получивший физический доступ к компьютеру, может войти в систему под учетной записью без пароля. Это особенно важно для переносных компьютеров, на которых следует предусмотреть устойчивые пароли для всех локальных учетных записей пользователей. Указанное ограничение не относится к доменным учетным записям, а также к локальной гостевой учетной записи. Если учетная запись Guest с пустым паролем существует, под ней можно войти в систему и обратиться к любому ресурсу, разрешенному ей для доступа. Если требуется отключить ограничение на вход через сеть без пароля, надо соответствующим образом настроить локальную политику безопасности (Local Security Policy).
Шифрованная файловая система
Дополнительные функции шифрованной файловой системы (Encrypting File System, EFS) существенно обогатили Windows XP Professional, обеспечив дополнительную гибкость для корпоративных пользователей при развертывании решений безопасности, основанных на шифровании файлов с данными. Любой злоумышленник, имеющий физический доступ к компьютеру, может загрузить на нем другую ОС, обойти защиту основной ОС и получить доступ к конфиденциальным данным. Шифрование конфиденциальных файлов средствами EFS обеспечивает дополнительную защиту. Данные зашифрованного файла останутся недоступными, даже если атакующий получит полный доступ к среде хранения данных компьютера. Только полномочные пользователи и назначенные агенты восстановления данных в состоянии расшифровывать файлы. Пользователи с другими учетными записями, обладающие разрешениями для файла - даже разрешением на передачу прав владения (Take Ownership), не в состоянии открыть его. Администратору доступ к содержимому файла также закрыт, если только он не назначен агентом восстановления данных. При попытке несанкционированного доступа к зашифрованному файлу система откажет в доступе.
Архитектура EFS
EFS базируется на технологии шифровании с открытым ключом и использует архитектуру CryptoAPI. Стандартная (по умолчанию) конфигурация EFS не требует никакого административного вмешательства: вы вправе выполнять шифрование файлов сразу же после установки системы. EFS автоматически создает пару ключей шифрования и сертификат пользователя, если они не были созданы ранее. В качестве алгоритма шифрования EFS использует DESX (Expanded Data Encryption Standard) или 3DES (Triple-DES). Поставщики услуг криптографии поддерживают два алгоритма: RSA Base и RSA Enhanced - для создания сертификатов EFS и для шифрования симметричных ключей шифрования. Если зашифровать папку, все файлы и подпапки в ней шифруются автоматически. Рекомендуется шифрование именно на уровне папок, чтобы в процессе работы не появлялись незашифрованные временные файлы.
[pagebreak]
EFS и NTFS
Шифрованная файловая система (EFS) защищает конфиденциальные данные в файлах на томах NTFS. EFS - основная технология шифрования и расшифровки файлов на томах NTFS. Открывать файл и работать с ним может только пользователь, его зашифровавший. Это чрезвычайно важно для пользователей переносных компьютеров: даже если взломщик получит доступ к потерянному или украденному компьютеру, он не сможет открыть зашифрованные файлы. В Windows XP шифрованная файловая система также поддерживает автономные файлы и папки (Offline Files and Folders). Зашифрованный файл останется недоступным для просмотра в исходном виде, даже если атакующий обойдет системную защиту, например, загрузив другую ОС. EFS обеспечивает устойчивое шифрование по стандартным алгоритмам и тесно интегрирована с NTFS. EFS в Windows XP Professional предоставляет новые возможности совместного использования зашифрованных файлов или отключения агентов восстановления данных, а также облегчает управление посредством групповой политики и служебных программ командной строки.
Как работает EFS
EFS позволяет сохранить конфиденциальность информации на компьютере в условиях, когда люди, имеющие физический доступ к компьютеру, могут преднамеренно или неумышленно скомпрометировать ее. EFS чрезвычайно удобна для обеспечения конфиденциальности данных на мобильных компьютерах или на компьютерах, на которых работают несколько пользователей, т. е. таких системах, которые могут подвергаться атакам, предусматривающим обход ограничений списков ACL. В совместно используемой системе атакующий обычно получает несанкционированный доступ, загружая другую ОС. Злоумышленник также может захватить компьютер, вынуть жесткий диск, поместить его на другой компьютер и получить доступ к файлам. Однако если у него нет ключа расшифровки, зашифрованный средствами EFS файл будет выглядеть как бессмысленный набор символов. Поскольку EFS тесно интегрирована с NTFS, шифрование и расшифровка выполняются незаметно ("прозрачно") для пользователя. При открытии файла EFS автоматически расшифровывает его по мере чтения данных с диска, а при записи - шифрует данные при записи на диск. Работая с зашифрованным файлом, вы можете даже не догадываться, что он зашифрован (при условии, что у вас есть соответствующие права). В стандартной конфигурации EFS позволяет зашифровать файл прямо из Проводника Windows без какого-либо вмешательства администратора. С точки зрения пользователя шифрование файла или папки - это просто назначение ему определенного атрибута.
Конфигурирование EFS
По умолчанию система поддерживает работу EFS. Разрешается шифровать файлы, для которых имеется разрешение на изменение. Поскольку в EFS для шифрования файлов применяется открытый ключ, нужно создать пару ключей открытый/закрытый и сертификат с открытым ключом шифрования. В EFS разрешены сертификаты, подписанные самим владельцем, поэтому вмешательство администратора для нормальной работы не требуется. Если применение EFS не соответствует требованиям организации или если есть файлы, которые нельзя шифровать, существует много способов отключить EFS или нужным образом конфигурировать ее. Для работы с EFS всем пользователям требуются сертификаты EFS. Если в организации нет инфраструктуры открытого ключа (Public Key Infrastructure, PKI), применяются подписанные самим владельцем сертификаты, которые автоматически создаются ОС. При наличии центров сертификации сертификаты EFS обычно выпускают именно они. Если вы используете EFS, обязательно предусмотрите план восстановления данных при сбое системы.
Что разрешается шифровать
На томах NTFS атрибут шифрования разрешается назначать отдельным файлам и папкам с файлами (или подпапками). Хотя папку с атрибутом шифрования и называют "зашифрованной", сама по себе она не шифруется, и для установки атрибута пары ключей не требуется. При установленном атрибуте шифрования папки EFS автоматически шифрует: все новые файлы, создаваемые в папке; все незашифрованные файлы, скопированные или перемещенные в папку; все вложенные файлы и подпапки (по особому требованию); автономные файлы.
Шифрование базы данных автономных файлов
В Windows XP можно шифровать базу данных автономных файлов для локальной защиты кэшируемых документов от воровства компьютера, а также обеспечения дополнительной безопасности локально кэшируемых данных. В Windows 2000 этой функции не было - она предусматривает шифрование кэшируемых файлов. Например, вы вправе активно использовать автономные файлы, при этом конфиденциальность данных обеспечивается автоматически. Как администратор отдела технической поддержки вы можете задействовать эту возможность, чтобы обезопасить все локально кэшируемые документы. Автономные файлы - превосходная защита от потери конфиденциальных данных при захвате мобильного компьютера. Указанная функция поддерживает шифрование и расшифровку всей автономной базы данных. Для конфигурирования порядка шифрования автономных файлов нужны административные привилегии. Чтобы зашифровать автономные файлы, откройте папку Мой компьютер (My Computer) и в меню Сервис (Tools) выберите команду Свойства папки (Folder Options), в открывшемся окне свойств на вкладке Автономные файлы (Offline Files) установите флажок Шифровать автономные файлы для защиты данных (Encrypt Offline Files To Secure Data) .
Удаленные операции EFS на общих файлах и Web-папках
Можно шифровать и расшифровывать файлы, расположенные в Web-папках Web Distributed Authoring and Versioning (распределенная система хранения файлов с доступом через Web), или WebDAV. У Web-папок много преимуществ по сравнению с общими файлами, и Microsoft рекомендует максимально широко применять их для удаленного хранения шифрованных файлов. Web-папки требуют меньше внимания от администраторов и безопаснее, чем общие файлы. Web-папки также обеспечивают безопасное хранение и доставку шифрованных файлов через Интернет средствами стандартного протокола HTTP. Чтобы использовать общие файлы для удаленных операций EFS, требуется доменная среда Windows 2000 или более поздних версия Windows, так как при шифровании и расшифровке пользовательских файлов EFS работает от имени пользователя посредством протокола делегирования полномочий в Kerberos. Основное отличие удаленных операций EFS с общими файлами и файлами в Web-папках - то, в каком месте эти операции выполняются. Если файлы хранятся в общих файлах, все операции EFS выполняются на компьютере, где расположен файл. Так, если вы подключились к общему сетевому файлу и пытаетесь открыть ранее зашифрованный файл, он расшифровывается на компьютере, где хранится, а затем передается открытым текстом по сети на ваш компьютер. При хранении файла на Web-папках все операции EFS выполняются на локальном компьютере. Скажем, при подключении к Web-папке и попытке открыть зашифрованный файл последний пересылается по сети в зашифрованном виде на локальный компьютер и уже там расшифровывается системой EFS. Входящий и исходящий трафик Web-папок - это необработанные данные, которые, даже перехваченные атакующим, остаются зашифрованными и совершенно для него бесполезны. Такое различие в выполнении операций EFS объясняет, почему общие файлы требуют больших усилий со стороны администраторов, чем Web-папки. EFS с Web-папками устраняет необходимость в специализированном ПО для безопасного совместного использования зашифрованных файлов пользователями и организациями. Файл может храниться в свободном доступе на файловых серверах в интрасети или в Интернете и при этом оставаться надежно защищенным средствами EFS.
6. Службы сертификации
Службы сертификации - это компонент базовой ОС, позволяющий ей выполнять функции центра сертификации (certification authority, CA), или ЦС, в том числе выпускать цифровые сертификаты и управлять ими. Windows XP Professional поддерживает многоуровневые иерархии ЦС и сети ЦС с перекрестными доверительными отношениями, а также изолированные и интерактивные ЦС.
Хранилища сертификатов с открытыми ключами
Windows XP Professional хранит сертификаты с открытыми ключами в личном (Personal) хранилище сертификатов. Они хранятся открытым текстом, так как это общедоступная информация. Сертификаты имеют цифровую подпись ЦС для предотвращения изменения. Сертификаты пользователя расположены в папке Documents and Settings<имя_пользователя>ApplicationDataMicrosoft SystemCertificatesMyCertificates профиля пользователя. Эти сертификаты записываются в локальном реестре при каждом входе в систему компьютера. Для перемещаемых профилей сертификаты обычно хранятся в определенном месте (не на компьютере) и "следуют" за пользователем при его входе в систему любого компьютера в домене.
Хранение закрытых ключей
Поставщики услуг криптографии (cryptographic service provider, CSP) - как Base CSP, так и Enhanced CSP, хранят закрытые ключи в профиле пользователя в папке %SystemRoot%Documents and Settings<имя_пользователя> Application DataMicrosoftCryptoRSA. В перемещаемых профилях пользователей закрытый ключ располагается в папке RSA на контроллере домена и загружается на компьютер только на время его работы. Поскольку закрытые ключи надо защищать, все файлы в папке RSA автоматически шифруются случайным симметричным ключом - основным ключом пользователя (user's master key). Ключ длиной в 64 символа создается надежным генератором случайных чисел. На базе основного ключа создаются ключи 3DES, используемые для шифрования закрытых ключей. Основной ключ автоматически генерируется и периодически возобновляется. При хранении на диске основной ключ защищается по алгоритму Triple DES с применением ключа, созданного на основе вашего пароля. Основной ключ применяется для автоматического шифрования всех файлов в папке RSA по мере их создания.
Автоматический запрос сертификата пользователя
В Windows 2000 имелась функция автоматического запроса сертификата пользователя. Автоматический запрос сертификата компьютера и контроллера домена поддерживается и групповой политикой Microsoft Active Directory. Автоматический запрос сертификата компьютера чрезвычайно полезен для упрощения подключений по IPSec или L2TP/IPSec VPN к серверам с Windows XP со службой Routing и Remote Access и другим серверам. Эта функция снижает совокупную стоимость владения и упрощает управление жизненным циклом сертификатов для пользователей и администраторов. Автоматический запрос сертификата смарт-карты и ЦС с самоподписанными сертификатами обеспечивают дополнительную защиту пользователям предприятий, где требуется усиленная безопасность.
Запросы в ожидании и обновление сертификатов
Автоматический запрос сертификата пользователя в Windows XP Professional обеспечивает также запросы в ожидании и обновление сертификатов. После запроса сертификата вручную или автоматически на сервере сертификации Windows .NET Server CA ожидается разрешение администратора на выпуск сертификата или завершение процесса верификации. После одобрения и выпуска сертификата механизм автоматического запроса автоматически установит сертификат. В процессе обновления сертификатов пользователя с истекшим сроком действия также применяется механизм автоматического запроса. Сертификаты автоматически обновляются от имени пользователя, причем процедура определяется параметрами шаблонов сертификатов в Active Directory. По умолчанию сертификаты и ключи защищены. Для дополнительной защиты вы вправе применить дополнительные меры безопасности, в том числе выполнять экспорт закрытых ключей и хранить их в защищенном месте.
7. Управление реквизитами
Управление реквизитами в Windows XP состоит из трех компонентов: интерфейс пользователя для ввода реквизитов, хранилище имен и паролей пользователя и связка ключей (keyring).
Интерфейс пользователя для ввода реквизитов
Приложение отображает интерфейс пользователя для ввода реквизитов, если компонент аутентификации возвратил ошибку проверки подлинности. (Это касается только приложений, в которых такой интерфейс реализован.) Вам предлагается ввести имя пользователя и пароль в соответствующем диалоговом окна или выбрать сертификат X.509 из хранилища My Store. Приложение также может предусматривать флажок Remember my password (Запомнить пароль), при установке которого реквизиты запоминаются. Сохранение реквизитов поддерживают только интегрированные с Windows XP компоненты проверки подлинности (например, Kerberos, NTLM, SSL). Для базовой проверки подлинности отображается интерфейс пользователя для ввода реквизитов, но возможности сохранения реквизитов нет.
Хранилище реквизитов пользователя
Реквизиты перемещаемых профилей хранятся в защищенном хранилище Stored User Names and Passwords (Сохраненные имя и пароль пользователя). Порядок доступа к реквизитам определяют параметры локальной защиты (Local Security Settings). Реквизиты хранятся на основе целевой информации, возвращенной ресурсом. Когда установлен флажок Remember my password в интерфейсе запроса реквизитов, реквизиты сохраняются в наиболее общей форме. Скажем, после обращения к определенному серверу в домене реквизиты сохраняются в форме *.domain.com. При сохранении разных реквизитов для разных серверов в этом домене указанная запись не перезаписывается, а создаются более конкретные записи о целевой информации. При обращении к ресурсу с применением интегрированного компонента проверки подлинности последний выберет среди сохраненных реквизитов пользователей наиболее близко соответствующие целевой информации, возвращенной ресурсом. Найдя нужные реквизиты, компонент ничего не будет спрашивать у пользователя. В случае неудачи поиска реквизитов приложению, которое пыталось обращаться к ресурсу, возвращается ошибка аутентификации. Приложение, обращающееся к ресурсу, не обязательно должно реализовывать интерфейс пользователя для ввода реквизитов. Если оно взаимодействует с интегрированным компонентом проверки подлинности, последний и выполняет поиск реквизитов. В действительности сохраненные реквизиты сможет получить только компонент проверки подлинности. Для Windows XP Professional в составе домена используется классический интерфейс пользователя для ввода реквизитов, а в Windows XP Home Edition и Windows XP Professional в рабочей группе - новый дружественный интерфейс пользователя.
Связка ключей
Связка ключей (keyring) позволяет вручную управлять сохраненными реквизитами. Для работы с ней служит элемент User Accounts Панели управления. В связке ключей отображается список сохраненных реквизитов. При выделении реквизита в поле описания в нижней части окна отображается его краткое описание. Можно добавлять новые реквизиты, редактировать и удалять существующие. При добавлении реквизитов система представит диалоговое окно, похожее на интерфейс пользователя для ввода реквизитов, и попросит указать целевую информацию. В целевой информации разрешается использовать символы подстановки в виде звездочки (*). Редактирование реквизитов позволяет самостоятельно изменить целевую информацию или сами реквизиты. Здесь можно изменить имя пользователя и пароль на сервере. Не разрешается применять интерфейс пользователя для ввода реквизитов и редактирования реквизитов, созданных конкретным приложением. Например, не удастся отредактировать реквизиты паспорта. Но вы вправе удалять любые реквизиты. Возможность сохранять реквизиты обычно определяется в групповой политике. Чтобы разработчики могли использовать механизм сохранения реквизитов, API запроса реквизитов и другие базовые API описаны в соответствующем комплекте Platform Software Development Kit (SDK).
8. Быстрое переключение пользователей
Быстрое переключение пользователей в Windows XP Professional доступно, только когда компьютер работает в составе рабочей группы или изолированно. Если компьютер присоединен к домену, параметры входа в систему компьютера определяются политикой, заданной администратором. На компьютерах с Windows XP Professional, которые не работают в составе домена, разрешается переключаться между сессиями разных пользователей без выхода из системы и закрытия приложений. Названные возможности обеспечивает технология поддержки и хранения пользовательских сессий, аналогичная той, что применяется в терминальной службе Microsoft Windows 2000 Terminal Services. Смена пользователя выполняется буквально в мгновение ока "горячими клавишами" я+L или через меню выключения компьютера. В результате не будет закрыто ни одно приложение, а значит, не нужно ломать голову над тем, сохранять ли файлы другого пользователя - вся рабочая обстановка будет сохранена такой, какая она есть. Очередному пользователю Windows выведет окно приглашения, которое, кстати, легко настроить и оформить картинками по своему вкусу.
Разумеется, на сохранение каждого рабочего сеанса потребуется столько оперативной памяти, сколько нужно для хранения приложений, выполняемых в сеансах, плюс еще дополнительно 2 Мбайт на каждый сеанс. Поэтому для надежной поддержки нескольких пользователей рекомендуется компьютер с объемом ОЗУ не менее 128 Мбайт. Приложения, сохраняемые в фоновых сессиях, продолжают работать - скажем, почтовая программа другого пользователя будет продолжать принимать почту! Если система настроена на переход в "спящий" режим (hibernation mode) после приостановки работы, то все сеансы будут сохранены на жестком диске и восстановятся после включения компьютера. Быстрое переключение пользователей разрешено для версий Windows XP Home Edition или Windows XP Professional на изолированном компьютере или компьютере в составе рабочей группы. При присоединении компьютера под управлением Windows XP Professional к домену эта функция отключается.
[pagebreak]
9. Личная конфиденциальность
Возможности обеспечения личной конфиденциальности в Windows XP Professional такие же, как и в Windows XP Home Edition. Они различаются при работе в домене или в составе рабочей группы и в изолированном режиме. В домене применяется назначенная администратором политика.
10. Доступ к Интернету - Internet Connection Firewall
Межсетевой экран Internet Connection Firewall в Windows XP Professional обеспечивает защиту настольных и переносных компьютеров при подключении к Интернету - особенно в случае постоянных подключений, таких как кабельные модемы и DSL.
Групповая политика в ICF
Характерная функция ICF в Windows XP Professional - зависящая от места групповая политика. Это удобно для мобильных пользователей, желающих обеспечить безопасность при работе на переносных компьютерах в местах общественного подключения к Интернету: в гостиницах, аэропортах и т. п. Когда компьютер с Windows XP Professional работает в составе домена, администратор домена обычно создает групповую политику, запрещающую поддержку ICF в корпоративной сети. Это облегчает работу как пользователя, так и администратора. Когда пользователь вернется домой или подключится к Интернету в общественном месте, межсетевой экран ICF снова заработает, так как указанная политика в той сети не действует.
Как работает межсетевой экран
Такую технологию, как фильтры пакетов на основании полной информации о пакете, межсетевой экран ICF использует совместно с компонентом ICS. Хотя ICF обычно и применяется только в изолированном режиме работы компьютера, его иногда используют для защиты общего адаптера и обеспечения безопасности домашней сети. По умолчанию фильтры пакетов межсетевого экрана ICF блокируют все незапрошенные пакеты из открытого сетевого интерфейса. Для этого ICF обращается к таблице трафика в Network Address Translation (NAT) и проверяет весь входящий трафик на соответствие своим правилам. Входные потоки данных пропускаются только при наличии соответствующей записи в таблице трафика NAT, созданной межсетевым экраном или другими средствами из внутренней защищенной сети. Иначе говоря, если источник сетевого сообщения находится вне защищенной сети, входящие данные отбрасываются. Межсетевой экран ICF в Windows XP Professional дает уверенность, что хакеры не смогут просканировать вашу систему или подключиться к ее ресурсам. Однако здесь имеется определенный компромисс: межсетевой экран затрудняет конфигурирование системы для работы в качестве сервера в Интернете. Межсетевой экран ICF в Windows XP Professional доступен, только когда компьютер включен в рабочую группу или в изолированную конфигурацию. В домене параметры ICF определяются политиками, назначенными администратором.
Параметры групповой политики, относящиеся к безопасности
С Windows XP поставляются шаблоны защиты, представляющие собой заранее сконфигурированные наборы политик безопасности, которые разрешается применять для обеспечения определенного уровня защиты пользовательских компьютеров. Шаблоны предусматривают несколько уровней защиты: низкий (low), средний (medium) и высокий (high). Существуют также определенные политики управления паролями: определение минимальной длины пароля; настройка интервала между обязательной сменой пароля; управление доступом к ресурсам и данным.
9. Политика ограничения используемых приложений
Эта политика предоставляет администраторам механизм определения и управления ПО, работающим в домене. Она позволяет ограничить круг приложений только разрешенным к выполнению ПО и запрещает р