Author Archives:

Just A Refresher For OOP Concepts

Hello and welcome back to my blog! I had a really fun time during the first few weeks of the semester and I am looking forward to the rest of it. The first POGIL group activity we did caught me off guard since I did not remember what the terms abstraction, encapsulation, polymorphism, and inheritance meant. These concepts were taught in one of the earlier programming classes and I have done school projects and labs that involved these concepts in the past. But I don’t actually remember the terms or the clear cut definitions of them. Maybe part of the reason why I did not remember them is because we briefly went over those topics and we were also not forced to remember them since those classes were more about if you could write the code correctly. So that is why I decided to focus my blog around those four concepts. The in-class activity was a good refresher but I wanted to do research to fully have a firm understanding of them. Having a strong understanding of these concepts will help me later on in my computer science journey since these concepts are going to be seen over and over again in object orientated programming.

Let’s start with abstraction. Abstraction is basically hiding unnecessary details and leaving only the necessary and relevant details. Hiding unnecessary information is useful because, well, it is not needed to show that information to the user. An example in real life is your smart phone. All that’s important to the user is the screen and they do not need to know what processor or how much RAM the phone has.

Encapsulation is bundling data with the code that modifies the data and it can also prevent outside sources from accessing that data. In Java, encapsulation is used in classes where data can be declared as private and outside methods cannot access that data.

Polymorphism is the ability to take on many forms. In Java, that means you can perform one tank many ways. An example of that is calculating the area of a shape. You can use the same method area() to calculate the area of a triangle, octagon, or any other shape. There’s also overriding methods where the child class has the same method as the parent class.

Inheritance is gaining the properties of one class to another class. It’s like a parent-child relationship. In Java, a child class inherits all the methods and attributes from its parent class. The vehicle example is a really good one. Vehicle would be the parent class and car and truck would be the child classes. Both car and truck would share the same attributes from vehicle but also have their own attributes as well.

This has been a good review for me and the website really helped me understand what the four OOP concepts are. In the future I hope to apply all of these concepts into my work.

Site used:


From the blog Comfy Blogging by and used with permission of the author. All other rights reserved by the author.

weekly blog (week one)

Hello, Everyone. How are you guys doing?

This past week, I read some articles or news related to CS (Computer Science). I finally picked a topic that caught my attention; engineers create 3D-printed objects that sense how users interact. My reason for why and seeing how choosing this article is because it looks cool and relatable for Gamers to use any controller made of small rubber pieces. 


Short Summary: The researchers found a way to combine sensing capabilities into 3D printable structures made of constant cells, enabling designers to prototype interactive input devices quickly. Even, Formed a new method to 3D print mechanisms that detect how force applies to an object. Or The structures are made from a single piece of material so that they can be rapidly prototypes. Also, A designer could use this method to 3D print “interactive input devices,” as a joystick or a controller.

For accomplishing the goal, the researchers blended electrodes into structures made from metamaterials (The materials split into a grid of duplicating cells). Also, They designed editing software that benefits users develop these interactive devices.

First, The researchers need embedded electrodes because a grid of cells creates the metamaterial. That benefits from the user implement strength to a metamaterial object; cells can spread or reduce with few adjustable interiors. They also take advantage by creating “conductive shear cells,” adjustable cells with two opposing walls made from the conductive wire and two walls made from the non-conductive thread. Even, The conductive walls operate as terminals.

When a user implements strength to the metamaterial mechanism, it running a joystick grip or pressing the buttons on a controller. The conductive shear cells expand or decrease. Even, The distance and overlaying area between the opposing terminals changes. While using capacitive sensing, those adjustments can be measured and used to calculate the magnitude and direction of the applied forces and rotation and acceleration.

For demonstration, the researchers built a metamaterial joystick with four conductive shear cells embedded around the base of the handle in each direction. Also, moving around the joystick handle, the distance and area between the opposing conductive walls change to sense each applied force’s direction and magnitude. By learning how joystick users use strength, a designer could test different handles from shapes and sizes for people with faulty grip strength in specific ways.

