This commit is contained in:
Ivan I. Ovchinnikov 2022-12-07 22:33:10 +03:00
parent 42377a5532
commit c141dd0ee6
3 changed files with 489 additions and 235 deletions

View File

@ -468,6 +468,72 @@ R.Merkle - Secure communication over insecure channel изложил прото
Расшифрование Расшифрование
\[ E_K^{-1} (C_i) = M_i\oplus C_{i-1} \to E_K^{-1}(C_i)\oplus C_{i-1} = M_i \] \[ E_K^{-1} (C_i) = M_i\oplus C_{i-1} \to E_K^{-1}(C_i)\oplus C_{i-1} = M_i \]
\section{Однонаправленные функции и их применение}
One-way functions and applications
Data origin authentication - подлинность происхождения данных (сообщения).
например,
\[y=GOST_x(m_0)\]
\[y=a^x(vbpn); Z_p^*\]
\[y=x\cdot A; A=EI(F_p)\]
S/Key Bellure Corp
А - клиент S-сервер
Entity authentication (аутентификация сущности). Подлинность чего мы определяем? это может быть объект, субъект, ПО. Identification protocols.
Сначала выбирается однонаправленная функция и строится цепочка из значений этой однонаправленной функции $x_0, x_1=f(x_0), ..., x_{100}=f(x_{99})$. после этого передаётся пользователю с обязательной подлинностью и целостностью, но не секретностью. Когда нужно авторизоваться клиент отправляет $x_{99}$ который может попасть злоумышленнику. Сервер вычисляет, что $x_{99}$ является праобразом $x_{100}$ и подтверждается подлинность пользователя. В следующий раз, поскольку $x_{99}$ уже перехвачен, клиент посылает $x_{98}$ и сравнение на сервере происходит с $x_{99}$. Если злоумышленник желает выдать себя за клиента, он должен найти праобраз от перехваченной им $x_{99}$, но по определению однонаправленной функции это вычислительно невозможно. Клиент действует до тех пор, пока он не исчерпает всю цепочку $x_{0} .. x_{99}$.
\textbf{Применение однонаправленных функций для микроплатежей.}
Здесь не нужна надёжность и сложность полноценной ЭЦП. Payward, Micromint, etc. Вся структура простой аутентификации остаётся. \circled{А} - клиент, S - провайдер услуг. Система является системой предоплаты. А передаёт заранее некоторую сумму, выстраивается цепочка и договариваются, что если клиент хочет получить услуги на 10 рублей, он высылает одно значение из цепочки. на 20р - два значения, и так далее.
Клиент провайдера обмануть не может, а провайдер может обмануть клиента. нужна третья сторона. Для доказательства нужно, чтобы провайдер предоставил всю цепочку, чтобы доказать, что клиент переслал её всю. Если у провайдера она не вся, нужно как злоумышленнику восстановить функцию, что вычислительно невозможно.
One time signature (одноразовая подпись, схема Lamport).
Подлинность, целостность, неотказуемость.
\begin{enumerate}
\item алгоритм выработки параметров
\item алгортим выработки ЦП
\item алгроитм проверки ЦП
\end{enumerate}
Лампорт предложил ЦП на однонаправленной функции.
А - подписываюший, B - проверяющий.
\begin{enumerate}
\item договариваются о выборе ОФ (или можно выбирать хэш-функцию). и вырабатывают секретные ключи. СК - это значения из области определения функции. также генерируются открытые ключи. В справочник помещается ОК и всё готово для подписания.
\item подписание - документ, строка длины М. ЦП - это цепочка $[X_{\gamma_1}^{(1)}, X_{\gamma_2}^{(2)}, X_{\gamma_m}^{(m)}]$.
\item Для проверки подписи нужен сам документ, подпись, ОК. Проверка заключается в том, что подписи - это праобразы ОК.
\end{enumerate}
УЦ содержит ОК, и именно он удостоверяет что ключи принадлежат подписывающему А. Одноразовая подпись, потому что передав сообщение с ОК мы израсходовали и соответствующий ему (праобраз) СК.
\begin{itemize}
\item [-] одноразовость
\item [-] размер (если рассматриваем ГОСТ, то размер ЦП при подписании 10 бит информации $256*10$)
\item [+] одноразовость (есть технология, которая позволяет ОК строить в виде дерева Меркля)
\item [+] очень быстрая подпись
\item [+] такие схемы подписи стойкие против квантового компьютера. Нахождение праобраза от функции хэширования не поддаются квантовому компьютеру.
\end{itemize}
На этом принципе построена hash-based post-quantum crypto systems.
Что нужно, чтобы подделать эту схему подписи?
Допустим есть документ из трёх подписей и положим какое-то гамма = 0б значит чему равен в подписи соответствующий х? также нулю. а что нужно сделать чтобы заменить гамму на 1? для этого нужно чтобы в этой подписи появился х1 (являющийся праобразом у1).
One time signature Winternitz (1979 в работе Merkle).
\begin{enumerate}
\item Берём хэш-функцию, М-документ (подписанный Д - это число из интервала от нуля до W-1 где W это параметр метода). СК - это случайная строка K (вход в ХФ). ОК - это $H^W(K)$. ОК легко получить из строки К. W - это число применений ХФ к К. Размер исходного текста М тоже ограничен.
\item ЦП будет являться $Q = H^M(K)$.
\item для проверки нужен ОТ, ЦП и ОК. Проверка заключается в том, что нужно проверить $H^{W-M}(Q) = H^W(K) = PK$. Так если подпись верна, то только обладатель СК мог её вычислить.
\end{enumerate}
Стойкость основана на том, что невозможно вычислить праобраз от ХФ. Некоторые минусы в том, что если есть подпись Q к документу M, то возможно легко создать подпись к документу M+1. Чтобы бороться с этим нужно ещё раз подписать документ, но выбрать для этого другую строку, в этом случае подпись будет $Q'=H^{W-M}(K')$.
В качестве праобраза ЦП которая применяется международным сообществом используются именно эти подписи, основанные на трудности нахождения.
\end{document} \end{document}

