CS 467_Week 8

We are near the end of my capstone project! We have our MVP ready, and I get to enjoy cleaning up our code and testing our Citizen Science mobile app. My teammates are amazing and now I get to do some more styling and I have time to work on our style guide. So I’ve spent the last week standardizing our buttons and interactive elements based on the Material Design guide. With my remaining budgeted time for this project, I’ll look into Material Theming and be supportive to my teammates in finishing the MVP for the website.

I’m less than 2 weeks away from graduating. My younger self would not have believed that I ended up with a CS degree. However, my younger self would be delighted that I’m choosing my own path. I would now tell my younger self that it’s okay to be lost along the way and those lost moments ended up being motivations. I’m grateful that I got to work in healthcare administration, nonprofit boards, public health advisory, health equity strategic planning, and volunteer management. The past decade of experiences and connections led me on international trips in improving health through nutrition. I got to visit villages in Nepal, Indonesia, and the Philippines with healthcare providers and community health champions. It took me three trips to Nepal to understand what it means to empower people halfway around the world. It starts with spending time with the people on the ground and listening to their stories. Through those stories, I get to glean about their interests and aspirations. I remember feeling empowered by the female community volunteers who asked if I can teach them how to use a laptop because of the presentation that we showed at a meeting about the importance of nutrition in pregnancy. She showed me her bag filled with flipcharts, pamphlets, and her own training materials. She told me that she traveled to the city and got all the written materials to teach her village. Sometimes, she had to walk a long distance to teach people. Back then, I wasn’t even good with design and tech tools for education. But I knew I wanted to do something about it because my family has always valued education.

Since 2010, I accepted various volunteering opportunities with the international nonprofit to figure out digital solutions to improve health through nutrition for Nepal, Indonesia, the Philippines, and Guatemala. Along the way, I come to realize that I enjoy coding and I’m fascinated by design. I’ve become more curious about how we can use technology for good, especially tools for community health volunteers and nonprofits to deliver quality and accessible health education. It’s also more than technology, it’s about the people and their communities. So a CS degree is another beginning for me. Now with time and resources on hand, I’m looking into recruiting more talents to join the Global Nutrition Empowerment tech team.

Thank you. Dhan’yavāda. Salamat. Terima Kashih. Gracias.

M: Z

CS 467 _Week 7

Welcome to week 7 of my capstone project at OSU. Let’s recap on our progress in building the UI for the Citizen Science app. We have talked about 6 screens for the mobile app, which means I have 3 more screens to blog about. In week 4, I blogged about the Registration screen and Login screen. Week 5’s blog talked about the Landing screen and the Join Project screen. Last week (6) was about the Project Explanation and Manage Observations Screen. Let’s finish up with the last 3 UIs for our mobile app. 

Since we are not limiting the number of observation questions that the teacher would like their students to submit on the mobile app, our team decided to add the DisplayLabelsScreen to focus on displaying the questions and data type of the current project. This updated design made the Project Explanation screen cleaner as the UI focused on displaying the project’s image, project name, project description, “Read Project Requirements” button, and “Manage Observations” button. Clicking on the Read Project Requirements button routes user to the project questions screen. This screen consists of an app bar, a scrollable linear array of the List Tile widget as the primary content of the scaffold, and a floating action button. The app bar has the icon button with the back arrow that pops the user back to the Project Explanation screen when pressed. We used the ListTile to display each of the current project’s questions as the primary content of the list tile (title), and the question type as additional content (subtitle). We added padding on all sides and used the material design divider between the list tiles to visually differentiate each of the questions and their associate question types. We added the “Manage Observations” floating button to make it easier for the user to start working on their observations. Without this button on this screen, the user would need to go back to the Project Explanation screen and click on the “Manage Observations” button there. 

