Posts

CST 438 - Week 2

       In lab 3 this week, I developed a simple frontend to communicate customer and order data to the Spring Boot backend. To accomplish this, I used the React library to create reusable interface components. This involved building a user interface for certain tasks such as registering customers and updating customer settings. In React, data can be passed to components as props, which is useful for tasks like providing the EditOrder component data to display a customer's order history prior to editing it. This lab also introduced special functions called hooks  to access the React state and features. The useState function accepts a variable’s initial state and returns an array containing the state variable and function to update the state variable. The useEffect function is used to synchronize with an external system, which in this lab, was used to get orders upon refreshing the page.      This was not my first time using the React library, but t...

CST 438 - Week 1

       This week I got to work with the Java Spring Boot Framework for the first lab of this class. This lab covered building a RESTful API to update customer and order information, which included using HTTP methods like GET, POST, PUT, and DELETE. By creating API endpoints, Customer/Order data received from the client through data transfer objects could be passed to the database through repositories. This application also covered authentication using tokens that were generated during the login process. User authentication in this lab ensures that users can only alter data pertaining to their own account.       While I thought this lab was helpful for learning how to use the Spring framework, I still want to develop a better understanding of how the framework works internally. One concept I was interested in was how the repositories were implemented without explicitly creating classes that implemented them. In my research, I found at runtime, Spri...

CST 462S

Service Learning Summary During my time with Nyamboyo Technical School (NTS) I worked on the new attendance and calendar applications for NTS admin to use on their website. I enjoyed the entire process from developing my ideas to testing new features I created. What I found meaningful about this experience was seeing how the apps I worked on would improve the work process for NTS admin. I am glad I could contribute to NTS and I hope that these features may allow NTS to shift their focus into other areas that support students. There were some challenges though in the beginning like familiarizing myself with the code base and learning about new frameworks and libraries. Thankfully, our lead developer afforded us the time at the beginning of the term to review and study anything we needed so we could start working on once we were confident. Overcoming these challenges in the beginning was rewarding and contributed to the overall positive experience I had with NTS. If I could offer any adv...

CST 370 Week 7

The topic I focused on the most this week was dynamic programming. I have not used this technique to solve coding problems yet but I have used a dynamic approach to solve written problems on quizzes. Throughout quizzes in this class, I have written out the pseudocode for a given problem to calculate the output by hand. In some instances, it is time consuming to draw out every operation of a function especially for a recursive function. Instead of drawing out every iteration of the recursive function, I would plug in the return value of the function if I had calculated it already for a given input. The idea of solving problems with the values of sub problems was a main focus of the dynamic programming lecture material. This approach to problem solving was applied to the coin board problem, coin row problem, and finding the nth number in the fibonacci sequence.

CST 370 Week 6

This week in class, I learned about heaps, AVL trees, and 2-3 trees. For each of these trees, I focused on better understanding the algorithms needed to insert values, delete values, and search for values. I found that even when I studied materials provided in class this week, these concepts were more difficult to understand than the concepts from previous weeks. What helped me the most in retaining any of the material covered this week was the programming assignment.  Actually applying what I learned from pseudocode in the text book to creating functions helped better my understanding of how these algorithms work. Since our programming assignment focused on heaps, I have a better understanding of heaps work compared to the other trees discussed. When I have the chance, I will try to implement my own AVL tree and 2-3 tree data structures to help myself in the future.

CST 370 Week 5

This week I developed a better understanding about how quick-sort algorithms can out perform merge-sort algorithms. Previously, I thought that since quick sort's worst case is O(n2) and that merge sort's worst is O(n log n), merge-sort would always be more practical for sorting. I have learned though that the worst input cases for quick-sort, such as an already sorted array or using the min or max element as a pivot, are not common. So by only comparing the results from the average/best cases, both merge-sort and quick-sort both yield O(n log n) time complexities. According to the text book, the efficiency of the innermost loop of the quick-sort algorithm is what allows it to perform more efficiently than merge sort algorithm in most situations. I have learned from additional online resources that other factors such as memory allow quick sorting to occur faster than merge sorting since quick-sort sorts arrays in place. 

CST 370 Week 4

 This week, I continued to learn about the divide and conquer approach to solving problems. The class lessons used merge sorting as example to demonstrate how divide and conquer algorithms can be implemented. An unsorted array is repeatedly split in half into sub arrays until the sub arrays are one element in size. At this point, the sub arrays are considered to be sorted and can be merged back together in a sorted order. This is repeated until all the sorted sub arrays are merged in order. Using the master theorem, I was shown how this sorting method results in n*log n order of growth. In community college, I had to show how many operations had to occur for sorting an array of n size by counting operations at each step of the algorithm. Learning how to apply the master theorem to merge sorting has made understanding time complexities much simpler.