View File

@ -11,7 +11,7 @@
\thispagestyle{empty} \thispagestyle{empty}
\makeBMSTUHeader \makeBMSTUHeader
\makeReportTitle{лабораторной}{2}{Мультимедийная веб-презентация}{Мультимедиа технологии}{}{Д.А. Видьманов} \makeReportTitle{лабораторной}{3}{Разработка мультимедийного приложения}{Мультимедиа технологии}{}{Д.А. Видьманов}
\newpage \newpage
\thispagestyle{empty} \thispagestyle{empty}
\tableofcontents \tableofcontents
@ -19,277 +19,365 @@
\pagestyle{fancy} \pagestyle{fancy}
\sloppy \sloppy
\section{Цель} \section{Цель}
Целью работы является приобретение навыков создания мультимедийной веб-презентации, ознакомление с основными правилами и требованиями к созданию веб-презентаций. Создать мультимедийную веб-презентацию в соответствии с изученными требованиями по заданной теме. Целью работы является приобретение навыков создания мультимедийных приложений. Создать мультимедийное приложение.
\section{Задачи} \section{Задачи}
\begin{enumerate} \begin{enumerate}
\item Установить \code{node.js}; \item Установить среду разработки;
\item Создать мультимедиа веб-презентацию, используя инструкции и рекомендации методического указания; \item Описать критерии создания приложения;
\item Проверить ещё раз все требовании к презентации и создать отчет. \item Написать код и отладить работу приложения.
\end{enumerate} \end{enumerate}
\section{Методика и порядок выполнения}
Технология создания мультимедийной веб-презентации к состоит из трёх этапов:
\textbf{Первый этап.} Планирование презентации. Планирование включает:
\begin{enumerate}
\item подготовку инструментария;
\item определение цели;
\item определение задач презентации;
\item подбор необходимой информации;
\item планирование выступления и определение необходимого времени;
\item формирование структуры презентации;
\item проверку логики подачи материала;
\item подготовку заключения.
\end{enumerate}
\textbf{Второй этап.} Разработка презентации. Разработка презентации включает:
\begin{enumerate}
\item поиск соответствия методологических требований подготовки слайдов с проектируемыми слайдами презентации;
\item обеспечение вертикальной и горизонтальной логики содержания;
\item разработку дизайна;
\item Выбор оптимального соотношения текста и графической информации.
\end{enumerate}
\textbf{Третий этап.} Отладка и проверка презентации.
\section{Выполнение работы} \section{Выполнение работы}
\subsection{Создание основной презентации} Для написания мультимедйного приложения был выбран Qt Framework версии 5.12, и язык C++. Разрабатываемое приложение - это единый мультимедийный просмотрщик файлов (офисные документы, pdf, видео). Для реализации мультимедийности были выбраны несколько компонентов и создан экран, основной частью которого является область просмотра.
В редакторе файлов гипертекстовой разметки создадим презентацию по теме «Мультимедиа технологии в корпоративных информационных системах», подберем оформление слайдов в соответствии с темой презентации. Первым слайдом презентации должен быть титульный слайд, на который выносятся тема и имя автора. В случае, если авторов несколько, имя докладчика подчеркивается. Слайд с содержанием представлен на рис. \hrf{pic:title}.
\begin{figure}[H] \subsection{Функции. Открытие MPEG}
\centering Для открытия, воспроизведения и перемотки видеофайлов используются компоненты \code{QMediaPlayer} и \code{QVideoWidget}. Для работы с компонентами были описаны следующие слоты и функции:
\includegraphics[width=12cm]{03-mmt-lab-02-title.png} \begin{itemize}
\caption{Титульный слайд} \item \code{void openMPEG(QString&)}. Достраивает в главном окне необходимые области, добавляет кнопки, инициализирует слайдеры, связывает слоты.
\label{pic:title} \item \code{void closeMPEG()}. Отвязывает слоты, удаляет динамические объекты, очищает окно от элементов управления.
\end{figure} \item \code{void playVideo()}. Начинает/продолжает проигрывание медиафайла.
\item \code{void stopVideo()}. Завершает проигрывание файла. Позиция проигрывания перемещается в начало. Если после вызова этой функции вызвать \code{playVideo()}, то видео начнется сначала.
\item \code{void pauseVideo()}. Приостанавливает проигрывание медиа. Позиция сохраняется. Если после вызова этой вызвать \code{playVideo()}, то видео продолжится с момента приостановки видео.
\item \code{void changeVolume(int)}. Изменяет громкость звука. Слот вызывается сигналом \code{&QSlider::valueChanged} с передачей значения из компонента.
\item \code{void changePosition()}. Принудительно перематывает видео ползунком. При вызове слота позиции видео присваивается значение с ползунка, отвечающего за перемотку видео.
\item \code{void updatePosition(qint64)}. Слот реагирует на текущее положение курсора в проигрывателе и передает относительное положение ползунку перемотки видео, чтобы положение ползунка менялось в ходе проигрывания видео.
\item \code{void updateDuration(qint64)}. При старте видеопотока общая продолжительность видео считается некоторое время, поэтому сразу идентифицировать не удастся. Слот привязан к сигналу о том, что для данного видеофайла изменилось (вычислилось) значение продолжительности.
\item \code{void updateState(int)}. Справочный слот. Реагирует на Старт, Стоп и Паузу видео. Если необходимо в процессе работы выдавать еще какие-то команды - слот «узнаёт», в каком состоянии проигрывания медиафайл.
\end{itemize}
На втором слайде приводится краткий план презентации (рис. \hrf{pic:toc}). \subsection{Функции. Открытие офисных документов (XLSX, DOCX, PPTX)}
\begin{figure}[H] Функции офиса используют компонент ActiveX и отображают содержимое, фактически открытое в приложениях офисного пакета.
\centering
\includegraphics[width=12cm]{03-mmt-lab-02-toc.png}
\caption{Содержание презентации}
\label{pic:toc}
\end{figure}
\subsection{Использование мультимедиа} \begin{itemize}
Подбор материала для слайда необходимо вести таким образом, чтобы не перегружать его: один слайд, как правило, не должен оставаться на экране дольше одной минуты. Также не следует стремиться к слишком частой смене слайдов (рис. \hrf{pic:pic}). \item \code{void openXLSX(QString&)}. Открывает XLSX файл и передает управление файлом приложению MS Excel. Отображение размещается внутри виджета.
\begin{figure}[H] \item \code{void openDOCX(QString&)}. Открывает DOCX файл и передает управление файлом приложению MS Word. Отображение размещается внутри виджета.
\centering \item \code{void openPPTX(QString&)}. Открывает PPTX файл и передает управление файлом приложению MS PowerPoint. Отображение размещается внутри виджета. Дополнительно, здесь происходит подключение к слоту, вызывющему проигрывание в режиме презентации.
\includegraphics[width=12cm]{03-mmt-lab-02-pic.png} \end{itemize}
\caption{Изображения в презентации} \subsection{Функции. Открытие документов PDF}
\label{pic:pic} \code{void openPDF(QString&)}. Открывает PDF файл и передает управление файлом приложению Adobe Acrobat. Отображение размещается внутри виджета.
\end{figure}
Использование эффектов анимации (звука, видео) должно быть направлено исключительно на акцентирование внимания зрителя на каких-либо моментах доклада (например, рис. \hrf{pic:vid}). \subsection{Закрытие документа}
\begin{figure}[H] \code{void closeFile()} - Закрывает открытый документ.
\centering
\includegraphics[width=12cm]{03-mmt-lab-02-vid.png}
\caption{Видео в презентации}
\label{pic:vid}
\end{figure}
\section{Контрольные вопросы}
\begin{enumerate}
\item \textbf{Для чего использовался npm? Что это такое и какие команды вы знаете?} Для запуска интерактивности веб-страницы с презентацией. npm - это пакетный менеджер и проектов для node.js.
\item \textbf{Что такое git? Кратко объясните его суть?} Это система контроля версий. Его суть в распределении хранения исходных кодов проекта.
\item \textbf{Для чего в проекте нужен git?} Для версионирования исходной презентации.
\item \textbf{В чём преимущество веб-презентации в сравнении с простой презентацией Powerpoint?} В отсутствии необходимости использовать локальный инструмент и возможности распределения работы над презентацией среди множества исполнителей.
\item \textbf{Какие есть недостатки веб-презентаций?} Необходимость устанавливать дополнительное нестандартное программное обеспечение и изучать язык разметки.
\item \textbf{Какие трудности возникают в процессе разработки веб-презентаций?} Не обнаружено.
\end{enumerate}
\section{Выводы} \section{Выводы}
В ходе выполнения лабораторной работы были приобретены навыки создания мультимедийной веб-презентации, произошло ознакомление с основными правилами и требованиями к созданию веб-презентаций а также инструментарием по созданию веб-презентаций Shower. Была создана мультимедийная презентацию в соответствии с изученными требованиями по заданной теме. Для разработки мультимедийного приложения необходимо изучить разнообразный инструментарий, позволяющий манипулировать мультимедийными данными. Написание мультимедийнх приложений тесно связано с обработкой больших объёмов данных или использованием внешних библиотек и приложений. Мультимедийные приложения возможно написать для любых платформ и внедрить для любых категорий пользователей.
\newpage \newpage
\appendix \appendix
\setcounter{secnumdepth}{0} \setcounter{secnumdepth}{0}
\section*{Приложения} \section{Приложения}
\addcontentsline{toc}{section}{Приложения}
\renewcommand{\thesubsection}{\Asbuk{subsection}} \renewcommand{\thesubsection}{\Asbuk{subsection}}
\subsection{Полный листинг разметки презентации} \subsection{Полный листинг главного окна приложения}
\begin{lstlisting}[language=HTML,style=CCodeStyle] \begin{lstlisting}[language=C++,style=CCodeStyle]
<!DOCTYPE html> #include "mainwindow.h"
<html lang="en"> #include "ui_mainwindow.h"
<head>
<title>МТвКИС</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<link rel="stylesheet" href="node_modules/@shower/ribbon/styles/styles.css">
<style>
.shower {
--slide-ratio: calc(16 / 9);
}
</style>
</head>
<body class="shower list">
<header class="caption"> MainWindow::MainWindow(QWidget *parent) :
<h1>Мультимедиа технологии в корпоративных информационных системах</h1> QMainWindow(parent),
<p>[ИУ3-31М] И.И.Овчинников</p> ui(new Ui::MainWindow)
</header> {
ui->setupUi(this);
QMenuBar *menuBar = new QMenuBar();
m_menuFile = menuBar->addMenu("&File");
m_openAction = new QAction("&Open");
m_openAction->setStatusTip(tr("Open a document"));
m_menuFile->addAction(m_openAction);
m_menuFile->addSeparator();
m_quitAction = new QAction("&Quit");
m_quitAction->setShortcut(tr("CTRL+Q"));
m_quitAction->setStatusTip(tr("Quit application"));
m_menuFile->addAction(m_quitAction);
<section class="slide" id="cover"> connect(this->m_openAction, &QAction::triggered, this, &MainWindow::slotOpenAction);
<h2>Мультимедиа технологии в корпоративных информационных системах</h2> connect(this->m_quitAction, &QAction::triggered, qApp, &QApplication::quit);
<p>[ИУ3-31М] И.И.Овчинников</p>
<figure> this->setMenuBar(menuBar);
<img class="cover" src="pictures/bg.jpg" alt="Background"> this->resize(800, 600);
<figcaption class="copyright right white"> show();
<a href="https://fiftyfootshadows.net">© John Carey</a>
</figcaption>
</figure>
<style>
#cover h2 {
margin: 30px 0 0;
color: white;
text-align: center;
font-size: 70px;
} }
#cover p { MainWindow::~MainWindow()
margin: 10px 0 0; {
text-align: center; delete ui;
color: white;
font-style: italic;
font-size: 20px;
} }
#cover p a { void MainWindow::delay(int delay) {
color: white; QTime dieTime= QTime::currentTime().addSecs(delay);
while (QTime::currentTime() < dieTime)
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
} }
</style>
</section>
<section class="slide"> void MainWindow::slotOpenAction() {
<h2>В ближайшие 15 минут</h2> m_filename = QFileDialog::getOpenFileName(
<ul> this, tr("Выберите файл"), "../", tr("MPEG (*.mpeg) ;; PDF (*.pdf) ;; DOCX (*.docx) ;; XLSX (*.xlsx) ;; PPTX (*.pptx)"));
<li>Что такое мультимедиа и корпоративная система?</li> if (m_filename != "") {
<li>Что можно хранить, как можно использовать и как это передавать?</li> if (axObj) {
<li>Рынок и развитие.</li> qDebug() << "Close file!\n";
<li>Гипотезы и будущее.</li> closeFile();
</ul> }
</section> if (m_videoWidget) {
qDebug() << "Close MPEG!\n";
closeMPEG();
}
if (m_filename.endsWith(".pdf")) {
openPDF(m_filename);
} else if (m_filename.endsWith(".pptx")) {
openPPTX(m_filename);
} else if (m_filename.endsWith(".docx")) {
openDOCX(m_filename);
} else if (m_filename.endsWith(".xlsx")) {
openXLSX(m_filename);
} else if (m_filename.endsWith(".mpeg")) {
openMPEG(m_filename);
}
}
}
void MainWindow::closeFile() {
if (axObj != nullptr) {
QProcess process;
QString strCmd;
strCmd = "taskkill /im winword.exe /f";
process.execute(strCmd);
strCmd = "taskkill /im EXCEL.exe /f";
process.execute(strCmd);
strCmd = "taskkill /im POWERPNT.exe /f";
process.execute(strCmd);
strCmd = "taskkill /im AcroRd32.exe /f";
process.execute(strCmd);
process.close();
axObj->close();
axObj->clear();
delete axObj;
axObj = nullptr;
qDebug() << "file closed!";
}
}
<section class="slide"> void MainWindow::openPDF(QString &filename) {
<h2>Мультимедиа</h2> axObj = new QAxWidget(this);
<figure> setCentralWidget(axObj);
<blockquote> if(!axObj->setControl("Adobe PDF Reader"))
<p> Мультимедиа (англ. multimedia) — данные, или содержание, которые представляются одновременно в разных формах: звук, анимированная компьютерная графика, видеоряд.</p> QMessageBox::critical(this, "Error", "Make sure you have Adobe Reader (and its ActiveX) installed!");
</blockquote> axObj->dynamicCall("LoadFile(QString)", filename);
</figure> }
</section>
<section class="slide"> /* run slideshow */
<h2>Корпоративная Информационная Система</h2> void MainWindow::playPPTX() {
<figure> // Open parameter
<blockquote> QList<QVariant> param_list;
<p>Корпоративная Информационная Система — это автоматизированная система, предназначенная для комплексной автоматизации всех видов хозяйственной деятельности компаний, а также корпораций, требующих единого управления EMS, CMS, LMS, CRM, PLM, etc... </p> axObj->setControl("PowerPoint.Application");
</blockquote> param_list.append(m_filename);
</figure> param_list.append(1);
</section> param_list.append(1);
param_list.append(0);
// Open a template file
QAxObject *presentations = axObj->querySubObject("Presentations");
QAxObject *presentation = presentations->querySubObject("Open(const QString&,int,int,int)", param_list);
// Start the slides
QAxObject *slideshow = presentation->querySubObject("SlideShowSettings");
slideshow->setProperty("RangeType", "ppShowAll");
slideshow->dynamicCall("run()");
<section class="slide"> }
<h2>Системы ведения электронных архивов EDMS (Electronic Document Management System)</h2>
<figure>
<img src="pictures/notion.png" class="place bottom" height="50%" alt="EDMS example" />
</figure>
</section>
<section class="slide"> void MainWindow::openPPTX(QString &filename) {
<h2>Передача мультимедийных данных</h2> /* инициализация окна виджетом */
<figure> m_wideWidget = new QWidget;
<img src="pictures/transport.png" class="place bottom" height="70%" alt="EDMS example" /> setCentralWidget(m_wideWidget);
</figure> qDebug() << "1";
</section> /* здесь будут элементы управления и окно проигрывателя (выравнивание по горизонтали) */
m_qvBoxLayout = new QVBoxLayout(m_wideWidget);
<section class="slide"> axObj = new QAxWidget("PowerPoint.Application", m_wideWidget);
<h2>Системы видео-конференцсвязи</h2> m_btnPlay = new QPushButton("Начать презентацию");
<ul> qDebug() << "2";
<li>В работе компаний, которые имеют разветвленную сеть филиалов - в собрании могут принимать участие сотрудники из других городов;</li> m_qvBoxLayout->addWidget(axObj);
<li>Для проведения переговоров с клиентами из разных стран;</li> m_qvBoxLayout->addWidget(m_btnPlay);
<li>В дистанционном обучении;</li>
<li>В телемедицине;</li>
<li>В СМИ для передачи информации с места событий и др.</li>
</ul>
</section>
<section class="slide"> if (axObj == nullptr) {
<h2>Примеры приложений для ВКС</h2> return;
<ul> }
<li><b>TrueConf</b> используется для государственных и частных организаций;</li> if (!axObj->setControl(filename)) {
<li><b>Zoom</b> публичный сервис для видеосвязи корпоративная платформа, совмещающая в себе чат и Microsoft Teams;</li> return;
<li><b>Microsoft Teams</b> видеозвонки. Microsoft Teams является частью пакета Office 365 и распространяется по корпоративной подписке.</li> }
</ul> axObj->dynamicCall("LoadFile(const QString&)", filename);
</section> axObj->dynamicCall("SetVisible (bool Visible)", "false");
axObj->setProperty("DisplayAlerts", false);
axObj->setProperty("DisplayScrollBars", true);
<section class="slide"> delay(1);
<h2>Интерактивные и мультимедийные системы обучения</h2>
<figure>
<img src="pictures/learn-dynamics.png" class="place bottom" height="65%" alt="EDMS example" />
</figure>
</section>
<section class="slide"> axObj->show();
<h2>Величина рынка развития мультимедиа в корпоративном секторе</h2> axObj->raise();
<figure> qDebug() << "3";
<blockquote> connect(this->m_btnPlay, &QPushButton::clicked, this, &MainWindow::playPPTX);
<p>В ближайшие три года мы ожидаем взрывной рост объёма российского рынка ПО для бизнес-коммуникаций. Таким образом, общий объём рынка может достичь 100 млрд рублей</p> }
</blockquote>
<figcaption>Генеральный директор tada.team Андрей Демин, в интерьвью журналу Forbes</figcaption>
</figure>
</section>
<section class="slide"> void MainWindow::openXLSX(QString &filename) {
<h2>Применение AR/VR в КИС и медицине</h2> axObj = new QAxWidget("Excel.Application", this);
<figure> setCentralWidget(axObj);
<img src="pictures/beat.gif" class="place bottom left" height="45%" alt="EDMS example" /> if (axObj == nullptr) {
<img src="pictures/draw.gif" class="place center" height="45%" alt="EDMS example" /> return;
<img src="pictures/heart.gif" class="place bottom right" height="45%" alt="EDMS example" /> }
</figure> axObj->dynamicCall("SetVisible (bool Visible)", "false");
</section> axObj->setProperty("DisplayAlerts", false);
axObj->setProperty("DisplayScrollBars", true); // Show scroll bar
axObj->setGeometry(this->geometry());
axObj->setControl(filename);
axObj->show();
}
void MainWindow::openDOCX(QString &filename) {
axObj = new QAxWidget("Word.Application", this);
setCentralWidget(axObj);
if (axObj == nullptr) {
return;
}
axObj->dynamicCall("SetVisible (bool Visible)", "false");
axObj->setFocusPolicy(Qt::StrongFocus);
axObj->setProperty("DisplayAlerts", false);
axObj->setProperty("DisplayHorizontalScrollBar", true); // Show scroll bar
axObj->setGeometry(this->geometry());
axObj->setControl(filename);
axObj->show();
}
<section class="slide"> /* продолжить проигрывать видео */
<h2>Применение систем для контроля логистики</h2> void MainWindow::playVideo() {
<figure> m_player->setPosition(m_position);
<img src="pictures/logistic.png" class="place bottom" height="65%" alt="EDMS example" /> m_player->play();
</figure> }
</section>
<section class="slide"> /* остановка видео */
<h2>Интеграция КИС и интернета вещей</h2> void MainWindow::stopVideo() {
<figure> m_player->stop();
<img src="pictures/iot.png" class="place bottom" height="65%" alt="EDMS example" /> }
</figure>
</section>
<section class="slide"> /* пауза видео */
<h2>Выводы</h2> void MainWindow::pauseVideo() {
<ul> m_player->pause();
<li>Мультимедиа охватывают все области интеллектуальной деятельности: науку, технику, образование, бизнес, культуру</li> }
<li>Корпоративные системы это не только про бизнес, но и про некоммерческие организации</li>
<li>Интеграция в жизнь людей усиливается, повсеместное использование.</li>
</ul>
</section>
<section class="slide"> /* событие при изменении состояния видеопроигрывателя */
<h2>Спасибо за внимание</h2> void MainWindow::updateState(int state) {
<figure> switch (state) {
<img src="pictures/ty.png" class="place right" height="65%" alt="EDMS example" /> case QMediaPlayer::PlayingState:
</figure> /* media is played */
</section> break;
<footer class="badge"> case QMediaPlayer::PausedState:
<a href="https://t.me/ivanigorevichfeed">Follow me on Telegram</a> /* media paused */
</footer> break;
<div class="progress"></div> case QMediaPlayer::StoppedState:
/* media is stopped */
break;
}
}
<script src="node_modules/@shower/core/dist/shower.js"></script> /* принудительно изменить время проигрывания */
<!-- https://docs.google.com/presentation/d/1sJmLJiJjnHjDl-TRpNyYnCTvn5zUDgE2x3ndvHampR0/edit?usp=sharing --> void MainWindow::changePosition() {
m_position = m_sliderVideo->value();
m_player->setPosition(m_position);
}
</body> /* принудительно изменить время проигрывания */
</html> void MainWindow::updatePosition(qint64 position) {
m_position = position;
m_sliderVideo->setValue(m_position);
}
/* изменить величину звука */
void MainWindow::changeVolume(int volume) {
m_player->setVolume(volume);
}
/* слот для иницализации значением слайдера видео */
void MainWindow::updateDuration(qint64 duration) {
m_sliderVideo->setRange(0, m_player->duration());
m_sliderVideo->setEnabled(duration > 0);
m_sliderVideo->setPageStep(duration / 10);
}
/* инициализация медиа файла */
void MainWindow::openMPEG(QString &filename) {
/* инициализация окна виджетом */
m_wideWidget = new QWidget;
setCentralWidget(m_wideWidget);
/* здесь будут элементы управления и окно проигрывателя (выравнивание по горизонтали) */
m_qvBoxLayout = new QVBoxLayout(m_wideWidget);
/* область для отображения видео */
m_videoWidget = new QVideoWidget;
m_player = new QMediaPlayer(m_videoWidget);
m_player->setVideoOutput(m_videoWidget);
m_player->setMedia(QUrl::fromLocalFile(filename));
/* область размещения кнопок управления видео */
m_hBtnsLayout = new QHBoxLayout;
m_play = new QPushButton("Play");
m_stop = new QPushButton("Stop");
m_pause = new QPushButton("Pause");
m_sliderVolume = new QSlider(Qt::Horizontal);
m_sliderVolume->setRange(0, 100); // диапазон значений громкости
m_sliderVolume->setValue(50); // текущая громкость 50%
m_sliderVideo = new QSlider(Qt::Horizontal);
m_hBtnsLayout->addWidget(m_play, 1);
m_hBtnsLayout->addWidget(m_stop, 1);
m_hBtnsLayout->addWidget(m_pause, 1);
m_hBtnsLayout->addWidget(&m_labelVolume);
m_hBtnsLayout->addWidget(m_sliderVolume, 1);
m_hBtnsLayout->addWidget(&m_labelScroll);
m_hBtnsLayout->addWidget(m_sliderVideo, 5);
/* поместить настроенные объекты в центральный виджет */
m_qvBoxLayout->addWidget(m_videoWidget);
m_qvBoxLayout->addLayout(m_hBtnsLayout);
/* связать слоты */
connect(this->m_play, &QPushButton::clicked, this, &MainWindow::playVideo);
connect(this->m_stop, &QPushButton::clicked, this, &MainWindow::stopVideo);
connect(this->m_pause, &QPushButton::clicked, this, &MainWindow::pauseVideo);
connect(this->m_sliderVolume, &QSlider::sliderMoved, this, &MainWindow::changeVolume);
connect(this->m_sliderVideo, &QSlider::sliderMoved, this, &MainWindow::changePosition);
connect(this->m_sliderVideo, &QSlider::valueChanged, this, &MainWindow::changePosition);
connect(this->m_player, &QMediaPlayer::durationChanged, this, &MainWindow::updateDuration);
connect(this->m_player, &QMediaPlayer::positionChanged, this, &MainWindow::updatePosition);
connect(this->m_player, &QMediaPlayer::stateChanged, this, &MainWindow::updateState);
/* начать проигрывать видео */
playVideo();
}
void MainWindow::closeMPEG() {
/* отключение всех слотов */
disconnect(this->m_play, &QPushButton::clicked, this, &MainWindow::playVideo);
disconnect(this->m_stop, &QPushButton::clicked, this, &MainWindow::stopVideo);
disconnect(this->m_pause, &QPushButton::clicked, this, &MainWindow::pauseVideo);
disconnect(this->m_sliderVolume, &QSlider::sliderMoved, this, &MainWindow::changeVolume);
disconnect(this->m_sliderVideo, &QSlider::sliderMoved, this, &MainWindow::changePosition);
disconnect(this->m_sliderVideo, &QSlider::sliderPressed, this, &MainWindow::changePosition);
disconnect(this->m_player, &QMediaPlayer::durationChanged, this, &MainWindow::updateDuration);
disconnect(this->m_player, &QMediaPlayer::positionChanged, this, &MainWindow::updatePosition);
disconnect(this->m_player, &QMediaPlayer::stateChanged, this, &MainWindow::updateState);
/* удаление динамических объектов */
delete m_sliderVideo;
delete m_sliderVolume;
delete m_play;
delete m_stop;
delete m_pause;
delete m_hBtnsLayout;
delete m_player;
delete m_videoWidget;
delete m_qvBoxLayout;
}
\end{lstlisting} \end{lstlisting}
\end{document} \end{document}

