<?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: Fabian Fabro</title>
    <description>The latest articles on DEV Community by Fabian Fabro (@fihra).</description>
    <link>https://dev.to/fihra</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%2F176833%2Fa5509d36-8c54-4706-b02e-6c6daf4e69ff.png</url>
      <title>DEV Community: Fabian Fabro</title>
      <link>https://dev.to/fihra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fihra"/>
    <language>en</language>
    <item>
      <title>Pure Data - Visual Programming Language for Audio</title>
      <dc:creator>Fabian Fabro</dc:creator>
      <pubDate>Wed, 07 Aug 2024 18:59:42 +0000</pubDate>
      <link>https://dev.to/fihra/pure-data-visual-programming-language-for-audio-h09</link>
      <guid>https://dev.to/fihra/pure-data-visual-programming-language-for-audio-h09</guid>
      <description>&lt;p&gt;What is Pure Data?&lt;/p&gt;

&lt;p&gt;It is an open-source programming language that is used to process and generate audio, video, 2D/3D graphics, interface sensors, input devices, and MIDI. &lt;/p&gt;

&lt;p&gt;This was developed by Miller Puckette, who is also the author behind Max/MSP, the more well-known visual programming language for audio and multimedia.&lt;/p&gt;

&lt;p&gt;The way the language is set up is using boxes of &lt;strong&gt;objects&lt;/strong&gt; and placed in a window on a "patch" file.&lt;/p&gt;

&lt;p&gt;Here is an example of how it looks.&lt;br&gt;
Note: This is using "PlugData" program, which is more modern looking version from the original PureData program.&lt;/p&gt;

&lt;p&gt;You can download Plugdata here: &lt;a href="https://plugdata.org/" rel="noopener noreferrer"&gt;Plugdata&lt;/a&gt;&lt;br&gt;
To check out and download the original PureData: &lt;a href="https://puredata.info/downloads" rel="noopener noreferrer"&gt;PureData&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm2rwm6cbbtzp6o2u6cxo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm2rwm6cbbtzp6o2u6cxo.png" alt="Hello World" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are 3 types of objects that are being used here for this "Hello World" app.&lt;/p&gt;

&lt;p&gt;How to input objects:&lt;br&gt;
In PlugData, at the top left menu, there is the "Add Object" button that opens a list of objects to drag and drop. &lt;/p&gt;

&lt;p&gt;For keyboard shortcuts, I used for the following objects:&lt;br&gt;
Bang: Control + Shift + B&lt;br&gt;
Message: Control + 2&lt;br&gt;
Print: Control + 1&lt;/p&gt;

&lt;p&gt;At the top, is a GUI object known as a "Bang" operator.&lt;/p&gt;

&lt;p&gt;The middle is a "Message" object. Notice at the right side with the darken edges.&lt;/p&gt;

&lt;p&gt;And the bottom is a general object using [print].&lt;/p&gt;

&lt;p&gt;When the user clicks the "Bang" button, it sends an immediate trigger action to its outlet (the cable connected from the bottom to the next object). &lt;/p&gt;

&lt;p&gt;Following the strings of lines, the "Message" object can contain any type of data: a string, int, float, symbol, etc. As it is object that represents data. In this case, it represents as a string "Hello World."&lt;/p&gt;

&lt;p&gt;And to the last box, "Print" which in code terms, is a keyword that's part of PureData, which basically prints to the console on the right pane.&lt;/p&gt;

&lt;p&gt;The 2nd Hello World also allows to set the string as a 'parameter' to the right of "print," though the console does print it slightly different with the message being first, and printing the "Bang" operator. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsgq277opl4cne6t4kcsg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsgq277opl4cne6t4kcsg.png" alt="Hello World 2" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alright enough with words, Pure Data is meant to sounds, so I'll demonstrate a simple sound synthesis.&lt;/p&gt;

&lt;p&gt;Note: Make sure to check your audio settings from PlugData/PureData that way you know you'll get audio feedback. Make sure your Audio Output "Output Device" is set to your designated speaker you're using. Sample rate should be fine with either 44100 or 44800. Buffer size is fine at 480, usually I'd go higher to at least 1024 just to get more audio buffers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcd55y9v3hqh6ou1vj99g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcd55y9v3hqh6ou1vj99g.png" alt="Settings" width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;IMPORTANT NOTE: I'm glad PlugData included this, but adjusting your volume here is important since anything could happen when testing sound. So keeping at lower volumes is highly recommended. I've had moments where audio blasts and pops up while I'm experimenting around, which could damage your speakers, AND YOUR EARS!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq54p0c5vf2cdols97wjh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq54p0c5vf2cdols97wjh.png" alt="Volume Setting" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;LET THERE BE SOUND!!!!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ens1ism66h1aln6ve6j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ens1ism66h1aln6ve6j.png" alt="osc" width="325" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congrats, you made your first oscillator sine wave! OMG MAKE IT STOP!! Just disconnect the last two cables under [dac~].&lt;/p&gt;

&lt;p&gt;Now what's going on here?&lt;/p&gt;

&lt;p&gt;You noticed something about the colors with these objects. The sockets above the box are called "Inlets" while the bottom ones are called "Outlets." Basically they are the inputs and outputs that are connected through each box. But notice the colors too. These have orange sockets on the left side, and blue on the right side. If we look back on the Hello World, they were all blue.&lt;/p&gt;

&lt;p&gt;The way the objects interact is through the "Audio Rate" and the "Control Rate." &lt;/p&gt;

&lt;p&gt;In a nutshell, &lt;strong&gt;Audio Rate&lt;/strong&gt; is connected through the orange inlets and outlets, while the &lt;strong&gt;Control Rate&lt;/strong&gt; is connected by the blue inlets and outlets. Also if you notice the squiggly line on the audio rate objects (Tilde), is also mainly for audio rate objects.&lt;/p&gt;

&lt;p&gt;Audio Rate objects handle anything that affects the audio signal directly, while Control Rate objects handles any informational or calculations to set values to audio rate objects. &lt;/p&gt;

&lt;p&gt;Alright, let's at least go over what is going on with this oscillator.&lt;/p&gt;

&lt;p&gt;[osc~ 440]&lt;/p&gt;

&lt;p&gt;'osc' is built-in PureData that generates a cosine wave. Adding 440 gives the frequency input of 440hz, which is A4 (musical note A above middle C). &lt;/p&gt;

&lt;p&gt;[*~ 0.5]&lt;/p&gt;

&lt;p&gt;This multiplies the signal by 0.5. In this case, this multiples the oscillator to lower its volume.&lt;/p&gt;

&lt;p&gt;[dac~]&lt;/p&gt;

&lt;p&gt;This stands for "Digital to Analog Converter." The opposite of this is [adc~] for "Analog to Digital Converter."&lt;/p&gt;




&lt;p&gt;For digital to analog, this means that we are taking a digital signal, in this case the oscillator we are feeding it, and outputting it to a speakers on the Analog side. &lt;/p&gt;

&lt;p&gt;If it was analog to digital, it would be at the top of the patch file, and it could take in microphone input, because the analog signal is coming from what's being heard from the microphone, then translating it to digital data to be able to process the audio signals in the rest of Pure Data objects connects, and finally end with a dac~ to output it.&lt;/p&gt;




&lt;p&gt;Notice that [dac~] is connected by 2 inlets from above. This is to output on the left and right speaker. Try to remove one of the cables, and you will hear the audio from that speaker only.&lt;/p&gt;

&lt;p&gt;What's at least nice on this interface, and also on Pure Data's program, is that when you right click on objects, and click "help," it opens a new tab with descriptions and examples of that object. &lt;/p&gt;

&lt;p&gt;There are keyboard shortcuts you get used to when adding objects around. PlugData is nice that it gives you the toolbox at the top bar to add all the objects.&lt;/p&gt;

&lt;p&gt;Here are samples of my Pure Data sound design project that I worked on where I designed sound effects for a small RPG game I developed called "The Mysterious Gate."&lt;/p&gt;

&lt;p&gt;Excuse the mess of all the objects scattered everywhere. I wish Plug Data had more features to organize sections across the patch. Or maybe there is, I just haven't figured it out yet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq8ilsg1l40gzzf135j1l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq8ilsg1l40gzzf135j1l.png" alt="Mysterious Gate" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Few examples:&lt;/p&gt;

&lt;p&gt;Charge up Magic&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmja3kgvps7t2txklqw3o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmja3kgvps7t2txklqw3o.png" alt="Charge Up Magic" width="762" height="741"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ice Damage&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9q0ch0ac6oudowfr36b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9q0ch0ac6oudowfr36b.png" alt="Ice Damage" width="800" height="622"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check out the game here. &lt;br&gt;
Free to play on browser at itch io: &lt;a href="https://firahfabe.itch.io/the-mysterious-gate" rel="noopener noreferrer"&gt;Play The Mysterious Gate&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From what I learned so far, visual programming is a nice gateway for non-programmers to get into programming if code is overwhelming. I do come from a coding background and at first I was intimidated or perplexed seeing visual programming because of not seeing them as lines of code. However, I decided to keep an open mind and now I appreciate both worlds of traditional code and visual programming.&lt;/p&gt;

&lt;p&gt;And especially for my journey in learning more audio programming, I think learning Pure Data has helped me grasp a little more understanding in this topic because going into the traditional code route for audio programming was extremely difficult for me at least. &lt;/p&gt;

&lt;p&gt;How did I pick up Pure Data? I took a course from School of Video Game Audio.&lt;/p&gt;

&lt;p&gt;Why I learned Pure Data? Since being interested in Audio Programming but not having a Computer Science degree feels like it's made my journey tougher to learn, but Pure Data feels like a nice stepping stone to understand a little bit of what's happening in a visual perspective with audio signal processing.&lt;/p&gt;

&lt;p&gt;What other visual programming languages can this transfer to after learning Pure Data?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Max/MSP&lt;/strong&gt; is a common one that I've seen musicians and media artists use, although it is not free.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpitun86d505pnxhlxmz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftpitun86d505pnxhlxmz.png" alt="Max/MSP" width="800" height="716"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MetaSounds&lt;/strong&gt; in Unreal Engine is a pretty recent tool within the engine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faa11bbngexa9m7uropr6.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faa11bbngexa9m7uropr6.jpeg" alt="MetaSounds" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I just wanted to write this quick short introduction to Pure Data since I've been working with this recently, especially with my sound design work with sound synthesis. I hope this helped with taking a little jump start into it. I'd say YouTube tutorials really help to follow, especially since this is also for getting listening feedback that you can't always get through following a 'words only' tutorial.&lt;/p&gt;

&lt;p&gt;Resources:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://school.videogameaudio.com/apply/" rel="noopener noreferrer"&gt;School of Video Game Audio&lt;/a&gt;&lt;br&gt;
&lt;a href="https://plugdata.org/" rel="noopener noreferrer"&gt;Plugdata&lt;/a&gt;&lt;br&gt;
&lt;a href="https://puredata.info/downloads" rel="noopener noreferrer"&gt;PureData&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=SLx7kjuFheY&amp;amp;list=PLuxj2jXSuTvvqYcDLJ-poN-JxvqX0wq-m" rel="noopener noreferrer"&gt;QCGInteractiveMusic YouTube Playlist&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=1o5Wasmd8yU&amp;amp;list=PLyFkFo29zHvD4eRftIAjcLqIXCtSo7w8g" rel="noopener noreferrer"&gt;Sound Simulator Playlist&lt;/a&gt;&lt;/p&gt;

</description>
      <category>puredata</category>
      <category>audio</category>
      <category>visualprogramminglanguage</category>
      <category>audiosynthesis</category>
    </item>
    <item>
      <title>Experiencing different types of Technical Interviews</title>
      <dc:creator>Fabian Fabro</dc:creator>
      <pubDate>Mon, 14 Mar 2022 02:31:53 +0000</pubDate>
      <link>https://dev.to/fihra/experiencing-different-types-of-technical-interviews-4hbb</link>
      <guid>https://dev.to/fihra/experiencing-different-types-of-technical-interviews-4hbb</guid>
      <description>&lt;p&gt;200+ applications, 100+ rejections, 100+ ghosting, maybe about 10 interviews. I've felt a part of my journey has finally been reached as I have finally landed my first software engineer role! After 3 years since graduating from a coding bootcamp, managing through a global pandemic, and trying to take on side projects, the experience has been such stress-inducing and painful at times.&lt;/p&gt;

&lt;p&gt;Landing that interview has always been one of the most stressful parts to applying for a job. You are always greeted with the "Thank you for applying for . Although your skills are indeed impressive, we decided to follow through with another more qualified candidate," or "We regret to inform you that you are not selected at this time being." What makes it even worse is when you see the bottom of the email &lt;strong&gt;No reply&lt;/strong&gt;. So, we can't even question why we are not even selected for position, left wondering in the dust like what is it that we need to improve in our application, resume, cover letter, etc.&lt;/p&gt;

&lt;p&gt;I do just want to briefly discuss at least trying to land an interview. If you have landed that job interview, you can skip this section and scroll down to the "Types of Technical Interview Section."&lt;/p&gt;

&lt;h2&gt;
  
  
  Landing an Interview
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Have your resume/cover letter reviewed by trusted friends &amp;amp; family, getting multiple perspectives if you can, either tech or non-tech perspectives&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Get your resume reviewed by a professional resume writer, there is a cost for this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have at least 2-3 projects included, can be roughly made (for instance, having a git repo and video/gif footage demo of the project), but polished would definitely be a plus.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When adding your projects, add 2-3 brief bullet points describing the work that &lt;strong&gt;YOU&lt;/strong&gt; implemented.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add skills that you feel comfortable in, possibly intermediately where you can at least work with OOP, if you can at least create simple CRUD applications, either console app, full-stack, static sites, etc. (can differ depending on the role you are applying for)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Side note for point above: Depending on the position you are applying for, research the types of projects built with those tools that you want to learn. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Education, for someone like me who does not come from a traditional computer science college background, add your degrees you have, don't lie even if it's unrelated. But needn't include GPA, most of the time it is not necessary.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finding a mentor or career coach. These can help out with guidance if you sometimes feel lost in the process. Heck, I would still look for mentors just to gain more insights even now.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Types of Technical Interviews
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Coding Problem Interview (With Interviewer)
&lt;/h3&gt;

&lt;p&gt;This is the most common one that I have experienced. These can range to maybe from 30 minutes to 1 hour. You probably are familiar with Leetcode &amp;amp; HackerRank. So pretty much, it's you in a video call with the interviewer, they will give you a coding problem prompt, giving some form of input, and you need to return an output. &lt;/p&gt;