The user can access the Add Observation screen by clicking on the Add Observation button on the Manage Observations screen. The focus of the Add Observation screen is to prompt the user to enter and submit their observations for the project. In other words, the screen displays the question and provides an appropriate input field to capture the user’s entry, and a submit button. We used the Form class to group multiple form field widgets [1]. We used the SingleChildScrollView so that the form can be scrolled vertically so that we can make sure all of the questions and input fields are being displayed in single-column format. We designed the UI to look like a card with the rounded upper left and upper right corners. We simplified the screen without the app bar and placed the close icon that allows the user to close the Add Observation screen if they want to exit out or discard their inputs. We set the screen’s background to our theme’s background color (turquoise) so we can emphasize the white-colored card. Our minimum viable product did not include a save button. The Add Observation card displays the text “Add Observation” and the eyes emoji at the top of our container. We show the current project’s name so that the user doesn’t have to remember which project they are working on. The Submit Fuschia-colored button is located at the bottom of the form. Clicking the submit button writes the user’s input data to our project’s Firestore data collection named ‘observations’. Upon successful completion, we pop the Add Observation screen off the navigator, which routes the user back to the Mange Observation screen. So that the user can easily add another observation, edit, or delete their existing observations on the project. 

When the user clicks on the blue-colored edit icon on n the observation tile displayed on the Manage Observations screen, it routes the user to the Observation Details screen. The observation details screen has the same layout as the Add Observation screen. We bolded the text “Update My Observation” with a sparkle emoji to inform the user that they are about to Update their observation. The Submit button is now the “Submit Update” Fuschia-colored button located at the bottom of the screen. When the user clicks on the “Submit Update” button, we use the update() method to merge the data from the updated fields with the existing document data [2].  

We now have a functional MVP that meets the requirements for a cross-platform mobile app that enables students to collect observations for a Citizen Science project. We kept our UI simple for all of our project’s required screens. There is still some more work to polish the UI, but we are ahead of schedule. Our team is working on one of our stretch goals for the app to support students in taking pictures and uploading pictures with their observations. 

CS 467_Week 6

Continuing from last week’s post, once the student joined the project successfully by entering the project code that they got from the teacher. The student can view project details by navigating to the Project Explanation screen. In our initial prototype, we intended the Explanation screen to display relevant project information (project name, project description, and observation questions that the teacher wants the student to answer). The design strives for a simple interface; the UI displays relevant project information to help the user understands how her/his observation can contribute to the project. We have our custom Fushia-colored button at the bottom of the screen to prompt the user to start their project observations. Clicking on this button routes the user to the Manage Observation screen. We could route the user to add the Add Observation screen directly. We decided to implement the Manage Observation route. This is because we can group relevant actions that are important to the user, such as adding new observations, editing observations, and deleting an observation on the user’s Mange Observation screen. Our team discussed early on that the entity-relationship between the Student and Observation entities is one-to-many. One student can have multiple observations.

Our app’s Project Explanation Screen shows a Scaffold with an app bar and a body. The app bar shows the home icon (route user to the landing screen), the screen name (inform the user where they are on the app), and a log-out icon. The body of the explanation screen is a container that contained a Listview of widgets. The linear array of widgets includes the close button icon, our custom ExplanationCard widget, and a button widget. The ExplanationCard widget makes it easy for us to style the explanation card, and we can pass the project name and the description of the project to this card’s constructor. We have a button to display the “Manage Observations” as the button title, and it routes the user to the Manage Observations screen when tapped.

The Mange Observations Screen displays all of the observations that the student has submitted on his/her project. The simple app bar is displayed at the top of the Scaffold. In the body of the Scaffold, we wrap the close icon button, our custom explanation card, and our getBody widget in a ListView. To make our screen a bit more stylish, we wrap the ListView in a container so that we can decorate it by rounding the corners for the top left and top right. We can also set the margin on the top so that the container appears like a simple card. We use our custom Explanation card to display the project name so that the students know which project they are managing their observations. The getBody widget returns a StreamBuilder so that our UI can be rebuilt from the latest snapshots of a Stream. This way, we can access our project’s observations collection on Firebase Firestore, and we can query the data by descending date so that the student’s observations are displayed with the most recent submission on top. Our build strategy returns the ListView builder, and we display each of the user’s observation data in our ObservationCard widget in a linear and scrollable array. Our ObservationCard includes a title, subtitle, a blue icon button for editing, and a red icon button for deleting. When the user clicks on the edit icon, it routes the user to the Observation Detail screen. When the user clicks on the delete icon, we have an AlertDialog to confirm the deletion by showing a message “Are you sure you want to delete this observation?” We included a TextButton for “Cancel” and a TextButton for “Yes, Delete.” When the user clicks on the cancel button, we use Navigator.of(context).pop() to route the user back to the Manage Observations screen. If the user clicks on “Yes, Delete” then our onPressed function deletes the observation document from our Project’s Firestore database. We also route the user back to the Manage Observation screen. If the student doesn’t have any observations submitted on the project, we return a Text widget that prompts the student to “Tap the Add Observation button to add a first observation.”

