diff options
-rw-r--r-- | .gitignore | 4 | ||||
-rw-r--r-- | resume.json | 47 | ||||
-rw-r--r-- | resume.py | 83 | ||||
-rw-r--r-- | template.tex | 44 |
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} |