<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: pwong09</title>
    <description>The latest articles on DEV Community by pwong09 (@pwong09).</description>
    <link>https://dev.to/pwong09</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F751576%2Fe6d175e0-f805-4acb-8443-5af0c4403dde.jpg</url>
      <title>DEV Community: pwong09</title>
      <link>https://dev.to/pwong09</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pwong09"/>
    <language>en</language>
    <item>
      <title>Minesweeper</title>
      <dc:creator>pwong09</dc:creator>
      <pubDate>Mon, 25 Apr 2022 00:56:05 +0000</pubDate>
      <link>https://dev.to/pwong09/minesweeper-1jl7</link>
      <guid>https://dev.to/pwong09/minesweeper-1jl7</guid>
      <description>&lt;p&gt;I recently finished my first web browser game during my third week of General Assembly's Software Engineering Immersive boot camp. For our first project, we were required to make a browser game using the DOM. I used strictly HTML, CSS, and JavaScript to complete this project that is hosted via GitHub Pages &lt;a href="https://pwong09.github.io/minesweeper/"&gt;here&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jfWHwCxJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/swl2qz3npxu53lvck7qc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jfWHwCxJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/swl2qz3npxu53lvck7qc.png" alt="Image description" width="361" height="329"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;During our week-long development, I learned a lot of new things about coding and about myself. To name a few:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I really enjoy writing pseudocode. It helps me think about how to approach a function - usually breaking it down to a conditional check or a type of loop. &lt;/li&gt;
&lt;li&gt;I struggled with conceptualizing certain parts of my game - and it helped to draw it out on a piece of paper.&lt;/li&gt;
&lt;li&gt;I crave concise, clean code. Maybe a little too much, to the point where someone else might not be able to read it easily.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anyway, overall I had a lot of fun making my minesweeper game. Growing up, I loved playing minesweeper on my brother's PC. I didn't understand the inexorable logic behind it until much later in years though. And I certainly didn't think I would ever write the code to this game!  &lt;/p&gt;

&lt;p&gt;I won't go into too much detail because you can see all the code and commits history on my GitHub repo &lt;a href="https://github.com/pwong09/minesweeper"&gt;here&lt;/a&gt;. But I want to mention some of my favorite pieces of code that took quite a while to think about, and only a few minutes to type out, then hours of endless manual testing! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5-e0PyiR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v16jdxmkcvsngwx4aat6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5-e0PyiR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v16jdxmkcvsngwx4aat6.png" alt="Image description" width="416" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of my first stumbling [code] blocks was the placeNumbers function. There was a mental disconnect between me and my code of how to place the correct number to denote how many bombs were adjacent to a square. I kept at it for hours, until I finally made a "simple" switch of the conditional. Originally I checked to find the bomb, and I switched to checking to find the safe square. As soon as I did that, everything fell into place. My original logic of incrementing numbers had been right. I just need to flip the type of square I was looking for!&lt;/p&gt;

&lt;p&gt;I also hold a soft spot for my next function: checkNeighbors. I wanted to have a larger reveal of safe squares per click because it was coming tedious to test my game while clicking every single square. I started with a recursive function - and it worked! To a degree. It worked perhaps a little too well for my tiny 8 x 8 board. So I decided to revert it to a regular function. And I hunkered down to refactor the list of conditional checking down from 8 lines to just 3 using the assignment operators, &amp;amp;&amp;amp; and || . It was a lesson well worth the 3-minute read on &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators"&gt;MDN&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Finally, when I had achieve my Minimally Viable Product. I focused a majority of my free time on fixing a 'bug' I thought I had. As an iPhone user, I realized very quickly that my contextmenu event listener wasn't working. I had assumed it didn't work on any devices. Thankfully, a classmate offered to test my game on his Android phone and confirmed the contextmenu was in fact working - just not on iOS.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hJJcqnyH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/80hwg8vpesmko3dq4e35.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hJJcqnyH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/80hwg8vpesmko3dq4e35.png" alt="Image description" width="396" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With that feedback, I took a deep dive into iOS touch and hold. Reading and re-reading the Touch object documentation on &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Touch"&gt;MDN&lt;/a&gt;. Finally, after much experimenting and also reading Stack Overflow, I came up with the touch functions that allowed me to touch and hold a square to add a flag on my iOS devices. I can't report honestly that I am some Touch expert right now, but I am happy with what I was able to accomplish with my current knowledge base.&lt;/p&gt;