Not too bad right? That is it for this week’s blog. I’ll blog about our Observation Details screen next week then.

M:Z

Resource: 

  1. Scaffold class – material library – Dart API 
  2. ModalRoute class – widgets library – Dart API 
  3. MaterialButton class – material library – Dart API 
  4. StreamBuilder class – widgets library – Dart API 
  5. https://api.flutter.dev/flutter/dart-async/Stream-class.html 
  6. showDialog function – material library – Dart API 
  7. AlertDialog class – material library – Dart API 

CS 467_Week 5

What to blog this week? Start with the self? I need to admit that I need more time to find my blogging style and figure out how to write with purpose. Why? I’m fascinated with people who can express themself authentically in this world filled with noise and distraction. My blogging journey started a month ago as my class requirement, which I dreaded more than I care to admit. Let’s not get too curious about that at this point. Let’s reset on a positive note, blogging has becomes a rewarding experience. It got me curious about my thoughts and writing process. That is not the intention of this week’s blog either, let’s move on.

At the end of my last blog, I planned to talk about our mobile app’s landing screen and the Join Project screen. Since my teammates got the admin website’s add project (part of the project requirement) working with test data, most of the functionality on the student’s side (authentication with metadata), and using Firestore Database to back our data from the Citizen Science’s admin website and the student’s field app. I got busy focusing on implementing our UI. For the landing screen UI, it serves as the home screen after an existing user logged in (or upon a new user’s successful registration). It displays a simple app bar (home IconButton and log out IconButton) that extends StatelessWidget (immutable). The body of the landing screen is a Widget that returns a placeholder text to welcome the user if the user doesn’t have any project ids after fetching project data from our Firestore collection named ‘projects’. We use ListView.builder() to display a linear array of ListTiles if our query has data. ListTile is a fast way to set the project name, and we can also set the subtitle property of the ListTile to any text. In our case, we set our subtitle to ‘View Details’, so that the user sees that this ListTile is an interactive element. We use the onTap property to route the user to our Project Explanation screen when the user taps on the ListTile. Since we want to support our users in contributing to multiple Citizen Science projects, we made our ListTiles scrollable, which our ListView can handle. To prompt the user in adding a project, our UI implements a material design floating action button. It was easy to set the icon, label, and background property of the floating action button. We had the onPressed property routing the user to our Join Project Screen.

The Join Project screen was designed to look like a pop-up card, so we return a Scaffold with a body. This is the most basic layout structure, and it gets the job done. We aligned the close button to the upper right corner of a container so that it’s easy for the user to close/exit out of the Join Project screen. When the user clicks on the x icon, it pops the user back to the landing/home screen. We kept the Join Project screen simple by only displaying the “Join a Project” text, and we tag on the emoji key because emoji is fun and easy to show on the screen. Next, TextField for the user to enter a project code. Oh, style time! Let’s decorate this TextField with hint text “Enter the project code here”, enabled order with a blue-grey border outline. Onto our fuchsia-colored submit button, it shows the word ‘Submit’. When the user clicks on the submit button, it calls the async function that looks up and validates the project code on our Firestore database collection. Upon success, it routes the user to the landing/home screen. This routing decision is for a minimum viable product that allows the user to enter additional project codes from the landing/home screen’s Add Project button. We had a note to consider routing the user to the Project Explanation screen. This route might work better for the student to read about the Project Explanation and get started on the project after they signed up for the project. Let’s see what the team decides. We might have enough time to implement more features and support students in entering multiple project codes on the Add Project Screen. We are midway through our project and still need to focus on our MVP, so we are not introducing any major change to our prototype that meets our client’s requirements.

This course requires 8 blog posts, so I’ll hold off on our app’s Project Explanation Screen and Manage Observations screen in blog 6. See you next time then!

M :Z

Resources:

CS 467_Week 4

Hey there!

I’ll continue to talk about my capstone project and relevant class assignments. We received our grade for the Create Project Plan with positive comments from the TA. Over the past week, our group has been advancing at a steady pace in completing our development tasks. My teammates and I remain active on our MS Teams group channel in sharing our progress at the end of our independent work sessions. In a way, our short posts on the MS Teams channel serve as our “stand-ups.” I find these short posts helpful when I need to compile my weekly standup, which is graded in our capstone course. Overall, I’m liking our agile practice and the pace.

