<?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: Pandaa</title>
    <description>The latest articles on DEV Community by Pandaa (@pandaalifter).</description>
    <link>https://dev.to/pandaalifter</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%2F1006610%2F666ce1e7-7824-42a4-b0b3-e04748a34751.png</url>
      <title>DEV Community: Pandaa</title>
      <link>https://dev.to/pandaalifter</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pandaalifter"/>
    <language>en</language>
    <item>
      <title>Project 2 Final Post</title>
      <dc:creator>Pandaa</dc:creator>
      <pubDate>Mon, 10 Apr 2023 03:31:55 +0000</pubDate>
      <link>https://dev.to/pandaalifter/project-2-final-post-51o8</link>
      <guid>https://dev.to/pandaalifter/project-2-final-post-51o8</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KosuOuTs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n53tvcf4q724wnxu3zgp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KosuOuTs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n53tvcf4q724wnxu3zgp.png" alt="Image description" width="800" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How many elements did you end up going with? Why did you break it up that way?
&lt;/h2&gt;

&lt;p&gt;Our group ended up using four elements in our project. They are called &lt;strong&gt;badge-card, badge-list, search-bar,&lt;/strong&gt; and &lt;strong&gt;step-card&lt;/strong&gt; in alphabetical order. This division came to us naturally as we tried to break down the functions of the webpage into simple components. The badge-card element is much like our previous card-list assignment, so it was the first that we implemented. It mostly served to build the base structure of each card. Next came the badge-list element, since it what's necessary to render the API data that we brought in using a &lt;strong&gt;fetch&lt;/strong&gt; command. The thought process for this was almost entirely based on our early API homework in Week 10, where a similar element was used to map the fetched dataset to an existing Array property. &lt;/p&gt;

&lt;p&gt;The search-bar was the most unique and unknown aspect of the project, which is why it was also broken into its own element. This houses a ton of jury-rigged code to read and clean user input. Finally, we broke off the step-card element because we wanted to retain flexibility for the number of steps in each badge. Our group wanted to ensure that each badge could support any number of steps. Although we could have made a fifth top-level element called badge-card, we ended up deciding to continue using the index.html file to stay with what's familiar to us.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was the hardest aspect of this?
&lt;/h2&gt;

&lt;p&gt;The hardest part of this project was most definitely creating the search bar. Although the professor eventually uploaded a video guide for how to implement it, we had already spent the entire previous weekend to solve it on our own. In total it took us about fifteen hours of work to get it working. Despite feeling extremely drained afterwards, our team feels great that we got it done. &lt;/p&gt;

&lt;p&gt;Our process while working towards our solution was a time-consuming trek across the internet. It was all a step-by-step process, where we worked on little chunks of its function at a time. Many of these hours were taken up scouring StackOverflow for related implementations to reference. After this, we'd start taking a crack at the feature using previous knowledge about loops and boolean logic from other classes. CoPilot also acted as a great help with general syntax for Lit-Element and JavaScript.&lt;/p&gt;

&lt;p&gt;If parts of the code didn't work, then we ended up throwing it at ChatGPT but probably not in the way most people would expect. Many people think that it'll replace our jobs and trivialize schoolwork, but at least with web development, the code solutions that it spat out were incorrect more often than not. Instead we mostly looked at ChatGPT to explain error codes or general concepts to us. After this, it often gave us enough information to GO ALL THE WAY BACK TO STACKOVERFLOW!!! And with more relevant articles, we'd finally come across some useful information on our problems. Our group bashed our heads against the wall way too much throughout this endeavor. To be perfectly honest, our team probably should have waited for the professor to release his guide, but we had thought it wouldn't happen.&lt;/p&gt;

&lt;p&gt;The following code demonstrates how our program interprets user input in the search bar. The first function is attached to the &lt;strong&gt;input&lt;/strong&gt; element as an event listener and includes the second function in its list of processes. After the second declares the necessary variables, a &lt;strong&gt;for&lt;/strong&gt; loop is used to track through each character in the input. Using a technology called regex, the &lt;strong&gt;string&lt;/strong&gt; associated with the input is scrubbed of whitespace and punctuation before being pushed to a new &lt;strong&gt;Array&lt;/strong&gt; property.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9yWzW0F0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yol6qmn5nejw9mmohi1e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9yWzW0F0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yol6qmn5nejw9mmohi1e.png" alt="Image description" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, the following event runs any time changes to our input property is detected. It runs a fetch function on an API JSON, before passing it through a &lt;strong&gt;filter&lt;/strong&gt;. Our implementation is designed to be flexible and accepts a data entry as long as it matches at least one of the qualifiers. There is also a &lt;strong&gt;setTimeout&lt;/strong&gt; function because we decided to do some extra work and implement loading screens. Unfortunately, Vercel is just too fast and awesome, so our screens didn't get any time to shine without setting minimum durations.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ORkNHrWV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jdmrih51se4rdblt3644.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ORkNHrWV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jdmrih51se4rdblt3644.png" alt="Image description" width="663" height="794"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What part of this project was easier than you expected?
&lt;/h2&gt;

