├── 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 |

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{}{}{}{}{}
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{}{}{}{}
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{}{}{}{}
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{}{}
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 |
--------------------------------------------------------------------------------