# Диплом

Михаил Валерьевич Садов

ВОт и подходит моя головная боль к концу. Хоят еще ГОСЫ, эх.
Помнится, кто-то обещал оценить Диплом или же помчь с ним. Выкладоваю почти полностью готовую работу. Надеюсь на ваши советы и подсказки.
почему почти? Потому что еще надо будет добвить Аннотацию, Введение, ТЗ и список Литературы. Примерный вариант напишу сегодня, чуть позже (устал) и выложу их отдельным файлом. Вот тут нужна будет особеннная помощь.
Надеюсь, верю, жду, что кто-то поможет добрым советом или еще чем.
Док файл

Садов Михаил Валерьевич

Диплом

Origin: http://samlib.ru/s/sadow_m_w/diplom.shtml

Создан: 30/05/2011, изменен: 30/05/2011, 136k

Статья: Нет

ВОт и подходит моя головная боль к концу. Хоят еще ГОСЫ, эх.

Помнится, кто-то обещал оценить Диплом или же помчь с ним. Выкладоваю почти полностью готовую работу. Надеюсь на ваши советы и подсказки.

почему почти? Потому что еще надо будет добвить Аннотацию, Введение, ТЗ и список Литературы. Примерный вариант напишу сегодня, чуть позже (устал) и выложу их отдельным файлом. Вот тут нужна будет особеннная помощь.

Надеюсь, верю, жду, что кто-то поможет добрым советом или еще чем.

Док файл

============================================================

Оглавление Глава 1 Теоретические основы

1.1 Социальные сети

1.1.1 Общие сведения

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

Связь осуществляется посредством веб-сервиса внутренней почты или мгновенного обмена сообщениями.

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

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

Одна из обычных черт социальных сетей -- система "друзей" и "групп".

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

Различают два вида сетей: открытые и закрытые. Речь в этом случае идёт о степени доступа, как групп пользователей, так и гостей на просторы сети. 1.1.2 Развитие

С развитием технологий Web 2.0 социальные сети обрели осязаемую основу в виде порталов и веб-сервисов. Так, найдя на одном из таких сайтов совершенно незнакомого для себя человека, можно увидеть цепочку промежуточных знакомств, через которую вы с ним связаны.

Победное шествие по Интернету социальные сети начали в 1995 году с американского портала Classmates.com ("Одноклассники" являются его русским аналогом). Проект оказался весьма успешным, что в следующие несколько лет спровоцировало появление не одного десятка аналогичных сервисов. Но официальным началом бума социальных сетей принято считать 2003--2004 годы, когда были запущены LinkedIn, MySpace и Facebook.

И если LinkedIn создавалась с целью установления/поддержания деловых контактов, то владельцы MySpace и Facebook сделали ставку в первую очередь на удовлетворение человеческой потребности в самовыражении. Ведь, в соответствии с пирамидой Маслоу, именно самовыражение является высшей потребностью человека, опережая даже признание и общение. Социальные сети стали своего рода Интернет-пристанищем, где каждый может найти техническую и социальную базу для создания своего виртуального "Я". При этом каждый пользователь получил возможность не просто общаться и творить, но и делиться плодами своего творчества с многомиллионной аудиторией той или иной социальной сети. 1.1.3 Крупнейшие сети

В разных регионах популярность социальных сетей различна. Так, сети MySpace, Facebook, Twitter и LinkedIn более популярны и распространены в Северной Америке. Другие сети: Nexopia (Канада); Bebo (Великобритания); Facebook, Hi5, dol2day (Германия), Tagged.com (англ.), XING и Skyrock (в разных странах Европы); Public Broadcasting Service, Orkut, Facebook и Hi5 (Южная и Центральная Америки) (55 % бразильских пользователей сетей предпочитает Orkut); Friendster, Multiply, Orkut, Xiaonei и Cyworld (Азия).

По числу пользователей лидируют Facebook, MySpace, Twitter, В Контакте,Windows Live Spaces, Habbo Hotel, Friendster (Филиппины, Малайзия, Индонезия, Сингапур), Hi5, Tagged.com.

В России наибольшую популярность получили сети "ВКонтакт", "Мой круг", "Мой Мир@mail.ru", "Одноклассники.ru". Все они созданы в России и для России.

Русскоязычные:

-- В Контакте

-- Мой Круг

-- Мой Мир@mail.ru

-- Одноклассники.ru

-- ЖЖ

-- В кругу друзей Украиноязычные:Connect (есть русскоязычный интерфейс) Англоязычные:

-- Bebo (англ.)

-- Facebook (есть русскоязычный интерфейс)

-- Last.fm (есть русскоязычный интерфейс)

-- LinkedIn

-- MySpace (есть русскоязычный интерфейс)

-- XING

-- MyAnimeList (англ.)

-- Habbo Hotel

1.1.4 Подвиды

Помимо перечисленных социальных сетей имеются следующие типы ресурсов в формате Веб 2.0:

1.2 Программные интерфейсы социальных сетей

1.2.1 Общие сведения

Программный интерфейс -- функциональность, которую некоторый программный компонент предоставляет другим программным компонентам. Можно различать два вида такой функциональности: та, что используется при создании прикладных программ, и та, что используется при создании системных компонентов. Первая обычно называется интерфейсом программирования приложений (API, англ. application programming interface), вторая может называться интерфейсом программирования компонентов операционной системы или интерфейсом системного программирования (SPI, англ. system programming interface). Кроме того, программные интерфейсы могут быть разноуровневыми, относясь либо к уровню программного кода (API и SPI), либо к уровню кода машинного (ABI, англ. application binary interface, и SBI, англ. system binary interface).

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

Коммуникационные инструменты применяются для записи, хранения и представления коммуникационных данных, чаще всего в текстовом виде, но все больше в аудио- и видеоформатах.

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

1.2.1 ВКонтакт

"ВКонтакт" как многие другие социальные сети предлагает сторонним ресурсам использовать специально разработанные инструменты -- виджеты -- для глубокой интеграции с социальной сетью. Эти решения позволяют встраивать в сайты систему комментариев для пользователей, сообщества, систему опросов, а также возможность легко поделиться ссылкой на материал с другими пользователями и авторизоваться на сайте.

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

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

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

Виджет "Мне нравится" - Виджет "Мне нравится" позволяет посетителям одним кликом выразить своё отношение к статье или моментально поделиться ссылкой на статью с друзьями.

Есть возможность просмотреть полный список оценивших статью и поделившихся ссылкой на нее с друзьями. Кроме этого по ссылке "К обзору комментариев" можно просмотреть все комментарии, оставленные ВКонтакте к размещенным ссылкам.

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

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

Виджет для сообществ - Виджет для сообществ тесно свяжет сайт с соответствующей группой или официальной страницей ВКонтакте. Виджет позволяет подписаться на новости сообщества, не покидая страницы. Пользователь также может оперативно получать новости через SMS.

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

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

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

Посетители одним нажатием кнопки мыши выразить своё мнение и моментально поделиться им с друзьями, опубликовав результат на своей странице ВКонтакте. Для этого пользователю не придется самому вводить какую-либо информацию, поэтому ссылка на статью с таким опросом сможет распространиться максимально быстро.

Виджет для авторизации - С помощью виджета для авторизации можно максимально просто предоставить пользователям возможность авторизовываться на ресурсе. Перед авторизацией пользователь сможет увидеть свою фотографию и уже авторизовавшихся друзей.

1.2.2 Facebook

Виджетов для Facebook в настоящее время существует великое множество, которые можно применять для раскрутки сайта:

1.2.3 Twitter

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

1.3 Форматы RSS

1.3.1 Введение в RSS и терминология

RSS - это формат, предназначенный для публикации новостей на новостных и подобных им сайтах, начиная от таких ведущих новостных сайтов, как Wired, Slashdot, и кончая личными сетевыми дневниками (weblog-ами). Но по сути, публиковать можно не только новости. Практически любой материал, который можно разделить на отдельные части, можно публиковать с помощью RSS: например, объявления о последних публикациях в "wiki", информация об обновлениях в CVS, история изменений, внесенных в книгу. После того, как информация преобразована в формат RSS, программа, понимающая этот формат, может вытягивать сведения о внесенных изменениях и в зависимости от результата, например, автоматически предпринимать какие-либо действия.

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

Основная идея реорганизации информации о web-сайтах относится ещё к 1995 году, когда Ramanathan V. Guha и другие разработчики из исследовательской лаборатории Apple Computer разработали Метаконтент Framework. Разработка же того, что впоследствии стало известно как RSS, началась ещё в 1997 году. Первую известность эта технология получила, когда компания Netscape использовала её для наполнения каналов своего портала Netcenter. Вскоре эта технология уже использовалась для трансляции контента на многих новостных сайтах -- в том числе таких, как BBC, CNET, CNN, Disney, Forbes, Wired, Red Herring, Slashdot, ZDNet и многих других. Первой открытой официальной версией RSS стала версия 0.90. Формат был основан на RDF (Resource Description Framework -- стандарт схемы описания источников) и многим показался слишком сложным, и тогда Netscape представила его упрощённую версию -- 0.91. В 2000 году произошло разделение формата:

Группа разработчиков из списка рассылки "RSS-DEV" предложила формат RSS 1.0, который был основан на стандартах XML и RDF организации W3C. Расширения формата предлагалось делать через модули расширений, описываемые в своих пространствах имён. Так как проект использует уже существующие стандарты, рассматривается его использование в рамках технологии Semantic Web.

Дейв Вайнер, работающий в компании "UserLand Software", опубликовал спецификацию RSS 0.92, которая является развитием версии 0.91 и ориентируется на тех пользователей, которым RDF-описание показалось излишне сложным. Вайнер смог популяризовать свою разработку среди многих изданий (в том числе "The New York Times") и придумал свою расшифровку аббревиатуры -- Really Simple Syndication (очень простое приобретение информации). Дальнейшим развитием этой ветки стал формат RSS 2.0, который тоже поддерживает расширения с помощью модулей, лежащих в своих пространствах имён.

В июне 2006 года появился конкурент RSS -- формат Atom.

5 января 2006 года с сайта my.netscape.com был удален файл rss-0.91.dtd, ссылки на который были размещены в большом количестве трансляций формата RSS версии 0.91. Это событие привело к сбою некоторых онлайновых и офлайновых агрегаторов, так как потоки, ссылающиеся на этот DTD стали неправильными. 1.3.3 Разновидности формата RSS

Существует семь различных формата RSS.

Таблица 1

Версии RSS и рекомендации

Версия | Владелец | За | Статус | Советы
0.90 | Netscape |  | Отменен версией 1.0 | Не пользуйтесь
0.91 | UserLand | Очень-очень простой | Официально отменен выходом версии 2.0. Но все еще популярен | Пользуйтесь для простых публикаций. Если вам понадобится большее, вы легко сможете перейти на 2.0
0.92, 0.93, 0.94 | UserLand | Больше возможностей, чем у 0.91 | Отменен с выходом версии 2.0 | Пользуйтесь версией 2.0
1.0 | RSS-DEV Working Group | Основан на языке RDF. Расширяется с помощью модулей. Не зависит от какой-либо одной компании | Стабилен. Ведется активная разработка модулей | Используйте для приложений, где используется RDF, либо в том случае, если вам нужен какой-то определенный модуль
2.0 | UserLand | Расширяется с помощью модулей. Прост при миграции с ветки форматов 0.9х | Стабилен. Ведется активная разработка модулей | Используйте для публикации новостей общего назначения

В формате RSS 0.91блок новостей (channel) состоит из заголовка, ссылки, данных о языке новостей и описания. После этого идет список самих новостей, где в каждом пункте указывается заголовок, ссылка и краткое описание новости.

По сравнению с форматом RSS 0,91, формат RSS 1,0 немного длиннее. По существу этот файл - RDF-документ, сохраненный в XML в котором представлена вся та же информация, что и в первом примере. Было добавлена только еще некоторая дополнительная информация, как, например, авторство каждой новости, и дату публикации, которых нет в RSS 0.91.

Несмотря на то, что RSS 1.0 является смесью RDF и XML, структурно он схож с предыдущими версиями RSS - схож достаточно, чтобы можно было рассматривать его как обычный XML-файл. Следовательно можно написать одну программу, которая умеет извлекать информацию из обоих форматов: и из RSS 0.91 и из RSS 1.0. Однако есть все-таки некоторые различия, о которых программа должна знать:

-- Корневым элементом в RSS 1.0 является rdf:RDF, а не rss. В этом случае придется либо явно обрабатывать оба этих элемента, либо просто игнорировать их и слепо извлекать только ту информацию, которая нужна.

-- В RSS 1.0 используются пространства имен (namespaces). И это пространство имен принимается по умолчанию. Кроме того в файле используются для элементов, специфичных для RDF, (Dublin Core) для дополнительных метаданных об авторах статей и датах публикаций.

Можно пойти двумя путями: если XML-парсер не понимает пространства имен, можно просто считать, что в файле используются элементы с префиксами и слепо искать в них элементы items и dc:creator. Такой способ сработает в большинстве случаев, так как в новостях формата RSS 1.0 чаще всего используется только пространство имен, принятое по умолчанию, и пространство имён Dublin Core. Конечно, данный способ - не элегантен, ведь нет никаких гарантий, что в каких-нибудь новостях не будет использовано какое-либо другое пространство имен (что вполне легально с точки зрения RDF и XML). В таком случае парсер пропустит все новости.

Если же XML-парсер понимает пространства имен, можно построить более изящное решение, которое сумеет разобрать новости и формате 0.91 и в формате 1.0.

-- Менее очевидный, но важный факт состоит в том, что в RSS 1.0 элементы item находятся вне элемента channel. В RSS 0.91 элементы item расположены внутри channel. В 0.90 они были снаружи. В 2.0 - они внутри.

-- В элементе channel есть один элемент items. Он нужен только для RDF-парсеров (задает порядок новостей). Его можно игнорировать и считать, что все новости идут в том порядке, в каком расположены элементы item.

В формате RSS 2.0 тоже используются пространства имен, как и в RSS 1.0. Но это не RDF. Как и в RSS 0.91, нет пространства имен, принятого по умолчанию, а новости (в элементах item) размещены опять в элементе channel. Глава 2 Интеграция сервисов социальных сетей на сайт

2.1 Функции и возможности сайта

Сайт "Миры Садова Михаила" выполняет функцию авторского превью сайта. В его задачи входит рекламировать, информировать и предоставлять доступ к расположенным на нем материалам. В связи с этим особенную ценность для решения этой задачи представляет взаимодействие с различными web-ресурсами и непосредственно с самими пользователями.

На сайте у пользователей есть возможность переписываться друг с другом по средствам личных сообщений, сортировать пользователей по категориям: друзья, работа. Также пользователи могут прокомментировать различные материалы статей.

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

В связи с тем, что среди отечественных социальных сетей большей популярностью пользуется такие социальные сети как "ВКонтакт", то основные возможности сайта ориентированы именно на этот ресурс.

В частности это выражается в следующем:

Авторизация на сайте связана с авторизацией на "ВКонтакте" - пользователи могут объединить учетную запись в "ВКонтатке" и учетную запись на сайте. В дальнейшем для захода на сайт достаточно быть уже авторизованным на "ВКонтакте". Так же это облегчает доступ к другим возможностям сайта.

"Мне нравится" - это одна из возможностей на сайте, которая тесно связана с личными страницами пользователей на "ВКонтакте". С помощью этой кнопки пользователи могут выставить собственный рейтинг любой статье и попутно прорекламировать ее на своей страничке.

Комментатор "ВКонтакта" - данная возможность открывает целый ряд преимуществ для посетителей сайта:

-- Масштаб - в "ВКонтакте" зарегистрированы практически все пользователи Рунета, поэтому любой пользователь может сразу прокомментировать материал от своего настоящего имени - с фотографией и ссылкой на подробную информацию о себе.

-- Вирусность - каждый оставленный комментарий может автоматически транслироваться на страницу прокомментировавшего, а также попадает в Новости для его друзей. Такой комментарий всегда содержит ссылку на исходную статью. В результате о комментарии и существовании статьи узнают друзья комментатора, которые смогут присоединиться к дискуссии. Об их комментариях в свою очередь будут оповещены уже их друзья - и так далее. Дальше информация может распространяться лавинообразно.

-- Многомерность - "ВКонтакт" предусматривает возможность ответа на комментарии, причем ответы одновременно появляются как на странице статьи, так и на странице автора комментария, а также в новостях у его друзей.

-- Контроль - администратор сайта имеет возможность модерировать дискуссию прямо со страниц своего ресурса, удаляя нежелательные комментарии.

2.2 Интеграция с сервисами социальных сетей

2.2.1 API

API (application programming interface) - набор готовых классов, процедур, функций, структур и констант, предоставляемых приложением (библиотекой, сервисом) для использования во внешних программных продуктах. Используется программистами для написания всевозможных приложений.

API определяет функциональность, которую предоставляет программа (модуль, библиотека), при этом API позволяет абстрагироваться от того, как именно эта функциональность реализована.

Программные компоненты взаимодействуют друг с другом посредством API. При этом обычно компоненты образуют иерархию -- высокоуровневые компоненты используют API низкоуровневых компонентов, а те, в свою очередь, используют API ещё более низкоуровневых компонентов.

По такому принципу построены протоколы передачи данных по Internet. Стандартный стек протоколов (сетевая модель OSI) содержит 7 уровней (от физического уровня передачи бит до уровня протоколов приложений, подобных протоколам HTTP и IMAP). Каждый уровень пользуется функциональностью предыдущего уровня передачи данных и, в свою очередь, предоставляет нужную функциональность следующему уровню.

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

API библиотеки функций и классов включает в себя описание сигнатур и семантики функций.

Сигнатура функции -- часть общего объявления функции, позволяющая средствам трансляции идентифицировать функцию среди других. В различных языках программирования существуют разные представления о сигнатуре функции, что также тесно связано с возможностями перегрузки функции в этих языках.