&lt;p&gt;When you get stuck or possibly drift off in the wrong direction for the solution, the interviewer may sometimes give hints. They can occasionally ask what you are trying to do at certain moments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Coding Problem Interview (Without Interview/Automated)
&lt;/h3&gt;

&lt;p&gt;This is another common one too. These are mainly timed, as if you were taking an online test and seeing that clock ticking on the corner. These can range to maybe from 1 hour to 2 hours. You would be given about 2 to 4 coding problems to solve. They can possibly have a difficulty ratio - 1 easy 1 medium : 1 easy 1 hard : 1 easy 2 medium 1 hard, etc.&lt;/p&gt;

&lt;p&gt;There are certain rules when these are conducted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;usually not allowed to use another electronic device&lt;/li&gt;
&lt;li&gt;google is allowed but limited to search, for instance, syntax lookup is fine, but searching how to implement something won't be allowed&lt;/li&gt;
&lt;li&gt;only the interview window is allowed to be open, no other browser windows, tabs are fine in the interview window for the searching though&lt;/li&gt;
&lt;li&gt;your screen can be video captured to avoid any cheating involved&lt;/li&gt;
&lt;li&gt;Webcam video recording may be captured during the interview for cheating purposes that can occur&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Projects Interview
&lt;/h3&gt;

&lt;p&gt;From my experience, I've gotten this type mainly from startup or smaller companies. I have also had friends share to me their experiences with these types of interviews. &lt;/p&gt;

&lt;p&gt;These can possibly range from 45 minutes - 2 hours. While with the interviewer, they make ask for you to build a mini functioning project, simple web app, static site, etc. &lt;/p&gt;

&lt;p&gt;For example, a prompt could be "build a home page for a restaurant, with a navigation bar, title with a logo, description on the page, have the links go to other pages (can possibly go to blank 'under construction' pages but still based on the restaurant's site), sticky header/footer, with button interactions, etc."&lt;/p&gt;

&lt;p&gt;The interviewer can be suggesting certain syntax or functions to include, in a way, feeling like they are testing your knowledge with the language. Of course they would allow you to search up these syntax since they would be understanding not knowing everything.&lt;/p&gt;

&lt;h3&gt;
  
  
  Take Home Project
&lt;/h3&gt;

&lt;p&gt;This is similar to the above but with a 1 to multiple day span. I have had take-home projects that were due a few hours on the day of, literally after the interview. I had one due in 3 days. I have also had a week take-home project. The scale of these projects could be a bit bigger, from building a full-stack web app, front-end only, etc. This can vary depending on the role.&lt;/p&gt;

&lt;h3&gt;
  
  
  Portfolio Discussion
&lt;/h3&gt;

&lt;p&gt;I was surprised to have gotten this one since I did not see this in majority of my interviews. The interview would ask about the projects you have included in your resume. They would ask for you to share any video demo footage of project and also to open the git repo code. The questions ask could range from "what was one feature you felt was a struggle to implement and how did you overcome it?" or "If you were to add ______ into this project, what would you use or how would you implement it?" This was such an interesting but also kind of tough because I had to really think outside the box for new ideas and situations the interviewer would ask about my projects.&lt;/p&gt;

&lt;p&gt;3 years since I started my tech journey, and I can only say it has just begun with my new job. It's a painful struggle, I understand. I've had my fair share of working a side non-related job even after finishing my coding bootcamp studies since it was that difficult for me, plus with the pandemic hitting too. &lt;/p&gt;

&lt;p&gt;I hope this blog will be helpful and beneficial for anyone in the endeavors towards their tech journey!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>jobs</category>
      <category>programming</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Unreal Engine + Wwise - Managing Music State throughout Multiple Levels</title>
      <dc:creator>Fabian Fabro</dc:creator>
      <pubDate>Sun, 09 Jan 2022 16:06:01 +0000</pubDate>
      <link>https://dev.to/fihra/unreal-engine-wwise-managing-music-state-throughout-multiple-levels-jeb</link>
      <guid>https://dev.to/fihra/unreal-engine-wwise-managing-music-state-throughout-multiple-levels-jeb</guid>
      <description>&lt;p&gt;So, for the past few months since my last blog post, I hit a brick wall in my progress because I was stuck with this problem when I finally got the chance to work on the music implementation for my game "Maliksi." This led me to take a rather long break out of near frustration and stress, especially because I wanted to move on to other projects, plus I got busy with other obligations to worry about. Now entering 2022, I'm wanting to finally try to finish this game once and for all!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Side-note: I'm still in current development, but I really felt the urge to blog this as soon as I found a working solution. &lt;br&gt;
So it might be a little messy with my current way, but I wanted to preserve this information for future references.&lt;br&gt;
There are probably better ways to do this, but I was at least able to get this to work for me. &lt;br&gt;
For this purpose, I'm using Unreal Blueprinting.&lt;br&gt;
Also, I'm no expert in Unreal Engine, as I'm still learning this engine myself too.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Problem to solve:
&lt;/h3&gt;

&lt;p&gt;To play a Wwise music event and control its state when transferring to different levels in Unreal Engine.&lt;/p&gt;




&lt;p&gt;Coming from a Unity background, I was used to the "DontDestroyOnLoad" feature attached to a game object, where I could let that run even when transferring to different scenes, all until the game closes. From my research high and low, Unreal Engine did not have a component like that.&lt;/p&gt;

&lt;p&gt;If you are not sure how to play a Wwise music event into a scene, here is a youtube video for playing an SFX object, but it's essentially the same way for music.&lt;br&gt;
&lt;a href="https://youtu.be/TBPvJqE0iJQ" rel="noopener noreferrer"&gt;How To Integrate Wwise With Unreal Engine + Play An Ambiance SFX by Scott Game Sounds&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Time Stamps&lt;/strong&gt;: &lt;br&gt;
10:20 - Wwise Setup&lt;br&gt;
15:20 - Unreal Engine Setup&lt;/p&gt;

&lt;p&gt;For a brief summary, the life cycle of a game scene or level (this applies to both Unity &amp;amp; Unreal Engine), &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Game objects &amp;amp; actors are created as soon the level is opened.&lt;/li&gt;
&lt;li&gt;As soon as the game objects/actors are spawned, they fire their starting function:&lt;/li&gt;
&lt;li&gt;Unity -&amp;gt; Start() or Awake()&lt;/li&gt;
&lt;li&gt;Unreal Engine -&amp;gt; BeginPlay()&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F73vqkqctu06qq0cw81q4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F73vqkqctu06qq0cw81q4.png" alt="Actor Lifecycle" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What this problem lies is, I want my Wwise music object to be playing. When it transfers to the next level, I want the Wwise music object to seamlessly change to the next track. However, that Wwise music object will get destroyed as soon as I transfer to the next level.&lt;/p&gt;

&lt;p&gt;I could just create a new Wwise music object every level and play the music for that level, but I also had a change for vertical orchestration layering. Here is my setup for how I want my music to play.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fae9w2jn19vkqu6g58kws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fae9w2jn19vkqu6g58kws.png" alt="Music State Flow" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*Rondalla is Filipino traditional music involving plucked instruments similarly compared to the mandolin.&lt;/p&gt;

&lt;p&gt;So going back to an early point I brought up, from Unity "DontDestroyOnLoad" was something I needed to find something that's similar on Unreal Engine. Here were two options I found:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Game Instance&lt;/li&gt;
&lt;li&gt;Persistent Level / Level Streaming&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I experimented with both, but which one worked in my favor at least? The Persistent Level choice. You can skip to the Persistent Level section to read about using that one, I wanted to share my experience with the problems I occurred trying out with game instances.&lt;/p&gt;

&lt;h3&gt;
  
  
  Game Instance
&lt;/h3&gt;

&lt;p&gt;So what are game instances? These are objects that are created as soon as the game loads, mainly like in it's own storage. You can possibly think of them as static since they can only exist once but its values can be altered.&lt;/p&gt;

&lt;p&gt;For example, I use game instances in my game as unlocks, when Malik defeats a boss, she gains a new skill unlocked, which retrieves the game instance to tick that THAT certain skill is now unlock because the particular boss is now defeated. With this in mind, I thought I could use this to save the state of the game object that contains the Wwise music event. However, I realized that you can't save objects or actors onto game instances, only variables with data type values such as int, boolean, string, etc.&lt;/p&gt;

&lt;p&gt;Although, I &lt;strong&gt;could&lt;/strong&gt; possibly still use the game instance to save and alter the state value, but I ended up not doing it when I tried implementing the 2nd option.&lt;/p&gt;

&lt;h3&gt;
  
  
  Persistent Level / Level Streaming
&lt;/h3&gt;

&lt;p&gt;What is a persistent level? It's a level that will be continuously running along with your main levels and maintains any objects contained in that level. For example, this can be applied to maybe having the character UI run throughout the game or certain environment assets. &lt;/p&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;p&gt;1 - Create a new empty level, name it anything you want, I named mines "MusicManager".&lt;br&gt;
2 - From your first level opened, mine specifically is "Title", open the levels window.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2uaclmq176ctwvor2dqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2uaclmq176ctwvor2dqu.png" alt="Persistent Level Step 1" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3 - At the top should say "Persistent Level," drop the "MusicManager" level under.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flrg8gggv16pzx7iqwnjk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flrg8gggv16pzx7iqwnjk.png" alt="Persistent Level Step 2" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4 - Right click the "MusicManager" Level in the Windows Level, go through to the drop menu to "Change Streaming Method" and make sure the "Always Loaded" option is checked.&lt;/p&gt;

&lt;p&gt;Note: Streaming Mode&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;blueprint: when you want to load your level manually, using "load stream level/unload stream level" in the blueprints&lt;/li&gt;
&lt;li&gt;always loaded: as soon as the level loads, it will continuously run until the game ends&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ge16gsr46jpn5kup1ab.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ge16gsr46jpn5kup1ab.png" alt="Persistent Level Step 3" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.5 - On the bottom right, you can switch between managing the Persistent Level or the Music Manager. Make sure to set to Persistent Level when you are ready to play test.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5lecn7f0ddaqhaulqki.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5lecn7f0ddaqhaulqki.png" alt="Persistent Level Step 4" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5 - Create a new actor new blueprint, I called mines "musicObj." Attach an AkGameObject component (or Ak component, I believe either should work). &lt;/p&gt;

&lt;p&gt;Get the current level name, use that as the condition for a switch statement for each of your levels (you can probably create an array too to manage the levels as well).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc2bwahkik8elthmmolt2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc2bwahkik8elthmmolt2.png" alt="Persistent Level Step 5" width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6 - The starting condition will immediately set state to the music state event I have already set up in Wwise and then post event. Make sure that the post event references itself.&lt;/p&gt;

&lt;p&gt;7 - As the following conditions, it just has to set state.&lt;/p&gt;

&lt;p&gt;7.5 - Note, if your music event ends, such as playing an ending stem but still want to play the next music event, just add another post event after. I did test this and it worked.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5tlw8yaw5ttbw18xejm3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5tlw8yaw5ttbw18xejm3.png" alt="Persistent Level Step 6" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8 - For each level, I attached the "MusicManager" level on to every level, repeating steps 3 and 4.&lt;/p&gt;

