<?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: Ken</title>
    <description>The latest articles on DEV Community by Ken (@kenferio).</description>
    <link>https://dev.to/kenferio</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%2F1058918%2F37bf6314-3ff7-42b3-abe3-f2f5c8f05794.jpg</url>
      <title>DEV Community: Ken</title>
      <link>https://dev.to/kenferio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kenferio"/>
    <language>en</language>
    <item>
      <title>Norman</title>
      <dc:creator>Ken</dc:creator>
      <pubDate>Tue, 07 Nov 2023 16:09:56 +0000</pubDate>
      <link>https://dev.to/kenferio/norman-4hgd</link>
      <guid>https://dev.to/kenferio/norman-4hgd</guid>
      <description>&lt;p&gt;If you played Norman, then you'll know that the balance is pretty wack. If you get past the difficulty spike on level 5, then there's a good chance by the end you will have performed most of the rituals. You'll have more souls than you can spend. There's no longer any need to aim. Occasionally click vaguely on the right side of the screen and enemies will have a hard time making it past the barrage of particles that fill the viewport.&lt;/p&gt;

&lt;p&gt;Many games designed around synergies have combinations which are powerful enough to be considered "broken" but it's important that these occurrences are rare enough that they stay novel, otherwise they become boring. Unfortunately that's what happened with Norman.&lt;/p&gt;

&lt;p&gt;Let's quickly talk about the basic progression mechanics to understand what went wrong here. When villagers die (either from spells or skeletons) Norman earns a fixed number of souls (based on the enemy type). At the end of each level, Norman can spend those souls to perform rituals which serve as the game's only upgrade system.&lt;/p&gt;

&lt;p&gt;The problem is that it's too easy to earn souls, and by the end of a playthrough you have generally earned so many souls that you can have performed all the rituals you've been offered. There's a tricky line to walk for something like a game jam, people are only likely to play your game for a few minutes, and I wanted them to see the variety in the game play.&lt;/p&gt;

&lt;p&gt;I tried a few different strategies for balancing rituals. First, separating them into rare and common tiers, and ensuring that the rare rituals cost more, and can be offered once per level. The other approach to balancing I tried was to make enemies that punish the player for not playing tactically.&lt;/p&gt;

&lt;p&gt;The simplest example is the big shelled knights that spend half their time inside their shells, invulnerable. Most spells are wasted (unless they inflict a status effect like bleed) at this phase. However, this turned out not to be punishing enough if the player just keeps on spamming, so I created an angry red knight who had a "bleeding" state which reflects damage back to Norman. This wasn't intuitive and he ended up getting nerfed down to simply healing if he is damaged whilst "enraged". The final iteration of this design ended up being the King's Guards, a late game enemy, who use their shields to reflect projectiles back at Norman.&lt;/p&gt;

&lt;p&gt;These guys used to reflect Norman's own projectiles back at him, until I inflicted bleed on myself during a playthrough and realised there was no cure.&lt;/p&gt;

&lt;p&gt;Generally, I think that little games are better off being interesting and easy, than boring and hard, but I do wish I'd landed on a better balance. Ideally, players could have enjoyed working their way to the end of the game across a few runs, rather than it being possible to completely steamroll the entire thing on their first try.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Resurrection Mechanics 
For a game about necromancy, the resurrection mechanic should have been a primary focus and strategy, but instead it took a bit of a backseat to the overpowered, colourful spellcasting. There's very little guidance explaining the resurrections and it's quite possible to beat the game without using it once.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When villagers meet their demise, they have a fixed chance to drop a skull onto the ground. One of Norman's talents is the power to bring each of those corpses back to defend him, as a skeletal thrall, marching against the villagers.&lt;/p&gt;

&lt;p&gt;I designed quite a few of the rituals around this ability, ultimately it just wasn't as fun as bouncing lightning off the ceiling. The closest I got to a satisfying mechanic here was the "Riders" ritual, which summoned a bone chariot after each resurrection.&lt;/p&gt;

&lt;p&gt;Sadly, I couldn't justify the enormous sprite for a relatively small mechanic, and this ritual ended up getting replaced by "Allegiance".&lt;/p&gt;

&lt;p&gt;In retrospect, I think that I should have worked harder to weave resurrections deeper into the other core mechanics. One idea that I'd like to have tried would be making resurrections the only way to earn souls.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Unlocking the Code: A Beginner's Guide to Getting Started with Programming</title>
      <dc:creator>Ken</dc:creator>
      <pubDate>Tue, 07 Nov 2023 04:55:02 +0000</pubDate>
      <link>https://dev.to/kenferio/unlocking-the-code-a-beginners-guide-to-getting-started-with-programming-4okd</link>
      <guid>https://dev.to/kenferio/unlocking-the-code-a-beginners-guide-to-getting-started-with-programming-4okd</guid>
      <description>&lt;p&gt;Hey Dev Community,&lt;/p&gt;