100
03-wtis-lab-01-report.tex Normal file
View File

@ -0,0 +1,100 @@
\documentclass[a4paper]{article}
\input{../common-preamble}
\input{../bmstu-preamble}
\input{../fancy-listings-preamble}
\usepackage{icomma}
\numerationTop
\begin{document}
\fontsize{14pt}{14pt}\selectfont % Вполне очевидно, что мы хотим 14й шрифт, все его хотят
\thispagestyle{empty}
\makeBMSTUHeader
\makeReportTitle{лабораторной}{1}{Исследование коллизий при множественном доступе к среде в
беспроводных сетях передачи информации}{Беспроводные технологии в информационных системах}{}{C.С. Баскаков}
\newpage
\thispagestyle{empty}
\tableofcontents
\newpage
\pagestyle{fancy}
\sloppy
\section{Цель}
Закрепление навыков работы с системой имитационного моделирования OMNeT++, построение имитационной модели беспроводной системы сбора данных и исследование ее характеристик при множественном доступе к среде передачи данных в условиях наличия коллизий.
\section{Задачи}
\begin{enumerate}
\item Повторить описанные действия с исходным проектом, чтобы убедиться в повторяемости результатов.
\item В исходной имитационной модели системы заменить количество передатчиков $N_{TX}$, размер пакета $L_{app}$ и скорость передачи данных $R$ в соответствии с индивидуальным вариантом
\item Провести имитационный эксперимент с модифицированной моделью системы для исследования пропускной способности и вероятности коллизий. Построить графики. Сравнить теоретические значения с результатами моделирования, убедиться в корректности полученных значений.
\item Увеличить размер пакета $L_{app}$ и скорость передачи данных $R$ в 2 раза и повторить эксперимент. Сравнить полученный результат с предыдущими графиками и объяснить наблюдения.
\end{enumerate}
\newpage
\section{Выполнение работы}
\subsection{Повторение моделирования}
На рисунке \hrf{pic:src} представлены графики, полученные в результате имитационного моделирования и расчёта в Matlab. Полученные графики идентичны представленным в методическом материале, что говорит о корректности воспроизведения имитационного моделирования с исходными данными.
\begin{figure}[H]
\centering
\begin{subfigure}[b]{0.32\textwidth}
\centering
\includegraphics[width=\textwidth]{pics/03-wtis-Lab-1-Nrx-500.pdf}
\caption{Общее количество полученных пакетов}
\label{pic:nrx}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.32\textwidth}
\centering
\includegraphics[width=\textwidth]{pics/03-wtis-Lab-1-Kapp-500.pdf}
\caption{Общий коэффициент доставки пакетов}
\label{pic:kapp}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.32\textwidth}
\centering
\includegraphics[width=\textwidth]{pics/03-wtis-Lab-1-Ke-500.pdf}
\caption{Общий коэффициент энергопотребления}
\label{pic:ke}
\end{subfigure}
\begin{subfigure}[b]{0.32\textwidth}
\centering
\includegraphics[width=\textwidth]{pics/03-wtis-Lab-1-Ketx-500.pdf}
\caption{Коэффициент энергопотребления передатчиков}
\label{pic:ketx}
\end{subfigure}
\begin{subfigure}[b]{0.32\textwidth}
\centering
\includegraphics[width=\textwidth]{pics/03-wtis-Lab-1-Kphy-500.pdf}
\caption{Коэффициент надёжности доставки пакетов}
\label{pic:kphy}
\end{subfigure}
\caption{Графики исходного проекта}
\label{pic:src}
\end{figure}
\subsection{Индивидуальное задание}
Для выполнения индивидуального задания был получен вариант № 10, параметры моделирования (значения переменных) которого представлены в таблице \hrf{tbl:var}.
\begin{table}[H]
\centering
\begin{tabular}{|c|c|c|c|}
\hline
$N_{TX}$ (шт.) & $L_{app}$ (байт) & $R$ (кбит/с) & $k$ \\ [0.5ex]
\hline
30 & 50 & 1500 & 30 \\
\hline
\end{tabular}
\caption{Таблица значений для варианта}
\label{tbl:var}
\end{table}
Для выполнения имитационного моделирования необходимо задать диапазон изменения среднего периода передачи пакетов ($T_s$) таким образом, чтобы полный нормированный трафик $G$ был в диапазоне $[0,05; 1]$
Поскольку $G=\frac{N_{TX}}{T_s}*\tau$, где $\tau=\frac{8*L_{phy}}{R}$, а $L_{phy} = L_{app} + 63$, то $T_s= \frac{N_{TX}\tau}{G}$. Для $G = 0,05; T_s \approx 361,6$, а для $G = 1; T_s \approx 18,08$ мсек.
\section{Выводы}
\end{document}