Compare commits
No commits in common. "main" and "v1" have entirely different histories.
1
.gitignore
vendored
|
@ -1,2 +1 @@
|
||||||
build/*
|
build/*
|
||||||
.NixRoot*
|
|
||||||
|
|
31
Makefile
|
@ -1,32 +1,19 @@
|
||||||
color = F44336
|
|
||||||
photo = false
|
|
||||||
extra = false
|
|
||||||
build = $(CURDIR)/build
|
build = $(CURDIR)/build
|
||||||
src = $(CURDIR)/tex
|
src = $(CURDIR)/tex
|
||||||
target = $(src)/Main.tex
|
target = $(src)/main.tex
|
||||||
output = $(build)/Main.pdf
|
output = $(build)/main.pdf
|
||||||
outputen = $(build)/VoronindEn.pdf
|
outputen = $(build)/voronind_en.pdf
|
||||||
outputru = $(build)/VoronindRu.pdf
|
outputru = $(build)/voronind_ru.pdf
|
||||||
|
|
||||||
export RESUME_COLOR := $(color)
|
|
||||||
export RESUME_PHOTO := $(photo)
|
|
||||||
export RESUME_EXTRA := $(extra)
|
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: clean icon en ru open
|
all: clean en ru
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
@rm -rf $(build)
|
@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
|
.PHONY: en
|
||||||
en: icon
|
en:
|
||||||
@mkdir -p $(build);\
|
@mkdir -p $(build);\
|
||||||
cd $(src);\
|
cd $(src);\
|
||||||
export RESUME_LANG=en;\
|
export RESUME_LANG=en;\
|
||||||
|
@ -34,14 +21,14 @@ en: icon
|
||||||
mv $(output) $(outputen)
|
mv $(output) $(outputen)
|
||||||
|
|
||||||
.PHONY: ru
|
.PHONY: ru
|
||||||
ru: icon
|
ru:
|
||||||
@mkdir -p $(build);\
|
@mkdir -p $(build);\
|
||||||
cd $(src);\
|
cd $(src);\
|
||||||
export RESUME_LANG=ru;\
|
export RESUME_LANG=ru;\
|
||||||
lualatex --output-dir=$(build) $(target);\
|
lualatex --output-dir=$(build) $(target);\
|
||||||
mv $(output) $(outputru)
|
mv $(output) $(outputru)
|
||||||
|
|
||||||
.PHONY: open
|
.PHONY: view
|
||||||
open:
|
view:
|
||||||
@xdg-open $(outputen);\
|
@xdg-open $(outputen);\
|
||||||
xdg-open $(outputru)
|
xdg-open $(outputru)
|
||||||
|
|
31
README.md
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
# Dmitry Voronin Resume.
|
||||||
|
|
||||||
|
## How to build.
|
||||||
|
```bash
|
||||||
|
$ make $target
|
||||||
|
```
|
||||||
|
|
||||||
|
### Available targets.
|
||||||
|
Taget | Description
|
||||||
|
--- | ---
|
||||||
|
all | Clean, build and view all languages.
|
||||||
|
clean | Clean project from build files.
|
||||||
|
en | Build English resume.
|
||||||
|
ru | Build Russian resume.
|
||||||
|
view | View built resumes in default PDF viewer.
|
||||||
|
|
||||||
|
## Requirements.
|
||||||
|
This project is built using TeX (LuaLaTeX) on GNU/Linux.
|
||||||
|
|
||||||
|
### Texlive setup.
|
||||||
|
```text
|
||||||
|
$ wget https://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
|
||||||
|
$ tar -xf install-tl-unx.tar.gz
|
||||||
|
$ rm install-tl-unx.tar.gz
|
||||||
|
$ cd ./install-tl-*
|
||||||
|
$ ./install-tl
|
||||||
|
```
|
||||||
|
|
||||||
|
### Installing missing dependencies.
|
||||||
|
When trying to build the project, lualatex may throw missing dependency errors.
|
||||||
|
To install them use `$ tlmgr install $dependency`.
|
42
Readme.md
|
@ -1,42 +0,0 @@
|
||||||
# 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 <PACKAGE>`.
|
|
||||||
|
|
27
flake.lock
|
@ -1,27 +0,0 @@
|
||||||
{
|
|
||||||
"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
|
|
||||||
}
|
|
55
flake.nix
|
@ -1,55 +0,0 @@
|
||||||
{
|
|
||||||
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; [];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 311 B |
Before Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 338 B |
Before Width: | Height: | Size: 418 B |
Before Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 353 B |
Before Width: | Height: | Size: 5 KiB After Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.5 KiB |
BIN
image/photo.jpg
Normal file
After Width: | Height: | Size: 147 KiB |
|
@ -1,36 +0,0 @@
|
||||||
% 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}
|
|
||||||
\newcommand{\Github}{https://github.com/voronind-com}
|
|
68
tex/Main.tex
|
@ -1,68 +0,0 @@
|
||||||
\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}
|
|
21
tex/Page.tex
|
@ -1,21 +0,0 @@
|
||||||
% 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{ИНТЕРЕСЫ}
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
% \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}
|
|
|
@ -1,67 +0,0 @@
|
||||||
% 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.
|
|
19
tex/const.tex
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
% switches.
|
||||||
|
\newif\ifphoto % show photo.
|
||||||
|
\newif\ifextra % show extra content.
|
||||||
|
|
||||||
|
\phototrue
|
||||||
|
\extrafalse
|
||||||
|
|
||||||
|
% 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{\phone}{+7(905)836-68-86}
|
18
tex/i18n.tex
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
% language switches.
|
||||||
|
\newif\ifen
|
||||||
|
\newif\ifru
|
||||||
|
|
||||||
|
\newcommand{\en}[1]{\ifen#1\fi}
|
||||||
|
\newcommand{\ru}[1]{\ifru#1\fi}
|
||||||
|
|
||||||
|
% language detection.
|
||||||
|
\def\liten{en} % english literal.
|
||||||
|
\def\litru{ru} % russian literal.
|
||||||
|
\def\litnil{} % empty literal.
|
||||||
|
\getenv[\lang]{RESUME_LANG} % read shell variable.
|
||||||
|
\ifdefequal{\lang}{\liten}{\entrue}{} % use english.
|
||||||
|
\ifdefequal{\lang}{\litru}{\rutrue}{} % use russian.
|
||||||
|
\ifdefequal{\lang}{\litnil}{\entrue}{} % use english by default.
|
||||||
|
|
||||||
|
% include translations.
|
||||||
|
\input{i18n/month}
|
|
@ -1,49 +0,0 @@
|
||||||
% 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{Декабрь}
|
|
||||||
}
|
|
49
tex/i18n/month.tex
Normal file
|
@ -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{Декабрь}
|
||||||
|
}
|
57
tex/main.tex
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
\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
|
||||||
|
}
|
||||||
|
|
||||||
|
\graphicspath{ {../image} } % specify where images are stored.
|
||||||
|
|
||||||
|
\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{i18n} % import internationalization support.
|
||||||
|
\input{style} % import common styles.
|
||||||
|
\input{const} % import constant values.
|
||||||
|
\input{page} % import pages info.
|
||||||
|
|
||||||
|
\input{page/title} % import title.
|
||||||
|
\input{page/experience} % import experience info.
|
||||||
|
\end{document}
|
16
tex/page.tex
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
\def\pexperience{%
|
||||||
|
\en{WORK EXPERIENCE}%
|
||||||
|
\ru{ОПЫТ РАБОТЫ}
|
||||||
|
}
|
||||||
|
\def\planguages{%
|
||||||
|
\en{LANGUAGES}%
|
||||||
|
\ru{ЯЗЫКИ}
|
||||||
|
}
|
||||||
|
\def\pskills{%
|
||||||
|
\en{SKILLS}%
|
||||||
|
\ru{НАВЫКИ}
|
||||||
|
}
|
||||||
|
\def\pinterests{%
|
||||||
|
\en{INTERESTS}%
|
||||||
|
\ru{ИНТЕРЕСЫ}
|
||||||
|
}
|
|
@ -1,14 +0,0 @@
|
||||||
\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
|
|
||||||
}{;}
|
|
|
@ -1,6 +0,0 @@
|
||||||
\Title{\PageExperience}\newline
|
|
||||||
\input{place/Foresight2}
|
|
||||||
\input{place/Foresight}
|
|
||||||
\input{place/Freelance}
|
|
||||||
\input{place/Intersvyaz}
|
|
||||||
\input{place/DaoEngineering}
|
|
|
@ -1,41 +0,0 @@
|
||||||
\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}
|
|
|
@ -1,20 +0,0 @@
|
||||||
\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}
|
|
|
@ -1,31 +0,0 @@
|
||||||
\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{Nixpkgs maintainer}\Ru{Nixpkgs мейнтейнер}.}
|
|
||||||
\end{minipage}
|
|
|
@ -1,35 +0,0 @@
|
||||||
\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 and birthday.
|
|
||||||
\Icon{IcLocation}
|
|
||||||
\Text{\Location}
|
|
||||||
\hspace{2mm}
|
|
||||||
\Icon{IcCake}
|
|
||||||
\Text{\Birthday}
|
|
||||||
\vspace{2mm}
|
|
||||||
\newline
|
|
||||||
% Email and links.
|
|
||||||
\Icon{IcEmail}
|
|
||||||
\Text{\href{mailto:\Email}{\ \Email}}
|
|
||||||
\hspace{2mm}
|
|
||||||
\Icon{IcCall}
|
|
||||||
\Text{\href{\Telegram}{Telegram}}
|
|
||||||
\hspace{2mm}
|
|
||||||
\Icon{IcGithub}
|
|
||||||
\Text{\href{\Github}{GitHub}}
|
|
||||||
\end{minipage}
|
|
||||||
|
|
||||||
% separator.
|
|
||||||
\hspace{-8mm}{%
|
|
||||||
\color{ColorLgray}{\rule{\linewidth}{1pt}}
|
|
||||||
}
|
|
16
tex/page/experience.tex
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
% args: company's name, period, position, url, tasks (separated by ;).
|
||||||
|
\newcommand{\place}[5]{%
|
||||||
|
\noindent
|
||||||
|
\sjplace{#1}{(#2)}\newline
|
||||||
|
\stext{#3}\newline
|
||||||
|
\setsepchar{;}%
|
||||||
|
\readlist\tasks{#5}%
|
||||||
|
\foreachitem\task\in\tasks{\stext{\slist{\sbullet}\ \task}\newline}
|
||||||
|
\def\plink{#4}\ifx\plink\empty{}\else{\sjlink{#4}\spar}\fi
|
||||||
|
}
|
||||||
|
\stitle{\pexperience}\newline
|
||||||
|
\input{place/foresight2}
|
||||||
|
\input{place/foresight}
|
||||||
|
\input{place/freelance}
|
||||||
|
\input{place/intersvyaz}
|
||||||
|
\input{place/daoengineering}
|
33
tex/page/title.tex
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
\hspace{-8mm}
|
||||||
|
\begin{minipage}{0.2\textwidth}
|
||||||
|
% photo.
|
||||||
|
\ifphoto
|
||||||
|
\includegraphics[width=3cm]{photo}
|
||||||
|
\fi
|
||||||
|
\end{minipage}
|
||||||
|
\begin{minipage}{0.8\textwidth}
|
||||||
|
% name with required fix for montserrat font.
|
||||||
|
% \hspace{-3mm}
|
||||||
|
\sname{\name}
|
||||||
|
\vspace{4mm}
|
||||||
|
\newline
|
||||||
|
% location.
|
||||||
|
\sicon{location}
|
||||||
|
\stext{\location}
|
||||||
|
\vspace{2mm}
|
||||||
|
\newline
|
||||||
|
% birthday, email & phone number.
|
||||||
|
\sicon{cake}
|
||||||
|
\stext{\birthday}
|
||||||
|
\hspace{2mm}
|
||||||
|
\sicon{email}
|
||||||
|
\stext{\href{mailto:\email}{\ \email}}
|
||||||
|
\hspace{2mm}
|
||||||
|
\sicon{call}
|
||||||
|
\stext{\href{tel:\phone}{\phone}}
|
||||||
|
\end{minipage}
|
||||||
|
|
||||||
|
% separator.
|
||||||
|
\hspace{-8mm}{%
|
||||||
|
\color{lgray}{\rule{\linewidth}{1pt}}
|
||||||
|
}
|
|
@ -1,16 +0,0 @@
|
||||||
\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.}
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
\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{Техническая презентация платформы.}
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
\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{Ведущий мастер-классов.}
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
\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 и мобильных приложений, чат-ботов для местного бизнеса.}
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
\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{Получил опыт сбора статистики воспроизведения видео и многопоточной обработки. Обработал, сохранил и отобразил большое количество данных.}
|
|
||||||
}
|
|
16
tex/place/daoengineering.tex
Normal file
|
@ -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 regnitions and image post-processing.}%
|
||||||
|
\ru{Реализовал распознавание лиц и пост-обработку изображений.};%
|
||||||
|
\en{Gathered experience of intense development with Android framework, including non-trivial custom View elements.}%
|
||||||
|
\ru{Получил опыт интенсивной разработки с фреймворком Android, включая нетривиальные кастомные View.}
|
||||||
|
}
|
17
tex/place/foresight.tex
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
\place{%
|
||||||
|
Foresight
|
||||||
|
}{%
|
||||||
|
\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{Техническая презентация платформы.}
|
||||||
|
}
|
25
tex/place/foresight2.tex
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
\place{%
|
||||||
|
Foresight
|
||||||
|
}{%
|
||||||
|
\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{Ведущий мастер-классов.}
|
||||||
|
}
|
13
tex/place/freelance.tex
Normal file
|
@ -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 и мобильных приложений, чат-ботов для местного бизнеса.}
|
||||||
|
}
|
19
tex/place/intersvyaz.tex
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
\place{%
|
||||||
|
Intersvyaz, federal ISP
|
||||||
|
}{%
|
||||||
|
\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{Получил опыт получения статистики воспроизведения видео, многопоточной работы. Обработал, сохранил и отобразил большое количество данных.}
|
||||||
|
}
|
5
tex/shell.tex
Normal file
|
@ -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}
|
64
tex/style.tex
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
% colors.
|
||||||
|
\definecolor{black}{RGB}{0,0,0}
|
||||||
|
\definecolor{white}{RGB}{255,255,255} % default white.
|
||||||
|
\definecolor{link} {RGB}{46,116,181} % web link.
|
||||||
|
\definecolor{main} {RGB}{244,67,54} % main.
|
||||||
|
\definecolor{gray} {RGB}{127,127,127} % gray.
|
||||||
|
\definecolor{lgray}{RGB}{229,229,229} % light gray.
|
||||||
|
\definecolor{ref} {RGB}{53,82,105} % reference color.
|
||||||
|
|
||||||
|
\definecolor{code_background}{RGB}{40,42,54} % code background.
|
||||||
|
\definecolor{code_text} {RGB}{248,248,242} % code default text.
|
||||||
|
\definecolor{code_string} {RGB}{80,250,123} % code string colors like "hello world".
|
||||||
|
\definecolor{code_literal} {RGB}{139,233,253} % code literal colors like "8L".
|
||||||
|
\definecolor{code_property} {RGB}{139,233,253} % code properties like variables and methods.
|
||||||
|
\definecolor{code_keyword} {RGB}{255,184,108} % code keywords like "val", "fun" etc.
|
||||||
|
\definecolor{code_comment} {RGB}{98,114,164} % code comment colors like // todo.
|
||||||
|
|
||||||
|
% code block.
|
||||||
|
\newtcolorbox{scodebox}[1][]{
|
||||||
|
colback = code_background,
|
||||||
|
colframe = code_background,
|
||||||
|
fontupper = \ttfamily,
|
||||||
|
nobeforeafter
|
||||||
|
}
|
||||||
|
\newenvironment{scode}{\begin{scodebox}\catcode33=12\obeylines}{\end{scodebox}}
|
||||||
|
|
||||||
|
% styles.
|
||||||
|
\newcommand{\sreset} [1]{\fontsize{12}{12}\selectfont\rm\color{black}#1} % reset font style.
|
||||||
|
\newcommand{\spar} [0]{\par} % default paragraph break.
|
||||||
|
\newcommand{\stext} [1]{\sreset{#1}} % default text.
|
||||||
|
\newcommand{\sitallic} [1]{\textit{#1}} % itallic text.
|
||||||
|
\newcommand{\sbold} [1]{\textbf{#1}} % bold text.
|
||||||
|
\newcommand{\ssemibold} [1]{\fontseries{sb}{\selectfont{#1}}} % semi-bold text.
|
||||||
|
\newcommand{\sunderline}[1]{\underline{#1}} % underline text.
|
||||||
|
\newcommand{\slink} [2]{\href{#1}{\textcolor{link}{\sunderline{#2}}}} % link webpage.
|
||||||
|
\newcommand{\sname} [1]{\fontsize{21}{21}{\selectfont{\ssemibold{#1}}}} % name style.
|
||||||
|
\newcommand{\scolor} [2]{\textcolor{#1}{#2}} % text color alias.
|
||||||
|
\newcommand{\sicon} [1]{\raisebox{-1mm}{\includegraphics[height=5mm]{#1}}} % icons.
|
||||||
|
\newcommand{\shref} [1]{\hyperlink{#1}{\textcolor{link}{\sunderline{#1}}}} % reference section.
|
||||||
|
\newcommand{\sref} [1]{\textcolor{ref}{#1}} % reference text.
|
||||||
|
\newcommand{\slist} [1]{\textcolor{lgray}{#1}} % list numbers.
|
||||||
|
\newcommand{\sbullet} [0]{\raisebox{0.5mm}{\bullet}\hspace{4mm}} % list bullet symbol.
|
||||||
|
\newcommand{\stitle} [1]{\hypertarget{#1}{}\fontsize{11}{11}%
|
||||||
|
{\selectfont{\textcolor{main}{\ssemibold{#1}}}}} % section title.
|
||||||
|
|
||||||
|
\newcommand{\sblcompact}[0]{\renewcommand{\baselinestretch}{1.0}\normalsize} % compact baseline size.
|
||||||
|
\newcommand{\sbldefault}[0]{\renewcommand{\baselinestretch}{1.5}\normalsize} % default baseline size.
|
||||||
|
|
||||||
|
\newcommand{\scstring} [1]{\textcolor{code_string}{#1}} % color code string.
|
||||||
|
\newcommand{\scliteral} [1]{\textcolor{code_literal}{#1}} % color code literal.
|
||||||
|
\newcommand{\scproperty}[1]{\textcolor{code_property}{#1}} % color code property.
|
||||||
|
\newcommand{\sckeyword} [1]{\textcolor{code_keyword}{#1}} % color code keyword.
|
||||||
|
\newcommand{\sccomment} [1]{\textcolor{code_comment}{#1}} % color code comment.
|
||||||
|
|
||||||
|
\newcommand{\sjposition}[1]{\stext{#1}} % job position.
|
||||||
|
\newcommand{\sjlink} [1]{\sicon{link}\ \href{https://#1}{\sitallic{#1}}} % job webpage.
|
||||||
|
\newcommand{\sjplace}[2]{\sreset{\ssemibold{#1}}\sreset\hfill\fontsize%
|
||||||
|
{10}{10}\selectfont\textcolor{gray}{#2}} % job place.
|
||||||
|
|
||||||
|
% settings.
|
||||||
|
\linespread{1.5} % height between non-breaking lines.
|
||||||
|
\sloppy % correct word placement on newline.
|
||||||
|
\pagestyle{empty} % suppress default styles, i.e. page numbers.
|
||||||
|
\sbldefault % default baseline size.
|
|
@ -1,11 +0,0 @@
|
||||||
% 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
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
\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
|
|
||||||
}
|
|