summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--resume.json47
-rw-r--r--resume.py83
-rw-r--r--template.tex44
4 files changed, 178 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8bfbf29
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+Yun_Joshua_Resume.tex
+*.pdf
+*.log
+*.aux
diff --git a/resume.json b/resume.json
new file mode 100644
index 0000000..ee21b6a
--- /dev/null
+++ b/resume.json
@@ -0,0 +1,47 @@
+{
+ "supermileage": {
+ "title" : "Ecoillini Supermileage",
+ "date" : "Aug 2021 - Present",
+ "adc" : "Programmed STM32 multi-channel ADC and combined it with CAN bus data to control PWM outputs.",
+ "design" : "Designed a Joulemeter capable of measuring current and reporting back using the CAN bus protocol.",
+ "test" : "Tested the functionality of the Joulemeter using a synthetic load along with a high current power supply.",
+ "can" : "Debugged the CAN bus with an oscilloscope to verify the baudrate and the transmitted data.",
+ "team" : "Worked with a small team to define the CAN messages as well as coordinate the data content and frequency",
+ "documentation" : "Documented all the code on a wiki that clarified all variables and explained how the code worked.",
+ "server" : "Running Openbsd with gitea on a server for the programming team and perform constant maintanence and new feature migrations.",
+ "workstation" : "Supporting a proxmox hypervisor server with multiple instances of Windows and Linux running on it for aerodynamic simulations."
+ },
+ "python_scripting": {
+ "title" : "Resume generator",
+ "date" : "Mar 2022 - Present",
+ "webscrape" : "Designed a webscrape engine using Beautiful Soup to get job information from a job board page.",
+ "semanticsearch" : "Used Python's NLTK to do a keyboard search against a json of experiences to generate a resume.",
+ "latexconversion" : "Verified the relevance of those experiences to the job, and output the text into a latex file."
+ },
+ "verilog_gpu": {
+ "title" : "Primitive Verilog GPU",
+ "date" : "Feb 2022 - Present",
+ "clock" : "Wrote a verilog module to drive clocks for a given LCD display based on the blanking times given.",
+ "spi" : "A separate module read SPI commands and drew lines and background colors based on the command given.",
+ "framebuf" : "Controlled an internal frame buffer which was copied over to the external frame buffer during blanking times.",
+ "locking" : "Ensured that no module was accessing memory at the same time using a locking system similar to chip enable.",
+ "simulation" : "Ran behavioral simulations using verilator before synthesizing tests and running verilator on gate level descriptions.",
+ "testing" : "Using a logic analyzer and oscilloscope to check all timings after formal verification of the verilog."
+ },
+ "verilog_cpu": {
+ "title" : "Verilog RISCV Softcore",
+ "date" : "Aug 2021 - Dec 2021",
+ "cpu" : "Implemented a pipelined RISCVIM-Z (Integer operations) compliant softcore in Verilog.",
+ "dram" : "Designed DRAM controller to access a single DDR3L chip on the development board to use as main memory.",
+ "simulation" : "Verilog was simulated using Icarus, verified using verilog test benches, and compiled onto a Lattice ECP5.",
+ "fpu" : "Floating point extensions were implemented with a ALU that does all floating point arithmatic operations."
+ },
+
+ "linux_server": {
+ "title" : "Linux Server",
+ "date" : "Dec 2019 - Present",
+ "webservice": "Maintain a Linux Server which is running multiple network services such as Git, a website and other programs.",
+ "nginx": "Use a NGINX reverse proxy to send inbound traffic to the appropriate locally run service.",
+ "secure": "Secured the Linux server by maintaining a iptables firewall along with only allowing ssh authentication and disabling root login."
+ }
+}
diff --git a/resume.py b/resume.py
new file mode 100644
index 0000000..3da5a51
--- /dev/null
+++ b/resume.py
@@ -0,0 +1,83 @@
+import json
+import shutil
+shutil.copyfile('template.tex', 'Yun_Joshua_Resume.tex')
+f = open('resume.json')
+
+experiences = json.load(f)
+list_of_experiences = []
+keys = list(experiences.keys())
+f.close()
+
+
+def max (input):
+ max = 0
+ for i in input:
+ if i > max:
+ max = i
+
+ return max
+
+def choose(list_of_choices):
+ while True:
+ try:
+ choices = list(map(int,list(input("Select your choices: ").split())))
+ if len(choices) > len(list_of_choices):
+ print("Invalid Input, Try again")
+ continue
+ if max(choices) >= len(list_of_choices):
+ print("Invalid Input, Try again")
+ continue
+ except ValueError:
+ print("Invalid Input, Try again")
+ continue
+ return choices
+
+
+for count, key in enumerate(keys):
+ list_of_experiences.append(key)
+ print(f"Choice {count}: {experiences[key]['title']}" )
+
+choices = choose(list_of_experiences)
+
+selected_experiences = []
+print("\nYou have selected:")
+for choice in choices:
+ selected_experiences.append(keys[choice])
+ print(experiences[list_of_experiences[choice]]['title'])
+
+print("\n")
+
+resume = open("Yun_Joshua_Resume.tex", "a")
+resume.write('\n')
+for experience in selected_experiences:
+ # TODO: Write title and date to latex
+
+ resume.write(f"{{\\large\\textbf{{{experiences[experience]['title']}}}}} \\hfill {experiences[experience]['date']}\n")
+ print(f"Select your bullet points for: {experiences[experience]['title']}")
+ list_of_bullet_points = []
+ bullet_points = experiences[experience]
+ bullet_keys = list(bullet_points.keys())
+ count = 0
+ for bullet in bullet_keys:
+ if bullet == 'title' or bullet == 'date':
+ continue
+ else:
+ list_of_bullet_points.append(bullet_points[bullet])
+ print(f"Number {count}: {bullet_points[bullet]}")
+ count = count + 1
+
+ bullet_choice = choose(list_of_bullet_points)
+
+ selected_bullets = []
+ print("\nYou have selected:")
+ resume.write("\\begin{itemize}[noitemsep]\n")
+ for choice in bullet_choice:
+ selected_bullets.append(bullet_keys[choice])
+ resume.write(f"\\item {list_of_bullet_points[choice]}\n")
+ print(list_of_bullet_points[choice])
+ # TODO: Write this bullet point to latex
+ print("\n")
+ resume.write("\\end{itemize}\n")
+
+resume.write("\\end{document}\n")
+resume.close()
diff --git a/template.tex b/template.tex
new file mode 100644
index 0000000..04f9dad
--- /dev/null
+++ b/template.tex
@@ -0,0 +1,44 @@
+\documentclass{article}
+
+\usepackage[margin=.75in]{geometry}
+\usepackage{titlesec}
+\usepackage{enumitem}
+
+\setlength\parindent{0pt}
+\titleformat{\section}{\Large\scshape\raggedright}{}{0em}{}[\titlerule]
+\pagenumbering{gobble}
+
+\begin{document}
+
+\par{\centering{\huge\textsc{Joshua Yun}}\bigskip\par}
+
+Phone: 929-358-6255\hfill Email: jjyun4@illinois.edu
+
+\noindent\rule{\textwidth}{0.4pt}
+
+\section{Education}
+\textbf{University of Illinois at Urbana-Champaign} \hfill \textbf{Expected Graduation:} 2024\\
+\textit{Bachelor of Computer Engineering} \hfill GPA: 3.89 / 4.00
+\section{Skills}
+\textsc{Programming}: C, Verilog, Java, Python, HTML, Git Version Control, \LaTeX \\
+\textsc{Software}: KiCad, STM32, Linux, NGINX, OpenBSD \\
+\textsc{Hardware}: Oscilloscope, Digital Logic Analyzer, Synthetic Loads, PCB Mills \\
+\textsc{Spoken Languages}: English, Spanish, Korean
+\section{Work Related Activities}
+
+{\large\textbf{OpenLab at UIUC}} \hfill December 2021 - Present \\
+\textsc{{Lab Monitor}}
+\begin{itemize}[noitemsep]
+ \item Ensuring that safety procedures were being followed at the Openlab, and that equipment was not being misused.
+ \item Working on improving the Openlab through new equipment and the repair of dysfunctional equipment.
+ \item Recorded and inventoried tool use that were borrowed by patrons, ensuring that tools were returned.
+\end{itemize}
+
+{\large\textbf{Lifetime Fitness Inc.}} \hfill August 2020 - July 2021 \\
+\textsc{{Lifeguard}}
+\begin{itemize}[noitemsep]
+ \item Enforced strict guidelines and procedures to ensure patron safety.
+ \item Collaborated with a team of lifeguards to keep the pool clean and functional.
+\end{itemize}
+
+\section{Projects and Activities}