Second, The researchers created a sensitivity controller designed to adapt to a user’s hand. When the user holds one of the flexible buttons, conductive shear cells within the structure can diminish and send sense input to a digital synthesizer. Also, This method could allow a designer to instantly create and tweak differently adjustable input devices for a computer.

Lastly, MetaSense, the 3D editor the researchers improved, enables this fast prototyping for a software solution. The users can manually combine into a metamaterial device or let the software automatically place the conductive shear cells in optimal locations. The researchers attempted to make MetaSense straightforward, but there are tests for printing such intricate structures.

From the blog Andrew Lam’s little blog by and used with permission of the author. All other rights reserved by the author.

Introductory Post

Hello everyone Angus here. I’ll be entering my junior year here. I had a great summer break and hope you guys had a good one too. I’m excited to get back to school and start this semester with happy and chill vibes.

From the blog Comfy Blogging by and used with permission of the author. All other rights reserved by the author.

Introductory Blog Post

Hello, my name is Andrew Lam. I am currently a college student getting a CS (computer science) bachelor’s degree. Also, looking forward to the steps and experiences throughout this journey or exciting facts or opinions that could give some feedback or pointers.
Hoping Meeting interesting or any people for common interest as myself

From the blog Andrew Lam’s little blog by and used with permission of the author. All other rights reserved by the author.

Sprint 3 Retrospective

 Links to evidence of activity on GitLab.

This is my frontend user interface for the report team

I updated my frontend from sprint 2 in my local service which I used the sample frontend example from the professor. I have changed the background and move the start date and end date in the middle same as the common website let the user input the login information.

Austin and I connected the backend API to my frontend API, which can let customers download the report for the inventory. It got succeed download the report for the inventory when we connect the API together.

My frontend design idea is based on the Worcester State University style of design. For the background picture and the color use, I followed the handbook of WSU style of design.

I implemented FrontEnd for reporting with the most recent version.

We Made some OpenAPI.yaml files for our FrontEnd and BackEnd.

We looked over TheasPantryReport.

We looked at the new architecture and plan accordingly.

Reflection on what worked well?

In Sprint 3, in terms of what worked well, the second phase was more efficient when team members worked together than ever before in completing the project plan. After a semester of teamwork, we have a deeper understanding of our ultimate goal and become more accustomed to each other’s habits. There will be a relaxed working atmosphere, and the team chemistry will encourage each other to push the project forward. The project progressed more smoothly, and the ZOOM meetings of the team were relatively frequent.

Reflection on what didn’t work well?

As for why it didn’t work out, there is a longer-term vision of the end product and the project’s future goals. Unfortunately, we failed to get the data of other groups. We made test data to run our report program. In addition, the team members were busy with other courses at the end of the semester, so there were some deficiencies in the adjustment of time in the later period. We had some confusion in the front end and back end docking. Through learning external materials and teamwork, we successfully solved the docking problem. Fortunately, we made timely adjustments and promoted the project objectives, and completed the group project.

Reflection on what changes could be made to improve as a team?

As a team with cooperation, smooth communication, and tacit understanding among team members are the basis and key to improving our team’s cooperation level. We would discuss the project after class and give some constructive suggestions about each other’s tasks. Good communication makes our team have chemistry. Through communication and cooperation, we have a thorough understanding of the team members’ tasks. Each knew the other’s project progress would be conducive to the overall advancement of the project. When a team member encounters a bottleneck in a task, we will appropriately slow down the overall progress and communicate with him to buffer his time to complete and push forward the overall task progress.

Reflection on what changes could be made to improve as an individual?

As an individual, I have watched and learned a lot about front-end production after class. It improves my front-end understanding and production skills, which helps my team better connect the front-end to the back-end. In this project, I learned and improved some problems encountered in team cooperation and realized the power of the team in finding and solving problems. In a team, the mutual understanding and tacit understanding among team members is the basic condition for the smooth operation of a team. It was a great honor for me to meet every team member in my last year of university, and I learned a lot of valuable experience from them in ZOOM meetings. At the same time, I am also very grateful to the professor for giving us an opportunity for a big team project, which benefited me greatly. I believe that I will bring my learning experience to my team in future team cooperation projects. Finally, I’d like to thank Worcester State University. It’s my great honor to be a member of the computer major.

