<?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: avery</title>
    <description>The latest articles on DEV Community by avery (@avery_).</description>
    <link>https://dev.clauneck.workers.dev/avery_</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3509744%2F169aa902-c18b-4ab2-ac89-61f80ba99fb8.jpg</url>
      <title>DEV Community: avery</title>
      <link>https://dev.clauneck.workers.dev/avery_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.clauneck.workers.dev/feed/avery_"/>
    <language>en</language>
    <item>
      <title>27. SQL</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Wed, 17 Jun 2026 15:59:03 +0000</pubDate>
      <link>https://dev.clauneck.workers.dev/avery_/27-sql-4ha6</link>
      <guid>https://dev.clauneck.workers.dev/avery_/27-sql-4ha6</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. SQL Commands: CREATE TABLE and INSERT Data&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CRUD Operations : Create(INSERT), Read(SELECT), Update(UPDATE), Delete/Destroy(DELETE)&lt;/li&gt;
&lt;li&gt;Useful Resources

&lt;ul&gt;
&lt;li&gt;SQL Tutorial: &lt;a href="https://www.w3schools.com/sql/" rel="noopener noreferrer"&gt;https://www.w3schools.com/sql/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;SQL Data Types: &lt;a href="https://www.w3schools.com/sql/sql_datatypes.asp" rel="noopener noreferrer"&gt;https://www.w3schools.com/sql/sql_datatypes.asp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;SQL Primary Key: &lt;a href="https://www.w3schools.com/sql/sql_primarykey.asp" rel="noopener noreferrer"&gt;https://www.w3schools.com/sql/sql_primarykey.asp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Online SQL Playground: &lt;a href="https://sqliteonline.com/" rel="noopener noreferrer"&gt;https://sqliteonline.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Creating a Table : ex)
CREATE TABLE products (
id INT NOT NULL,
name STRING,
price MONEY,
PRIMARY KEY (id)
);&lt;/li&gt;
&lt;li&gt;Primary Key : uniquely identifies each row in a table

&lt;ul&gt;
&lt;li&gt;ex)
id INT NOT NULL,
PRIMARY KEY (id)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Inserting Data : Insert values into all columns

&lt;ul&gt;
&lt;li&gt;ex)
INSERT INTO products
VALUES (1, 'Pen', 1.20);&lt;/li&gt;
&lt;li&gt;Insert values into specific columns : ex)
INSERT INTO products (id, name)
VALUES (2, 'Pencil');&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. SQL Commands: READ, SELECT, and WHERE&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reading Data 

&lt;ul&gt;
&lt;li&gt;Retrieve all columns from a table, ex)
SELECT *
FROM products;&lt;/li&gt;
&lt;li&gt;Retrieve specific data using a condition, ex)
SELECT *
FROM products
WHERE id = 1;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;WHERE Clause : Used to filter records based on specific conditions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Updating Values and Modifying Tables&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updating Existing Data

&lt;ul&gt;
&lt;li&gt;ex)
UPDATE products
SET price = 1.00
WHERE id = 1;&lt;/li&gt;
&lt;li&gt;SET : specifies the new value.&lt;/li&gt;
&lt;li&gt;WHERE : determines which row(s) will be updated.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Adding a New Column

&lt;ul&gt;
&lt;li&gt;ex)
ALTER TABLE products
ADD stock INT;&lt;/li&gt;
&lt;li&gt;ALTER TABLE : modifies an existing table structure.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. SQL Commands: DELETE&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deleting Data

&lt;ul&gt;
&lt;li&gt;ex)
DELETE FROM products
WHERE id = 2;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Removes rows that match the condition.&lt;/li&gt;
&lt;li&gt;Always use a WHERE clause unless you intend to delete all records.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Understanding SQL Relationships, Foreign Keys, and INNER JOINs&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Foreign Keys : Creates a relationship between two tables, Helps maintain data integrity

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.w3schools.com/sql/sql_foreignkey.asp" rel="noopener noreferrer"&gt;https://www.w3schools.com/sql/sql_foreignkey.asp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;INNER JOIN : Used to combine related data from multiple tables.

&lt;ul&gt;
&lt;li&gt;ex)
SELECT
orders.order_number,
customers.first_name,
customers.last_name,
customers.address
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.id;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;How INNER JOIN Works : Only matching records from both tables are returned.

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.w3schools.com/sql/sql_join_inner.asp" rel="noopener noreferrer"&gt;https://www.w3schools.com/sql/sql_join_inner.asp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>26. Databases</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Wed, 17 Jun 2026 11:43:57 +0000</pubDate>
      <link>https://dev.clauneck.workers.dev/avery_/26-databases-c25</link>
      <guid>https://dev.clauneck.workers.dev/avery_/26-databases-c25</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Databases Explained: SQL vs NoSQL&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why Do We Need Databases?

&lt;ul&gt;
&lt;li&gt;Databases provide persistent data storage.&lt;/li&gt;
&lt;li&gt;Unlike variables in memory, data stored in a database remains available even after the application stops running.&lt;/li&gt;
&lt;li&gt;Databases allow applications to store, retrieve, update, and manage large amounts of information efficiently.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Types of Databases

&lt;ul&gt;
&lt;li&gt;SQL(Structured Query Language) Databases : typically relational databases, where data is organized into tables with predefined schemas.&lt;/li&gt;
&lt;li&gt;Structured data, Fixed schema, Relationships between tables, Strong consistency, Uses SQL for querying&lt;/li&gt;
&lt;li&gt;ex) PostgreSQL, MySQL, Oracle Database, SQLite, ...&lt;/li&gt;
&lt;li&gt;NoSQL Databases : designed for flexibility and scalability.&lt;/li&gt;
&lt;li&gt;Flexible schema, Horizontal scalability, Suitable for large-scale or rapidly changing data, Multiple data models (document, key-value, graph, etc.)&lt;/li&gt;
&lt;li&gt;ex) MongoDB, Redis, Amazon DynamoDB&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>fullstack</category>
      <category>beginners</category>
    </item>
    <item>
      <title>25. Build Your Own API</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Tue, 16 Jun 2026 21:33:02 +0000</pubDate>
      <link>https://dev.clauneck.workers.dev/avery_/24-build-your-own-api-3b0n</link>
      <guid>https://dev.clauneck.workers.dev/avery_/24-build-your-own-api-3b0n</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Building Your Own APIs&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can build your own APIs using frameworks like Node.js + Express.&lt;/li&gt;
