Hi, I'm Ying-Jia(Samuel) Lin.
A Software Engineer.

Class of 2025
B.S. Computer Science
University of California, San Diego
Software development, Full Stack Development, ML/AI

About me

Education

2023 -

University of California, San Diego - B.S. Computer Science

2023 - 2023

Cornell University

online certificate in Machine Learning Foundations

2021 - 2023

University of California, Riverside - B.S. Computer Science

Chancellor's Honor List(2022-2023), Dean's Honor List(2021-2023)

Experience

June 2024 - September 2024

Software Development Engineer Intern - Amazon

January 2024 - April 2024

Machine Learning Engineer Competitor (Spring Studio) - Google

September 2023 - December 2023

Machine Learning Engineer Competitor (AI Studio) - Amazon

June 2023 - September 2023

Cloud Software Developer Intern - HP

November 2022 - April 2023

Software Developer Intern - Engineering for Good, UC Riverside

August 2022 - October 2022

Above and Beyond Computer Science Fellow - Meta

July 2022 - September 2022

Web Developer - Association for Computing Machinery @ UC Riverside

My Skills

  • C++
  • Java
  • HTML
  • CSS
  • Javascript
  • React
  • Python
  • Git
  • Django

My PortfolioMy Work

Text Editor
Java

Text Editor

Earthquake Map
Java

Earthquake Map

Chinese Chess
C++

Chinese Chess

Shape Parser
C++
QT Graphics

Shape Parser

Serendipity Database
C++

Serendipity Database

CRK Database
HTML | CSS
React

CRK Database

My Education

Courses

June 2023 - August 2023

Machine Learning Foundations - Cornell University

May 2023

Data Structures and Performance - UC San Diego, Coursera

April 2023

Object Oriented Programming in Java - UC San Diego, Coursera

January 2023 - March 2023

CS141 Intermediate Data Structures and Algorithms - UC Riverside

2023

December 2022 - January 2023

Elements of AI: Building AI - University of Helsinki

September 2022 - April 2023

Intro to Quantum Computing - Qubit by Qubit; The Coding School

September 2022 - December 2022

CS111 Discrete Structures - UC Riverside

September 2022 - December 2022

CS120A Logic Design - UC Riverside

September 2022 - October 2022

Elements of AI: Intro to AI - University of Helsinki

July 2022 - September 2022

CS50's Introduction to Computer Science - Harvard University

May 2022 - July 2022

Intermediate Software Engineering - Codepath

March 2022 - June 2022

CS100 Software Construction - UC Riverside

March 2022 - June 2022

CS61 Machine Organization and Assembly Language Programming - UC Riverside

March 2022 - June 2022

CS11 Intro to Discrete Structures - UC Riverside

January 2022 - March 2022

CS10C Intro to Data Structures and Algorithms - UC Riverside

2022

September 2021 - December 2021

CS10B Introduction to Computer Science for Science, Mathematics, and Engineering II - UC Riverside

June 2021 - August 2021

CS1C Intro to Computer Science in C++ III - Saddleback College

January 2021 - April 2021

Java Programming I - University of Helsinki

2021

June 2020 - August 2020

CIMN200 Intro to Networking - Saddleback College

2020

June 2019 - August 2019

CS1B Intro to Computer Science in C++ II - Saddleback College

2019

June 2018 - August 2018

CS1A Intro to Computer Science in C++ I - Saddleback College

2018

Certifications

Contact MeContact

Location

Lake Forest, California

Email

samuelyjlin@outlook.com

Serendipity DatabaseC++

About

This was a project I wrote in the summer of 2019, after taking a community college on C++(CS1B at Saddleback College). At the time, I was new to pointers and arrays, so struggled with the concept of building a polished program with them. In 2021, after finishing high school, and in preparation for college, I rewrote the program from scratch, this time finishing it, more effectively and efficiently, after finally grasping the concept of pointers.

Project Overview