While my teammates have been working on the Citizen Science Admin website and getting our project connected to the Firestore Database for reading and writing data, I’ve been focusing on the cross-platform mobile app (Flutter framework, Dart programming language). The majority of my tasks have been centered around building layouts, interactivity, navigation, and routing of the screens. Since the mobile app needs to register new users, authenticate existing users, and read from and write data to our project’s Cloud Firestore. It’s a good thing Flutter and Firebase have quite a few tutorials (resources at the end of this post). On my end, it was not bad at all setting everything up, even though I had to reinstall Flutter and update Android Studio on my PC. It helps that one of my teammates is familiar with Firebase. So, we added firebase_core for Firebase Flutter plugins, firebase_auth for Firebase’s authentication, and cloud_firestore for Cloud Firestore data storage. Then we logged into our Firebase console and enabled email/password to the Sign-in providers. Simple!

Now the fun stuff happens with using starter codes from tutorials. In our app’s lib/main.dart file, we initialized WidgetsFlutterBinding with Firebase. Then we called the createUserWithEmailAndPassword() method in our app’s registration_screen.dart file to register new users. We were able to implement a createUserStudent() async function that writes the registration data to our project’s Firestore collection for students. In our login_screen.dart file, we used the signInWithEmailAndPassword() to authenticate existing users.

We kept our registration screen and the login screen simple. For our registration screen, we were able to achieve a clean form look by using the Text widget to display a welcome message and a confetti emoji. We used the TextField widget to prompt the new user to type a username, first name, last name, email, and password. To make things pretty, we used the InputDecoration widget to set the border and radius. Since we created a Fuchia-colored button widget, we can pass our async function for the createUserStudent(), and then route the registered user to the landing screen. We also created a ClickableText widget that makes the text “Already have an account? Login” clickable. When the user clicks it, it routes the user back to the Log in screen. We also included a material design close button at the upper right corner to support the user exiting the registration screen. We also wrapped our widgets in a ListView and set the shrinkWrap property to true, so that it will only occupy the space it needs on the screen.

For our login screen, we don’t need a scrollable list of widgets. We simply wrapped our widgets in a Column. The login UI consisted of the following widgets: Text to display the welcome text and a hand waving emoji (our attempt to make the app looks friendly), SizeBoxs to better space the widgets, TextFields to prompt the user to enter email address and password, customized MaterialButton to display our Fuchia-colored login button. When the Login button is tapped by the user, it authenticates the user and then routes the user to the landing screen. Luckily, we defined routes in our main.dart file, so we can use the Navigator.pushNamed() to push our named route (LandingScreen.id) onto the navigator (see resource 6 about the Flutter widget Navigator pushNamed method). Like the registration screen, we used our custom ClickableText widget to display the text “Don’t have an account? Register now” in blue color. When the user clicks on this text, the Register screen will appear. We made this happen by pushing the RegistrationScreen.id onto the navigator and routing the user to the Register screen. Not too bad.

Okay! So we got the firebase authentication working in our Flutter app. The mobile UIs are looking nice. I’ll blog about our mobile app’s landing page and join project screen next week.

Adelante!
M :Z

Resources: 

CS 467_Week 3

Welcome to my Blog Post #3! As promised in my last post, let’s dive right into the OSU CS467 Capstone Create Project Plan, and let’s talk Figma. As most CS students should know that one must start the assignment early, and our team sure started as soon as this assignment was released. Our team was consistent over the past 11 days in working asynchronously and synchronously on our project plan. Our final document was 15 pages (no double spacing, but plenty of graphical examples). For this project, it’s more than fulfilling our grading rubric, our group fundamentally wants to create a solid and practical plan. From the past two meetings and group messages, I see that my team members are organized, and they are thoughtful with their contributions. I love the energy and I am grateful for being in this group. 