&lt;li&gt;API Platforms

&lt;ul&gt;
&lt;li&gt;RapidAPI : Marketplace for testing and using public APIs&lt;/li&gt;
&lt;li&gt;APIs can be:&lt;/li&gt;
&lt;li&gt;Monetized APIs : Data collection services, Algorithm / service-based APIs, Simplified interface for complex systems&lt;/li&gt;
&lt;li&gt;Internal APIs (Private APIs) : Used only within a company or application&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;What Makes an API RESTful?

&lt;ul&gt;
&lt;li&gt;A RESTful API follows these principles:&lt;/li&gt;
&lt;li&gt;Uses HTTP methods (GET, POST, PUT, PATCH, DELETE)&lt;/li&gt;
&lt;li&gt;Returns data in JSON format&lt;/li&gt;
&lt;li&gt;Follows Client–Server architecture&lt;/li&gt;
&lt;li&gt;Is stateless (each request is independent)&lt;/li&gt;
&lt;li&gt;Is resource-based (everything is treated as a resource)&lt;/li&gt;
&lt;li&gt;Operates over the web (HTTP/HTTPS)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Creating GET, POST, PATCH, and DELETE Routes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Express Routes Overview : In Express, routes define how the server responds to client requests.&lt;/li&gt;
&lt;li&gt;Route Parameters(:) : Used to capture dynamic values from the URL.

&lt;ul&gt;
&lt;li&gt;ex)
app.get("/users/:id", (req, res) =&amp;gt; {
console.log(req.params.id);
});&lt;/li&gt;
&lt;li&gt;:id → dynamic parameter&lt;/li&gt;
&lt;li&gt;Accessed via req.params&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Callback Functions in Array Methods : Commonly used when working with data in APIs(find, filter, findIndex, ...)

&lt;ul&gt;
&lt;li&gt;ex) const user = users.find(user =&amp;gt; user.id === 1);&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;PUT vs PATCH

&lt;ul&gt;
&lt;li&gt;PUT : Replace entire resource, Update full object&lt;/li&gt;
&lt;li&gt;PATCH : Modify part of resource, Partial update&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DELETE Operation : Used to remove data from a collection.

&lt;ul&gt;
&lt;li&gt;ex) users.splice(index, 1);&lt;/li&gt;
&lt;li&gt;splice() : removes elements from an array , Commonly used for delete logic in in-memory data&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>24. Application Programming Interfaces (APIs)</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Mon, 15 Jun 2026 19:04:16 +0000</pubDate>
      <link>https://dev.clauneck.workers.dev/avery_/24-application-programming-interfaces-apis-595e</link>
      <guid>https://dev.clauneck.workers.dev/avery_/24-application-programming-interfaces-apis-595e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Introduction to APIs&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is an API?

&lt;ul&gt;
&lt;li&gt;API (Application Programming Interface) acts as a bridge that allows different software applications to communicate with each other.&lt;/li&gt;
&lt;li&gt;APIs enable programs to exchange data and functionality without exposing internal implementation details.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;REST APIs

&lt;ul&gt;
&lt;li&gt;REST (Representational State Transfer) is a common architectural style for web APIs.&lt;/li&gt;
&lt;li&gt;REST APIs typically use the HTTP protocol.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Common HTTP Methods : GET(Retrieve data), POST(Create data), PUT(Replace data), PATCH(Partially update data), DELETE(Remove data)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Structuring API Requests&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API Types

&lt;ul&gt;
&lt;li&gt;Private API : Frontend ↔ Your Server, Used internally within your application&lt;/li&gt;
&lt;li&gt;Public API : Your Server ↔ External Server, Provided by third-party services&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;API Documentation : API documentation explains available endpoints, parameters, authentication methods, and response formats.

&lt;ul&gt;
&lt;li&gt;ex) &lt;a href="https://bored-api.appbrewery.com/" rel="noopener noreferrer"&gt;https://bored-api.appbrewery.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;API Endpoints : An endpoint is a specific URL that provides access to a resource.

&lt;ul&gt;
&lt;li&gt;Base URL + Endpoint&lt;/li&gt;
&lt;li&gt;ex) /random, /filter&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Query Parameters : Used to filter, sort, or customize responses.

&lt;ul&gt;
&lt;li&gt;ex) &lt;a href="https://bored-api.appbrewery.com/endpoint?query=value&amp;amp;query2=value" rel="noopener noreferrer"&gt;https://bored-api.appbrewery.com/endpoint?query=value&amp;amp;query2=value&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Format : ?key=value&amp;amp;key2=value2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Path Parameters : Used to identify a specific resource.

&lt;ul&gt;
&lt;li&gt;ex) &lt;a href="https://bored-api.appbrewery.com/endpoint/%7Bid%7D" rel="noopener noreferrer"&gt;https://bored-api.appbrewery.com/endpoint/{id}&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. What is JSON?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JSON (JavaScript Object Notation) : Lightweight format for storing and exchanging data, Human-readable and language-independent&lt;/li&gt;
&lt;li&gt;JSON vs JavaScript Objects

&lt;ul&gt;
&lt;li&gt;JSON : Stored as text (string)
{
"name": "John",
"age": 25
}&lt;/li&gt;
&lt;li&gt;JavaScript Object : Actual JavaScript object
{
name: "John",
age: 25
}&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;JSON Tools