Семантика функции -- это описание того, что данная функция делает. Семантика функции включает в себя описание того, что является результатом вычисления функции, как и от чего этот результат зависит. Обычно результат выполнения зависит только от значений аргументов функции, но в некоторых модулях есть понятие состояния. Тогда результат функции может зависеть от этого состояния, и, кроме того, результатом может стать изменение состояния. Логика этих зависимостей и изменений относится к семантике функции. Полным описанием семантики функций является исполняемый код функции или математическое определение функции.

2.2.2 Open API

Open API - система для разработчиков сторонних сайтов, которая предоставляет возможность легко авторизовать пользователей "ВКонтакте" на сайте. Кроме этого, с согласия пользователей можно получить доступ к их друзьям, фотографиям, аудиозаписям, видеороликам, объявлениям и прочей информации ВКонтакте для более глубокой интеграции с проектом.

В рамках подключения к Open API создается специальное приложение, которое позволяет использовать на сайте все текущие методы ВКонтакте API. Помимо этого, Open API предоставляет возможность упростить процесс регистрации новых пользователей на сайте, если у них уже есть учетная запись ВКонтакте.

Для подключения сайта к платформе Open API, необходимо выполнить следующие действия:

-- Open API URL - адрес сайта, к которому планируется подключить Open API.

-- Базовый домен - базовый домен сайта.

2.2.3 Инициализация Open API

Инициализация Open API может происходить двумя способами: обычным (синхронным) и асинхронным.

Обычная инициализация.

Для использования обычной инициалиазации необходимо добавить следующий блок кода внутри тега:

<script src="http://vkontakte.ru/js/api/openapi.js" type="text/javascript"></script>

<script type="text/javascript">

VK.init({

apiId: API_ID

});

</script> Асинхронная инициализация.

В отличие от обычной, асинхронная инициализация Open API, позволяет производить инициализацию платформы параллельно инциализации JavaScript-кода. Для использования асинхронной инициализации добавляется следующий HTML и JavaScript код сразу же после открытия тега:

<script type="text/javascript">

window.vkAsyncInit = function() {

VK.init({

apiId: API_ID

});

};

setTimeout(function() {

var el = document.createElement("script");

el.type = "text/javascript";

el.src = "http://vkontakte.ru/js/api/openapi.js";

el.async = true;

document.getElementById("vk_api_transport").appendChild(el);

}, 0);

</script>

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

Пример авторизации через Open API:

<script src="http://vkontakte.ru/js/api/openapi.js" type="text/javascript"></script>

<script language="javascript">

VK.init({

apiId: API_ID

});

function authInfo(response) {

if (response.session) {

alert('user: '+response.session.mid);

} else {

alert('not auth');

}

}

VK.Auth.getLoginStatus(authInfo);

VK.UI.button('login_button');

</script>

Объект VK имеет следующие поля:

-- VK.init - основной метод инициализации платформы Open API.

-- VK.Auth - содержит методы, связанные с авторизацией пользователей.

-- VK.Api - содержит методы, связанные с работой с ВКонтакте API.

-- VK.Observer - содержит методы для реакции на возникающие в ходе работы платформы события.

-- VK.UI - содержит методы, связанные с интерфейсом пользователя.

2.2.4 Авторизация ВКонтакт

С помощью виджета для авторизации появляется возможность максимально просто авторизовать пользователя на сайте, используя учетную запись на "ВКонтакте". Перед авторизацией пользователь сможет увидеть свою фотографию и уже авторизовавшихся друзей.

Значимость этого виджета на сайте заключается в том, что он позволяет облегчить взаимодействие с другими программными интерфейсами как: "Мне нравится", Коментатор ВКонтакта. Так же в случае если пользователь уже авторизовался на ВКонтакте зайти на сайт по нажатию одной, лишь клавиши без ввода логина и пароля.

Данный виджет как и многие другие виджеты данной социальной сети основывается на id Open API. Чтобы реализовать авторизацию в ВКонтакте, необходимо выполнить два шага:

1. В тег <head> страницы сайта необходимо добавить следующий код:

<script type="text/javascript" src="http://userapi.com/js/api/openapi.js?29"></script>

<script type="text/javascript">

VK.init({apiId: 2312258});

</script>

2. На странице сайта необходимо добавить элемент DIV, в котором будет виджет, задать ему уникальный id и добавить блок кода инициализации виджета:

<script type="text/javascript">

VK.Widgets.Auth("vk_auth", {width: "200px", authUrl: '/developers.php?o=-1&p=Auth'});

</script>

Виджет поддерживает два вида авторизации:

-- Обычный - пользователь будет переадресован на указанный в параметре authUrl адрес с полями: uid, first_name, last_name, photo, photo_rec, photo_rec, hash.

-- Динамический - после авторизации будет вызвана функция onAuth c объектом data, содержищим поля uid, first_name, last_name, photo, photo_rec, session, hash, также пользователь будет авторизован в openApi.

В нашем же случае задача усложняется тем, что сайт работает под системой управления Joomla, что в свою очередь требует наличие специальных модуля и компонента VKlogin.

Компонент обеспечивает непосредственную авторизацию и в нем указывается id Open API сайта и Защищённый ключ.

Модуль обеспечивает интерфейс авторизации.

2.2.5 Виджет "Мне нравится"

Виджет "Мне нравится" позволяет посетителям одним кликом выразить своё отношение к статье или моментально поделиться ссылкой на статью с друзьями.

Для того чтобы воспользоваться возможностями этого виджета не надо быть авторизованным на самом сайте, достаточно быть уже авторизованным на "ВКонтакте".

Чтобы добавить на сайт виджет "Мне нравится" ВКонтакте, необходимо выполнить три шага:

1. В тег <head> страницы сайта необходимо добавить следующий код:

<script type="text/javascript" src="http://userapi.com/js/api/openapi.js?29"></script>

2. На странице сайта необходимо добавить следующий блок кода внутри:

<script type="text/javascript">

VK.init({apiId: 2312258, onlyWidgets: true});

</script>

3. Также на странице сайта необходимо добавить элемент DIV, в котором будет виджет Like, задать ему уникальный id и добавить блок кода инициализации виджета:

<script type="text/javascript">

VK.Widgets.Like("vk_like", {type: "10"});

</script>

Показатели различны для каждого уникального адреса на сайте. Если статья на сайте может иметь различные адреса (например, в зависимости от источника перехода, языка или других параметров), то в VK.Widgets.Like последним параметром нужно передавать внутренний идентификатор страницы - page_id.

Таблица

Параметры метода VK.Widgets.

Название параметра | Обязательный | Описание
element_id | ? | id элемента, который будет являться контейнером для блока Like
options |  | Опции блока Like. Объект Javascript. Возможные поля: -- type: задает вариант дизайна кнопки. Допустимые значения:full (кнопка с текстовым счётчиком), button (кнопка с миниатюрным счётчиком), mini (миниатюрная кнопка), vertical(миниатюрная кнопка, счётчик сверху). Значение по умолчанию - full. -- width: задает ширину блока в пикселах (целое число > 200, значение по умолчанию - 350). Параметр учитывается только для кнопки с текстовым счетчиком (type = full) -- pageTitle: задает название страницы (для отображении в превью у записи на стене) -- pageDescription: задает описание страницы (для отображении в превью у записи на стене) -- pageUrl: задает адрес страницы (для отображении у записи на стене). Указывайте в том случае, если адрес статьи отличается от адреса, на котором отображается кнопка "Мне нравится". -- pageImage: задает адрес картинки-миниатюры (для отображении в превью у записи на стене). -- verb: задает вариант формулировки текста внутри кнопки. 1 - Это интересно, 0 - Мне нравится. Значение по умолчанию - 0.
page_id |  | Идентификатор страницы на Вашем сайте. Целое 32хразрядное число. Используется в том случае, если у одной и той же статьи может быть несколько адресов, а также на динамических сайтах, у которых меняется только хеш. Значение по умолчанию - контрольная сумма от location.href.

В случае, если параметры pageTitle, pageDescription, pageImage не указаны, заголовок страницы, её описание и миниатюра будут определены автоматически на основании тегов meta. Распознаются следующие варианты аттрибута name (или property): title, description, url, image, app_id. Каждое из названий может иметь префикс vk: или og:.

При отсутствии соотвествующего тега, название страницы берется из document.title.

Использование мета-тега:

<meta property="vk:app_id" content="19308331" />

Делает необязательным вызов VK.init.

Пример использования:

<script type="text/javascript">

window.onload = function () {

VK.init({apiId: 111, onlyWidgets: true});

VK.Widgets.Like('vk_like', {width: 500, pageTitle: 'Статья номер 321', pageDescription: 'Описание статьи номер 321'}, 321);

}

</script>

На сайте данный виджет реализован как плагин для системы управления Joomla: JoomLine VK Like. 2.2.6 Комментатор "ВКонтакта"

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

Добавить на сайт виджет можно в три шага:

1. В тег <head> на странице Вашего сайта необходимо добавить следующий код:

<script type="text/javascript" src="http://userapi.com/js/api/openapi.js?29"></script>

2. В тело страницы сайта необходимо добавить следующий код:

<script type="text/javascript">

VK.init({apiId: 2312258, onlyWidgets: true});

</script>

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

<script type="text/javascript">

VK.Widgets.Comments("vk_comments", {limit: 10, width: "496", attach: "*"});

</script>

Приведенный код добавляет блок комментариев стандартного вида: изначально отображаются 10 последних комментариев. Ширина блока будет подобрана автоматически исходя из положения элемента с id="vk_comments". Идентификатор странице будет задан по её URL.

Таблица

Параметры метода VK.Widgets.Comments.

Название параметра | Обязательный | Описание
element_id | ? | id элемента, который будет являться контейнером для блока комментариев
options |  | Опции блока комментариев. Объект Javascript. Возможные поля: -- width: задает ширину блока в пикселах (целое число > 300) -- limit: количество комментариев на странице (целое число 5-100) -- attach: задает возможность создания прикреплений к комментариям. Строка, содержащая перечисленные через запятую типы допустимых прикреплений либо false в случае отключения этой функции. Возможные типы: graffiti, photo,audio, video, link. Значение * включает все типы. Значение по умолчанию - *. -- autoPublish: автоматическая публикация комментария в статус пользователю (0 - выключена, 1 - включена). Значение по умолчанию - 1. -- onChange: коллбек-функция, вызываемая при публикации или удалении комментария первого уровня.  -- pageUrl: Адрес страницы с виджетом, на которую ссылается статус в случае, когда включена автоматическая трансляция комментария в статус. (Необязательный параметр)
page_id |  | Идентификатор страницы на Вашем сайте. Произвольная строка до 128 символов, либо число. Используется в том случае, если у одной и той же статьи может быть несколько адресов, а также на динамических сайтах, у которых меняется только хеш. Значение по умолчанию равно контрольной сумме от location.href.

Существует возможность хранить количество комментариев для каждой статьи на своём сервере, чтобы, например, сортировать статьи по популярности.

В коллбек-функцию onChange передаётся 4 параметра: num, last_comment, date, sign

num - количество комментариев

last_comment - текст последнего комментария

date - текущая дата в формате ISO 8601 (например, 2004-02-12T15:19:21+00:00)

sign - контрольная сумма md5 от конкатенации 4х строк: api_secret, date, num, last_comment. В языке php может быть получена с помощью md5($api_secret.$date.$num.$last_comment).

Защищенный секрет api_secret можно узнать при редактировании приложения на вкладке Редактирование ? Настройки, Поле "Защищенный ключ".

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

<script type="text/javascript">

window.onload = function () {

VK.init({apiId: 111, onlyWidgets: true});

VK.Widgets.Comments('vk_comments', {width: 500, limit: 15}, 321);

}

</script>

Подключить виджет к сайту, на которых авторизация производится через Open API, ещё проще. Достаточно просто добавить инициализацию виджета. 2.3 Взаимодействие с интернет ресурсом "Самиздат"

2.3.1 Основные функции

Взаимодействие с ресурсом "Самиздат" выражается посредством интегрированной из него ленты комментариев.

В связи с тем, что сайт создан на основе системы управления Joomla взаимодействие с "Самиздатом" реализовано в качестве плагина для Joomla. За основу взят уже готовый бесплатный компонент JComments.

JComments - это мощный и одновременно простой в пользовании компонент на основе технологии AJAX и РНР, который позволяет публиковать комментарии на сайте Joomla. Этот компонент поддерживает ACL, смайлы, BBCodes, RSS и др.

Импорт ленты комментариев с "Самиздата" осуществляется при помощи скриптов, которые запускаются каждые пятнадцати минут. Запуск скриптов осуществляет планировщик задач cron.

Для передачи и получения содержимого интернет страниц для дальнейшего импорта ленты комментариев используется cURL.

Адреса страниц с лентами комментариями на "Самиздате", которые используются им, вводятся непосредственно во время создания статьи автором.

Скрипты и классы выведены в отдельные PHP файлы, вызов которых и происходит с помощью cron:

Grabber.php - в этом файле прописан класс, который отвечает за скачивание страницы ленты комментариев с "Самиздата". В нем используется cURL.

parser.php - в этом файле находится класс, который отвечает за выдергивание комментариев со страницы.

commentIMport.php - в нем прописан класс отвечающий за импорт комментариев.

db.php - работа с базами данных осуществляется в классе, который прописан в этом файле.

import.php - файл, который запускается каждые пятнадцать минут при помощи cron. Он использует приведенные выше классы.

PHP код приведенных выше файлов располагается в Приложение А.

2.3.2 cURL

cURL -- это свободная (распространяемая по лицензии MIT), кроссплатформенная служебная программа командной строки для копирования файлов по различным протоколам с синтаксисом URL.

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

Программа cURL может автоматизировать передачу файлов или последовательность таких операций. Например, это хорошее средство для моделирования действий пользователя в веб-обозревателе.

Программа поддерживает протоколы: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, File: и LDAP. Также cURL поддерживает сертификаты HTTPS, методы HTTP POST, HTTP PUT, загрузку на FTP, загрузку через формы HTTP.

Поддерживаемые методы аутентификации: базовая, дайджест, NTLM и Negotiate для HTTP, а также kerberos4 для FTP.

Возможно возобновление передачи файла с места обрыва (при поддержке протоколом), туннелирование через HTTP-прокси, поддержка HTTP-Cookie. Пример использования cURL:

Использование cURL из командной строки очень просто. Следующий пример запрашивает web-страницу и выводит ее в stdout

$ curl -L zend.com

M(опция -L разрешает переадресации)

Также возможно использование cURL из командной строки при помощи PHP. Следующий пример запрашивает 3 страницы и выводит их на экран

<?php

$var = echo shell_exec("/usr/bin/curl -L http://www.zend.com http://zend.com/developers.php http://zend.com/zend/tut/");

?>

Пример использования cURL в PHP:

Использование cURL в php-скрипте является достаточно простым, особенно для таких операций, как генерация POST-запросов.

Для использования cURL необходимо выполнить следующие шаги:

-- Инициализировать сессию cURL

-- Установить опции cURL (порядок установки опций не имеет значения)

-- Выполнить запрос

-- Завершить сессию cURL

Для демонстрации вышеперечисленного приведены практические примеры использования cURL:

<?php

$url = "http://www.amazon.com/exec/obidos/search-handle-form/002-5640957-2809605";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$url); // set url to post to

curl_setopt($ch, CURLOPT_FAILONERROR, 1);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable

curl_setopt($ch, CURLOPT_TIMEOUT, 3); // times out after 4s

curl_setopt($ch, CURLOPT_POST, 1); // set POST method

curl_setopt($ch, CURLOPT_POSTFIELDS, "url=index%3Dbooks&field-keywords=PHP+MYSQL"); // add POST fields

$result = curl_exec($ch); // run the whole process

curl_close($ch);

echo $result;

?>

<?php

$url = "http://www.example.com/protected/";

$ch = curl_init();

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword");

$result = curl_exec($ch);

curl_close($ch);

echo $result;

?>

<?PHP

$fp = fopen(__FILE__, "r");

$url = "ftp://username:password@mydomain.com:21/path/to/newfile.php";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_UPLOAD, 1);

curl_setopt($ch, CURLOPT_INFILE, $fp);

curl_setopt($ch, CURLOPT_FTPASCII, 1);

curl_setopt($ch, CURLOPT_INFILESIZE, filesize(__FILE__));

$result = curl_exec($ch);

curl_close($ch);

?>

При возникновении проблем в использовании cURL необходимо добавить следующие строки перед вызовом curl_close для получения отчета о последнем выполненном запросе:

<?php

print_r(curl_getinfo($ch));

echo "\n\ncURL error number:" .curl_errno($ch);

echo "\n\ncURL error:" . curl_error($ch);

// ...close cURL handle ($ch) below

?>

cURL следует использовать в тех случаях, когда пишется выполняемый из командно строки скрипт, либо провайдер не поддерживает libcurl. 2.3.3 cron

cron -- демон-планировщик задач в UNIX-подобных операционных системах, использующийся для периодического выполнения заданий в заданное время.

Де?мон (англ. daemon) -- в системах класса UNIX -- служба, работающая в фоновом режиме без прямого общения с пользователем.

Планировщик задач -- программа или сервис операционной системы, которая запускает другие программы в зависимости от различных критериев, как например:

-- Наступление определенного времени.

-- Операционная система переходит в определенное состояние (бездействие, спящий режим и т. д.).

-- Поступил административный запрос через пользовательский интерфейс или через инструменты удаленного администрирования.

Утилита cron выполняет команды в заданное время. Регулярные действия описываются инструкциями, помещенными в файлы crontab, которые находятся в каталоге:

/usr/spool/cron/crontabs

или

/var/spool/cron/crontabs