&lt;p&gt;At first, we had believed that getting rid of the default arrow for the summary/detail element would be extremely difficult. However, after seriously searching for only a few minutes, we discovered how to implement it for all browsers using only two CSS properties and a pseudoselector. We were pretty shocked about how simple it was after actually taking time to go past the first page of Google results. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fbAvIlAi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ipu707dax8fz0vbetkvg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fbAvIlAi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ipu707dax8fz0vbetkvg.png" alt="Image description" width="625" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One other thing that ended up being much easier than expected was our loading screens. We had believed that some sort of complex logic process would be needed. However, we succeeded with only a single if-statement within the HTML render. That was very satisfying to say the least.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--shnNZKwr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/crv7sp2el6ow5o6885p4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--shnNZKwr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/crv7sp2el6ow5o6885p4.png" alt="Image description" width="687" height="194"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Isn't it beautiful?&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KdjglSSJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g7s12xd66ujw5slech2j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KdjglSSJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g7s12xd66ujw5slech2j.png" alt="Image description" width="800" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>webcomponents</category>
      <category>css</category>
    </item>
    <item>
      <title>Project 2: Week 12 Check-in</title>
      <dc:creator>Pandaa</dc:creator>
      <pubDate>Mon, 03 Apr 2023 03:41:53 +0000</pubDate>
      <link>https://dev.to/pandaalifter/project-2-week-12-check-in-40e7</link>
      <guid>https://dev.to/pandaalifter/project-2-week-12-check-in-40e7</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yNZ5JYlG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xrwmvstsa2hobkg1yt4k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yNZ5JYlG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xrwmvstsa2hobkg1yt4k.png" alt="Image description" width="880" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Progression we've made
&lt;/h2&gt;

&lt;p&gt;Our group managed to clean up several design aspects of the badges, such as centering the badge icons and coloring the borders according to spec. We surprised ourselves by also getting the majority of the JavaScript functions for this project working. Due to this, the majority of work that remains is the CSS side of the project. &lt;/p&gt;

&lt;p&gt;A major feature that was added was implementing an additional API to hold data related to the "Steps to Complete" section of the badges. The secondary API was used to allow badges to have an unrestricted amount of steps, while preventing every badge from displaying every step. This was done by filtering the incoming JSON data to only associate when its &lt;strong&gt;tag&lt;/strong&gt; property matches a badge's &lt;strong&gt;title&lt;/strong&gt; property. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K0Y3Q7Ux--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0jw20ae9g5ftqumvzb9o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K0Y3Q7Ux--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0jw20ae9g5ftqumvzb9o.png" alt="Image description" width="482" height="290"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The steps are set up to render when a toggle event is expanded in order to keep the process dynamic.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WvrXxLpL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1091473311944417470/image.png%3Fwidth%3D1161%26height%3D283" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WvrXxLpL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1091473311944417470/image.png%3Fwidth%3D1161%26height%3D283" alt="Image description" width="774" height="189"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, we have used a custom event to keep the toggle process stateful. It is invoked in the &lt;strong&gt;index.html&lt;/strong&gt; file, which is the application-level file for this project.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AAGCVPYR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1091473384061284372/image.png%3Fwidth%3D1023%26height%3D489" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AAGCVPYR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1091473384061284372/image.png%3Fwidth%3D1023%26height%3D489" alt="Image description" width="682" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How did you get the relationship between searching and rendering results working
&lt;/h2&gt;

&lt;p&gt;Our version of the search bar operates in a segmented manner across components. The majority of the filtering work occurs on the application-level in our &lt;strong&gt;index.html&lt;/strong&gt; file. It operates by listening for changes in our custom &lt;strong&gt;input-changed&lt;/strong&gt; element. After this, it detects whether the &lt;strong&gt;filteredInput&lt;/strong&gt; array that it receives has contents. If not, then the complete API JSON data set is passed through the fetch function. But if there is input, then the array is used for a "filter" process that modifies which badges are displayed.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lmK16cDl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1092248549376397312/image.png%3Fwidth%3D1192%26height%3D496" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lmK16cDl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1092248549376397312/image.png%3Fwidth%3D1192%26height%3D496" alt="Image description" width="795" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our current function filters for whether any elements in the array match the &lt;strong&gt;title&lt;/strong&gt; or &lt;strong&gt;author&lt;/strong&gt; properties of the data set. The &lt;strong&gt;.filter()&lt;/strong&gt; method only returns elements that pass as true. The &lt;strong&gt;.some()&lt;/strong&gt; method returns true if any elements match between two arrays. The &lt;strong&gt;.include()&lt;/strong&gt; method only returns true if all values match but works here since we're using it for each word one at a time.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bpix_F5R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1092248735892914216/image.png%3Fwidth%3D1375%26height%3D586" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bpix_F5R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1092248735892914216/image.png%3Fwidth%3D1375%26height%3D586" alt="Image description" width="880" height="375"&gt;&lt;/a&gt; Because our function changes the property that is mapped in the &lt;strong&gt;badge-list.js&lt;/strong&gt; rendering file, this means that the component re-renders whenever the input changes.&lt;/p&gt;