&lt;ul&gt;
&lt;li&gt;JSON Visualizer : &lt;a href="https://jsonviewer.stack.hu/" rel="noopener noreferrer"&gt;https://jsonviewer.stack.hu/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Convert JSON to JavaScript Object : const data = JSON.parse(jsonData);&lt;/li&gt;
&lt;li&gt;Convert JavaScript Object to JSON : const jsonData = JSON.stringify(data);&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Making Server-Side API Requests with Axios&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Axios : Popular HTTP client for JavaScript and Node.js, Simpler syntax than the native https module&lt;/li&gt;
&lt;li&gt;Async/Await : Used to handle asynchronous API requests more cleanly.

&lt;ul&gt;
&lt;li&gt;ex) const response = await axios.get(url);&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Basic GET Request : 
`import axios from "axios";&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;const response = await axios.get(url);&lt;br&gt;
console.log(response.data);`&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. API Authentication&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why Authentication? : Authentication helps control access to APIs and protects resources from unauthorized use.&lt;/li&gt;
&lt;li&gt;Common Authentication Methods

&lt;ul&gt;
&lt;li&gt;No Authentication : Public access, Usually rate-limited&lt;/li&gt;
&lt;li&gt;Basic Authentication : Username + Password, Credentials are encoded using Base64, Typically sent in HTTP headers&lt;/li&gt;
&lt;li&gt;API Key Authentication : API Key → API, Unique key issued by the API provider, Often included in headers or query parameters&lt;/li&gt;
&lt;li&gt;Token-Based Authentication : Username/Password → Token → API, User logs in once, Server returns a token, Future requests use the token&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;OAuth : Delegated authorization protocol , Allows users to grant limited access without sharing passwords

&lt;ul&gt;
&lt;li&gt;Commonly used with : Google, GitHub, Facebook&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. REST APIs in Practice&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Making API Requests : GET(Read data), POST(Create data), PUT(Replace data), PATCH(Update part of a resource), DELETE(Remove data)&lt;/li&gt;
&lt;li&gt;CRUD Operations(Operation : HTTP Method)

&lt;ul&gt;
&lt;li&gt;Create : POST&lt;/li&gt;
&lt;li&gt;Read : GET&lt;/li&gt;
&lt;li&gt;Update : PUT / PATCH&lt;/li&gt;
&lt;li&gt;Delete : ELETE&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Axios Examples : &lt;a href="https://axios.rest/pages/getting-started/examples/commonjs.html" rel="noopener noreferrer"&gt;https://axios.rest/pages/getting-started/examples/commonjs.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Axios simplifies server-side API requests.&lt;br&gt;
Authentication methods include Basic Auth, API Keys, Tokens, and OAuth.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>fullstack</category>
      <category>beginners</category>
    </item>
    <item>
      <title>23. Git, GitHub, and Version Control</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Sun, 14 Jun 2026 00:59:01 +0000</pubDate>
      <link>https://dev.clauneck.workers.dev/avery_/23-git-github-and-version-control-okd</link>
      <guid>https://dev.clauneck.workers.dev/avery_/23-git-github-and-version-control-okd</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Introduction to Version Control and Git&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Version Control: Tracks changes to files and allows you to roll back to previous versions when needed.&lt;/li&gt;
&lt;li&gt;Git: A distributed version control system widely used for software development.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Version Control Using Git and the Command Line&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git Workflow
Working Directory
  |
git add
  ↓
Staging Area
  |
git commit
  ↓
Local Repository
  |
git checkout
  ↓
Working Directory&lt;/li&gt;
&lt;li&gt;Common Commands

&lt;ul&gt;
&lt;li&gt;git status : Check the current repository status&lt;/li&gt;
&lt;li&gt;git add  : Add a file to the staging area&lt;/li&gt;
&lt;li&gt;git add . : Add all modified files&lt;/li&gt;
&lt;li&gt;git commit -m "message" : Save changes to the local repository&lt;/li&gt;
&lt;li&gt;git diff  : Compare changes in the working directory with the last committed version&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. GitHub and Remote Repositories&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developer Journey : Learn to Code → Attend Events → Participate in Hackathons → Volunteer → Freelance → Apply for Developer Jobs → Internship → Contribute to Open Source → Build and Share Your Own Projects&lt;/li&gt;
&lt;li&gt;Connecting to a Remote Repository : git remote add  &lt;/li&gt;
&lt;li&gt;Pushing Changes : git push -u  &lt;/li&gt;
&lt;li&gt;Repository Structure
Working Directory
  ↓
Staging Area
  ↓
Local Repository
  ↓
Remote Repository (GitHub)&lt;/li&gt;
&lt;li&gt;Useful GitHub Feature

&lt;ul&gt;
&lt;li&gt;Insights → Network: Visualize branch and commit history&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Main Branch : The primary branch of a repository (commonly main)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. .gitignore&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Common Files to Ignore

&lt;ul&gt;
&lt;li&gt;macOS : .DS_Store, .DS_Store?, .Trashes, ._*, .Spotlight-V100&lt;/li&gt;
&lt;li&gt;Windows: Thumbs.db, ehthumbs.db&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Creating a .gitignore File : touch .gitignore

&lt;ul&gt;
&lt;li&gt;Add files or directories that should not be tracked by Git.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Refresh Git Tracking : git rm --cached -r .

&lt;ul&gt;
&lt;li&gt;Removes all files from Git tracking&lt;/li&gt;
&lt;li&gt;Keeps local files intact&lt;/li&gt;
&lt;li&gt;Commonly used after updating .gitignore&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Cloning Repositories&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why Clone? : Build on existing code, Improve your own version, Read other people's code, Contribute to open-source projects&lt;/li&gt;
&lt;li&gt;Clone a Repository : git clone &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Branching and Merging&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why Use Branches? : Branches allow feature development without affecting the main codebase.&lt;/li&gt;
&lt;li&gt;Common Commands

