├── resume.pdf ├── resume.png ├── fonts ├── FontAwesome.ttf ├── Roboto-Bold.ttf ├── Roboto-Light.ttf ├── Roboto-Thin.ttf ├── Roboto-Italic.ttf ├── Roboto-Medium.ttf ├── Roboto-Regular.ttf ├── Roboto-BoldItalic.ttf ├── Roboto-ThinItalic.ttf ├── Roboto-LightItalic.ttf └── Roboto-MediumItalic.ttf ├── resume ├── skills.tex ├── summary.tex ├── education.tex ├── projects.tex └── experience.tex ├── .gitignore ├── README.md ├── resume.tex └── awesome-cv.cls /resume.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/junhaodong/resume/HEAD/resume.pdf -------------------------------------------------------------------------------- /resume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/junhaodong/resume/HEAD/resume.png -------------------------------------------------------------------------------- /fonts/FontAwesome.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/junhaodong/resume/HEAD/fonts/FontAwesome.ttf -------------------------------------------------------------------------------- /fonts/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/junhaodong/resume/HEAD/fonts/Roboto-Bold.ttf -------------------------------------------------------------------------------- /fonts/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/junhaodong/resume/HEAD/fonts/Roboto-Light.ttf -------------------------------------------------------------------------------- /fonts/Roboto-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/junhaodong/resume/HEAD/fonts/Roboto-Thin.ttf -------------------------------------------------------------------------------- /fonts/Roboto-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/junhaodong/resume/HEAD/fonts/Roboto-Italic.ttf -------------------------------------------------------------------------------- /fonts/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/junhaodong/resume/HEAD/fonts/Roboto-Medium.ttf -------------------------------------------------------------------------------- /fonts/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/junhaodong/resume/HEAD/fonts/Roboto-Regular.ttf -------------------------------------------------------------------------------- /fonts/Roboto-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/junhaodong/resume/HEAD/fonts/Roboto-BoldItalic.ttf -------------------------------------------------------------------------------- /fonts/Roboto-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/junhaodong/resume/HEAD/fonts/Roboto-ThinItalic.ttf -------------------------------------------------------------------------------- /fonts/Roboto-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/junhaodong/resume/HEAD/fonts/Roboto-LightItalic.ttf -------------------------------------------------------------------------------- /fonts/Roboto-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/junhaodong/resume/HEAD/fonts/Roboto-MediumItalic.ttf -------------------------------------------------------------------------------- /resume/skills.tex: -------------------------------------------------------------------------------- 1 | \cvsection{Skills} 2 | 3 | \begin{cvskills} 4 | \cvskill 5 | {Languages} % Type 6 | {Erlang, Python, Java, C++, Ruby} % Skillset 7 | 8 | \cvskill 9 | {Technologies} % Type 10 | {Django, Amazon Web Services, Docker, React, Redux} % Skillset 11 | \end{cvskills} 12 | -------------------------------------------------------------------------------- /resume/summary.tex: -------------------------------------------------------------------------------- 1 | \cvsection{Summary} 2 | 3 | \begin{cvparagraph} 4 | Software engineer with 4+ years of experience working on complex distributed systems in various infrastructure roles. Passionate about designing robust, reliable systems at scale with other talented engineers and learning new technologies and tools when needed. 5 | \end{cvparagraph} 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### TeX ### 2 | ## Core latex/pdflatex auxiliary files: 3 | *.aux 4 | *.lof 5 | *.log 6 | *.lot 7 | *.fls 8 | *.out 9 | *.toc 10 | 11 | ## Intermediate documents: 12 | *.dvi 13 | *-converted-to.* 14 | <<<<<<< HEAD 15 | 16 | ### Editor ### 17 | ## Vim & Emacs temp files: 18 | .*sw[op] 19 | *~ 20 | 21 | ### Mac OS X ### 22 | ## Mac OS X metadata files: 23 | *.DS_Store 24 | 25 | -------------------------------------------------------------------------------- /resume/education.tex: -------------------------------------------------------------------------------- 1 | \cvsection{Education} 2 | 3 | \begin{cventries} 4 | \cventry 5 | {Bachelor of Science in Computer Science} % Degree 6 | {Northeastern University} % Institution 7 | {Boston, MA} % Location 8 | {Sep 2015 - May 2019} % Date(s) 9 | { 10 | % \begin{cvitems} % Description(s) bullet points 11 | % \item{} 12 | % \end{cvitems} 13 | } 14 | \end{cventries} 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # resume 2 | My resume, largely sourced and inspired from [Awesome CV](https://github.com/posquit0/Awesome-CV). 3 | 4 | View the [PDF](https://docs.google.com/viewer?url=https://raw.githubusercontent.com/junhaodong/resume/master/resume.pdf). 5 | 6 |
7 | Résumé 8 |
9 | 10 | ## Quick Start 11 | Feel free to modify my `.tex` file to create your own resume! Please don't use my resume for anything else without permission though. 12 | 13 | * [**Edit Résumé on OverLeaf.com**](https://www.overleaf.com/latex/templates/resume-template/ysrmnrwyrhpp) 14 | -------------------------------------------------------------------------------- /resume/projects.tex: -------------------------------------------------------------------------------- 1 | \cvsection{Projects} 2 | 3 | \begin{cventries} 4 | \cventry 5 | {} % Empty position 6 | {Shellfish} % Project 7 | {} % Empty location 8 | {} % Empty date 9 | { 10 | \begin{cvitems} % Description(s) bullet points 11 | \item {A command line interface based on the Unix Bash shell, written in C.} 12 | \item {Supports EOF (Ctrl-D) and SIGINT (Ctrl-C), multiple commands per line, and chained redirection and piping.} 13 | \end{cvitems} 14 | } 15 | 16 | \cventry 17 | {} % Empty position 18 | {Zero Robotics} % Project 19 | {} % Empty location 20 | {} % Empty date 21 | { 22 | \begin{cvitems} % Description(s) bullet points 23 | \item {Semifinalist out of 200 teams in MIT's international high school programming competition in C.} 24 | \item {Implemented 3D vector physics and game strategy for an autonomous satellite simulation using the ZR API.} 25 | \end{cvitems} 26 | } 27 | \end{cventries} 28 | -------------------------------------------------------------------------------- /resume.tex: -------------------------------------------------------------------------------- 1 | %!TEX TS-program = xelatex 2 | %!TEX encoding = UTF-8 Unicode 3 | % Awesome CV LaTeX Template for CV/Resume 4 | % 5 | % This template has been downloaded from: 6 | % https://github.com/posquit0/Awesome-CV 7 | % 8 | % Original author: 9 | % Claud D. Park 10 | % http://www.posquit0.com 11 | % 12 | % Modifications by: 13 | % Junhao Dong 14 | % 15 | % Template license: 16 | % CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0/) 17 | % 18 | 19 | 20 | %------------------------------------------------------------------------------- 21 | % CONFIGURATIONS 22 | %------------------------------------------------------------------------------- 23 | % A4 paper size by default, use 'letterpaper' for US letter 24 | \documentclass[11pt, a4paper]{awesome-cv} 25 | 26 | % Configure page margins with geometry 27 | \geometry{left=1.4cm, top=.8cm, right=1.4cm, bottom=1.8cm, footskip=.5cm} 28 | 29 | % Specify the location of the included fonts 30 | \fontdir[fonts/] 31 | 32 | % Color for highlights 33 | % Awesome Colors: awesome-emerald, awesome-skyblue, awesome-red, awesome-pink, awesome-orange 34 | % awesome-nephritis, awesome-concrete, awesome-darknight 35 | \colorlet{awesome}{awesome-skyblue} 36 | % Uncomment if you would like to specify your own color 37 | % \definecolor{awesome}{HTML}{CA63A8} 38 | 39 | % Colors for text 40 | % Uncomment if you would like to specify your own color 41 | % \definecolor{darktext}{HTML}{414141} 42 | % \definecolor{text}{HTML}{333333} 43 | % \definecolor{graytext}{HTML}{5D5D5D} 44 | % \definecolor{lighttext}{HTML}{999999} 45 | 46 | % Set false if you don't want to highlight section with awesome color 47 | \setbool{acvSectionColorHighlight}{true} 48 | 49 | % If you would like to change the social information separator from a pipe (|) to something else 50 | \renewcommand{\acvHeaderSocialSep}{\quad\textbar\quad} 51 | 52 | \makeatletter 53 | \patchcmd{\@sectioncolor}{\color}{\mdseries\color}{}{} 54 | \makeatother 55 | 56 | %------------------------------------------------------------------------------- 57 | % PERSONAL INFORMATION 58 | % Comment any of the lines below if they are not required 59 | %------------------------------------------------------------------------------- 60 | % Available options: circle|rectangle,edge/noedge,left/right 61 | % \photo[rectangle,edge,right]{profile} 62 | \name{Junhao}{Dong} 63 | \position{Software Engineer} 64 | % \address{address} 65 | 66 | \mobile{+1 (650) 709-5749} 67 | \email{junhao.dong96@gmail.com} 68 | % \homepage{homepage} 69 | \github{junhaodong} 70 | \linkedin{junhaodong} 71 | % \gitlab{gitlab-id} 72 | % \stackoverflow{SO-id}{SO-name} 73 | % \twitter{@twit} 74 | % \skype{skype-id} 75 | % \reddit{reddit-id} 76 | % \extrainfo{extra informations} 77 | 78 | %------------------------------------------------------------------------------- 79 | \begin{document} 80 | 81 | % Print the header with above personal informations 82 | % Give optional argument to change alignment(C: center, L: left, R: right) 83 | \makecvheader[C] 84 | 85 | % Print the footer with 3 arguments(,
, ) 86 | % Leave any of these blank if they are not needed 87 | \makecvfooter 88 | {} % \today 89 | {Junhao Dong~~~·~~~Résumé} 90 | {\thepage} 91 | 92 | %------------------------------------------------------------------------------- 93 | % CV/RESUME CONTENT 94 | % Each section is imported separately, open each file in turn to modify content 95 | %------------------------------------------------------------------------------- 96 | \input{resume/summary.tex} 97 | \input{resume/experience.tex} 98 | \input{resume/skills.tex} 99 | \input{resume/education.tex} 100 | 101 | %------------------------------------------------------------------------------- 102 | \end{document} 103 | -------------------------------------------------------------------------------- /resume/experience.tex: -------------------------------------------------------------------------------- 1 | \cvsection{Experience} 2 | 3 | \begin{cventries} 4 | \cventry 5 | {Software Engineer} % Job title 6 | {Meta - WhatsApp} % Organization 7 | {Menlo Park, CA} % Location 8 | {Jul 2019 - Present} % Date(s) 9 | { 10 | \begin{cvitems} % Description(s) of tasks/responsibilities 11 | \item{Led development of new privacy settings by working with multiple cross-functional teams to give users more granular privacy controls. A/B tests saw increased privacy setting adoption (5\% on Android, 11\% on iOS) and increased usage of related features.} 12 | \item{Identified and implemented reliability improvements for a core service by working with client teams to reduce congestion and prioritize critical requests during system failure and recovery. Dampened spikes of 500k+ (50\%+) QPS, with better availability for revenue generating use cases.} 13 | \item{Prioritized and drove early adoption of multiple org-wide initiatives for a team of 5, including adding type specs to enable static analysis, and migrating to a new test framework which reduced test runtimes by over 90\% (e.g. 60+ min to 5 min).} 14 | \item{Designed and implemented support for non-WhatsApp users to be in WhatsApp groups, unblocking a cross-org project to allow migrating Messenger and Instagram groups to WhatsApp infrastructure.} 15 | \end{cvitems} 16 | } 17 | 18 | \cventry 19 | {Software Engineer Intern (Part Time)} % Job title 20 | {Toast} % Organization 21 | {Boston, MA} % Location 22 | {Feb 2019 - Apr 2019} % Date(s) 23 | { 24 | \begin{cvitems} % Description(s) of tasks/responsibilities 25 | \item {Created and integrated with an automation pipeline for Android Espresso tests, enabling developers to move away from a significantly slower Appium-based framework.} 26 | \end{cvitems} 27 | } 28 | 29 | \cventry 30 | {Software Engineer Intern} % Job title 31 | {Drizly} % Organization 32 | {Boston, MA} % Location 33 | {May 2018 - Aug 2018} % Date(s) 34 | { 35 | \begin{cvitems} % Description(s) of tasks/responsibilities 36 | \item {Implemented a re-designed onboarding flow with automated Salesforce integration, improving the experience for new retail customers and account managers using Ruby on Rails.} 37 | \end{cvitems} 38 | } 39 | 40 | \cventry 41 | {Software Engineer Intern} % Job title 42 | {Meta - Instagram} % Organization 43 | {Menlo Park, CA} % Location 44 | {Jan 2018 - Apr 2018} % Date(s) 45 | { 46 | \begin{cvitems} % Description(s) of tasks/responsibilities 47 | \item {Built a traffic replay system to predict the performance and correctness of concurrent I/O processing during the migration to Python's asyncio library. Preemptively detected and fixed multiple regressions related to caching and global state contamination.} 48 | \item {Migrated various APIs to enable concurrent I/O within a single thread with Python asyncio, improving API latency by up to 30\%.} 49 | \end{cvitems} 50 | } 51 | 52 | \cventry 53 | {Software Engineer Intern} % Job title 54 | {Toast} % Organization 55 | {Boston, MA} % Location 56 | {Jan 2017 - Aug 2017} % Date(s) 57 | { 58 | \begin{cvitems} % Description(s) of tasks/responsibilities 59 | \item {Built a Java microservice, database schema, and related web pages to manage customer accounts --- 50,000+ created in the first two months.} 60 | \item {Designed and implemented a second microservice to support upcoming payment features during online ordering.} 61 | \item {Enhanced internal tooling to query real-time data from client devices to help customer support resolve configuration issues.} 62 | \end{cvitems} 63 | } 64 | 65 | \cventry 66 | {Programming Mentor, TA} % Job title 67 | {CSTUY Hacking Sessions} % Organization 68 | {New York, NY} % Location 69 | {Sept. 2014 - Mar. 2015} % Date(s) 70 | { 71 | \begin{cvitems} % Description(s) of tasks/responsibilities 72 | \item {Taught programming concepts to high school students using Java and Processing while providing input for lesson plans and project ideas.} 73 | \end{cvitems} 74 | } 75 | \end{cventries} 76 | -------------------------------------------------------------------------------- /awesome-cv.cls: -------------------------------------------------------------------------------- 1 | %% Start of file `awesome-cv.cls'. 2 | % Awesome CV Class File 3 | % 4 | % This class has been downloaded from: 5 | % https://github.com/posquit0/Awesome-CV 6 | % 7 | % Author: 8 | % Claud D. Park 9 | % http://www.posquit0.com 10 | % 11 | % Notes: 12 | % 1) This class file defines the structure and layout of the template file (cv.tex, resume.tex). 13 | % 2) It has been written in such a way that under most circumstances you 14 | % should not need to edit it. 15 | % 16 | % Class license: 17 | % LPPL v1.3c (http://www.latex-project.org/lppl) 18 | % 19 | 20 | 21 | %------------------------------------------------------------------------------- 22 | % Identification 23 | %------------------------------------------------------------------------------- 24 | \ProvidesClass{awesome-cv}[2017/02/05 v1.6.1 Awesome Curriculum Vitae Class] 25 | \NeedsTeXFormat{LaTeX2e} 26 | 27 | 28 | %------------------------------------------------------------------------------- 29 | % Class options 30 | % 31 | % (need to be done before the external package loading, for example because 32 | % we need \paperwidth, \paperheight and \@ptsize to be defined before loading 33 | % geometry and fancyhdr) 34 | %------------------------------------------------------------------------------- 35 | % Options for draft or final 36 | \DeclareOption{draft}{\setlength\overfullrule{5pt}} 37 | \DeclareOption{final}{\setlength\overfullrule{0pt}} 38 | % Inherit options of article 39 | \DeclareOption*{% 40 | \PassOptionsToClass{\CurrentOption}{article} 41 | } 42 | \ProcessOptions\relax 43 | \LoadClass{article} 44 | 45 | 46 | %------------------------------------------------------------------------------- 47 | % 3rd party packages 48 | %------------------------------------------------------------------------------- 49 | % Needed to make fixed length table 50 | \RequirePackage{array} 51 | % Needed to handle list environment 52 | \RequirePackage{enumitem} 53 | % Needed to handle text alignment 54 | \RequirePackage{ragged2e} 55 | % Needed to configure page layout 56 | \RequirePackage{geometry} 57 | % Needed to make header & footer effeciently 58 | \RequirePackage{fancyhdr} 59 | % Needed to manage colors 60 | \RequirePackage{xcolor} 61 | % Needed to use \ifxetex-\else-\fi statement 62 | \RequirePackage{ifxetex} 63 | % Needed to use \if-\then-\else statement 64 | \RequirePackage{xifthen} 65 | % Needed to use a toolbox of programming tools 66 | \RequirePackage{etoolbox} 67 | % Needed to change line spacing in specific environment 68 | \RequirePackage{setspace} 69 | % Needed to manage fonts 70 | \RequirePackage[quiet]{fontspec} 71 | % To support LaTeX quoting style 72 | \defaultfontfeatures{Ligatures=TeX} 73 | % Needed to manage math fonts 74 | \RequirePackage{unicode-math} 75 | % Needed to use icons from font-awesome 76 | % (https://github.com/posquit0/latex-fontawesome) 77 | \RequirePackage{fontawesome} 78 | \RequirePackage[default,opentype]{sourcesanspro} 79 | % Needed for the photo ID 80 | \RequirePackage[skins]{tcolorbox} 81 | % Needed to deal a paragraphs 82 | \RequirePackage{parskip} 83 | % Needed to deal hyperlink 84 | \RequirePackage[hidelinks,unicode]{hyperref} 85 | \hypersetup{% 86 | pdftitle={}, 87 | pdfauthor={}, 88 | pdfsubject={}, 89 | pdfkeywords={} 90 | } 91 | 92 | 93 | %------------------------------------------------------------------------------- 94 | % Configuration for directory locations 95 | %------------------------------------------------------------------------------- 96 | % Configure a directory location for fonts(default: 'fonts/') 97 | \newcommand*{\fontdir}[1][fonts/]{\def\@fontdir{#1}} 98 | \fontdir 99 | 100 | 101 | %------------------------------------------------------------------------------- 102 | % Configuration for layout 103 | %------------------------------------------------------------------------------- 104 | %% Page Layout 105 | % Configure page margins with geometry 106 | \geometry{left=2.0cm, top=1.5cm, right=2.0cm, bottom=2.0cm, footskip=.5cm, includehead} 107 | 108 | %% Header & Footer 109 | % Set offset to each header and footer 110 | \fancyhfoffset{0em} 111 | % Remove head rule 112 | \renewcommand{\headrulewidth}{0pt} 113 | % Clear all header & footer fields 114 | \fancyhf{} 115 | % Enable if you want to make header or footer using fancyhdr 116 | \pagestyle{fancy} 117 | 118 | 119 | %------------------------------------------------------------------------------- 120 | % Configuration for colors 121 | %------------------------------------------------------------------------------- 122 | % Gray-scale colors 123 | \definecolor{white}{HTML}{FFFFFF} 124 | \definecolor{black}{HTML}{000000} 125 | \definecolor{darkgray}{HTML}{333333} 126 | \definecolor{gray}{HTML}{5D5D5D} 127 | \definecolor{lightgray}{HTML}{999999} 128 | % Basic colors 129 | \definecolor{green}{HTML}{C2E15F} 130 | \definecolor{orange}{HTML}{FDA333} 131 | \definecolor{purple}{HTML}{D3A4F9} 132 | \definecolor{red}{HTML}{FB4485} 133 | \definecolor{blue}{HTML}{6CE0F1} 134 | % Text colors 135 | \definecolor{darktext}{HTML}{414141} 136 | \colorlet{text}{darkgray} 137 | \colorlet{graytext}{gray} 138 | \colorlet{lighttext}{lightgray} 139 | % Awesome colors 140 | \definecolor{awesome-emerald}{HTML}{00A388} 141 | \definecolor{awesome-skyblue}{HTML}{0395DE} 142 | \definecolor{awesome-red}{HTML}{DC3522} 143 | \definecolor{awesome-pink}{HTML}{EF4089} 144 | \definecolor{awesome-orange}{HTML}{FF6138} 145 | \definecolor{awesome-nephritis}{HTML}{27AE60} 146 | \definecolor{awesome-concrete}{HTML}{95A5A6} 147 | \definecolor{awesome-darknight}{HTML}{131A28} 148 | \colorlet{awesome}{awesome-red} 149 | 150 | % Boolean value to switch section color highlighting 151 | \newbool{acvSectionColorHighlight} 152 | \setbool{acvSectionColorHighlight}{true} 153 | 154 | % Awesome section color 155 | \newcommand*{\sectioncolor}[1]{% 156 | \ifbool{acvSectionColorHighlight}{{\color{awesome}#1}}{#1} 157 | } 158 | 159 | %------------------------------------------------------------------------------- 160 | % Configuration for fonts 161 | %------------------------------------------------------------------------------- 162 | % Set the FontAwesome font to be up-to-date. 163 | \newfontfamily\FA[Path=\@fontdir]{FontAwesome} 164 | % Set font for header (default is Roboto) 165 | \newfontfamily\headerfont[ 166 | Path=\@fontdir, 167 | UprightFont=*-Regular, 168 | ItalicFont=*-Italic, 169 | BoldFont=*-Bold, 170 | BoldItalicFont=*-BoldItalic, 171 | ]{Roboto} 172 | 173 | \newfontfamily\headerfontlight[ 174 | Path=\@fontdir, 175 | UprightFont=*-Thin, 176 | ItalicFont=*-ThinItalic, 177 | BoldFont=*-Medium, 178 | BoldItalicFont=*-MediumItalic, 179 | ]{Roboto} 180 | 181 | \newcommand*{\footerfont}{\sourcesanspro} 182 | \newcommand*{\bodyfont}{\sourcesanspro} 183 | \newcommand*{\bodyfontlight}{\sourcesansprolight} 184 | 185 | %------------------------------------------------------------------------------- 186 | % Configuration for styles 187 | %------------------------------------------------------------------------------- 188 | % Configure styles for each CV elements 189 | % For fundamental structures 190 | \newcommand*{\headerfirstnamestyle}[1]{{\fontsize{32pt}{1em}\headerfont\bfseries\color{text} #1}} 191 | \newcommand*{\headerlastnamestyle}[1]{{\fontsize{32pt}{1em}\headerfont\bfseries\color{text} #1}} 192 | \newcommand*{\headerpositionstyle}[1]{{\fontsize{7.6pt}{1em}\bodyfont\scshape\color{awesome} #1}} 193 | \newcommand*{\headeraddressstyle}[1]{{\fontsize{8pt}{1em}\headerfont\itshape\color{lighttext} #1}} 194 | \newcommand*{\headersocialstyle}[1]{{\fontsize{6.8pt}{1em}\headerfont\color{text} #1}} 195 | \newcommand*{\headerquotestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\itshape\color{darktext} #1}} 196 | \newcommand*{\footerstyle}[1]{{\fontsize{8pt}{1em}\footerfont\scshape\color{lighttext} #1}} 197 | \newcommand*{\sectionstyle}[1]{{\fontsize{16pt}{1em}\bodyfont\bfseries\color{text}\sectioncolor{#1}}} 198 | \newcommand*{\subsectionstyle}[1]{{\fontsize{12pt}{1em}\bodyfont\scshape\textcolor{text}{#1}}} 199 | \newcommand*{\paragraphstyle}{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text}} 200 | 201 | % For elements of entry 202 | \newcommand*{\entrytitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} 203 | \newcommand*{\entrypositionstyle}[1]{{\fontsize{8pt}{1em}\bodyfont\scshape\color{graytext} #1}} 204 | \newcommand*{\entrydatestyle}[1]{{\fontsize{8pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} 205 | \newcommand*{\entrylocationstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} 206 | \newcommand*{\descriptionstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text} #1}} 207 | 208 | % For elements of subentry 209 | \newcommand*{\subentrytitlestyle}[1]{{\fontsize{8pt}{1em}\bodyfont\mdseries\color{graytext} #1}} 210 | \newcommand*{\subentrypositionstyle}[1]{{\fontsize{7pt}{1em}\bodyfont\scshape\color{graytext} #1}} 211 | \newcommand*{\subentrydatestyle}[1]{{\fontsize{7pt}{1em}\bodyfontlight\slshape\color{graytext} #1}} 212 | \newcommand*{\subentrylocationstyle}[1]{{\fontsize{7pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} 213 | \newcommand*{\subdescriptionstyle}[1]{{\fontsize{8pt}{1em}\bodyfontlight\upshape\color{text} #1}} 214 | 215 | % For elements of honor 216 | \newcommand*{\honortitlestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\color{graytext} #1}} 217 | \newcommand*{\honorpositionstyle}[1]{{\fontsize{9pt}{1em}\bodyfont\bfseries\color{darktext} #1}} 218 | \newcommand*{\honordatestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\color{graytext} #1}} 219 | \newcommand*{\honorlocationstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\slshape\color{awesome} #1}} 220 | 221 | % For elements of skill 222 | \newcommand*{\skilltypestyle}[1]{{\fontsize{10pt}{1em}\bodyfont\bfseries\color{darktext} #1}} 223 | \newcommand*{\skillsetstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\color{text} #1}} 224 | 225 | 226 | %------------------------------------------------------------------------------- 227 | % Commands for personal information 228 | %------------------------------------------------------------------------------- 229 | % Define photo ID 230 | % Usage: \photo[circle|rectangle,edge|noedge,left|right]{} 231 | \newcommand{\photo}[2][circle,edge,left]{% 232 | \def\@photo{#2} 233 | \@for\tmp:=#1\do{% 234 | \ifthenelse{\equal{\tmp}{circle} \or \equal{\tmp}{rectangle}}% 235 | {\let\@photoshape\tmp}{}% 236 | \ifthenelse{\equal{\tmp}{edge} \or \equal{\tmp}{noedge}}% 237 | {\let\@photoedge\tmp}{}% 238 | \ifthenelse{\equal{\tmp}{left} \or \equal{\tmp}{right}}% 239 | {\let\@photoalign\tmp}{}% 240 | }% 241 | } 242 | \def\@photoshape{circle} 243 | \def\@photoedge{edge} 244 | \def\@photoalign{left} 245 | 246 | % Define writer's name 247 | % Usage: \name{}{} 248 | % Usage: \firstname{} 249 | % Usage: \lastname{} 250 | % Usage: \familyname{} 251 | \newcommand*{\name}[2]{\def\@firstname{#1}\def\@lastname{#2}} 252 | \newcommand*{\firstname}[1]{\def\@firstname{#1}} 253 | \newcommand*{\lastname}[1]{\def\@lastname{#1}} 254 | \newcommand*{\familyname}[1]{\def\@lastname{#1}} 255 | \def\@familyname{\@lastname} 256 | 257 | % Define writer's address 258 | % Usage: \address{
} 259 | \newcommand*{\address}[1]{\def\@address{#1}} 260 | 261 | % Define writer's position 262 | % Usage: \name{} 263 | \newcommand*{\position}[1]{\def\@position{#1}} 264 | 265 | % Defines writer's mobile (optional) 266 | % Usage: \mobile{} 267 | \newcommand*{\mobile}[1]{\def\@mobile{#1}} 268 | 269 | % Defines writer's email (optional) 270 | % Usage: \email{} 271 | \newcommand*{\email}[1]{\def\@email{#1}} 272 | 273 | % Defines writer's homepage (optional) 274 | % Usage: \homepage{} 275 | \newcommand*{\homepage}[1]{\def\@homepage{#1}} 276 | 277 | % Defines writer's github (optional) 278 | % Usage: \github{} 279 | \newcommand*{\github}[1]{\def\@github{#1}} 280 | 281 | % Defines writer's gitlab (optional) 282 | % Usage: \gitlab{} 283 | \newcommand*{\gitlab}[1]{\def\@gitlab{#1}} 284 | 285 | % Defines writer's stackoverflow profile (optional) 286 | % Usage: \stackoverflow{}{} 287 | % e.g.https://stackoverflow.com/users/123456/sam-smith 288 | % would be \stackoverflow{123456}{sam-smith} 289 | \newcommand*{\stackoverflow}[2]{\def\@stackoverflowid{#1}\def\@stackoverflowname{#2}} 290 | 291 | % Defines writer's linked-in (optional) 292 | % Usage: \linkedin{} 293 | \newcommand*{\linkedin}[1]{\def\@linkedin{#1}} 294 | 295 | % Usage: \twitter{} 296 | \newcommand*{\twitter}[1]{\def\@twitter{#1}} 297 | 298 | % Defines writer's skype (optional) 299 | % Usage: \skype{} 300 | \newcommand*{\skype}[1]{\def\@skype{#1}} 301 | 302 | % Defines writer's reddit (optional) 303 | % Usage: \reddit{} 304 | \newcommand*{\reddit}[1]{\def\@reddit{#1}} 305 | 306 | % Defines writer's xing (optional) 307 | % Usage: \xing{} 308 | \newcommand*{\xing}[1]{\def\@xing{#1}} 309 | 310 | % Defines writer's twitter (optional) 311 | % Defines writer's extra informations (optional) 312 | % Usage: \extrainfo{} 313 | \newcommand*{\extrainfo}[1]{\def\@extrainfo{#1}} 314 | 315 | % Defines writer's quote (optional) 316 | % Usage: \quote{} 317 | \renewcommand*{\quote}[1]{\def\@quote{#1}} 318 | 319 | 320 | %------------------------------------------------------------------------------- 321 | % Commands for extra 322 | %------------------------------------------------------------------------------- 323 | %% Define helper macros a user can change easily 324 | % Header 325 | \newcommand{\acvHeaderNameDelim}{\space} 326 | \newcommand{\acvHeaderAfterNameSkip}{.4mm} 327 | \newcommand{\acvHeaderAfterPositionSkip}{.4mm} 328 | \newcommand{\acvHeaderAfterAddressSkip}{-.5mm} 329 | \newcommand{\acvHeaderIconSep}{\space} 330 | \newcommand{\acvHeaderSocialSep}{\quad\textbar\quad} 331 | \newcommand{\acvHeaderAfterSocialSkip}{6mm} 332 | \newcommand{\acvHeaderAfterQuoteSkip}{5mm} 333 | 334 | % Others 335 | \newcommand{\acvSectionTopSkip}{3mm} 336 | \newcommand{\acvSectionContentTopSkip}{2.5mm} 337 | 338 | 339 | %------------------------------------------------------------------------------- 340 | % Commands for utilities 341 | %------------------------------------------------------------------------------- 342 | % Use to align an element of tabular table 343 | \newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} 344 | \newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} 345 | \newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} 346 | 347 | % Use to draw horizontal line with specific thickness 348 | \def\vhrulefill#1{\leavevmode\leaders\hrule\@height#1\hfill \kern\z@} 349 | 350 | % Use to execute conditional statements by checking empty string 351 | \newcommand*{\ifempty}[3]{\ifthenelse{\isempty{#1}}{#2}{#3}} 352 | 353 | 354 | %------------------------------------------------------------------------------- 355 | % Commands for elements of CV structure 356 | %------------------------------------------------------------------------------- 357 | % Define a header for CV 358 | % Usage: \makecvheader 359 | \newcommand*{\makecvheader}[1][C]{% 360 | \newcommand*{\drawphoto}{% 361 | \ifthenelse{\isundefined{\@photo}}{}{% 362 | \newlength{\photodim} 363 | \ifthenelse{\equal{\@photoshape}{circle}}% 364 | {\setlength{\photodim}{1.3cm}}% 365 | {\setlength{\photodim}{1.8cm}}% 366 | \ifthenelse{\equal{\@photoedge}{edge}}% 367 | {\def\@photoborder{darkgray}}% 368 | {\def\@photoborder{none}}% 369 | \begin{tikzpicture}% 370 | \node[\@photoshape, draw=\@photoborder, line width=0.3mm, inner sep=\photodim, fill overzoom image=\@photo] () {}; 371 | \end{tikzpicture} 372 | }% 373 | } 374 | \newlength{\headertextwidth} 375 | \newlength{\headerphotowidth} 376 | \ifthenelse{\isundefined{\@photo}}{ 377 | \setlength{\headertextwidth}{\textwidth} 378 | \setlength{\headerphotowidth}{0cm} 379 | }{% 380 | \setlength{\headertextwidth}{0.76\textwidth} 381 | \setlength{\headerphotowidth}{0.24\textwidth} 382 | }% 383 | \begin{minipage}[c]{\headerphotowidth}% 384 | \ifthenelse{\equal{\@photoalign}{left}}{\raggedright\drawphoto}{} 385 | \end{minipage} 386 | \begin{minipage}[c]{\headertextwidth} 387 | \ifthenelse{\equal{#1}{L}}{\raggedright}{\ifthenelse{\equal{#1}{R}}{\raggedleft}{\centering}} 388 | \headerfirstnamestyle{\@firstname}\headerlastnamestyle{{}\acvHeaderNameDelim\@lastname}% 389 | \\[\acvHeaderAfterNameSkip]% 390 | \ifthenelse{\isundefined{\@position}}{}{\headerpositionstyle{\@position\\[\acvHeaderAfterPositionSkip]}}% 391 | \ifthenelse{\isundefined{\@address}}{}{\headeraddressstyle{\@address\\[\acvHeaderAfterAddressSkip]}}% 392 | \headersocialstyle{% 393 | \newbool{isstart}% 394 | \setbool{isstart}{true}% 395 | \ifthenelse{\isundefined{\@mobile}}% 396 | {}% 397 | {% 398 | % \faPhone\acvHeaderIconSep\@mobile% 399 | \@mobile% 400 | \setbool{isstart}{false}% 401 | }% 402 | \ifthenelse{\isundefined{\@email}}% 403 | {}% 404 | {% 405 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% 406 | % \href{mailto:\@email}{\faEnvelopeO\acvHeaderIconSep\@email}% 407 | \href{mailto:\@email}{\@email}% 408 | }% 409 | \ifthenelse{\isundefined{\@homepage}}% 410 | {}% 411 | {% 412 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% 413 | \href{http://\@homepage}{\faHome\acvHeaderIconSep\@homepage}% 414 | }% 415 | \ifthenelse{\isundefined{\@github}}% 416 | {}% 417 | {% 418 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% 419 | % \href{https://github.com/\@github}{\faGithub\acvHeaderIconSep\@github}% 420 | \href{https://github.com/\@github}{https://github.com/\@github}% 421 | }% 422 | \ifthenelse{\isundefined{\@gitlab}}% 423 | {}% 424 | {% 425 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% 426 | \href{https://gitlab.com/\@gitlab}{\faGitlab\acvHeaderIconSep\@gitlab}% 427 | }% 428 | \ifthenelse{\isundefined{\@stackoverflowid}}% 429 | {}% 430 | {% 431 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% 432 | \href{https://stackoverflow.com/users/\@stackoverflowid}{\faStackOverflow\acvHeaderIconSep\@stackoverflowname}% 433 | }% 434 | \ifthenelse{\isundefined{\@linkedin}}% 435 | {}% 436 | {% 437 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% 438 | % \href{https://www.linkedin.com/in/\@linkedin}{\faLinkedin\acvHeaderIconSep\@linkedin}% 439 | \href{https://www.linkedin.com/in/\@linkedin}{https://www.linkedin.com/in/\@linkedin}% 440 | }% 441 | \ifthenelse{\isundefined{\@twitter}}% 442 | {}% 443 | {% 444 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% 445 | \href{https://twitter.com/\@twitter}{\faTwitter\acvHeaderIconSep\@twitter}% 446 | }% 447 | \ifthenelse{\isundefined{\@skype}}% 448 | {}% 449 | {% 450 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% 451 | \faSkype\acvHeaderIconSep\@skype% 452 | }% 453 | \ifthenelse{\isundefined{\@reddit}}% 454 | {}% 455 | {% 456 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% 457 | \href{https://www.reddit.com/user/\@reddit}{\faReddit\acvHeaderIconSep\@reddit}% 458 | }% 459 | \ifthenelse{\isundefined{\@xing}}% 460 | {}% 461 | {% 462 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% 463 | \href{https://www.xing.com/profile/\@xing}{\faXingSquare\acvHeaderIconSep\@xing} 464 | }% 465 | \ifthenelse{\isundefined{\@extrainfo}}% 466 | {}% 467 | {% 468 | \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% 469 | \@extrainfo% 470 | }% 471 | } \\[\acvHeaderAfterSocialSkip]% 472 | \ifthenelse{\isundefined{\@quote}}% 473 | {}% 474 | {\headerquotestyle{\@quote\\}\vspace{\acvHeaderAfterQuoteSkip}}% 475 | \end{minipage}% 476 | \begin{minipage}[c]{\headerphotowidth}% 477 | \ifthenelse{\equal{\@photoalign}{right}}{\raggedleft\drawphoto}{} 478 | \end{minipage} 479 | } 480 | 481 | % Define a footer for CV 482 | % Usage: \makecvfooter{}{
}{} 483 | \newcommand*{\makecvfooter}[3]{% 484 | \fancyfoot{} 485 | \fancyfoot[L]{\footerstyle{#1}} 486 | \fancyfoot[C]{\footerstyle{#2}} 487 | \fancyfoot[R]{\footerstyle{#3}} 488 | } 489 | 490 | % Define a section for CV 491 | % Usage: \cvsection{} 492 | \newcommand{\cvsection}[1]{% 493 | \vspace{\acvSectionTopSkip} 494 | \sectionstyle{#1} 495 | \phantomsection 496 | \color{gray}\vhrulefill{0.9pt} 497 | } 498 | 499 | % Define a subsection for CV 500 | % Usage: \cvsubsection{} 501 | \newcommand{\cvsubsection}[1]{% 502 | \vspace{\acvSectionContentTopSkip} 503 | \vspace{-3mm} 504 | \subsectionstyle{#1} 505 | \phantomsection 506 | } 507 | 508 | % Define a paragraph for CV 509 | \newenvironment{cvparagraph}{% 510 | \vspace{\acvSectionContentTopSkip} 511 | \vspace{-3mm} 512 | \paragraphstyle 513 | }{% 514 | \par 515 | \vspace{2mm} 516 | } 517 | 518 | % Define an environment for cventry 519 | \newenvironment{cventries}{% 520 | \vspace{\acvSectionContentTopSkip} 521 | \begin{center} 522 | }{% 523 | \end{center} 524 | } 525 | % Define an entry of cv information 526 | % Usage: \cventry{}{}{<location>}{<date>}{<description>} 527 | \newcommand*{\cventry}[5]{% 528 | \vspace{-2.0mm} 529 | \setlength\tabcolsep{0pt} 530 | \setlength{\extrarowheight}{0pt} 531 | \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{\textwidth - 4.5cm} R{4.5cm}} 532 | \ifempty{#1#3#4} 533 | {\entrytitlestyle{#2} \\ 534 | \multicolumn{1}{L{\textwidth}}{\descriptionstyle{#5}}} 535 | {\ifempty{#2#3} 536 | {\entrypositionstyle{#1} & \entrydatestyle{#4} \\} 537 | {\entrytitlestyle{#2} & \entrylocationstyle{#3} \\ 538 | \entrypositionstyle{#1} & \entrydatestyle{#4} \\} 539 | \multicolumn{2}{L{\textwidth}}{\descriptionstyle{#5}}} 540 | \end{tabular*}% 541 | } 542 | 543 | % Define an environment for cvsubentry 544 | \newenvironment{cvsubentries}{% 545 | \begin{center} 546 | }{% 547 | \end{center} 548 | } 549 | % Define a subentry of cv information 550 | % Usage: \cvsubentry{<position>}{<title>}{<date>}{<description>} 551 | \newcommand*{\cvsubentry}[4]{% 552 | \setlength\tabcolsep{0pt} 553 | \setlength{\extrarowheight}{0pt} 554 | \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} L{\textwidth - 4.5cm} R{4.5cm}} 555 | \setlength\leftskip{0.2cm} 556 | \subentrytitlestyle{#2} & \ifthenelse{\equal{#1}{}} 557 | {\subentrydatestyle{#3}}{} 558 | \ifthenelse{\equal{#1}{}} 559 | {} 560 | {\subentrypositionstyle{#1} & \subentrydatestyle{#3} \\} 561 | \ifthenelse{\equal{#4}{}} 562 | {} 563 | {\multicolumn{2}{L{17.0cm}}{\subdescriptionstyle{#4}} \\} 564 | \end{tabular*} 565 | } 566 | 567 | % Define an environment for cvhonor 568 | \newenvironment{cvhonors}{% 569 | \vspace{\acvSectionContentTopSkip} 570 | \vspace{-2mm} 571 | \begin{center} 572 | \setlength\tabcolsep{0pt} 573 | \setlength{\extrarowheight}{0pt} 574 | \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} C{1.5cm} L{\textwidth - 4.0cm} R{2.5cm}} 575 | }{% 576 | \end{tabular*} 577 | \end{center} 578 | } 579 | % Define a line of cv information(honor, award or something else) 580 | % Usage: \cvhonor{<position>}{<title>}{<location>}{<date>} 581 | \newcommand*{\cvhonor}[4]{% 582 | \honordatestyle{#4} & \honorpositionstyle{#1}, \honortitlestyle{#2} & \honorlocationstyle{#3} \\ 583 | } 584 | 585 | % Define an environment for cvskill 586 | \newenvironment{cvskills}{% 587 | \vspace{\acvSectionContentTopSkip} 588 | \vspace{-2.0mm} 589 | \begin{center} 590 | \setlength\tabcolsep{1ex} 591 | \setlength{\extrarowheight}{0pt} 592 | \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} l L{\textwidth * \real{0.9}}} 593 | }{% 594 | \end{tabular*} 595 | \end{center} 596 | } 597 | % Define a line of cv information(skill) 598 | % Usage: \cvskill{<type>}{<skillset>} 599 | \newcommand*{\cvskill}[2]{% 600 | \skilltypestyle{#1} & \skillsetstyle{#2} \\ 601 | } 602 | 603 | % Define an environment for cvitems(for cventry) 604 | \newenvironment{cvitems}{% 605 | \vspace{-4.0mm} 606 | \begin{justify} 607 | \begin{itemize}[leftmargin=2ex, nosep, noitemsep] 608 | \setlength{\parskip}{0pt} 609 | \renewcommand{\labelitemi}{\bullet} 610 | }{% 611 | \end{itemize} 612 | \end{justify} 613 | \vspace{-4.0mm} 614 | } 615 | --------------------------------------------------------------------------------