<?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: Joel Amos</title>
    <description>The latest articles on DEV Community by Joel Amos (@joel_amos).</description>
    <link>https://dev.to/joel_amos</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%2F1608005%2Ffdbb9058-c87c-4ee4-8d9f-648b9a368b66.png</url>
      <title>DEV Community: Joel Amos</title>
      <link>https://dev.to/joel_amos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joel_amos"/>
    <language>en</language>
    <item>
      <title>Social Engineering: Perks &amp; Scourges</title>
      <dc:creator>Joel Amos</dc:creator>
      <pubDate>Wed, 09 Jul 2025 14:04:14 +0000</pubDate>
      <link>https://dev.to/joel_amos/social-engineering-perks-scourges-3o53</link>
      <guid>https://dev.to/joel_amos/social-engineering-perks-scourges-3o53</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"The weakest link in any system isn’t code—it’s people."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Imagine breaking into a company’s internal network—not by hacking firewalls or exploiting vulnerabilities—but by convincing an employee to click a malicious link or share a password. That’s social engineering. It’s the psychological manipulation of people to bypass even the most secure systems.&lt;/p&gt;

&lt;p&gt;As a fullstack developer venturing deeper into cybersecurity, I’ve come to appreciate how human behavior can either strengthen or completely unravel a secure digital infrastructure. In this article, I explore the potential benefits and serious dangers of social engineering, both as a professional practice and a security threat.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Social Engineering?
&lt;/h2&gt;

&lt;p&gt;Social engineering is the art of manipulating human behavior to perform actions or disclose confidential information. While often associated with cybercrime, the techniques are based on fundamental social principles that date back centuries. In a digital context, these tactics are more scalable and dangerous than ever before.&lt;/p&gt;

&lt;p&gt;Common examples of social engineering include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Phishing&lt;/strong&gt;: Fraudulent emails that trick recipients into clicking malicious links or providing sensitive information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vishing&lt;/strong&gt;: Voice-based scams, often pretending to be tech support or banks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pretexting&lt;/strong&gt;: Fabricated scenarios designed to gain trust or access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailgating&lt;/strong&gt;: Physically following someone into a restricted area.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Baiting&lt;/strong&gt;: Enticing someone with a tempting offer (like a USB drive or free download) that contains malware.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These methods are particularly dangerous because they target human trust rather than software flaws.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Ethical Side of Social Engineering
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Red Teaming and Penetration Testing
&lt;/h3&gt;

&lt;p&gt;Ethical hackers use social engineering in controlled environments to assess how well an organization can defend itself. These tests are critical for identifying weak spots that traditional security audits may miss.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security Awareness Training
&lt;/h3&gt;

&lt;p&gt;People learn best through experience. Simulated phishing emails and realistic social engineering exercises help train employees to spot and avoid real threats.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trust-Centered Product Design
&lt;/h3&gt;

&lt;p&gt;User experience isn’t just about convenience—it’s also about safety. Understanding how users interpret interfaces can help developers avoid unintentionally misleading designs. This reduces the risk of users falling for copycat websites or scam overlays.&lt;/p&gt;

&lt;h3&gt;
  
  
  Career Development in Cybersecurity
&lt;/h3&gt;

&lt;p&gt;Understanding social engineering is fundamental to roles in cybersecurity—from red teaming to internal audits. It bridges the gap between technical skills and real-world threat modeling.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Dark Side of Social Engineering
&lt;/h2&gt;

&lt;p&gt;According to Google’s &lt;a href="https://developers.google.com/search/docs/monitor-debug/security/social-engineering" rel="noopener noreferrer"&gt;Security Issues documentation&lt;/a&gt;, social engineering can take many forms, and its consequences can be devastating. Threat actors use deception to gain access to devices, accounts, or networks. Once inside, they can extract data, inject malware, or even stage larger attacks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Common Threat Scenarios
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mass Phishing Attacks&lt;/strong&gt;: These are broadly distributed emails that aim to collect login credentials from unsuspecting users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spear Phishing and Whaling&lt;/strong&gt;: These targeted attacks are aimed at high-profile individuals like executives or system administrators.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Business Email Compromise (BEC)&lt;/strong&gt;: Fraudulent messages that appear to come from within the company, often instructing finance departments to transfer funds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SIM Swaps and Identity Theft&lt;/strong&gt;: Attackers impersonate someone to mobile providers and gain control of phone numbers, often bypassing two-factor authentication in the process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human Zero-Day&lt;/strong&gt;: Unlike software vulnerabilities that can be patched, human behavior is unpredictable and harder to secure. This makes users an enduring weak point in many systems.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Developers Should Pay Attention
&lt;/h2&gt;

&lt;p&gt;Social engineering doesn’t just target end users. Developers are often targets themselves—especially those with privileged access to codebases, servers, or infrastructure.&lt;/p&gt;

&lt;p&gt;As a developer, here’s why this matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You hold sensitive access.&lt;/strong&gt; Credentials, API keys, and source code are all valuable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You design the frontlines.&lt;/strong&gt; Clear UX design can protect users from making dangerous mistakes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You can build prevention into your stack.&lt;/strong&gt; From login alerts to suspicious activity detection, developers are in a strong position to reinforce digital trust.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Practical Defenses Against Social Engineering
&lt;/h2&gt;