&lt;ul&gt;
&lt;li&gt;git branch  : Create a new branch&lt;/li&gt;
&lt;li&gt;git checkout  : Switch to another branch&lt;/li&gt;
&lt;li&gt;git merge  : Merge a branch into the current branch&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Practice Tool : &lt;a href="https://learngitbranching.js.org/" rel="noopener noreferrer"&gt;https://learngitbranching.js.org/&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Additional Git Commands&lt;/li&gt;
&lt;li&gt;git branch -f main  : Force the main branch pointer to another commit&lt;/li&gt;
&lt;li&gt;git revert : Create a new commit that undoes changes (safe for shared repositories)&lt;/li&gt;
&lt;li&gt;git reset : Move the branch pointer (typically used locally)&lt;/li&gt;
&lt;li&gt;git rebase : Reapply commits on top of another branch&lt;/li&gt;
&lt;li&gt;git cherry-pick   ... : Apply specific commits&lt;/li&gt;
&lt;li&gt;git tag  : Create a tag&lt;/li&gt;
&lt;li&gt;git describe : Show the nearest tag and commit information

&lt;ul&gt;
&lt;li&gt;Format : --g&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;git fetch : Download remote changes without merging&lt;/li&gt;
&lt;li&gt;git pull : git fetch + git merge&lt;/li&gt;
&lt;li&gt;git push : Upload local commits to a remote repository&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. Forking and Pull Requests&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open Source Contribution Workflow&lt;/li&gt;
&lt;li&gt;Forking : Create your own copy of another repository on GitHub&lt;/li&gt;
&lt;li&gt;Pull Requests (PRs) : Suggest changes to the original repository, Allow maintainers to review, discuss, and merge contributions&lt;/li&gt;
&lt;li&gt;Typical Contribution Flow : Fork → Clone → Create Branch → Commit Changes → Push → Open Pull Request&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>22. EJS (Embedded JavaScript)</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Thu, 30 Apr 2026 15:36:23 +0000</pubDate>
      <link>https://dev.clauneck.workers.dev/avery_/22-ejs-embedded-javascript-2b3g</link>
      <guid>https://dev.clauneck.workers.dev/avery_/22-ejs-embedded-javascript-2b3g</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. What is EJS?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EJS (Embedded JavaScript) is a templating engine for Node.js&lt;/li&gt;
&lt;li&gt;Key Concepts

&lt;ul&gt;
&lt;li&gt;Templating : Allows you to generate dynamic HTML using JavaScript&lt;/li&gt;
&lt;li&gt;Separation of Concerns : Frontend(HTML, CSS), Backend(JavaScript)&lt;/li&gt;
&lt;li&gt;Other Templating Languages : Python(Jinja), PHP(Twig), JavaScript(EJS)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;How EJS Works : ex)
&lt;code&gt;&amp;lt;% for (let i = 0; i &amp;lt; items.length; i++) { %&amp;gt;&lt;br&gt;
&amp;lt;li&amp;gt;&amp;lt;%= items[i] %&amp;gt;&amp;lt;/li&amp;gt;&lt;br&gt;
&amp;lt;% } %&amp;gt;&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript runs inside HTML, &amp;lt;%= %&amp;gt; outputs data to the page&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Rendering with Express

&lt;ul&gt;
&lt;li&gt;Static : ex) &lt;code&gt;res.sendFile("index.html");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Dynamic (EJS) : ex)
&lt;code&gt;app.post("/submit", (req, res) =&amp;gt; {
res.render("index.ejs", {
name: req.body["name"]
});
});&lt;/code&gt;
&lt;code&gt;&amp;lt;body&amp;gt;
&amp;lt;h1&amp;gt;Hello &amp;lt;%= name %&amp;gt;&amp;lt;/h1&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. EJS Tags&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;lt;%= variable %&amp;gt; : output value&lt;/li&gt;
&lt;li&gt;&amp;lt;% code %&amp;gt; : execute JavaScript&lt;/li&gt;
&lt;li&gt;&amp;lt;%- html %&amp;gt; : render HTML (unescaped)&lt;/li&gt;
&lt;li&gt;&amp;lt;%% %%&amp;gt; : display &amp;lt;% %&amp;gt; literally&lt;/li&gt;
&lt;li&gt;&amp;lt;%# comment %&amp;gt; : comment (not executed)&lt;/li&gt;
&lt;li&gt;&amp;lt;%- include("header.ejs") %&amp;gt; : Include (Partials), Used to reuse components (header, footer, etc.)&lt;/li&gt;
&lt;li&gt;Using JavaScript in EJS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Passing Data&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server → EJS : Pass data using &lt;code&gt;res.render()&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;If no data exists : Use default values or locals&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;EJS → Server : Use forms with method="POST"&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Partials &amp;amp; Layouts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static files : &lt;code&gt;app.use(express.static("public"));&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Templating syntax : &amp;lt;% %&amp;gt;(logic), &amp;lt;%= %&amp;gt;(output), &amp;lt;%- %&amp;gt;(raw HTML)&lt;/li&gt;
&lt;li&gt;Partials : ex) &amp;lt;%- include("header.ejs") %&amp;gt;, &amp;lt;%- include("footer.ejs") %&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Helps avoid code duplication, Improves maintainability&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Javascript Tip&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Variable Keywords : const(cannot be reassigned), let(can be reassigned)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;forEach : method used to loop through an array and run a function on each item. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ex) 
&lt;code&gt;array.forEach((element, index, array) =&amp;gt; {
console.log(element); 
console.log(index);  
});&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>fullstack</category>
      <category>programming</category>
    </item>
    <item>
      <title>21. Express.js with Node.js</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Mon, 27 Apr 2026 16:17:38 +0000</pubDate>
      <link>https://dev.clauneck.workers.dev/avery_/21-expressjs-with-nodejs-3mc4</link>
      <guid>https://dev.clauneck.workers.dev/avery_/21-expressjs-with-nodejs-3mc4</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. What is Express?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Express.js is a backend web framework for Node.js&lt;/li&gt;