&lt;p&gt;I hope to make more updates to my game as I learn more JavaScript and other tools to make this minesweeper as fun and as intuitive and accessible as possible.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>codenewbie</category>
      <category>github</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Boba Database!</title>
      <dc:creator>pwong09</dc:creator>
      <pubDate>Sat, 22 Jan 2022 22:34:46 +0000</pubDate>
      <link>https://dev.to/pwong09/boba-database-1b9p</link>
      <guid>https://dev.to/pwong09/boba-database-1b9p</guid>
      <description>&lt;p&gt;Continuing on the Computer Science Pro track on Codecademy, I just finished the Databases module which was taught in PostgreSQL. For my 3rd portfolio project, I made a database from scratch for boba! &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The requirements were:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Research the topic of your choosing to create a entity relationship diagram for your database&lt;/li&gt;
&lt;li&gt;Create the schema of the database using PostgreSQL&lt;/li&gt;
&lt;li&gt;Populate your database with some data&lt;/li&gt;
&lt;li&gt;Update your database to ensure your data stays intact. This could include adding constraints and roles&lt;/li&gt;
&lt;li&gt;Update your database to ensure your database stays fast. This could include adding indexes, normalizing your database, and actively monitoring and maintaining your database.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bBnEWAMu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h65xj2dthbkkz8jox2ir.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bBnEWAMu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h65xj2dthbkkz8jox2ir.jpg" alt="2-d rainbow boba, artwork by Katie Rainbow, source: unsplash" width="880" height="294"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;A week or so ago, Codecademy had assigned a similar project. So I already had a starting boba database that would be perfect for Objectives #3 and #4. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Original Database&lt;/strong&gt;&lt;br&gt;
When I first brainstormed how I wanted to set up the database, I thought about what main purpose I wanted it to serve. We already have Google Maps which contained all the relevant info of where boba shops were and when they would be open. But I realized it was a little harder to search for a specific boba drink. What if I was in the mood for boba with agar agar pearls? I knew from experience to go to Gong Cha. But what if there were no Gong Cha around? (Believe me this happens sometimes!). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, the purpose of this database is to make it easier for people to find a specific boba drink.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I started with a quick list of the tables I would need:&lt;br&gt;
shops, drinks, toppings&lt;/p&gt;

&lt;p&gt;I decided to make a separate schedules table because I thought the info would be hard to edit, or query, if it was just stored as one text column in the shops table. &lt;br&gt;
I also made a menus table and a menus_items table to address the many-to-many relationship between drinks and shops because I assumed there would be overlap. Drinks like classic milk tea could be found at multiple stores. Toppings like pearls, lychee jelly, etc. would not be specific to one store either. &lt;/p&gt;

