Week 7 – Project Update

It’s hard to believe that we are past the midpoint of the quarter and we are closing in on the final weeks of our capstone project!  The past week has been very busy with updates and changes to our app and I’m really pleased with the progress I made.  Here’s a quick overview of where everything stands:

Login and Authorization

This feature is currently working for the most part.  Users can register for a new account and the new account will appear under User Management in the AWS Amplify dashboard.  Currently, we are parsing the user’s email address to create a username for the session which isn’t ideal.  We should be grabbing the user details from Cognito and passing the json down the widget tree, but that still needs to be implemented.

Messages

The messaging system is fully implemented at this point.  Users can start a chat thread with each other and new messages are saved in DataStore.  Because DataStore allows for data stream subscriptions, any new messages that a user sends will automatically and immediately appear in the other user’s app.  The receiver will also receive a notification that they have a new message. New chats can be started by clicking on a button in a sale page and the user will be redirected to the new chat.

Sales

The sales screens are still a work in progress but their basic functionality has been completed.  Users can create a new sale, add an image to the sale, and upload everything to DataStore.  They can go then go back to the sale to make edits or upload a new picture and the changes will be reflected in the app.  Each sale is built in a ‘card’ widget that shows the sale’s image, title, and price.  When the user clicks on the sale, they will be redirected to a detailed view of the sale or to an edit page, depending on whether they are the owner of the sale or not.

Tags

This model class was just recently added to DataStore and is linked to the Sale Model class.  When a user creates a new sale, the title is automatically parsed and each word is saved as a tag.  Each tag is assigned a foreign key that links it to the sale.  With this new model class, we will be able to sort and filter sales based on the tags, much like you would on any online store.

At this point, I would estimate we are about 85% done with the project.  We have implemented all the main features of the app and we really just need to make it look nice and work out some small bugs.  I’m really looking forward to seeing the final product‼

Capstone Project – Week 4

This week I am going to discuss the current state of my capstone project.  Currently, I am working on a page for our mobile app that (1) allows the user to create a new post on Craigslist and (2) shows a list of all their posts currently on Craigslist.  In order to implement these features, I had to do quite a bit of work on the backend of our project.

First, I need to deploy our app on Amazon’s Amplify.  This was fairly straightforward but it required a lot of research beforehand.  Amazon’s AWS is pretty intimidating when your first take a look at it.  There are so many features, tools, applications, APIs, databases, and on and on.  The hardest part is just figuring out what tools you need.  After some research, I decided that Amplify was a great place to start because it is an application that houses many tools under 1, (somewhat) simple interface.  So, after following a step-by-step guide, I soon had our app deployed on Amplify.

The next step was to get our database set up through DataStore.  This was much more involved, and it took many hours of troubleshooting and experimentation to create a connection with DataStore and do CRUD operations.  DataStroe does provide a GUI for defining models and I found this quite intuitive and helpful.  However, I found the instructions for Flutter to be somewhat lacking so I ran into some issues when trying to import the models into our app.  The biggest obstacle was creating a relationship between 2 models in the app and having that reflected in DataStore. 

Finally, I needed to deploy Amazon S3 for image storage.  This was actually quite simple because the guide provided by Amazon is pretty thorough.  I also was able to reference an old project from CS492 that used Google’s Firebase for image storage.  Comparing the two, I was quite surprised by how much simpler Firebase’s code was and how much more was handled behind the scenes with built-in functions. 

Next week I plan to work more on the UI and image display.  Stay tuned!

Capstone Project – Week 3

This week I will again be discussing the current state of my capstone project.  We are officially in Week 3 and things are quickly starting to pick up.  First, my group put together a project plan which outlines the basic layout and approach of our “improved Craigslist” app.  I contributed to the plan by taking on 3 tasks including laying out the backend, setting up our project management system, and making a chart showing the breakdown of labor for the group.

When I first started thinking about the backend, I had a lot of ideas and really only 1 constraint.  That constraint was that we needed to use Amazon S3 for image storage.  After doing some research on Amazon Web Services, I quickly realized that we could pretty much implement our entire backend on AWS.  User authentication, databases, image storage, hosting were all supported by AWS and there was even a step-by-step guide using Flutter.  Perfect!  Next, I needed to decide what kind of database to use – relational or non-relational? For non-relational, AWS supports DynamoDB and for relational, AWS will support a number of different DBs including PostgreSQL, MariaDB, and MySQL.  After discussing the options with my group, we decided that relational was the way to go and I suggested we use PostgreSQL.  I have some experience with that DB and I really enjoy using pgAdmin, which is a tool that allows you to view/edit PostgreSQL tables in a standalone app.  With that, I started putting together an Entity-Relationship Diagram so we have a rough idea of our models and how they related to one another.