&lt;li&gt;Express vs Node.js

&lt;ul&gt;
&lt;li&gt;Node.js : Runtime environment (not a framework)&lt;/li&gt;
&lt;li&gt;Express.js : Framework built on top of Node.js, Makes backend development easier&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Why Express? : Less code, Better readability, Middleware support, Faster development&lt;/li&gt;

&lt;li&gt;“It’s All Node To Me”

&lt;ul&gt;
&lt;li&gt;Can be used for : Web backend, IoT applications, Desktop apps (e.g. VS Code is built with Electron + Node)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Creating Your First Express Server&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backend structure

&lt;ul&gt;
&lt;li&gt;Server : computer running 24/7 (listening for requests)&lt;/li&gt;
&lt;li&gt;Application : index.js (logic)&lt;/li&gt;
&lt;li&gt;Database : data storage&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Client-side vs Server-side

&lt;ul&gt;
&lt;li&gt;Client : browser&lt;/li&gt;
&lt;li&gt;Server : backend system&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Setup steps

&lt;ul&gt;
&lt;li&gt;mkdir project-folder&lt;/li&gt;
&lt;li&gt;cd project-folder&lt;/li&gt;
&lt;li&gt;touch index.js&lt;/li&gt;
&lt;li&gt;npm init -y&lt;/li&gt;
&lt;li&gt;npm i express&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Basic server : ex)
`import express from "express";&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;const app = express();&lt;br&gt;
const port = 3000;&lt;/p&gt;

&lt;p&gt;app.listen(port, () =&amp;gt; {&lt;br&gt;
  console.log(&lt;code&gt;Server running on port ${port}.&lt;/code&gt;);&lt;br&gt;
});`&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is localhost? : Local server running on your computer

&lt;ul&gt;
&lt;li&gt;Example : &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Think of it as your computer’s “door” for apps&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Check open ports

&lt;ul&gt;
&lt;li&gt;Windows : netstat -ano | findstr "LISTENING"&lt;/li&gt;
&lt;li&gt;Mac/Linux : sudo lsof -i -P -n | grep LISTEN&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. HTTP Requests&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP : HyperText Transfer Protocol&lt;/li&gt;
&lt;li&gt;HTTP Methods

&lt;ul&gt;
&lt;li&gt;GET : retrieve data&lt;/li&gt;
&lt;li&gt;POST : send data&lt;/li&gt;
&lt;li&gt;PUT : replace data&lt;/li&gt;
&lt;li&gt;PATCH : update data&lt;/li&gt;
&lt;li&gt;DELETE : remove data&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Basic route : ex) 
&lt;code&gt;app.get("/", (req, res) =&amp;gt; {&lt;br&gt;
res.send("Hello, World!");&lt;br&gt;
});&lt;/code&gt;
&lt;/li&gt;

&lt;li&gt;Endpoints
&lt;code&gt;app.get("/about", (req, res) =&amp;gt; {&lt;br&gt;
res.send("&amp;lt;h1&amp;gt;About Me&amp;lt;/h1&amp;gt;");&lt;br&gt;
});&lt;/code&gt;
&lt;/li&gt;

&lt;li&gt;Nodemon : Auto-restarts server when changes are made

&lt;ul&gt;
&lt;li&gt;ex)
&lt;code&gt;npm i -g nodemon
nodemon index.js&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Postman&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tool for testing APIs (without frontend)&lt;/li&gt;
&lt;li&gt;HTTP Status Codes

&lt;ul&gt;
&lt;li&gt;100–199 : Informational&lt;/li&gt;
&lt;li&gt;200–299 : Success&lt;/li&gt;
&lt;li&gt;300–399 : Redirection&lt;/li&gt;
&lt;li&gt;400–499 : Client errors&lt;/li&gt;
&lt;li&gt;500–599 : Server errors&lt;/li&gt;
&lt;li&gt;Reference : &lt;a href="https://developer.mozilla.org/ko/docs/Web/HTTP/Reference/Status" rel="noopener noreferrer"&gt;https://developer.mozilla.org/ko/docs/Web/HTTP/Reference/Status&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Install all dependencies : &lt;code&gt;npm install&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;Installs everything listed in package.json&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Introduction to Middleware&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Body Parser : Handles form data (x-www-form-urlencoded)

&lt;ul&gt;
&lt;li&gt;app.use(bodyParser.urlencoded({extended:true}));&lt;/li&gt;
&lt;li&gt;Express built-in middleware : app.use(express.urlencoded({ extended: true }));&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Send file : res.sendFile(path);&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Custom Middleware&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is middleware? : Code that runs between request and response

&lt;ul&gt;
&lt;li&gt;Used for : Logging, Authentication, Error handling, Data preprocessing&lt;/li&gt;
&lt;li&gt;Example: Logger
&lt;code&gt;function logger(req, res, next) {
console.log("Request Method:", req.method);
console.log("Request URL:", req.url);
next();
}
app.use(logger);&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Path utilities : ex)
`import { dirname } from "path";
import { fileURLToPath } from "url";&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;const __dirname = dirname(fileURLToPath(import.meta.url));`&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Important : Middleware order matters, body-parser must come before routes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. Secrets Access Project&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example : 
`var userIsAuthorised = false;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;function passwordCheck(req, res, next) {&lt;br&gt;
  const password = req.body["password"];&lt;/p&gt;

&lt;p&gt;if (password === "ILoveProgramming") {&lt;br&gt;
    userIsAuthorised = true;&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;next();&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;app.use(passwordCheck);`&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Route protection : 
`app.post("/check", (req, res) =&amp;gt; {
if (userIsAuthorised) {
res.sendFile(&lt;strong&gt;dirname + "/public/secret.html");
} else {
res.sendFile(&lt;/strong&gt;dirname + "/public/index.html");
}&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;console.log(req.body);&lt;br&gt;
});`&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>20. Node.js</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Tue, 21 Apr 2026 20:30:34 +0000</pubDate>
      <link>https://dev.clauneck.workers.dev/avery_/20-nodejs-11d8</link>
      <guid>https://dev.clauneck.workers.dev/avery_/20-nodejs-11d8</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. What is Node.js?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js is a JavaScript runtime that allows you to run JavaScript outside the browser (on a server or local machine)&lt;/li&gt;
