--- /dev/null
+# EditorConfig is awesome: https://editorconfig.org
+
+# top-most EditorConfig file
+root = true
+
+# Unix-style newlines with a newline ending every file
+[*]
+end_of_line = lf
+insert_final_newline = true
+charset = utf-8
+indent_style = space
+indent_size = 2
+
+[Makefile]
+indent_style = tab
--- /dev/null
+# LaTeX
+*\~
+*.swp
+*.log
+*.aux
+*.out
+*.snm
+*.nav
+*.toc
+*.vrb
--- /dev/null
+THEME ?= pgpro2025.theme
+
+THEMES = theme.nonfree pgpro2025.theme
+
+TOP_DIR = $(shell pwd)
+FONTS_DIR = $(TOP_DIR)/$(THEME)/fonts
+
+all:
+ "$(TOP_DIR)/bin/gen_font_config.pl" "$(FONTS_DIR)"
+ ln -sf "$(THEME)/theme_setup.tex" theme_setup.tex
+ FONTCONFIG_FILE="$(FONTS_DIR)/fonts.conf" fc-cache
+
+ # Надо в два прохода
+ FONTCONFIG_FILE="$(FONTS_DIR)/fonts.conf" xelatex example.tex
+ FONTCONFIG_FILE="$(FONTS_DIR)/fonts.conf" xelatex example.tex
+ make clean
+
+clean:
+ rm -f *.log *.aux *.out *.snm *.nav *.toc *.vrb
+ $(foreach theme,$(THEMES), rm -f "$(TOP_DIR)/$(theme)/fonts/fonts.conf";)
+ $(foreach theme,$(THEMES), rm -rf "$(TOP_DIR)/$(theme)/fonts-cache";)
+
--- /dev/null
+# Шаблон презентаций для Beamer
+
+При подготовке шаблона использованы:
+* [Шаблон презентации PostgresPro для Openoffice](link hidden)
+* Шрифт [Gilroy](https://oc.postgrespro.ru/index.php/s/oXFIYT9dLwLCle6)
+* Тема [gcr2019](https://github.com/schors/gcr2019theme) для Beamer
+
+Для сборки запустите команду: `xelatex example.tex`
--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+
+my $font_path = $ARGV[0];
+
+die "Please specify path to font dir as a first arg\n" unless $font_path;
+
+my $data = <<ENDOFDATA;
+
+<?xml version="1.0"?>
+<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
+<fontconfig>
+ <dir>$font_path</dir>
+ <cachedir>$font_path-cache</cachedir>
+</fontconfig>
+
+ENDOFDATA
+
+$data =~ s/^\s+//s; # Remove all spaces at the beginning of the text, to make xml parser happy
+
+open F, ">", "$font_path/fonts.conf" or die "Cannot open $font_path/fonts.conf: $!";
+print F $data;
+close F;
+
--- /dev/null
+\usepackage{listings}
+
+% for listings
+\definecolor{acmebg}{HTML}{FFFFEF}
+\definecolor{acmeh}{HTML}{EFFFFF}
+\definecolor{acmec}{HTML}{8C8ACE}
+\definecolor{acmel}{HTML}{52AAAD}
+\definecolor{acmel1}{HTML}{EFEF9C}
+\definecolor{acmel2}{HTML}{9CEFEF}
+\lstset{
+ columns=flexible,
+ keepspaces=true,
+ showstringspaces=false,
+ showtabs=false,
+ tabsize=4,
+ frame=single,
+ basicstyle=\fontsize{10pt}{12}\bf\ttfamily\color{black},
+ backgroundcolor=\color{acmebg},
+ commentstyle=\color{black},
+ keywordstyle=\color{black},
+ stringstyle=\color{red},
+ rulecolor=\color{acmel},
+ framerule=1pt
+}
+
+% for listings background
+\makeatletter
+\let\old@lstKV@SwitchCases\lstKV@SwitchCases
+\def\lstKV@SwitchCases#1#2#3{}
+\makeatother
+\usepackage{lstlinebgrd}
+\makeatletter
+\let\lstKV@SwitchCases\old@lstKV@SwitchCases
+
+\lst@Key{numbers}{none}{%
+ \def\lst@PlaceNumber{\lst@linebgrd}%
+ \lstKV@SwitchCases{#1}%
+ {none:\\%
+ left:\def\lst@PlaceNumber{\llap{\normalfont
+ \lst@numberstyle{\thelstnumber}\kern\lst@numbersep}\lst@linebgrd}\\%
+ right:\def\lst@PlaceNumber{\rlap{\normalfont
+ \kern\linewidth \kern\lst@numbersep
+ \lst@numberstyle{\thelstnumber}}\lst@linebgrd}%
+ }{\PackageError{Listings}{Numbers #1 unknown}\@ehc}}
+\makeatother
\ No newline at end of file
--- /dev/null
+% библиотеки
+\usetikzlibrary{%
+ arrows, % стрелки
+ shapes.misc, % фигуры
+ shapes.geometric, % фигура ellipse
+ chains, % цепочки
+ positioning, % позиционирование элементов
+ scopes, % создание дополнительных веток
+ shadows % тени
+}
+% указание цветов
+\definecolor{Gray}{RGB}{102,102,102}
+\definecolor{LightGray}{RGB}{178,178,178}
+\definecolor{Red}{RGB}{204,0,0}
+\definecolor{Pink}{RGB}{255,102,102}
+
+% установки для элементов
+\tikzset{
+ every node/.style={on chain},
+ every join/.style={->}, % со стрелками
+ Rectangle/.style={
+ rectangle, % обычный прямоугольник
+ % размер блока
+ minimum size=6mm,
+ very thick, % двойная линия
+ draw=Gray, % указываем заданный ранее цвет
+ % цвета узлов
+ top color=white,
+ bottom color=LightGray,
+ % шрифт моноширинный
+ font=\ttfamily
+ },
+ Rounded/.style={
+ rounded rectangle, % прямоугольник со скруглёнными углами
+ drop shadow={opacity=0.35}, % тень от узлов
+ minimum size=6mm, % размер узла
+ very thick, % двойная линия
+ draw=black!50, % цвет обводки
+ top color=white,bottom color=black!20, % цвета градиента
+ font=\itshape}, % шрифт курсив
+Ellipse/.style={
+ ellipse, % прямоугольник со скруглёнными углами
+ drop shadow={opacity=0.35}, % тень от узлов
+ minimum size=6mm, % размер узла
+ very thick, % двойная линия
+ draw=black!50, % цвет обводки
+ top color=white,bottom color=black!20, % цвета градиента
+ font=\itshape}, % шрифт курсив
+}
\ No newline at end of file
--- /dev/null
+\documentclass{beamer}
+
+\usepackage{xltxtra}
+\defaultfontfeatures{Ligatures=TeX,Mapping=tex-text}
+\usepackage[russian]{babel}
+\usepackage[utf8]{inputenc}
+
+ % Цвета для гиперссылок
+ \definecolor{linkcolor}{HTML}{799B03} % цвет ссылок
+ \definecolor{urlcolor}{HTML}{6633FF} % цвет гиперссылок
+
+ \hypersetup{pdfstartview=FitH, linkcolor=linkcolor,urlcolor=urlcolor, colorlinks=true}
+
+\title{Название презентации}
+\subtitle{Подзаголовок презентации}
+\author{Константин Констанинович Константинопольский}
+\institute{Шамбала, Гималаи, май 2026}
+
+
+\input{theme_setup.tex} % Подгружаем тему из файла
+
+\input{elements/code.tex}
+
+\begin{document}
+
+\begin{frame}
+\titlepage
+\end{frame}
+
+\begin{frame}[t]{Первый слайд}
+ Какой-то список
+ \begin{itemize}
+ \item Элемент 1
+ \item Элемент 2
+ \item Элемент 3
+ \item Элемент 4
+ \end{itemize}
+\end{frame}
+
+\begin{frame}{Схемка}
+ \input{elements/diag.tex}
+ \resizebox{\textwidth}{!}{
+ \begin{tikzpicture}[start chain, node distance=15mm and 12mm] % начало цепочки
+ \node (client)[Ellipse, bottom color=cyan]{Клиент};
+ \node (element1)[Rectangle, right= of client]{Элемент 1};
+ \node (element2)[Rectangle, right=of element1]{Элемент 2};
+ \node (element3)[Rectangle, right=of element2]{Элемент 3};
+
+ \node (data)[Ellipse, below=of client]{Данные};
+ \node (log1)[Rounded, below=of element1, align=center]{Текст 1\\Текст 2};
+ \node (log2)[Rounded, below=of element2, align=center]{Текст 3\\Текст 4};
+ \node (export)[Rounded, below=of element3, align=center]{Текст 5\\Текст 6};
+ \path[->] (element1) edge (log1);
+ \path[->] (element2) edge (log2);
+ \path[->] (element3) edge (export);
+
+ \node (pgpro)[Ellipse, below=of data, bottom color=cyan]{PostgresPro};
+ \node (element4)[Rectangle, below=of log2]{Элемент 4};
+ \path[->] (log1) edge (element4);
+ \path[->] (log2) edge (element4);
+ \path[->] (export) edge (element4);
+ \end{tikzpicture} % конец блока
+ }
+\end{frame}
+
+\begin{frame}[fragile, shrink=10]{Еще слайд}
+ Опять список:
+ \begin{itemize}
+ \item Элемент 1
+ \item Пример ссылки (\href{https://postgrespro.ru}{https://postgrespro.ru}) \\~\\
+ \end{itemize}
+
+ Пример кода:
+ \begin{lstlisting}[linewidth=0.9\textwidth]
+ pip install -r requirements.txt
+ \end{lstlisting}
+\end{frame}
+
+{\setbeamertemplate{background}{
+ \begin{tikzpicture}
+ \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_title_bg2.png}};
+ \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{white}\tiny\insertframenumber};
+ \end{tikzpicture}
+ }
+ \setbeamercolor{normal text}{fg=white}\usebeamercolor*{normal text}
+ \setbeamerfont{normal text}{size*={32pt}{1},family=\sffamily}\usebeamerfont*{normal text}
+ \begin{frame}
+ \vskip1cm
+ Демонстрация
+ \end{frame}
+ \begin{frame}
+ \vskip1cm
+ Q\&A
+ \end{frame}
+}
+
+{\setbeamertemplate{background}{
+ \begin{tikzpicture}
+ \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_thanks_bg.png}};
+ \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{white}\tiny\insertframenumber};
+ \end{tikzpicture}
+ }
+ \begin{frame}
+ \end{frame}
+}
+\end{document}
--- /dev/null
+% PgPro 2025 — цвета и шрифты
+% Шрифты: Roboto (Regular, Medium), Roboto Mono Regular
+% Цвета: корпоративный синий #142D99, белый фон, серые блоки
+\mode<presentation>
+
+% --- Шрифты -----------------------------------------------------------------
+\AtBeginDocument{%
+ \setromanfont{Roboto}%
+ \setsansfont[BoldFont={Roboto Medium}]{Roboto}%
+ \setmonofont{Roboto Mono}%
+}
+
+% --- Цвета ------------------------------------------------------------------
+\definecolor{pgpro@blue}{HTML}{142D99}
+\definecolor{pgpro@gray}{HTML}{EFEFF2}
+\definecolor{pgpro@divider}{HTML}{D4D4DC}
+\definecolor{pgpro@muted}{HTML}{ADADBC}
+
+% --- Титульный слайд: заголовок ---------------------------------------------
+% Заголовок 1: Roboto Medium, 40 pt
+\setbeamercolor*{title page header}{fg=white}
+\setbeamerfont*{title}{size*={40pt}{1.1},family=\sffamily,series=\bfseries}
+
+% --- Титульный слайд: подзаголовок ------------------------------------------
+% Располагается под заголовком, Regular, чуть меньше
+\definecolor{pgpro@subtitle}{HTML}{889BEF}
+\setbeamercolor*{subtitle}{fg=pgpro@subtitle}
+\setbeamerfont*{subtitle}{size*={20pt}{1.2},family=\sffamily}
+
+% --- Титульный слайд: автор -------------------------------------------------
+% Текст 1: Roboto Regular, 14 pt
+\setbeamercolor*{author}{fg=white}
+\setbeamerfont*{author}{size*={14pt}{1.3},family=\sffamily}
+
+% --- Титульный слайд: byline (должность) ------------------------------------
+% Текст 2: Roboto Regular, 12 pt
+\setbeamercolor*{byline}{fg=white}
+\setbeamerfont*{byline}{size*={12pt}{1.3},family=\sffamily}
+
+% --- Заголовок фрейма -------------------------------------------------------
+% Заголовок 2: Roboto Medium, 28 pt
+\setbeamercolor*{frametitle}{fg=pgpro@blue}
+\setbeamerfont*{frametitle}{size*={28pt}{1.1},family=\sffamily,series=\bfseries}
+
+% --- Основной текст ---------------------------------------------------------
+\setbeamercolor{normal text}{fg=pgpro@blue}
+\setbeamerfont{normal text}{size*={21pt}{1.95},family=\sffamily}
+\AtBeginDocument{\usebeamerfont{normal text}}
+
+% --- Списки -----------------------------------------------------------------
+\setbeamertemplate{itemize items}{\textbullet}
+\setbeamercolor{itemize/enumerate body}{fg=pgpro@blue}
+\setbeamerfont{itemize/enumerate body}{size*={21pt}{1.95},family=\sffamily}
+\addtobeamertemplate{itemize/enumerate body begin}{%
+ \setlength{\itemsep}{10.5pt}%
+}{}
+
+% --- Блоки ------------------------------------------------------------------
+\setbeamercolor{block title}{fg=white,bg=pgpro@blue}
+\setbeamercolor{block body}{fg=pgpro@blue,bg=pgpro@gray}
+
+\mode<all>
--- /dev/null
+% PgPro 2025 — внутренняя тема: фоны и шаблон титульного слайда
+\mode<presentation>
+
+\usetikzlibrary{calc}
+
+\setbeamertemplate{background}{
+ \begin{tikzpicture}
+ \ifnum\thepage=1\relax%
+ \node[anchor=south west,inner sep=0] at (0,0)
+ {\includegraphics[width=\the\paperwidth,height=\the\paperheight]%
+ {pgpro2025.theme/bgpics/title_bg}};
+ \fi
+ \ifnum\thepage>1\relax%
+ \node[anchor=south west,inner sep=0] at (0,0)
+ {\includegraphics[width=\the\paperwidth,height=\the\paperheight]%
+ {pgpro2025.theme/bgpics/page_bg}};
+ \node[anchor=east] at (\textwidth+1cm,0.5cm)
+ {\color{pgpro@muted}\tiny\insertframenumber};
+ \fi
+ \end{tikzpicture}
+}
+
+% Шаблон титульной страницы
+% Координаты абсолютные от верхнего края слайда через current page.north west.
+% Требует двух прогонов xelatex (remember picture).
+% Блок 1: Заголовок + Подзаголовок, верх на 0.52″ от верха слайда
+% Блок 2: Автор + Должность, верх на 6.34″ от верха слайда
+\defbeamertemplate*{title page}{PgPro2025}[1][]
+{%
+ \begin{tikzpicture}[remember picture, overlay]
+ % Блок 1: Заголовок + Подзаголовок
+ \node[anchor=north west, text width=\paperwidth-1.33cm-1.03cm, align=left]
+ at ($(current page.north west) + (1.33cm, -0.52in - 1cm)$) {%
+ {\usebeamerfont{title}\usebeamercolor[fg]{title page header}\inserttitle}%
+ \ifx\insertsubtitle\@empty\else\\[0.3cm]%
+ {\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle}\insertsubtitle}%
+ \fi%
+ };
+ % Блок 2: Автор + Должность
+ \node[anchor=north west, text width=\paperwidth-1.33cm-1.03cm, align=left]
+ at ($(current page.north west) + (1.33cm, -6.34in)$) {%
+ {\usebeamerfont{author}\usebeamercolor[fg]{author}\insertauthor}%
+ \ifx\insertinstitute\@empty\else\\[0.15cm]%
+ {\usebeamerfont{institute}\usebeamercolor[fg]{institute}\insertinstitute}%
+ \fi%
+ };
+ \end{tikzpicture}%
+}
+
+\mode<all>
--- /dev/null
+% PgPro 2025 — внешняя тема
+\mode<presentation>
+
+\setbeamertemplate{frametitle}{%
+ \vskip1.4cm%
+ \begin{beamercolorbox}[wd=\paperwidth,leftskip=1.33cm]{frametitle}%
+ \usebeamerfont{frametitle}\insertframetitle%
+ \end{beamercolorbox}%
+ \vskip0.5cm%
+}
+
+\mode<all>
--- /dev/null
+% PgPro 2025 Beamer Theme
+% Логическая структура основана на beamerthemePgPro (gcr2019 derived)
+% Визуальный стиль — корпоративный шаблон Postgres Pro 2025
+\mode<presentation>
+
+\RequirePackage{tikz}
+\RequirePackage{etoolbox}
+
+% Контент фреймов прижат к верху (аналог [t] для всех фреймов).
+% \beamer@frametopskip=0pt в преамбуле не работает: Beamer сбрасывает
+% его в значение «0pt plus 1fill» при каждом \begin{frame} (default [c]).
+% Поэтому ставим [t] принудительно перед каждым фреймом.
+\BeforeBeginEnvironment{frame}{\setkeys{beamerframe}{t}}
+
+% Размер слайда = размеру фоновых PDF (960×540 bp)
+% Патчим внутренние переменные Beamer напрямую,
+% т.к. они кэшируются при загрузке класса до загрузки темы
+\makeatletter
+\setlength{\paperwidth}{960bp}
+\setlength{\paperheight}{540bp}
+\setlength{\beamer@paperwidth}{960bp}
+\setlength{\beamer@paperheight}{540bp}
+\makeatother
+
+\useinnertheme{PgPro2025}
+\useoutertheme{PgPro2025}
+\usecolortheme{PgPro2025}
+
+\setbeamertemplate{navigation symbols}{}
+\setbeamertemplate{blocks}[rounded][shadow=true]
+\setbeamertemplate{footline}{\vspace{1cm}}
+
+% Охранное поле — после переопределения размеров
+\setbeamersize{text margin left=1.33cm,text margin right=1.03cm}
+
+\mode<all>
--- /dev/null
+\makeatletter
+\def\input@path{{./pgpro2025.theme/}}
+\makeatother
+\usetheme{PgPro2025}
--- /dev/null
+\mode<presentation>
+
+% Settings
+\AtBeginDocument{\setromanfont{Times New Roman}}
+\AtBeginDocument{\setsansfont{Gilroy}}
+\AtBeginDocument{\setmonofont{Consolas}}
+\setbeamercolor*{title page header}{fg=white}
+\setbeamerfont*{title}{size*={32pt}{1},family=\sffamily}
+\setbeamercolor*{author}{fg=white}
+\setbeamerfont*{author}{size*={18pt}{1},family=\sffamily}
+\setbeamercolor*{frametitle}{fg=cyan}
+\setbeamerfont*{frametitle}{size*={22pt}{1},family=\sffamily,series=\bfseries}
+%\definecolor{text}{HTML}{595959}
+\definecolor{text}{HTML}{000000}
+\setbeamercolor{normal text}{fg=text}
+\setbeamerfont{normal text}{size*={12pt}{18},family=\sffamily}
+\AtBeginDocument{\usebeamerfont{normal text}}
+\setbeamertemplate{itemize items}{\textbullet}% отключает кошмарные синие треугольники
+\setbeamercolor{itemize/enumerate body}{fg=text}
+\mode
+<all>
--- /dev/null
+\mode<presentation>
+
+\setbeamertemplate{background}{
+ \begin{tikzpicture}
+ \ifnum\thepage=1\relax%
+ \node[anchor=south west,inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_title_bg.png}};
+ \fi
+ \ifnum\thepage>1\relax%
+ \node[anchor=south west, inner sep=0] at (0,0) {\includegraphics[width=\the\paperwidth, height=\the\paperheight]{theme.nonfree/bgpics/pgpro_page_bg.png}};
+ \node[anchor=east] at(\textwidth+1cm,0.5cm) {\color{text}\tiny\insertframenumber};
+ \fi
+ \end{tikzpicture}
+}
+
+% Title page
+\defbeamertemplate*{title page}{gcr2019}[1][]
+{
+ \vskip3cm%
+ \begin{beamercolorbox}[leftskip=0.7cm,left,#1]{title page header}
+ \usebeamerfont{title}\inserttitle\par%
+ \end{beamercolorbox}%
+ \vskip0.75cm%
+ \begin{beamercolorbox}[leftskip=0.7cm,left,#1]{author}
+ \usebeamerfont{author}\insertauthor%
+ \end{beamercolorbox}
+ \vspace{9cm}
+}
+
+\mode
+<all>
--- /dev/null
+\mode<presentation>
+
+% Frame title
+\defbeamertemplate*{frametitle}{gcr2019}[1][]
+{
+ \vskip1cm
+ \begin{beamercolorbox}[wd=\paperwidth,leftskip=0.7cm]{frametitle}
+ \usebeamerfont{frametitle}%
+ \insertframetitle
+ \end{beamercolorbox}
+}
+
+\mode<all>
\ No newline at end of file
--- /dev/null
+% Based on gcr2019 theme (https://github.com/schors/gcr2019theme)
+% Used backghround pictures from template https://confluence.postgrespro.ru/download/attachments/169509420/_PostgresPro_ШАБЛОН.odp?version=1&modificationDate=1675418955114&api=v2
+% and Gilroy font from https://oc.postgrespro.ru/index.php/s/oXFIYT9dLwLCle6
+\mode<presentation>
+
+% Requirement
+\RequirePackage{tikz}
+
+% Settings
+\useinnertheme{PgPro}
+\useoutertheme{PgPro}
+\usecolortheme{PgPro}
+
+\setbeamertemplate{navigation symbols}{}
+\setbeamertemplate{blocks}[rounded][shadow=true]
+\setbeamertemplate{footline}{\vspace{1cm}}
+\setbeamersize{text margin left=0.7cm,text margin right=0.7cm}
+
+\mode<all>
--- /dev/null
+\makeatletter
+\def\input@path{{./theme.nonfree}}
+\makeatother
+\usetheme{PgPro}
+
--- /dev/null
+../2021 - Основы фаззинга. Веселые картинки/2025 - Как работает fuzzing-тестирование
+ Рассказ простым языком - Лекторий в питерском офисе
\ No newline at end of file
--- /dev/null
+../2021 - Основы фаззинга. Веселые картинки/src
\ No newline at end of file
--- /dev/null
+../2021 - Основы фаззинга. Веселые картинки/2026 - LaTeX.Ru.AI
\ No newline at end of file