&lt;p&gt;After making these tables, I inputted three shops and parts of their menu to test out the queries. That was the end of the initial project requirements from Codecademy (Objectives #1 to #3).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v1 schema:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://dbdesigner.page.link/mNtY4XqKyuy1Ss4Y7"&gt;https://dbdesigner.page.link/mNtY4XqKyuy1Ss4Y7&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improvements / Changes&lt;/strong&gt;&lt;br&gt;
After the initial database was done, I continued through the rest of the Database module - learning things like indexes, security, storage and speed, etc. &lt;br&gt;
I realized I was probably making my database too complicated - especially on the data entry side. I was inputting a menu id, drink id, and topping id into menus_items which resulted in a lot of unique drinks that were probably not necessary to someone's search. (Does anyone really need to know all the possible combinations for a classic milk tea and more?)&lt;/p&gt;

&lt;p&gt;I also received feedback from a vegan friend who was more interested in knowing which shops offered dairy alternatives. &lt;/p&gt;

&lt;p&gt;I started with a dairy_alternatives table that was sort of like a menu add-on. That made me realize I should have treated the toppings table as a menu add-on too. &lt;br&gt;
I decided to scrap the whole menus_items table and made three separate tables to address the drinks, toppings, and dairy alternatives (if any). &lt;/p&gt;

&lt;p&gt;In this new schema, people can still search for drinks. The toppings and dairy alternatives would just be separate searches. I figure this setup would be more useful and help manage storage over time (imagine I was actually trying to put tons of shops' menu data into this database rather than just 10 shops' data). &lt;br&gt;
Anyway, you can check out the schema and code below where I also did some EXPLAIN ANALYZE for query searching as well as looking at storage use and indexes. I know I have a long way to go, but hopefully this second version is an improvement on my original database! &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v2 schema&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://dbdesigner.page.link/DWgXQcZ1tWev71kLA"&gt;https://dbdesigner.page.link/DWgXQcZ1tWev71kLA&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/pwong09/postgreSQL/tree/main/boba_database"&gt;https://github.com/pwong09/postgreSQL/tree/main/boba_database&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wi_iHKZy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h8hr1dfroj0cnr54c98n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wi_iHKZy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h8hr1dfroj0cnr54c98n.jpg" alt="two glass milk bottles of boba, photo by Rosalind Chang, source: unsplash" width="880" height="756"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>database</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Book Recommendation Software</title>
      <dc:creator>pwong09</dc:creator>
      <pubDate>Mon, 20 Dec 2021 19:02:04 +0000</pubDate>
      <link>https://dev.to/pwong09/pearls-book-recommendation-44gb</link>
      <guid>https://dev.to/pwong09/pearls-book-recommendation-44gb</guid>
      <description>&lt;p&gt;I just finished learning Codecademy's Computer Science: Data Structures &amp;amp; Algorithm module. To end the module, I had to create a second portfolio project - a recommendation software.&lt;/p&gt;

&lt;p&gt;The requirements were:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Store data in a data structure&lt;/li&gt;
&lt;li&gt;Use an algorithm to sort or search for data within a data structure&lt;/li&gt;
&lt;li&gt;Use Git version control&lt;/li&gt;
&lt;li&gt;Use the command line and file navigation&lt;/li&gt;
&lt;li&gt;Write a technical blog post on the project&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I considered what types of recommendation software were out there, and I decided to keep my scope relatively narrow. I work at the dining table, so I thought it would be easy and fun to simply turn around and input a few random books on my bookshelf and make book recommendations to people (i.e. my partner). &lt;/p&gt;

&lt;p&gt;I love to read, and I recently had to cull some beloved books when my partner and I moved from coast to coast. So the books currently on my bookshelf are really /la crème de la crème/. &lt;/p&gt;

&lt;p&gt;Nevertheless, I gritted my teeth and /ranked/ my books anyway in a rating system of 1-5. I took a small, assorted sample of my books and imported a csv to Visual Studio Code. The individual books ended up being stored as a dictionary within a list. &lt;br&gt;
Each book had the following key:value pairs:&lt;br&gt;
'category'&lt;br&gt;
'category_lower'&lt;br&gt;
'rating'&lt;br&gt;
'author'&lt;br&gt;
'author_lower'&lt;br&gt;
'title'&lt;br&gt;
'title_lower'&lt;/p&gt;

&lt;p&gt;I started with a simple sorting algorithm - quicksort. And I tested it by sorting my books alphabetically by author first name and by title. Then I sorted by rating. &lt;br&gt;
Next, I thought, well let's really prove I know how to sort. So I made a bubblesort function, and used that to sort the categories. I knew I would need a list of categories for the actual program, so I removed the duplicates and saved a clean list of categories into a new list variable.&lt;br&gt;
So far, things seemed to be working fine, so I shifted my focus to the actual terminal program.&lt;/p&gt;

&lt;p&gt;I thought about how I wanted my books to be searched - by title? by author? by category?&lt;br&gt;
I settled on category because that seemed the most straightforward way to very broadly look for books. When I go into a bookstore, I usually zoom into the SciFi &amp;amp; Fantasy section and browse for whatever looks interesting (purely based on the cover art). &lt;/p&gt;

&lt;p&gt;Next, I fiddled around with the user inputs and the possible inputs someone might put in - whether they are following direction or not. After figuring out the conditionals and making the search loopable (so you can find books and then keep looking for books of a different category), I felt like I was ready to get into the "reveal" aspect.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AuwPcLRy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8h2l95zc6abo4gzv1fji.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AuwPcLRy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8h2l95zc6abo4gzv1fji.png" alt="Image description" width="537" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, how to grab books that matched the user's inputted category? And how to organize the resulting list based on my top favorite? &lt;/p&gt;

&lt;p&gt;First, I made a helper function to match the user input's category with my list of categories. Depending on the match (y/n) and the number of matches (1 or more), the user input loop will eventually narrow down to one category. Phew. &lt;/p&gt;

&lt;p&gt;Then, it was a matter of matching the books' category key with the user input's category. If it matched, the book would be appended to a new list. &lt;br&gt;
I decided to print out my top rated book separately from the rest of the list. So people can see all the books in the category with the first one being my favorite, main recommendation. &lt;/p&gt;

&lt;p&gt;Voila - I was done. Books for days!!! Happy reading! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w2K2YST---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y2ik9rdh53jws702t172.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w2K2YST---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y2ik9rdh53jws702t172.png" alt="Image description" width="842" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take a look and let me know how the code can be improved:&lt;br&gt;
&lt;a href="https://github.com/pwong09/Portfolio-Project-2"&gt;https://github.com/pwong09/Portfolio-Project-2&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>github</category>
      <category>beginners</category>
      <category>computerscience</category>
    </item>
    <item>
      <title>A Terminal Budget Program with Python!</title>
      <dc:creator>pwong09</dc:creator>
      <pubDate>Fri, 12 Nov 2021 20:29:15 +0000</pubDate>
      <link>https://dev.to/pwong09/a-terminal-budget-program-with-python-1b5o</link>
      <guid>https://dev.to/pwong09/a-terminal-budget-program-with-python-1b5o</guid>
      <description>&lt;p&gt;I've been working on the Computer Science Pro track on Codecademy for the past 4 weeks. To finish the "Intro to Programming" section, I had to do an open-ended portfolio project.&lt;/p&gt;

&lt;p&gt;The requirements were:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build a terminal program using Python&lt;/li&gt;
&lt;li&gt;Add at least one interactive feature using input()&lt;/li&gt;
&lt;li&gt;Use Git version control&lt;/li&gt;
&lt;li&gt;Use the command line and file nav&lt;/li&gt;
&lt;li&gt;Write a technical blog post on the project (this post!)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I brainstormed a bit about what I wanted to make, and ultimately I chose to write a simple budgeting calculator. I had just finished a One-Month Expenses Tracking challenge with my friends, so with money on mind, I came up with all these different financial calculator ideas. &lt;/p&gt;

&lt;p&gt;Budgeting has been foremost in my mind because I'm currently unemployed and re-skilling &amp;amp; up-skilling in order to transition my career (previously in chocolate making) into the tech sector. &lt;/p&gt;

&lt;p&gt;(I know, I know, most people do the opposite. They want to get /out/ of tech, and chocolate seems like a nice way to go! Anyone want to trade?)&lt;/p&gt;

&lt;p&gt;Anyway, I started by jotting down what information I would need to build a budget. Income after taxes was an easy first thought. How can you build a budget with no income? Then, I thought, what is the biggest expense for most people? Housing. It would be tough to guess how much someone spends on housing, so it would be better if they provided that info!&lt;/p&gt;

&lt;p&gt;In my first iteration, I started with a basic function to return the amount someone would have left over after housing. And I thought, "Hey, don't forget to save some of that income!" There are lots of ways to assume a basic budget, but a good general rule is to save 20%, so I started there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Cqzoys0h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3zq5d2u9l7g1ioyae2r5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Cqzoys0h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3zq5d2u9l7g1ioyae2r5.png" alt="The initial commit" width="880" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next thought I had was, what if housing was really expensive relative to your income? What if you can't save or you can't even afford that much house?&lt;/p&gt;

&lt;p&gt;I made a second function, and things started getting a little chaotic. I thought, wow there must be an easier way to do this. Also, I haven't even started using Classes and OOP, and I'm supposed to include that in my program somewhere.&lt;/p&gt;

&lt;p&gt;I ended up scrapping my entire first 2 commits, and re-writing my budget function into a Budget class. I knew I wanted to make a subclass for people who have higher savings goals. I'm a big believer in saving more whenever possible. Building up personal savings is a really important practice for me - and it still is even though I don't have an income anymore.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1J5Yn08_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jjax6v4az6oog22bvtp4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1J5Yn08_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jjax6v4az6oog22bvtp4.png" alt="Finally using what I learned about Classes" width="828" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So after making sure the Budget class worked properly, I created the SuperSaver subclass. It was fun to work out the save_spend method, and overall I'm glad I make my first initial mistakes because, hey that's how I learn right?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IVYD214b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wt637gjut5sb2rbvdra6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IVYD214b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wt637gjut5sb2rbvdra6.png" alt="Adjusting methods was a challenge, but I figured it out I think!" width="846" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I showed my terminal program to my partner later, and she recommended that I add more inputs for other expenses, like debt payments, car payments, health insurance, etc.&lt;br&gt;
I'll get around to that someday - for now I'm pretty thrilled by what I've done.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d6yEe9ZL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h20enkf5bg3ulhxt1v50.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d6yEe9ZL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h20enkf5bg3ulhxt1v50.png" alt="Terminal program" width="666" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take a look and let me know how the code can be improved:&lt;br&gt;
&lt;a href="https://github.com/pwong09/portfolio-project"&gt;https://github.com/pwong09/portfolio-project&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>python</category>
    </item>
  </channel>
</rss>