Next I set up our project management system.  I decided to use Jira because I have used it in a previous class (CS361) and I thought it was fairly straightforward to use.  I think having a PM system is extremely important because it gives us experience with the Agile/Scrum methodology and let us use a tool that is very prevalent in the SWE industry. 

Finally, I put together a simple chart showing the division of labor in our group.  The chart was separated into 3 areas: frontend, backend, and documentation.  As a group, we decided that we all want to have a hand in each of these areas, so we tried to divide them as evenly as we could.  As the project gets further along, however, I am sure that things will change and each person might focus more on one area than another.  This is expected and it is best that we remain flexible and open to change.

Capstone Project – Week 2

This week I will be discussing the current state of my capstone project for CS467.  Back in March before the class had even started, I made a post on the OSU Online CS subreddit seeking partners for the project.  I figured if I could find other people who were thinking about capstone before the class had even started, they would make great partners.  Pretty soon I found 2 people with similar schedules and ideas about the project, and we decided to form a group.

When it came time pick a project, we were kind of all over the place.  I think everyone had great ideas but once we started to discuss details, we quickly realized that the scope/requirements of the project would require way more than 1 quarter to implement (and likely an entire team of engineers).  Eventually we all agreed to commit to a list of 5 projects that were provided by the instructors and we were assigned the “Help Save Craigslist” project.  I was really happy with this outcome because I knew this project utilized a lot of the knowledge we had learned in web development, software engineering, and databases.  However, it still left room for us to learn more through developing a cross-platform app as a team, implementing user authentication, and utilizing Amazon for backend services.

This week, my group submitted our Team Standards document which lays out…you guessed it, the standards to which we will hold ourselves accountable.  More specifically, we set our project goals, communication expectations, set up a repo, and decided on using Jira for project management.  The next step in the process will be quite a bit more involved as we have to put together a project plan.

Putting together this project plan is quite daunting.  First, we must decide which languages and libraries we will be using.  For the front end, we’ve agreed that Flutter is the way to go because we all have experience with it and it is cross-platform.  At this point, we have not yet laid out the backend and have had little discussion on it.  At a minimum, I know that we will need to implement a RESTful API that allows for CRUD operations on user accounts and a user’s craigslist posts.  Additionally, we will need to incorporate OAuth for user authentication which could be challenging.  Finally, we will need to utilize Amazon S3 for image storage.  Wow – that’s a lot‼

Stay tuned for next week when I discuss how our project planning went!

My Path to CS

Hello and thank you for taking the time to read my blog!  My name is Chris Smith and I live in Colorado Springs, CO with my wife and our 2 Shiba Inus.  I am currently enrolled in my last quarter of classes (woohoo!) at OSU and I am so excited to start my new career in CS.   So how and why did I choose to go back to school and learn to code?  Well, let’s go back to 2019.

At that time, I was working as a Production Engineer with a high volume metal manufacturing company in Los Angeles, CA.  In this role, I did some mechanical design work, resolved issues on the production floor, and made improvements to manufacturing processes.  I enjoyed certain aspects of my job and I worked with a great team of people, but it never really felt like a great fit for me.  I was starting to have real regrets about my career choice.  I was unhappy and I knew I needed to do something else, but what?  I had always been interested in learning to code but I didn’t know where to start and, frankly, I thought it was too late to start.

Then one day I was sitting at my desk, doing a work related task that was very tedious and repetitive.  I thought surely there must be a better way to do this.’  And I knew immediately the answer was to write a script.  But where to start?  What language do I use?  What program do I write it in?  What even is a script??  Well, after some googling on my lunch break, I was fairly confident the answer was to open Notepad and write something in Visual Basic.  Fast forward a couple weeks and many, many google searches later and I actually had a working script!  I demonstrated it to my supervisor and pretty soon he had everyone in our department running the script on their computers.

I felt a renewed sense of purpose and motivation for my job.  If I could automate this task, why couldn’t I automate that task?  And this other one too?  I loved coming up with ideas, finding a solution, and implementing it through code.  Pretty soon, I had written several scripts that had a massive impact on how our department operated.  Without the burden of daily, time consuming tasks, our engineers had much more time to work on meaningful projects.

I looked forward to going to work again and found real satisfaction in contributing to my department through coding.  However, rather than making me want to stay at that job, I knew with all my heart that I needed to leave and pursue a career in Computer Science.  I quit a few months later, got a part time job, and started taking classes at Oregon State.

Going back to school is one of the hardest things I’ve ever done in my life.  The fear of failure, the uncertainty of the future, and leaving a career behind is a lot to take on mentally.  But with each class I’ve taken, I have become more excited about starting my next chapter in life and I am more confident than ever that I made the right choice.