Редактировать их вручную не рекомендуется, для этого используют программа crontab. Crontab -- файл заданий, который есть у каждого пользователя, и хранится в каталоге /var/spool/cron. Имя файла crontab соответствует имени самого пользователя.

В самом файле crontab описано как, когда и какие запускать программы от имени определенного пользователя.

Для редактирования файла crontab используется одноименная программа crontab, которая позволяет производить изменения в файле crontab без остановки работы cron.

Таблица crontab ( Рисунок 1) состоит из 6 колонок, разделяемых пробелами или табуляторами. Первые пять колонок задают время выполнения (Минута, Час, День, Месяц, День недели), в них может находиться число, список чисел, разделённых запятыми, диапазон чисел, разделённых тире, или символ '*'. Все остальные символы в строке интерпретируются как выполняемая команда с её параметрами. Если команда отправляет какой-нибудь текст в стандартный вывод, этот текст отправляется по e-mail пользователю.

* * * * * выполняемая команда

- - - - -

| | | | |

| | | | ----- День недели (0 - 7) (Воскресенье =0 или =7)

| | | ------- Месяц (1 - 12)

| | --------- День (1 - 31)

| ----------- Час (0 - 23)

------------- Минута (0 - 59)

Рисунок 1 - Таблица crontab

Пример файла crontab:

# как обычно, с символа '#' начинаются комментарии

# в качестве командного интерпретатора использовать /bin/sh

SHELL=/bin/sh

# результаты работы отправлять по этому адресу

MAILTO=paul@example.org

# добавить в PATH

PATH=$PATH:$HOME/bin

#### Здесь начинаются задания

# выполнять каждый день в 0 часов 5 минут, результат складывать в log/daily

5 0 * * * $HOME/bin/daily.job >> $HOME/log/daily 2>&1

# выполнять 1 числа каждого месяца в 14 часов 15 минут

15 14 1 * * $HOME/bin/monthly

# каждый рабочий день в 22:00

0 22 * * 1-5 echo "Пора домой" | mail -s "Уже 22:00" john

23 */2 * * * echo "Выполняется в 0:23, 2:23, 4:23 и т. д."

5 4 * * sun echo "Выполняется в 4:05 в воскресенье"

0 0 1 1 * echo "С новым годом!"

15 10,13 * * 1,4 echo "Эта надпись выводится в понедельник и четверг в 10:15 и 13:15"

0-59 * * * * echo "Выполняется ежеминутно"

# каждые 5 минут

*/5 * * * * echo "Прошло пять минут" 2.4 Реализация проекта

В первую очередь в целях реализации пишется шаблон сайта ориентированный под систему управления Joomla. ГипКод шипертекстовой разметки и стилей CSS приведены в Приложение Б.

Сайт выложен и находится на хостинге Jino.ru и имеет адрес http://sadow.jino.ru

В разделе представлены прототипы основных страниц сайта на которых используется интеграция сервисов социальных сетей: Авторизация "ВКонтакт" (рисунок 2), виджет "Мне нравится" (рисунок 3), Комментатор "ВКонтакта" (рисунок 4), виджет Закладок (рисунок 5), лента комментариев "Самиздата" (рисунок 6) ), добавление новых коммен (рисунок 7). . Рисунок 2 - Вход на сайт под логином и паролем в "ВКонтакта"

Рисунок 3 - Виджет "Мне нравится" и панель оставивших свой голос пользователей

Рисунок 4 - Панель комментариев "ВКонтакта"

Рисунок 5 - кнопки Закладок социальных сетей

Рисунок 6 - Лента комментариев, интегрированная из Самиздата Рисунок 7 - панель добавления комментариев Глава 3 Экономическая часть

3.1 Расчет затрат на разработку программного продукта

Интеграция сервисов социальных сетей на сайт.

Определение затрат на разработку программного обеспечения осуществляется по статьям расходов:

-- стоимость расходных материалов (бумаги, дисков и т.д.);

-- основная зарплата производственного персонала;

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

-- единый социальный налог;

-- амортизационные отчисления;

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

Таблица 3

Таблица расходных материалов

Список затрат |  | Затраты по каждому периоду, руб. |  | 
 |  |  |  | Март
1 | Чернила для принтера | 300 | 0 | 0
2 | Бумага для принтера | 0 | 200 | 0
 | Оплата Хостинга | 500 | 0 | 0
 | Итого: | 800 | 200 | 0

Всего прочие затраты за все три месяца разработки CMS составили: 1000 рублей.

3.3 Разработка оперативно-календарного плана

Для определения затрат на заработную плату исполнителей и распределения времени между этапами разработки и исполнителями необходимо составить оперативно-календарный план (ОКП).

Оперативно-календарный план является основным расчётным документом для планирования работ по разработке программного продукта. Он представляет собой основу для составления годовых и квартальных планов.

В ОКП оговариваются стадии разработки по теме с разбиением на этапы, численность и состав коллектива разработчиков, сроки выполнения и трудоёмкость соответствующих стадий и этапов. Исходными данными для разработки ОКП и сметной калькуляции темы является директивный срок разработки темы и её трудоёмкость.

Трудоёмкость представляет собой количество человеко-дней, затраченных на разработку устройства и необходима для определения суммарных затрат на заработную плату исполнителей.

3.4 Определение трудоёмкости этапов ОКП

Разработка программного обеспечения включает пять стадий:

1) Разработка технического предложения.

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

2) Разработка сайта и интеграция сервисов социальных сетей.

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

3) Составление документации.

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

4) Тестирование и отладка - этап, на котором происходит непосредственная разработка, испытание и отладка сайта и интеграции сервисов социальных сетей.

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

5) Корректировка и доработка опытного образца, ПО и документации. На этой стадии проводится проверка правильности работы сайта на практике в процессе подготовки соответствующей документации.

6) Приёмка работы - сдача сайта в эксплуатацию.

Данные по трудоёмкости каждого этапа приведены в таблице 4.

Таблица 4

Трудоёмкость этапов разработки

Этап | Трудоёмкость, чел.дн. | Процент от общей трудоёмкости, %
Разработка технического предложения | 5 | 8
Разработка алгоритма | 4 | 6
Разработка сайта | 10 | 16
Интеграция | 20 | 31
Составление документации | 5 | 8
Тестирование и отладка | 5 | 8
Корректировка и доработка опытного образца и документации | 14 | 22
Приёмка работы | 1 | 2
Итого | 64 | 100

3.5 Определение численности персонала

Исходя из общей трудоёмкости разработки и директивного срока выполнения ОКП, для реализации проекта потребуются следующий состав разработчиков:

Список исполнителей и их оклад за рабочий день и за рабочий месяц приведён в таблице 5.

Таблица 5

Состав исполнителей

Специалист | Оклад за день, руб. | Оклад за месяц, руб.
Программист | 510 | 12240

В качестве системы оплаты труда используется окладно- премиальная система, в которой основной оклад определяется занимаемой сотрудником должностью и уровнем квалификации сотрудника, а премия определяется временем, затраченным на выполнение работ и качеством выполнения работ, и рассчитывается как 40 % от основной заработной платы (ОЗП). 3.6 Содержание работ

Содержание работ, представленных в логической последовательности с расчётом затрат на заработную плату исполнителей приведено в Таблице 6.

Таблица 6

Содержание работ и затраты на заработную плату

Формулировка работ | Содержание работ | Исполнители | Трудоёмкость работ, чел.-дн. | ОЗП, руб. | ОЗП+ 40%премии, руб.
Разработка технического предложения | Получение ТЗ, анализ ТЗ, обзор технической литературы, разработка технического предложения | Программист | 5 | 2550 | 3570
Разработка алгоритма портала | Разработка алгоритма, согласование алгоритма, устранение недостатков | Программист | 4 | 2050 | 2870
Разработка сайта | Выбор языка программирования и среды разработки, выдача задания программистам, разработка сайта, разработка программной документации | Программист | 10 | 5100 | 7140
Интеграция | Интеграция сервисов социальных сетей на сайт | Программист | 20 | 5100 | 7140
Составление документации | Составление документации | Программист | 5 | 2550 | 3570
Тестирование и отладка | Обнаружение и устранение ошибок, внесение изменений в программную документацию. | Программист | 5 | 2550 | 3570
Корректировка и доработка опытного образца, портала и документации | Корректировка и доработка опытного образца, и документации | Программист | 14 | 9690 | 13566
Приёмка работ | Приёмо-сдаточные испытания | Программист | 1 | 510 | 714
 |  | Итого | 64 | 30100 | 42120

3.6.1 Расходы на амортизацию оборудования

В качестве оборудования используются 1 новый компьютер, общей стоимостью 21995 руб. Срок службы компьютеров 5 лет. Так как компьютерное оборудование устаревает очень быстро, для расчёта амортизации используется метод ускоренной амортизации (кумулятивный). Суть этого метода состоит в списании наибольшей части стоимости оборудования в первые годы его эксплуатации. С каждым годом эксплуатации сумма амортизационных отчислений на оборудование уменьшается. Таким образом, осуществляется ускоренное списание стоимости оборудования в первые годы эксплуатации.

