Разработка поискового робота на Erlang

Описано использование преимуществ функционального языка программирования Erlang для построения распределенных вычислений в веб-среде на примере разработки поискового робота. This paper describes the advantages of using a functional programming language Erlang for building a distributed computing in...

Full description

Saved in:
Bibliographic Details
Published in:Управляющие системы и машины
Date:2013
Main Authors: Вавилин, И.А., Глибовец, А.Н., Глибовец, Н.Н.
Format: Article
Language:Russian
Published: Міжнародний науково-навчальний центр інформаційних технологій і систем НАН та МОН України 2013
Subjects:
Online Access:https://nasplib.isofts.kiev.ua/handle/123456789/83168
Tags: Add Tag
No Tags, Be the first to tag this record!
Journal Title:Digital Library of Periodicals of National Academy of Sciences of Ukraine
Cite this:Разработка поискового робота на Erlang / И.А. Вавилин, А.Н. Глибовец, Н.Н. Глибовец // Управляющие системы и машины. — 2013. — № 3. — С. 68-74. — Бібліогр.: 16 назв. — рос.

Institution

Digital Library of Periodicals of National Academy of Sciences of Ukraine
id nasplib_isofts_kiev_ua-123456789-83168
record_format dspace
spelling Вавилин, И.А.
Глибовец, А.Н.
Глибовец, Н.Н.
2015-06-16T14:07:28Z
2015-06-16T14:07:28Z
2013
Разработка поискового робота на Erlang / И.А. Вавилин, А.Н. Глибовец, Н.Н. Глибовец // Управляющие системы и машины. — 2013. — № 3. — С. 68-74. — Бібліогр.: 16 назв. — рос.
0130-5395
https://nasplib.isofts.kiev.ua/handle/123456789/83168
004.4
Описано использование преимуществ функционального языка программирования Erlang для построения распределенных вычислений в веб-среде на примере разработки поискового робота.
This paper describes the advantages of using a functional programming language Erlang for building a distributed computing in the Web environment on the example of a search engine robot.
Описано використання переваг функціональної мови програмування Erlang для побудови розподілених обчислень у веб-середовищі на прикладі розробки пошукового робота.
ru
Міжнародний науково-навчальний центр інформаційних технологій і систем НАН та МОН України
Управляющие системы и машины
Программная инженерия и программные средства
Разработка поискового робота на Erlang
The Development of Search Robot in Erlang
Розробка пошукового робота на Erlang
Article
published earlier
institution Digital Library of Periodicals of National Academy of Sciences of Ukraine
collection DSpace DC
title Разработка поискового робота на Erlang
spellingShingle Разработка поискового робота на Erlang
Вавилин, И.А.
Глибовец, А.Н.
Глибовец, Н.Н.
Программная инженерия и программные средства
title_short Разработка поискового робота на Erlang
title_full Разработка поискового робота на Erlang
title_fullStr Разработка поискового робота на Erlang
title_full_unstemmed Разработка поискового робота на Erlang
title_sort разработка поискового робота на erlang
author Вавилин, И.А.
Глибовец, А.Н.
Глибовец, Н.Н.
author_facet Вавилин, И.А.
Глибовец, А.Н.
Глибовец, Н.Н.
topic Программная инженерия и программные средства
topic_facet Программная инженерия и программные средства
publishDate 2013
language Russian
container_title Управляющие системы и машины
publisher Міжнародний науково-навчальний центр інформаційних технологій і систем НАН та МОН України
format Article
title_alt The Development of Search Robot in Erlang
Розробка пошукового робота на Erlang
description Описано использование преимуществ функционального языка программирования Erlang для построения распределенных вычислений в веб-среде на примере разработки поискового робота. This paper describes the advantages of using a functional programming language Erlang for building a distributed computing in the Web environment on the example of a search engine robot. Описано використання переваг функціональної мови програмування Erlang для побудови розподілених обчислень у веб-середовищі на прикладі розробки пошукового робота.
issn 0130-5395
url https://nasplib.isofts.kiev.ua/handle/123456789/83168
citation_txt Разработка поискового робота на Erlang / И.А. Вавилин, А.Н. Глибовец, Н.Н. Глибовец // Управляющие системы и машины. — 2013. — № 3. — С. 68-74. — Бібліогр.: 16 назв. — рос.
work_keys_str_mv AT vavilinia razrabotkapoiskovogorobotanaerlang
AT glibovecan razrabotkapoiskovogorobotanaerlang
AT glibovecnn razrabotkapoiskovogorobotanaerlang
AT vavilinia thedevelopmentofsearchrobotinerlang
AT glibovecan thedevelopmentofsearchrobotinerlang
AT glibovecnn thedevelopmentofsearchrobotinerlang
AT vavilinia rozrobkapošukovogorobotanaerlang
AT glibovecan rozrobkapošukovogorobotanaerlang
AT glibovecnn rozrobkapošukovogorobotanaerlang
first_indexed 2025-11-27T08:21:36Z
last_indexed 2025-11-27T08:21:36Z
_version_ 1850805633946746880
fulltext 68 УСиМ, 2013, № 3 Программная инженерия и программные средства УДК 004.4 И.А. Вавилин, А.Н. Глибовец, Н.Н. Глибовец Разработка поискового робота на Erlang Описано использование преимуществ функционального языка программирования Erlang для построения распределенных вычисле- ний в веб-среде на примере разработки поискового робота. This paper describes the advantages of using a functional programming language Erlang for building a distributed computing in the Web environment on the example of a search engine robot. Описано використання переваг функціональної мови програмування Erlang для побудови розподілених обчислень у веб- середовищі на прикладі розробки пошукового робота. Введение. В современном мире распределен- ные вычисления – актуальное направление раз- вития компьютерных наук. Существует много задач, требующих сложных или длительных вы- числений [1]. Для работ такого масштаба не до- статочно мощностей одного вычислительного узла, даже если это современный суперкомпью- тер. Поэтому вариантом решения этой пробле- мы есть разбиение задачи на части и использо- вание сети компьютеров. Для управления таки- ми сетями создают специализированные про- граммные комплексы. Большинство из них раз- работаны на С++, поскольку это язык высоко- го быстродействия, поддерживающий мощную библиотеку для организации распределенных вычислений – Message Passing Interface (MPI, интерфейс передачи сообщений). Это хорошо стандартизованный механизм построения парал- лельных программ, основанный на модели обме- на сообщениями. Известны и системы, реализо- ванные на других объектно-ориентированных языках Java и PHP [2]. В последнее десятиле- тие появились функциональные языки програм- мирования со специализированными средствами разработки распределенных вычислительных сред [3, 4]. В веб-среде проблема масштабных вычис- лений также наблюдается. Количество информа- ции в сети Интернет очень быстро растет и для ее обработки и структурирования разрабаты- ваются специальные программные системы, называемые поисковыми роботами (web craw- ler, spider) [5]. Наиболее известные поисковые системы име- ют своих поисковых роботов. Большинство из них разработаны на С++, Java и PHP [6]. Но неизвестны разработки роботов с использова- нием функциональных языков, хотя они имеют определенные преимущества для решения этой задачи. Поэтому цель этой работы – выявление этих преимуществ на примере создания поис- кового робота с использованием функциональ- ного языка Erlang. Erlang – функциональный язык программи- рования с динамической типизацией, разрабо- танный для создания распределенных вычис- лительных систем [7]. Он имеет средства для порождения параллельных процессов и их коммуникации с помощью асинхронных со- общений. Кросс-платформенность обеспечива- ется путем компиляции программы в байт-код, выполняемый на виртуальной машине. Поисковый робот Поисковый робот (ПР) – это программная компонента, входящая в состав поисковой сис- темы, предназначенная для обработки веб- страниц и занесения информации о них в базу данных поисковой системы [8]. Стандартные функции ПР – анализ структуры сайта, сохра- нение в базе данных информации о каждой странице сайта и мониторинг его доступности. Некоторые ПР имеют набор дополнительных функций, среди которых можно выделить: со- хранение локальной копии всех обработанных страниц для обеспечения быстрого поиска ин- УСиМ, 2013, № 3 69 формации в них, валидация HTML-кода, сбор e-mail адресов для отправки спама [9]. Алгоритм работы ПР начинается с анализа некоторого начального набора веб-адресов. На каждой выбранной странице ищутся новые ссылки, которые хранятся в очереди для даль- нейшей обработки. Обработка веб-адресов регулируется опреде- ленным набором политик: выбора страниц для загрузки, время повторной обработки веб-стра- ницы для проверки изменений, которые могли произойти после последней обработки, вежли- вости (регулирует предотвращение перегрузки обрабатываемых сайтов), политика параллели- зации (регулирует механизм координации дей- ствий для распределенных поисковых роботов). Во избежание обработки одних и тех же стра- ниц используется нормализация веб-адресов. Это приведение ссылки к определенному ка- ноническому виду. Для этого, в частности, сим- волы приводятся к одному регистру, убирают- ся номера портов по умолчанию, лишние точ- ки и слеши. В разработанном ПР реализована функция нормализации адресов, выполняющая все основные операции без изменения семан- тики адреса. Архитектура поискового робота Поисковый робот был разработан по прин- ципу клиент-серверной архитектуры. Он состоит из главного процесса, который получает зада- ния извне и распределяет их между рабочими процессами. Главный процесс периодически проверяет наличие новых задач в базе данных. Рабочие процессы могут быть запущены на лю- бом, правильно настроенном компьютере, к ко- торому есть доступ по сети. Рабочие процессы также могут быть запущены на том же компь- ютере, что и главный процесс. Тогда поиско- вый робот перестает быть распределенным, но сохраняет полную функциональность. Для хра- нения информации используется NoSQL СУБД MongoDB, которая тоже может работать в рас- пределенном режиме. Она имеет высокую про- изводительность, а ее документоориентирован- ность подходит для сохранения результатов работы поискового робота (рис. 1). Рис. 1. Архитектура поискового работа СУБД MongoDB В качестве хранилища данных для поиско- вого работа была выбрана СУБД MongoDB. Она документо-ориентированна и относится к клас- су NoSQL СУБД. Данные сохраняются в фор- мате BSON (похожий на JSON) и не имеют оп- ределенной схемы, т.е. документы в коллекции могут иметь разную структуру. Выделяют следующие свойства MongoDB [13]: гибкий язык для формирования запросов (можно написать собственные функции на Java- script для обработки данных); полная поддерж- ка индексов (любое поле может быть проин- дексировано); поддержка master–slave репли- кации (slave-узлы могут выбрать новый master- узел, если текущий недоступен); горизонталь- ная масштабируемость (с использованием шар- динга); поддержка балансировки нагрузок ме- жду шардами; данные можно агрегировать, ис- пользуя подход MapReduce. Структура базы данных crawler для разрабо- танного поискового робота состоит из трех коллекций. Для хранения веб-адресов, требую- щих обработки, используется коллекция pen- ding_urls. Документы в этой коллекции обыч- но (поскольку СУБД не накладывает ограни- чений) имеют структуру, приведенную в лис- тинге 1. Кроме самой ссылки в них хранится список рефералов и статус документа – в ожи- дании или в обработке. Также может быть за- полнено поле operation. В этом случае будет проведена дополнительная обработка докумен- та по типу операции. 70 УСиМ, 2013, № 3 "_id" : ObjectId, "url" : string, "referral_list" : array, "status" : string, "d_change" : date, "operation" : array Листинг 1. Структура документа в коллекции pending_urls Для хранения результатов обработки веб- страниц используется коллекция processed_- urls. Структура документов в этой коллекции приведена в листинге 2. "_id" : string, "content-length" : string, "content-type" : string, "server" : string, "http_returncode" : integer, "referral_count" : integer, "referral_list" : array, "links_count" : integer, "d_processed" : date, "operation" : array Листинг 2. Структура документа в коллекции processed_urls В документах коллекции processed_urls хра- нится информация: тип "_id" : ObjectId, "url" : string, "text" : string, "positions" : array, "d_search" : date Листинг 3. Структура документа в коллекции search_results контента и его размер, веб-сервер, на котором работает веб-страница, идентификатор ответа веб-сервера, по которому можно определить доступность страницы, рефералы и количество ссылок, найденных на этой странице. Для хранения результатов поиска использу- ется коллекция search_results. Структура до- кументов в этой коллекции приведена в лис- тинге 3. В документах коллекции search_results хра- нится адрес веб-страницы, на которой прово- дился поиск, текст поиска и позиции, на кото- рых этот текст был найден. Рабочий узел поискового робота Рабочий узел реализован в виде модуля web_crawler_slave. Этот модуль экспортирует функции process для запуска процесса, который обрабатывает веб-страницы и add_pending_url для добавления новой ссылки в коллекцию pending_urls и ее дальнейшей обработки. Функция process имеет обязательный пара- метр URL и необязательный – Referral_URL, т.е. список рефералов. Она реализована по следу- ющему алгоритму. Функция получает на вход веб-страницу, ко- торую требуется обработать. Подключается к базе данных. Получает из базы дополнительные данные о текущем задании. Изменяет его ста- тус на processing. Выполняет нормализацию ад- реса. Опрашивает веб-страницу по данному ад- ресу, отделяет полученные заголовки и тело са- мой страницы. При необходимости выполняет дополнительную обработку веб-страницы, на- пример, поиск информации. Находит новые ссылки и записывает их в базу данных. Добав- ляет информацию о текущей странице в коллек- цию processed_urls. Удаляет веб-страницу кол- лекции pending_urls и завершает работу. Для взаимодействия Erlang с MongoDB ис- пользуется библиотека mongodb-erlang, кото- рая находится в свободном доступе на github [14]. В ней реализованы все функции, необхо- димые для работы с этой СУБД. В листинге 4 приведен код, выполняющий подключение к базе данных и запрашивающий документы из коллекции pending_urls с определенным url. application:start (mongodb), case mongo:connect (?MongoDBHost) of {ok, MongoConn} –> {ok, Row_pending}=mongo: do(safe, master, MongoConn, crawler, fun()–>mongo: find_one (pending_urls,{url, URL}) end); {error, Reason}  exit(normal) end. Листинг 4. Подключение и запрос к MongoDB Во избежание незапланированной повтор- ной обработки страницы была реализована функция нормализации адреса. Ее код приве- ден в листинге 5. Функция использует вспомо- гательные функции, приведенные в листинге 6. normalize_url(URL)–> URL_string=bitstring_to_list(URL), {Scheme, UserInfo, Host, Port, Path, Query}=http_uri: parse(URL_string), УСиМ, 2013, № 3 71 list_to_binary(lists:append([atom_to_list(Scheme), “://”,get_right_userinfo(UserInfo),string:to_lower (Host), get_right_port(Scheme,Port),get_right_path(Path), Query])). Листинг 5. Функция для нормализации веб-адресов is_default_port(http,80) –> true; is_default_port(https,443) –> true; is_default_port(Scheme,Port)–>false. get_right_port(Scheme,Port) –> case is_default_port(Scheme, Port) of 'false' –> string:concat(":", Port); 'true' –> [] end. get_right_userinfo([])–> []; get_right_userinfo(UserInfo)–>string:concat(UserInfo, "@"). path_to_upper(Path,[]) –> Path; path_to_upper(Path,[Pos|Rest]) –> lists:append([ lists:sublist(Path, element(1,lists:last(Pos))-1), string:to_upper(lists:sublist(Path, element(1,lists:last(Pos)), element(2,lists:last(Pos)))), path_to_upper(lists:sublist(Path, element(1,lists:last(Pos)) +element(2,lists:last(Pos)),length(Path)),Rest) ]). get_right_path(Path) –> {ok, Reg_replase }=re:compile("\\.\\./|\\./"), New_path=re:replace(Path,Reg_replase ,"",[global, {return,list}]), {ok,Regexp}=re:compile("%[0-9abcdef][0-9abcdef]"), case re:run(New_path,Regexp ,[global]) of {match, Matches} –> path_to_upper (New_path,Matches); nomatch –> New_path end. Листинг 6. Вспомогательные функции для нормализации веб-адресов Процесс нормализации состоит из: приве- дения адреса узла к нижнему регистру; отвер- жения номера порта при использовании его по умолчанию; приведения закодированных сим- волов в адресе к верхнему регистру; удаления лишних точек. Для работы с веб-средой используется биб- лиотека inets. В частности, для загрузки веб- страницы используется функция request из мо- дуля httpc, а для обработки ссылки – функция parse из модуля http_uri. Пример кода для по- лучения страницы приведен в листинге 7. inets:start(), case httpc:request(URL) of {ok, {_Status, H, HTML}}→process_body(HTML); {error, Reason} → exit(normal) end. Листинг 7. Загрузка веб страницы extract_urls(_,[],_,_,_)-> []; extract_urls(Body,[Pos|Positions],Conn,Referral_URL, Operation)-> URL=normalize_url(binary_part(Body,element(1, lists:last(Pos)), element(2,lists:last(Pos)))), add_pending_url(Conn,URL,Referral_URL,Operation), extract_urls(Body,Positions,Conn,Referral_URL,Operation). find_urls(Body,Referral_URL,Conn,Operation)-> {ok,Regexp}=re:compile("<a[^\>]+href=[\"\']([^\"\ ']+)[\"\']"), case re:run(Body,Regexp,[global]) of {match, Matches} -> extract_urls(Body,Matches, Conn,Referral_URL,Operation), length(Matches); nomatch -> 0 end. Листинг 8. Функции для получения веб-адресов со страницы После получения страницы в ней ищут но- вые адреса. Для поиска веб-адресов и их выделения на странице реализованы функции find_urls и extract_urls. Они приведены в листинге 8. Ссылки, найденные на странице не сразу до- бавляются в базу данных. Сначала они про- ходят валидацию, чтобы определить, может ли этот адрес быть обработанным. Затем прове- ряется наличие этого адреса в коллекции processed_urls. Если его там нет (он еще не об- рабатывался), адрес добавляется к коллекции pending_urls. Если этот адрес уже обрабатывал- ся, согласно политике повторной обработки, оп- ределяется его возраст, т.е. время, прошедшее с момента его обработки. Если время превышает 60 с, адрес добавляется к pending_urls для по- вторной обработки. В противном случае теку- щий реферал этого адреса добавляется к доку- менту в коллекции processed_urls. Код описан- ной функции приведен в листинге 9. 72 УСиМ, 2013, № 3 add_pending_url(Conn,URL,Referral_URL,Operation)-> case http_uri:parse(binary_to_list(URL)) of {error, no_scheme} -> {Scheme, UserInfo, Host, Port, Path, Query}= http_uri:parse(binary_to_list(Referral_URL)), New_URL=lists:append([atom_to_list(Scheme),"://", get_right_userinfo(UserInfo),Host,get_right_port(Sche- me,Port),URL]), add_pending_url(Conn,New_URL,Referral_URL,Operation); {error, _} -> {ok}; {Scheme, UserInfo, Host, Port, Path, Query}-> {_, _, Referral_Host, _, _, _}=http_uri:parse(binary_to_ list(Referral_URL)), if Host= =Referral_Host -> Norm_URL=normalize_url(URL), {ok,Row_processed}=mongo:do(safe, master, Conn, ?DB, fun() -> mongo:find_one(?COLLECTION2,{'_id', Norm_URL, operation,Operation}) end), if tuple_size(Row_processed)>0 -> Row_processed_list=list2tupleslist(tuple_to_list(element (1,Row_processed))), D_processed=atom_to_list(element(2,lists:keyfind(d_pro cessed,1, Row_processed_list))), Age=calendar:datetime_to_gregorian_seconds(calendar: local_time())- stdate_to_sec(D_processed); true -> Age=1000 end, if Age<?REPROCESS_INTERVAL -> add_referral_to_processed_url(Conn, Norm_URL,Referral_URL,Operation); true-> {ok,Row_pending}=mongo:do(safe, master, Conn, ?DB, fun() -> mongo:find_one(?COLLECTION1,{url, Norm_URL,status,pending,operation,Operation}) end), if tuple_size(Row_pending)>0 -> Row_pending_list=list2tupleslist(tuple_to_list(element (1, Row_pending))), mongo:do (safe, master, Conn, ?DB, fun() -> mongo:repsert (?COLLECTION1, {url, Norm_URL status,pending}, {url, Norm_URL,referral_list,lists: umerge(element(2, lists:keyfind(referral_list,1,Row_pending_list)), [Referral_URL]), status,pending,d_change,stdate(),operation,Operation}) end); true -> mongo:do (safe, master, Conn, ?DB, fun() -> mongo:repsert (?COLLECTION1, {url, Norm_URL, status,pending}, {url, Norm_URL,referral_list,[Referral_URL],status, pending,d_change,stdate(), operation,Operation}) end) end, {ok} end; true -> {ok} end end. Листинг 9. Функция добавления новой ссылки для дальнейшей обработки Главный блок поискового робота Блок состоит из нескольких модулей. Модуль web_crawler_app базируется на appli- cation и состоит из функций start и stop. Он контролирует правильный запуск и остановку ПР. Код модуля приведен в листинге 10. -module(web_crawler_app). -behaviour(application). -export([start/2, stop/1]). start(_Type,_Args) –> web_crawler_sup:start_link(). stop(_State) –> ok. Листинг 10. Модуль web_crawler_app -module(web_crawler_sup). -behaviour(supervisor). -export([start_link/0]). -export([init/1]). start_link() –> supervisor:start_link({globa,supervisor}, web_crawler_sup, []). init(_Args) –> pool:start(crawler_pool), {ok, {{one_for_one, 1, 60}, [{web_crawler_master, {web_crawler_master, start_link, []}, permanent, brutal_kill, worker, [web_crawler_master]}]}}. Листинг 11. Модуль web_crawler_sup Модуль web_crawler_sup базируется на по- ведении supervisor. Его основная задача – за- пуск главного процесса поискового робота и контроль за его работой, т.е. перезапуск в случае отказа. Модуль состоит из функции start_link, который запускает web_crawler_app, и функции init, в которой прописано, как за- пускать главный поток, и алгоритм его переза- пуска. Коды модуля приведены в листинге 11. Последний и главный модуль – web_craw- ler_master. Он базируется на поведении gen_ server. Его главная задача – проверка нали- чия веб-адресов, ожидающих обработки, и рас- пределение задач на обработку между рабо- чими узлами. УСиМ, 2013, № 3 73 После инициализации модуля, включается функция process_urls, уходящая в хвостовую рекурсию и вызываемая. пока работа не будет остановлена. Эта функция подключается к базе данных, выбирает все ссылки из коллекции pending_urls и вызывает функцию distribute_urls, которая в свою очередь создает процессы для их обработки на рабочих узлах. Код функций приведен в листинге 12. process_urls(MongoConn,Log,0) –> exit(normal); process_urls(MongoConn, Log, Times) –> logger:write(Log,"Processing pending urls. Times=pn",[Times]), {ok,Result}=mongo:do(safe, master, MongoConn, ?DB, fun()  mongo:find(?COLLECTION1,{status,pending})end), Rows=mongo:rest(Result), logger:write(Log, "Found p urls. Starting distribu tion.n", [length(Rows)]), distribute_urls(Rows), if is_integer(Times) –> T=Times -1; true –> T= Times end, process_urls(MongoConn,Log,T). distribute_urls([])–> {ok}; distribute_urls([Row| Rows]) –> pool:pspawn(web_crawler_slave,process, [element(4, Row),element(6, Row)]), distribute_urls(Rows). Листинг 12. Функции process_urls и distribute_urls Благодаря использованию поведения gen_- server, модуль web_crawler_master может при- нимать синхронные и асинхронные запросы. С использованием асинхронного запроса реали- зована внешняя функция add_url, определяю- щая новый адрес для обработки ПР. Также реализована функция для поиска оп- ределенного текста на веб-страницах. Она ис- пользует функцію add_url и добавляет новый адрес в коллекцию pending_urls. Но в этом слу- чае в поле operation отмечается, что это поиск текста. Коды этих функций приведены в лис- тинге 13. Механизм работы в распределенном ре- жиме. Наш ПР может работать в многопоточ- ном режиме на одном компьютере, но тогда add_url(URL) –> gen_server:cast(web_crawler_master,{add_url,URL, {}}). add_url(URL, Operation) –> gen_server:cast(web_crawler_master, {add_url, URL, Operation }). search_text(URL,Text) –> add_url(URL, {search,list_to_binary(Text)}). handle_cast({add_url,URL,Operation},{MongoConn,Fd})–> web_crawler_slave:add_pending_url(MongoConn, list_to_binary(URL), [],Operation), {noreply,{MongoConn,Fd}}. Листинг 13. Функции add_url и search_text он должен был быть распределенным. Для это- го были использованы модуль pool, входящий в состав Erlang. Он позволяет объединять рабо- чие узлы в пул, после чего главный узел будет указывать пулу на создание нового процесса, а на каком именно узле его создавать будет ре- шать сам контроллер пула. Этим достигается балансировка нагрузок, так как новый процесс всегда создается на наименее загруженном уз- ле, а также постоянно поддерживается актуаль- ная информация об имеющихся в пуле узлах. Следует отметить, что добавлять новые узлы можно без остановки работы системы. Для запуска пула необходимо выполнить сле- дующие шаги [15]. Подготовить набор компью- теров с одинаковой средой Erlang, один из ко- торых будет главным. Послать на все компью- теры программный код, который будет запус- каться. На главном узле создать файл .Hosts.- erlang, в котором прописать названия всех ра- бочих узлов, по которым к ним можно присое- диниться. Создать на всех узлах одинаковый файл .Erlang.cookie, в котором должна быть записана строка текста, общая для всех узлов, чтобы компьютеры одного пула «видели» друг друга. Настроить на главном узле беспароль- ный доступ через ssh ко всем рабочим узлам. Запустить на главном узле именуемую среду Erlang. Это достигается командой erl-sname <имя узла>. Затем инициализируем пул командой pool: start (<имя пула>), а процессы в нем создаются командой pspawn (<имя модуля>, <имя функ- ции>, <параметры функции>). Таким образом 74 УСиМ, 2013, № 3 была реализована работа с пулом в поисковом роботе и он стал распределенным. Заключение. Описано построение ПР со следующими функциями: построение структу- ры веб-ресурса, мониторинг доступности его страниц и поиск теста. Он имеет клиент- серверную архитектуру и работает с СУБД MongoDB. В качестве дальнейшего развития системы было бы полезно осуществить удаленную за- грузку кода. Чтобы запустить процесс на рабо- чем узле, необходим код. В Erlang есть модуль erl_boot_server, который при правильной на- стройке позволяет загружать код из главного узла в момент запуска среды на рабочем узле, что устраняет необходимость постоянной под- держки актуальной версии кода на всех узлах. Для ускорения работы с базой данных мож- но использовать репликацию на несколько узлов [16]. В Erlang, с помощью конструкции replset, можно балансировать запросы между разными узлами, что ускорило бы операции чтения и дало значительный прирост быстродействия на большом количестве рабочих процессов. 1. Глибовец Н.Н., Гороховский С.С. Проектирование инструментария сетевого программного продукта. Современное состояние и перспективы развития // Проблеми програмування. – 2010. – № 2–3. – С. 102–107. 2. citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1. 202. 692... 3. www.cs.kent.ac.uk/projects/ofa/.../tutorial.p... 4. https://wiki.cse.unsw.edu/cs4181/12s2/Presentation%20 Topicsr 5. Глибовець А.М., Шабінський А.С. Один підхід до по- будови інтелектуальної пошукової системи // Наук. зап. НаУКМА. Комп’ютерні науки. – 2010. –112. – С. 26–30. 6. ilpubs.stanford.edu:8090/604/1/2003-44.pdf 7. www.erlang. org/.../erlang-book-part1.pdf 8. http://en.wikipedia.org/wiki/Web_crawler 9. Глибовец Н.Н., Глибовец А.Н., Шабинский А.С. При- менение онтологий и методов текстового анализа при создании интеллектуальных поисковых систем // Проблемы управления и информатики. – 2011. – № 6. – С. 95–102. 10. Menczer F. ARACHNID: Adaptive Retrieval Agents Choosing Heuristic Neighborhoods for Information Discovery / D. Fisher, ed., Machine Learning: Proc. of the 14th Int. Conf. (ICML97), 1997 11. http://en.wikipedia.org/wiki/Robots_Exclusion_Standard 12. http://en.wikipedia.org/wiki/Distributed_web_crawling 13. http://en.wikipedia.org/wiki/MongoDB 14. stackoverflow.com/.../mongodb-erlang-erla... 15. http://habrahabr.ru/post/114663/ 16. http://express-js.ru/mongo-book/Glava-7-Proizvoditel- nost-i-instrumentarij.html Поступила 18.10.2012 Тел. для справок: +38 044 463-6985 (Киeв) E-mail: glib@ukma.kiev.ua © И.А. Вавилин, А.Н. Глибовец , Н.Н. Глибовец , 2013  Внимание ! Оформление подписки для желающих опубликовать статьи в нашем журнале обязательно. В розничную продажу журнал не поступает. Подписной индекс 71008 << /ASCII85EncodePages false /AllowTransparency false /AutoPositionEPSFiles true /AutoRotatePages /None /Binding /Left /CalGrayProfile (Dot Gain 20%) /CalRGBProfile (sRGB IEC61966-2.1) /CalCMYKProfile (U.S. Web Coated \050SWOP\051 v2) /sRGBProfile (sRGB IEC61966-2.1) /CannotEmbedFontPolicy /Error /CompatibilityLevel 1.4 /CompressObjects /Tags /CompressPages true /ConvertImagesToIndexed true /PassThroughJPEGImages true /CreateJobTicket false /DefaultRenderingIntent /Default /DetectBlends true /DetectCurves 0.0000 /ColorConversionStrategy /CMYK /DoThumbnails false /EmbedAllFonts true /EmbedOpenType false /ParseICCProfilesInComments true /EmbedJobOptions true /DSCReportingLevel 0 /EmitDSCWarnings false /EndPage -1 /ImageMemory 1048576 /LockDistillerParams false /MaxSubsetPct 100 /Optimize true /OPM 1 /ParseDSCComments true /ParseDSCCommentsForDocInfo true /PreserveCopyPage true /PreserveDICMYKValues true /PreserveEPSInfo true /PreserveFlatness true /PreserveHalftoneInfo false /PreserveOPIComments true /PreserveOverprintSettings true /StartPage 1 /SubsetFonts true /TransferFunctionInfo /Apply /UCRandBGInfo /Preserve /UsePrologue false /ColorSettingsFile () /AlwaysEmbed [ true ] /NeverEmbed [ true ] /AntiAliasColorImages false /CropColorImages true /ColorImageMinResolution 300 /ColorImageMinResolutionPolicy /OK /DownsampleColorImages true /ColorImageDownsampleType /Bicubic /ColorImageResolution 300 /ColorImageDepth -1 /ColorImageMinDownsampleDepth 1 /ColorImageDownsampleThreshold 1.50000 /EncodeColorImages true /ColorImageFilter /DCTEncode /AutoFilterColorImages true /ColorImageAutoFilterStrategy /JPEG /ColorACSImageDict << /QFactor 0.15 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >> /ColorImageDict << /QFactor 0.15 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >> /JPEG2000ColorACSImageDict << /TileWidth 256 /TileHeight 256 /Quality 30 >> /JPEG2000ColorImageDict << /TileWidth 256 /TileHeight 256 /Quality 30 >> /AntiAliasGrayImages false /CropGrayImages true /GrayImageMinResolution 300 /GrayImageMinResolutionPolicy /OK /DownsampleGrayImages true /GrayImageDownsampleType /Bicubic /GrayImageResolution 300 /GrayImageDepth -1 /GrayImageMinDownsampleDepth 2 /GrayImageDownsampleThreshold 1.50000 /EncodeGrayImages true /GrayImageFilter /DCTEncode /AutoFilterGrayImages true /GrayImageAutoFilterStrategy /JPEG /GrayACSImageDict << /QFactor 0.15 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >> /GrayImageDict << /QFactor 0.15 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >> /JPEG2000GrayACSImageDict << /TileWidth 256 /TileHeight 256 /Quality 30 >> /JPEG2000GrayImageDict << /TileWidth 256 /TileHeight 256 /Quality 30 >> /AntiAliasMonoImages false /CropMonoImages true /MonoImageMinResolution 1200 /MonoImageMinResolutionPolicy /OK /DownsampleMonoImages true /MonoImageDownsampleType /Bicubic /MonoImageResolution 1200 /MonoImageDepth -1 /MonoImageDownsampleThreshold 1.50000 /EncodeMonoImages true /MonoImageFilter /CCITTFaxEncode /MonoImageDict << /K -1 >> /AllowPSXObjects false /CheckCompliance [ /None ] /PDFX1aCheck false /PDFX3Check false /PDFXCompliantPDFOnly false /PDFXNoTrimBoxError true /PDFXTrimBoxToMediaBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXSetBleedBoxToMediaBox true /PDFXBleedBoxToTrimBoxOffset [ 0.00000 0.00000 0.00000 0.00000 ] /PDFXOutputIntentProfile () /PDFXOutputConditionIdentifier () /PDFXOutputCondition () /PDFXRegistryName () /PDFXTrapped /False /CreateJDFFile false /Description << /ARA <FEFF06270633062A062E062F0645002006470630064700200627064406250639062F0627062F0627062A002006440625064606340627062100200648062B062706260642002000410064006F00620065002000500044004600200645062A064806270641064206290020064406440637062806270639062900200641064A00200627064406450637062706280639002006300627062A0020062F0631062C0627062A002006270644062C0648062F0629002006270644063906270644064A0629061B0020064A06450643064600200641062A062D00200648062B0627062606420020005000440046002006270644064506460634062306290020062806270633062A062E062F062706450020004100630072006F0062006100740020064800410064006F006200650020005200650061006400650072002006250635062F0627063100200035002E0030002006480627064406250635062F062706310627062A0020062706440623062D062F062B002E0635062F0627063100200035002E0030002006480627064406250635062F062706310627062A0020062706440623062D062F062B002E> /BGR <FEFF04180437043f043e043b043704320430043904420435002004420435043704380020043d0430044104420440043e0439043a0438002c00200437043000200434043000200441044a0437043404300432043004420435002000410064006f00620065002000500044004600200434043e043a0443043c0435043d04420438002c0020043c0430043a04410438043c0430043b043d043e0020043f044004380433043e04340435043d04380020043704300020043204380441043e043a043e043a0430044704350441044204320435043d0020043f04350447043004420020043704300020043f044004350434043f0435044704300442043d04300020043f043e04340433043e0442043e0432043a0430002e002000200421044a04370434043004340435043d043804420435002000500044004600200434043e043a0443043c0435043d044204380020043c043e0433043004420020043404300020044104350020043e0442043204300440044f0442002004410020004100630072006f00620061007400200438002000410064006f00620065002000520065006100640065007200200035002e00300020043800200441043b0435043404320430044904380020043204350440044104380438002e> /CHS <FEFF4f7f75288fd94e9b8bbe5b9a521b5efa7684002000410064006f006200650020005000440046002065876863900275284e8e9ad88d2891cf76845370524d53705237300260a853ef4ee54f7f75280020004100630072006f0062006100740020548c002000410064006f00620065002000520065006100640065007200200035002e003000204ee553ca66f49ad87248672c676562535f00521b5efa768400200050004400460020658768633002> /CHT <FEFF4f7f752890194e9b8a2d7f6e5efa7acb7684002000410064006f006200650020005000440046002065874ef69069752865bc9ad854c18cea76845370524d5370523786557406300260a853ef4ee54f7f75280020004100630072006f0062006100740020548c002000410064006f00620065002000520065006100640065007200200035002e003000204ee553ca66f49ad87248672c4f86958b555f5df25efa7acb76840020005000440046002065874ef63002> /CZE <FEFF005400610074006f0020006e006100730074006100760065006e00ed00200070006f0075017e0069006a007400650020006b0020007600790074007600e101590065006e00ed00200064006f006b0075006d0065006e0074016f002000410064006f006200650020005000440046002c0020006b00740065007200e90020007300650020006e0065006a006c00e90070006500200068006f006400ed002000700072006f0020006b00760061006c00690074006e00ed0020007400690073006b00200061002000700072006500700072006500730073002e002000200056007900740076006f01590065006e00e900200064006f006b0075006d0065006e007400790020005000440046002000620075006400650020006d006f017e006e00e90020006f007400650076015900ed007400200076002000700072006f006700720061006d0065006300680020004100630072006f00620061007400200061002000410064006f00620065002000520065006100640065007200200035002e0030002000610020006e006f0076011b006a016100ed00630068002e> /DAN <FEFF004200720075006700200069006e0064007300740069006c006c0069006e006700650072006e0065002000740069006c0020006100740020006f007000720065007400740065002000410064006f006200650020005000440046002d0064006f006b0075006d0065006e007400650072002c0020006400650072002000620065006400730074002000650067006e006500720020007300690067002000740069006c002000700072006500700072006500730073002d007500640073006b007200690076006e0069006e00670020006100660020006800f8006a0020006b00760061006c0069007400650074002e0020004400650020006f007000720065007400740065006400650020005000440046002d0064006f006b0075006d0065006e0074006500720020006b0061006e002000e50062006e00650073002000690020004100630072006f00620061007400200065006c006c006500720020004100630072006f006200610074002000520065006100640065007200200035002e00300020006f00670020006e0079006500720065002e> /DEU <FEFF00560065007200770065006e00640065006e0020005300690065002000640069006500730065002000450069006e007300740065006c006c0075006e00670065006e0020007a0075006d002000450072007300740065006c006c0065006e00200076006f006e002000410064006f006200650020005000440046002d0044006f006b0075006d0065006e00740065006e002c00200076006f006e002000640065006e0065006e002000530069006500200068006f006300680077006500720074006900670065002000500072006500700072006500730073002d0044007200750063006b0065002000650072007a0065007500670065006e0020006d00f60063006800740065006e002e002000450072007300740065006c006c007400650020005000440046002d0044006f006b0075006d0065006e007400650020006b00f6006e006e0065006e0020006d006900740020004100630072006f00620061007400200075006e0064002000410064006f00620065002000520065006100640065007200200035002e00300020006f0064006500720020006800f600680065007200200067006500f600660066006e00650074002000770065007200640065006e002e> /ESP <FEFF005500740069006c0069006300650020006500730074006100200063006f006e0066006900670075007200610063006900f3006e0020007000610072006100200063007200650061007200200064006f00630075006d0065006e0074006f00730020005000440046002000640065002000410064006f0062006500200061006400650063007500610064006f00730020007000610072006100200069006d0070007200650073006900f3006e0020007000720065002d0065006400690074006f007200690061006c00200064006500200061006c00740061002000630061006c0069006400610064002e002000530065002000700075006500640065006e00200061006200720069007200200064006f00630075006d0065006e0074006f00730020005000440046002000630072006500610064006f007300200063006f006e0020004100630072006f006200610074002c002000410064006f00620065002000520065006100640065007200200035002e003000200079002000760065007200730069006f006e0065007300200070006f00730074006500720069006f007200650073002e> /ETI <FEFF004b00610073007500740061006700650020006e0065006900640020007300e4007400740065006900640020006b00760061006c006900740065006500740073006500200074007200fc006b006900650065006c007300650020007000720069006e00740069006d0069007300650020006a0061006f006b007300200073006f00620069006c0069006b0065002000410064006f006200650020005000440046002d0064006f006b0075006d0065006e00740069006400650020006c006f006f006d006900730065006b0073002e00200020004c006f006f0064007500640020005000440046002d0064006f006b0075006d0065006e00740065002000730061006100740065002000610076006100640061002000700072006f006700720061006d006d006900640065006700610020004100630072006f0062006100740020006e0069006e0067002000410064006f00620065002000520065006100640065007200200035002e00300020006a00610020007500750065006d006100740065002000760065007200730069006f006f006e00690064006500670061002e000d000a> /FRA <FEFF005500740069006c006900730065007a00200063006500730020006f007000740069006f006e00730020006100660069006e00200064006500200063007200e900650072002000640065007300200064006f00630075006d0065006e00740073002000410064006f00620065002000500044004600200070006f0075007200200075006e00650020007100750061006c0069007400e90020006400270069006d007000720065007300730069006f006e00200070007200e9007000720065007300730065002e0020004c0065007300200064006f00630075006d0065006e00740073002000500044004600200063007200e900e90073002000700065007500760065006e0074002000ea0074007200650020006f007500760065007200740073002000640061006e00730020004100630072006f006200610074002c002000610069006e00730069002000710075002700410064006f00620065002000520065006100640065007200200035002e0030002000650074002000760065007200730069006f006e007300200075006c007400e90072006900650075007200650073002e> /GRE <FEFF03a703c103b703c303b903bc03bf03c003bf03b903ae03c303c403b5002003b103c503c403ad03c2002003c403b903c2002003c103c503b803bc03af03c303b503b903c2002003b303b903b1002003bd03b1002003b403b703bc03b903bf03c503c103b303ae03c303b503c403b5002003ad03b303b303c103b103c603b1002000410064006f006200650020005000440046002003c003bf03c5002003b503af03bd03b103b9002003ba03b103c42019002003b503be03bf03c703ae03bd002003ba03b103c403ac03bb03bb03b703bb03b1002003b303b903b1002003c003c103bf002d03b503ba03c403c503c003c903c403b903ba03ad03c2002003b503c103b303b103c303af03b503c2002003c503c803b703bb03ae03c2002003c003bf03b903cc03c403b703c403b103c2002e0020002003a403b10020005000440046002003ad03b303b303c103b103c603b1002003c003bf03c5002003ad03c703b503c403b5002003b403b703bc03b903bf03c503c103b303ae03c303b503b9002003bc03c003bf03c103bf03cd03bd002003bd03b1002003b103bd03bf03b903c703c403bf03cd03bd002003bc03b5002003c403bf0020004100630072006f006200610074002c002003c403bf002000410064006f00620065002000520065006100640065007200200035002e0030002003ba03b103b9002003bc03b503c403b103b303b503bd03ad03c303c403b503c103b503c2002003b503ba03b403cc03c303b503b903c2002e> /HEB <FEFF05D405E905EA05DE05E905D5002005D105D405D205D305E805D505EA002005D005DC05D4002005DB05D305D9002005DC05D905E605D505E8002005DE05E105DE05DB05D9002000410064006F006200650020005000440046002005D405DE05D505EA05D005DE05D905DD002005DC05D405D305E405E105EA002005E705D305DD002D05D305E405D505E1002005D005D905DB05D505EA05D905EA002E002005DE05E105DE05DB05D90020005000440046002005E905E005D505E605E805D5002005E005D905EA05E005D905DD002005DC05E405EA05D905D705D4002005D105D005DE05E605E205D505EA0020004100630072006F006200610074002005D5002D00410064006F00620065002000520065006100640065007200200035002E0030002005D505D205E805E105D005D505EA002005DE05EA05E705D305DE05D505EA002005D905D505EA05E8002E05D005DE05D905DD002005DC002D005000440046002F0058002D0033002C002005E205D905D905E005D5002005D105DE05D305E805D905DA002005DC05DE05E905EA05DE05E9002005E905DC0020004100630072006F006200610074002E002005DE05E105DE05DB05D90020005000440046002005E905E005D505E605E805D5002005E005D905EA05E005D905DD002005DC05E405EA05D905D705D4002005D105D005DE05E605E205D505EA0020004100630072006F006200610074002005D5002D00410064006F00620065002000520065006100640065007200200035002E0030002005D505D205E805E105D005D505EA002005DE05EA05E705D305DE05D505EA002005D905D505EA05E8002E> /HRV (Za stvaranje Adobe PDF dokumenata najpogodnijih za visokokvalitetni ispis prije tiskanja koristite ove postavke. Stvoreni PDF dokumenti mogu se otvoriti Acrobat i Adobe Reader 5.0 i kasnijim verzijama.) /HUN <FEFF004b0069007600e1006c00f30020006d0069006e0151007300e9006701710020006e0079006f006d00640061006900200065006c0151006b00e90073007a00ed007401510020006e0079006f006d00740061007400e100730068006f007a0020006c006500670069006e006b00e1006200620020006d0065006700660065006c0065006c0151002000410064006f00620065002000500044004600200064006f006b0075006d0065006e00740075006d006f006b0061007400200065007a0065006b006b0065006c0020006100200062006500e1006c006c00ed007400e10073006f006b006b0061006c0020006b00e90073007a00ed0074006800650074002e0020002000410020006c00e90074007200650068006f007a006f00740074002000500044004600200064006f006b0075006d0065006e00740075006d006f006b00200061007a0020004100630072006f006200610074002000e9007300200061007a002000410064006f00620065002000520065006100640065007200200035002e0030002c0020007600610067007900200061007a002000610074007400f3006c0020006b00e9007301510062006200690020007600650072007a006900f3006b006b0061006c0020006e00790069007400680061007400f3006b0020006d00650067002e> /ITA <FEFF005500740069006c0069007a007a006100720065002000710075006500730074006500200069006d0070006f007300740061007a0069006f006e00690020007000650072002000630072006500610072006500200064006f00630075006d0065006e00740069002000410064006f00620065002000500044004600200070006900f900200061006400610074007400690020006100200075006e00610020007000720065007300740061006d0070006100200064006900200061006c007400610020007100750061006c0069007400e0002e0020004900200064006f00630075006d0065006e007400690020005000440046002000630072006500610074006900200070006f00730073006f006e006f0020006500730073006500720065002000610070006500720074006900200063006f006e0020004100630072006f00620061007400200065002000410064006f00620065002000520065006100640065007200200035002e003000200065002000760065007200730069006f006e006900200073007500630063006500730073006900760065002e> /JPN <FEFF9ad854c18cea306a30d730ea30d730ec30b951fa529b7528002000410064006f0062006500200050004400460020658766f8306e4f5c6210306b4f7f75283057307e305930023053306e8a2d5b9a30674f5c62103055308c305f0020005000440046002030d530a130a430eb306f3001004100630072006f0062006100740020304a30883073002000410064006f00620065002000520065006100640065007200200035002e003000204ee5964d3067958b304f30533068304c3067304d307e305930023053306e8a2d5b9a306b306f30d530a930f330c8306e57cb30818fbc307f304c5fc59808306730593002> /KOR <FEFFc7740020c124c815c7440020c0acc6a9d558c5ec0020ace0d488c9c80020c2dcd5d80020c778c1c4c5d00020ac00c7a50020c801d569d55c002000410064006f0062006500200050004400460020bb38c11cb97c0020c791c131d569b2c8b2e4002e0020c774b807ac8c0020c791c131b41c00200050004400460020bb38c11cb2940020004100630072006f0062006100740020bc0f002000410064006f00620065002000520065006100640065007200200035002e00300020c774c0c1c5d0c11c0020c5f40020c2180020c788c2b5b2c8b2e4002e> /LTH <FEFF004e006100750064006f006b0069007400650020016100690075006f007300200070006100720061006d006500740072007500730020006e006f0072011700640061006d00690020006b0075007200740069002000410064006f00620065002000500044004600200064006f006b0075006d0065006e007400750073002c0020006b00750072006900650020006c0061006200690061007500730069006100690020007000720069007400610069006b007900740069002000610075006b01610074006f00730020006b006f006b007900620117007300200070006100720065006e006700740069006e00690061006d00200073007000610075007300640069006e0069006d00750069002e0020002000530075006b0075007200740069002000500044004600200064006f006b0075006d0065006e007400610069002000670061006c006900200062016b007400690020006100740069006400610072006f006d00690020004100630072006f006200610074002000690072002000410064006f00620065002000520065006100640065007200200035002e0030002000610072002000760117006c00650073006e0117006d00690073002000760065007200730069006a006f006d00690073002e> /LVI <FEFF0049007a006d0061006e0074006f006a00690065007400200161006f00730020006900650073007400610074012b006a0075006d00750073002c0020006c0061006900200076006500690064006f00740075002000410064006f00620065002000500044004600200064006f006b0075006d0065006e007400750073002c0020006b006100730020006900720020012b00700061016100690020007000690065006d01130072006f00740069002000610075006700730074006100730020006b00760061006c0069007401010074006500730020007000690072006d007300690065007300700069006501610061006e006100730020006400720075006b00610069002e00200049007a0076006500690064006f006a006900650074002000500044004600200064006f006b0075006d0065006e007400750073002c0020006b006f002000760061007200200061007400760113007200740020006100720020004100630072006f00620061007400200075006e002000410064006f00620065002000520065006100640065007200200035002e0030002c0020006b0101002000610072012b00200074006f0020006a00610075006e0101006b0101006d002000760065007200730069006a0101006d002e> /NLD (Gebruik deze instellingen om Adobe PDF-documenten te maken die zijn geoptimaliseerd voor prepress-afdrukken van hoge kwaliteit. De gemaakte PDF-documenten kunnen worden geopend met Acrobat en Adobe Reader 5.0 en hoger.) /NOR <FEFF004200720075006b00200064006900730073006500200069006e006e007300740069006c006c0069006e00670065006e0065002000740069006c002000e50020006f0070007000720065007400740065002000410064006f006200650020005000440046002d0064006f006b0075006d0065006e00740065007200200073006f006d00200065007200200062006500730074002000650067006e0065007400200066006f00720020006600f80072007400720079006b006b0073007500740073006b00720069006600740020006100760020006800f800790020006b00760061006c0069007400650074002e0020005000440046002d0064006f006b0075006d0065006e00740065006e00650020006b0061006e002000e50070006e00650073002000690020004100630072006f00620061007400200065006c006c00650072002000410064006f00620065002000520065006100640065007200200035002e003000200065006c006c00650072002000730065006e006500720065002e> /POL <FEFF0055007300740061007700690065006e0069006100200064006f002000740077006f0072007a0065006e0069006100200064006f006b0075006d0065006e007400f300770020005000440046002000700072007a0065007a006e00610063007a006f006e00790063006800200064006f002000770079006400720075006b00f30077002000770020007700790073006f006b00690065006a0020006a0061006b006f015b00630069002e002000200044006f006b0075006d0065006e0074007900200050004400460020006d006f017c006e00610020006f007400770069006500720061010700200077002000700072006f006700720061006d006900650020004100630072006f00620061007400200069002000410064006f00620065002000520065006100640065007200200035002e0030002000690020006e006f00770073007a0079006d002e> /PTB <FEFF005500740069006c0069007a006500200065007300730061007300200063006f006e00660069006700750072006100e700f50065007300200064006500200066006f0072006d00610020006100200063007200690061007200200064006f00630075006d0065006e0074006f0073002000410064006f0062006500200050004400460020006d00610069007300200061006400650071007500610064006f00730020007000610072006100200070007200e9002d0069006d0070007200650073007300f50065007300200064006500200061006c007400610020007100750061006c00690064006100640065002e0020004f007300200064006f00630075006d0065006e0074006f00730020005000440046002000630072006900610064006f007300200070006f00640065006d0020007300650072002000610062006500720074006f007300200063006f006d0020006f0020004100630072006f006200610074002000650020006f002000410064006f00620065002000520065006100640065007200200035002e0030002000650020007600650072007300f50065007300200070006f00730074006500720069006f007200650073002e> /RUM <FEFF005500740069006c0069007a00610163006900200061006300650073007400650020007300650074010300720069002000700065006e007400720075002000610020006300720065006100200064006f00630075006d0065006e00740065002000410064006f006200650020005000440046002000610064006500630076006100740065002000700065006e0074007200750020007400690070010300720069007200650061002000700072006500700072006500730073002000640065002000630061006c006900740061007400650020007300750070006500720069006f006100720103002e002000200044006f00630075006d0065006e00740065006c00650020005000440046002000630072006500610074006500200070006f00740020006600690020006400650073006300680069007300650020006300750020004100630072006f006200610074002c002000410064006f00620065002000520065006100640065007200200035002e00300020015f00690020007600650072007300690075006e0069006c006500200075006c0074006500720069006f006100720065002e> /RUS <FEFF04180441043f043e043b044c04370443043904420435002004340430043d043d044b04350020043d0430044104420440043e0439043a043800200434043b044f00200441043e043704340430043d0438044f00200434043e043a0443043c0435043d0442043e0432002000410064006f006200650020005000440046002c0020043c0430043a04410438043c0430043b044c043d043e0020043f043e04340445043e0434044f04490438044500200434043b044f00200432044b0441043e043a043e043a0430044704350441044204320435043d043d043e0433043e00200434043e043f0435044704300442043d043e0433043e00200432044b0432043e04340430002e002000200421043e043704340430043d043d044b04350020005000440046002d0434043e043a0443043c0435043d0442044b0020043c043e0436043d043e0020043e0442043a0440044b043204300442044c002004410020043f043e043c043e0449044c044e0020004100630072006f00620061007400200438002000410064006f00620065002000520065006100640065007200200035002e00300020043800200431043e043b043504350020043f043e04370434043d043804450020043204350440044104380439002e> /SKY <FEFF0054006900650074006f0020006e006100730074006100760065006e0069006100200070006f0075017e0069007400650020006e00610020007600790074007600e100720061006e0069006500200064006f006b0075006d0065006e0074006f0076002000410064006f006200650020005000440046002c0020006b0074006f007200e90020007300610020006e0061006a006c0065007001610069006500200068006f0064006900610020006e00610020006b00760061006c00690074006e00fa00200074006c0061010d00200061002000700072006500700072006500730073002e00200056007900740076006f00720065006e00e900200064006f006b0075006d0065006e007400790020005000440046002000620075006400650020006d006f017e006e00e90020006f00740076006f00720069016500200076002000700072006f006700720061006d006f006300680020004100630072006f00620061007400200061002000410064006f00620065002000520065006100640065007200200035002e0030002000610020006e006f0076016100ed00630068002e> /SLV <FEFF005400650020006e006100730074006100760069007400760065002000750070006f0072006100620069007400650020007a00610020007500730074007600610072006a0061006e006a006500200064006f006b0075006d0065006e0074006f0076002000410064006f006200650020005000440046002c0020006b006900200073006f0020006e0061006a007000720069006d00650072006e0065006a016100690020007a00610020006b0061006b006f0076006f00730074006e006f0020007400690073006b0061006e006a00650020007300200070007200690070007200610076006f0020006e00610020007400690073006b002e00200020005500730074007600610072006a0065006e006500200064006f006b0075006d0065006e0074006500200050004400460020006a00650020006d006f0067006f010d00650020006f0064007000720065007400690020007a0020004100630072006f00620061007400200069006e002000410064006f00620065002000520065006100640065007200200035002e003000200069006e0020006e006f00760065006a01610069006d002e> /SUO <FEFF004b00e40079007400e40020006e00e40069007400e4002000610073006500740075006b007300690061002c0020006b0075006e0020006c0075006f00740020006c00e400680069006e006e00e4002000760061006100740069007600610061006e0020007000610069006e006100740075006b00730065006e002000760061006c006d0069007300740065006c00750074007900f6006800f6006e00200073006f00700069007600690061002000410064006f0062006500200050004400460020002d0064006f006b0075006d0065006e007400740065006a0061002e0020004c0075006f0064007500740020005000440046002d0064006f006b0075006d0065006e00740069007400200076006f0069006400610061006e0020006100760061007400610020004100630072006f0062006100740069006c006c00610020006a0061002000410064006f00620065002000520065006100640065007200200035002e0030003a006c006c00610020006a006100200075007500640065006d006d0069006c006c0061002e> /SVE <FEFF0041006e007600e4006e00640020006400650020006800e4007200200069006e0073007400e4006c006c006e0069006e006700610072006e00610020006f006d002000640075002000760069006c006c00200073006b006100700061002000410064006f006200650020005000440046002d0064006f006b0075006d0065006e007400200073006f006d002000e400720020006c00e4006d0070006c0069006700610020006600f60072002000700072006500700072006500730073002d007500740073006b00720069006600740020006d006500640020006800f600670020006b00760061006c0069007400650074002e002000200053006b006100700061006400650020005000440046002d0064006f006b0075006d0065006e00740020006b0061006e002000f600700070006e00610073002000690020004100630072006f0062006100740020006f00630068002000410064006f00620065002000520065006100640065007200200035002e00300020006f00630068002000730065006e006100720065002e> /TUR <FEFF005900fc006b00730065006b0020006b0061006c006900740065006c0069002000f6006e002000790061007a006401310072006d00610020006200610073006b013100730131006e006100200065006e0020006900790069002000750079006100620069006c006500630065006b002000410064006f006200650020005000440046002000620065006c00670065006c0065007200690020006f006c0075015f007400750072006d0061006b0020006900e70069006e00200062007500200061007900610072006c0061007201310020006b0075006c006c0061006e0131006e002e00200020004f006c0075015f0074007500720075006c0061006e0020005000440046002000620065006c00670065006c0065007200690020004100630072006f006200610074002000760065002000410064006f00620065002000520065006100640065007200200035002e003000200076006500200073006f006e0072006100730131006e00640061006b00690020007300fc007200fc006d006c00650072006c00650020006100e70131006c006100620069006c00690072002e> /UKR <FEFF04120438043a043e0440043804410442043e043204430439044204350020044604560020043f043004400430043c043504420440043800200434043b044f0020044104420432043e04400435043d043d044f00200434043e043a0443043c0435043d044204560432002000410064006f006200650020005000440046002c0020044f043a04560020043d04300439043a04400430044904350020043f045604340445043e0434044f0442044c00200434043b044f0020043204380441043e043a043e044f043a04560441043d043e0433043e0020043f0435044004350434043404400443043a043e0432043e0433043e0020043404400443043a0443002e00200020042104420432043e04400435043d045600200434043e043a0443043c0435043d0442043800200050004400460020043c043e0436043d04300020043204560434043a0440043804420438002004430020004100630072006f006200610074002004420430002000410064006f00620065002000520065006100640065007200200035002e0030002004300431043e0020043f04560437043d04560448043e04570020043204350440044104560457002e> /ENU (Use these settings to create Adobe PDF documents best suited for high-quality prepress printing. Created PDF documents can be opened with Acrobat and Adobe Reader 5.0 and later.) >> /Namespace [ (Adobe) (Common) (1.0) ] /OtherNamespaces [ << /AsReaderSpreads false /CropImagesToFrames true /ErrorControl /WarnAndContinue /FlattenerIgnoreSpreadOverrides false /IncludeGuidesGrids false /IncludeNonPrinting false /IncludeSlug false /Namespace [ (Adobe) (InDesign) (4.0) ] /OmitPlacedBitmaps false /OmitPlacedEPS false /OmitPlacedPDF false /SimulateOverprint /Legacy >> << /AddBleedMarks false /AddColorBars false /AddCropMarks false /AddPageInfo false /AddRegMarks false /ConvertColors /ConvertToCMYK /DestinationProfileName () /DestinationProfileSelector /DocumentCMYK /Downsample16BitImages true /FlattenerPreset << /PresetSelector /MediumResolution >> /FormElements false /GenerateStructure false /IncludeBookmarks false /IncludeHyperlinks false /IncludeInteractive false /IncludeLayers false /IncludeProfiles false /MultimediaHandling /UseObjectSettings /Namespace [ (Adobe) (CreativeSuite) (2.0) ] /PDFXOutputIntentProfileSelector /DocumentCMYK /PreserveEditing true /UntaggedCMYKHandling /LeaveUntagged /UntaggedRGBHandling /UseDocumentProfile /UseDocumentBleed false >> ] >> setdistillerparams << /HWResolution [2400 2400] /PageSize [612.000 792.000] >> setpagedevice