&lt;p&gt;Here are actionable steps to mitigate social engineering risks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Educate users regularly on what phishing attempts look like.&lt;/li&gt;
&lt;li&gt;Require multi-factor authentication across all systems.&lt;/li&gt;
&lt;li&gt;Limit oversharing of company structure or sensitive info on public platforms like LinkedIn.&lt;/li&gt;
&lt;li&gt;Encourage a culture of skepticism. Don’t take every email or message at face value.&lt;/li&gt;
&lt;li&gt;Build secure UX patterns. Confirm critical actions, use warnings where needed.&lt;/li&gt;
&lt;li&gt;Use domain filters to block temporary or disposable email addresses.&lt;/li&gt;
&lt;li&gt;Create strong reporting mechanisms for suspicious behavior or messages.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Thoughts: A Double-Edged Tool
&lt;/h2&gt;

&lt;p&gt;Social engineering is not inherently malicious—it is a tactic, a tool. In ethical hands, it teaches and protects. In the wrong hands, it can dismantle even the strongest security stack.&lt;/p&gt;

&lt;p&gt;To defend against it, we need more than good code. We need empathy, awareness, and vigilance. Because in the end, the most secure systems are only as strong as the people who use them.&lt;/p&gt;




&lt;h2&gt;
  
  
  Follow ups
&lt;/h2&gt;

&lt;p&gt;Have you encountered social engineering firsthand—either as a target or during training? What have you learned from it?&lt;/p&gt;

&lt;p&gt;Share your experiences or tips in the comments. Let’s build a more secure, more aware tech community.&lt;/p&gt;

</description>
      <category>socialengineering</category>
      <category>cybersecurity</category>
      <category>infosec</category>
      <category>devlive</category>
    </item>
    <item>
      <title>The Future of AI in Development</title>
      <dc:creator>Joel Amos</dc:creator>
      <pubDate>Tue, 01 Jul 2025 09:09:18 +0000</pubDate>
      <link>https://dev.to/joel_amos/the-future-of-ai-in-development-2d1i</link>
      <guid>https://dev.to/joel_amos/the-future-of-ai-in-development-2d1i</guid>
      <description>&lt;p&gt;&lt;em&gt;How AI models in climate science, agriculture, and software systems are shaping the future of development—and what developers should focus on. And finally, the cross-cutting trends that might pique your interest as a developer.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Artificial Intelligence (AI) is increasingly becoming part of the core infrastructure for development. Whether it's being used to monitor the climate, manage agriculture, or power intelligent software systems, AI is proving to be a practical tool—not just a buzzword.&lt;/p&gt;

&lt;p&gt;In this post, I’ll summarise three insightful projects led by African developers and researchers. These examples show how AI is already being used to address real-world challenges. More importantly, they offer developers practical lessons on tools, methods, and approaches to building impactful solutions.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Smarter Earth Monitoring with Geospatial Foundation Models
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Presented by:&lt;/strong&gt; Wanjiru Catherine, IBM Research Africa&lt;/p&gt;

&lt;p&gt;This project introduced &lt;em&gt;Geospatial Foundation Models&lt;/em&gt; (GFMs) built using self-supervised learning techniques. These models are designed to understand Earth Observation data such as satellite imagery. They’re trained on diverse geospatial tasks like land cover classification, flood detection, or estimating biomass.&lt;/p&gt;

&lt;p&gt;The team also built &lt;strong&gt;&lt;a href="https://github.com/ibm/terratorch" rel="noopener noreferrer"&gt;TerraTorch&lt;/a&gt;&lt;/strong&gt; — a toolkit that makes it easier to fine-tune these models. Built on top of PyTorch Lightning and TorchGeo, TerraTorch allows you to train models for tasks like image segmentation or classification without writing much boilerplate code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters for developers&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can use pre-trained models to solve different problems by fine-tuning rather than starting from scratch.&lt;/li&gt;
&lt;li&gt;TerraTorch supports a config-only approach to training pipelines, making it friendly for experimentation.&lt;/li&gt;
&lt;li&gt;These models make it easier to work with satellite data and apply AI to environmental and sustainability issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Explore it&lt;/strong&gt;: &lt;a href="https://github.com/blumenstiel/TerraTorch-Examples" rel="noopener noreferrer"&gt;GitHub – TerraTorch Examples&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Predicting Maize Pest Outbreaks with Weather Data
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Presented by:&lt;/strong&gt; Edward Gichura, Dedan Kimathi University of Technology&lt;/p&gt;

&lt;p&gt;This project focuses on improving food security using machine learning. Edward built models that predict pest and disease outbreaks in maize farms using seasonal weather data such as rainfall, humidity, and temperature.&lt;/p&gt;

&lt;p&gt;Using XGBoost, the best model reached 96% accuracy in predicting when and where pests like Fall Armyworm would appear. The datasets combined weather APIs with on-the-ground reports from farmers and agricultural agencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters for developers&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You don’t always need deep learning. With the right data and feature engineering, classical models like XGBoost can do an excellent job.&lt;/li&gt;
&lt;li&gt;The project makes a strong case for building &lt;strong&gt;early warning systems&lt;/strong&gt; that could be delivered through SMS or mobile dashboards—tools that smallholder farmers can actually use.&lt;/li&gt;
&lt;li&gt;It's a great example of applying AI in a resource-limited setting where impact matters more than hype.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: Consider combining weather APIs with real-time field data for ongoing model retraining.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Building Intelligent Agents with Google ADK
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Presented by:&lt;/strong&gt; Ephraim Mwereza&lt;/p&gt;

&lt;p&gt;This project was about creating intelligent software agents using Google’s AI Development Kit (ADK). These agents are designed to understand spoken input, manage dialogue, and respond based on context.&lt;/p&gt;