&lt;li&gt;Why use frameworks/libraries? : Reuse components, Reduce development overhead

&lt;ul&gt;
&lt;li&gt;ex) Reading files, writing files, URL Strings, Networking, Data Streams, Diagnostics, Tests, Debugger, Error Codes&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Definition : “Node.js is an asynchronous, event-driven JavaScript runtime designed to build scalable network applications.”

&lt;ul&gt;
&lt;li&gt;Key Concepts&lt;/li&gt;
&lt;li&gt;JavaScript Runtime : Runs JS outside the browser (server/local computer)&lt;/li&gt;
&lt;li&gt;Asynchronous : Executes tasks without blocking (non-blocking)&lt;/li&gt;
&lt;li&gt;Event-driven : Responds to events (requests, user actions, etc.)&lt;/li&gt;
&lt;li&gt;Application : On Server(Computer)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Why Node.js? : Full-stack JavaScript, Scalable, Non-blocking I/O
, Huge ecosystem&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Using Node.js&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check version : node -v&lt;/li&gt;
&lt;li&gt;REPL (Read-Eval-Print Loop) : node

&lt;ul&gt;
&lt;li&gt;Commands&lt;/li&gt;
&lt;li&gt;.help : show commands)&lt;/li&gt;
&lt;li&gt;.exit or Ctrl + C (twice) : exit &lt;/li&gt;
&lt;li&gt;Similar to the browser console&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Run a JS file : 
cd path/to/file
node index.js&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Native Node Modules&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Native Modules : Built-in modules provided by Node.js&lt;/li&gt;
&lt;li&gt;File System (fs) : const fs = require("fs");

&lt;ul&gt;
&lt;li&gt;Write file : 
fs.writeFile("message.txt", "Hello from NodeJS!", (err) =&amp;gt; {
if (err) throw err;
console.log("The file has been saved!");
});&lt;/li&gt;
&lt;li&gt;Read file : 
fs.readFile("./message.txt", "utf8", (err, data) =&amp;gt; {
if (err) throw err;
console.log(data);
});&lt;/li&gt;
&lt;li&gt;"utf8" → encoding option&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Docs : &lt;a href="https://nodejs.org/docs/latest-v18.x/api/fs.html" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://nodejs.org/docs/latest-v18.x/api/fs.html" rel="noopener noreferrer"&gt;https://nodejs.org/docs/latest-v18.x/api/fs.html&lt;/a&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. NPM (Node Package Manager)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A repository of packages and libraries&lt;/li&gt;
&lt;li&gt;Website : &lt;a href="https://www.npmjs.com/" rel="noopener noreferrer"&gt;https://www.npmjs.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Initialize project : npm init

&lt;ul&gt;
&lt;li&gt;Quick setup : npm init -y&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Install packages : npm install 

&lt;ul&gt;
&lt;li&gt;ex) npm i sillyname&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Module Systems

&lt;ul&gt;
&lt;li&gt;CommonJS (CJS) : ex) const generateName = require("sillyname");&lt;/li&gt;
&lt;li&gt;ES Modules (ESM) : ex) import generateName from "sillyname";&lt;/li&gt;
&lt;li&gt;Enable ESM : "type": "module"&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Example : 
import superheroes, { randomSuperhero } from "superheroes";&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;const name = randomSuperhero();&lt;br&gt;
  console.log(`I am ${name}!`);&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Mini Project: QR Code Generator&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Packages : inquirer(user input), qr-image(generate QR codes)&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install : npm i inquirer qr-image&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Note : Be careful with package names (typos can install wrong packages), Always check package documentation&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>19. Backend Web Development</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Sun, 19 Apr 2026 09:55:33 +0000</pubDate>
      <link>https://dev.clauneck.workers.dev/avery_/19-backend-web-development-1fn4</link>
      <guid>https://dev.clauneck.workers.dev/avery_/19-backend-web-development-1fn4</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Backend Web Development Explained&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the backend? : The backend is the part of a web application that runs on the server and handles logic, data, and requests.&lt;/li&gt;
&lt;li&gt;Main Components

&lt;ul&gt;
&lt;li&gt;Server : A computer that runs 24/7, Can be local (localhost) or remote (cloud server)&lt;/li&gt;
&lt;li&gt;Application (Backend Logic) : Handles requests and responses&lt;/li&gt;
&lt;li&gt;Returns : HTML, Data (JSON, etc.), Status codes (e.g. 404 Not Found, 500 Server Error)&lt;/li&gt;
&lt;li&gt;Database : Stores and manages data, Ensures data persistence (data is saved long-term)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Web Page vs Web App

&lt;ul&gt;
&lt;li&gt;Web Page : Simple structure(User ↔ Server), Mostly static content&lt;/li&gt;
&lt;li&gt;Web Application : Full system(User ↔ Server ↔ Application ↔ Database), Dynamic content with data interaction&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Backend Tools and Technologies&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend : HTML, CSS, JavaScript(React, Angular, Vue)&lt;/li&gt;
&lt;li&gt;Backend : Java(Spring), Ruby(Ruby on Rails), PHP(Laravel), C#(ASP.NET), Python(Django, Flask), JavaScript(Node.js)&lt;/li&gt;
&lt;li&gt;Backend choice depends on the ecosystem, scalability needs, and personal or company preference.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>fullstack</category>
      <category>programming</category>
    </item>
    <item>
      <title>18. The Unix Command Line</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Sun, 19 Apr 2026 07:00:43 +0000</pubDate>
      <link>https://dev.clauneck.workers.dev/avery_/18-the-unix-command-line-l60</link>
      <guid>https://dev.clauneck.workers.dev/avery_/18-the-unix-command-line-l60</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Install Git Bash on Windows&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download: &lt;a href="https://gitforwindows.org/" rel="noopener noreferrer"&gt;https://gitforwindows.org/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Use Git Bash as the terminal in VS Code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Understanding the Command Line&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shell vs Kernel