&lt;p&gt;As for how user input is interpreted, the following screenshots demonstrate the process. First, we have a function called &lt;strong&gt;searchInput()&lt;/strong&gt; that functions as an event listener and records all new input into a string called &lt;strong&gt;inputs&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XnURDVIp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1092249208477720576/image.png%3Fwidth%3D1356%26height%3D210" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XnURDVIp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1092249208477720576/image.png%3Fwidth%3D1356%26height%3D210" alt="Image description" width="880" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our second method &lt;strong&gt;searchFilter()&lt;/strong&gt; is where the real magic happens. It takes the string that we made and then passes it through a &lt;strong&gt;for&lt;/strong&gt; loop and several &lt;strong&gt;regex&lt;/strong&gt; statements. These are used to scan the string and cleanse it of irregularities, before returning it as an array. The first two check for whitespace and punctuations before and at their current position, while the third regex statement is used to delete any non-alphanumeric characters. We didn't know much about regex before this project but discovered the &lt;strong&gt;.test()&lt;/strong&gt; method while searching for methods to get rid of specific characters. Afterwards, we went to town on regex calculators to come up with some jury-rigged solutions.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9OKLa8P6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1092249375339712562/image.png%3Fwidth%3D1215%26height%3D598" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9OKLa8P6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1092249375339712562/image.png%3Fwidth%3D1215%26height%3D598" alt="Image description" width="810" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This custom element is used to make the function stateful and allow it to bubble up to the application-level file. This allows the program to listen for it and initiate the filter process.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lZslQh2Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1092249593464504340/image.png%3Fwidth%3D1276%26height%3D594" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lZslQh2Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1092249593464504340/image.png%3Fwidth%3D1276%26height%3D594" alt="Image description" width="851" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Draw a diagram on draw.io for user interaction pattern
&lt;/h2&gt;

&lt;p&gt;The following is our best attempt at creating a user interaction pattern diagram. It's our first time drawing such a diagram, so we are unsure whether it's been done correctly. Nevertheless, we do feel that we were clear in demonstrating what happens from user input, through machine sending value, to re-rendering on the page.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g0iu7xSJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9ld17pgdtslem6trmv1e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g0iu7xSJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9ld17pgdtslem6trmv1e.png" alt="Image description" width="880" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Think of a real-world example of how could we use micro-service architecture to solve a real problem at a company currently using a monolithic design architecture?
&lt;/h2&gt;

&lt;p&gt;A great example of where micro-service architecture could be perfect is any storefront or e-commerce website. These websites often experience user traffic in ebbs and flows through the seasons. Due to this, if a website like Amazon used a monolithic architecture designed for their low season, then this could spell disaster during holidays like Black Friday or Christmas. These events often have massive explosions of users and purchases. &lt;/p&gt;

&lt;p&gt;A monolithic design wouldn't be quickly scalable for this because the entire program would need to be retrofitted. However, with micro-service architecture, we would be able to independently scale whichever individual component was needed. Additionally, this would allow easier deployment of new features and services in updates. This is because developers wouldn't need to worry as much about bugs in one component affecting the rest. This makes micro-services both more sustainable and much cheaper in the long run for this situation.&lt;/p&gt;

&lt;h2&gt;
  
  
  More issues that we're stuck on
&lt;/h2&gt;

&lt;p&gt;Our CSS is still not enough to make our webpage match the example shown in class. We have also faced troubles getting rid of the arrow that comes with the &lt;strong&gt;detail/summary&lt;/strong&gt; tag that we're using for the toggle. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rRuwM-sX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1091474881973076098/image.png%3Fwidth%3D1440%26height%3D135" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rRuwM-sX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media.discordapp.net/attachments/1012737432820645938/1091474881973076098/image.png%3Fwidth%3D1440%26height%3D135" alt="Image description" width="880" height="83"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our plan to solve this is to ask the professor and/or TA for assistance about how to best approach solutions for these issues.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>webcomponents</category>
      <category>api</category>
    </item>
    <item>
      <title>Frameworks, Web Components, and Me (Week 7)</title>
      <dc:creator>Pandaa</dc:creator>
      <pubDate>Mon, 27 Feb 2023 04:26:10 +0000</pubDate>
      <link>https://dev.to/pandaalifter/react-web-components-and-me-week-7-560a</link>
      <guid>https://dev.to/pandaalifter/react-web-components-and-me-week-7-560a</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Welcome to my little corner of the internet! The wonderful world of webdev is a really interesting space that I've only gotten a small taste of. The technologies contain a lot of great features that I've come to love, but they're held back by many shortcomings when it comes to onboarding. Now that I'm seven weeks into my journey, I'd like to write a brief reflection about my experiences exploring the current landscape.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is confusing about platforms?