This terminal-based program provides the functionalities of a cash register. Additionally, it maintains a database of books, with the ability to modify items. Users are presented with a menu and can input an option to navigate to other menus. Book entries are loaded into the database from a txt file upon execution. When the program exits, an updated database will be stored into the same txt file. The database of book entries are stored in a double pointer, which stores an array of pointers. Main Menu From the main menu, users have 4 options:

Cashier Module

Upon entering the cashier module, users are prompted to enter the following fields:

The book is searched for in the database, and if there's a match for the book with its ISBN or title, the user will be prompted if they want to add another book to the purchase(adds onto the same receipt).

However, if the book isn't found in the database, an error message will result, and user will be shown the main menu again. Cashier 1 If the user enters 'n' to adding another book, the receipt will be displayed. Otherwise, entering 'y' will result in the program prompting for book info again. Cashier 2 The receipt gives an overview of the books purchased and the final price(including a calculated tax). The "Confirm purchase?" prompt will display a thank-you message alongside updating the quantity values in the database if 'y' is entered. Entering 'n' will proceed to print the next "Enter another transaction" prompt without a thank-you message nor updating quantity values. The "Enter another transactions" prompt will either lead back to the prompting of book info, or display the main menu again.

Inventory Module

Upon choosing the inventory module, users are presented with 5 options:

Inventory Menu

Searching for a book

When the user chooses the search option, the program prompts for an input: either the ISBN, book title, publisher or author. All matching results will be printed one at a time until the user picks a desired match, or no more matchs are found(in which case a message will be printed and the naviation will return to the inventory module menu). Search 1 Assuming we choose the second match when searching "Hobbit", then its info will be displayed, and the program won't proceed until the user presses enter. Search 2

Adding a book

To add a book to the database, the current database size has to be less than value of the constant DB_SIZE, which is currently set to 125. If the current size is at 125, then an error message will appear, indicating that the database is full. Add 1 However, in the case that our database has space, a menu will appear with values of the new item that the user can change. The pending values on the right will update as values are changed. An important note to remember is that the new book won't be added until the user chooses option 9 and saves it to the database. Add 2 If the user types in information, but chooses option 0 before option 9, then no new book is added.

Editing an existing book

Choosing the edit option calls the search function from earlier, along with displaying the maximum database size and the current size. Matched entries will continue displaying until all matches are printed out or the user enters 'y'. Edit 1 Once an entry is chosen, the info of the entry will be displayed, like in the search function from before. A prompt asks the user to confirm their choice. Edit 2 After confirming the entry is the book to be edited, the menu from add book function is shown, and users can change the value of the entry as they wish.

Deleting a book

The delete function is extremely similar to the edit function, in that the search function is first called, and upon choosing an entry, its info will be displayed, along with a final confirmation. Once the book is deleted, the user will be prompted whether they want to delete another entry. Delete

Report Module

The reports module allows users to list out all book entries in the current database, and can be filtered with a few options. There are six different report variations and seven total options:

Report Menu Entries are displayed in pages of 10, with the report pausing every tenth entry to wait for the user to press enter. Report 1
Inventory listing
Report 2
Inventory wholesale value
Report Wholesale
Notice that the wholesale report has the total wholesale cost at the end
Report 3
Inventory retail value
Report Retail
Notice that the retail report has the total retail cost at the end
Report 4
Listing by quantity
Report 5
Listing by cost
Report 6
Listing by age

Chinese ChessC++

About

This was a program I wrote, alongside three other classmates, for the final project of CS100("Software Construction", at UCR). In this project, we built a terminal-based Chinese Chess game, using the strategy design pattern, in which the correct move() function is called, depending on which piece resides at the chosen coordinates.

Project Overview

Starting Menu

This terminal-based program allows users to play Chinese Chess directly from the command line, with the board graphics represented through ASCII characters. Upon starting the program, users are presented with three options.
Starting Menu The three options are as follows:

Game Menu

Once the user chooses to either start a new game or continue a saved game, the chessboard will be displayed, along with an index and a user prompt. Chessboard Display The initial prompt asks for the coordinates of the piece they wish to move. An appropriate error message will be displayed for the following cases:

For example, here's the error message for the invalid coordinates: Initial Error Once the user inputs valid coordinates for the piece to move, they're asked to confirm their choice. Choosing 'n' will lead back to the initial prompt of the initial coordinates. Confirm Choice Otherwise, if the user confirms their choice, they'll be prompted to enter the coordinates to move the piece to. Target Prompt Similar to the intial prompt, the target prompt will display an error for the following cases: The pieces of Chinese Chess adhere to the following rules: For more reference, check out this link.

Assume the user attempts to move the soldier piece at (9, 7) backwards, to (9, 8). Recall that this is an illegal move, as soldier cannot move backwards. An error message will be displayed. Illegal Move Choosing valid coordinates for both prompts results the piece being moved to the new location. If the new location contains an opponents piece, that piece will be captured and removed from the chessboard. Here, the user moves the soldier piece from (9, 7) to (9, 6). Valid Move After each player's turn, the "current turn" display at the top of the screen will be updated. The game ends when one of the player's general piece is captured. Assume the current game looks like so: Checkmate Position Then, the player black can move their chariot at (6, 2) to capture the red general at (6, 9). A message with the winning team will then be displayed. Checkmate Message If either user chooses to quit in the middle of the game, by entering "0", they'll be prompted to save the game. Choosing "y" will save the coordinates of all pieces on the board to a local .txt file. The user can then continue this saved game by choosing the "Load saved game" option in the opening menu. Save Message

Shape ParserC++

About

I wrote this program alongside 5 other classmates, for the final project of CS1C at Saddleback Community College, over the summer of 2021. Using the Qt graphics framework, we created a shape parser, which allows users to draw, move and remove shapes on the canvas.

Project Overview

Starting Menu

Using Qt frameworks to create a GUI, this shape parser program reads in shape attributes from a local .txt file. This info is stored into a vector of pointers, and outputted to the canvas. Each shape is labelled with a unique shape ID. Upon opening the program, all the buttons for drawing, moving and removing shapes are greyed out.
Initial Canvas By default, the user isn't logged in, so doesn't have admin permissions to edit the shapes.

Logging In

Clicking the "Login" button in the bottom right corner brings up a prompt for the username and password. Login 1 The correct account info that's stored in the program is "admin" for the username and "password" for the password(very original, I know :D). For security reasons, the user input for the password box is dotted out. Login 2 Once these credentials are entered, the buttons to edit shapes will become available for the user to select. Login 2

Drawing New Shapes

When you add a shape, a prompt for the shape ID will pop up. To draw a new shape, a unique ID between 1 and 50 is entered. Add 1 If a shape ID that already exists is entered, an error message will indicate this, and close the editing popup. Add 2 Each shape has a different set of dimensions, so have varying prompts, depending on the shape chosen:

Upon the input of all prompts, the shape will get drawn onto the canvas, alongside the already existing shapes.

For example, after entering the dimensions for a new rectangle with shape ID 9, it's drawn onto the canvas, with the other shapes drawn using shape info read from the .txt file. Add 3

Editing Shapes

When moving existing shapes, their respective prompts will pop up, similar to the process of adding new shapes. The only difference is that the shape ID prompt will check that the ID inputted exists, in case the user attempts to move a shape that hasn't been drawn. Move 1 The process for removing shapes is much simpler. The only prompt will be for the shape ID. Once a valid ID is inputted, the corresponding shape will be deleted from the canvas.

As an example, we'll remove the polygon with shape ID 3: Remove 1

Testimonials

The user also has the ability to leave a testimonial for the shape parser program, through the "Make a testimonial!" button. Upon choosing this, a window for text input for a name and testimonial pops up. Testimonial 1 Once submitted, the testimonial is stored in a local .txt file.

Contact Info

Lastly, there's a button for the (fictitious) contact info of the program developer. Contact 1

Earthquake MapJava

About