&lt;p&gt;The aim here was to build agents that could work even in low-connectivity areas. While the technical details were limited, the emphasis was on creating tools that are both smart and accessible—for example, an agent that can help with education or healthcare tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters for developers&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intelligent agents are more than just bots—they can manage state, handle complex tasks, and learn from interactions.&lt;/li&gt;
&lt;li&gt;Tools like Google ADK allow you to build voice-first applications that are practical in areas where typing isn’t ideal.&lt;/li&gt;
&lt;li&gt;There’s a growing need for lightweight, on-device AI that can run offline or with minimal internet access.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Cross-Cutting Trends That Developers Should Note
&lt;/h2&gt;

&lt;p&gt;Looking across all three projects, a few common themes stand out:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Simpler Workflows Through Low-Code Tools
&lt;/h3&gt;

&lt;p&gt;Whether it’s TerraTorch or Google ADK, developers now have access to tools that simplify the training and deployment of AI models. This reduces the barrier to entry and allows for quicker iteration.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Pre-Trained Models Are the New Starting Point
&lt;/h3&gt;

&lt;p&gt;Instead of building models from the ground up, developers can start with a general-purpose model and fine-tune it for their own use case. This approach is efficient and scalable.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. AI Needs to Work in the Real World
&lt;/h3&gt;

&lt;p&gt;These projects serve communities that don’t always have high-speed internet or powerful devices. As a developer, you’ll need to design for edge deployment, offline support, and clear user feedback.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Developers Must Be Domain-Aware
&lt;/h3&gt;

&lt;p&gt;You can’t just build in isolation. Understanding the domain—whether it’s agriculture, climate science, or public health—is essential if you want your solution to be useful.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;These projects are strong examples of how AI can be applied to development challenges in real, practical ways. They show that it’s not just about cutting-edge algorithms, but about building tools that work—tools that people can trust and use.&lt;/p&gt;

&lt;p&gt;If you're a developer looking to get involved in socially impactful AI, these case studies offer both inspiration and direction. You already have the technical skills—what matters now is how you choose to apply them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to explore more?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ibm/terratorch" rel="noopener noreferrer"&gt;TerraTorch – IBM Research&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developers.google.com/assistant/sdk" rel="noopener noreferrer"&gt;Google Assistant SDK&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/in/edwardgichura-102242e/" rel="noopener noreferrer"&gt;LinkedIn – Edward Gichura&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;If you found this post useful, consider following for more articles on applied AI, low-code tooling, and building for impact.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>automation</category>
    </item>
    <item>
      <title>🐞 GitHub Issues: Supercharge Your Project Workflow</title>
      <dc:creator>Joel Amos</dc:creator>
      <pubDate>Thu, 15 May 2025 08:22:58 +0000</pubDate>
      <link>https://dev.to/joel_amos/github-issues-supercharge-your-project-workflow-eli</link>
      <guid>https://dev.to/joel_amos/github-issues-supercharge-your-project-workflow-eli</guid>
      <description>&lt;p&gt;When building any project—whether it’s a game, a web app, or even a simple script—keeping track of tasks and bugs is essential. That’s where &lt;strong&gt;GitHub Issues&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;p&gt;GitHub Issues isn’t just for reporting bugs. It’s a flexible, lightweight tool for planning, collaboration, and communication.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Why Use GitHub Issues?
&lt;/h2&gt;

&lt;p&gt;Here’s why it’s worth integrating Issues into your workflow:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. 🧩 Task Management
&lt;/h3&gt;