&lt;ul&gt;
&lt;li&gt;Shell: user interface (CLI/GUI) that interacts with the system&lt;/li&gt;
&lt;li&gt;Kernel: core of the OS that manages CPU, memory, and disks&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Bash (Bourne Again Shell) : A popular Unix shell (used in macOS and Linux)&lt;/li&gt;

&lt;li&gt;Why use CLI (Command Line Interface)? : Faster, More control, More flexible&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Command Line Navigation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ls : list files and directories&lt;/li&gt;
&lt;li&gt;cd : change directory&lt;/li&gt;
&lt;li&gt;cd .. : move up one level&lt;/li&gt;
&lt;li&gt;Tips

&lt;ul&gt;
&lt;li&gt;Tab : auto-complete&lt;/li&gt;
&lt;li&gt;↑ / ↓ : reuse previous commands&lt;/li&gt;
&lt;li&gt;Drag &amp;amp; drop folder : auto path input&lt;/li&gt;
&lt;li&gt;Alt + Click : move cursor&lt;/li&gt;
&lt;li&gt;Ctrl + A : move to beginning of line&lt;/li&gt;
&lt;li&gt;Ctrl + E : move to end of line&lt;/li&gt;
&lt;li&gt;Ctrl + U : delete to the beginning&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. File &amp;amp; Directory Management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create

&lt;ul&gt;
&lt;li&gt;mkdir folder-name     # create folder&lt;/li&gt;
&lt;li&gt;touch file.txt        # create file&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Open

&lt;ul&gt;
&lt;li&gt;start file.txt        # Windows&lt;/li&gt;
&lt;li&gt;open file.txt         # macOS&lt;/li&gt;
&lt;li&gt;code file.txt         # open in VS Code&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Delete

&lt;ul&gt;
&lt;li&gt;rm file.txt           # delete file&lt;/li&gt;
&lt;li&gt;rm *                  # delete all files in current folder&lt;/li&gt;
&lt;li&gt;rm -r folder-name     # delete folder&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Other commands

&lt;ul&gt;
&lt;li&gt;pwd                   # show current path&lt;/li&gt;
&lt;li&gt;clear                 # clear terminal&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Reference : &lt;a href="https://www.learnenough.com/command-line-tutorial" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.learnenough.com/command-line-tutorial" rel="noopener noreferrer"&gt;https://www.learnenough.com/command-line-tutorial&lt;/a&gt;
&lt;/li&gt;

&lt;li&gt;Note (Important)

&lt;ul&gt;
&lt;li&gt;rm * and rm -r are dangerous commands, Always double-check before running them (no undo)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>fullstack</category>
      <category>beginners</category>
    </item>
    <item>
      <title>17. jQuery</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Fri, 17 Apr 2026 10:26:31 +0000</pubDate>
      <link>https://dev.clauneck.workers.dev/avery_/17-jquery-c0f</link>
      <guid>https://dev.clauneck.workers.dev/avery_/17-jquery-c0f</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. What is jQuery?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A JavaScript library that simplifies DOM manipulation&lt;/li&gt;
&lt;li&gt;ex) 
&lt;code&gt;document.querySelector("h1"); // Vanilla JS&lt;/code&gt;
&lt;code&gt;$("h1");                      // jQuery&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. How to Use jQuery&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CDN (Google Hosted Libraries) : &lt;a href="https://developers.google.com/speed/libraries#jquery" rel="noopener noreferrer"&gt;https://developers.google.com/speed/libraries#jquery&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Place

&lt;ul&gt;
&lt;li&gt;Before &lt;code&gt;&amp;lt;/body&amp;gt;&lt;/code&gt; → no timing issues (recommended)&lt;/li&gt;
&lt;li&gt;Inside &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; → may cause timing issues&lt;/li&gt;
&lt;li&gt;Fix timing issue : 
&lt;code&gt;$(document).ready(function () {
// jQuery code
});&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Minification&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Removes unnecessary spaces to reduce file size and improve loading speed&lt;/li&gt;
&lt;li&gt;Tool : &lt;a href="https://www.minifier.org/" rel="noopener noreferrer"&gt;https://www.minifier.org/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Selecting Elements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ex) &lt;code&gt;$("button");&lt;/code&gt; // selects all button elements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Manipulating Styles&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change CSS : ex) &lt;code&gt;$("h1").css("font-size", "5rem");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Add class (multiple allowed) : ex) &lt;code&gt;$("h1").addClass("big-title margin-50");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Remove class : ex) &lt;code&gt;$("h1").removeClass("big-title");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Check class : ex) &lt;code&gt;$("h1").hasClass("margin-50");&lt;/code&gt; // true / false&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Manipulating Text&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text only : ex) &lt;code&gt;$("h1").text("Bye");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Includes HTML : ex) &lt;code&gt;$("h1").html("&amp;lt;em&amp;gt;Hey&amp;lt;/em&amp;gt;");&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. Manipulating Attributes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get attribute : ex) &lt;code&gt;console.log($("img").attr("src"));&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set attribute : ex) &lt;code&gt;$("a").attr("href", "https://www.google.com");&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Event Listeners&lt;/li&gt;
&lt;li&gt;Vanilla JS vs jQuery : ex)
&lt;code&gt;for (var i = 0; i &amp;lt; 5; i++) {
document.querySelectorAll("button")[i].addEventListener("click", function () {
document.querySelector("h1").style.color = "purple";
});
}&lt;/code&gt;
vs
&lt;code&gt;$("button").click(function () {
$("h1").css("color", "purple");
});&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Key press : ex)
&lt;code&gt;$(document).keypress(function (event) {
$("h1").text(event.key);
});&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Mouse event : ex)
&lt;code&gt;$("h1").on("mouseover", function () {
$("h1").css("color", "purple");
});&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Reference : &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Events" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Events&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;9. Adding and Removing Elements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;before() : ex) &lt;code&gt;$("h1").before("&amp;lt;button&amp;gt;New&amp;lt;/button&amp;gt;");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;after() : ex) &lt;code&gt;$("h1").after("&amp;lt;button&amp;gt;New&amp;lt;/button&amp;gt;");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;prepend() : ex) &lt;code&gt;$("h1").prepend("&amp;lt;button&amp;gt;New&amp;lt;/button&amp;gt;");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;append() : ex) &lt;code&gt;$("h1").append("&amp;lt;button&amp;gt;New&amp;lt;/button&amp;gt;");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;remove() : ex) &lt;code&gt;$("button").remove();&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;10. Animations&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built-in effects: hide, show, toggle, fadeOut, fadeIn, fadeToggle, slideUp, slideDown, slideToggle