From the blog haorusong by and used with permission of the author. All other rights reserved by the author.

Sprint 3 Retrospective

Here is the Link to the repositories that contains everything we worked on Sprint-3. Backend, Frontend, Event system, and Keycloak.

Connect RabbitMQ receive file to DB: Connected the MongoDB database on the received file.

Implement Event System components: Implemented RabbitMq components for Event System.

Meet with other Event System Teams.: Met with other teams to finalize everything about messages.

New TheasPantryReport: The new Theas Pantry Report

Create two channels for both teams: Created two channels for both teams on the send and receive files.


For this Sprint, I worked mainly with Austin on the backend components such as implanting the rabbbitMQ, making API, and trying to get out system working.

What worked well / did not work well

For this sprint, what worked best was that we got our reporting system functioning. We have a system where the Rabbitmq receives the message from the queue and saves it in a database. From there the backend takes the data and converts it into a CSV so when the Frontend requests for a report the backend can send that CSV file to the user. One of the key things that I noticed that our group works well under pressure. We are always calm and composed. I don’t think there is something that did not work well, however, we should have managed our time wisely since the end of the semester was filled with many assignments.

What changes could be made to improve as a team?

As a team, this was our final sprint for the semester. In the future, if we work on this, I think it Is important to use the time wisely as we were up on zoom every night to make little progress towards the project. Also, whenever we had a question, we should have posted more on the issue board or could have asked the professor for more help but as a team, I’m so proud and happy with the way everything turned out towards the end.

 What changes could be made to improve as an Individual?

As an Individual, I should be communicating with my team more rather than just doing the issues that are assigned to me. I should try to manage my time wisely too. The end of the semester was a struggle since there were exams and projects from every class. I believe that we could have made our system more efficient and functional, but it turns out to be what I imagined from the starting. Working together as a team doing one task at a time was efficient for me and as a group.

Overall, this was a great learning experience. I will never forget this class or the reporting team. It was a pleasure working with amazing teammates who pushed me to move forward whenever I was struggling on an issue. I hope that the experience I got from the capstone will be a highlight for my future career in the field of technology. I wish all of you the best of luck and congrats on your graduation. Hopefully one day we can look back and enjoy these moments.  

From the blog Derin's CS Journey by and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Blog – Retreat into Competence

For the last and final blog post in my capstone class, I focused on the apprenticeship pattern of “Retreat into Competence” from chapter two of the book Apprenticeship Patterns by Dave Hoover and Adewale Oshineye. The section talked about perhaps how you are overwhelmed or beginning to realize how little you know, or perhaps you have taken on a new challenge and things are not working out so well. However, getting back into something you are good at is a nice way of regaining your composure. I completely agree with this statement, sometimes all we need a just a pullback to launch forward towards the goal. The quote provided at the beginning of the section is what stood out to me the most. It states that “You look at where you’re going and where you are and it never makes sense, but then you look back at where you’ve been, and a pattern seems to emerge. And if you project forward from that pattern, then sometimes you can come up with something.” This got me thinking very deeply about the past four years of college and my CS Journey. I have no idea what the future hold, but one day I will look back to see where I have been and possibly see a pattern emerge.

The author also mentioned how apprenticeship is a roller-coaster ride, you will experience the thrill of new technologies, but you will also experience struggles as just how little you know compared to the craftsmen and experts you meet along the way. It is important that Sometimes you need to take one step back to take two steps forward. But it is essential to move forwards as quickly as possible because the forward momentum is revealed in your possession of more knowledge and greater skill than you had yesterday. Another important aspect the author mentioned is how to seek support from your mentors, with their support and boost you can be on the right track again and display competence. In this way, you will be more equipped for future challenges. The patterns displayed a lot of insights towards my career and on a personal level. I will certainly be reading more patterns from this book even though this is my last and final blog post for the CS-448 class.


From the blog Derin's CS Journey by and used with permission of the author. All other rights reserved by the author.

Reading list

The most valuable thing you can get out of any book is a list of other books worth reading. Over time, you will find that certain books keep popping up from the “bibliography”, and you should move those books to the top of the reading list. Other books will sink. Since the reading list is essentially a priority queue, you’ll eventually find that some books sink so far down the queue that you may never read them again.