&lt;p&gt;Although, I still have not tested yet on retries when my character dies or back tracking in my levels (although for my current design I'm not allowing back tracking). I presume at least with this set up it should allow it to set state and change the music state event when you back track levels too.&lt;/p&gt;

&lt;p&gt;Here is also my current set up for the Wwise side as I have the music states set up accordingly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fus7jctkqx887a0v25u9t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fus7jctkqx887a0v25u9t.png" alt="WWise Music State" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Failed Attempts I tried &amp;amp; problems that occurred:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I tried to utilize Switch Containers within one of the levels because I wanted to Vertical Orchestration seamless transition loop to work, however, it just did not cooperate with me just resorted to making it as state values.&lt;/li&gt;
&lt;li&gt;Game Instances could not keep the musicObj alive as I tried to retrieve it through each level, but it only can hold variable values and not blueprint actors.&lt;/li&gt;
&lt;li&gt;I tried to manage changing the state on the level blueprints for each level but it meant I had to keep retrieving the musicObj every level that way, and it was not able to fully access and change the state from there.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With this hurdle finally overcome, I feel that I can finally finish this game project once and for all! Thank you for reading and I hope this helps for the game audio folks because it was really difficult for me to find resources on Unreal Engine and Wwise for music, especially when working with multiple levels.&lt;/p&gt;

&lt;p&gt;Here is a preview and link to my upcoming solo game "Maliksi." &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99jc9stndkagi6vfga44.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99jc9stndkagi6vfga44.png" alt="Maliksi by Fabian Fabro" width="800" height="600"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://firahfabe.itch.io/maliksi" rel="noopener noreferrer"&gt;Maliksi Itch.io game link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Maliksi Main Theme by Fabian Fabro (FirahFabe) Music Preview&lt;br&gt;
Youtube Video:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=9YiceEbgMSI" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu35foewxjsg3m9l38zdl.jpg" alt="Maliksi Main Theme by Fabian Fabro (FirahFabe)" width="480" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Other Video Resources:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=829S9ipncOA&amp;amp;t=362s" rel="noopener noreferrer"&gt;Wwise 201-06 | Using the Music Switch Container by AudioKinetic&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=pRwBahG4dgY&amp;amp;t=189s" rel="noopener noreferrer"&gt;Wwise 101-08 | States by AudioKinetic&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=PyMMgWKd5QM&amp;amp;t=316s" rel="noopener noreferrer"&gt;Unreal Engine 4 Tutorial - Level Streaming by Ryan Laley&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=ffQ-imKkO4U&amp;amp;t=268s" rel="noopener noreferrer"&gt;UE4 - Tutorial - Game Instances by Dean Ashford&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>wwise</category>
      <category>gameaudio</category>
      <category>unrealengine</category>
    </item>
    <item>
      <title>Participating in Devtober 2021</title>
      <dc:creator>Fabian Fabro</dc:creator>
      <pubDate>Sat, 09 Oct 2021 09:31:43 +0000</pubDate>
      <link>https://dev.to/fihra/participating-in-devtober-2021-31b2</link>
      <guid>https://dev.to/fihra/participating-in-devtober-2021-31b2</guid>
      <description>&lt;p&gt;You can skip this portion as this will be just me venting here.&lt;/p&gt;




&lt;p&gt;Its been a long time since I've posted a blog here. A lot has been going on in my life right now. Still in on the purpose of trying to land that first job, but of course I've gone through a bit of a burnout of applying for jobs again. I have also taken a break from programming the past couple months, so I feel rusty in trying to get that workflow back. It just doesn't help either when I have family who just doesn't believe in me for these goals to have that moral support, so it's tough to really maintain my mind set for this.&lt;/p&gt;




&lt;p&gt;Alright, so I have decided to start Devtober, which started the beginning of this month. I will be continuing a game project I actually started for a different game jam back in July but didn't finish. My goal is actually wanting to finish this game by the end of this month, especially since I feel I am almost finished with it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnt99vj814x3kwg52nmq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnt99vj814x3kwg52nmq.png" alt="Maliksi Title" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Maliksi
&lt;/h2&gt;

&lt;p&gt;A 2D Action Platformer Boss Rush game where you play as Malik, an Eskrimador, who must retrieve the stolen light from Filipino mythological-inspired creatures to save the village.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3acyp5kswsmsllrsjkpr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3acyp5kswsmsllrsjkpr.gif" alt="Maliksi Gameplay" width="80" height="48"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have been working on the art, programming, sound design, and music. I am learning Unreal Engine with unreal blueprinting (not C++ because I don't feel ready or comfortable in the language yet). Which it took me awhile to get used to visual programming.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qf2bv4wfzxz8csxwgrn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qf2bv4wfzxz8csxwgrn.png" alt="Blueprinting" width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am using Wwise to implement the sound effects and music.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98ozug71n5ukloqszm38.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98ozug71n5ukloqszm38.png" alt="Wwise" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm keeping my scope as tight as I can in order to finish this game. I still need to polish one of the boss fights, but the final boss still needs the functionality and mechanics implemented. &lt;/p&gt;

&lt;p&gt;Things that I need to work on for this last push for this month:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;polish one of the boss fight's mechanics&lt;/li&gt;
&lt;li&gt;final boss still needs functionality &amp;amp; mechanics implemented&lt;/li&gt;
&lt;li&gt;Waiting for musicians to record their parts for the music so I can start mixing&lt;/li&gt;
&lt;li&gt;Implement the music into the game&lt;/li&gt;
&lt;li&gt;Few more sound effects to design&lt;/li&gt;
&lt;li&gt;Slowly implementing sounds in each level&lt;/li&gt;
&lt;li&gt;Ending still needs to be created&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://twitter.com/FirahFabe/status/1431739110616551428?s=20" rel="noopener noreferrer"&gt;1st Video Footage&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://t.co/RxMfwYu00s" rel="noopener noreferrer"&gt;2nd Video Footage&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I want to publicize this to hold myself accountable to finish this game. I did participate in Devtober 2020, but I never finished that game, but this one, this one for sure I want to complete, since I've been working on this one for a long time already. Plus, it is also Filipino American History Month, and this game showcases my Filipino culture that I have incorporated into this.&lt;/p&gt;

&lt;p&gt;If you want to participate in this game jam, here is the link to the itch.io:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://itch.io/jam/devtober-2021" rel="noopener noreferrer"&gt;https://itch.io/jam/devtober-2021&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>unrealengine</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Setting up an FMOD Project + Unity for Collaboration (Git)</title>
      <dc:creator>Fabian Fabro</dc:creator>
      <pubDate>Mon, 01 Feb 2021 21:09:53 +0000</pubDate>
      <link>https://dev.to/fihra/setting-up-an-fmod-project-unity-for-collaboration-git-20h6</link>
      <guid>https://dev.to/fihra/setting-up-an-fmod-project-unity-for-collaboration-git-20h6</guid>
      <description>&lt;p&gt;&lt;strong&gt;This blog post is based on FMOD ver. 2.1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So I just participated in this year's annual Global Game Jam. This marks my 4th year in this specific jam (besides doing other in between jams over the year). &lt;/p&gt;

&lt;p&gt;My first 2 years, I would take on the role as a composer/sound designer. These past 2 years, since getting into software development, I've been aiming towards wanting to do my technical sound design and audio implementation. &lt;/p&gt;

&lt;p&gt;Okay, enough backstory about myself, let's get to the topic!&lt;/p&gt;

&lt;h2&gt;
  
  
  Topics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Gitignore&lt;/li&gt;
&lt;li&gt;Source Control&lt;/li&gt;
&lt;li&gt;Build Files &lt;/li&gt;
&lt;li&gt;Other Resources&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Setting up the Gitignore
&lt;/h1&gt;

&lt;p&gt;For many collaborations I've worked in, most programmers have complained how much Git behaves with Unity. Git is notorious with working with Unity. This is also based on my personal endeavors with Git and Unity as well. I'm super glad to finally have found the template to handle FMOD's files into Unity for Git.&lt;/p&gt;

&lt;p&gt;Here is the &lt;strong&gt;Gitignore template&lt;/strong&gt;:&lt;br&gt;
Reference from &lt;a href="https://qa.fmod.com/t/fmod-tip-gitignore-for-the-fmod-integration-in-unity-fmod-unity-gitignore/16283" rel="noopener noreferrer"&gt;Paalo's post in the FMOD Forums&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;### FMOD Unity Integration ###
# Never ignore DLLs in the FMOD subfolder, so make sure that the 
# FMOD-folder is in the correct path.
!/[Aa]ssets/Plugins/FMOD/**/*.dll

# Don't ignore images and gizmos used by FMOD in the Unity Editor
!/[Aa}ssets/Gizmos/FMOD/*
!/[Aa}ssets/Editor Default Resources/FMOD/*

# Ignore the Cache-file since it is updated locally either way
/[Aa]ssets/**/FMODStudioCache.asset
/[Aa]ssets/**/FMODStudioCache.asset.meta
/[Aa]ssets/Plugins/FMOD/Cache.meta
/[Aa]ssets/Plugins/FMOD/Cache/Editor.meta

# Log-files
fmod.log
fmod_editor.log

# FMOD 1.10.x (Legacy)
/Assets/FMODAssets/*
/Assets/FMODStudioCache.meta
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With web development, Git is nice with because of the size of files. When it comes to Unity, Unreal Engine, or other game engine, it's a tricky story because now we are dealing with an LFS (Large File Storage) territory. That's for a whole other topic, I've had some failures from a past game jam collaboration trying to incorporate &lt;a href="https://git-lfs.github.com/" rel="noopener noreferrer"&gt;LFS. You can give it a try here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Audio Files are no joke because we mostly work with .wav &amp;amp; .ogg format. And .wav files can get pretty big, especially in music when dealing with instrumentation, time length, sound libraries, etc. &lt;/p&gt;

&lt;p&gt;Personally, I use .wav when I compose music or sound design in my DAW. Except if I'm using Wwise, I'll still work with .wav, but compress the files into .ogg in Wwise, for compressing file size, but that's going a bit off tangent.&lt;/p&gt;

&lt;p&gt;This may differ for other people's setup, when our team was setting up the game project for a Git repo, we had 2 gitignore files. One gitignore was on the outside folder from the Unity Folder, and the other in the actual Unity project folder. I would just copy this &lt;strong&gt;FMOD template&lt;/strong&gt; in &lt;strong&gt;both gitignores&lt;/strong&gt; just in case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Source Control
&lt;/h2&gt;

&lt;p&gt;When using the Git Terminal, the most common commands to utilize is:&lt;/p&gt;

&lt;p&gt;This will add all files you want to be pushed to the repo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can customize your message, that will be seen on the repo, best to add a message that relates to your latest progress you made&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "add commit message here"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You are grabbing the files from the repo in case other collaborators pushed their files and changes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git pull
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You push up your files and changes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When collaborating with others, it's safer to &lt;strong&gt;git pull&lt;/strong&gt; before &lt;strong&gt;git push&lt;/strong&gt; in order to avoid less merge conflicts (which will happen, it WILL HAPPEN). &lt;/p&gt;

&lt;p&gt;=============&lt;br&gt;
3/15/21 Edited&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git reset --hard &amp;lt;commit code number&amp;gt; //
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The commit code number usually looks like a string of random letters and numbers like this (without the &amp;lt; &amp;gt; surrounding):&lt;br&gt;
64f31ej5q1684028501w1389ui67nv2z745h7234&lt;/p&gt;

&lt;p&gt;Which can be found in the git repo, That's what those git commit messages are for!&lt;/p&gt;

&lt;p&gt;Git reset is used to revert back to a previous commit, or previous version if you find yourself messing up on your current progress.&lt;/p&gt;

&lt;p&gt;=============&lt;/p&gt;

&lt;p&gt;Just based on experience, the other collaborators will somehow get some meta or cache FMOD files from your pushes. Your FMOD project is the main one that you will be merging anyway to resolve since you are in charge of making changes to those FMOD files. &lt;/p&gt;

&lt;h2&gt;
  
  
  Build Files
&lt;/h2&gt;

&lt;p&gt;Creating the export files differs on which route you take on how you import them into your Unity project. It's listed in the FMOD Documentation here: &lt;a href="https://fmod.com/resources/documentation-unity?version=2.0&amp;amp;page=user-guide.html#setting-up" rel="noopener noreferrer"&gt;Accessing Your FMOD Studio Content&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Which they do a wonderful job explaining it, but I can try to add on my experience as well.&lt;/p&gt;

&lt;p&gt;So in Unity (after installing FMOD into your project), on the top menu, go to:&lt;br&gt;
FMOD -&amp;gt; Edit Settings &lt;/p&gt;

&lt;p&gt;And inspector should open &lt;strong&gt;FMODStudioSettings&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4hu0twtiu9r554lc84xz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4hu0twtiu9r554lc84xz.png" alt="FMOD Studio Settings" width="753" height="975"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are three ways on how you want to share your FMOD files into the collaboration space. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Project&lt;/li&gt;
&lt;li&gt;Single Platform Build&lt;/li&gt;
&lt;li&gt;Multiple Platform Build&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Project&lt;/strong&gt;: This way, you can drag your whole FMOD Project Folder and add it into your Assets Folder in Unity (to be in the folder level next to scripts folder, prefabs folder, scenes folder, etc.)&lt;/p&gt;

&lt;p&gt;Looking for the .fspro project file.&lt;/p&gt;

&lt;p&gt;This would probably be used if you are collaborating with multiple game audio members who need access to FMOD project, because you are essentially adding the whole project folder into the Unity folder. This also means that there might be complications with the other non-audio members that don't want to deal with merge conflicts of accidentally altering any files with FMOD, whether it could be from hidden meta or cache files. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Single Platform Build&lt;/strong&gt;: This way is instead of bringing your whole FMOD Project folder into the Unity Assets Folder, you just need to bring in the bank files you generated from FMOD. In case you're not sure how to generate the bank files:&lt;/p&gt;

&lt;p&gt;File -&amp;gt; Build&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjj0ga4qvny6vn6n9ufyo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjj0ga4qvny6vn6n9ufyo.png" alt="File Build" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It should have generated these files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fs9aw7062zk6lylr0cxz8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fs9aw7062zk6lylr0cxz8.png" alt="Build Files" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you have installed FMOD to your Unity Project already, you should have two folders called "Gizmos" &amp;amp; "Plugins" generated in the Unity Main Assets folder:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjc8jfyha3eyddx4614gd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjc8jfyha3eyddx4614gd.png" alt="Unity Assets" width="800" height="583"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gizmos carries the an FMODEmitter file, while the Plugins carries the cache data. &lt;/p&gt;

&lt;p&gt;You can create a new folder in the Unity Assets Folder, calling it "FMOD Banks" (feel free to name it the way you want, as long as you negotiate to your collaborators for file/folder name conventions) for organizational purpose. &lt;/p&gt;

&lt;p&gt;For me, I dragged the FMOD Master.bank &amp;amp; Master.strings.bank files into the FMOD Banks folder. I created the FMOD Banks folder in Gizmos (you don't have to only place it there). I would have probably just place FMOD Banks Folder in the main Assets Folder. &lt;/p&gt;

&lt;p&gt;You can also set up an automation location of where you want your FMOD builds to generate.&lt;/p&gt;

&lt;p&gt;Preferences -&amp;gt; Build Tab -&amp;gt; Browse where you want to generate the build files&lt;/p&gt;

&lt;p&gt;In this case, you would place them into your FMOD Banks folder in your Unity Assets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fdfsk0q14xgq0t0ggfy2i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fdfsk0q14xgq0t0ggfy2i.png" alt="Preference" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flma96o7brlmjhuz6qgcy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flma96o7brlmjhuz6qgcy.png" alt="Build Export" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multiple Platform Build&lt;/strong&gt;: This way is when importing from multiple sub directories. Personally, I have not used this yet because I have not built a game in this scope yet. However, in the FMOD documentation, its use is when you want to use separate .Bank files for separate builds based on each platform (console, PC, Mac, mobile, etc.).&lt;/p&gt;

&lt;p&gt;The main goal is having the files in the Unity Project folder in order to keep it in scope of where the Git Repo is located. &lt;/p&gt;

&lt;p&gt;I've been curious about looking at alternatives of Git with Game development. I've been suggested Perforce, which I'll probably look into the future since I've heard that is AAA studio standard. I think it's because Git is open source and easily accessible to a wide audience, which commonly most people go to for source control.&lt;/p&gt;

&lt;p&gt;My way of working with FMOD may not fit for everyone, feel free to add your workflow with it. I'm mainly sharing my experience that I've had a rough time before with dealing with setups for collaborations but now finding something that actually worked for me.&lt;/p&gt;

&lt;p&gt;I just hope this helps with game audio folks getting into collaborative projects.&lt;/p&gt;

&lt;p&gt;Here are more resources for things discussed in this blog.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.atlassian.com/git/tutorials/saving-changes/gitignore" rel="noopener noreferrer"&gt;Gitignore&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pluralsight.com/guides/how-to-use-gitignore-file" rel="noopener noreferrer"&gt;How to use gitignore file&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://git-lfs.github.com/" rel="noopener noreferrer"&gt;Git LFS (Large File Storage)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fmod.com/resources/documentation-unity?version=2.0&amp;amp;page=user-guide.html#using-a-multiple-platform-build" rel="noopener noreferrer"&gt;Getting Started in FMOD&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.perforce.com/" rel="noopener noreferrer"&gt;Perforce&lt;/a&gt;&lt;/p&gt;

</description>
      <category>fmod</category>
      <category>gamedev</category>
      <category>gameaudio</category>
      <category>git</category>
    </item>
    <item>
      <title>2020 Update &amp; currently recovering from burnout</title>
      <dc:creator>Fabian Fabro</dc:creator>
      <pubDate>Mon, 19 Oct 2020 20:31:07 +0000</pubDate>
      <link>https://dev.to/fihra/2020-update-currently-recovering-from-burnout-3o9b</link>
      <guid>https://dev.to/fihra/2020-update-currently-recovering-from-burnout-3o9b</guid>
      <description>&lt;p&gt;Welp. I haven't blogged since the beginning of this year. It's funny, a self reflection blog I wrote back in January, ready to make changes in my life and conquer, then COVID hits right near the end of February. What timing huh? Did I feel I was able to get through things? I wouldn't say the least. So much has happened in these couple of months.&lt;/p&gt;

&lt;p&gt;I'll be ranting and just talking about my life update, so if this doesn't interest you, I don't mind if you stop reading and skip this article. This is just another one of my life rants.&lt;/p&gt;

&lt;p&gt;March - April:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slowed down in productivity progress on personal projects&lt;/li&gt;
&lt;li&gt;Joined and collaborated in a few game jams&lt;/li&gt;
&lt;li&gt;Constant job rejections, no interviews&lt;/li&gt;
&lt;li&gt;Animal Crossing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;May:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Even slower progress on productivity&lt;/li&gt;
&lt;li&gt;Playing games&lt;/li&gt;
&lt;li&gt;Stopped applying jobs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;End of May - June:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;George Floyd happened&lt;/li&gt;
&lt;li&gt;Developed and deployed a web app out of anger &amp;amp; remorse for the Black Lives Matter movement&lt;/li&gt;
&lt;li&gt;Submit more job applications, more rejections, no interviews&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;July:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Participate game jams&lt;/li&gt;
&lt;li&gt;Work on game projects&lt;/li&gt;
&lt;li&gt;Finally got an interview for a technical sound designer position, submitted the take home technical audio test&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;August: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Waiting for results for the technical sound designer position, sent follow-up emails...no response.&lt;/li&gt;
&lt;li&gt;Work on personal projects&lt;/li&gt;
&lt;li&gt;Submit more job applications, more rejections, no interviews&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;September:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Participate in another game jam&lt;/li&gt;
&lt;li&gt;Work on personal projects&lt;/li&gt;
&lt;li&gt;Play games&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now it's October, what am I doing now?:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I'm participating in yet another game jam, but this time it's a solo game project&lt;/li&gt;
&lt;li&gt;Picked up pixel art drawing, for the game project, but also because I've been wanting to draw too&lt;/li&gt;
&lt;li&gt;Starting FreeCodeCamp's Data Structures &amp;amp; Algorithms Course, because I'm feeling really rusty in those topics, especially since I haven't been practicing coding problems either.&lt;/li&gt;
&lt;li&gt;Started Twitch Streaming &lt;/li&gt;
&lt;li&gt;Submitting some job applications, rejections as usual&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wish I can share a success story about myself, but no, a year of finishing a coding bootcamp &amp;amp; COVID happening, it feels even harder to find a job. &lt;/p&gt;

&lt;p&gt;My title also mentions my burnout. Well, I'm tired. I'm tired of applying for jobs and just getting rejected. I'm tired of questioning my self-worth because of these rejections, to not even be able to talk to a human being. I would rather get rejected at the interview stage, that way I know I talked to a human and got feedback, but no, just a robot email echoing to me: &lt;/p&gt;

&lt;p&gt;Unfortunately, "Insert Company Name" has moved to the next step in their hiring process, and your application was not selected at this time.&lt;/p&gt;

&lt;p&gt;I just want to create stuff. But I'd like to also be able to be financially be stable to create stuff for people.&lt;/p&gt;

</description>
      <category>burnout</category>
      <category>beginners</category>
      <category>life</category>
    </item>
    <item>
      <title>Self Reflection 2019, Improve Myself for 2020</title>
      <dc:creator>Fabian Fabro</dc:creator>
      <pubDate>Wed, 01 Jan 2020 05:04:11 +0000</pubDate>
      <link>https://dev.to/fihra/self-reflection-2019-improve-myself-for-2020-3j9a</link>
      <guid>https://dev.to/fihra/self-reflection-2019-improve-myself-for-2020-3j9a</guid>
      <description>&lt;p&gt;This is going to be a small, casual post. Less tech but still tech-related topics. And probably a big rant as well.&lt;/p&gt;

&lt;p&gt;The past two months have been a very stressful endeavor, especially this month. I won't go into full details since I feel like they are a bit too personal to share. &lt;/p&gt;

&lt;p&gt;These past few days for the new year, I decided to take some steps back, self reflect on myself, ask myself many questions, watch videos on personality traits and the psychological self.&lt;/p&gt;

&lt;p&gt;I think the biggest cause that made me have this self reflection was seeing constant rejections from job applications, which made me start doubting my skills and my self worth. I noticed my doubt as I started picking up C++ and the JUCE Framework, and saw that trying to debug the tutorials was stressful, especially when I was barely familiar with the language, and the videos mentioning how I should have some better background in DSP (Digital Signal Processing), which I barely have (I have written a blog on it before that was not even scratching the surface). So I decided to take a step back from the JUCE Framework and relearn C++ and dive into DSP, which did not go well. C++ is a difficult for me to grasp and most DSP sources always started off with math equations and algorithms, and my math is actually really terrible, so I couldn't grasp that side. What I'm saying is that DSP is not a beginner friendly topic according to one of my friends that studied it is currently a data scientist for Microsoft. So now, I feel like I have to down another rabbit hole and start learning the math requirements to understand DSP. This has discouraged me so much that it started affecting my programmer self. Am I good enough to even tackle on this? Why am I even tackling this when I could be working on another thing? I'm struggling with this language and this topic that I sometimes forget why I'm studying it.&lt;/p&gt;

&lt;p&gt;My biggest stress along with this endeavor is balance. Because I'm trying to tackle in two industries for two different positions, a Software Engineer in the Tech Industry and an Technical Sound Designer in the Game Industry, but if I were to combine it, it would be an Audio Software Engineer.&lt;/p&gt;

&lt;p&gt;I feel like I've lost focus because trying C++ has been a struggling beast for me. My focus has been all over the place this month, I've had over 100 tabs open, for every single error I'm always trying to debug, a chapter from DSP readings, youtube tutorials of trying to do certain things in C++, Linkedin Jobs, Indeed Jobs, social media, JUCE Framework, game-dev related articles, miscellaneous Youtube videos. I'd be constantly switching over tabs to a different task every 10 minutes or so. I'd be scrolling my phone every 5 minutes through social media, refreshing, refreshing. I'd be switching through different programs to my IDE for coding work then on my music work if I got a C++ bug and couldn't solve it in the next 5 minutes and wouldn't return back to my IDE for a long while. I wouldn't even shut down my computer when I go to sleep, just to keep all my tabs and programs open so that way I see it once I wake up the next day. I felt that this had ruined me. I felt broken as I felt scattered with no system. I felt when I graduated from my bootcamp, I had the drive and energy to keep learning because my target of topics was more open, but I think when I tried to dive into topics that I should be going for career wise, I've been straining to drill these topics but they were just not sinking in as I was tackling a way over out of comfort zone. I think it's because I've mostly worked with web development that I could say it is my comfort zone, and tackling new topics within web development doesn't feel too daunting even when it gets hard. However, I think since tackling C++ and trying to actually work with stand-alone application, or not web (can't think of another word for it), development, this was a huge step out of my comfort zone with programming. &lt;/p&gt;

&lt;p&gt;With all the above stressing me and my mentality losing it, I kinda broke down this Mid-December. That's why these past few days I took the time to not actually plan out what to do, but question myself and question everything I'm doing at this point in my life right now. &lt;/p&gt;

&lt;p&gt;Here are some questions I asked myself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What do I want to do in the game industry?&lt;/li&gt;
&lt;li&gt;What do I want to do in Audio?&lt;/li&gt;
&lt;li&gt;Why did I go into software engineering?&lt;/li&gt;
&lt;li&gt;Why do I do music?&lt;/li&gt;
&lt;li&gt;How do I achieve parts of goal?&lt;/li&gt;
&lt;li&gt;What are the steps I need to take?&lt;/li&gt;
&lt;li&gt;How do I break down topics to work on?&lt;/li&gt;
&lt;li&gt;How do I balance audio and tech?&lt;/li&gt;
&lt;li&gt;What do I need to work on for myself?&lt;/li&gt;
&lt;li&gt;How do I work on my soft skills?&lt;/li&gt;
&lt;li&gt;How do I work on my introvertness?&lt;/li&gt;
&lt;li&gt;What do I see myself doing as a living?&lt;/li&gt;
&lt;li&gt;Sometimes I feel like I’ve disconnected myself from friends.&lt;/li&gt;
&lt;li&gt;How do I reconnect with friends again?&lt;/li&gt;
&lt;li&gt;How do I overcome my introvertness?&lt;/li&gt;
&lt;li&gt;How can I improve my mentality to overcome imposter syndrome?&lt;/li&gt;
&lt;li&gt;How do I try not to burn myself out?&lt;/li&gt;
&lt;li&gt;Have I stacked upon so much on myself on what I want to do in life?&lt;/li&gt;
&lt;li&gt;How do I recognize my self-worth after facing so much rejections at once?&lt;/li&gt;
&lt;li&gt;I try to do things on my own and don’t reach out for help when I should because of being afraid of being rejected or ghosted to not ever get a reply back as I would probably be waiting for a long time.&lt;/li&gt;
&lt;li&gt;How should I approach my job search if I’m trying to pursue in two industries simultaneously (Game Audio &amp;amp; Tech)?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm sure sure not all of you have the same questions about yourself with these, but just think about, and really break down what you are trying to question about yourself. Why do you exist? Why do you do what you're doing? Why did you choose programming? How are you still going even after facing so much rejection?&lt;/p&gt;

&lt;p&gt;That is why I want to try an approach for myself. I've never been a tact with working with schedules. I usually work in whatever flow I'm in, and sometimes I felt that sometimes a disorganized approach. It's nice because that flow is a nice driving feeling. But now, I wanted to try this for 2020. I want to schedule in every detail that I know what I already do and work on them in a timely manner. &lt;/p&gt;

&lt;p&gt;I decided to try out the Taskade Firefox Extension App to help me plan out my daily agendas and calendar events. I'm going to try out the StayOnTask Android Phone app to notify me if I'm being productive with my time. I'm trying to plan out more agendas, like breaking down the topics to study that way it's not vague like "Continue learning C++." I feel like I would need to break it down where it's like "work on the next 2-3 modules in the C++ Udemy Course," with "Practice building a small app based on those 2-3 modules." My goal is that if I can check off at least 50% of daily agenda tasks a day, then I'd feel accomplished in that sense.&lt;/p&gt;

&lt;p&gt;I want to try out the #100DaysofCode as I feel that will fix my learning drive again.&lt;/p&gt;

&lt;p&gt;I actually do want to start DSP blog series, especially to make it beginner friendly, but that is after I am able to comprehend the starting topics for it, or when some of it starts sinking in.&lt;/p&gt;

&lt;p&gt;I noticed that my other last blog post was also a rant, I actually had more tech related topics saved as drafts, but I haven't gotten the chance to work on them. So, I apologize for listening to another rant, but I also thank you if you've reached this part of the blog.&lt;/p&gt;

&lt;p&gt;To myself for 2020:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I want to be able to organize myself better&lt;/li&gt;
&lt;li&gt;Improve my mental well-being&lt;/li&gt;
&lt;li&gt;Get good&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sources&lt;/p&gt;

&lt;p&gt;Taskade - &lt;a href="//www.Taskade.com"&gt;www.Taskade.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;StayOnTask - &lt;a href="https://play.google.com/store/apps/details?id=valavg.stayontask&amp;amp;hl=en_US" rel="noopener noreferrer"&gt;StayOnTask App&lt;/a&gt;&lt;/p&gt;

</description>
      <category>codenewbie</category>
      <category>help</category>
      <category>organizing</category>
      <category>challenge</category>
    </item>
    <item>
      <title>Experiencing a Game Jam as an Audio Integrator &amp; Sound Designer</title>
      <dc:creator>Fabian Fabro</dc:creator>
      <pubDate>Mon, 11 Nov 2019 21:42:36 +0000</pubDate>
      <link>https://dev.to/fihra/experiencing-a-game-jam-as-an-audio-integrator-sound-designer-4cf5</link>
      <guid>https://dev.to/fihra/experiencing-a-game-jam-as-an-audio-integrator-sound-designer-4cf5</guid>
      <description>&lt;p&gt;So for those unfamiliar to what a game jam is, it is an event where people of different artistic backgrounds from coding, visual art, story writing, audio, program management, game design, etc. come together to build a game revolving around a given theme within a scheduled amount of time. It is similar to a hackathon, but game-focused. One of the most well-known game jam is the "Global Game Jam" where countries all across the world spend 48 hours to build a game, from Friday early evening to Sunday late afternoon. Live streamed on Twitch to view the progress going on from France, Korea, Australia, Brazil, around many US States, and many more.&lt;/p&gt;

&lt;p&gt;I have worked with Global Game Jam twice, but as a Composer and a Sound Designer. I just participated in a recent game jam, my third one, by Seattle Indies, a meetup for local game devs around Seattle. I'll say, music is my strong suit to my skill set to offer. However, it seemed that there were more composers that attended this game jam, so it was actually difficult for me to jump on a game project for music, so I decided to jump in as a sound designer and audio integrator. &lt;strong&gt;Audio integrator&lt;/strong&gt;, I find many terms for this, &lt;strong&gt;Audio Implementer&lt;/strong&gt;, &lt;strong&gt;Tech Sound Designer&lt;/strong&gt;, &lt;strong&gt;Audio Engineering&lt;/strong&gt;. All-in-all, they essentially do the same task for game development, program the audio assets into the game.&lt;/p&gt;

&lt;p&gt;I have spent the last week learning Wwise, an audio middleware that makes it easier to design more control with sound assets for a game. And I had to pick up FMOD, another audio middleware like Wwise, a few days before the Seattle Indies Game Jam was coming up since I had problems installing certain Unity extension packages for Wwise in order to incorporate it into Unity projects. I've only worked with FMOD a bit back then, but only working on my original music to manipulate and control on FMOD, but not knowing the Unity side of connecting FMOD. So that was my short few days spent learning the Unity integration side of FMOD. I realized it was already rough learning the integration to FMOD, because most tutorials I found on it would only focus more on just FMOD alone, or a little bit of FMOD &amp;amp; Unity because FMOD is geared towards composers and sound designers, tutorials focus less on coding and more on audio manipulation, which I understand because those were helpful of my music part of me, but the coding part of me wanted to learn the nitty gritty work of connecting those sounds into the game. Working with the FMOD API and watching tutorials are always working with outdated versions, especially with the Unity update versions, so always seeing myself trying to follow along the code and finding out it poses errors that give no helpful error messages. So debugging FMOD errors is always a pain in the sense that there is not enough answers. I was basically learning Unity at the same time learning the integrating side of FMOD in such a limited amount of time before the jam.&lt;/p&gt;

&lt;h3&gt;
  
  
  Jam Day Kickoff!
&lt;/h3&gt;

&lt;p&gt;Arriving to game jam, preparing for an intense 2 1/2 days of cramming to build a game, starting from Friday 5pm to Sunday 5pm. Ready......GO!!!&lt;/p&gt;

&lt;p&gt;//////&lt;br&gt;
Quick side note if unfamiliar of the process for game jams:&lt;br&gt;
Before starting, first there is a mingle and meet, getting to know what skill backgrounds people are coming from. Then we are given a prep talk, discussing past game jammers experiences and stories, the judges, the prizes, and the THEME.&lt;br&gt;
//////&lt;/p&gt;

&lt;p&gt;The theme was "&lt;strong&gt;&lt;em&gt;Intentionally Broken&lt;/em&gt;&lt;/strong&gt;." Build a game in inspiration based on this theme.&lt;/p&gt;

&lt;p&gt;I joined with a group, where we built a game called OSHA Coaster, Department of Laborers was a our team name for fun.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbk0yka6ejoi07y5t5txq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbk0yka6ejoi07y5t5txq.png" alt="OSHA Coaster" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Synopsis:&lt;br&gt;
OSHA Coaster lets you live out your dreams of inflicting inflicting as much pain and suffering to allow you cash in on that sweet medical bill money. Find a way to balance the rising costs of an ever-expanding theme park against the need to out compete your competitors in the industry of thrills and joys.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://terrehbyte.itch.io/osha-coaster" rel="noopener noreferrer"&gt;Play OSHA Coaster here&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  So, Here I am, in charge of Audio Integration
&lt;/h2&gt;

&lt;p&gt;Sound design was not too bad since I've done it before, experimenting with sounds to get that right punch to that sound. It's a tiring process for my ears listening to the same 1 sec or 2 of SFX because of constantly playing back and editing.&lt;/p&gt;
&lt;h3&gt;
  
  
  Now the Audio Integration Part!!
&lt;/h3&gt;

&lt;p&gt;If you reached to this part of the blog, I want to thank you for taking the time to reading this so far. So to start, we started up a github repo as the Unity project was starting up too. We mainly stuck with the master branch as I asked one of the experienced game programmers of why we don't use other branches, coming from a web development experience of utilizing multiple branches, but it's because of many of us having to send different types of assets, we need to see immediate feedback towards the unity project straight rather than having to send assets to multiple branches. Plus with the unity project, we were having multiple game scenes being built, which would be like the multiple projects, but it's like prototype after prototype to integrate updated assets every commit coming in. &lt;/p&gt;

&lt;p&gt;Entering FMOD project instantiated! So I installed the Unity FMOD integration package in order to attach my FMOD project into this Unity project. Little did we know, all hell was gonna break loose soon. It started off fine, I was able to attach music to the FMOD Listener along with a SFX playing with player interaction on click events placing objects. It's all good, all good. Then...taking it on the next level of trying to control parameters in FMOD to Unity FMOD Event Emit Listener, and adding another SFX for another type of player interaction using another FMOD Event Emit Listener became a problematic start. I wanted to be able to debug log incoming FMOD events in a C# script to see what information I was getting back from those calls, but the debug messages were not helpful, then I found out FMOD had their own debugging log, but it was difficult to utilize. &lt;/p&gt;

&lt;p&gt;Then came the Git flow control. Committing my changes with FMOD and pushing them up. Ok, just a bunch of warnings but no errors, the game can still run. Other pushes occur from the other team members. I pull down. &lt;/p&gt;

&lt;p&gt;Everything is broken. Where is the game scene? Where are all the game objects in the hierarchy?! Why isn't anything running?? Merge-conflict?!!? Merge conflict on certain assets?? Edit them on a text editor?!?! But....it's on Unity, and these types of files are not text files? How can I resolve these merge conflicts? "FMOD Editor Log" merge conflict?!? "FMOD meta files?!" What is going on?!?!?! Umm help!! I'm sorry!!!! I'm sorry for breaking things!!!!&lt;/p&gt;

&lt;p&gt;This was everything that was happening to me on my side with Unity. The FMOD meta files, cache, and editor log would constantly be changing with every time the game would run, which caused so much merge conflicts when I updated assets into FMOD and pushed. So the other team members had to adjust the gitignore file to handle some problems with FMOD:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.gitignore
/Assets/FMODStudioCache.asset
/Assets/FMODStudioCache.asset.meta
fmod.log
fmod_editor.log 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maybe it was the location of where I saved the FMOD project? And whenever I linked the FMOD to Unity, I think it was linking from my local machine folder and not the folder within the Unity project where the git repo was living, so this caused with breaking the connection and mixing up between my FMOD local files, to the FMOD in the Unity project directory. I thought I had to make it separate because of FMOD's project files probably clashing with Unity's directory. That was not too bad to resolve since I just had to work with the FMOD project I saved in the Unity project directory since that's where the connection is.&lt;/p&gt;

&lt;p&gt;So I thought keeping the FMOD Project Folder separate from Unity Project Folder is how it works, but when working with a team and a git repo, adding the FMOD Project Folder within the Unity Project Directory is to do it. It sounds like such an obvious beginner mistake but I made that mistake so I'll have to accept that.&lt;/p&gt;

&lt;p&gt;However, even with the FMOD Project folder within an Assets folder in Unity, there were still merge conflicts happening to the "fmod_editor.log" file even though it was in the .gitignore, which we were getting annoyed on why that kept showing up all the time. &lt;/p&gt;

&lt;p&gt;Some git commands I didn't know about that I learned:&lt;/p&gt;

&lt;p&gt;git checkout --theirs FILENAME&lt;br&gt;
git checkout --ours FILENAME&lt;br&gt;
git checkout :/&lt;/p&gt;

&lt;p&gt;--theirs FILENAME = taking their changes over yours&lt;br&gt;
--ours FILENAME = taking my changes&lt;/p&gt;

&lt;p&gt;These are quick auto-resolves when handling merge conflicts. I can't remember if it worked for some of the issues or not but it was something we tried. &lt;/p&gt;

&lt;p&gt;git checkout :/ was an interesting one, where I believe it was to ignore the conflicted commits that you wanted to push, that way you were only pushing the ones that were added and not ticked for conflict. &lt;/p&gt;

&lt;p&gt;With all this mess in hands after facing the last few tries of working with FMOD, I decided to do something I didn't want to but knew I had to quickly adjust just so we can get the audio assets implemented into the game.&lt;/p&gt;

&lt;h3&gt;
  
  
  Abandon ship FMOD &amp;amp; work with Unity's AudioSource
&lt;/h3&gt;

&lt;p&gt;So, we decided to delete the FMOD files, disconnect the FMOD components connected to the game objects, to switch to just working with the AudioSource components, which was fine even though it was basic and I wanted to customize and control the sound much more through FMOD, but had to adapt quickly and make do learning parts of the AudioSource API. I switched gears, trying to attach audios to new game objects, to prefabs, coding a script for switching music (with help from one of the game programmers). And let's update:&lt;br&gt;
git add .&lt;br&gt;
git commit -m "here are some sweet audio stuff in now"&lt;br&gt;
git push&lt;/p&gt;

&lt;p&gt;'git push failed to push some refs'&lt;br&gt;
ok ok...&lt;/p&gt;

&lt;p&gt;git pull&lt;br&gt;
git push&lt;br&gt;
pray...&lt;/p&gt;

&lt;p&gt;MERGE CONFLICT! MERGE CONFLICT!! &lt;/p&gt;

&lt;p&gt;WHAT IS GOING ON?!?!?! &lt;br&gt;
FMOD??!!?! I Thought we killed you??!?!?!&lt;/p&gt;

&lt;p&gt;Apparently the FMOD cache and meta files would still continue living on even not in use. Looking up some other forums of people trying to get rid of the FMOD package after installing it into their project. It was more of a hassle getting rid of than just ignoring it altogether. So we had to literally purge FMOD files, ignoring more meta and just burying it until it does not come back the light of day. And then we reached to the end with minor repercussions. I was causing less conflicts with not using FMOD and just small problems here and there. But we pull through, in 2 days, we built a game. &lt;/p&gt;

&lt;p&gt;If you have reached here, thanks for listening to my rant about unity audio integration with FMOD. To what it's worth, I don't hate FMOD, I still like it as an audio middleware. I can see the potential of its use, same with Wwise, but hearing from experienced game programmers stories about game jams and audio middleware, and it is still one of the most challenging experiences for them that most usually don't succeed in implementing it. &lt;/p&gt;

&lt;p&gt;But this just makes me think, there is not enough tutorials in learning the middle ground side of working with FMOD in Unity, like fully. As I see it, mostly composers and sound designers solely focus on the FMOD/Wwise/audio middleware software while the game programmers focus on Unity, or Unreal Engine, seeing that the job would be for the game programmers to be in charge of integrating the audio using the audio middleware packages. The main thing the game programmer and composer/sound designers that would be collaborating about is the parameter control, game objects, cues, triggers, variables to be able to connect and talk to each other from both softwares.&lt;/p&gt;

&lt;p&gt;//Rant Note&lt;br&gt;
I wanted to challenge myself to be able to be that bridge since I was familiar with audio middleware (from short time crunch cramming) and familiar a bit with Unity (with small crunch time learning as well). Especially when I hear from game programmers with game projects, and personally I don't like hearing this, "music and sound is not a priority in a game." Music &amp;amp; sound is just as an important asset to the rest of the team. It is part of the team as it is the front-end that people will hear when playing a game. Sure you can play a game on mute, but when sound effects play a big role into a game, like interactive cues or music cues, then it is just as essential as the art, story, and coding. &lt;br&gt;
//Rant Note Done&lt;/p&gt;

&lt;h3&gt;
  
  
  Game Jam is DONE
&lt;/h3&gt;

&lt;p&gt;So we built the game! There is a 2 week jam period starting now where we can polish this game and will be showcasing at Seattle's Pacific Science Center.&lt;/p&gt;

&lt;p&gt;I want to personally thank the game programmers on my team for being understandable and patient with my mess ups that occurred throughout this journey.&lt;/p&gt;

&lt;p&gt;My goal: I really want to implement FMOD back in because I've been wanting to work with audio middleware with games.&lt;/p&gt;

&lt;p&gt;OSHA Coaster&lt;/p&gt;

&lt;p&gt;You can try it out here at itch.io&lt;/p&gt;

&lt;p&gt;&lt;a href="https://terrehbyte.itch.io/osha-coaster" rel="noopener noreferrer"&gt;https://terrehbyte.itch.io/osha-coaster&lt;/a&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>gamedev</category>
      <category>audio</category>
      <category>collaboration</category>
    </item>
    <item>
      <title>Reference a Pointer to Point to a Reference</title>
      <dc:creator>Fabian Fabro</dc:creator>
      <pubDate>Mon, 04 Nov 2019 16:38:15 +0000</pubDate>
      <link>https://dev.to/fihra/reference-a-pointer-to-point-to-a-reference-2a1p</link>
      <guid>https://dev.to/fihra/reference-a-pointer-to-point-to-a-reference-2a1p</guid>
      <description>&lt;p&gt;I have been intimidated by C++ for such a long time because of how long this language has been around and how it is a standard for most developers coming from a computer science background (I don't come from a traditional computer science background for context). I was not sure if I would have been able to tackle a &lt;a href="https://en.wikipedia.org/wiki/Low-level_programming_language" rel="noopener noreferrer"&gt;low level&lt;/a&gt; language with my caliber of mostly using &lt;a href="https://en.wikipedia.org/wiki/High-level_programming_language" rel="noopener noreferrer"&gt;high level&lt;/a&gt; languages. Although, there is debate that C++ is sometimes being considered a high-level language, but it would then be kept as mid-level, as it could have traits of both low and high level languages. However, I knew I would want to try C++ at some point because many music &amp;amp; audio tools are built using this language. But that's besides the point. Point.&lt;/p&gt;

&lt;p&gt;So, Pointers and Reference! Something I always heard about whenever I find topics about C++. Let's start with references. &lt;/p&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;p&gt;What is a reference? Reference is the memory address of a variable. This uses the &amp;amp; operator with the variable name. Let's show how it looks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="c1"&gt;//instantiate int variable&lt;/span&gt;

&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;//Output: 0x7ffcc1b8a35c&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why doesn't it return the integer 3? And what is that long bunch of characters? This is the location of memory address that is being stored into the computer data. Every variable instantiated gets stored into all these different memory addresses and we can 'reference' them using this reference operator. &lt;/p&gt;

&lt;p&gt;The long address output, &lt;a href="https://www.programiz.com/cpp-programming/pointers" rel="noopener noreferrer"&gt;Programiz&lt;/a&gt; has a good explanation on that:&lt;/p&gt;

&lt;p&gt;"The 0x in the beginning represents the address in hexadecimal form.&lt;/p&gt;

&lt;p&gt;Notice that first address differs from second by 4-bytes and second address differs from third by 4-bytes.&lt;/p&gt;

&lt;p&gt;This is because the size of integer (variable of type int) is 4 bytes in 64-bit system. "&lt;/p&gt;

&lt;p&gt;Since working with Javascript &amp;amp; Ruby on Rails especially, I'd like to think of this analogy as every variable you are creating also auto-generates an ID to that. Then you can access those 'ids' like &amp;amp;variable_name. So how do we access these? We &lt;strong&gt;point&lt;/strong&gt; to those references using &lt;strong&gt;Pointers&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pointer
&lt;/h2&gt;

&lt;p&gt;What is a pointer? According to the official Cplusplus website:&lt;br&gt;
"...variables have been explained as locations in the computer's memory which can be accessed by their identifier (their name). This way, the program does not need to care about the physical address of the data in memory; it simply uses the identifier whenever it needs to refer to the variable."&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.cplusplus.com/doc/tutorial/pointers/" rel="noopener noreferrer"&gt;Pointers Source&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So we can say that a pointer is what is used to access that reference.&lt;/p&gt;

&lt;p&gt;The syntax for a pointer is adding an * next to the variable name or to the data type, like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//Valid Pointer&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;num2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//Valid Pointer&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And to use the pointer with the reference.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//create variable&lt;/span&gt;

  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//create pointer and assign num variable's reference&lt;/span&gt;

  &lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;endl&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"Pointer: "&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;//Output: 3&lt;/span&gt;
  &lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;endl&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"Reference: "&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;//Output: 0x7ffcc1b8a35c&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can see that when *ptr printed out 3, while &amp;amp;num printed the memory address of num. If we tried to access num as itself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//ERROR: cannot initialize a variable of&lt;/span&gt;
                 &lt;span class="c1"&gt;//type 'int *' with an lvalue of type 'int'&lt;/span&gt;

  &lt;span class="c1"&gt;//or if we tried to access the memory address without using a pointer:&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;num&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//ERROR: cannot initialize a variable of&lt;/span&gt;
                  &lt;span class="c1"&gt;//type 'int' with an rvalue of type 'int *'&lt;/span&gt;

  &lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's invalid because you are trying to access one another without using the other syntax. I would say that the pointer and reference go hand-in-hand together for access, but there could possibly be exceptions to this.&lt;/p&gt;

&lt;p&gt;I just wanted to a basic introduction with pointers and reference, but I can POINT to some good REFERENCES to learn more about this topic, since you can work with Pointers with structs, with arrays, with functions, passing pointers, passing references, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.programiz.com/cpp-programming/pointers-arrays" rel="noopener noreferrer"&gt;Pointers with Arrays&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.programiz.com/cpp-programming/pointers-function" rel="noopener noreferrer"&gt;Pointers with Functions&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.tutorialspoint.com/cplusplus/cpp_passing_pointers_to_functions.htm" rel="noopener noreferrer"&gt;Another Pointers with Functions&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.geeksforgeeks.org/passing-reference-to-a-pointer-in-c/" rel="noopener noreferrer"&gt;Passing Reference to a Pointer&lt;/a&gt;&lt;/p&gt;

</description>
      <category>codenewbie</category>
      <category>cpp</category>
      <category>c</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Final Fantasy XII's Gambit System was like programming for beginners</title>
      <dc:creator>Fabian Fabro</dc:creator>
      <pubDate>Tue, 15 Oct 2019 22:10:04 +0000</pubDate>
      <link>https://dev.to/fihra/final-fantasy-xii-s-gambit-system-was-like-programming-for-beginners-7d1</link>
      <guid>https://dev.to/fihra/final-fantasy-xii-s-gambit-system-was-like-programming-for-beginners-7d1</guid>
      <description>&lt;p&gt;As someone who grew up with video games, especially with the Squaresoft, Square-Enix titles, I thought that Final Fantasy XII's approach to their battle system was fascinating compared to any other of the titles. If you have not played any of the Final Fantasy games, here is a rundown on how the gameplay mechanic works for each title.&lt;/p&gt;

&lt;p&gt;In traditional RPGs, battles are engaged through '&lt;a href="https://en.wikipedia.org/wiki/Random_encounter" rel="noopener noreferrer"&gt;Random Encounters&lt;/a&gt;.' This is generated by the amount of steps taken by the player before a battle is initialized.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;//using c# to describe this&lt;/span&gt;

&lt;span class="n"&gt;Random&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Random&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;steps&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;battleTrigger&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;inBattle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;PlayerMove&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;//Get player's controller input, if playerMove was a method a Player class&lt;/span&gt;
   &lt;span class="n"&gt;playerMove&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;step&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="n"&gt;battleTrigger&lt;/span&gt; &lt;span class="p"&gt;-=&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;  

&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;inBattle&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
   &lt;span class="nf"&gt;PlayerMove&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
   &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;battleTrigger&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
     &lt;span class="n"&gt;inBattle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;--&lt;/span&gt; &lt;span class="n"&gt;Random&lt;/span&gt; &lt;span class="n"&gt;Battle&lt;/span&gt; &lt;span class="n"&gt;Engaged&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Cue&lt;/span&gt; &lt;span class="n"&gt;Battle&lt;/span&gt; &lt;span class="n"&gt;Music&lt;/span&gt;&lt;span class="p"&gt;*&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was based on looking at the algorithm in the Random Encounter Wikipedia link I provided, where it states:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set X to a random integer between 64 and 255.&lt;/li&gt;
&lt;li&gt;For each step in plains, decrement X by 4. For each step in forest, swamp, or desert, decrement X by 8.&lt;/li&gt;
&lt;li&gt;When X &amp;lt; 0, a fight ensues. Go to step 1.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I felt this is more true to the Final Fantasy Random Encounters compared to the first algorithm given. &lt;/p&gt;

&lt;p&gt;There are the exceptions of battle encounters in Final Fantasy I where battles are triggered when you step on a tile adjacent to a dungeon treasure box, (which was super annoying but you knew there was always a battle waiting for you even though you were low on health traversing in a dungeon with low MP!).&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Fantasy I - III: Wait System
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkpvcrvdz004eh3z1evlt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkpvcrvdz004eh3z1evlt.jpg" alt="FFI Battle" width="480" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The player has all of the time in the world to select a command in their array of actions:&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attack&lt;/li&gt;
&lt;li&gt;(Magic) or (Skill) &amp;lt;- According to their class/job&lt;/li&gt;
&lt;li&gt;Defend (or Guard which is the same thing just worded differently sometimes)&lt;/li&gt;
&lt;li&gt;Item&lt;/li&gt;
&lt;li&gt;Flee&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Final Fantasy IV: Slight Active System (Wait System Choice Optional)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.giantbomb.com%2Fuploads%2Foriginal%2F0%2F3068%2F205345-atb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.giantbomb.com%2Fuploads%2Foriginal%2F0%2F3068%2F205345-atb.jpg" alt="FFIV" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attack&lt;/li&gt;
&lt;li&gt;Exclusive Skill to Character&lt;/li&gt;
&lt;li&gt;Additional Exclusive Skill to Character&lt;/li&gt;
&lt;li&gt;Item&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;with side commands Run, Defend, change Row (which affects all party members)&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Fantasy V: Slight Active or Wait System
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpwa8r0ygffm4m9g0u2m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpwa8r0ygffm4m9g0u2m.jpg" alt="FFV" width="640" height="457"&gt;&lt;/a&gt;&lt;br&gt;
Job System&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attack&lt;/li&gt;
&lt;li&gt;Current Job Skill or Customized Command from learnt Job skill if Freelancer &lt;/li&gt;
&lt;li&gt;Customized Command from learnt Job skill&lt;/li&gt;
&lt;li&gt;Item&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;with side commands Run and Defend, change Row (affects that member)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.gamer-network.net%2F2018%2Fusgamer%2FFinal-Fantasy-6-Shot-01.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.gamer-network.net%2F2018%2Fusgamer%2FFinal-Fantasy-6-Shot-01.jpg" alt="FFVI" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Final Fantasy VI: Slight Active or Wait System
&lt;/h3&gt;

&lt;p&gt;Magic System&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attack&lt;/li&gt;
&lt;li&gt;Exclusive Skill to Character&lt;/li&gt;
&lt;li&gt;Magic&lt;/li&gt;
&lt;li&gt;Item&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;with side commands Run and Defend, change Row (affects that member)&lt;/p&gt;

&lt;p&gt;I call these &lt;strong&gt;slight active systems&lt;/strong&gt; because it is a small detail but whenever a command has been initiated and animation starts playing for that action, all of the character's battle gauges are not paused from filling up and the enemies are also waiting as well. &lt;strong&gt;Battle Gauges&lt;/strong&gt; are the wait time for the party member. He or she cannot perform any actions until this gauge is filled, which then resets after their action is performed or an enemy disrupts it with certain attacks. &lt;/p&gt;
&lt;h3&gt;
  
  
  Final Fantasy VII: Full Active or Wait System
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0k0o9yx3zdg1dq8i5fp4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0k0o9yx3zdg1dq8i5fp4.jpg" alt="FFVII" width="400" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Materia System&lt;/p&gt;

&lt;p&gt;Yellow - Special Variations of Attack Command&lt;br&gt;
Green - Magic Command&lt;br&gt;
Red - Summon Command&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attack (Or custom skill using a Yellow Materia equipped)/Limit Break&lt;/li&gt;
&lt;li&gt;Any custom command using Green or Red Materia&lt;/li&gt;
&lt;li&gt;Item&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;with side commands Run and Defend, change Row (affects that member)&lt;/p&gt;

&lt;p&gt;I would call this a Full Active System because of the battle gauges are continuously filling even though an action animation plays through. Although the next chosen action will not trigger until the current animation is playing, it still allows the player to wait and get to their character's command menu during the animation playing out. &lt;/p&gt;
&lt;h3&gt;
  
  
  Final Fantasy VIII: Slight Active or Wait System
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6g32soq21s6288zb004g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6g32soq21s6288zb004g.jpg" alt="FFVIII" width="610" height="343"&gt;&lt;/a&gt;&lt;br&gt;
Junction System&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attack (This can vary depending on Junction commands)/Limit Break&lt;/li&gt;
&lt;li&gt;Draw/Cast &lt;/li&gt;
&lt;li&gt;Custom Command&lt;/li&gt;
&lt;li&gt;Custom Command&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;with side commands Run and Defend, change Row (affects that member)&lt;/p&gt;
&lt;h3&gt;
  
  
  Final Fantasy IX: Active or Wait System
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.thefinalfantasy.com%2Fgallery%2Fscreenshots%2Fff8%2Fdynamic_previews%2Fff8-battle-3_scale_800_700.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.thefinalfantasy.com%2Fgallery%2Fscreenshots%2Fff8%2Fdynamic_previews%2Fff8-battle-3_scale_800_700.png" alt="FFIX" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
Crystal System&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attack/Trance&lt;/li&gt;
&lt;li&gt;Exclusive Skill for Character&lt;/li&gt;
&lt;li&gt;Exclusive Skill for Character&lt;/li&gt;
&lt;li&gt;Item&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;with side commands Run and Defend, change Row (affects that member)&lt;/p&gt;
&lt;h3&gt;
  
  
  Final Fantasy X: Wait System
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvignette.wikia.nocookie.net%2Ftechxperts%2Fimages%2F8%2F81%2FFinalfantasyx_1214_screen001.jpg%2Frevision%2Flatest%3Fcb%3D20100715002715" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvignette.wikia.nocookie.net%2Ftechxperts%2Fimages%2F8%2F81%2FFinalfantasyx_1214_screen001.jpg%2Frevision%2Flatest%3Fcb%3D20100715002715" alt="FFX" width="571" height="419"&gt;&lt;/a&gt;&lt;br&gt;
Sphere Grid System&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attack/Overdrive&lt;/li&gt;
&lt;li&gt;Summon (Exclusive to Yuna)&lt;/li&gt;
&lt;li&gt;Skills&lt;/li&gt;
&lt;li&gt;Specials&lt;/li&gt;
&lt;li&gt;Magics &lt;/li&gt;
&lt;li&gt;Defend&lt;/li&gt;
&lt;li&gt;Item&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Side Command to switch party members in battle&lt;/p&gt;

&lt;p&gt;From here on out, the random encounter becomes abandoned, only to adopt to the "On-map" battle encounter where you can visually see enemies you are about to engage with. Other titles such as Chrono Trigger, Persona series, Tales of Series, use this approach. &lt;/p&gt;
&lt;h3&gt;
  
  
  Final Fantasy XI: MMORPG
&lt;/h3&gt;

&lt;p&gt;I'm actually unfamiliar as I have not experienced this game but from my understanding of watching some footage, you engage into enemies wandering across the map.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.rpgfan.com%2Freviews%2Ffinalfantasy11%2Fss-02.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.rpgfan.com%2Freviews%2Ffinalfantasy11%2Fss-02.jpg" alt="FFXI" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attack/Switch Target&lt;/li&gt;
&lt;li&gt;Magic/Casting Time (Wait time when casting a spell)&lt;/li&gt;
&lt;li&gt;Abilities&lt;/li&gt;
&lt;li&gt;Items&lt;/li&gt;
&lt;li&gt;Disengage/Call for Help &lt;/li&gt;
&lt;li&gt;Check (Analyze Description in the log window)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  And Now We reach to Final Fantasy XII
&lt;/h2&gt;

&lt;p&gt;If you've stuck around till now, thanks for reading so far, I know this was a handful to read but I wanted to provide this information to understand the progression of evolution Square-Enix took in order to change up the battle mechanics for traditional RPGs. &lt;/p&gt;
&lt;h3&gt;
  
  
  Final Fantasy XII: Active but also Wait System And Introducing the &lt;strong&gt;Gambit System&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;So what is the &lt;a href="https://finalfantasy.fandom.com/wiki/Gambits" rel="noopener noreferrer"&gt;Gambit&lt;/a&gt; System?&lt;/p&gt;

&lt;p&gt;Gambits are the functionality used to control the action commands for your party members in battle. The control of Active or Wait System is interesting for this game. Since there are no random encounters but on-map encounters, the player can engage battle if they want, unless there are monsters who are aggressive and will engage you instead. When inputting commands, 'Active' let's time to keep running while selecting from the command menu. 'Wait' pauses the game in motion as you are selecting your next action. After the action has been selected, that character will always perform that action whenever the gauge fills up, until you give another command. This would be the case when Gambit is selected Off because you have to micro manage every action for each character.&lt;/p&gt;

&lt;p&gt;This is the main command list for Character Actions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attack&lt;/li&gt;
&lt;li&gt;Magick &amp;amp; Technicks&lt;/li&gt;
&lt;li&gt;Mist&lt;/li&gt;
&lt;li&gt;Gambit [On or Off Toggle]&lt;/li&gt;
&lt;li&gt;Items&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F076vo6f2qngjd3whpyf4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F076vo6f2qngjd3whpyf4.jpg" alt="FFXII License Board" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the License Grid where the Player can choose the skills, equipment, status increases, in order to improve their characters.&lt;/p&gt;

&lt;p&gt;I did not play Zodiac Age but I saw that the big change was dividing up all the licenses to learn by the Job System.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd2skuhm0vrry40.cloudfront.net%2F2017%2Farticles%2F2017-07-11-15-39%2F11_07_2017_03.jpg%2FEG11%2Fresize%2F690x-1%2Fquality%2F75%2Fformat%2Fjpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd2skuhm0vrry40.cloudfront.net%2F2017%2Farticles%2F2017-07-11-15-39%2F11_07_2017_03.jpg%2FEG11%2Fresize%2F690x-1%2Fquality%2F75%2Fformat%2Fjpg" alt="FFXII Job System" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is video footage of the battle system in play.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fhardcore-gamer.s3.amazonaws.com%2Fuploads%2F2017%2F07%2Fffxii3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fhardcore-gamer.s3.amazonaws.com%2Fuploads%2F2017%2F07%2Fffxii3.jpg" alt="FFXII Battle" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/kNluu5Ab2PA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;So now, turning on Gambits, we are turning on custom functionality for our party members in order to determine actions they will take according to certain conditions. Let's take a look at how these Gambit Commands look:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvytk4r4bgmr9yb631b23.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvytk4r4bgmr9yb631b23.jpg" alt="Baltier's Gambit Actions" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Picture from: &lt;a href="https://news.xbox.com/en-us/wp-content/uploads/sites/2/3-FFXII-The-Zodiac-Age-Xbox-One-Gambit-Detail.jpg?resize=1020%2C574" rel="noopener noreferrer"&gt;https://news.xbox.com/en-us/wp-content/uploads/sites/2/3-FFXII-The-Zodiac-Age-Xbox-One-Gambit-Detail.jpg?resize=1020%2C574&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alright Baltier, you awesome sky pirate, let's see what you got!&lt;/p&gt;

&lt;p&gt;We see that each action is indexed from 1 - 12 on the left. This is the priority level with 1 being the highest priority and 12 being the lowest priority.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Foe: HP = 100% -&amp;gt; Steal&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is saying that once a battle is engaged, With a foe at full health, Baltier will use the steal command at that foe. Then if an ally deals damage to that foe, Baltier will check if that foe's health is 100%, which is not so it moves on to the next command. Next,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ally: any -&amp;gt; *Phoenix Down&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;*Phoenix Down is a revival item when a party member is dead.&lt;/p&gt;

&lt;p&gt;This says that Baltier will use a Phoenix Down on any member, although the item only works if the member is dead.&lt;/p&gt;

&lt;p&gt;Red Commands = Offensive Actions &lt;br&gt;
Blue Commands = Defensive Actions  &lt;/p&gt;

&lt;p&gt;Let's take a look at one more:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Foe: 5+ foes present -&amp;gt; Flare&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When there are 5 or more foes alive and nearby, Baltier will cast Flare (A non-elemental magic attack). &lt;/p&gt;

&lt;p&gt;Let's look at this in a code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FoeHP&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CurrentHP&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="n"&gt;FoeHP&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaxHP&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;BaltierAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Steal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Foe&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; 
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Ally&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;BaltierAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;useItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Phoenix Down"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Ally&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; 
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Ally&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CurrentMP&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="n"&gt;Ally&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaxMP&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;BaltierAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;useItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hi-Ether"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Ally&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;//Ether recovers magic points&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Ally&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CurrentHP&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="n"&gt;Ally&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaxHP&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;BaltierAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;castSpell&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Curaga"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Ally&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Ally&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;BaltierAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;castSpell&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Esuna"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Ally&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Foe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Status&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"Reflect"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;BaltierAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;castSpell&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Dispel Mote"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Foe&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Foe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Weakness&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"Fire"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;BaltierAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;castSpell&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Firaga"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Foe&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Foe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Weakness&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"Lightning"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;BaltierAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;castSpell&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Thundaga"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Foe&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Foe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Weakness&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"Ice"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;BaltierAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;castSpell&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Blizzaga"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Foe&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FoeCount&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;BaltierAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;castSpell&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Flare"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FoesArray&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FoeArray&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;//This is an interesting situation&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Ally&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"Ashe"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;BaltierAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;castSpell&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Bubble"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Ashe"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Seeing 11. Foe: Highest HP -&amp;gt; Attack&lt;/p&gt;

&lt;p&gt;This is more like a while loop because what if there is more than 1 foe? Baltier would take into consideration of attack a foe who's HP will always be the highest out of the other foes. If it was just one foe, they it would be an easy action call with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;BaltierAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Attack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Foe&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But account for multiple foes, I would think it would be an array of foes, and checking the foe in that array whoever has the highest CurrentHP, which Baltier will target that Foe. &lt;/p&gt;

&lt;p&gt;I feel like there would be a method call for the FoeArray in order to check this condition like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;//There is probably a better way to do this since this is an O(n)&lt;/span&gt;
&lt;span class="n"&gt;pubic&lt;/span&gt; &lt;span class="n"&gt;Foe&lt;/span&gt; &lt;span class="nf"&gt;FoeWithHighestHP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FoeArray&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
   &lt;span class="n"&gt;Foe&lt;/span&gt; &lt;span class="n"&gt;HighestHPFoe&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FoeArray&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

   &lt;span class="k"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Foe&lt;/span&gt; &lt;span class="n"&gt;foe&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;FoeArray&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;foe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CurrentHP&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;HighestHPFoe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CurrentHP&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="n"&gt;HighestHPFoe&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;foe&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;HighestHPFoe&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;BaltierAction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Attack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;FoeWithHighestHP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FoeArray&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But you get the idea, seeing how much control and customization you have with characters actions in order to fight through the battles. I feel like this is a nice introduction of programming without actually knowing code and Square-Enix did such an interesting take behind the scenes to give this freedom to the player. It's like we are scripting our own AI allies in the way we want them to act.&lt;/p&gt;

&lt;p&gt;I thought this was just a nice fun blog to write because I was always fascinated by connection of Final Fantasy XII's battle system with programming. &lt;/p&gt;

</description>
      <category>codenewbie</category>
      <category>finalfantasy</category>
      <category>beginners</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Introducing MVC with ASP.NET</title>
      <dc:creator>Fabian Fabro</dc:creator>
      <pubDate>Tue, 08 Oct 2019 16:20:27 +0000</pubDate>
      <link>https://dev.to/fihra/introducing-mvc-with-asp-net-2cnh</link>
      <guid>https://dev.to/fihra/introducing-mvc-with-asp-net-2cnh</guid>
      <description>&lt;p&gt;MVC. You have probably come across this word whenever searching through tech topics. &lt;/p&gt;

&lt;p&gt;MVC stands for Model–View–Controller, which is a software architectural pattern. Now to define each of these concepts:&lt;/p&gt;




&lt;p&gt;Model: The central component of the pattern. It is the application's dynamic data structure, independent of the user interface. It directly manages the data, logic and rules of the application.&lt;/p&gt;

&lt;p&gt;View: Any representation of information such as a chart, diagram or table. Multiple views of the same information are possible, such as a bar chart for management and a tabular view for accountants.&lt;/p&gt;

&lt;p&gt;Controller: Accepts input and converts it to commands for the model or view.&lt;br&gt;
---- from &lt;a href="https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller" rel="noopener noreferrer"&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The way I like to think of these three is:&lt;br&gt;
&lt;strong&gt;Models&lt;/strong&gt; are the blueprints for your objects that you create. &lt;strong&gt;Views&lt;/strong&gt; are what is shown to the user interacting with the application. And &lt;strong&gt;Controllers&lt;/strong&gt; are what works all the functionality and logic around the application.  &lt;/p&gt;

&lt;p&gt;Enough Explanations, the best of way of learning these concepts is seeing it in action. In this blog, we will use C# &amp;amp; ASP.NET. I actually learned Ruby on Rails first before switching to ASP.net and the learning curve helped because MVC was actually transferable from one framework to another. If you learned Ruby on Rails first, you will see the connections with ASP.NET.&lt;/p&gt;

&lt;p&gt;So I've been feeling some Boba Tea lately, so let's make an MVC showing different Boba Teas if you ran your own shop and wanted to create a menu for your variety of Boba Teas.&lt;/p&gt;

&lt;p&gt;We'll be using Visual Studio 2017 and we'll choose the .NET Framework. We'll call this project BobaTeaMVC. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26pelx1n67j2uvuzvjag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26pelx1n67j2uvuzvjag.png" alt="Alt Text" width="800" height="545"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll choose the MVC selection, which will scaffold the tools necessary, because why build it from scratch when they give the tools for it already.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkygn0hwbwmfk9vn8h6rh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkygn0hwbwmfk9vn8h6rh.png" alt="Alt Text" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alright, let the scaffolding finish and let's take a look at the Solution Explorer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqle975056434igvceocp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqle975056434igvceocp.png" alt="Alt Text" width="800" height="753"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzo3ahs22ium2nq11ychq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzo3ahs22ium2nq11ychq.png" alt="Alt Text" width="800" height="762"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;WHOA! That's a lot of folders and files. I remember when I was learning Ruby on Rails, I was overwhelmed with all the folders and what everything is, where is the start line?&lt;/p&gt;

&lt;p&gt;Honestly, I don't even know what everything does, same with Ruby on Rails, but I know which ones I know that I would probably be working with the most. &lt;br&gt;
Let's break down the importance of the folders.&lt;/p&gt;

&lt;p&gt;Properties - I've never really looked at this, but it looks like it contains the versions for assemblies.&lt;/p&gt;

&lt;p&gt;References - These are the &lt;strong&gt;extensions&lt;/strong&gt; and &lt;strong&gt;NuGet packages&lt;/strong&gt; you install for your project. Similar to package.json or node modules if you worked in Javascript React. &lt;/p&gt;

&lt;p&gt;App_Start - These are configurations, the important one to be familiar would be the &lt;strong&gt;RouteConfig.cs&lt;/strong&gt;. We will go over this later on. &lt;strong&gt;BundleConfig.cs&lt;/strong&gt; helps group scripts and stylesheets. I haven't practiced with this one yet, but that's what I know it is for so far.&lt;/p&gt;

&lt;p&gt;Content - Most of the styling for bootstrap and css probably lives here.&lt;/p&gt;

&lt;p&gt;Controllers - HEY! We learned this one so far! We'll go over this one because we'll be creating our own controller, but Visual Studio does provide a HomeController to start us off, even to use as reference.&lt;/p&gt;

&lt;p&gt;fonts - Self explanatory, looks like you can provide different formats of fonts.&lt;/p&gt;

&lt;p&gt;Models - HEY! Another one! We'll create one in here too soon.&lt;/p&gt;

&lt;p&gt;Scripts - Where Javascript files live.&lt;/p&gt;

&lt;p&gt;Views, Home, Shared - HEY! And the last one! and there are sub-folders in here with Home &amp;amp; Shared. We'll go over that last.&lt;/p&gt;

&lt;p&gt;So we shall take this one at a time. Let's MAKE A BOBA TEA MODEL!&lt;/p&gt;
&lt;h2&gt;
  
  
  [Model]-V-C
&lt;/h2&gt;

&lt;p&gt;Right click the Models Folder -&amp;gt; Add -&amp;gt; Class&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fysiaiwankay5bcpltl0u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fysiaiwankay5bcpltl0u.png" alt="Alt Text" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And let's call it BobaTea.cs&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fln6uuwe7pl0p15wdg1fk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fln6uuwe7pl0p15wdg1fk.png" alt="Alt Text" width="800" height="513"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;//BobaTea.cs&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Linq&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Web&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;BobaTeaMVC.Models&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BobaTea&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Flavor&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; 
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;HotOrCold&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;Price&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//We'll keep it int for simplicity&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it! We are setting up a BobaTea model with the properties of its flavor, whether it's hot or cold, and the price.&lt;/p&gt;

&lt;p&gt;Now to create a controller.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model-V-[Controller]
&lt;/h2&gt;

&lt;p&gt;Right click the Controllers Folder -&amp;gt; Add -&amp;gt; Controller&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9je2v5nvc2ldpgkhy20q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9je2v5nvc2ldpgkhy20q.png" alt="Alt Text" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will be the BobaTeasController.cs&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyw4xm8854yps8ip0pnng.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyw4xm8854yps8ip0pnng.png" alt="Alt Text" width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjb83tb8blcfwr5ru6zed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjb83tb8blcfwr5ru6zed.png" alt="Alt Text" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll use the plural of the model + "Controller." In practice convention, I was taught pluralizing for controller and singular for model because with controllers you are working with multiple objects of models while model represents the blueprint of an object. Seeing the exception for the HomeController because you don't necessarily have multiple homes. &lt;/p&gt;

&lt;p&gt;Here's a discussion about working with Singular and Plural naming for the controller by Richard Dingwall. &lt;a href="https://richarddingwall.name/2008/08/02/are-your-aspnet-mvc-urls-consistent/" rel="noopener noreferrer"&gt;Are your ASP.NET MVC URLs consistent?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we hit enter and the controller creates!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajvu1ys847j8v355m4es.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajvu1ys847j8v355m4es.png" alt="Alt Text" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I like how they leave us a nice little comment with //GET: BobaTeas (Yes please!).&lt;/p&gt;

&lt;p&gt;So before we dive into the controller let's take a quick left turn to the RoutesConfig.cs located in the App_Start folder (The one we mentioned back above).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F33rj8z769a2tp3mscptg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F33rj8z769a2tp3mscptg.png" alt="Alt Text" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One important section to understand is this portion:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;MapRoute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
   &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Default"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"{controller}/{action}/{id}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="n"&gt;defaults&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;controller&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Home"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Index"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
   &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;UrlParameter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Optional&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a routing for the URL on the web browser that will be calling a controller based on what is provided. The name "Default" can be customized, just be consistent about what the route is for. I usually leave it alone. url shows the order of calling the 'controller' then a certain action or method, and an id. For example, our URL would look like this "&lt;a href="http://localhost:51167/home/index" rel="noopener noreferrer"&gt;http://localhost:51167/home/index&lt;/a&gt;". Defaults is basically the first page that opens when launching the site, which in this case, calls the Home controller, calls the action Index but id is an optional parameter, which if putting "localhost:51167/home/index/5" this will still show just the display for "localhost:51167/home/index". &lt;/p&gt;

&lt;p&gt;Let's quickly peek at the HomeController.cs file. We are seeing a bunch of ActionResult keywords. This is the response to the browser request, based on that URL call.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvu2ffjikwaz4605q2gaw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvu2ffjikwaz4605q2gaw.png" alt="Alt Text" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This portion of the official Windows documentation discusses more about the controller actions and action results. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/controllers-and-routing/aspnet-mvc-controllers-overview-cs" rel="noopener noreferrer"&gt;ASP.NET MVC Controller Overview (C#)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another source from Tutorialsteacher that discusses more about the controller actions and with the RouteConfig.&lt;br&gt;
&lt;a href="https://www.tutorialsteacher.com/mvc/action-method-in-mvc" rel="noopener noreferrer"&gt;Action Method&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's quickly jump back to the RouteConfig and change the defaults controller to "BobaTeas" so we are pointing at the BobaTeas controller and know that we'll be working with that one mainly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwbbqcs8hshc437dri18.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwbbqcs8hshc437dri18.png" alt="Alt Text" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alright, sorry about that tangent. NOW we shall go back to the controller. I just wanted to show the RouteConfig side so you know how the controller is being interacted.&lt;/p&gt;

&lt;p&gt;So, let's add some Boba Tea to our Menu!! We'll instantiate an empty list and create some Boba Tea objects and add it to the list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjdbgjnx5867amlx0n32y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjdbgjnx5867amlx0n32y.png" alt="Alt Text" width="800" height="610"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;//using BobaTeaMVC.Models; &amp;lt;-- Don't forget to add this because BobaTea.cs &lt;/span&gt;
&lt;span class="c1"&gt;//is out of scope from here&lt;/span&gt;
&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;BobaTea&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;bobaTeas&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;BobaTea&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

&lt;span class="n"&gt;bobaTeas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;BobaTea&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Flavor&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Matcha"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HotOrCold&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Cold"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Price&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="n"&gt;bobaTeas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;BobaTea&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Flavor&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Taro"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HotOrCold&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Cold"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Price&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="n"&gt;bobaTeas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;BobaTea&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;Flavor&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Mocha"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HotOrCold&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Hot"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Price&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;//we'll be passing the List inside View();&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;View&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bobaTeas&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One thing you'll notice, if you remember back in the HomeController, there were multiple View(). &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff90szfzikwbs2p5tlt96.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff90szfzikwbs2p5tlt96.png" alt="Alt Text" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ASP.net follows through a flow in the folders, references the Home Controller to the Home Views, and you notice the matching names of the method cshtml files. The View() method is what calls that matching cshtml file. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcyzf2ajdizb8j06o4i0c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcyzf2ajdizb8j06o4i0c.png" alt="Alt Text" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We shall create our own view for our BobaTea Index() method. &lt;/p&gt;

&lt;h2&gt;
  
  
  Model-[View]-Controller
&lt;/h2&gt;

&lt;p&gt;Right Click on Index() -&amp;gt; Add View&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8j9wh15cjev2pnbn37z3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8j9wh15cjev2pnbn37z3.png" alt="Alt Text" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll call it Index, use the List Template.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftaflulg9kkfc9q2lc1gk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftaflulg9kkfc9q2lc1gk.png" alt="Alt Text" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use a layout page, click on the 2 dots, Views Folder -&amp;gt; Shared -&amp;gt; _Layout.cshtml&lt;/p&gt;

&lt;p&gt;You can think of files from the shared folder that would be applied to every page, for instance, headers and footers, or navigation bars. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj74q5tuo228gcltx5swt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj74q5tuo228gcltx5swt.png" alt="Alt Text" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And add the BobaTea (BobaTeaMVC.Models) in Model class.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd5w0akt604showpttk6a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd5w0akt604showpttk6a.png" alt="Alt Text" width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is what's scaffolded (this is because of using the List Template)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fws7xolowo3m5mb8mx271.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fws7xolowo3m5mb8mx271.png" alt="Alt Text" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1csnc20fdma1rb80lyvj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1csnc20fdma1rb80lyvj.png" alt="Alt Text" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, this cshtml looks weird. This is called Razor Syntax. If you are familiar with Ruby on Rails, this is similar to ERB (mixture of Ruby with HTML). In this case, it is a mixture of C# with HTML. The @ symbol is what accesses C# syntax inside until it hits "&amp;lt;" symbol, which Razor will automatically detect that it is now about to read HTML syntax and stops. This is why I wanted to scaffold the template for this because I would not have known to do this if I was working from scratch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@model IEnumerable&amp;lt;BobaTeaMVC.Models.BobaTea&amp;gt;  

&amp;lt;p&amp;gt; &amp;lt;-- HTML Tags
   @Html.ActionLink("Create New", "Create")
&amp;lt;/p&amp;gt; &amp;lt;-- HTML Tags
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's run this now and see how this view is translated!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdc26bz1wd7ifelxs7x52.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdc26bz1wd7ifelxs7x52.png" alt="Alt Text" width="800" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hey!! We got our Boba Teas showing up! And it's organized into a neatly set up table. You can spend some time tracing through the Razor syntax View to see where the models are being referenced. Let's make a tiny change, by adding a $ sign for the price. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyt76fprdoxj1w0x34o70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyt76fprdoxj1w0x34o70.png" alt="Alt Text" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that is an introduction to MVC! I hope this tutorial of walking through ASP.net helped with understanding about the concept of Model-View-Controller. This is not even scratching the surface of using ASP.net's framework with MVC. This concept is transferred when working with different frameworks. Since I came from a Ruby on Rails background first, I had an understanding of the MVC flow when I was trying to learn ASP.NET.&lt;/p&gt;

&lt;p&gt;I have to thank Youtuber IAmTimCorey. His video on ASP.NET MVC helped me understand working with this framework a lot. &lt;br&gt;
&lt;a href="https://www.youtube.com/user/IAmTimCorey" rel="noopener noreferrer"&gt;IAmTimCorey's Youtube Channel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Where to go from here?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explore Restful APIs and Routing&lt;/li&gt;
&lt;li&gt;CRUD operations with MVC&lt;/li&gt;
&lt;li&gt;Connecting SQL Database with MVC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are some resources about MVC:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dotnet.microsoft.com/apps/aspnet/mvc" rel="noopener noreferrer"&gt;ASP.NET MVC Pattern&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/implementing-basic-crud-functionality-with-the-entity-framework-in-asp-net-mvc-application" rel="noopener noreferrer"&gt;Tutorial: Implement CRUD Functionality with the Entity Framework in ASP.NET MVC&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=phyV-OQNeRM" rel="noopener noreferrer"&gt;Introduction to ASP.NET MVC in C#: Basics, Advanced Topics, Tips, Tricks, Best Practices, and More&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/razor-pages-start?view=aspnetcore-3.0&amp;amp;tabs=visual-studio" rel="noopener noreferrer"&gt;Tutorial: Get started with Razor Pages in ASP.NET Core&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are curious about Ruby on Rails since I've mentioned it here,&lt;br&gt;
you can check it out here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rubyonrails.org/" rel="noopener noreferrer"&gt;Ruby on Rails&lt;/a&gt;&lt;/p&gt;

</description>
      <category>codenewbie</category>
      <category>csharp</category>
      <category>mvc</category>
      <category>aspnet</category>
    </item>
    <item>
      <title>Arrays vs. Lists vs. ArrayLists</title>
      <dc:creator>Fabian Fabro</dc:creator>
      <pubDate>Wed, 11 Sep 2019 22:17:13 +0000</pubDate>
      <link>https://dev.to/fihra/arrays-vs-lists-vs-arraylists-1da4</link>
      <guid>https://dev.to/fihra/arrays-vs-lists-vs-arraylists-1da4</guid>
      <description>&lt;p&gt;From experiencing a coding bootcamp, I mostly worked with Ruby &amp;amp; Javascript, later finding out that working with arrays in these two languages are not really considered more 'traditional' arrays. I started picking up C# and noticed that arrays are built differently than Ruby &amp;amp; Javascript. The 'arrays' that we worked with in those two languages are viewed more as a 'List', or even more-so as an 'ArrayList.' Let's explore the differences of these three and see which one would be appropriate to use depending on circumstances. &lt;/p&gt;

&lt;h2&gt;
  
  
  Arrays
&lt;/h2&gt;

&lt;h4&gt;
  
  
  'In Ruby'
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;empty_array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="n"&gt;num_array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;random_array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'words'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'house'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;num_array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'something'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="c1"&gt;#num_array &amp;lt;&amp;lt; 7 &amp;lt;&amp;lt; 5 &amp;lt;&amp;lt; 'something' #works the same way&lt;/span&gt;
&lt;span class="c1"&gt;#num_array output: [2, 6, 25, 100, 7, 5, 'something']&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  'In Javascript'
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;emptyArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;numArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;randomArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;words&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;house&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nx"&gt;numArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;something&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;//numArray output: [2, 6, 25, 100, 7, 5, 'something']&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  'In C#'
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;emptyNumArray&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;numArray&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="c1"&gt;//int[] numArray = {2, 6, 25, 100}; //Alternate to above&lt;/span&gt;
&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;stringArray&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="n"&gt;words&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="n"&gt;something&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="n"&gt;stuff&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;randomArray&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="n"&gt;words&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="n"&gt;house&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="c1"&gt;//This returns an error&lt;/span&gt;

&lt;span class="c1"&gt;//No method for pushing, or appending to an array&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we can see Ruby and Javascript are pretty similar and flexible with how they work their arrays. You can create empty arrays, push new objects into the array, more specifically push pretty much anything to an array. C# seems to be very picky about how the array is constructed. Let's look through each line and see what's going on in C#.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;emptyNumArray&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is actually a pretty useless array because sure we are creating an empty array, but we are giving it 0 length of slots. If we changed this to at least a length:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;emptyNumArray&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;emptyNumArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;++){&lt;/span&gt;
   &lt;span class="n"&gt;emptyNumArray&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;//Then we have to append integers to each slot of the array.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This shows that arrays are locked in this sense, not giving this flexibility of being appending to a container. Also notice that there is this 'int[].' This also locks the array to only allow integer values in this array, that's why we saw earlier with the 'string[] randomArray' in C# that it gave an error. &lt;/p&gt;

&lt;p&gt;Although, one thing I did find for Ruby and Javascript is that you can instantiate an array with a fixed size.&lt;/p&gt;

&lt;p&gt;Ruby&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;#array with a length of 5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Javascript&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newArr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, now that we've seen some differences in languages of using arrays, let's understand what an Array really is. &lt;/p&gt;

&lt;p&gt;"An array is a data structure, which can store a fixed-size collection of elements of the same data type. An array is used to store a collection of data, but it is often more useful to think of an array as a collection of variables of the same type" - &lt;a href="https://www.tutorialspoint.com/computer_programming/computer_programming_arrays.htm" rel="noopener noreferrer"&gt;From Tutorialspoint&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wait, then how do we describe Ruby and Javascript's 'arrays?' We can describe them more as a &lt;a href="https://en.wikipedia.org/wiki/Dynamic_array" rel="noopener noreferrer"&gt;Dynamic array&lt;/a&gt; because it is growable, resizable, and mutable. &lt;/p&gt;

&lt;p&gt;So the opposite of Dynamic would a &lt;a href="https://hank.feild.org/feild-guide-cpp/arrays.html" rel="noopener noreferrer"&gt;Static array&lt;/a&gt;. In this link, Henry Feild defines static arrays as 'arrays that require that we know the size at compile time.' We can think of this as that we have to define the array its size and that it is immutable, mainly with locked values in place. &lt;/p&gt;

&lt;p&gt;This is all due to the heap and stack memory allocation. That is a whole lot to be discussed for this blog so I will provide links for each language of how they deal with memory allocation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.sitepoint.com/ruby-uses-memory/" rel="noopener noreferrer"&gt;How Ruby Uses Memory&lt;/a&gt;&lt;br&gt;
&lt;a href="https://glebbahmutov.com/blog/javascript-stack-size/" rel="noopener noreferrer"&gt;JavaScript stack size &lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.c-sharpcorner.com/article/C-Sharp-heaping-vs-stacking-in-net-part-i/" rel="noopener noreferrer"&gt;C# Heap(ing) Vs Stack(ing) In .NET - Part One&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But lets move on, so how do we solve this problem with appending in C#? Introducing lists!&lt;/p&gt;
&lt;h2&gt;
  
  
  Lists
&lt;/h2&gt;

&lt;p&gt;"A list is an object which holds variables in a specific order." - &lt;a href="https://www.learncs.org/en/Lists" rel="noopener noreferrer"&gt;Source&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In retrospect, this is the dynamic array like in Ruby and Javascript that we can use for C#.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;//You'll have to import a method library to use the List syntax&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;listOfNumbers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

&lt;span class="n"&gt;listOfNumbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;listOfNumbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;listOfNumbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;listOfNumbers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;//listOfNumbers output: {2, 6, 25, 100};&lt;/span&gt;

&lt;span class="c1"&gt;//You can also instantiate from the beginning&lt;/span&gt;
&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;listOfNumbers2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;{&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In C#, lists are commonly used more than arrays, but there are some situations when arrays are necessary, like if your data is not supposed to grow drastically. &lt;/p&gt;

&lt;p&gt;Here is a link to seeing the differences between arrays and lists in C#.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.educba.com/c-sharp-array-vs-list/" rel="noopener noreferrer"&gt;C# Array vs List&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So onto the last part, ArrayLists!&lt;/p&gt;

&lt;h2&gt;
  
  
  ArrayLists
&lt;/h2&gt;

&lt;p&gt;"An ArrayList is a non-generic type of collection in C#. It can contain elements of any data types. It is similar to an array, except that it grows automatically as you add items in it. Unlike an array, you don't need to specify the size of ArrayList." - &lt;a href="https://www.tutorialsteacher.com/csharp/csharp-arraylist" rel="noopener noreferrer"&gt;Source&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;//Import syntax library to use ArrayList&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;ArrayList&lt;/span&gt; &lt;span class="n"&gt;newList&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ArrayList&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;newList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;newList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;newList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;//newList output: {"A", 4, false};&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So it looks like Arraylist is more flexible than List because of the data type constraint. It is unusual that Lists are considered the 'generic' collection while Arraylists are the 'non-generic' collection. Arraylists mainly create a collection of "Object" Type, converting the other type variables into an object, as opposed to Lists that stick with a certain data type when instantiating a list.&lt;/p&gt;

&lt;p&gt;And that is all I got about Arrays, Lists, and Arraylists. There is many resources that discuss this topic about differences these data structures because of how different languages utilize their data structures, as we compared the differences with Ruby, Javascript, and C#. I hope this was a useful blog of a mini introduction and seeing these data structures in different perspectives.&lt;/p&gt;

</description>
      <category>codenewbie</category>
      <category>arrays</category>
      <category>lists</category>
      <category>arraylists</category>
    </item>
  </channel>
</rss>