Рассчитаем затраты на амортизационные отчисления за период разработки проекта, который составляет 60 дней или 0,16 года.

Амортизационные отчисления на первый рассчитывается по формуле:

,

где

- первоначальная стоимость оборудования;

- норма амортизации:

,

где

- нормативный срок службы;

- текущий год;

- кумулятивное число, равное сумме лет эксплуатации оборудования.

Тогда норма амортизации на первый год составит:

Амортизационные отчисления за первый год службы оборудования составят

руб.,

А отчисления на амортизацию оборудования за период разработки проекта составят:

руб.

Таким образом, в затраты на разработку устройства необходимо включить отчисления на амортизацию оборудования в размере

руб.;

3.6.2 Расходы на электроэнергию

Компьютер потребляет 0.4 кВт электроэнергии в час. Стоимость одного кВт составляет 1.79 руб. Компьютер работает по 8 часов в день в течение всего срока разработки (60 дней). Поэтому затраты на электроэнергию составят:

0,4 ? 1.79? 8 ? 60 = 343руб. 3.6.3 Расходы на заработную плату разработчика

Расходы на заработную плату включают:

-- расходы на основную заработную плату плюс 40 % премии;

-- расходы на дополнительную заработную плату.

На эту статью относятся выплаты, предусмотренные законодательством о труде за неотработанное по уважительным причинам время: оплата очередных и дополнительных отпусков и т.п. (принимается в размере 20% от суммы основной заработной платы).

Величина дополнительной заработной платы составит:

30100? 0,2 = 6020руб.

Фонд оплаты труда представляет собой сумму основной заработной платы с начислениями (с премией) и дополнительной заработной платы:

42120+ 6120= 48240руб.

Отчисления на социальные нужды, рассчитываются в размере 34,2 % от фонда оплаты труда.

Величина отчислений составляет: (42120 + 6120)? 0,34 = 16401руб.

3.6.4 Накладные расходы

Накладные расходы на разработку проекта на предприятии составляют 40 % от суммы основной и дополнительной заработной платы:

(30100 + 6120)? 0,4 = 14488руб. 3.6.5 Сметная стоимость разработки проекта

Сметная стоимость затрат на разработку программного обеспечения приведена в Таблице 7.

Таблица 7

Таблица сметной стоимости

Наименование статьи | Сумма, руб.
Расходные материалы | 1000
Расходы на амортизацию оборудования | 1055
Расходы на основную заработную плату плюс 40 % премии | 42120
Расходы на дополнительную заработную плату | 6020
Отчисления на социальные нужды | 16401
Расходы на электроэнергию | 343
Накладные расходы | 14688
Итого | 81627

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

Интеграция сервисом социальных сетей на сайт предназначена для упрощения работы с контентом и рекламы. Сайт работает без временных ограничений и перерывов исключением может быть во время реорганизации и обновления программного кода, доступ к сайту свободный, любой пользователь не ограничен какими либо правами, скрипт портала работает в интернет-браузерах Google Chrome версии 8.0.552.237 и выше. Сайт корректно отображается при разрешении монитора 1024*768*32. Среднее время загрузки страниц сайта при скорости 256 Кбит/с, 16 секунд, это связано с тем, что на сайте расположены графические объекты, сжатые в формате jpg, позволяющие уменьшить зажимаемый размер и увеличить время загрузки. На сайте реализованы скрипты для работы с базой данных, контентом и визуальных эффектов - все это повышает привлекательность портала.

Целью интеграции сервисов социальных сетей на сайт, привлечение новых пользователей, облегчения взаимодействия с посторонними ресурсами и сайтами за счет внедрения виджетов и плагинов для системы управления Joomla.

Сайт и интеграция на него сервисов социальных сетей позволяют решить следующие экономические задачи:

-- Экономия времени работы с разными интернет ресурсами.

-- Привлечение новых пользователей.

-- Реклама сайта и его контента на других ресурсах.

-- Повышение заинтересованности покупателей товаром. Глава 4 Охрана труда и техническая безопасность

4.1 Основы правового регулирования

В сфере охраны труда и техники безопасности в соответствии со ст. 209 ТК РФ [1] используются основные понятия и определения:

Безопасность - это отсутствие недопустимого риска, связанного с возможностью нанесения ущерба.

Безопасные условия труда - условия труда, исключающие воздействие на работников вредных производственных факторов или уровень воздействия не превышают установленных нормативов.

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

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

Обязанности работодателя по обеспечению безопасных условий и охраны труда. Работодатель обязан обеспечить: безопасность работников при эксплуатации зданий, сооружений, оборудования, осуществлении технологических процессов, а также применяемых в производстве инструментов, сырья и материалов; применение средств индивидуальной и коллективной защиты работников; соответствующие требованиям охраны труда условия труда на каждом рабочем месте; режим труда и отдыха работников в соответствии с законодательством  ( ст. 212 ТК РФ) [1].

Обязанности работника в области охраны труда: проходить обучение безопасным методам и приемам выполнения работ и оказанию первой помощи пострадавшим на производстве, инструктаж по охране труда, стажировку на рабочем месте, проверку знаний требований охраны труда

(ст. 214 ТК РФ) [1].

Благополучное функционирование системы охраны труда невозможно без выполнения заинтересованными сторонами - работником и работодателем - возложенных на них обязанностей.

Дипломный проект "Интеграция сервисов социальных сетей на сайт под управлением Joomla", реализуется на персональном компьютере. Чтобы максимально сократить неблагоприятное влияние на здоровье человека вредных факторов производственной среды и трудового процесса при работе с ПК были введены в действие санитарно-эпидемиологические правила и нормативы "Гигиенические требования к персональным электронно-вычислительным машинам и организации работы. СанПиН 2.2.2/2.4.1340-03" [2].

4.2 Санитарно-гигиенические нормы и правила при работе на компьютере

При выполнении трудовой деятельности санитарно-гигиенические условия труда в помещениях могут иметь вредный характер. Этому способствует наличие вредных веществ, избыточных тепло - и газовыделения, пыли, вибрации, шума, недостаточное или некачественное освещение и т. п. В результате происходит снижение работоспособности, а при длительном воздействии - возникновение профессиональных заболеваний. Метеорологические условия производственных помещений складываются из температуры воздуха в помещении, инфракрасного и ультрафиолетового излучения от нагретого оборудования, влажности воздуха и его подвижности. Совокупность этих факторов в каком-то определенном месте помещения или во всем помещении носит название микроклимат.

На рабочем месте пользователей должны обеспечиваться оптимальные параметры микроклимата в соответствии с СанПин 2.2.2.542-96 [].

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

Работа на ВДТ и ЭВМ по тяжести и энергозатратам относится к категории легких физических работ (Iа, Iб). При выполнение таких работ температура воздуха должна быть: в холодный период года не более 22-24 гр/С, в теплый период года - 23-25 гр/С. Относительная влажность на рабочих местах должна быть 40-60%, а скорость движения - не более 0,1-0,2 м/с. Для повышения влажности воздуха в помещение с ВДТ и ПЭВМ следует применять увлажнители воздуха, заправляемые ежедневно дистиллированной или прокипяченной питьевой водой. Вибрация, шум и звук складываются из элементарных движений, называемых гармоническими колебаниями. Разница состоит в психофизиологическом их восприятии. Вибрация воспринимается осязанием, шум - слухом. Уровни шума на рабочих местах пользователей ПК не должны превышать значений, установленных ГОСТ Р 50923-96 и СанПин 2.2.2.542-96 [].

Источниками шума на рабочих местах с ВДТ и ЭВМ являются шумные агрегаты и вычислительная машина, установки кондиционирования воздуха, преобразователи напряжения и другое оборудование. Уровни шума на основных рабочих местах не должен превышать 50 дБА. На рабочих местах в помещениях для размещения шумных агрегатов вычислительных машин уровень шума не должен превышать 75 дБА.

Шумящее оборудование, уровни шума которого превышает нормированные, должны находиться вне помещения с ВДТ и ЭВМ. Печатающее оборудование, являющееся источником шума, следует установить на звукопоглощающей поверхности автономно от рабочего места пользователя. Если уровни шума от печатающего оборудования превышают нормируемые, оно должно быть расположено вне помещения с ПК.

Рабочие столы следует размещать таким образом, чтобы видеодисплейные терминалы были ориентированы боковой стороной к световым проемам, чтобы естественный свет падал преимущественно слева.

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

Освещенность на поверхности стола в зоне размещения рабочего документа должна быть 300-500 лк. Освещение не должно создавать бликов на поверхности экрана. Освещенность поверхности экрана не должна быть более 300 лк.

Следует ограничивать отраженную блесткость на рабочих поверхностях (экран, стол, клавиатура и др.) за счет правильного выбора типов светильников и расположения рабочих мест по отношению к источникам естественного и искусственного освещения, при этом яркость бликов на экране ПЭВМ не должна превышать 40 кд/м2 и яркость потолка не должна превышать 200 кд/м2.

