commit d83826ca7a0d8ad22ced706e322fd713a99189d4 Author: Dmitry Voronin Date: Mon Jul 31 04:30:43 2023 +0300 Squash history. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d215f57 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +build/* +.NixRoot* diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f4eeb70 --- /dev/null +++ b/Makefile @@ -0,0 +1,47 @@ +color = F44336 +photo = false +extra = false +build = $(CURDIR)/build +src = $(CURDIR)/tex +target = $(src)/Main.tex +output = $(build)/Main.pdf +outputen = $(build)/VoronindEn.pdf +outputru = $(build)/VoronindRu.pdf + +export RESUME_COLOR := $(color) +export RESUME_PHOTO := $(photo) +export RESUME_EXTRA := $(extra) + +.PHONY: all +all: clean icon en ru open + +.PHONY: clean +clean: + @rm -rf $(build) + +.PHONY: icon +icon: + @mkdir -p $(build)/image;\ + cd image/icon;\ + for file in *; do convert "$$file" -fill "#$$RESUME_COLOR" -colorize 100 $(build)/image/"$$file" &> /dev/null || cp "$$file" $(build)/image/; done + +.PHONY: en +en: icon + @mkdir -p $(build);\ + cd $(src);\ + export RESUME_LANG=en;\ + lualatex --output-dir=$(build) $(target);\ + mv $(output) $(outputen) + +.PHONY: ru +ru: icon + @mkdir -p $(build);\ + cd $(src);\ + export RESUME_LANG=ru;\ + lualatex --output-dir=$(build) $(target);\ + mv $(output) $(outputru) + +.PHONY: open +open: + @xdg-open $(outputen);\ + xdg-open $(outputru) diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..f7deb29 --- /dev/null +++ b/Readme.md @@ -0,0 +1,42 @@ +# Dmitry Voronin Resume. + +## Latest release. + +[English version](/voronind/resume/releases/download/latest/VoronindEn.pdf) + +[Русская версия](/voronind/resume/releases/download/latest/VoronindRu.pdf) + +## How to build. + +```bash +$ make +``` + +### Available targets. + +Taget | Description +--- | --- +all | Clean, build and open all languages. +clean | Clean project from build files. +icon | Build colored icons. +en | Build English resume. +ru | Build Russian resume. +open | Open built resumes in default PDF viewer. + +### Nix shell support. + +```bash +$ nix develop +``` + +## Requirements. + +* `GNU/Linux` not tested on other platforms. +* `LuaLaTeX` for the document itself. +* `ImageMagick` (optional) for colored icons. + +### Installing missing dependencies. + +When trying to build the project, lualatex may throw missing dependency errors. +To install them use `$ tlmgr install `. + diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..581619f --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1707092692, + "narHash": "sha256-ZbHsm+mGk/izkWtT4xwwqz38fdlwu7nUUKXTOmm4SyE=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "faf912b086576fd1a15fca610166c98d47bc667e", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..a5a8dd7 --- /dev/null +++ b/flake.nix @@ -0,0 +1,55 @@ +{ + description = "LuaLaTeX build env."; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + }; + + outputs = { self, nixpkgs } @inputs: let + system = "x86_64-linux"; + lib = nixpkgs.lib; + pkgs = nixpkgs.legacyPackages.${system}; + tex = (pkgs.texlive.combine { + inherit (pkgs.texlive) scheme-basic + amsmath + babel + capt-of + catchfile + collection-fontsextra + cyrillic + dvipng + dvisvgm + environ + etoolbox + fancyhdr + fontspec + geometry + hyperref + listofitems + luacode + luatexbase + montserrat + parskip + pgf + tcolorbox + tocloft + ulem + wrapfig + xcolor; + + #(setq org-latex-compiler "lualatex") + #(setq org-preview-latex-default-process 'dvisvgm) + }); + in { + devShells.${system} = { + default = pkgs.mkShell rec { + nativeBuildInputs = with pkgs; [ + gnumake + imagemagick + tex + ]; + buildInputs = with pkgs; []; + }; + }; + }; +} diff --git a/image/Photo.jpg b/image/Photo.jpg new file mode 100644 index 0000000..e69de29 diff --git a/image/icon/IcAlcohol.png b/image/icon/IcAlcohol.png new file mode 100644 index 0000000..d1f086c Binary files /dev/null and b/image/icon/IcAlcohol.png differ diff --git a/image/icon/IcCake.png b/image/icon/IcCake.png new file mode 100644 index 0000000..812b81a Binary files /dev/null and b/image/icon/IcCake.png differ diff --git a/image/icon/IcCall.png b/image/icon/IcCall.png new file mode 100644 index 0000000..73c3117 Binary files /dev/null and b/image/icon/IcCall.png differ diff --git a/image/icon/IcEmail.png b/image/icon/IcEmail.png new file mode 100644 index 0000000..7466bfc Binary files /dev/null and b/image/icon/IcEmail.png differ diff --git a/image/icon/IcLink.png b/image/icon/IcLink.png new file mode 100644 index 0000000..1f5a38d Binary files /dev/null and b/image/icon/IcLink.png differ diff --git a/image/icon/IcLocation.png b/image/icon/IcLocation.png new file mode 100644 index 0000000..ae14e2e Binary files /dev/null and b/image/icon/IcLocation.png differ diff --git a/image/icon/IcNoAlcohol.png b/image/icon/IcNoAlcohol.png new file mode 100644 index 0000000..6b94885 Binary files /dev/null and b/image/icon/IcNoAlcohol.png differ diff --git a/image/icon/IcNoSmoke.png b/image/icon/IcNoSmoke.png new file mode 100644 index 0000000..47fb732 Binary files /dev/null and b/image/icon/IcNoSmoke.png differ diff --git a/image/icon/IcRadioChecked.png b/image/icon/IcRadioChecked.png new file mode 100644 index 0000000..5c89692 Binary files /dev/null and b/image/icon/IcRadioChecked.png differ diff --git a/image/icon/IcRadioUnchecked.png b/image/icon/IcRadioUnchecked.png new file mode 100644 index 0000000..d0dc651 Binary files /dev/null and b/image/icon/IcRadioUnchecked.png differ diff --git a/image/icon/IcSmoke.png b/image/icon/IcSmoke.png new file mode 100644 index 0000000..7c914cd Binary files /dev/null and b/image/icon/IcSmoke.png differ diff --git a/tex/Const.tex b/tex/Const.tex new file mode 100644 index 0000000..d0ef083 --- /dev/null +++ b/tex/Const.tex @@ -0,0 +1,35 @@ +% Switches. +\newif\ifPhoto % Show photo. +\newif\ifExtra % Show extra content. +\newif\ifEn % English language. +\newif\ifRu % Russian language. +\newcommand{\En}[1]{\ifEn#1\fi} % Print if English language. +\newcommand{\Ru}[1]{\ifRu#1\fi} % Print if Russian language. + +% Read env variables. +\def\envTrue{true} % True. +\def\envFalse{false} % False. +\def\envEn{en} % English literal. +\def\envRu{ru} % Russian literal. +\def\envEmpty{} % Empty env value. +\GetEnv[\envPhoto]{RESUME_PHOTO} % Read photo shell variable. +\GetEnv[\envExtra]{RESUME_EXTRA} % Read extra shell variable. +\GetEnv[\envLang]{RESUME_LANG} % Read language shell variable. +\ifdefequal{\envPhoto}{\envTrue}{\Phototrue}{\Photofalse} % Show photo. +\ifdefequal{\envExtra}{\envTrue}{\Extratrue}{\Extrafalse} % Show extra content. +\ifdefequal{\envLang}{\envEn}{\Entrue}{} % Use English. +\ifdefequal{\envLang}{\envRu}{\Rutrue}{} % Use Russian. +\ifdefequal{\envLang}{\envEmpty}{\Entrue}{} % Use English by default. + +% personal info. +\newcommand{\Name}{% + \En{Dmitry Voronin}% + \Ru{Дмитрий Воронин} +} +\newcommand{\Location}{% + \En{St. Petersburg, Russia}% + \Ru{Санкт-Петербург, Россия} +} +\newcommand{\Birthday}{\Jun 1998} +\newcommand{\Email}{job@voronind.com} +\newcommand{\Telegram}{https://t.me/voronind\_com} diff --git a/tex/Main.tex b/tex/Main.tex new file mode 100644 index 0000000..d5551f0 --- /dev/null +++ b/tex/Main.tex @@ -0,0 +1,68 @@ +\documentclass{article} % Basic document class (template). +\usepackage[T2A,T1]{fontenc} % Specify font encodings. +\usepackage[utf8]{inputenc} % Specify input file encodings. +\usepackage[bidi=default]{babel} % Use babel for i18n. +\usepackage{graphicx} % Image support. +\usepackage{xcolor} % Colored text support. +\usepackage{montserrat} % Custom font. +\usepackage{hyperref} % Hyperlinks. +\usepackage{indentfirst} % Auto indent for paragraphs. +\usepackage{luacode} % Lua scripts support. +\usepackage{tcolorbox} % Code blocks. +\usepackage{listofitems} % For loops. + +\input{Shell} % Import shell support. + +% Configure geometry. +\usepackage[ + a4paper, + left = 0.5in, + right = 0.5in, + top = 0.5in, + bottom = 0.5in +]{geometry} + +% Paragraph spacing. +\usepackage[ + skip = 4pt, + indent = 20pt +]{parskip} + +% Configure hyperlinks. +\hypersetup{ + linktocpage = true, + colorlinks = true, + hidelinks = true, + linktoc = all +} + +% Specify where images are stored. +\graphicspath{ {../image}{../build/image} } + +\babelprovide[import]{russian} % Add Russian support. +\babelfont{rm}{montserrat} % Use custom serif font for English. +\babelfont{sf}{montserrat} % Use custom sans font for English. +\babelfont{tt}{montserrat} % Use custom mono font for English. +\babelfont[russian]{rm}{montserrat} % Use custom serif font for Russian. +\babelfont[russian]{sf}{montserrat} % Use custom sans font for Russian. +\babelfont[russian]{tt}{montserrat} % Use custom mono font for Russian. + +\begin{document} +\input{Style} % Import common styles. +\input{Const} % Import constant values. +\input{Page} % Import pages info. +\input{i18n/Month} % Import month values. +\input{view/Radio} % Import radio view. +\input{view/Place} % Import place view. + +\input{page/Title} % Import title. +\input{page/Experience} % Import experience info. +\clearpage\noindent % INFO: temprorary page break. +\input{page/Language} % Import languages info. +\Par\noindent +\input{page/Education} % Import education info. +\Par\noindent +\input{page/Skill} % Import skills info. +\Par\noindent +\input{page/Interest} % Import interests info. +\end{document} diff --git a/tex/Page.tex b/tex/Page.tex new file mode 100644 index 0000000..8449a00 --- /dev/null +++ b/tex/Page.tex @@ -0,0 +1,21 @@ +% this is used to create constant reference links within document. +\def\PageExperience{% + \En{WORK EXPERIENCE}% + \Ru{ОПЫТ РАБОТЫ} +} +\def\PageLanguage{% + \En{LANGUAGES}% + \Ru{ЯЗЫКИ} +} +\def\PageEducation{% + \En{EDUCATION}% + \Ru{ОБРАЗОВАНИЕ} +} +\def\PageSkill{% + \En{SKILLS}% + \Ru{НАВЫКИ} +} +\def\PageInterest{% + \En{INTERESTS}% + \Ru{ИНТЕРЕСЫ} +} diff --git a/tex/Shell.tex b/tex/Shell.tex new file mode 100644 index 0000000..306a2ed --- /dev/null +++ b/tex/Shell.tex @@ -0,0 +1,5 @@ +% \GetEnv[\HOME]{HOME} % Example: Store $HOME shell var into \HOME cmd. +\usepackage{catchfile} +\newcommand{\GetEnv}[2][]{% + \CatchFileEdef{\Temp}{"|kpsewhich --var-value #2"}{\endlinechar=-1}% + \if\relax\detokenize{#1}\relax\Temp\else\let#1\Temp\fi} diff --git a/tex/Style.tex b/tex/Style.tex new file mode 100644 index 0000000..00b00d3 --- /dev/null +++ b/tex/Style.tex @@ -0,0 +1,67 @@ +% Colors. +\GetEnv[\ColorMain]{RESUME_COLOR} +\definecolor{ColorBlack}{RGB}{0,0,0} +\definecolor{ColorWhite}{RGB}{255,255,255} +\definecolor{ColorLink} {RGB}{46,116,181} +\definecolor{ColorMain} {HTML}{\ColorMain} +\definecolor{ColorGray} {RGB}{127,127,127} +\definecolor{ColorLgray}{RGB}{229,229,229} +\definecolor{ColorRef} {RGB}{53,82,105} + +\definecolor{ColorCodeBackground}{RGB}{38,38,38} +\definecolor{ColorCodeText} {RGB}{255,215,175} +\definecolor{ColorCodeString} {RGB}{135,175,135} +\definecolor{ColorCodeLiteral} {RGB}{215,135,175} +\definecolor{ColorCodeProperty} {RGB}{135,95,95} +\definecolor{ColorCodeKeyword} {RGB}{255,95,95} +\definecolor{ColorCodeComment} {RGB}{128,128,128} + +% code block. +\newtcolorbox{CodeBox}[1][]{ + colback = ColorCodeBackground, + colframe = ColorCodeBackground, + fontupper = \ttfamily, + nobeforeafter +} +\newenvironment{Code}{\begin{CodeBox}\catcode33=12\obeylines}{\end{CodeBox}} + +% styles. +\newcommand{\ResetStyle}[1]{\fontsize{12}{12}\selectfont\rm\color{ColorBlack}#1} +\newcommand{\Par} [0]{\par} +\newcommand{\Parn} [0]{\par\noindent} +\newcommand{\Text} [1]{\ResetStyle{#1}} +\newcommand{\Italic} [1]{\textit{#1}} +\newcommand{\Bold} [1]{\textbf{#1}} +\newcommand{\Semibold} [1]{\fontseries{sb}{\selectfont{#1}}} +\newcommand{\Underline} [1]{\underline{#1}} +\newcommand{\Link} [2]{\href{#1}{\textcolor{ColorLink}{\Underline{#2}}}} +\newcommand{\TextName} [1]{\fontsize{21}{21}{\selectfont{\Semibold{#1}}}} +\newcommand{\Color} [2]{\textcolor{#1}{#2}} +\newcommand{\Icon} [1]{\raisebox{-1mm}{\includegraphics[height=5mm]{#1}}} +\newcommand{\Href} [1]{\hyperlink{#1}{\textcolor{ColorLink}{\Underline{#1}}}} +\newcommand{\TextRef} [1]{\textcolor{ColorRef}{#1}} +\newcommand{\TextList} [1]{\textcolor{ColorLgray}{#1}} +\newcommand{\Bullet} [0]{\raisebox{0.5mm}{\bullet}\hspace{4mm}} +\newcommand{\End} [0]{\clearpage} +\newcommand{\Title} [1]{\hypertarget{#1}{}\fontsize{11}{11}{\selectfont{\textcolor{ColorMain}{\Semibold{#1}}}}} + +\newcommand{\BlToc} [0]{\renewcommand{\baselinestretch}{0.75}\normalsize} +\newcommand{\BlCompact}[0]{\renewcommand{\baselinestretch}{1.0}\normalsize} +\newcommand{\BlDefault}[0]{\renewcommand{\baselinestretch}{1.5}\normalsize} + +\newcommand{\CodeText} [1]{\textcolor{CodeText}{#1}} +\newcommand{\CodeString} [1]{\textcolor{ColorCodeString}{#1}} +\newcommand{\CodeLiteral} [1]{\textcolor{ColorCodeLiteral}{#1}} +\newcommand{\CodeProperty} [1]{\textcolor{ColorCodeProperty}{#1}} +\newcommand{\CodeKeyword} [1]{\textcolor{ColorCodeKeyword}{#1}} +\newcommand{\CodeComment} [1]{\textcolor{ColorCodeComment}{#1}} +\newcommand{\CodeEmptyLine}[0]{~} + +\newcommand{\JLink} [1]{\Icon{IcLink}\ \href{https://#1}{\Italic{#1}}} +\newcommand{\JPlace}[2]{\ResetStyle{\Semibold{#1}}\ResetStyle\hfill\fontsize{10}{10}\selectfont\textcolor{ColorGray}{(#2)}} + +% settings. +\linespread{1.5} % Height between non-breaking lines. +\sloppy % Correct word placement on newline. +\pagestyle{empty} % Suppress default styles, i.e. page numbers. +\BlDefault % Default baseline size. diff --git a/tex/i18n/Month.tex b/tex/i18n/Month.tex new file mode 100644 index 0000000..801b032 --- /dev/null +++ b/tex/i18n/Month.tex @@ -0,0 +1,49 @@ +% months. +\newcommand{\Jan}{% + \En{January}% + \Ru{Январь} +} +\newcommand{\Feb}{% + \En{February}% + \Ru{Февраль} +} +\newcommand{\Mar}{% + \En{March}% + \Ru{Март} +} +\newcommand{\Apr}{% + \En{April}% + \Ru{Апрель} +} +\newcommand{\May}{% + \En{May}% + \Ru{Май} +} +\newcommand{\Jun}{% + \En{June}% + \Ru{Июнь} +} +\newcommand{\Jul}{% + \En{July}% + \Ru{Июль} +} +\newcommand{\Aug}{% + \En{August}% + \Ru{Август} +} +\newcommand{\Sep}{% + \En{September}% + \Ru{Сентябрь} +} +\newcommand{\Oct}{% + \En{October}% + \Ru{Октябрь} +} +\newcommand{\Nov}{% + \En{November}% + \Ru{Ноябрь} +} +\newcommand{\Dec}{% + \En{December}% + \Ru{Декабрь} +} diff --git a/tex/page/Education.tex b/tex/page/Education.tex new file mode 100644 index 0000000..cf5d59e --- /dev/null +++ b/tex/page/Education.tex @@ -0,0 +1,14 @@ +\Title{\PageEducation}\newline +\Place{% + \En{South Ural State University}% + \Ru{Южно-Уральский Государственный Университет} +}{% + 2016 - 2021% +}{% + \En{Bachelor, Computer Science}% + \Ru{Бакалавр, ЭВМ}\newline + \En{Main goal in education was to learn how to find optimal solutions to real problems and how to work with electronics from their structure to interfaces. I learned how to code completely by myself. I'd actually say it came to me like an essential skill. After three years I continued as a part-study. Mainly because I personally thought I'd outgrown the study curve my university provided. That was not only my opinion, but opinions of certain professors I had luck to work with.}% + \Ru{Главной целью в образовании было обучение поиску оптимальных решений реальных проблем и работе с электроникой от её структуры до интерфейсов. Я научился писать код полностью самостоятельно. Точнее сказать, этот навык стал для меня естественным. После трёх лет очного обучения я продолжил обучение заочно. Основной причиной стало ощущение, что обучение в университете стало слишком медленным для меня. Это было не только моё мнение, но и мнения некоторых профессоров с которыми мне посчастливилось работать.} +}{% + susu.ru +}{;} diff --git a/tex/page/Experience.tex b/tex/page/Experience.tex new file mode 100644 index 0000000..eca16df --- /dev/null +++ b/tex/page/Experience.tex @@ -0,0 +1,6 @@ +\Title{\PageExperience}\newline +\input{place/Foresight2} +\input{place/Foresight} +\input{place/Freelance} +\input{place/Intersvyaz} +\input{place/DaoEngineering} diff --git a/tex/page/Interest.tex b/tex/page/Interest.tex new file mode 100644 index 0000000..777f701 --- /dev/null +++ b/tex/page/Interest.tex @@ -0,0 +1,41 @@ +\Title{\PageInterest}\Par\vspace{-4mm}\noindent +\begin{minipage}[t]{0.5\textwidth} + \Text{\Semibold{% + \En{Self-Hosting}% + \Ru{Self-Hosting} + }}\newline + \Text{\raggedright % + \En{Hardware, Linux Administration, Networking, Data protection, Web Apps, IoT.}% + \Ru{Оборудование, Администрирование Linux, Сети, Защита данных, Web-приложения, IoT.} + }\newline +\end{minipage} +\begin{minipage}[t]{0.5\textwidth} + \Text{\Semibold{% + \En{3D Modeling}% + \Ru{3D Моделирование} + }}\newline + \Text{\raggedright Blender.}\newline +\end{minipage} +\begin{minipage}[t]{0.5\textwidth} + \Text{\Semibold{% + \En{Music}% + \Ru{Музыка} + }}\newline + \Text{\raggedright % + \En{Guitar, Synth.}% + \Ru{Гитара, Синтезатор.} + } +\end{minipage} +\begin{minipage}[t]{0.5\textwidth} + \Text{\Semibold{% + \En{Cooking}% + \Ru{Готовка} + }}\newline + \Text{\raggedright % + \En{Asian kitchen, Desserts.}% + \Ru{Азиатская кухня, Десерты.} + } +\end{minipage} +\Parn\Parn +\Icon{IcNoSmoke} +\Icon{IcNoAlcohol} diff --git a/tex/page/Language.tex b/tex/page/Language.tex new file mode 100644 index 0000000..7fcca27 --- /dev/null +++ b/tex/page/Language.tex @@ -0,0 +1,20 @@ +\Title{\PageLanguage}\Par\vspace{1mm}\noindent +\begin{minipage}{0.5\textwidth} + \Text{\Semibold{% + \En{Russian}% + \Ru{Русский} + }}\newline + \Text{% + \En{Native}% + \Ru{Родной} + }\newline + \Radio{5} +\end{minipage} +\begin{minipage}{0.5\textwidth} + \Text{\Semibold{% + \En{English}% + \Ru{Английский} + }}\newline + \Text{C1}\newline + \Radio{5} +\end{minipage} diff --git a/tex/page/Skill.tex b/tex/page/Skill.tex new file mode 100644 index 0000000..1f28ff5 --- /dev/null +++ b/tex/page/Skill.tex @@ -0,0 +1,31 @@ +\Title{\PageSkill}\Par\vspace{-4mm}\noindent +\begin{minipage}[t]{0.5\textwidth} + \Text{\Semibold{% + \En{Mobile Development}% + \Ru{Мобильная разработка} + }}\newline + \Radio{5}\newline + \Text{\raggedright Android, Java, Kotlin, Kotlin Multiplatform (KMP), Coroutines, Compose, Material, NDK, Android TV, Android ROM, React Native, Android Library dev, Smali.}\newline +\end{minipage} +\begin{minipage}[t]{0.5\textwidth} + \Text{\Semibold{% + \En{Web Development}% + \Ru{Вэб разработка} + }}\newline + \Radio{3}\newline + \Text{\raggedright Scala, Rust, Go, HTML, CSS, JS (jQuery), Bootstrap, Java EE, PHP (Yii), Nginx, Python (Django).}\newline +\end{minipage}\newline +\begin{minipage}[t]{0.5\textwidth} + \Text{\Semibold{% + \En{General}% + \Ru{Общее} + }}\newline + \Text{\raggedright Linux (\En{daily since}\Ru{ежедневно с} 2014), Git, Docker/Compose/Nspawn, \En{Reverse engineering}\Ru{Реверс-инжиниринг} (IDA, JD-GUI), \En{Cryptography}\Ru{Криптография}, SQL.} +\end{minipage} +\begin{minipage}[t]{0.5\textwidth} + \Text{\Semibold{% + \En{Other}% + \Ru{Другое} + }}\newline + \Text{\raggedright \LaTeX,\ Nix/NixOS, Bash (Shell), C (Lang), Lua, Swing, OpenJFX, OpenCV, dlib, Neovim. \En{Non-commercial experience with functional programming.}\Ru{Некоммерческий опыт работы с функциональным программированием.}} +\end{minipage} diff --git a/tex/page/Title.tex b/tex/page/Title.tex new file mode 100644 index 0000000..6e6ccb1 --- /dev/null +++ b/tex/page/Title.tex @@ -0,0 +1,32 @@ +\hspace{-8mm} +\ifPhoto +\begin{minipage}{0.2\textwidth} + \includegraphics[width=3cm]{Photo} % photo. +\end{minipage} +\fi +\begin{minipage}{0.8\textwidth} + % name with required fix for montserrat font. + % \hspace{-3mm} + \TextName{\Name} + \vspace{4mm} + \newline + % location. + \Icon{IcLocation} + \Text{\Location} + \vspace{2mm} + \newline + % birthday, email & phone number. + \Icon{IcCake} + \Text{\Birthday} + \hspace{2mm} + \Icon{IcEmail} + \Text{\href{mailto:\Email}{\ \Email}} + \hspace{2mm} + \Icon{IcCall} + \Text{\href{\Telegram}{Telegram}} +\end{minipage} + +% separator. +\hspace{-8mm}{% + \color{ColorLgray}{\rule{\linewidth}{1pt}} +} diff --git a/tex/place/DaoEngineering.tex b/tex/place/DaoEngineering.tex new file mode 100644 index 0000000..d636a62 --- /dev/null +++ b/tex/place/DaoEngineering.tex @@ -0,0 +1,16 @@ +\Place{% + DAO Engineering +}{% + \Sep 2017 - \Jun 2018% +}{% + \En{Android Developer}% + \Ru{Андроид Разработчик} +}{% +}{% + \En{Mainly Android development, also worked with Java, NDK, OpenCV, dlib.}% + \Ru{Основное время - Android разработка. Также работал с Java, NDK, OpenCV, dlib.};% + \En{Implemented facial recognition and image post-processing.}% + \Ru{Реализовал распознавание лиц и пост-обработку изображений.};% + \En{Gathered experience of intense development with Android framework, including non-trivial custom View elements.}% + \Ru{Получил опыт интенсивной разработки с использованием фреймворка Android, включая нетривиальные кастомные View.} +} diff --git a/tex/place/Foresight.tex b/tex/place/Foresight.tex new file mode 100644 index 0000000..863d1e0 --- /dev/null +++ b/tex/place/Foresight.tex @@ -0,0 +1,18 @@ +\Place{% + \En{Foresight}% + \Ru{Форсайт} +}{% + \Oct 2019 - \Oct 2021% +}{% + \En{Android Developer}% + \Ru{Андроид Разработчик} +}{% + fsight.ru +}{% + \En{Supporting middleware library and developing applications with it.}% + \Ru{Поддержка middleware библиотеки и разработка с ней приложений.};% + \En{Interviewing people.}% + \Ru{Проведение интервью.};% + \En{Technical presentation of platform.}% + \Ru{Техническая презентация платформы.} +} diff --git a/tex/place/Foresight2.tex b/tex/place/Foresight2.tex new file mode 100644 index 0000000..9418b80 --- /dev/null +++ b/tex/place/Foresight2.tex @@ -0,0 +1,26 @@ +\Place{% + \En{Foresight}% + \Ru{Форсайт} +}{% + \Oct 2021 - {\En{Present}\Ru{Сейчас}}% +}{% + \En{Mobile Team Lead}% + \Ru{Ведущий мобильный разработчик} +}{% + fsight.ru +}{% + \En{Supporting middleware library and developing applications with it.}% + \Ru{Поддержка middleware библиотеки и разработка с ней приложений.};% + \En{Providing vector for mobile development outside of roadmap.}% + \Ru{Предоставление вектора мобильной разработки вне дорожной карты.};% + \En{Delivery management.}% + \Ru{Ответственный за доставку продукта.};% + \En{Adaptation of new personnel.}% + \Ru{Адаптация новых членов команды.};% + \En{Main code-review.}% + \Ru{Ответственный за code-review.};% + \En{Technical consulting.}% + \Ru{Техническая консультация.};% + \En{Workshop speaker.}% + \Ru{Ведущий мастер-классов.} +} diff --git a/tex/place/Freelance.tex b/tex/place/Freelance.tex new file mode 100644 index 0000000..a428ea2 --- /dev/null +++ b/tex/place/Freelance.tex @@ -0,0 +1,13 @@ +\Place{% + \En{Freelance}% + \Ru{Фриланс} +}{% + \Feb 2019 - \Oct 2019% +}{% + \En{Freelance}% + \Ru{Фриланс} +}{% +}{% + \En{Made complete web and mobile applications, support chat bots for local business.}% + \Ru{Создание web и мобильных приложений, чат-ботов для местного бизнеса.} +} diff --git a/tex/place/Intersvyaz.tex b/tex/place/Intersvyaz.tex new file mode 100644 index 0000000..6b9737e --- /dev/null +++ b/tex/place/Intersvyaz.tex @@ -0,0 +1,20 @@ +\Place{% + \En{Intersvyaz, federal ISP}% + \Ru{Интерсвязь} +}{% + \Jun 2018 - \Feb 2019% +}{% + \En{Software Engineer}% + \Ru{Инженер ПО} +}{% + is74.ru +}{% + \En{Used to solve tasks of mobile and web development.}% + \Ru{Решение задач мобильной и web разработки.};% + \En{Gathered experience with customizing Android ROM and reverse engineering.}% + \Ru{Получил опыт кастомизации прошивок Android и реверс-инжиниринга.};% + \En{Created firmware for Amlogic TV boxes based on firmware from similar device. Fixed completely broken building system, debugged and fixed many system problems.}% + \Ru{Создал прошивку для проигрывателей Amlogic TV на основе прошивки похожего устройства. Восстановил полностью нерабочую систему сборки, отладил и исправил множество системных проблем.};% + \En{Recieved experience of collecting video playback stats, multitreading. Processed, stored and represented big amounts of data.}% + \Ru{Получил опыт сбора статистики воспроизведения видео и многопоточной обработки. Обработал, сохранил и отобразил большое количество данных.} +} diff --git a/tex/view/Place.tex b/tex/view/Place.tex new file mode 100644 index 0000000..33d0533 --- /dev/null +++ b/tex/view/Place.tex @@ -0,0 +1,11 @@ +% Args: Company's name, period, position, url, tasks (separated by ;). +\newcommand{\Place}[5]{% + \noindent + \JPlace{#1}{#2}\newline + \Text{#3}\newline + \setsepchar{;}% + \ignoreemptyitems% + \readlist\Tasks{#5}% + \foreachitem\Task\in\Tasks{\Text{\TextList{\Bullet}\ \Task}\newline} + \def\PLink{#4}\ifx\PLink\empty{}\else{\JLink{#4}\Par}\fi +} diff --git a/tex/view/Radio.tex b/tex/view/Radio.tex new file mode 100644 index 0000000..02dd919 --- /dev/null +++ b/tex/view/Radio.tex @@ -0,0 +1,7 @@ +\newcommand{\Radio}[1]{% + \ifnum#1>0{\Icon{IcRadioChecked}}\else{\Icon{IcRadioUnchecked}}\fi + \ifnum#1>1{\Icon{IcRadioChecked}}\else{\Icon{IcRadioUnchecked}}\fi + \ifnum#1>2{\Icon{IcRadioChecked}}\else{\Icon{IcRadioUnchecked}}\fi + \ifnum#1>3{\Icon{IcRadioChecked}}\else{\Icon{IcRadioUnchecked}}\fi + \ifnum#1>4{\Icon{IcRadioChecked}}\else{\Icon{IcRadioUnchecked}}\fi +}