Ready for some Figma fun first? I have been introduced to Figma outside of school about 1.5 years ago when my nonprofit tech team needed to design and prototype fast. Recalling my time before using Figma, my teammates and I were using graph papers to draw out the UI screens. Although we still use graph papers for quick in-person sketching, I prefer to use Figma for designing mobile app interfaces and prototyping designs. I like the ability to quickly animate and share prototypes, especially with all of the plugins ready for integration with just a few clicks away. The prototype interactions help me see whether the interactions on each UI frame will meet our user’s stories and their intended actions. I’m a visual person and need time to reflect, so seeing how the screens are connected on the Figma prototype flow has been valuable for me, especially before I spend any time on coding. The Comments collaboration tool in Figma is good for me to note my thoughts for other members’ input on the design and prototype directly. I can easily sort, filter, and resolve comments to keep me on track. Overall, I value any tools that can help me be more organized and productive. I have not used Figma for wireframing or as a graphic design tool. I’ll need to check those out later, along with FigJam as a brainstorming tool. Fun stuff ahead. Now, it’s time for me to blog about this course’s Create Project Plan assignment. 

Our project plan consists of 10 sections. It starts with a short introduction on what we want to accomplish for the target users, a sentence on our team member’s experiences that are relevant to the success of the project, and our motivation to launch a minimum viable product in 3 months. The User Perspective section addressed the 2 main target users (K-12 students, teachers) and our client (our course’s instructor). Now that we know our users’ perspectives and the requirements, we can flow into the Software section to document our thoughts on the software structure. In our Requirement section, our team discussed and agreed upon using React website that will be deployed via Firebase, Flutter environment, Firebase libraries, and backend for both website and app. Now onto our thorough description of our Initial Plan that includes implementation notes and a schedule. This section involved each team member’s full participation, including writing and reviewing User stories, data models, and prototype plans. Each team member took the lead in their interest area. We summarised our Initial Plan section with team members’ plan to focus on functionality and then styling. The Team Member Tasks took the longest to complete, and we ended up working on this section at our weekly Saturday meeting. This made sense as we wanted to share and go over our tasks weekly, and most importantly, synchronize our tasks to support each others’ deliverables. Now onto the Graphical Examples section that includes our NoSQL Entity Relationship Diagram, screen captures of our admin website prototype for teachers, and screen captures of our field app for students. We can now wrap up with a Conclusion section, and of course, we must end with the Appendix and References.  

Wow! You made it through to the end of the blog. Feel free to leave me a comment if you have any input about Creating Project Plan. I think it’s pretty standard, and as students, we follow instructions and prompts from our course instructor. Overall, this is one of my favorite group assignments throughout my CS journey at OSU. Perhaps it’s because I’m interested in this project and I have good teammates. 

Planning for my next post, I’ll blog about our assignment for the Standup discussion. I’ve started working on the mobile app so I’ll talk more about it then! One more quick note, I was able to get my daily meditation on most days, and I got some fantastic workouts in on Sunday. Maybe I should make Sunday my workout day from now on. 

Be Well, Be you, Be present, 

M :Z 

“What we know matters, but who we are matters more.” Brene Brown. 

CS 467_Week 2

It’s the middle of week 2 of the Spring term, and time to blog about my capstone project. First, let me do some general reflection. Since my “first” post last week, I’ve been thinking about this course’s blogging assignments, and how I could use this opportunity to improve my writing. I had to re-read our capstone course’s exploration of blogging and re-evaluate my effort and purpose in blogging. It seems that a good blogger can connect with her or his target audience authentically on a topic. Now, I’m a bit intimidated by the idea of blogging on a relevant and interesting topic that can be of value to a target audience. 

I’ll keep things simple for now. I’ll blog to reflect on my weekly coursework and share progress on the capstone project. If I don’t get too distracted and time permits, then I will share my journey on restarting my meditation and exercise routine. Maybe blogging about meditation and exercise will help me connect with readers who are attempting to find balance in their life. I was committed to meditating for 365 days, but I only made it to 180 days before my routine was disrupted. Once my meditation was halted, then my exercise routine stalled as well. It took a lot more effort than I thought to restart the process. Let me focus again here (deep breath – counting to four). 

Capstone project update: My capstone project is to build a user-friendly platform that supports teachers and K-12 students in doing Citizen Science. More specifically, an admin website for the teachers and a cross-platform field app for the students. I’ll be working on the Citizen Science App for Kids with two classmates. I’m impressed with my teammates’ prompt responses and professionalism. One of my teammates is working as a senior backend developer. The other teammate is working as an Engineering Manager on frontend web development. I might be in luck with these two teammates because they have skills that I could learn from throughout the project. I’ve been mostly focusing on app development outside of school, and have I shared how much I like UI/UX design? Anyways, I’m excited to put my interest to work. It will be good for me to improve my technical skills, especially in programming languages. 