&lt;p&gt;🚀 Excited to share a guide on how to embark on the thrilling journey of coding! Whether you're a complete newbie or someone looking to brush up on their skills, this post is tailored just for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌐 Understanding the Basics&lt;/strong&gt;&lt;br&gt;
1.Choose Your Language: Begin by selecting a programming language. Python is great for beginners due to its readability and versatility, but languages like JavaScript and Java are also excellent choices.&lt;/p&gt;

&lt;p&gt;2.Setting Up Your Environment: Install the necessary tools and an integrated development environment (IDE) for your chosen language. Popular choices include VSCode, PyCharm, and Atom.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💻 Dive into the Code&lt;/strong&gt;&lt;br&gt;
1.Start with Simple Projects: Tackle small projects to build confidence. Think of a project that excites you – it could be a to-do list app, a basic website, or a simple game.&lt;/p&gt;

&lt;p&gt;2.Online Courses and Tutorials: Platforms like Codecademy, Udacity, and freeCodeCamp offer interactive courses. Follow along with tutorials to grasp concepts and reinforce your learning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📚 Building a Solid Foundation&lt;/strong&gt;&lt;br&gt;
1.Understand the Basics of Algorithms and Data Structures: These are the building blocks of programming. Learning about them early on will give you a solid foundation for solving problems efficiently.&lt;/p&gt;

&lt;p&gt;2.Version Control with Git: Get comfortable with Git and GitHub. Version control is crucial for collaborative work and helps you keep track of changes in your code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌟 Embrace Challenges&lt;/strong&gt;&lt;br&gt;
1.Participate in Coding Challenges: Websites like HackerRank, LeetCode, and Codewars offer a variety of coding challenges. Regularly solving these problems enhances problem-solving skills and coding efficiency.&lt;/p&gt;

&lt;p&gt;2.Join Coding Communities: Engage with fellow developers on platforms like Stack Overflow, Reddit, or local meetups. Learning from others and asking questions is an invaluable part of the coding journey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚀 Continuous Learning&lt;/strong&gt;&lt;br&gt;
1.Stay Updated: The tech world evolves rapidly. Subscribe to newsletters, follow influential developers on social media, and read blogs to stay informed about the latest trends and updates.&lt;/p&gt;

&lt;p&gt;2.Build Real Projects: Apply your skills by working on real-world projects. This not only enhances your portfolio but also provides hands-on experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚧 Overcoming Challenges&lt;/strong&gt;&lt;br&gt;
1.Embrace Failure: Coding can be challenging, and you might encounter roadblocks. Embrace failure as an opportunity to learn and improve.&lt;/p&gt;

&lt;p&gt;2.Take Breaks: Avoid burnout by taking breaks. Stepping away and returning with fresh eyes can often lead to breakthroughs.&lt;/p&gt;

&lt;p&gt;🌈 Conclusion&lt;br&gt;
Remember, coding is a journey, not a destination. Enjoy the process of learning, and celebrate your victories along the way. Feel free to share your own tips or ask questions in the comments!&lt;/p&gt;

&lt;p&gt;Happy coding! 🚀👩‍💻👨‍💻&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Placeholder Contributor</title>
      <dc:creator>Ken</dc:creator>
      <pubDate>Wed, 25 Oct 2023 05:45:25 +0000</pubDate>
      <link>https://dev.to/kenferio/placeholder-contributor-4mpl</link>
      <guid>https://dev.to/kenferio/placeholder-contributor-4mpl</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6-AhVUit--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b7f2omdor5pqq8h9c38z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6-AhVUit--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b7f2omdor5pqq8h9c38z.png" alt="Image description" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;

&lt;p&gt;Hello, fellow open-source enthusiasts! I'm excited to share my journey as a Hacktoberfest contributor this year. While I'm no stranger to the world of open source, this is my second Hacktoberfest, and I've been actively contributing to various projects on GitHub over the years. You can check out my GitHub profile here.&lt;/p&gt;

&lt;p&gt;Highs and Lows&lt;br&gt;
This Hacktoberfest has been a rollercoaster of highs and lows. One of my biggest accomplishments this month was successfully contributing to a complex machine learning library, which initially seemed daunting. It was a light-bulb moment when I finally understood the codebase and was able to make meaningful contributions.&lt;/p&gt;

