From d83826ca7a0d8ad22ced706e322fd713a99189d4 Mon Sep 17 00:00:00 2001 From: Dmitry Voronin Date: Mon, 31 Jul 2023 04:30:43 +0300 Subject: [PATCH] Squash history. --- .gitignore | 2 + Makefile | 47 ++++++++++++++++++++++ Readme.md | 42 ++++++++++++++++++++ flake.lock | 27 +++++++++++++ flake.nix | 55 ++++++++++++++++++++++++++ image/Photo.jpg | 0 image/icon/IcAlcohol.png | Bin 0 -> 311 bytes image/icon/IcCake.png | Bin 0 -> 5989 bytes image/icon/IcCall.png | Bin 0 -> 5376 bytes image/icon/IcEmail.png | Bin 0 -> 5029 bytes image/icon/IcLink.png | Bin 0 -> 5071 bytes image/icon/IcLocation.png | Bin 0 -> 5467 bytes image/icon/IcNoAlcohol.png | Bin 0 -> 338 bytes image/icon/IcNoSmoke.png | Bin 0 -> 418 bytes image/icon/IcRadioChecked.png | Bin 0 -> 5699 bytes image/icon/IcRadioUnchecked.png | Bin 0 -> 5458 bytes image/icon/IcSmoke.png | Bin 0 -> 353 bytes tex/Const.tex | 35 ++++++++++++++++ tex/Main.tex | 68 ++++++++++++++++++++++++++++++++ tex/Page.tex | 21 ++++++++++ tex/Shell.tex | 5 +++ tex/Style.tex | 67 +++++++++++++++++++++++++++++++ tex/i18n/Month.tex | 49 +++++++++++++++++++++++ tex/page/Education.tex | 14 +++++++ tex/page/Experience.tex | 6 +++ tex/page/Interest.tex | 41 +++++++++++++++++++ tex/page/Language.tex | 20 ++++++++++ tex/page/Skill.tex | 31 +++++++++++++++ tex/page/Title.tex | 32 +++++++++++++++ tex/place/DaoEngineering.tex | 16 ++++++++ tex/place/Foresight.tex | 18 +++++++++ tex/place/Foresight2.tex | 26 ++++++++++++ tex/place/Freelance.tex | 13 ++++++ tex/place/Intersvyaz.tex | 20 ++++++++++ tex/view/Place.tex | 11 ++++++ tex/view/Radio.tex | 7 ++++ 36 files changed, 673 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 Readme.md create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 image/Photo.jpg create mode 100644 image/icon/IcAlcohol.png create mode 100644 image/icon/IcCake.png create mode 100644 image/icon/IcCall.png create mode 100644 image/icon/IcEmail.png create mode 100644 image/icon/IcLink.png create mode 100644 image/icon/IcLocation.png create mode 100644 image/icon/IcNoAlcohol.png create mode 100644 image/icon/IcNoSmoke.png create mode 100644 image/icon/IcRadioChecked.png create mode 100644 image/icon/IcRadioUnchecked.png create mode 100644 image/icon/IcSmoke.png create mode 100644 tex/Const.tex create mode 100644 tex/Main.tex create mode 100644 tex/Page.tex create mode 100644 tex/Shell.tex create mode 100644 tex/Style.tex create mode 100644 tex/i18n/Month.tex create mode 100644 tex/page/Education.tex create mode 100644 tex/page/Experience.tex create mode 100644 tex/page/Interest.tex create mode 100644 tex/page/Language.tex create mode 100644 tex/page/Skill.tex create mode 100644 tex/page/Title.tex create mode 100644 tex/place/DaoEngineering.tex create mode 100644 tex/place/Foresight.tex create mode 100644 tex/place/Foresight2.tex create mode 100644 tex/place/Freelance.tex create mode 100644 tex/place/Intersvyaz.tex create mode 100644 tex/view/Place.tex create mode 100644 tex/view/Radio.tex 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 0000000000000000000000000000000000000000..d1f086c1a4f4c94261ae0f1737652028381ed125 GIT binary patch literal 311 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 literal 0 HcmV?d00001 diff --git a/image/icon/IcCall.png b/image/icon/IcCall.png new file mode 100644 index 0000000000000000000000000000000000000000..73c311737b220f1d6cf1ebbe39ab03d2395a11ed GIT binary patch literal 5376 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 literal 0 HcmV?d00001 diff --git a/image/icon/IcEmail.png b/image/icon/IcEmail.png new file mode 100644 index 0000000000000000000000000000000000000000..7466bfc1ed907de4f381d2b6868662ab0bf19a89 GIT binary patch literal 5029 zcmeHKX;c&E8lJEyBJ{9WwF1{Mh=4lDWFcFLf&?K|ghD`|C`@K1FeRJGgap)capAfv zqD3zvi(>1su3UEos(^cIuRB)3i+U^`X{}mCp?bdwi*RnwxyO61|4cHO%=3GZv8%+icr6plH*GR&o zjnY7n?WQg+{G)oc1EuG2n(3C z{C(D^I(8BsBufM)bEuHq*=N|{qjvrsTZJhb^%Og%rf|bAPRjcN8 z4p~0BvM&1g4fgh_9>geL)~?2&tLH3>EwR=cp;v~GMERJyn&Bz*?dN&W zD^_JLwy1G3LF};vEyq>qXX@mB72JnqDdRk!$HzhtYcUlO5vPoZ=q(2nQ96IEJi0#2 zw=q3oTV$%=Be=D&(ozkNZ{404G^HSJ!v2RDrnV76DmpdI*ZKOwMWa_F4jz#?%P-A2 z{IO%h)kft%BR}g(kI(YFdt%Py=G${`)i^HJ6i`VQB^7NUg3Z&HHr?7W(iZ9AaB^v7 zx~7;Hs0_BP-ZQtOBX7iml;#JoeX$S&@4G;+i~RbXo(7Lt!!@@bIvYHbiV|DRt-N)d z=&m!C#{1$QB9}OqeZmv8<+i%)OMax@wj$;1m8IV--MZuJgxW$&%KhVwDc@d6=`8Ci zs61XQ+_a7(uKUF_ zIdZJ|m4Oi=GV00YVXn@1{#aQXJlL(-VScvW&_2I(67%5HBk&yrg-*5^F+7{3VKtda z>E-NSkJYhZijcEshQy#T#t1Ttiq12U33)SAcwROxCD@ZExrW+gfIvsm7;MvN^=6q( z&bIT)z;7nZWy5v|oh@f4$Hc)A1``PjIYJJKMB1nvK6{cY9BLvovUtVR9tvBHJ|6)H#GI?AF&m;c`!f{X917BmnoiQe+k6v%?Q32?|wP8jskAre`I&S|v%yeW9An8fyPwz0Rz$)d&lV*d( zgp-juq@MQgPZ6bziR)uvO3I{kMte~}yaAIDcpuJaF=_1>0_T!iQU^%QAV1y!JWXld ziZviNX2f1j|3tuaef$H^y|vrH02LD>Qy6dyGpSM`XEXWA2m?+LGW$;{K?ryxUyP7y zOo9kCs02}y8Xkgc2trI?JRyeT{iu|BGmYtSlA!|R918GYQXYV6NCd^f-9izcL?k>E zLqhmCMhZk?LMz6i_&ocI=$ zM4HUNa1198($Cc$hdUm!yzGL*04iDW{FOc*i&1(AMu13_tW{~MZF zJaA}t%cChXm_OGZ>RwR^K0;}aVBGg#q8cTo0#YMI@DL4fyAT&3 zQXIn(zDC3s5CQ>8lInp;|L-MAkhh)?4JOn#!CfEZdM5?m3H-rb|2Mf@-##&t zdhkcj3Z4h=I{lG2eNIG9$(L=Jx7 z;^2;QlB#ypL6C!1sR&ouZnl@oXZZ6*{w@9WXFGOPZdp*g(0ebEh6UXG_(j;lrR6@x ze0o^vg5sfL@8^U+;!KVYdK~>Ze752Fjq=R0s8PXQ@m_ToZy5OA6Io!I-q$>G=A|Q5 zQA&U1-PNQ0H#8Ph)r?z|zTwKcXH$O`tg$L*7Kut+-mK2g9{plpK&j`$OQ*@5kF8^C zytZFA?ceL2l)P1O4Iakm;^wZEV=^}R)-6R$^!Q!AJbYGpnffO}~ja zclJCOs#QKb1b5Z?oS%5Xb-ScU7=(5#nEUGrlv}aCsEpH;xM^Zz<=?^R-Htn!QFV^lk#mZF0>2M*X+=Zp6r=yc!Z z5qGExX`Yk)Renlx~<~RtA9!m z=bSuOts^(Lq`qGJEaDO?@LBw==%cHCCw%m>IhxFyM-LYn8%^sopZ?M| g|I%v(a6Wg>aZ>%MwlZbg6eg;SoT1n~C1c^g0W1wLcmMzZ literal 0 HcmV?d00001 diff --git a/image/icon/IcLink.png b/image/icon/IcLink.png new file mode 100644 index 0000000000000000000000000000000000000000..1f5a38d645fb70163e6784029d537a81582333f3 GIT binary patch literal 5071 zcmeHKc~leU77v>!n<6TpAZfH!#7Sl*3rQp@kO)x%JU||}GMUW8kt7q7fdpIt!KM11 zSg9Ki6^|mV?Q7kaqJR|?m*-M31hQJ!vt-B>J^r!rce0M2Q)qjxXx-?+{q2B+_{lTw%j%)&OBXp+(qY$nS{ zun8+gvRKyZ`uK3Kqim0g)@8E1n&5(_b9;-P=gV^PwoV@Nul~nA{VZ?mZ>nudTd?F{#6kw0qoQu^bAh$jEqQWaOJ_Kn*4HKa)it z9Uo9TGqFrDCGZiuapmTWUF=bfUrZhuu_!)d&%-p+1786ZJ!M*e%aw)sLCYt*`f8^K zPIC!wajLmgt30om_-batEbrS#=8U^pKljFArvh>jm3&rQ`asCv5VQ2!jqQF`ML);y zmu{X(u0cj9gRLvRo!i!y?c0=kv+4H$Oh_ZuBl@33kACe<_lu)1dz@*n@lIYfxzXH+ z6mg?p)n(M)4Lze+;WPa>%a?B1zAdqGWk%}VL$#@2T}*A? z_-fJSLzTNuXA}>MR(nrc$&LsQB$DDIOOiJXaHp=vS=*KbR>`@GrV+4dbg7%?uG_A! z^KaEpS#+XLXz=H(?3uduVZEF)^OBG5t18r2WH`2M$_qJs`&&`o`nVs41VY))9y%xA zD}kzOPFzdw<`I!1BI=h51KeC1e*0Txu&c*S$NA|7x_N%dSeF08Q5jAF0ghV~Cuh8{ zT6R?I&pErNz1?9{scG5W<{1QwPk_?NO4-v#Wb{<;9B)YAUhT-Y@F4I;pqg! zRufvvAmco)sN%3Gjg0eGp$b+RBZ*m5bhe2|%#KaMv(s^jhBI!gTbNY}0Q3Zdv8{TY z!7R1PICfkqxVD*j9JbwsNtba_RPpRc+C;DgTmct`6jmw|<&1S>hnX~_G(kS069U}H zII|eWDCO}i77N$H=h7xE50OYDJQ(GnC4YPBrT;k+KU3@^$4cHyZnq9CY{|!gYyU-p$DL5kRQ^+ zpP|UNWcA3+HexTQdm&j?0pU=3OiS>L2CaR-))px!1`vzcbPAB| zc2J8n(nMekZAzkPos474m2HFU8dibnq`??Wjxhv?2BUl_ESAD(5+afc#8SQ>1O}FF z{! z3uYq1wSY&!6_BT$EA~ix2ZMWhTV@fq_5i{lSPa2P5)vxq1FHC)gz?^gi3BP{LUAz+ zk)fy>5~xWaQ8g}t5HZ0gNK7OV5FHZjBJh7Iu}c%eo+XCyY|G-CriStUqwO6I-PTb+ zO@|Gv&tSRdb*=ZEoPm7b=ciL{?=u9O{UOLZ@%w?U4|Kf~1MlSgL0uo{dM5_n$@zo2 z{%>@-z1=Yq2JoV10sFx%3tstyy<{)-q$oM-we4GaxV#8h`WT~A%`BF?kL_?^6_@w{ zqbs9SDO{U+J9@&yMh?8}$YMFJRm#JYtk;`=95*Q-+%NaZ@w6>!JVEXe&34|o#@c*I zl)N)`{k#I>-Um*_=&!vaekkvonY=hR+$Zi_tbBQO*?K2LWBEDrdEx%EeHVu;{;~eW zd@W6Dwc)FVE4%-S)Z1&CD_P%F4{iytI*(2^p3Zk}zwhK*ZAlAibDKA5Pjdp~@Hn@~ zxPt&M^zjqM^w|jsktgoeUdBYV<3n!sj{1TW-{MuT*8aoSo_`_o>MlA2=6?ln(WWQ}Rm zmPgKII15(nOKg7RU@Y0adxrZ6bS~IbdmRkX$+S^bc?Sm#O5@gST>Xz{>&|Z|A2Mf7 z52OlMyWE^Utz>R{j4>-)b?O4$>hkwqEd$FIw|smU*|zXhL;CjaN&(li aH&nHZAA(-WJRkw8WhoW0@^2#27XAUm)=@hE literal 0 HcmV?d00001 diff --git a/image/icon/IcLocation.png b/image/icon/IcLocation.png new file mode 100644 index 0000000000000000000000000000000000000000..ae14e2e5c1ccbd129a62baa818e126505155d39e GIT binary patch literal 5467 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 literal 0 HcmV?d00001 diff --git a/image/icon/IcNoSmoke.png b/image/icon/IcNoSmoke.png new file mode 100644 index 0000000000000000000000000000000000000000..47fb732e9f81bb8da1c4c510f4c7992de9c432c7 GIT binary patch literal 418 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 U^SNp}FgT!4{`{bC0#fq-1x-)~ssI20 literal 0 HcmV?d00001 diff --git a/image/icon/IcSmoke.png b/image/icon/IcSmoke.png new file mode 100644 index 0000000000000000000000000000000000000000..7c914cd7c005fae9e2e6b52337eb9716cda4cff3 GIT binary patch literal 353 zcmV-n0iOPeP)}Hpad%5eI_w+<7bk%F?Qz7<&w#JyKgs1 zF5^ft=Fi0n)Rf>>*a-t+lTJ8RpdiA&&=IOaD=iW$U=v1&Dga{l2oY%N_C&y*x*>(o z+QWIU0GHRoURVlK;bg?vUkSY!0Z7RlKwK6U<{#dQaEuX1+kp3TBT&+p9&}w1-yT5L z7MK>u+@QIfAIv!wdcOlQ#)7+!|JqWGfEOPw*eGfwId3*1h@8GG>{|j6JTCO%3B$9o^00000NkvXXu0mjfu(pys literal 0 HcmV?d00001 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 +}