This is my capstone project for UCSD's Coursera course "Object Oriented Programming in Java". It's been a while since I last programmed in Java(as courses are mainly taught in C++ at UCR). In preparation for my upcoming internship for summer 2023, which has Java listed in its position description, I took this course to brush up on my Java skills. If I recall correctly, the last time I used Java extensively was when I took University of Helsinki's course "Java Programming I" back in 2021, about two years ago! Suffice to say, I was a bit rusty in Java!

Project Overview

Map Overview

This project uses the Processing and UnfoldingMaps libraries to display a window with an interactive map and map legend. The map can be zoomed in/out(using mouse scroll wheel or -/+ keys) and panned(using click+drag or arrow keys), and displays markers for earthquakes(both land and ocean quakes), cities and airports. The earthquake data is extracted from USGS's website. Meanwhile, the city and airport data are parsed in through a local .json file. The color of an earthquake marker depends on its magnitude, and its shape is determined on whether it occured on land or water. Main Map It's a bit hard to see the various different type of markers(due to the overwhelming number of airport markers). However, if we zoom in, we can get a better look: Zoom 1 Here, we can see how there's a city marker for Tokyo. There's a few shallow land quake markers scattered around(indicated by the yellow circles). Note how the land quake near Chiba is marked with a cross, indicating that it occured within the past hour.

Hovering over Markers

Hovering the mouse over a marker displays its relevant info.
For a city, its name, country and population are displayed: City Info For an earthquake, its magnitude, direction city and country are displayed: Quake Info Finally, for an airport, its name, airport code, city and country are displayed. Airport Info

Clicking on Markers

Clicking on markers allows us to further interact with the map.
Each earthquake has a radius called the threat circle, in which any location in this circle will be impacted by this quake. When we click on a quake marker, all other quakes are hidden, and only cities and airports that are affected by this quake will remain displayed. For example, let's play around with this quake marker in Mexico: Quake 1 If we click on this marker, notice how airports and cities farther from this quake are hidden, as they're outside the threat circle. Additionally, all other quakes are hidden. Quake 2 Clicking on airports and cities yield similar results to each other. Clicking on an airport will hide all other airports and only display quakes that affects it. Meanwhile, clicking on a city hides all other cities and shows only quakes that impact it. Let's click on this city in Venezuela: City 1 Note how upon clicking it, all other cities, as well as quakes that don't affect this city, disappear: City 2

Text EditorJava

About

This is my capstone project for UCSD's Coursera course "Data Structures and Performance". In this project, I integrated data structures into a text editor app, which includes spelling suggestions and autocompletion. I feel like this project gave a really nice refresher on applications of fundamental data structures. I look forward to taking UCSD's next course on intermediate data structures!

Project Overview

Text Editor Overview

Upon opening the app, a blank input box is presented, alongside several buttons on the right, which allows interacting with the text. Text Editor Main Checkbox options near the bottom allow for spelling suggestions and autocompletion.
Here's a brief list of main data structures used to implement the features:

Button Actions

The "Load Text" button prompts for a local file to import, and whether to append or replace the text in the input box. Import Text The "Flesch Index" will calculate the value known as the Flesch Index, which provides an estimation on the reading level of the text. Higher scores correspond to an easier reading level, while lower scores are higher levels. Read more at its Wikipedia article.
Here, we have some sample text already in the input box; clicking the "Flesch Index" button will display a value at the bottom lefthand corner. Flesch Index In the case that there's no text in the input box, an appropriate error is displayed. Flesch Error The "Edit Distance" button allows us to find how many "single chararcter edits" (insert, delete, replace) it takes to edit word 1 to word 2. Distance Menu For example, if we try "hello" as word 1 and "goodbye" as word 2, we'll get the following: Distance Result The "Generate Markov Text" button allows us to generate text using a Markov Chain, which predicts text based on the patterns of existing text.
A window pops up, and prompts for the number of words to generate. Markov Menu The text will then be generated and displayed in the window, using text from the input box. Markov Results

Spelling Suggestions

Checking the "Spelling Suggestions" option enables the text editor to highlight any word that is spelled incorrectly. Spelling

Autocompletion

Checking the "AutoComplete" option enables the text editor to suggest words, while the user types. Autocomplete