Разработка элементов пользовательского интерфейса для облачной системы взаимодействия с кластером
Информационные технологии в области высокопроизводительных вычислений. Структура вычислительного кластера. Преимущества кластерной архитектуры, требования к ней. Разработка программ для параллельных вычислительных систем. Особенности облачных технологий.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 02.08.2015 |
Размер файла | 2,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
2.6 Библиотека "Highcharts"
"Highcharts" - библиотека для создания графиков, написанная на JavaScript, позволяет легко добавлять интерактивные, анимированные графики на сайт или в веб-приложение. На данный момент библиотека поддерживает большое количество диаграмм: линейных, круговых, колоночных, рассеивающих и множество других [32].
Построенные графики работоспособны во всех популярных браузерах, включая Safari на iPhone.
Минимальная версия для Internet Explorer составляет 6+. Также браузеры, поддерживающие Canvas-элемент, и в некоторых случаях SVG для графического рендеринга.
Библиотека бесплатна для некоммерческого использования, однако цена для коммерческого использования на одном сайте составляет $80, безлимитное использование - 360 долларов.
Поддерживаются следующие типы вывода графиков:
line, spline, area, areaspline, column, bar, pie и scatter. И они могут быть комбинированы друг с другом при выводе конечному пользователю, и обладают возможностью отключения любого из них в режиме реального времени непосредственно пользователем для удобства разборки информации.
Данные для построения графиков могут быть взяты как из самого JS, так из локального файла, базы данных или с удаленного сервера.
Особенности:
· библиотека работает на чистом JS и не требует каких-либо плагинов или Flash;
· вывод графиков довольно прост, и они могут быть использованы даже новичками в веб-разработке;
· есть увеличение отдельных областей;
· поддержка скинов/тем оформлений;
· поддержка tooltip с выводом информации;
· в большинстве типов графиков есть поддержка date-time X-оси;
· размер библиотеки ~18кб.
3. Практическая часть
В ходе выполнения работы были созданы скрипты на языке PHP c использованием фреймворка Yii и библиотек "Bootstrap" и "Highcharts", реализующие следующие задачи:
1. Интерфейс регистрации.
2. Интерфейс модерации.
3. Визуализация.
Вёрстка сайта была осуществлена с использованием фреймворка "Bootstrap". Визуализация реализована при помощи библиотеки "HighCharts".
Разработанная система предназначается для работы с кластером "Synergy" на кафедре информационных компьютерных технологий РХТУ им.Д.И. Менделеева. Данный программный продукт позволяет получить удаленный доступ к кластеру для обычных пользователей. Следует отметить возможность доступа помимо стационарных персональных компьютеров и с мобильных устройств.
3.1 Интерфейс для регистрации пользователей
Данный элемент интерфейса реализован при помощи скриптов: SiteController. php, LoginForm. php, RegistrationForm. php, activate. php, login. php, registration. php, registrationSuccess. php (см. приложение 1). С их помощью обеспечивается ввод информации о пользователе в поля и контроль правильности заполнения формы (рис 3.1, 3.2).
В случае успешного завершения регистрации создается новая учетная запись и на экран выводится сообщение с инструкциями (рис.3.3.)
Реализована отсылка регистрационной информации на электронный адрес пользователя (рис. 3.4).
Рис. 3.1 Пример заполнения регистрационной формы
Рис. 3.2 Пример ошибочного заполнения формы регистрации
Рис. 3.3 Сообщение после завершения регистрации
Рис. 3.4 Сообщение об успешной активации учётной записи
После завершения операций регистрации становится доступен вход в учётную запись пользователя через форму рис. 3.5.
Рис. 3.5 Экран входа пользователя
Войдя в систему, пользователь может изменить настройки своего профиля (рис. 3.6), а также изменить пароль (рис. 3.7).
3.2 Интерфейс для модерации пользовательских учетных записей и задач
Интерфейс для администрирования учетных записей реализован скриптами: UsersController. php, Users. php, index. php, form. php (см. приложение 1). Модератор имеет возможность добавлять (рис.3.8), сортировать, удалять, редактировать учетные записи пользователей, а также авторизовываться под именем пользователя.
Скриншот интерфейса администратора приведен на рис.3.9.
Кроме того модератор может управлять запущенными задачами. Данная функция реализована скриптами: TasksController. php, Task. php, TaskData. php, index. php, tabs. php, result. php, form. php, form2. php, form3. php. С помощью этих скриптов модератор имеет возможность редактировать, удалять и менять статус задачи, чтобы пользователь мог отслеживать состояние своих задач. Также он может просматривать результаты визуализации пользовательских задач. Подробнее о визуализации см. ниже.
3.3 Визуализация результатов
Для визуализации результатов применялась библиотека "HighCharts", предлагающая широкий спектр доступных графиков. Пользователю доступны функции самостоятельного форматирования построенных графиков.
Управление настройками библиотеки осуществлялось при помощи виджета result. php на примере тестовой задачи, в качестве которой была взята работа аспиранта Хорошавина Л. "Квантово-механический расчет зонной структуры углеродной нанотрубки". Результаты построения графиков для данной задачи при различных опциях форматирования приведены на рис. 3.14 - 3.15.
Рис. 3.14 Пример графика
Рис. 3.15 Пример интерактивного изменения графика пользователем. Выполнено выделение области для дальнейшего масштабирования
4. Описание программы
4.1 Общие сведения
Система создана с помощью фреймворка Yii. Данный программный продукт включает в себя сам фреймворк и разработанный на его основе интерфейс приложения для удаленного взаимодействия с суперкомпьютером.
Фреймворк Yii предоставляет возможность создания на его основе пользовательских приложений. При этом он сам не является готовым продуктом для использования конечными пользователями, которые обычно работают с прикладными решениями (web-приложениями), разработанными с использованием данного фреймворка.
Такой подход позволяет автоматизировать различные виды деятельности, используя единую технологическую платформу. Приложения устанавливаются на web-сервере, обращение к ним происходит через протокол html, который является стандартом работы с web-документами. Это позволяет обращаться к данному приложению с любого устройства, подключенного к сети, используя данные логина и пароля. Тем самым обеспечивается высокая скорость внедрения современных технологий во всех прикладных решениях.
4.2 Функциональное назначение
Разработанная система предназначается для работы с кластером "Synergy" на кафедре информационных компьютерных технологий РХТУ им.Д.И. Менделеева. Данный программный продукт позволяет получить удаленный доступ к кластеру.
4.3 Описание логической структуры
В файловом варианте можно сказать, что фреймворк "Yii" - это программная платформа, облегчающая разработку и объединение разных компонентов. Приложение Yii устанавливается на web-сервер, окружение которого является идентичным окружению той среды, на которой велась разработка проекта (рис. 4.1). Все расчёты проводятся на кластере, передавая пользователю только cгенерированные документы с результатами.
Рис. 4.1 Структурная схема работы приложения Yii
1. Пользователь осуществляет запрос посредством URL http://www.cloudsim.com/index. php? r=post/show&id=1, и веб-сервер обрабатывает его, запуская скрипт инициализации index. php.
2. Скрипт инициализации создает экземпляр приложения и запускает его на выполнение.
3. Приложение получает подробную информацию о запросе пользователя от компонента приложения request.
4. Приложение определяет запрошенные контроллер и действие при помощи компонента urlManager. В данном примере контроллером будет post, относящийся к классу PostController, а действием - show, суть которого определяется контроллером.
5. Приложение создаёт экземпляр запрашиваемого контроллера для дальнейшей обработки запроса пользователя. Контроллер определяет соответствие действия show методу actionShow в классе контроллера. Далее создаются и применяются фильтры (например, access control, benchmarking), связанные с данным действием, и, если фильтры позволяют, действие выполняется.
6. Действие считывает из базы данных модель Post с ID равным 1.
7. Действие подключает представление show, передавая в него модель Post.
8. Представление получает и отображает атрибуты модели Post.
9. Представление подключает некоторые виджеты.
10. Сформированное представление вставляется в макет страницы.
11. Действие завершает формирование представления и выводит результат пользователю.
4.4 Используемые технические средства
Серверное обеспечение
· Процессор не менее 2-х ядер при тактовой частоте 1.9 ГГц;
· Операционная система: Linux, Windows;
· Оперативная память не менее 8 Гб;
· Установленные пакеты: Apache, MySQL, PHP, Yii, PHPSTORM, Git;
Клиентское обеспечение:
· Процессор одноядерный процессор с частотой не ниже 1.9 ГГц;
· Устройство, поддерживающее протокол передачи http;
· Web-браузер;
4.5 Вызов и загрузка
Для работы с приложением требуется подключение к сети Интернет, web-браузер с поддержкой HTML5, JavaScript и CSS. Для доступа к приложению необходимо обратиться по web-адресу, который указывается в настройках сервера. При обращении пользователю необходимо пройти процедуру авторизации используя персональный логин и пароль.
4.6 Входные и выходные данные
Инфологическая модель данного комплекса представлена на рис. 4.1.
Рис. 4.1 Инфологическая модель
Данная модель реализуется в скриптах: SiteController. php, LoginForm. php, RegistrationForm. php, activate. php, login. php, registration. php, registrationSuccess. php, UsersController. php, Users. php, index. php, form. php, TasksController. php, Task. php, TaskData. php, index. php, tabs. php, result. php, form. php, form2. php, form3. php.
Даталогическая модель данного комплекса представлена на рис. 4.2.
Рис. 4.2 Даталогическая модель
Данная модель реализуется в скриптах: SiteController. php, LoginForm. php, RegistrationForm. php, activate. php, login. php, registration. php, registrationSuccess. php, UsersController. php, Users. php, index. php, form. php, TasksController. php, Task. php, TaskData. php, index. php, tabs. php, result. php, form. php, form2. php, form3. php.
Пользовательская форма (риc.3.1) реализована с помощью скриптов: UsersController. php, RegistrationForm. php, registration. php. Данные из этой формы считываются и передаются в базу данных в таблицу "Users", написанную на языке MySQL.
Пользовательская форма (риc.3.3) реализована с помощью скрипта: registrationSuccess. php.
Пользовательская форма (риc.3.4) реализована с помощью скрипта: activate. php.
Пользовательская форма (риc.3.5) реализована с помощью скриптов: UsersController. php, LoginForm. php, login. php. Данные из этой формы считываются и сравниваются с данными из таблицы "Users", с полями email и password ранее зарегистрированного пользователя.
Пользовательская форма (риc.3.6) реализована с помощью скриптов: UsersController. php, update. php. С помощью этой формы пользователь может поменять свое имя. Данные перезапишутся в таблицу "Users" в поле name.
Пользовательская форма (риc.3.7) реализована с помощью скриптов: ProfileController. php, changePassword. php. С помощью этой формы пользователь может поменять свой пароль. Данные перезапишутся в таблицу "Users" в поле password.
Форма администратора (риc.3.8) реализована с помощью скриптов: UsersController. php, Users. php. С помощью этой формы администратор может создать нового пользователя. Данные запишутся в базу данных в таблицу "Users" в поля: name, email, password, role.
Форма администратора (риc.3.9) реализована с помощью скриптов: UsersController. php, Users. php, index. php.
Пользовательская форма (риc.3.10) реализована с помощью скриптов: TasksController. php, Task. php, index. php. При создании задачи данные записываюся в базу данных в таблицу "Task" в поля: name, type, status, created.
Пользовательская форма (риc.3.11-3.15) реализована с помощью скриптов: TasksController. php, Task. php, tabs. php, form. php, form2. php, form3. php.
Данные из этих форм считываются и записываются в таблицу "Task_data", в следующие поля: task_id, description, index_nano_n, index_nano_m, length_link, indent_radius_inside, indent_radius_outwards, nuclear_charge, valence_electrons, s_orbital, p_orbital, d_orbital, f_orbital, g_orbital, auto_calculate, max_energy, accuracy_calculation, number_points, calculation_zone, max_energy_graph, min_energy_graph, time_calculation.
5. Руководство программиста
5.1 Назначение и условия применения программы
Разработанная система предназначается для работы с кластером "Synergy" на кафедре информационных компьютерных технологий РХТУ им.Д.И. Менделеева. Данный программный продукт позволяет пользователю получить удаленный доступ к кластеру для запуска задач.
5.2 Характеристика программы
Разработанная система является web-приложением, что делает его кроссплатформенным и позволяет обращаться к нему независимо от местоположения клиента.
Серверная часть располагается на отдельном выделенном под нее сервере. Требования к клиентской части являются минимальными. Любое устройство, на котором может быть запущен браузер.
5.3 Обращение к программе
Обращение к программе производится через интерфейс web-браузера. Когда пользователь обращается по web-адресу на сервер, для начала ему предлагается войти или зарегистрироваться. Если же пользователь зарегистрирован, то он может войти в систему (если сохранить пароль, то в дальнейшем данные будут уже сохранены). После авторизации будет доступен пользовательский интерфейс, в котором:
Пользователю будет доступно создание, редактирование и визуализация задач.
Администратору предоставляется возможность просмотра и контроля всех созданных задач, авторизация под любым пользователем, редактирование учетных записей, изменение роли.
5.4 Входные и выходные данные
Данными для входа являются значения, вводимые пользователем при создании задачи, данные при регистрации или изменении параметров.
Входные переменные:
email => E-mail,
password => Пароль
реализованы в скрипте LoginForm. php.
Входные переменные:
name => Имя,
email => E-mail,
password => Пароль,
password2 => Повторите пароль
реализованы в скрипте RegistrationForm. php.
Входные переменные:
id => ID,
users_id => Пользователь,
name => Название,
type => Тип,
status => Статус,
created => Создан,
реализованы в скрипте Task. php.
Входные переменные:
id => ID,
task_id => Task,
description => Описание проекта,
index_nano_n => Индекс нанотрубки N,
index_nano_m => Индекс нанотрубки M,
length_link => Длина связи С-С,
indent_radius_inside => Отступ от радиуса внутрь,
indent_radius_outwards => Отступ от радиуса наружу,
nuclear_charge => Заряд ядра,
valence_electrons => Валентных электронов,
s_orbital => Энергия s орбитали,
p_orbital => Энергия p орбитали,
d_orbital => Энергия d орбитали,
f_orbital => Энергия f орбитали,
g_orbital => Энергия g орбитали,
auto_calculate => Автоматически рассчитывать координаты атомов,
max_energy => Максимальная энергия, для которой ищутся базисные функции (Энергия обрезания),
accuracy_calculation => Точность вычисления двойных интегралов и сходимости по 1,number_points => Начальное количество точек расчета в зоне Бриллюэна,
calculation_zone => Расчет по полной зоне Бриллюэна (-pi/c - pi/c),
max_energy_graph => Максимальное значение энергии на графике,
min_energy_graph => Минимальное значение энергии на графике,
time_calculation => Ограничение времени расчета (минут),
реализованы в скрипте TaskData. php.
Входные переменные:
id => ID,
created => Создан,
email => Email,
name => Имя,
password => Пароль,
oldPassword => Старый пароль,
newPassword => Новый пароль,
verifyPassword => Повтор пароля,
role => Роль,
реализованные в скрипте Users. php.
Выходными являются данные, полученные после расчета на суперкомпьютере, по которым строится график.
Также выходными переменными являются:
id => ID,
task_id => Task,
description => Описание проекта,
index_nano_n => Индекс нанотрубки N,
index_nano_m => Индекс нанотрубки M,
length_link => Длина связи С-С,
indent_radius_inside => Отступ от радиуса внутрь,
indent_radius_outwards => Отступ от радиуса наружу,
nuclear_charge => Заряд ядра,
valence_electrons => Валентных электронов,
s_orbital => Энергия s орбитали,
p_orbital => Энергия p орбитали,
d_orbital => Энергия d орбитали,
f_orbital => Энергия f орбитали,
g_orbital => Энергия g орбитали,
auto_calculate => Автоматически рассчитывать координаты атомов,
max_energy => Максимальная энергия, для которой ищутся базисные функции (Энергия обрезания),
accuracy_calculation => Точность вычисления двойных интегралов и сходимости по 1,number_points => Начальное количество точек расчета в зоне Бриллюэна,
calculation_zone => Расчет по полной зоне Бриллюэна (-pi/c - pi/c),
max_energy_graph => Максимальное значение энергии на графике,
min_energy_graph => Минимальное значение энергии на графике,
time_calculation => Ограничение времени расчета (минут),
реализованы в скрипте TaskData. php.
ВЫВОДЫ
В ходе выполнения работы освоены:
Ш Язык программирования PHP
Ш Фреймворк Yii
Ш Фреймворк Bootstrap
Ш Библиотека Highcharts
Создан пользовательский интерфейс для доступа удалённых пользователей к ресурсам кластера, обеспечивающий:
· регистрацию и модерацию пользователей администратором;
· администрирование пользовательских задач;
· визуализацию результатов расчётов.
Список использованной литературы
1. Гергель В.П., Стронгин Р.Г. Основы параллельных вычислений для многопроцессорных вычислительных систем. - Н. Новгород // Изд-во Нижегор. ун-та. - 2003 - стр.55.
2. Облачные технологии. [Электронный ресурс]. - Режим доступа: http://swsys-web.ru/cloud-computing-basic-concepts-problems.html (Дата обращения: 3.05.2015).
3. A Report of The National Science Foundation Advisory Committee for Cyberinfrastructure Task Force on Grand Challenges, Final Report, March 2011 // nsf.gov [Электронный ресурс]. URL: http://www.nsf.gov/cise/aci/taskforces/TaskForceReport_GrandChallenges. pdf (дата обращения: 04.04.2015).
4. Armbrust M. et al. A view of cloud computing // Communications of the ACM. - 2010. - Vol.53. - №.4. - P.49-59.
5. nanoHUB. [Электронный ресурс]. - Режим доступа: https: // nanohub.org/ (Дата обращения: 8.05.2015).
6. Buyya R. et al. High Performance Cluster Computing: Architectures and Systems (Volume 1) // Prentice Hall, Upper SaddleRiver, NJ, USA. - 1999. - Vol.1. - 849 p
7. Официальный сайт Top500 // top500.org [Электронный ресурс]. - Режим доступа: http://www.top500.org/statistics/list/ (дата обращения: 9.05.2015).
8. Параллельные вычисления [Электронный ресурс]. - Режим доступа: http://ikt. muctr.ru/index. php (Дата обращения: 11.05.2015).
9. Клименко В.П., Комухаев Э.И. Суперкомпьютеры: Тенденции и технологии последнего двадцатилетия // Математические машины и системы. - 2006. - Т.1. - №.3.
10. Lin J. et al. What is Cloud Computing? // IT as a Service. - 2009. - Vol.11. - №.2. - P.10-13.
11. Mell P., Grance T. The NIST definition of cloud computing // National Institute of Standards and Technology. [Электронный ресурс]. - Режим доступа: http://csrc. nist.gov/publications/nistpubs/800-145/SP800-145. pdf (дата обращения: 11.05.2015).
12. NanoCloud - Вычислительные сервисы для нанотехнологий [Электронный ресурс]. - Режим доступа: http://www.nanocloud. su (дата обращения 12.05.2015)
13. Костенецкий П.С., Семенов А.И., Соколинский Л.Б. Создание образовательной платформы "Персональный виртуальный компьютер" на базе облачных вычислений" // Научный сервис в сети Интернет: экзафлопсное будущее: Труды международной научной конференции (г. Новороссийск, 19-24 сентября 2011 г.). М.: Изд-во МГУ. - 2011.
14. CLAVIRE. [Электронный ресурс]. - Режим доступа: http://clavire.ru/ (дата обращения: 15.05.2015).
15. Суперкомпьютер "СКИФ-Аврора ЮУрГУ". [Электронный ресурс]. - Режим доступа: http://supercomputer. susu.ru/computers/skif_avrora/ (дата обращения: 15.05.2015).
16. Вычислительный кластер "СКИФ Урал". [Электронный ресурс]. - Режим доступа: http://supercomputer. susu.ru/computers/skif_ural (дата обращения: 15.05.2015).
17. Даниел Дж. Баррет. Linux: основные команды. Карманный справочник / Пер. с англ. - М.: КУДИЦ-ОБРАЗ - 2007. - 288с
18. К.Б. Голобородский - Знакомьтесь: Ubuntu /. - Ростов н/Д.: Феникс, 2010. - 160с.
19. Робин Никсон. Ubuntu для всех: Пер. с англ. - М.: Издательство "Русская редакция"; СПб.: "БХВ Петербург", - 2011. - 464с
20. Эви Немет, Гарт Снайдер, Трент Хейн, Бэн Уэйли. Unix и Linux: руководство системного администратора, 4-е изд.: Пер. с англ. - М.: ООО "И.Д. Вильямс". 2012. - 1312с
21. Бруй В.В., Карлов С.В. Linux-сервер: пошаговые инструкции и настройки. - М.: Изд-во СИП РИА, 2003. - 572с.
22. Yiiframework [Электронный ресурс]. - Режим доступа: http://www.yiiframework.com/doc/guide/1.1/ru/ (дата обращения: 15.05.2015).
23. Zendframework [Электронный ресурс]. - Режим доступа: http://zendframework.ru/ (дата обращения: 16.05.2015).
24. Cakephp [Электронный ресурс]. - Режим доступа: http://cakephp.org/ (дата обращения: 16.05.2015).
25. Kohana [Электронный ресурс]. - Режим доступа: https: // kohanaframework.org/ (дата обращения: 16.05.2015).
26. Codeigniter [Электронный ресурс]. - Режим доступа: http://code-igniter.ru/ (дата обращения: 16.05.2015).
27. Symfony [Электронный ресурс]. - Режим доступа: https: // symfony.com/ (дата обращения: 16.05.2015).
28. Севрюков С.Ю. Базы данных. [Электронный ресурс]. - Режим доступа: http://www.apmath. spbu.ru/ru/education/final/question43new. pdf (Дата обращения: 15.04.2015).
29. Сейед Тахагхогхи, Хью Е. Вильямс. Руководство по MySQL/ Пер. с англ. - М.: Издательство "Русская редакция"; 2007. - 554с.
30. Git [Электронный ресурс]. - Режим доступа: https: // git-scm.com/book/ru (дата обращения: 19.05.2015).
31. Bootstrap [Электронный ресурс]. - Режим доступа: http://mybootstrap.ru/ (дата обращения: 19.05.2015).
32. Highcharts [Электронный ресурс]. - Режим доступа: http://mybootstrap.ru/ (дата обращения: 19.05.2015).
Приложение
Приложение 1
Листинг программы
controllers/SiteController. php
<? php
class SiteController extends UController
{
public function actionIndex ()
{
if ($this->getUser () - >isGuest ()) {
$this->redirect (array ('login'));
} else {
$this->redirect (Yii:: app () - >homeUrl);
}
}
public function actionError ()
{
if ($error=Yii:: app () - >errorHandler->error)
{
if (Yii:: app () - >request->isAjaxRequest)
echo $error ['message'];
else
$this->render ('error', $error);
}
}
public function actionLogin ()
{
$model = new LoginForm;
if (isset ($_POST ['LoginForm'])) {
$model->attributes = $_POST ['LoginForm'];
if ($model->validate () && $model->login ()) {
$this->redirect (Yii:: app () - >user->returnUrl);
}
}
$this->render ('login', compact ('model'));
}
public function actionRegistration ()
{
$model = new RegistrationForm;
$this->performAjaxValidation ($model);
if ($model->getFormData ()) {
$model->attributes = $model->getFormData ();
if ($model->validate () && $model->registration ()) {
$this->setFlash ('success', "Регистрация пройдена успешно");
$this->redirect (array ('registrationSuccess'));
} else {
$this->setFlash ('error', ACTION_VALIDATE_ERROR);
HDev:: log ($model->errors);
}
}
$this->render ('registration', compact ('model'));
}
public function actionRegistrationSuccess ()
{
$this->render ('registrationSuccess');
}
public function actionActivate ($key)
{
/** @var Users $model */
$model = Users:: model () - >findByAttributes (array ('activation_key' => $key));
if (! $model) {
throw new CHttpException (404, 'Пользователь не найден');
}
$model->status = 1;
if (! $model->save ()) {
HDev:: logSaveError ($model);
}
$this->render ('activate');
}
public function actionLogout ()
{
Yii:: app () - >user->logout ();
$this->redirect (Yii:: app () - >homeUrl);
}
}
models/form/LoginForm. php
<? php
class LoginForm extends CFormModel
{
public $email;
public $password;
private $_identity;
public function rules ()
{
return array (
array ('email, password', 'required'),
array ('email', 'email'),
);
}
public function setUser (Users $user) {
$this->email = $user->email;
$this->password = $user->password;
}
public function login ()
{
if ($this->_identity === null) {
$this->_identity = new UUserIdentity ($this->email,$this->password);
$this->_identity->authenticate ();
}
if ($this->_identity->errorCode === UUserIdentity:: ERROR_NONE) {
Yii:: app () - >user->login ($this->_identity, 3600 * 24 * 365 * 10);
return true;
}
elseif ($this->_identity->errorCode === UUserIdentity:: ERROR_USERNAME_INVALID) {
$this->addError ('email', 'Пользовтель не найден');
}
elseif ($this->_identity->errorCode === UUserIdentity:: ERROR_PASSWORD_INVALID) {
$this->addError ('password', 'Неправильный пароль');
}
return false;
}
public function attributeLabels ()
{
return array (
'email' => 'E-mail',
'password' => 'Пароль',
);
}
}
models/form/RegistrationForm. php
<? php
class RegistrationForm extends UFormModel
{
public $name;
public $email;
public $password;
public $password2;
private $_identity;
public function rules ()
{
return array (
array ('name, email, password, password2', 'required'),
array ('password2', 'compare', 'compareAttribute' => 'password'),
array ('email', 'email'),
array ('email', 'unique', 'className' => 'Users', 'attributeName' => 'email'),
);
}
public function setUser (Users $user) {
$this->email = $user->email;
$this->password = $user->password;
}
public function registration ()
{
$model = new Users ();
/* присвоим нужные поля */
$model->email = $this->email;
$model->name = $this->name;
$model->password = $this->password;
$model->role = UserRole:: USER;
// $model->name = (string) str_replace (" ","",$_POST ['Users'] ['name']);
// $model->role = (int) 1;
/* Если запрос прошел валидацию */
if (! $model->save ()) {
HDev:: logSaveError ($model);
return false;
}
return true;
// return true;
}
public function attributeLabels ()
{
return array (
'name' => 'Имя',
'email' => 'E-mail',
'password' => 'Пароль',
'password2' => 'Повторите пароль',
);
}
}
views/site/login. php
<? php
/**
* @var $this UController
* @var $model LoginForm
*/
$this->pageTitle = 'Вход';
$this->widget ('TbAlert');
/** @var TbActiveForm $form */
$form = $this->beginWidget (BS_ActiveForm, array (
'layout' => TbHtml:: FORM_LAYOUT_HORIZONTAL,
'enableAjaxValidation' => true,
'enableClientValidation' => true,
));
echo $form->textFieldControlGroup ($model, 'email');
echo $form->passwordFieldControlGroup ($model, 'password');
echo TbHtml:: formActions (array (
TbHtml:: submitButton ('Войти', array ('color' => TbHtml:: BUTTON_COLOR_SUCCESS)),
TbHtml:: linkButton ('Регистрация', array ('url' => '/site/registration', 'color' => TbHtml:: BUTTON_COLOR_PRIMARY)),
));
$this->endWidget ();
views/site/registration. php
<? php
/**
* @var $this UController
* @var $model LoginForm
*/
$this->pageTitle = 'Регистрация';
$this->widget ('TbAlert');
/** @var TbActiveForm $form */
$form = $this->beginWidget (BS_ActiveForm, array (
'layout' => TbHtml:: FORM_LAYOUT_HORIZONTAL,
'enableAjaxValidation' => true,
'enableClientValidation' => true,
));
echo $form->textFieldControlGroup ($model, 'name');
echo $form->textFieldControlGroup ($model, 'email');
echo $form->passwordFieldControlGroup ($model, 'password');
echo $form->passwordFieldControlGroup ($model, 'password2');
echo TbHtml:: formActions (array (
TbHtml:: submitButton ('Регистрация', array ('color' => TbHtml:: BUTTON_COLOR_SUCCESS)),
));
$this->endWidget ();
views/site/registrationSuccess. php
<? php
/**
* @var $this UController
* @var $model LoginForm
*/
$this->pageTitle = 'Спасибо за регистрацию';
$this->setFlash ('success', 'На Вашу почту отправлено письмо с дальнейшими инструкциями для активации Вашего аккаунта. ');
$this->widget ('TbAlert');
views/site/activate. php
<? php
/**
* @var $this UController
* @var $model Users
*/
$this->pageTitle = 'Ваш аккаунт успешно активирован';
$this->setFlash ('success', 'Теперь Вы можете войти в систему ипользую свой email и пароль. ');
$this->widget ('TbAlert');
controllers/UserController. php
<? php
class UsersController extends UController
{
public function filters ()
{
return array (
'accessControl',
);
}
public function accessRules ()
{
return array (
array (
'allow',
'users' => array (UserAccessTypes:: AUTH),
'expression' => function (UWebUser $user) {
// Если у пользователя нет нужного уровня - блочим (админка)
return $user->getModel () - >isAdmin ();
}
),
array ('deny'),
);
}
public function actionIndex ()
{
$model = new Users ('search');
$model->unsetAttributes ();
if ($model->getQueryData ()) {
$model->attributes = $model->getQueryData ();
}
$this->pageTitle='Пользователи';
$this->breadcrumbs= array ($this->pageTitle);
$this->render ('index', compact ('model'));
}
public function actionCreate ()
{
$model = new Users ();
$this->performAjaxValidation ($model);
if ($model->getFormData ()) {
$model->attributes = $model->getFormData ();
if ($model->save ()) {
$this->setFlash ('success', ACTION_CREATE_SUCCESS);
$this->redirect (array ('index'));
} else {
$this->setFlash ('error', ACTION_VALIDATE_ERROR);
HDev:: log ($model->getErrors ());
}
}
$this->pageTitle='Создание пользователя';
$this->breadcrumbs = array (
'Пользователи' => array ('index'),
$this->pageTitle
);
$this->render ('form', compact ('model'));
}
public function actionUpdate ($id)
{
$model = $this->loadModel ($id);
$this->performAjaxValidation ($model);
if ($model->getFormData ()) {
$model->attributes = $model->getFormData ();
if ($model->save ()) {
$this->setFlash ('success', ACTION_CREATE_SUCCESS);
$this->redirect (array ('index'));
} else {
$this->setFlash ('error', ACTION_VALIDATE_ERROR);
HDev:: log ($model->getErrors ());
}
}
$this->pageTitle='Изменение пользователя';
$this->breadcrumbs = array (
'Пользователи' => array ('index'),
$this->pageTitle
);
$this->render ('form', compact ('model'));
}
public function actionDelete ($id)
{
$model = $this->loadModel ($id);
if (Yii:: app () - >user->id == $model->id)
throw new CHttpException (403, 'Суицид - это не выход. ');
$model->delete ();
}
/**
* @param $id
* @return Users
* @throws CHttpException
*/
protected function loadModel ($id)
{
$model = Users:: model () - >findByPk ($id);
if (! $model)
throw new CHttpException (404, 'Пользователь не найден');
return $model;
}
public function actionLogin ($id)
{
$virtualModeOwner = Yii:: app () - >user->id;
$this->virtualMode ($id, $virtualModeOwner);
Yii:: app () - >controller->redirect (Yii:: app () - >homeUrl);
}
public function actionLogout ()
{
$id = Yii:: app () - >user->getState ('virtualModeOwner');
$this->virtualMode ($id, false);
Yii:: app () - >controller->redirect (Yii:: app () - >homeUrl);
}
/**
* @param integer $loginUserId
* @param mixed $virtualModeOwner - id of owner or false
* @return bool
*/
private function virtualMode ($loginUserId, $virtualModeOwner)
{
$identity=new UUserIdentity ("","",$loginUserId);
$identity->authenticate ();
if ($identity->errorCode===UUserIdentity:: ERROR_NONE)
{
if ($virtualModeOwner) {
$identity->setVirtualMode ($virtualModeOwner);
}
Yii:: app () - >user->logout ();
$result = Yii:: app () - >user->login ($identity);
return $result;
}
return false;
}
}
models/Users. php
<? php
/**
* This is the model class for table "users".
*
* The followings are the available columns in table 'users':
* @property integer $id
* @property string $created
* @property string $email
* @property string $name
* @property string $password
* @property string $role
* @property string $status
* @property string $activation_key
*/
class Users extends UActiveRecord
{
public $oldPassword;
public $newPassword;
public $verifyPassword;
/**
* @return string the associated database table name
*/
public function tableName ()
{
return 'users';
}
/**
* @return array validation rules for model attributes.
*/
public function rules ()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array (
array ('email, name, role', 'required'),
array ('password', 'required', 'on' => 'insert'),
array ('password', 'length', 'min' => 6, 'max' => 32, 'on' => 'insert'),
array ('newPassword', 'length', 'max' => 32),
array ('email', 'length', 'max'=>64),
array ('email', 'unique', 'caseSensitive' => false),
array ('name, newPassword, role', 'length', 'max'=>32),
array ('role', 'in', 'range'=> UserRole:: getValues ()),
array ('oldPassword, newPassword, verifyPassword', 'required', 'on' => 'changePassword'),
array ('oldPassword', 'match', 'on' => 'changePassword'),
array ('verifyPassword', 'compare', 'compareAttribute'=>'newPassword','message'=>'Пароли не совпадают'),
// The following rule is used by search ().
// @todo Please remove those attributes that should not be searched.
array ('id, created, email, name, password, role', 'safe', 'on'=>'search'),
);
}
/**
* Authenticates the password.
* This is the 'match' validator as declared in rules ().
*/
public function match ($attribute,$params)
{
if ($this->password! = UserHelper:: hash ($this->oldPassword))
$this->addError ('oldPassword','Текущий пароль указан неверно');
}
/**
* @return array relational rules.
*/
public function relations ()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array (
);
}
/**
* @return array customized attribute labels (name=>label)
*/
public function attributeLabels ()
{
return array (
'id' => 'ID',
'created' => 'Создан',
'email' => 'Email',
'name' => 'Имя',
'password' => 'Пароль',
'oldPassword' => 'Старый пароль',
'newPassword' => 'Новый пароль',
'verifyPassword' => 'Повтор пароля',
'role' => 'Роль',
);
}
public function beforeSave ()
{
if ($this->newPassword)
$this->password = UserHelper:: hash ($this->newPassword);
if ($this->isAttributeSafe ('password'))
$this->password = UserHelper:: hash ($this->password);
if ($this->isNewRecord) {
$this->activation_key = md5 (rand (1000000, 9999999));
}
return parent:: beforeSave ();
}
/**
* Retrieves a list of models based on the current search/filter conditions.
*
* Typical usecase:
* - Initialize the model fields with values from filter form.
* - Execute this method to get CActiveDataProvider instance which will filter
* models according to data in model fields.
* - Pass data provider to CGridView, CListView or any similar widget.
*
* @return CActiveDataProvider the data provider that can return the models
* based on the search/filter conditions.
*/
public function search ()
{
// @todo Please modify the following code to remove attributes that should not be searched.
$criteria=new CDbCriteria;
$criteria->compare ('id',$this->id);
$criteria->compare ('created',$this->created,true);
$criteria->compare ('email',$this->email,true);
$criteria->compare ('name',$this->name,true);
$criteria->compare ('password',$this->password,true);
$criteria->compare ('role',$this->role,true);
return new CActiveDataProvider ($this, array (
'criteria'=>$criteria,
));
}
/**
* Returns the static model of the specified AR class.
* Please note that you should have this exact method in all your CActiveRecord descendants!
* @param string $className active record class name.
* @return Users the static model class
*/
public static function model ($className=__CLASS__)
{
return parent:: model ($className);
}
public function setPassword ($password)
{
$this->password = md5 ($password);
}
public function isGuest () {
return $this->role == UserRole:: GUEST;
}
public function isAdmin () {
return $this->role == UserRole:: ADMIN;
}
public function getName ()
{
return $this->name? $this->name: $this->email;
}
}
views/users/form. php
<? php
/**
* @var $this UsersController
* @var $model Users
*/
/** @var TbActiveForm $form */
$form = $this->beginWidget (BS_ActiveForm, array (
'layout' => TbHtml:: FORM_LAYOUT_HORIZONTAL,
'enableAjaxValidation' => true,
'enableClientValidation' => true,
));
echo $form->dropDownListControlGroup ($model, 'role', UserRole:: getList ());
echo $form->textFieldControlGroup ($model, 'name');
echo $form->textFieldControlGroup ($model, 'email');
if ($model->isNewRecord) {
echo $form->passwordFieldControlGroup ($model, 'password', array (
'autocomplete' => 'off',
));
} else {
echo $form->passwordFieldControlGroup ($model, 'newPassword', array (
'autocomplete' => 'off',
));
echo $form->passwordFieldControlGroup ($model, 'verifyPassword', array (
'autocomplete' => 'off',
));
}
echo TbHtml:: formActions (array (
TbHtml:: submitButton ($model->isNewRecord? 'Создать': 'Сохранить', array ('color' => TbHtml:: ALERT_COLOR_SUCCESS)),
TbHtml:: resetButton ('Отмена')
));
$this->endWidget ();
views/users/index. php
<? php
/**
* @var $this UsersController
* @var $model Users
*/
$this->buttons = array (
array (
'items' => array (
array ('url' => array ('/users/create'), 'label' => 'Добавить', 'icon' => 'plus white'),
),
'color' => TbHtml:: BUTTON_COLOR_PRIMARY,
),
);
$this->widget ('TbGridView', array (
'id' => 'user-list',
'dataProvider' => $model->search (),
'filter' => $model,
'template' => '{summary} {items} {pager}',
'enableHistory' => false,
'columns' => array (
array (
'name' => 'id',
'htmlOptions' => array (
'class' => 'centred',
'style' => 'width: 20px'
)
),
array (
'name' => 'created',
'value' => function (Users $data) {
return HDates:: ui ($data->created);
}
),
array (
'name' => 'role',
'filter' => UserRole:: getList (),
'value' => function (Users $data) {
return UserRole:: getName ($data->role);
}
),
array (
'name' => 'name',
),
array (
'name' => 'email',
),
array (
'class' => 'bootstrap. widgets. TbButtonColumn',
'template' => '{update} {delete} {login}',
'buttons' => array (
'login' => array (
'label'=>'Авторизоваться', // text label of the button
'buttonType'=>'ajaxLink',
'type'=>'primary',
'icon'=>'user',
'url'=> function (Users $data) {
return array ('/users/login/'. $data->id);
}
)
)
),
),
));
? >
controllers/TasksController. php
<? php
class TasksController extends UController
{
public function actionIndex ()
{
$model = new Task ('search');
$model->unsetAttributes ();
if ($model->getQueryData ()) {
$model->attributes = $model->getQueryData ();
}
if (! $this->getUser () - >isAdmin ()) {
$model->users_id = $this->getUser () - >id;
}
$this->pageTitle='Задачи';
$this->breadcrumbs = array ($this->pageTitle);
$this->render ('index', compact ('model'));
}
public function actionCreate ()
{
$model = new Task ();
$model->data = new TaskData ();
$this->performAjaxValidation ($model);
if ($model->getFormData () || $model->data->getFormData ()) {
$model->attributes = $model->getFormData ();
$model->data->attributes = $model->data->getFormData ();
$model->type = TaskType:: LENYA_TASK;
$model->status = TaskStatus:: NEW_ONE;
$model->users_id = $this->getUser () - >id;
if ($model->data->validate () && $model->save ()) {
$this->setFlash ('success', ACTION_CREATE_SUCCESS);
$this->redirect (array ('update', 'id' => $model->id));
} else {
$this->setFlash ('error', ACTION_VALIDATE_ERROR);
HDev:: log ($model->getErrors ());
HDev:: log ($model->data->getErrors ());
}
}
$this->pageTitle='Создание задачи';
$this->breadcrumbs = array (
'Задачи' => array ('index'),
$this->pageTitle
);
$this->render ('tabs', compact ('model'));
}
public function actionUpdate ($id)
{
$model = $this->loadModel ($id);
$this->performAjaxValidation ($model);
if ($model->getFormData () || $model->data->getFormData ()) {
$model->attributes = $model->getFormData ();
$model->data->attributes = $model->data->getFormData ();
$model->type = TaskType:: LENYA_TASK;
$model->status = TaskStatus:: NEW_ONE;
$model->users_id = $this->getUser () - >id;
if ($model->data->validate () && $model->save ()) {
$this->setFlash ('success', ACTION_CREATE_SUCCESS);
} else {
$this->setFlash ('error', ACTION_VALIDATE_ERROR);
HDev:: log ($model->getErrors ());
HDev:: log ($model->data->getErrors ());
}
}
$this->pageTitle='Изменение задачи';
$this->breadcrumbs = array (
'Задачи' => array ('index'),
$this->pageTitle
);
$this->render ('tabs', compact ('model'));
}
public function actionResult ($id) {
$model = $this->loadModel ($id);
$this->pageTitle='График квантово-механического рассчета зонной структуры углеродной нанотрубки';
$this->breadcrumbs = array ($this->pageTitle);
$this->render ('result', compact ('model'));
}
/**
* @param $id
* @return Task
* @throws CHttpException
*/
protected function loadModel ($id)
{
$model = Task:: model () - >findByPk ($id);
if (! $model)
throw new CHttpException (404, 'Задача не найдена');
return $model;
}
}
models/Task. php
<? php
/**
* This is the model class for table "task".
*
* The followings are the available columns in table 'task':
* @property integer $id
* @property integer $users_id
* @property string $name
* @property string $type
* @property integer $status
* @property string $created
*
* The followings are the available model relations:
* @property TaskData $data
*/
class Task extends UActiveRecord
{
/**
* @return string the associated database table name
*/
public function tableName ()
{
return 'task';
}
/**
* @return array validation rules for model attributes.
*/
public function rules ()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array (
array ('users_id, name, type', 'required'),
array ('users_id', 'numerical', 'integerOnly'=>true),
array ('name', 'length', 'max'=>32),
array ('type', 'length', 'max'=>64),
array ('status', 'length', 'max'=>255),
// The following rule is used by search ().
// @todo Please remove those attributes that should not be searched.
array ('id, users_id, name, type, status, created', 'safe', 'on'=>'search'),
);
}
/**
* @return array relational rules.
*/
public function relations ()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array (
'data' => array (self:: HAS_ONE, 'TaskData', 'task_id'),
);
}
/**
* @return array customized attribute labels (name=>label)
*/
public function attributeLabels ()
{
return array (
'id' => 'ID',
'users_id' => 'Пользователь',
'name' => 'Название',
'type' => 'Тип',
'status' => 'Статус',
'created' => 'Создан',
);
}
/**
* Retrieves a list of models based on the current search/filter conditions.
*
* Typical usecase:
* - Initialize the model fields with values from filter form.
* - Execute this method to get CActiveDataProvider instance which will filter
* models according to data in model fields.
* - Pass data provider to CGridView, CListView or any similar widget.
*
* @return CActiveDataProvider the data provider that can return the models
* based on the search/filter conditions.
*/
public function search ()
{
// @todo Please modify the following code to remove attributes that should not be searched.
$criteria=new CDbCriteria;
$criteria->compare ('id',$this->id);
$criteria->compare ('users_id',$this->users_id);
$criteria->compare ('name',$this->name,true);
$criteria->compare ('type',$this->type,true);
$criteria->compare ('status',$this->status);
$criteria->compare ('created',$this->created,true);
return new CActiveDataProvider ($this, array (
'criteria'=>$criteria,
));
}
protected function afterSave ()
{
if ($this->data) {
$this->data->task_id = $this->id;
if (! $this->data->save ()) {
HDev:: logSaveError ($this->data);
}
}
parent:: afterSave ();
}
/**
* Returns the static model of the specified AR class.
* Please note that you should have this exact method in all your CActiveRecord descendants!
* @param string $className active record class name.
* @return Task the static model class
*/
public static function model ($className=__CLASS__)
{
return parent:: model ($className);
}
}
models/TaskData. php
<? php
/**
* This is the model class for table "task_data".
*
* The followings are the available columns in table 'task_data':
* @property integer $id
* @property integer $task_id
* @property string $description
* @property integer $index_nano_n
* @property integer $index_nano_m
* @property double $length_link
* @property double $indent_radius_inside
* @property double $indent_radius_outwards
* @property integer $nuclear_charge
* @property integer $valence_electrons
* @property double $s_orbital
* @property double $p_orbital
* @property double $d_orbital
* @property double $f_orbital
* @property double $g_orbital
* @property boolean $auto_calculate
* @property integer $max_energy
* @property double $accuracy_calculation
* @property integer $number_points
* @property boolean $calculation_zone
* @property integer $max_energy_graph
* @property integer $min_energy_graph
* @property integer $time_calculation
*
* The followings are the available model relations:
* @property Task $task
*/
class TaskData extends UActiveRecord
{
/**
* @return string the associated database table name
*/
public function tableName ()
{
return 'task_data';
}
/**
* @return array validation rules for model attributes.
*/
public function rules ()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array (
array ('description, index_nano_n, index_nano_m, length_link, indent_radius_inside, indent_radius_outwards, nuclear_charge, valence_electrons, s_orbital, p_orbital, d_orbital, f_orbital, g_orbital, auto_calculate, max_energy, accuracy_calculation, number_points, calculation_zone, max_energy_graph, min_energy_graph, time_calculation', 'required'),
array ('task_id, index_nano_n, index_nano_m, nuclear_charge, valence_electrons, max_energy, number_points, max_energy_graph, min_energy_graph, time_calculation', 'numerical', 'integerOnly'=>true),
array ('length_link, indent_radius_inside, indent_radius_outwards, s_orbital, p_orbital, d_orbital, f_orbital, g_orbital, accuracy_calculation', 'numerical'),
array ('description', 'length', 'max'=>255),
array ('auto_calculate, calculation_zone', 'boolean'),
// The following rule is used by search ().
// @todo Please remove those attributes that should not be searched.
array ('id, task_id, description, index_nano_n, index_nano_m, length_link, indent_radius_inside, indent_radius_outwards, nuclear_charge, valence_electrons, s_orbital, p_orbital, d_orbital, f_orbital, g_orbital, auto_calculate, max_energy, accuracy_calculation, number_points, calculation_zone, max_energy_graph, min_energy_graph, time_calculation', 'safe', 'on'=>'search'),
);
}
/**
* @return array relational rules.
*/
public function relations ()
{
// NOTE: you may need to adjust the relation name and the related
...Подобные документы
История и факторы развития облачных вычислений. Роль виртуализации в развитии облачных технологий. Модели обслуживания и принципы работы облачных сервисов. Преимущества облака для Интернет-стартапов. Применение технологии облачных вычислений в бизнесе.
реферат [56,6 K], добавлен 18.03.2015Роль распределенных вычислительных систем в решении современных задач. Инструментальная система DVM для разработки параллельных программ. Средства построения формальной модели графического интерфейса. Требования к графическому интерфейсу DVM-системы.
курсовая работа [2,7 M], добавлен 15.10.2010История развития вычислительной техники. Понятие высокой готовности и отказоустойчивости системы. Разработка функциональной схемы отказоустойчивого кластера и структурной схемы виртуального стенда. Технико-экономическое обоснование объекта проектирования.
дипломная работа [2,7 M], добавлен 26.02.2013Анализ применения информационных технологий в организации обучения. Особенности проектирования автоматизированных информационно-справочных систем. Обзор средств создания приложения. Разработка пользовательского интерфейса программы, ее тестирование.
курсовая работа [1,2 M], добавлен 09.04.2015Анализ структуры и содержания плана маркетинга компании. Рынок облачных вычислений и возможность их применения. Отбор источников информации и представление полученных результатов. Разработка программной инструментальной оболочки облачных вычислений.
дипломная работа [149,8 K], добавлен 12.11.2013Понятие вычислительных систем, их классификация по различным признакам. Модели параллельных вычислений PGAS и APGAS. Разработка программного продукта для анализа информационных обменов в параллельных программах на языке IBM X10. Расчёт его себестоимости.
дипломная работа [1,6 M], добавлен 10.06.2013Требования к метрологическому обеспечению. Разработка архитектуры пользовательского интерфейса. Требования к программному, математическому, информационному обеспечению. Функциональная схема автоматизации. Разработка схемы информационных потоков.
курсовая работа [343,1 K], добавлен 20.12.2013Анализ особенностей жанров и технологий видеоигр. Обзор средств разработки видеоигр. Требования к разрабатываемому программному обеспечению. Разработка архитектуры программы и пользовательского интерфейса. Бизнес-модель внедрения видеоигры на рынок.
дипломная работа [1,7 M], добавлен 25.06.2017Сущность облачных вычислений, основные направления развития, достоинства и недостатки. Сеть Интернет как платформа научных коммуникаций. Разработка портала студенческого научного общества. Проектирование интерфейса web-сайта, выбор программных средств.
дипломная работа [5,9 M], добавлен 18.07.2014Изучение методов создания диалоговой оболочки отладчика MPI-программ, который войдет в состав системы автоматизации разработки параллельных программ (DVM-системы). Основные подходы к параллельному программированию и созданию пользовательского интерфейса.
курсовая работа [1,5 M], добавлен 14.10.2010Отличительные черты компьютерных программ экспертных систем, их разработка. Составные части систем: база знаний, механизм вывода, система пользовательского интерфейса. Структура базы знаний экспертной системы для помощи медикам в постановке диагноза.
курсовая работа [325,0 K], добавлен 04.02.2011Области применения быстрых вычислений. Проблемы эффективности последовательных и параллельных программ. Отображение циклов с условными операторами на асинхронные архитектуры. Рассмотрение исследовательских университетских распараллеливающих систем.
презентация [833,3 K], добавлен 07.08.2015История возникновения компьютерной науки. Продукты компании Apple. Основные категории, отличительные особенности, уровни облачных сервисов. Характеристика публичных и частных облаков. Преимущества и недостатки облачных вычислений, перспективы их развития.
контрольная работа [1,6 M], добавлен 06.08.2013Знакомство с историей развития многопроцессорных комплексов и параллельных вычислений. Персональные компьютеры как распространенные однопроцессорные системы на платформе Intel или AMD, работающие под управлением однопользовательских операционных систем.
презентация [1,1 M], добавлен 22.02.2016Пакетный метод как основной способ выполнения коммуникационных операций, его содержание и предъявляемые требования. Оценка трудоемкости операции передачи данных между двумя узлами кластера. Этапы разработки параллельных алгоритмов (распараллеливания).
презентация [318,1 K], добавлен 10.02.2014Историческое развитие средств вычислений. Структурные схемы вычислительных систем. Развитие элементной базы и развитие архитектуры самих систем. Основные классы вычислительных машин. Каналы передачи данных. Требования к составу периферийных устройств.
реферат [48,7 K], добавлен 09.01.2011Создание и уровни реализации облачных вычислений. Достоинства и недостатки использования облачных технологий в организации единого информационного пространства. Оценка важности критериев методом "Попарного сравнения", "Тепловых карт", "Экспертных оценок".
дипломная работа [1,3 M], добавлен 08.04.2014Понятие облачных вычислений, их преимущества и недостатки; виды облаков. Сравнительный анализ рисков использования облачных сервисов в России и ЕС. Регуляторы в области информационной безопасности, их концепции, особенности и регулирующие органы власти.
курсовая работа [79,1 K], добавлен 14.05.2014Пути достижения параллелизма вычислений. Понятие и разновидности, а также сферы и особенности использования суперкомпьютеров. Параллельные вычисления как процессы решения задач, в которых могут выполняться одновременно несколько вычислительных операций.
презентация [8,3 M], добавлен 11.10.2014Роль структуры управления в информационной системе. Примеры информационных систем. Структура и классификация информационных систем. Информационные технологии. Этапы развития информационных технологий. Виды информационных технологий.
курсовая работа [578,4 K], добавлен 17.06.2003