&lt;p&gt;Turn ideas or todos into actionable tasks. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add power-ups to Brick Breaker game&lt;/li&gt;
&lt;li&gt;Fix paddle-ball collision bug&lt;/li&gt;
&lt;li&gt;Refactor game loop code&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. 🗂 Organized Workflow with Labels &amp;amp; Milestones
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Labels&lt;/strong&gt; categorize issues (e.g., &lt;code&gt;bug&lt;/code&gt;, &lt;code&gt;enhancement&lt;/code&gt;, &lt;code&gt;good first issue&lt;/code&gt;, &lt;code&gt;help wanted&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Milestones&lt;/strong&gt; group related issues under a single release or feature (e.g., &lt;code&gt;v1.0 Release&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. 📌 Assignees and Accountability
&lt;/h3&gt;

&lt;p&gt;Assign tasks to team members (or yourself) so everyone knows who’s working on what.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. 🧵 Built-in Discussions
&lt;/h3&gt;

&lt;p&gt;Each issue has a comment thread, making it easy to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask clarifying questions&lt;/li&gt;
&lt;li&gt;Share screenshots or logs&lt;/li&gt;
&lt;li&gt;Link to commits, pull requests, or related issues&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. 🔗 Cross-linking
&lt;/h3&gt;

&lt;p&gt;You can reference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Commits: &lt;code&gt;Added lives system in game (#12)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Pull Requests: &lt;code&gt;Fixes #8&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Other issues: &lt;code&gt;Related to #5&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. 🧠 Documentation by Default
&lt;/h3&gt;

&lt;p&gt;Issues create a searchable archive of your team’s development journey—great for reviewing why certain decisions were made.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. 💬 Templates for Consistency
&lt;/h3&gt;

&lt;p&gt;Add issue templates to guide contributors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# .github/ISSUE_TEMPLATE/bug_report.md&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Bug report&lt;/span&gt;
&lt;span class="na"&gt;about&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Create a report to help us improve&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[BUG]&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Describe&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;issue&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;here"&lt;/span&gt;
&lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bug&lt;/span&gt;
&lt;span class="na"&gt;assignees&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💡 Bonus: GitHub Projects + Issues = Kanban Power
&lt;/h2&gt;

&lt;p&gt;Integrate &lt;strong&gt;GitHub Projects&lt;/strong&gt; to visualize issues in a kanban board (like Trello):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;To Do     | In Progress  | Done
----------|--------------|------
#14       | #8           | #4
#15       |              | #1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Drag &amp;amp; drop tasks, set priorities, and keep everything in sync.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠 Best Practices for Using GitHub Issues
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Write clear, concise titles and descriptions&lt;/li&gt;
&lt;li&gt;Use labels generously for clarity&lt;/li&gt;
&lt;li&gt;Reference related items (e.g., “depends on #7”)&lt;/li&gt;
&lt;li&gt;Close issues via PRs with keywords like &lt;code&gt;Fixes #3&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Keep discussions constructive and goal-focused&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Wrap-Up
&lt;/h2&gt;

&lt;p&gt;GitHub Issues makes your development life smoother. It helps you stay organized, communicate effectively, and build better software—whether solo or in a team.&lt;/p&gt;

&lt;p&gt;Start small: create an issue for your next feature or bug fix. You’ll be surprised how much easier development becomes.&lt;/p&gt;

&lt;p&gt;🧠 Pro tip: Combine &lt;strong&gt;Issues&lt;/strong&gt; with &lt;strong&gt;GitHub Actions&lt;/strong&gt; for automation, like auto-closing stale issues or labeling new ones.&lt;/p&gt;




&lt;p&gt;🎮 Happy coding, and issue like a pro!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Game Development in JavaScript</title>
      <dc:creator>Joel Amos</dc:creator>
      <pubDate>Mon, 12 May 2025 11:36:49 +0000</pubDate>
      <link>https://dev.to/joel_amos/game-development-in-javascript-39k2</link>
      <guid>https://dev.to/joel_amos/game-development-in-javascript-39k2</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;“Developing a game may sound intimidating, but with the power of JavaScript and HTML, you can create engaging, interactive experiences right in your browser.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🧠 Introduction&lt;/li&gt;
&lt;li&gt;
🎮 Step 1: Conceptualizing Your Game

&lt;ul&gt;
&lt;li&gt;🔍 Brainstorming&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;🗂 Step 2: Project Setup &amp;amp; Structure&lt;/li&gt;

&lt;li&gt;🛠 Step 3: Setting Up Your Development Environment&lt;/li&gt;

&lt;li&gt;💻 Step 4: Building the HTML &amp;amp; CSS Foundation&lt;/li&gt;

&lt;li&gt;⚙️ Step 5: Crafting the Game Logic in JavaScript&lt;/li&gt;

&lt;li&gt;🔄 Step 6: Implementing the Game Loop &amp;amp; Animations&lt;/li&gt;

&lt;li&gt;🎯 Step 7: Adding Game Mechanics &amp;amp; Features&lt;/li&gt;

&lt;li&gt;🧪 Step 8: Testing, Debugging, and Optimization&lt;/li&gt;

&lt;li&gt;🚀 Conclusion &amp;amp; Next Steps&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 Introduction
&lt;/h2&gt;

&lt;p&gt;JavaScript and HTML have evolved to the point where you can build full-fledged games that run directly in your web browser without plugins. This is perfect for beginners and intermediate developers looking to learn game development fundamentals and create a game like Arkanoid/Brick Breaker.&lt;/p&gt;

&lt;p&gt;In this post, we'll walk through building a simple browser game, similar to &lt;em&gt;Arkanoid&lt;/em&gt; or &lt;em&gt;Brick Breaker&lt;/em&gt;. Along the way, you’ll learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to plan and design your game before writing code&lt;/li&gt;
&lt;li&gt;How to structure your project for scalability and clarity&lt;/li&gt;
&lt;li&gt;How to implement core game mechanics using HTML, CSS, and JavaScript&lt;/li&gt;
&lt;li&gt;Optimization tips to make your game run smoothly at 60 frames per second&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By the end, you’ll have a functional and fun mini-game—and the knowledge to build even more complex projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎮 Step 1: Conceptualizing Your Game
&lt;/h2&gt;

&lt;p&gt;Before diving into code, it’s important to understand what kind of game you want to build. A clear concept helps guide your development and keeps you focused on what matters most.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 Brainstorming
&lt;/h3&gt;

&lt;p&gt;Let’s define a simple, achievable game idea:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Game Type&lt;/strong&gt;: Brick Breaker (also known as Arkanoid)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Description&lt;/strong&gt;: A paddle bounces a ball to destroy rows of bricks at the top of the screen. The player must prevent the ball from falling below the paddle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Core Mechanics&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;A ball that moves and bounces off the paddle and walls&lt;/li&gt;
&lt;li&gt;A paddle that the player controls (left and right movement)&lt;/li&gt;
&lt;li&gt;Bricks that disappear when hit by the ball&lt;/li&gt;
&lt;li&gt;Win condition: all bricks are destroyed&lt;/li&gt;
&lt;li&gt;Lose condition: the ball falls off the bottom of the screen&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Starting simple makes the project manageable while still being a fun challenge.&lt;/p&gt;




&lt;h2&gt;
  
  
  🗂 Step 2: Project Setup &amp;amp; Structure
&lt;/h2&gt;

&lt;p&gt;Good structure makes your code easier to manage as it grows. Here's a basic setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;project/
│
├── index.html # Main HTML file
├── style.css # Game styling
├── game.js # JavaScript game logic
└── assets/ # (Optional) images, sounds, etc.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep everything clean and modular—HTML for structure, CSS for visuals, and JS for logic.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠 Step 3: Setting Up Your Development Environment
&lt;/h2&gt;

&lt;p&gt;You don’t need anything fancy. Here's what you need to get started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A modern browser (like Chrome or Firefox)&lt;/li&gt;
&lt;li&gt;A code editor (such as VS Code, Sublime Text, or Atom)&lt;/li&gt;
&lt;li&gt;Optionally, a local server (Live Server extension in VS Code works great)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once everything is set up, you're ready to build!&lt;/p&gt;




&lt;h2&gt;
  
  
  💻 Step 4: Building the HTML &amp;amp; CSS Foundation
&lt;/h2&gt;

&lt;p&gt;Start by creating the visual components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A game area (usually a &lt;code&gt;div&lt;/code&gt; or &lt;code&gt;canvas&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;A paddle (another &lt;code&gt;div&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;A ball (&lt;code&gt;div&lt;/code&gt; or circle)&lt;/li&gt;
&lt;li&gt;Bricks (a grid of &lt;code&gt;div&lt;/code&gt; elements)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use CSS to position and style these elements. Flexbox or absolute positioning works well for this kind of layout.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Step 5: Crafting the Game Logic in JavaScript
&lt;/h2&gt;

&lt;p&gt;Here’s where the magic happens.&lt;/p&gt;

&lt;p&gt;Using JavaScript, you'll:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Move the paddle using keyboard input&lt;/li&gt;
&lt;li&gt;Animate the ball and update its position&lt;/li&gt;
&lt;li&gt;Detect collisions with bricks, walls, and the paddle&lt;/li&gt;
&lt;li&gt;Track the game state (score, lives, win/lose conditions)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep your code modular. Functions like &lt;code&gt;moveBall()&lt;/code&gt;, &lt;code&gt;checkCollision()&lt;/code&gt;, or &lt;code&gt;updateGame()&lt;/code&gt; help separate concerns.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔄 Step 6: Implementing the Game Loop &amp;amp; Animations
&lt;/h2&gt;

&lt;p&gt;A &lt;em&gt;game loop&lt;/em&gt; is a core part of every game. It updates your game state and redraws everything on screen at regular intervals (ideally 60 times per second).&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;requestAnimationFrame()&lt;/code&gt; for smooth and efficient animations. It automatically syncs with your browser’s refresh rate.&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;function&lt;/span&gt; &lt;span class="nf"&gt;gameLoop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;   &lt;span class="c1"&gt;// Update positions, check collisions&lt;/span&gt;
  &lt;span class="nf"&gt;draw&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;     &lt;span class="c1"&gt;// Redraw the game scene&lt;/span&gt;
  &lt;span class="nf"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gameLoop&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Repeat&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;gameLoop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;  &lt;span class="c1"&gt;// Start the loop&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🎯 Step 7: Adding Game Mechanics &amp;amp; Features
&lt;/h2&gt;

&lt;p&gt;Once the basics are working, you can enhance your game with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sound effects
&lt;/li&gt;
&lt;li&gt;Increasing difficulty (e.g., ball speed)
&lt;/li&gt;
&lt;li&gt;Levels or stages
&lt;/li&gt;
&lt;li&gt;Score tracking and high scores
&lt;/li&gt;
&lt;li&gt;Power-ups or paddle size changes
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small touches like these make your game feel more complete and engaging.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Step 8: Testing, Debugging, and Optimization
&lt;/h2&gt;

&lt;p&gt;No code is perfect the first time. Here’s what to focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Testing&lt;/strong&gt;: Play the game often. Check for bugs and edge cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debugging&lt;/strong&gt;: Use &lt;code&gt;console.log()&lt;/code&gt; or browser dev tools to trace issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimization&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Use efficient loops and DOM updates&lt;/li&gt;
&lt;li&gt;Avoid unnecessary reflows/repaints in CSS&lt;/li&gt;
&lt;li&gt;Debounce input events if needed&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Aim for consistent performance at 60 FPS, especially on slower devices.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Conclusion &amp;amp; Next Steps
&lt;/h2&gt;

&lt;p&gt;Congratulations! You’ve built your first browser game using just HTML, CSS, and JavaScript.&lt;/p&gt;

&lt;p&gt;You now understand how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Break a game concept into small components&lt;/li&gt;
&lt;li&gt;Structure and style your game layout&lt;/li&gt;
&lt;li&gt;Write interactive and animated logic in JavaScript&lt;/li&gt;
&lt;li&gt;Optimize your game for performance and fun&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From here, you can try expanding your game or building something completely new—maybe a platformer, a puzzle game, or even multiplayer functionality using &lt;strong&gt;WebSockets&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🎮 Happy coding, and game on!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>javascript</category>
      <category>gamedev</category>
      <category>architecture</category>
    </item>
    <item>
      <title>YAML: Yet Another Markup Language</title>
      <dc:creator>Joel Amos</dc:creator>
      <pubDate>Fri, 13 Sep 2024 12:35:30 +0000</pubDate>
      <link>https://dev.to/joel_amos/yaml-yet-another-markup-language-ahl</link>
      <guid>https://dev.to/joel_amos/yaml-yet-another-markup-language-ahl</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Is it a failed language?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;YAML&lt;/em&gt;(&lt;em&gt;YAML Ain’t Markup Language&lt;/em&gt;) is a human-friendly data serialization language for all programming languages. Originally developed by &lt;em&gt;Clark Evans&lt;/em&gt;, &lt;em&gt;Ingy döt Net&lt;/em&gt;, and &lt;em&gt;Oren Ben-Kiki&lt;/em&gt; in &lt;em&gt;2001&lt;/em&gt;,  it is a human-readable data serialization language, commonly used for configuration files. Same as &lt;em&gt;Extensible Markup Language(XML)&lt;/em&gt;, &lt;em&gt;YAML&lt;/em&gt; targets communication applications, but slightly differs from &lt;em&gt;Standard Generalized Markup Language(SGML)&lt;/em&gt; with its minimal syntax. &lt;/p&gt;

&lt;p&gt;Although custom data types are allowed, &lt;em&gt;YAML&lt;/em&gt; at its core encodes scalars (strings, integers, and floats), lists and associative arrays(maps, dictionaries or hashes) based on the &lt;em&gt;Perl&lt;/em&gt; programming language. &lt;em&gt;YAML&lt;/em&gt; uses a colon-centered syntax for expressing key-value pairs. It uses an indentation style similar to &lt;em&gt;Python&lt;/em&gt;’s, escape sequences similar to &lt;em&gt;C&lt;/em&gt;’s, and whitespaces wrapping inspired by HTML.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;YAML&lt;/em&gt; got its name after being released in the wrong era which witnessed a lot of proliferation of markup languages for presentation and connectivity. The markup languages released in that era include &lt;em&gt;HTML&lt;/em&gt;, &lt;em&gt;XML&lt;/em&gt;, &lt;em&gt;SGML&lt;/em&gt;, etc. Its name was a recursive acronym to dispute its functionality and purpose as a data-oriented language rather than a markup language as was claimed.&lt;/p&gt;

&lt;p&gt;Over the years since its inception, &lt;em&gt;YAML&lt;/em&gt; has released various versions with additional features and updates based on the first beta( &lt;em&gt;YAML 1.0&lt;/em&gt; ) which was released on the &lt;em&gt;29th of January, 2004&lt;/em&gt; with its primary goal as a means to create a format that was more readable and writable by humans compared to existing data formats like &lt;em&gt;XML&lt;/em&gt; and &lt;em&gt;JSON&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Versions&lt;/strong&gt;&lt;br&gt;
Subsequent versions were released later on and they include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;YAML 1.1 - 18 January 2005&lt;/em&gt; : This version introduced enhancements and clarifications to the original specification, focusing on improving the handling of data types and various data structures .&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;YAML 1.2.0 - 21 July 2009&lt;/em&gt; : Closely aligning to JSON, this release simplified the format and aimed to eliminate some obscurity present in the earlier releases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;YAML 1.2.1 - 1 October 2009&lt;/em&gt; : This release was aimed at  making &lt;em&gt;YAML&lt;/em&gt; a superset of &lt;em&gt;JSON&lt;/em&gt;, ensuring any valid JSON document is a valid &lt;em&gt;YAML&lt;/em&gt; document.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;YAML 1.2.2  - 1 October 2021&lt;/em&gt; : The main of this release was continual refinement of &lt;em&gt;YAML&lt;/em&gt;, with the core principles still the same. The main focus of the update was to improve usability and expand the format’s capabilities while maintaining its readability.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;YAML&lt;/em&gt; has a simple syntax designed with readability in mind. The indentations in its syntax denote structures.&lt;br&gt;
Its key features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Human-Readability&lt;/strong&gt;: The use of indentation to represent nested structures, visually declutters the script.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Types&lt;/strong&gt;: &lt;br&gt;
&lt;em&gt;Scalars&lt;/em&gt;: Represent simple values such as strings, numbers, and boolean. &lt;br&gt;
&lt;em&gt;Sequences&lt;/em&gt;: Represent ordered lists (arrays). Commonly denoted by a dash ( - ) followed by a space. &lt;br&gt;
&lt;em&gt;Mappings&lt;/em&gt;: Represent key-value pairs (dictionaries). They are denoted by a colon (:) followed by a space.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Complex structures&lt;/strong&gt;:&lt;br&gt;
&lt;em&gt;Nested Sequences and Mappings&lt;/em&gt;: &lt;em&gt;YAML&lt;/em&gt; supports nested structures, allowing complex data to be represented hierarchically. &lt;br&gt;
&lt;em&gt;References&lt;/em&gt;: It allows the use of anchors (&amp;amp;) and aliases (*) to reuse and reference data within the same document.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Formatting Rules&lt;/strong&gt;: &lt;br&gt;
&lt;em&gt;Indentation&lt;/em&gt;: It relies on indentation ( 2 to 4 spaces ) for nesting. NB: Tabs are not allowed. &lt;br&gt;
&lt;em&gt;Line Breaks&lt;/em&gt;: For multiple-lined strings, &lt;em&gt;YAML&lt;/em&gt; provides various options like folded style ( &amp;lt; ) and literal style ( | ).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Comments&lt;/strong&gt;: Comments are denoted by a #. They can be placed on their own or at the end of a line.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;File Extensions&lt;/strong&gt;: They typically use .yaml or .yml extensions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interoperability&lt;/strong&gt;: Supports JSON documents as it is a superset of JSON. Integration of JSON with YAML is easier.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An example of a YAML syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt; &lt;span class="c1"&gt;# Favorite movies&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Casablanca&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;North by Northwest&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;The Man Who Wasn't There&lt;/span&gt;

&lt;span class="nn"&gt;---&lt;/span&gt; &lt;span class="c1"&gt;# Shopping list&lt;/span&gt;
&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;milk&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;pumpkin pie&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;eggs&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;juice&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="nn"&gt;---&lt;/span&gt; &lt;span class="c1"&gt;# Indented Block&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;John Smith&lt;/span&gt;
&lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;33&lt;/span&gt;

&lt;span class="nn"&gt;---&lt;/span&gt; &lt;span class="c1"&gt;# Inline Block&lt;/span&gt;
&lt;span class="pi"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;John Smith&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;age&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;33&lt;/span&gt;&lt;span class="pi"&gt;}&lt;/span&gt;

&lt;span class="nn"&gt;---&lt;/span&gt; &lt;span class="c1"&gt;# Strings&lt;/span&gt;
&lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="s"&gt;Wrapped text&lt;/span&gt;
   &lt;span class="s"&gt;will be folded&lt;/span&gt;
   &lt;span class="s"&gt;into a single&lt;/span&gt;
   &lt;span class="s"&gt;paragraph&lt;/span&gt;

   &lt;span class="s"&gt;Blank lines denote&lt;/span&gt;
   &lt;span class="s"&gt;paragraph breaks&lt;/span&gt;

&lt;span class="s"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="s"&gt;HTML goes into YAML without modification&lt;/span&gt;
&lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
        &lt;span class="s"&gt;&amp;lt;blockquote style="font: italic 1em serif"&amp;gt;&lt;/span&gt;
        &lt;span class="s"&gt;&amp;lt;p&amp;gt;"Three is always greater than two,&lt;/span&gt;
           &lt;span class="s"&gt;even for large values of two"&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="s"&gt;&amp;lt;p&amp;gt;--Author Unknown&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="s"&gt;&amp;lt;/blockquote&amp;gt;&lt;/span&gt;
&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2007-06-01&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Conclusions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bearing in mind that &lt;em&gt;YAML&lt;/em&gt; is still used widely in build and testing production-level environments, it proves to be an essential tool for managing configurations and data interchange. Its readability and flexibility make it a popular choice for defining automation scripts in &lt;a href="https://www.ansible.com/" rel="noopener noreferrer"&gt;Ansible&lt;/a&gt; , where it streamlines IT task automation. Similarly, &lt;em&gt;YAML's&lt;/em&gt; role in &lt;a href="https://docs.github.com/en/actions/writing-workflows/about-workflows" rel="noopener noreferrer"&gt;GitHub workflows&lt;/a&gt; facilitates the configuration of CI/CD pipelines, making testing and deployments more efficient. The continued evolution and integration of &lt;em&gt;YAML&lt;/em&gt; in these critical areas underscore its ongoing relevance and effectiveness in simplifying complex workflows and configurations.&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://github.com/Murzuqisah/" rel="noopener noreferrer"&gt;Github&lt;/a&gt; for more on programming languages.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>YAML: Yet Another Markup Language</title>
      <dc:creator>Joel Amos</dc:creator>
      <pubDate>Fri, 13 Sep 2024 12:26:13 +0000</pubDate>
      <link>https://dev.to/joel_amos/yaml-yet-another-markup-language-4njn</link>
      <guid>https://dev.to/joel_amos/yaml-yet-another-markup-language-4njn</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Is it a failed language?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;YAML&lt;/em&gt;(&lt;em&gt;YAML Ain’t Markup Language&lt;/em&gt;) is a human-friendly data serialization language for all programming languages. Originally developed by &lt;em&gt;Clark Evans&lt;/em&gt;, &lt;em&gt;Ingy döt Net&lt;/em&gt;, and &lt;em&gt;Oren Ben-Kiki&lt;/em&gt; in &lt;em&gt;2001&lt;/em&gt;,  it is a human-readable data serialization language, commonly used for configuration files. Same as &lt;em&gt;Extensible Markup Language(XML)&lt;/em&gt;, &lt;em&gt;YAML&lt;/em&gt; targets communication applications, but slightly differs from &lt;em&gt;Standard Generalized Markup Language(SGML)&lt;/em&gt; with its minimal syntax. &lt;/p&gt;

&lt;p&gt;Although custom data types are allowed, &lt;em&gt;YAML&lt;/em&gt; at its core encodes scalars (strings, integers, and floats), lists and associative arrays(maps, dictionaries or hashes) based on the &lt;em&gt;Perl&lt;/em&gt; programming language. &lt;em&gt;YAML&lt;/em&gt; uses a colon-centered syntax for expressing key-value pairs. It uses an indentation style similar to &lt;em&gt;Python&lt;/em&gt;’s, escape sequences similar to &lt;em&gt;C&lt;/em&gt;’s, and whitespaces wrapping inspired by HTML.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;YAML&lt;/em&gt; got its name after being released in the certainly wrong era which witnessed a lot of proliferation of markup languages for presentation and connectivity. The markup languages released in that era include &lt;em&gt;HTML&lt;/em&gt;, &lt;em&gt;XML&lt;/em&gt;, &lt;em&gt;SGML&lt;/em&gt;, etc. Its name was a recursive acronym to dispute its functionality and purpose as a data-oriented language rather than a markup language as was claimed.&lt;/p&gt;

&lt;p&gt;Over the years since its inception, &lt;em&gt;YAML&lt;/em&gt; has released various versions with additional features and updates based on the first beta( &lt;em&gt;YAML 1.0&lt;/em&gt; ) which was released on the &lt;em&gt;29th of January, 2004&lt;/em&gt; with its primary goal as a means to create a format that was more readable and writable by humans compared to existing data formats like &lt;em&gt;XML&lt;/em&gt; and &lt;em&gt;JSON&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Versions&lt;/strong&gt;&lt;br&gt;
Subsequent versions were released later on and they include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;YAML 1.1 - 18 January 2005&lt;/em&gt; : This version introduced enhancements and clarifications to the original specification, focusing on improving the handling of data types and various data structures .&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;YAML 1.2.0 - 21 July 2009&lt;/em&gt; : Closely aligning to JSON, this release simplified the format and aimed to eliminate some obscurity present in the earlier releases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;YAML 1.2.1 - 1 October 2009&lt;/em&gt; : This release was aimed at  making &lt;em&gt;YAML&lt;/em&gt; a superset of &lt;em&gt;JSON&lt;/em&gt;, ensuring any valid JSON document is a valid &lt;em&gt;YAML&lt;/em&gt; document.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;YAML 1.2.2  - 1 October 2021&lt;/em&gt; : The main of this release was continual refinement of &lt;em&gt;YAML&lt;/em&gt;, with the core principles still the same. The main focus of the update was to improve usability and expand the format’s capabilities while maintaining its readability.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;YAML&lt;/em&gt; has a simple syntax designed with readability in mind. The indentations in its syntax denote structures.&lt;br&gt;
Its key features include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Human-Readability&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;The use of indentation to represent nested structures, visually declutters the script.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Data Types&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Scalars&lt;/em&gt;: Represent simple values such as strings, numbers, and boolean. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Sequences&lt;/em&gt;: Represent ordered lists (arrays). Commonly denoted by a dash ( - ) followed by a space. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Mappings&lt;/em&gt;: Represent key-value pairs (dictionaries). They are denoted by a colon (:) followed by a space.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Complex structures &lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Nested Sequences and Mappings&lt;/em&gt;: &lt;em&gt;YAML&lt;/em&gt; supports nested structures, allowing complex data to be represented hierarchically. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;References&lt;/em&gt;: It allows the use of anchors (&amp;amp;) and aliases (*) to reuse and reference data within the same document.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Formatting Rules &lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Indentation&lt;/em&gt;: It relies on indentation ( 2 to 4 spaces ) for nesting. NB: Tabs are not allowed. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Line Breaks&lt;/em&gt;: For multiple-lined strings, &lt;em&gt;YAML&lt;/em&gt; provides various options like folded style ( &amp;lt; ) and literal style ( | ).&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Comments &lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Comments are denoted by a #. They can be placed on their own or at the end of a line.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;File Extensions: &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They typically use .yaml or .yml extensions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Interoperability&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Supports JSON documents as it is a superset of JSON. Integration of JSON with YAML is easier.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An example of a YAML syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt; &lt;span class="c1"&gt;# Favorite movies&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Casablanca&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;North by Northwest&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;The Man Who Wasn't There&lt;/span&gt;

&lt;span class="nn"&gt;---&lt;/span&gt; &lt;span class="c1"&gt;# Shopping list&lt;/span&gt;
&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;milk&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;pumpkin pie&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;eggs&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;juice&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="nn"&gt;---&lt;/span&gt; &lt;span class="c1"&gt;# Indented Block&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;John Smith&lt;/span&gt;
&lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;33&lt;/span&gt;

&lt;span class="nn"&gt;---&lt;/span&gt; &lt;span class="c1"&gt;# Inline Block&lt;/span&gt;
&lt;span class="pi"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;John Smith&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;age&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;33&lt;/span&gt;&lt;span class="pi"&gt;}&lt;/span&gt;

&lt;span class="nn"&gt;---&lt;/span&gt; &lt;span class="c1"&gt;# Strings&lt;/span&gt;
&lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;&amp;gt;&lt;/span&gt;
   &lt;span class="s"&gt;Wrapped text&lt;/span&gt;
   &lt;span class="s"&gt;will be folded&lt;/span&gt;
   &lt;span class="s"&gt;into a single&lt;/span&gt;
   &lt;span class="s"&gt;paragraph&lt;/span&gt;

   &lt;span class="s"&gt;Blank lines denote&lt;/span&gt;
   &lt;span class="s"&gt;paragraph breaks&lt;/span&gt;

&lt;span class="s"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="s"&gt;HTML goes into YAML without modification&lt;/span&gt;
&lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
        &lt;span class="s"&gt;&amp;lt;blockquote style="font: italic 1em serif"&amp;gt;&lt;/span&gt;
        &lt;span class="s"&gt;&amp;lt;p&amp;gt;"Three is always greater than two,&lt;/span&gt;
           &lt;span class="s"&gt;even for large values of two"&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="s"&gt;&amp;lt;p&amp;gt;--Author Unknown&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="s"&gt;&amp;lt;/blockquote&amp;gt;&lt;/span&gt;
&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2007-06-01&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Conclusions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bearing in mind that &lt;em&gt;YAML&lt;/em&gt; is still used widely in build and testing production-level environments, it proves to be an essential tool for managing configurations and data interchange. Its readability and flexibility make it a popular choice for defining automation scripts in &lt;a href="https://www.ansible.com/" rel="noopener noreferrer"&gt;Ansible&lt;/a&gt; , where it streamlines IT task automation. Similarly, &lt;em&gt;YAML's&lt;/em&gt; role in &lt;a href="https://docs.github.com/en/actions/writing-workflows/about-workflows" rel="noopener noreferrer"&gt;GitHub workflows&lt;/a&gt; facilitates the configuration of CI/CD pipelines, making testing and deployments more efficient. The continued evolution and integration of &lt;em&gt;YAML&lt;/em&gt; in these critical areas underscore its ongoing relevance and effectiveness in simplifying complex workflows and configurations.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