Yes, I’m definitely in luck with my teammates. I love their promptness and focus. Within a few hours of making our introductions to our OSU Canvas group, we started collaborating on a Team Standards google doc and scheduled our weekly meetings for the term. I’m so used to google docs now, and it’s becoming a must for me when working with other editors. Our team members decided to use MS Teams for asynchronous communication and our weekly meetings. As a side note, I prefer Discord because it’s easy to toggle between different servers and organize Text Channels as needed. I’m okay with MS Teams since I use it for my work daily. Our project group created a private channel on Teams; We organized our communication via conversation threads on the Posts tab, and relevant files are uploaded on the Files tab. We initiated a GitHub repo for the mobile app and a repo for the web admin site. To make our lives easier, we decided to use Firebase for backend infrastructure. While one team member added our project on Firebase, another team member quickly created the team’s workspace for prototypes on Figma.  

On Sat, 4/2, we had our first video meeting. The meeting took an hour as planned and was effective in addressing agenda items. We discussed design and development tasks, including planned tasks on user stories, layouts design, and the overall development process to ensure the project and team success. We have our work cut out for us. My next major task is to prototype the admin website and mobile app after receiving the user stories. I can’t wait! I’ll blog more about prototyping using Figma next week. I’ll also share more about our Project Plan that is due at the beginning of week 3. 

Cheers!

M: Z

Out of clutter, find simplicity. From discord, find harmony. In the middle of difficulty lies opportunity.” Albert Einstein

CS 467_Week 1

Hello world!

This is my first blog ever, so let’s get started. It’s Springtime and I finally made it to my final term at OSU for my CS degree. This journey took longer than I thought. I was planning to power through the post-baccalaureate program in 2.5 years but ended up taking almost 4 years to finish this degree. I’m so glad that I wasn’t in any rush to complete this program and I was able to work, learn, explore, and adopt a new timeline along the way. I’m grateful to be able to go back to school and learn something out of inspiration and curiosity about using technology to do good. There have been a lot of disruptions and unknowns throughout the COVID-19 pandemic. Being in school and keeping my full-time job helped me stay grounded. With my established routine, I found myself more productive and creative. I think I’ll miss being a student, and I find myself wondering whether I should seek another degree.

This blog intends to share my journey for the OSU Online Capstone Project (CS 467). So let me focus a bit here. This is week 1, assignments include taking a syllabus quiz, posting an optional introduction on the Canvas Discussions, choosing a project for the term, blog post 1 (here), and making a Team introduction. The syllabus quiz was straightforward, and it took me a minute to answer the questions. I made my optional introduction, and most of my classmates did so as well. Most of my classmates sound excited about graduating soon and there are quite a few postings including their new job positions secured. It was encouraging to read through the diverse positions in tech. A quick search on google returned 776,615 tech jobs (NEW AS OF March 27, 2022) on Indeed.com. Although I’m not in any rush to land a tech job since I decided to stay in my current job a bit longer, I feel a bit unsettled about the next chapter of my career. I hope to blend technology into my experience in health care, health education, global health, and nonprofits.

For choosing a project for the term, we had to fill out a survey and mark 5 projects of interest from the EECS project portal. The “Citizen Science App for Kids” was my first choice because it most matches my aspiration to build an engaging platform to support education. For my second project choice, I selected the “Crowd-sourced Fitness Challenge App” for my positive experience in using fitness and wellness apps throughout the pandemic to keep myself healthy. I enjoy designing and coding apps for learning purposes, so the “Crowd-sourced Immersive Language Learning App” would be a fun project. I have been meaning to learn game dev for a year now, so this capstone could ignite my game dev journey. However, I need to focus on becoming a better app and web developer. I’ve planned to launch a cross-platform health education mobile app and revamp a nonprofit’s website by the end of 2022. So it would be smarter for me to work on a capstone project that help me improve my app and/or web dev skills. The EECS projects, “Create a web or mobile version of a Climate Change Board Game” and the project “Software Programming Quiz” look like a good fit, so I picked those as my options 4 and 5. On the project survey, we have the option to form a team with two other classmates. I ended up selecting not having teammate preferences. Now it’s wait time if I get my top project choice and to meet my new teammates.

Until next time,
M:Z

“The way is not in the sky. The way is in the heart.” Unknown.