Следует ограничивать неравномерность распределения яркости в поле зрения пользователей ЭВМ, при этом соотношение яркость между рабочими поверхностями не должно превышать 3:1 - 5:1, а между рабочими поверхностями и поверхностями стен и оборудования - 10:1.

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

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

Коэффициент запаса (Кз) для осветительных установок общего освещения должен принимать равным 1,4. Коэффициент пульсации не превышать 5%.

Для обеспечения нормируемых значений освещенности в помещениях для использования ЭВМ следует проводить чистку стекол оконных рам и светильников не реже двух раз в год и проводить своевременную замену перегоревших ламп.

При работе на персональном компьютере на работника могут воздействовать следующие опасные и вредные производственные факторы:

-- повышенные уровни электромагнитных излучений и статического электричества;

-- пониженная ионизация воздуха;

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

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

Но помимо СанПин есть и другие инструкции по охране труда.

2 июля 2001 г. Приказом Министерства связи и информатизации РФ N 162 была утверждена Типовая инструкция по охране труда при работе на персональном компьютере ТОИ Р-45-084-01 [5].

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

На работодателя возлагается обязанность по обеспечению работников надлежащей рабочей мебелью для пользователей компьютерной техникой, в частности, отвечающей следующим требованиям:

-- Высота рабочей поверхности стола должна регулироваться в пределах 680 - 800 мм (если нет такой возможности, то высота рабочей поверхности стола должна составлять 725 мм).

-- Рабочий стол должен иметь пространство для ног высотой не менее 600 мм, глубиной на уровне колен - не менее 450 мм и на уровне вытянутых ног - не менее 650мм.

-- Рабочий стул должен быть подъемно-поворотным и регулируемым по высоте и углам наклона сиденья и спинки и по расстоянию спинки от переднего края сиденья.

-- Рабочее место следует оборудовать специальной подставкой для ног, обладающей ширину более 300 мм, глубину более 400 мм, регулировку по высоте в границах до 150 мм. и по углу наклона опорной поверхности подставки до 20°.

-- На рабочем месте с персональным компьютером должен быть легко перемещаемый пюпитр для документов. Запрещается допускать к работе с использованием персонального компьютера женщин со времени установления беременности и в период кормления грудью.

Прежде, чем приступить к непосредственному выполнению работы на персональном компьютере, работник должен подготовить рабочее место, в частности:

-- Отрегулировать освещение на рабочем месте.

-- Проверить правильность подключения оборудования к электрической сети.

-- Проверить исправность проводов питания.

-- Проверить наличие заземления системного блока, монитора.

-- Протереть антистатической салфеткой поверхность экрана монитора.

-- Проверить правильность установки стола, стула, подставки для ног, пюпитра, угла наклона экрана, положение клавиатуры, положение "мыши" на специальном коврике.

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

По общим правилам работник при выполнении работы обязан:

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

-- Содержать рабочее место в чистоте.

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

-- Соблюдать требования пожарной безопасности.

4.3 Электробезопасность при работе на персональном компьютере

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

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

Во избежание поражения электрическим током необходимо твердо знать и выполнять следующие правила безопасного пользования электроэнергией:

-- Вешать что-либо на провода.

-- Закрашивать и белить шнуры и провода.

-- Закладывать провода и шнуры за газовые и водопроводные трубы, за батареи отопительной системы.

-- Выдергивать штепсельную вилку из розетки за шнур, усилие должно быть приложено к корпусу вилки.

-- Часто включать и выключать компьютер без необходимости.

-- Прикасаться к экрану и к тыльной стороне блоков компьютера.

-- Работать на средствах вычислительной техники и периферийном оборудовании мокрыми руками.

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

-- Класть на средства вычислительной техники и периферийном оборудовании, посторонние предметы.

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

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

Искусственное дыхание пораженному электрическим током производится вплоть до прибытия врача [36].

4.4 Пожарная безопасность при работе на персональном компьютере

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

Руководитель предприятия и должностные лица, ответственные за пожарную безопасность, обязаны:

-- Обеспечивать соблюдение противопожарного режима, а также норм и требований пожарной безопасности.

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

-- Оперативно принимать меры к устранению нарушений.

-- Следить за исправностью электроприборов и правилами их использования.

-- При обнаружение неисправности принимать меры по их устранению.

-- Систематически проводить проверки по содержанию средств используемых для тушения пожара, следить за их исправностью и не допускать возможности их использования не по назначению.

-- По завершению работы обеспечивать контроль за отключением электроприборов.

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

Каждый работающий обязан выполнять правила пожарной безопасности.

При работе за компьютером необходимо знать и соблюдать многие требования по обеспечению пожарной безопасности:

-- Убедиться в исправности компьютера, произведя его внешний осмотр.

-- При выявлении неполадок сообщить об этом руководителю подразделения и до их устранения к работе не приступать.

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

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

В случае возникновения пожара - немедленно прекратить работу, отключить компьютер от электросети, сообщить в пожарную часть по телефону 01, своему руководителю подразделения и приступить к тушению огня имеющимися средствами пожаротушения. Приложение А

PHP код файла import:

<?php

require_once("Grabber.php");

require_once("parser.php");

require_once("commentIMport.php");

require_once("db.php");

$db = DB::getInstance();

$sql = "Select id, comments_page, max_comment_num from jos_content where state=1 and sectionid=5";

$states = $db->query( $sql );

if ( $states ) {

foreach ( $states as $state ) {

if ( $state->comments_page ) {//если у статьи есть адресс, откуда воровать комменты

$importer = new CommentIMport( $state->comments_page, $state->max_comment_num );

$comments = $importer->import();

$lastComment = $comments[0];

$lastComNum = $lastComment->order;

if ( $comments ) {

foreach ( $comments as $comment ) {

$commentTxt = mysql_real_escape_string($comment->comment);

$commentTxt = iconv("windows-1251", "utf8", $commentTxt);

$author = "'".iconv("windows-1251", "utf8", $comment->author)."'";

$date = "'".$comment->date."'";

$sql = "insert into jos_jcomments (object_id, object_group, lang, name, username, comment, date, published ) values ";

$sql.= "(".$state->id.", 'com_content', 'ru-RU', ".$author.",".$author .",' ". $commentTxt."',". $date.", 1) ";

$db->simpleQuery( $sql );

}

$sqlUPdate = "Update jos_content set max_comment_num = $lastComNum where id=$state->id ";

$db->simpleQuery( $sqlUPdate);

}

}

}

}

?>

PHP код файла Grabber:

<?php

class Grabber

{

private $_url;

private $_page;

function __construct( $url, $page ) {

$this->setUrl( $url );

$this->setPage( $page );

}

public function grabe ( )

{

$url = $this->getUrl();

$page = $this->getPage();

$url = $url."?PAGE=".$page;

$ch = curl_init();

curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');

curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.12) Gecko/20101027 Ubuntu/10.04 (lucid) Firefox/3.6.12');

curl_setopt($ch, CURLOPT_REFERER, 'http://www.tforum.info/forum/index.php?act=Login&CODE=00');

curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');

$header = array();

$header[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';

$header[] = 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7';

$header[] = 'Accept-Language: ru,en-us;q=0.7,en;q=0.3';

$header[] = 'Pragma: ';

curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

curl_setopt($ch, CURLOPT_AUTOREFERER, true);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$page = curl_exec($ch);

if ( !curl_error($ch) ) {

return $page;

}

curl_close($ch);

return false;

}

public function setUrl($url) {

$this->_url = $url;

}

public function getUrl() {

return $this->_url;

}

public function getPage() {

return $this->_page;

}

public function setPage($page) {

$this->_page = $page;

}

}

?> PHP код файла parser:

<?php