Start by picking a broad book to give you a general idea of the subject you are aiming for. Then choose a few specific books to master the aspects of the topic that interest you.

Reading the right book at the right time will have a better effect. A lot of reading can improve your reading ability. You will also improve your knowledge of the outside world through reading. For computer science, reading a lot of the latest information will be of great help to your future work and research. Reading will improve your horizon and enrich your spare time.

Even if you read a good book on programming every two months, which is about 35 pages a week, it won’t take long for you to gain a deep understanding of our industry and differentiate yourself from everyone around you. — Steve McConnell, Code Complete

Focusing on the classics also carries a risk: you devote too much energy to them, at the expense of more pragmatic knowledge and information that would improve your everyday skills. Make sure to mix classics with modern, more pragmatic books and articles on your reading list.

In practice, algorithmic problems do not appear at the beginning of a large project. Then, all of a sudden, they appear as subproblems when the programmer doesn’t know how to proceed or when the current program is clearly inappropriate. — Steven S.Skiena, Scenario Analysis of The Algorithm Design Manual

From the blog haorusong by and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Blog – Learn How you Fail

For this week’s blog post, I read the section “Learn How You Fail” from chapter five of the book Apprenticeship Patterns by Dave Hoover and Adewale Oshineye. The quote beginning of the section is what stood out to me the most. It says, “Ingenuity is often misunderstood. It is not a matter of superior intelligence but of character. It demands more than anything a willingness to recognize failure, to not paper over the cracks, and to change.” The section talked about how sooner or later you may face failures but the right thing to do is push forward at the boundaries and learn to overlook the mistakes you have faced. In our field, we face many failures but that is not holding us back to accomplish the goals we have set for ourselves. The author mainly talked about becoming conscious of the things that trip you but allow yourself the choice of working to fix the problems that are cutting the losses.

One of the most important things to do when you face failure is to accept it and investment of time and effort to make a small improvement. Allow yourself some time and the “goal is to gain self-knowledge about the patterns, conditions, habits, and behaviors that lead you to failure.” I liked the example the author provided regarding Ade. Ade keeps a set of private wikis listing all his current skill set and limitations, this enables him to pick challenges to push outwards and to stop wasting effort on the wrong things which can lead to failures. This is a great example of something that I need to do for myself. Especially keeping a diary or a blog is helpful as I mentioned in the previous blog post that talked about the “Record What You Learn” apprenticeship pattern. This pattern was very true to me. Leaning from failures is important and you cannot excel at everything but accepting these limitations and learning from the failures or mistakes forces you to acknowledge them and focus on improving them so you do not make the same mistakes again.

From the blog Derin's CS Journey by and used with permission of the author. All other rights reserved by the author.

Automation Testing

For the last and final blog for the CS 433 class, I want to focus on an interesting topic that is automation testing. Nowadays, most companies have implemented automated testing environments. It is the best way to increase effectiveness, test coverage, and the execution speed of software testing. Before I get started, what exactly is automation testing? Well, automation testing or Test automation is a software testing technique that performs using various software tools to execute a test case suite. The automation testing software can enter test data into the system and compare expected and actual results with the generated details test reports. There several benefits of using test automation, it is the best way to increase effectiveness and save money. Other factors include manual testing, which is time-consuming, Test automation does not require human intervention and can run automated tests unattended or even overnight, it is reliable in results, improve accuracy, better speed, and lastly, you can test frequently and thoroughly.

Now let us talk about the different types of test cases that use in automation. While researching a few of them once that I found are High-Risk Business test cases, Test cases that are repeatedly executed, Test Cases that are very difficult to perform manually, and finally, Test Cases that are time-consuming. The way automation testing works is using the pyramid strategy which consists of three levels. According to the blog, the base represents unit testing, then the integration/service layer, the next API testing, and finally the GUI test sits at the top of the pyramid. There are many types of automated testing some of which we learned in class, for example, unit testing, black box testing, regression testing, and even data-driven testing. Automated testing is becoming a popular strategy among many companies, I believe that majority of the companies will implement fully on this technology.

From the blog Derin's CS Journey by and used with permission of the author. All other rights reserved by the author.