
Gabriel St.Jean
* If you want to view a private repository, please contact me at gjustinst.jean@gmail.com
Software Engineering: Online Bookstore Summer 2021

Figure 1: Filtering books by author

Figure 2: Web user viewing a books description begore deciding to add it to their cart
The online bookstore system was created by a team of three Java developers to develop a shopping experience where web users can purchase books and admin users can manage the store and its items. To achieve this, the Spring Model-View Controller pattern was used with MySQL server and a Java controller as the backend and HTML and JavaScript serving as the frontend.
​
My role on the team was to create handlers and controllers that processed various requests on the website such as redirecting users to various webpages on the website, creating a shopping cart experience where users can add/remove books for purchase, creating SQL commands to filter & return a collection of searchable items from the database, and creating commands SQL commands to save/receive user metadata into their respective data tables. I was also responsible for implementing a login facility and password recovery portal which was made possible by using the proxy design pattern.
​
In all, this project taught me the importance of using the Spring MVC design pattern to create scalable web applications. This project also taught me the importance of iterative and agile development since these methodologies helped the online bookstore application to scale seamlessly when new requirements were introduced by end users. Additionally, the project taught me the importance of adopting S.O.L.I.D. design principles such as Singleton and the Open Closed principle so that the application could scale easier.
​
Languages: HTML, CSS, and Java
​
Role: Java backend developer, front and back end coordinator
​
Github: private
​
Use case diagram: use case diagram
​
​
Engineering Design: XY Plotter Implementation Spring 2021

Figure 1: The Raspberry PI 4 and XY Plotter

Figure 2: LCD Hat and breakout cable for the XY plotter. The main menu is shown featuring a selection menu for selecting a plotter mode or calibration routine
Figure 3: Video showcasing how the XY Plotter A.K.A "The Depressing Machine" functions. Click here for video chapters
Figure 4: G-code interpreter function interpreting a G-code file with commands to sketch a Mona Lisa image. G-code file courtesy of https://hackaday.io/project/166759/files
This project was created by two Python developers and two electrical engineers to program several features of a XY plotter from scratch by using a Raspberry PI 4 as the Microcontroller. The plotter was programmed to have three key modes: Etch-a-sketch mode, Math Equation drawer, and G-code interpreter.
​
The Raspberry PI 4 was chosen as the microcontroller of choice because it supports pulse width modulation and allows connectivity for peripheral devices through the use of its i2c module. These features allowed the team to interface a Liquid Crystal Display, rotary encoder knobs, and several stepper motors to actuate sketches on the plotter through various plotter modes. Figure 2 & 3 illustrate how these components interact with the plotter. Note that a calibrate menu is shown so hat user can manually define their own origin point after auto calibration occurs on startup.
​​
The plotter modes are as follows: Etch-a-sketch mode is a replication of the Etch A Sketch toy where rotary encoder knobs can be used to manually draw images; Math Equation drawer draws linear and quadratic equations from a user specified formula, and G-code interpreter parses commands from a G-code file to draw images which can be seen in Figure 4.. All algorithms implemented in this system were created in Python.
​​
A crucial feature that I implemented for this project was the calibration routine because it served as the backbone for all plotter modes. This is because the algorithm creates the plotter's cartesian system with respect to the end stops on the plotter- ,making it essential for bounds checking and mathematical interpolation. Furthermore, this project taught me the importance of creating scalable and robust code since several functions exhibited across the three modes were reused amongst each other.
​
Languages: Python and BASH Scripting
​
Role: Lead Python developer
​
Github: private
Software Development: Arcade App Fall 2019

Figure 1: Asteroids game. Two projectiles can be seen on screen for the ship to avoid: an asteroid meteor and the Florida Gator's mascot icon

Figure 2: Manacala board game featuring Player one on the left side and Player two on the right
Figure 3: Arcade App showcase
The Arcade App is Javafx project created by a team of two developers. The program simulates an arcade application that features two games: the classic Asteroids (1979) game and the Mancala board game. From within the Arcade App, several menus can be seen which can be used to reset a game to its original state, return to the home menu, pause the game, and etc. ​
​
​
A key lesson that this project taught me was learning how to utilize asynchronous programming effectively to perform concurrent operations. This was useful when creating the Asteroids game since enemy projectiles and the player controller space ship where processed by their own thread in memory. The use of threading also taught me how to implement the "toggle play" feature in the application since stopping and resuming a thread where functionalities I learned to implement from the API.
​​
A challenging aspect that my team overcame when implementing the Asteroids games was figuring out how to make the spaceship fire bullets properly. We noticed that bullets where fired in the same direction as the ship but it didn't account for the velocity that ship was traveling in- meaning that the bullet was always traveling at a constant trajectory and speed. To fix this issue, we realized that the bullet flight path algorithm should account for the ship's velocity as an additional parameter.
​
Software tool: Javafx
​
Role: Java Developer
​
Github: Private
​