&lt;/h2&gt;

&lt;p&gt;I think the biggest source of confusion for me was just the sheer amount of options out there. There are so many different platforms/frameworks with so many different rules and design philosophies. It's difficult to keep heads or tails of things, especially if you're jumping between them on multiple projects. Some platforms match the vanilla behaviors of our main programming languages (HTML, CSS, and JavaScript), but most end up wanting to do thing their own way with changes completely distinct from the competition. The inconsistency makes my brain melt...&lt;/p&gt;

&lt;h2&gt;
  
  
  How could web components and VanillaJS standards be taught in a way that is more approachable?
&lt;/h2&gt;

&lt;p&gt;Both standards could benefit greatly from simply providing users with more concrete examples and thorough explanations in their documentation. A misstep of both is that they don't handhold newcomers through the setup process. The Mozilla MDN that VanillaJS relies on is a great resource with tons of useful information, but it reads like gibberish to people with no prior experience. The available web component documentation, on the other hand, just isn't populated with nearly as much content due to how new and niche the platform is. Beginners need everything explicitly explained to them. They don't know what a &lt;code&gt;querySelector&lt;/code&gt; or a &lt;code&gt;scaffold&lt;/code&gt; is but are expected to make use of them almost immediately. &lt;/p&gt;

&lt;p&gt;Luckily, Vanilla JavaScript has thousands of tutorials as a benefit of its age, but web components aren't quite so fortunate. I believe that it would be helpful if these resources both offered some fully completed basic projects for new users to poke and prod. I find that being able to mess with something that already works helps a lot with early learning. Outside of tutorials, this is a great way to demonstrate exactly how different functions can typically be used for various purposes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What did I find easiest to work with on 1st stab?
&lt;/h2&gt;

&lt;p&gt;I definitely found VueJS the easiest to understand on my first attempt. I may be a bit biased because I was given the most time to learn with this framework. However, my rationale is that I liked the framework because it didn't feel too different from VanillaJS in syntax. Although it had some of its own quirks such as the heavy use of &lt;code&gt;&amp;lt;template&amp;gt;&lt;/code&gt; tags, it felt very readable, for the most part, compared to platforms like Angular and Svelte. Web components shared in this readability advantage but lost when it came to creating JavaScript events. Many of the others required knowledge of what a DOM (Document Object Model) is and how to utilize alternate versions of it. VueJS, on the other hand, felt especially simple and allowed me to easily write standard functions with vanilla logic. For each individual webpage in VueJS, almost all the action happens within the same file, which removed the need for cross-DOM scoping.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thinking back on the tooling. What parts were confusing? What clicked with me immediately?
&lt;/h2&gt;

&lt;p&gt;I found the tooling fairly straightforward in VueJS. The HTML in it followed standard structure. Its CSS and JavaScript were also housed in pretty vanilla &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tags. Additionally, they all accessed each other using the early methods I learned using CodePen. The one thing that threw me off initially was the &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt; tag, since my functions only worked in the normal &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag. &lt;/p&gt;

&lt;p&gt;With web components, what confused me was definitely properties in LitElement. They didn't end up being too complicated; however, I had skimmed past the part describing them in LitElement's own documentation. On the other hand, I found &lt;code&gt;&amp;lt;slot&amp;gt;&lt;/code&gt; very easy to get a hang of. This is probably because it's pretty forgiving with incorrect implementations, meaning that it can become functional really quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What additional readings did you have to do in order to make sense of things?
&lt;/h2&gt;

&lt;p&gt;For the most part, official documentation, StackOverflow, and (of course) random webdev blogs were my best friends throughout my learning process. While the web component documentation was fairly lacking, Mozilla's MDN was invaluable for discovering and understanding the operations of all the vanilla languages. Alternatively, StackOverflow was excellent for coming across jury-rigged solutions to all sorts of tiny problems that were never addressed in documentation. The random blogs that I came across tended to feel much the same. I didn't actively search for them, but they'd always pop up when I was pursuing a really obscure question. It felt like striking gold whenever I got provided a functional answer on a basic webpage that hadn't been updated in 7 years! I can only imagine the aftermath if all these websites disappeared one day!&lt;/p&gt;

</description>
      <category>anime</category>
      <category>fightscenes</category>
      <category>animation</category>
    </item>
  </channel>
</rss>