(

define( 'COMMENTS', "@(?<order>\\d+\\.).*\\s*
(?<comment>.*)\\s*<hr noshade>@Usi");

define('AUTHOR', "@<b>(\\*)?(?:<noindex><a href=\"(?<authorUrl>.*?)\"[^>]*>)?(?:<font[^>]*>)?(?<author>.*?)(?:<\/font>)?(?:<\/a><\/noindex>)?<\/b>\\s*(?:\\((?<email>.*?)\\)\\s*)?<small>(?<date>.*?)\\s*@");

//define( 'COMMENTS', "#.*#Usi");

class Parser

{

private $_content;

public function __construct( $content )

{

$this->setContent( $content );

}

public function setContent($content) {

$this->_content = $content;

}

public function getContent() {

return $this->_content;

}

public function getLastPageNum()

{

$pattern = "@<a href=/comment/.*?\?PAGE=(\d+)>@";

if ( preg_match_all( $pattern, $this->_content, $matches)){

return (int)$matches[1][ count($matches[1] )-1 ];

}

}

public function getCommentsFromPage ( )

{

$content = $this->getContent();

if ( preg_match_all( COMMENTS, $content, $matches)) {

$comments = $matches['comment'];

$order = $matches['order'];

$occurense = $matches[0];

$i = 0;

foreach ( $occurense as $occur ) {

if ( preg_match_all( AUTHOR, $occur, $matches)) {

$authors[] = $matches['author'][0];

$dates[] = $matches['date'][0];

}

$i++;

}

$commentsArray = array();

for ( $i=0; $i<count( $comments ); $i++) {

$commentClass = new stdClass();

$commentClass->comment = $comments[$i];

$commentClass->author = $authors[$i];

$commentClass->date = $dates[$i];

$commentClass->order = (int)str_replace('.','',$order[$i]);

$commentsArray[] = $commentClass;

}

return $commentsArray;

}

}

}

?>

PHP код файла commentIMport:

<?php

require_once("Grabber.php");

require_once("parser.php");

class CommentIMport

{

private $_url;

private $_currentCommentNumber;

public function import()

{

$url = $this->getUrl();

$currCommNum = $this->getCurrentCommentNumber();

$pageNum = 1;

$graber = new Grabber( $url, $pageNum );

$page = $graber->grabe();

if ( !$page ) {

return false;

}

$parser = new Parser( $page );

$lastPageNum = $parser->getLastPageNum();

$comment = $parser->getCommentsFromPage();

$maxCommentNum = $comment[0]->order;

$commentsArray = array();

while ( $maxCommentNum>$currCommNum ) {

$graber->setPage( $pageNum );

$page = $graber->grabe();

$parser->setContent( $page );

$comments = $parser->getCommentsFromPage();

if ( !$comments ) {

return false;

}

foreach ( $comments as $comment ) {

if ( $comment->order<=$currCommNum ) {

return $commentsArray;

}

$commentsArray[] = $comment;

}

if ( $pageNum==$lastPageNum) {

return $commentsArray;

}

sleep(2);

$pageNum++;

}

}

public function __construct( $url, $currCommNum)

{

$this->setCurrentCommentNumber($currCommNum);

$this->setUrl( $url );

}

public function getUrl() {

return $this->_url;

}

public function setUrl($url) {

$this->_url = $url;

}

public function getCurrentCommentNumber() {

return $this->_currentCommentNumber;

}

public function setCurrentCommentNumber($currentCommentNumber) {

$this->_currentCommentNumber = $currentCommentNumber;

}

}

?>

PHP код файла db:

<?php

class DB

{

private $_host = 'localhost';

private $_user = 'логин';

private $_password = 'пароль';

private static $_instance;

public static function getInstance() {

self::$_instance = new DB();

return self::$_instance;

}

public static function setInstance($instance) {

self::$_instance = $instance;

}

private function __construct() {

$link = mysql_connect( $this->_host, $this->_user, $this->_password,true );

if ( !$link ) {

die( 'Не могу подключиться к базе данных, проверьте имя хоста, имя пользователя, пароль'.mysql_error());

}

mysql_select_db( 'sadow');

}

public function query ( $sql )

{

mysql_query("set names 'utf8'");

$descriptor = mysql_query( $sql ) or die(mysql_error());

if ( $descriptor ) {

while ( $row = mysql_fetch_object( $descriptor ) ) {

$result[] = $row;

}

}

return $result;

}

public function simpleQuery( $sql )

{

mysql_query("set names 'utf8'") ;

mysql_query($sql) or die(mysql_error( )) ;

}

public function selectAll ( $criteria, $tableName, $order='' )

{

$where = '';

if ( is_array( $criteria )) {

foreach($criteria as $key=>$value) {

$where.=$key.'='.'"'.$value.'"'.' Or';

}

$where = substr($where,0,-3);

} else $where = $criteria;

$sql = "Select * from ".$tableName." Where".$where;

if ($order!=='') {

$sql.=' Order by '.$order;

}

$resultArray=$this->query( $sql );

return $resultArray;

}

public function insertArray ( $tableName, $array )

{

mysql_query("set names 'utf8'");

$sql = sprintf('INSERT INTO %s (%s) VALUES ("%s")',

$tableName , implode(', ',array_map('mysql_escape_string', array_keys($array))),

implode('", "',array_map('mysql_escape_string', $array)));

mysql_query( $sql );

if(mysql_error()) {

throw new Exception('Не могу сохранить');

}

}

} Приложение Б

Код гипертекстовой разметки сайта:

<!doctype html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>

<jdoc:include type="head" />

<link type="text/css" rel="StyleSheet" href="/templates/sadow/css/style.css" />

<script language="JavaScript" type="text/javascript">

function mssh(id) {

e=document.getElementById(id);

f='bla' + id.substr(3);

g=document.getElementById(f);

g.style.display='inline-block'==g.style.display?'none':'inline-block';

}

</script>

</head>

<body>

<center>

<div >

<!-- начало шапки -->

<div >

<div >

<jdoc:include type="modules" name="user5" />

<!-- Конец шапки -->

<!-- Начало рабочего поля -->

<div >

<!-- Начало левого столбца -->

<div >

<!-- Начало левого вертикального меню -->

<div >

<!-- рабочее поле вертикального меню -->

<div >

<div >

<center>

<jdoc:include type="modules" name="avto" />

<div >

<!-- Конец рабочего поля вертикального меню -->

<!-- рабочее поле вертикального меню -->

<div >

<div >

<jdoc:include type="modules" name="glav" />

<div >

<!-- Конец рабочего поля вертикального меню -->

<!-- рабочее поле вертикального меню -->

<div >

<div >

<jdoc:include type="modules" name="left" />

<div >

<!-- Конец рабочего поля вертикального меню -->

<!-- Конец левого вертикального меню -->

<!-- Начало поля для контента -->

<div >

<div >

<div >

<jdoc:include type="modules" name="breadcrumb" />

<div >

<div >

<jdoc:include type="component" />

<!-- Конец поля для контента -->

<!-- Конец рабочего поля -->

<!-- Начало нижней панели -->

<div >

<div >

Copyright MyCorp No

<!-- Конец нижней панели -->

</body>

</html> Стили CSS:

html {

height: 100%;

margin-bottom: 1px;}

body {

margin: 0;

padding: 0;

font-family: Arial Rounded MT, sans-serif;

background:url(images/z.gif); }

.telo {

position:relative;

background:url(images/shapka1.jpg) no-repeat;

width:1024px;

*min-height:800px;

max-height:3000px;

background-color:#000000;}

.teloa {

background-repeat:no-repeat;

position:relative;

background-image:url(images/shapka2.jpg);

width:1024px;

*min-height:800px;

max-height:3000px;

background-color:#000000;}

/*----- Стили шапки-----*/

.header {

position:relative;

border-color: #FFFFFF;

width:1024px;

height:400px;}

/*----- Конец стилей шапки-----*/

/*----- Стили рабочего поля-----*/

.telo1 {

position:relative;

border-color: #FFFFFF;

width:1024px;}

/*----- Стили левого столбца-----*/

.left {

float: left;

width:242px;} /*----- Стили левого вертекального меню-----*/

.leftmenu{

margin-top: 130px;

float:right;

width:232px;}

.tleft {

background-repeat:no-repeat;

background-image:url("images/t_left.jpg");

height:50px;}

.bleft {

background-repeat:no-repeat;

background-image:url("images/b_left.jpg");

height:50px;}

.left1 {

text-align:left;

background-image:url("images/left.jpg");

background-repeat:repeat-y;

padding-left:20px;

height:100%;

padding-top: 1px;

padding-bottom: 1px;} .left1 ul {list-style:none;}

.left1 ul li a:link {

text-decoration:none;

color:#000000; }

.left1 ul li a:visited {

text-decoration:none;

color:#000000;}

.left1 ul li a:hover {

text-decoration:underline;

color:#000000;}

.left1 ul li a:active {

text-decoration:underline;

color:#000000;}

/*-- Конец стилей левого вертикального меню--*/

/*----- Конец стилей левого столбца-----*/

/*----- Стили поле контента-----*/

.content {

position:relative;

float:right;

max-height:5000;

width:690px;}

.content1 {

background-image:url("images/centr.jpg");

margin-top: 18px;

position:relative;

float:left;

width:640px;

max-height:5000px;}

.top {

padding-top: 60px;

background-repeat:no-repeat;

background-image:url("images/top.jpg");

position:relative;

float: top;

width:640px;

height:160px;}

.center {

background-image:url("images/centr.jpg");

position:relative;

width:640px;} .center1 {

text-align:left;

position:relative;

width:550px;}

/*----- Конец стилей поле контента-----*/

/*----- Конец стилей рабочего поля-----*/

/*----- Стили нижней панели-----*/

.bottom2 {

background-repeat:no-repeat;

background-image:url("images/bottom.jpg");

position:relative;

float: right;

width:735px;

height:160px;}

.bottom {

position:relative;

border-color: #FFFFFF;

width:1024px;

height:160px;}

/*----- Конец нижней панели-----*/

/*----- Разные стили-----*/

a:link {text-decoration:none; color:#000000; }

a:visited {text-decoration:none; color:#000000;}

a:hover {text-decoration:underline; color:#000000;}

a:active {text-decoration:underline; color:#000000;}

/*----- Стиль соц ссылок -----*/

.buttons{

font-size: 13px;

font-weight: bold;

padding-left:15px;

border:0px solid #CCC;}

60