&lt;p&gt;However, I did face some challenges along the way. There was a project I was passionate about, but I encountered a bug that initially appeared impossible to fix. It was a great test of my problem-solving skills. I reached out to the project maintainers and the open-source community for guidance, and after much perseverance and collaboration, we managed to squash the bug. This experience taught me the importance of community support and never giving up when faced with seemingly insurmountable obstacles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Growth
&lt;/h2&gt;

&lt;p&gt;Before Hacktoberfest 2023, I had a decent skillset in web development and was familiar with version control systems, but my knowledge was somewhat limited. Throughout this journey, I've dived deep into various programming languages and tools. I've gained hands-on experience with Git, Docker, and continuous integration. Additionally, I've improved my understanding of software architecture and design patterns.&lt;/p&gt;

&lt;p&gt;Hacktoberfest has been a catalyst for my professional growth. My learning goals have expanded, and I now aspire to become a more active open-source contributor, working on projects that align with my career aspirations. This event has not only honed my technical skills but has also broadened my horizons regarding the possibilities of open source.&lt;/p&gt;

&lt;p&gt;In summary, my second Hacktoberfest has been an incredible journey filled with learning, collaboration, and growth. I can't wait to continue contributing to open source and further expand my skillset. Let's keep the open-source spirit alive!&lt;/p&gt;

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

</description>
      <category>hack23contributor</category>
      <category>webdev</category>
      <category>programming</category>
      <category>discuss</category>
    </item>
    <item>
      <title>A Guide to CSS Flexbox: Creating Flexible Layouts</title>
      <dc:creator>Ken</dc:creator>
      <pubDate>Sat, 14 Oct 2023 21:09:27 +0000</pubDate>
      <link>https://dev.to/kenferio/a-guide-to-css-flexbox-creating-flexible-layouts-3e7l</link>
      <guid>https://dev.to/kenferio/a-guide-to-css-flexbox-creating-flexible-layouts-3e7l</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In the world of web development, creating responsive and flexible layouts is a must. One of the most powerful tools at your disposal for achieving this is CSS Flexbox. Flexbox, short for Flexible Box Layout, is a layout model that allows you to design complex, grid-like layouts with ease. In this blog post, we'll explore the basics of CSS Flexbox and show you how to use it to create flexible and responsive designs for your web projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is CSS Flexbox?&lt;/strong&gt;&lt;br&gt;
CSS Flexbox, or simply Flexbox, is a layout model in CSS that provides an efficient way to distribute space and align items in a container, even when their size is unknown or dynamic. It's particularly useful for creating one-dimensional layouts, such as rows or columns.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Getting Started with Flexbox:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;** 1. Setting Up the Container:**&lt;br&gt;
Before you can start using Flexbox, you need to designate a container as a flex container. You can do this by applying the display: flex; property to the container's CSS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
.container {
  display: flex;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This simple declaration makes all direct children of the container into flex items.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Defining the Direction:&lt;/strong&gt;&lt;br&gt;
By default, a flex container creates a row layout, which is ideal for building horizontal menus or galleries. You can also create a column layout by setting flex-direction to column.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
.container {
  display: flex;
  flex-direction: column;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Adjusting Item Alignment:&lt;/strong&gt;&lt;br&gt;
You can control how items are aligned within the container using justify-content for horizontal alignment and align-items for vertical alignment.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
.container {
  display: flex;
  justify-content: center; /* Horizontal alignment */
  align-items: center;     /* Vertical alignment */
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Flex Properties:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;flex-grow, flex-shrink, and flex-basis:
These properties control how items grow or shrink to fill available space within the container. You can define these values for individual flex items:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.item {
  flex: 1; /* flex-grow: 1, flex-shrink: 1, flex-basis: 0% */
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;order:
The order property allows you to rearrange the order of flex items. Items with lower order values appear first.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
.item {
  order: 2;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Real-World Examples:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. Creating a Navigation Menu:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.nav {
  display: flex;
  justify-content: space-around;
  align-items: center;
}
.nav-item {
  flex: 1;
  text-align: center;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Building a Card Layout:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.card-container {
  display: flex;
  flex-wrap: wrap;
}

.card {
  flex: 1;
  min-width: 250px;
  margin: 10px;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br&gt;
CSS Flexbox is a powerful tool for creating flexible and responsive layouts in web design. With just a few lines of CSS, you can create complex arrangements of elements that adapt to different screen sizes and content changes. By mastering Flexbox, you can simplify your web development workflow and make your projects more user-friendly and visually appealing. Give it a try, and watch your layouts become more flexible and dynamic than ever before.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>css</category>
    </item>
  </channel>
</rss>
