diff --git a/.gitignore b/.gitignore index f428ddc..ca7b725 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ wheels/ # Build dir build/ + +# Report +report.md diff --git a/md2gost.sh b/md2gost.sh index 076f3b7..f579a2d 100755 --- a/md2gost.sh +++ b/md2gost.sh @@ -9,4 +9,7 @@ if ! docker image inspect "$IMAGE" &>/dev/null; then docker build -t "$IMAGE" "$SCRIPT_DIR" fi -docker run --rm -v "$(pwd):/app" "$IMAGE" "$@" +docker run --rm \ + -e UV_CACHE_DIR=/tmp/uv-cache \ + -v "$(pwd):/app" \ + "$IMAGE" "$@" diff --git a/md2gost/latex/preamble.py b/md2gost/latex/preamble.py index a02f6ac..08db486 100644 --- a/md2gost/latex/preamble.py +++ b/md2gost/latex/preamble.py @@ -47,6 +47,15 @@ PREAMBLE = r"""\documentclass[a4paper, 14pt]{extarticle} \usepackage{amsthm,amsfonts,amsmath,amssymb,amscd} \usepackage{mathtools} \usepackage[perpage]{footmisc} +\usepackage{tabularx} + +\newcommand{\sigline}[3][4cm]{% + \begin{tabular}[t]{@{}c@{}}% + \makebox[#1][c]{\strut #2} \\[-1em]% + \rule{#1}{0.4pt} \\[-1em]% + {\scriptsize #3}% + \end{tabular}% +} \begin{document}""" diff --git a/md2gost/latex/titlepage.py b/md2gost/latex/titlepage.py index 7c02619..10e0f14 100644 --- a/md2gost/latex/titlepage.py +++ b/md2gost/latex/titlepage.py @@ -4,85 +4,92 @@ from __future__ import annotations def render_titlepage(fm: dict[str, str]) -> str: faculty = fm.get("факультет", "") department = fm.get("кафедра", "") + report_type = fm.get("тип", "") title = fm.get("название", "") student = fm.get("студент", "") advisor = fm.get("преподаватель", "") group = fm.get("группа", "") year = fm.get("год", "2026") - header_lines = [ - r"\vspace*{-0.7ex}", - r"\hspace*{-6pt}\centerline{Министерство науки и высшего образования Российской Федерации}", - r"\vspace*{-0.7ex}", - r"\centerline{Федеральное государственное автономное образовательное учреждение}", - r"\vspace*{-0.7ex}", - r"\centerline{высшего образования}", - r"\vspace*{-0.7ex}", - r"\centerline{<<Московский государственный технический университет}", - r"\vspace*{-0.7ex}", - r"\centerline{имени Н.Э. Баумана>>}", - r"\vspace*{-0.7ex}", - r"\centerline{(национальный исследовательский университет)>>}", - r"\vspace*{-0.7ex}", - r"\centerline{(МГТУ им. Н.Э. Баумана)}", - ] - header = "\n".join(header_lines) + ministry_lines = ( + "\\vspace*{-0.7ex}\n" + "\\hspace*{-6pt}\\centerline{Министерство науки и высшего образования Российской Федерации}\n" + "\\vspace*{-0.7ex}\n" + "\\centerline{Федеральное государственное бюджетное образовательное учреждение }\n" + "\\vspace*{-0.7ex}\n" + "\\centerline{высшего образования}\n" + "\\vspace*{-0.7ex}\n" + "\\centerline{<<Московский государственный технический университет}\n" + "\\vspace*{-0.7ex}\n" + "\\centerline{имени Н.Э. Баумана>>}\n" + "\\vspace*{-0.7ex}\n" + "\\centerline{(национальный исследовательский университет)}\n" + "\\vspace*{-0.7ex}\n" + "\\centerline{(МГТУ им. Н.Э. Баумана)}" + ) - return ( + titlepage = ( "\\begin{titlepage}\n" "\\thispagestyle{empty}\n" "\\newpage\n" "\n" + "% --- Шапка ---\n" "\\vspace*{-60pt}\n" "\\hspace{-65pt}\n" "\\begin{minipage}{0.3\\textwidth}\n" "\\hspace*{-20pt}\\centering\n" "\\includegraphics[width=\\textwidth]{emblem}\n" "\\end{minipage}\n" - f"\\begin{{minipage}}{{0.67\\textwidth}}\\small \\textbf{{\n" - f"{header}\n" - "}}\n" - "\\end{minipage}\n" + "\\begin{minipage}{0.67\\textwidth}\\small \\textbf{" + ) + titlepage += ministry_lines + titlepage += ( + "}\\end{minipage}\n" "\n" + "% --- Полосы ---\n" "\\vspace{-25pt}\n" "\\hspace{-35pt}\\rule{\\textwidth}{2.3pt}\n" "\n" "\\vspace*{-20.3pt}\n" "\\hspace{-35pt}\\rule{\\textwidth}{0.4pt}\n" "\n" - f"\\vspace{{1.5ex}}\n" + "% --- Факультет и кафедра ---\n" + "\\vspace{1.5ex}\n" f"\\hspace{{-35pt}} \\noindent \\small ФАКУЛЬТЕТ\\hspace{{80pt}} {faculty}\n" "\n" "\\vspace*{-16pt}\n" "\\hspace{47pt}\\rule{0.83\\textwidth}{0.4pt}\n" "\n" - f"\\vspace{{0.5ex}}\n" + "\\vspace{0.5ex}\n" f"\\hspace{{-35pt}} \\noindent \\small КАФЕДРА\\hspace{{50pt}} {department}\n" "\n" "\\vspace*{-16pt}\n" "\\hspace{30pt}\\rule{0.866\\textwidth}{0.4pt}\n" "\n" - "\\vspace{11em}\n" + "% --- Название работы ---\n" + "\\vspace{6em}\n" "\n" "\\begin{center}\n" - f"\\fontsize{{22pt}}{{26pt}}\\selectfont \\bfseries {title} \\\\\n" - "\\end{center}\n" - "\n" - "\\vspace{8em}\n" - "\n" - "\\noindent Студент группы " + group + "\n" - "\\hfill \\underline{\\hspace{3cm}} \\hfill \\underline{\\hspace{4cm}} \\\\\n" - "\\hfill (Группа) \\hfill (Подпись, дата) \\hfill (И.О. Фамилия) \\\\\n" - "\\vspace{2ex}\n" - "\n" - "\\noindent Преподаватель " + advisor + "\n" - "\\hfill \\underline{\\hspace{3cm}} \\hfill \\underline{\\hspace{4cm}} \\\\\n" - "\\hfill \\hfill (Подпись, дата) \\hfill (И.О. Фамилия)\n" + f"\\Large {{\\bf {report_type}}} \\\\\n" + f"\\large {title}\n" + "\\end{center}\\normalsize\n" "\n" + "% --- Подписи (tabularx) ---\n" "\\vfill\n" "\n" + "\\noindent\n" + "\\begin{tabularx}{\\textwidth}{@{}l X c c@{}}\n" + f" Студент \\quad \\sigline[2.5cm]{{{group}}}{{(Группа)}} & & " + f"\\sigline{{}}{{(Подпись, дата)}} & \\sigline{{{student}}}{{(И.О. Фамилия)}} \\\\ [1.5cm]\n" + " Преподаватель & & " + f"\\sigline{{}}{{(Подпись, дата)}} & \\sigline{{{advisor}}}{{(И.О. Фамилия)}} \\\\\n" + "\\end{tabularx}\n" + "\n" + "% --- Год ---\n" "\\begin{center}\n" f"\\textsl{{{year} г.}}\n" "\\end{center}\n" + "\n" "\\end{titlepage}" ) + return titlepage diff --git a/md2gost/parser.py b/md2gost/parser.py index bd78c5c..b9b001a 100644 --- a/md2gost/parser.py +++ b/md2gost/parser.py @@ -21,5 +21,5 @@ class Parser: for line in raw.splitlines(): if ":" in line: key, _, value = line.partition(":") - result[key.strip()] = value.strip().strip("«»\"'") + result[key.strip()] = value.strip() return result diff --git a/report.md b/report.md deleted file mode 100644 index f1527ec..0000000 --- a/report.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -факультет: «Информатика и системы управления» -кафедра: «Теоретическая информатика и компьютерные технологии» -название: Отчёт о летней практике -студент: А. С. Булдаков -преподаватель: Д. П. Посевин -группа: ИУ9-22Б ---- - -# АННОТАЦИЯ - -В настоящем отчёте описывается разработка серверной части программно-аппаратного комплекса мониторинга радиоэфира, предназначенного для обнаружения источников радиосигнала и вычисления их координат методом триангуляции. - -Актуальность разработки обусловлена возрастающей потребностью в контроле радиоэлектронной обстановки для обнаружения неавторизованных передающих устройств. - -Разработано серверное приложение на языке C++, включающее TCP-сервер для приёма данных от трёх программно-определяемых радиосистем, модуль вычисления координат источника на основе модели логарифмического затухания сигнала и метода роевой оптимизации, а также графический интерфейс на базе фреймворка Qt. Обмен данными между модулями реализован через потокобезопасную очередь с использованием условной переменной. - -# СОДЕРЖАНИЕ - -# ПЕРЕЧЕНЬ ПРИНЯТЫХ СОКРАЩЕНИЙ - -SDR — Software-Defined Radio — программно-определяемая радиосистема -PSO — Particle Swarm Optimization — метод роевой оптимизации -TCP — Transmission Control Protocol — протокол управления передачей -GUI — Graphical User Interface — графический интерфейс пользователя - -# ВВЕДЕНИЕ - -Количество радиоэлектронных устройств в повседневной жизни неуклонно растёт. Помимо легитимных передатчиков в радиоэфире появляются устройства, эксплуатация которых несанкционирована или представляет потенциальную угрозу [1]. Для принятия решения о дальнейших действиях относительно обнаруженного источника радиосигнала необходимо не только зафиксировать сам факт его наличия, но и определить координаты передающего устройства [2]. - -Существующие решения для мониторинга радиоэфира, как правило, представляют собой дорогостоящие комплексные системы, требующие специализированного оборудования и инфраструктуры. Альтернативным подходом является использование компактных программно-определяемых радиосистем, способных передавать данные на обычные вычислительные модули для последующей обработки. - -Целью работы является разработка серверной части программно-аппаратного комплекса мониторинга радиоэфира, обеспечивающего приём данных от программно-определяемых радиосистем и вычисление координат источников радиосигнала. - -Для достижения поставленной цели необходимо решить следующие задачи: - -1. Разработать TCP-сервер для приёма и обработки данных от трёх SDR-приёмников -2. Реализовать алгоритм триангуляции на основе модели логарифмического затухания сигнала и метода роевой оптимизации [3] -3. Разработать графический интерфейс для визуализации результатов пеленгации -4. Обеспечить взаимодействие модулей через потокобезопасную очередь -5. Настроить контейнеризацию приложения с помощью Docker - -# Общее описание системы - -# Выполненные работы - -# ЗАКЛЮЧЕНИЕ - -# СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ - -1. Гилев, И. В. Использование технологии SDR для анализа электромагнитной обстановки в системах связи специального назначения / И. В. Гилев, А. Р. Бушуева // Актуальные проблемы деятельности подразделений уголовно-исполнительной системы : сборник материалов Всероссийской научно-практической конференции. В 3 т., Воронеж, 23 октября 2025 года. – Воронеж: Федеральное казенное образовательное учреждение высшего профессионального образования "Воронежский институт Федеральной службы исполнения наказаний России", Издательско-полиграфический центр «Научная книга», 2025. – С. 324-328. - -2. Шалаев, А. А. Оценка фактических значений отношения сигнал/шум в радионавигационных системах на основе экспериментальных данных / А. А. Шалаев // Crede Experto: транспорт, общество, образование, язык. – 2025. – № 4. – С. 61-76. - -3. Семенюк, С. С. Определение местоположения источников радиоизлучений разностно-дальномерным методом на основе роевого интеллекта / С. С. Семенюк, А. В. Каблуков, А. С. Григоров // Динамика сложных систем - XXI век. – 2024. – Т. 18, № 1. – С. 51-57.