&lt;ul&gt;
&lt;li&gt;ex)
&lt;code&gt;$("button").on("click", function () {
$("h1").hide();
});&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;animate() (numeric values only) : ex)
&lt;code&gt;$("button").on("click", function () {&lt;br&gt;
$("h1").animate({ opacity: 0.5 });&lt;br&gt;
});&lt;/code&gt;
&lt;/li&gt;

&lt;li&gt;Chaining : ex)
&lt;code&gt;$("button").on("click", function () {&lt;br&gt;
$("h1").slideUp().slideDown().animate({ opacity: 0.5 });&lt;br&gt;
});&lt;/code&gt;
&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>16. Advanced JavaScript and DOM Manipulation</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Wed, 15 Apr 2026 18:16:46 +0000</pubDate>
      <link>https://dev.clauneck.workers.dev/avery_/16-advanced-javascript-and-dom-manipulation-3464</link>
      <guid>https://dev.clauneck.workers.dev/avery_/16-advanced-javascript-and-dom-manipulation-3464</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Adding Event Listeners&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ex) &lt;code&gt;document.querySelector("button").addEventListener("click", handleClick);&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Anonymous function

&lt;ul&gt;
&lt;li&gt;ex) 
&lt;code&gt;document.querySelector("button").addEventListener("click", function () {
// what to do when clicked
});&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Apply to multiple elements (using a loop)

&lt;ul&gt;
&lt;li&gt;ex)
`var numberOfDrumButtons = document.querySelectorAll(".drum").length;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;for (var i = 0; i &amp;lt; numberOfDrumButtons; i++) {&lt;br&gt;
  document.querySelectorAll(".drum")[i].addEventListener("click", function () {&lt;br&gt;
    alert("I got clicked!");&lt;br&gt;
  });&lt;br&gt;
}`&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Higher Order Functions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Functions that take other functions as arguments or return functions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Playing Sounds on a Website&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ex)
&lt;code&gt;var audio = new Audio("audio.mp3");
audio.play();&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;this(keyword) : Refers to the element that triggered the event

&lt;ul&gt;
&lt;li&gt;ex)
&lt;code&gt;document.querySelector(".drum").addEventListener("click", function () {
this.style.color = "white";
});&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Switch Statements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used to compare a single value against multiple cases&lt;/li&gt;
&lt;li&gt;ex) 
`switch (value) {
case "A":
break;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;case "B":&lt;br&gt;
    break;&lt;/p&gt;

&lt;p&gt;default:&lt;br&gt;
}`&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. JavaScript Objects&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Objects store related data and behavior together&lt;/li&gt;
&lt;li&gt;Constructor Function : Starts with a capital letter

&lt;ul&gt;
&lt;li&gt;ex)
&lt;code&gt;function BellBoy(name, age, hasWorkPermit, languages) {
this.name = name;
this.age = age;
this.hasWorkPermit = hasWorkPermit;
this.languages = languages;
}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Create object : ex) &lt;code&gt;var bellBoy1 = new BellBoy("Timmy", 19, true, ["French", "English"]);&lt;/code&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Object Methods &amp;amp; Dot Notation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Constructor Function Including Methods : ex)
function BellBoy(name, age, hasWorkPermit, languages) {
this.name = name;
this.age = age;
this.hasWorkPermit = hasWorkPermit;
this.languages = languages;
this.moveSuitcase = function () {
alert("May I take your suitcase?");
};
}&lt;/li&gt;
&lt;li&gt;Call method : ex) bellBoy1.moveSuitcase();&lt;/li&gt;
&lt;li&gt;Dot notation (.) : Used to access properties and methods of an object

&lt;ul&gt;
&lt;li&gt;ex) &lt;code&gt;object.property&lt;/code&gt; or &lt;code&gt;object.method()&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. Keyboard Event Listeners&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keydown : Fires when a key is pressed (includes all keys)&lt;/li&gt;
&lt;li&gt;keypress : Fires when a character key is pressed (deprecated in modern JS)&lt;/li&gt;
&lt;li&gt;Check pressed key : ex)
&lt;code&gt;document.addEventListener("keydown", function (event) {
console.log(event.key);
});&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;8. Callbacks and Events&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Higher-order function: takes a function as an argument&lt;/li&gt;
&lt;li&gt;Callback function: the function passed into another function&lt;/li&gt;
&lt;li&gt;Tip :  &lt;code&gt;$0&lt;/code&gt; (DevTools, Refers to the currently selected element in the Elements panel)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;9. Adding Animation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using classList : ex) &lt;code&gt;document.querySelector("name").classList.add("pressed");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;setTimeout(function, milliseconds)&lt;/code&gt; : Used to create temporary visual effects

&lt;ul&gt;
&lt;li&gt;ex)
&lt;code&gt;setTimeout(function () {
activeButton.classList.remove("pressed");
}, 100);&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
      <category>fullstack</category>
    </item>
  </channel>
</rss>
