<?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: Maryam</title>
    <description>The latest articles on DEV Community by Maryam (@mnajibi).</description>
    <link>https://dev.to/mnajibi</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%2F1155240%2Fd31ff75c-977f-4caa-80de-5e6af4a12318.jpg</url>
      <title>DEV Community: Maryam</title>
      <link>https://dev.to/mnajibi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mnajibi"/>
    <language>en</language>
    <item>
      <title>Triumph in Testing: Enhancing PCGA's Reliability</title>
      <dc:creator>Maryam</dc:creator>
      <pubDate>Sun, 10 Dec 2023 20:08:07 +0000</pubDate>
      <link>https://dev.to/mnajibi/triumph-in-testing-enhancing-pcgas-reliability-579p</link>
      <guid>https://dev.to/mnajibi/triumph-in-testing-enhancing-pcgas-reliability-579p</guid>
      <description>&lt;p&gt;Hello Tech Enthusiasts!&lt;/p&gt;

&lt;p&gt;Today, I'm thrilled to announce that I've completed the testing phase for the Proportions Controlling Genetic Algorithm (PCGA). This milestone marks a significant enhancement in the algorithm's stability and reliability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mission Accomplished&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The journey from planning tests to executing them has been a marathon of learning and problem-solving. Each test added has made PCGA more robust and ready to handle diverse scenarios.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Testing has taught me the importance of patience and attention to detail. From simple unit tests to complex integration tests, each step has been crucial in fortifying PCGA.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's Next?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While the testing phase is complete, the journey doesn't end here. Continuous improvement is key in software development, and I'm already looking forward to the next challenge.&lt;/p&gt;

&lt;p&gt;Thank you for joining me on this exciting journey of enhancing PCGA. Here's to many more milestones ahead!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Navigating Through the Testing Maze of PCGA</title>
      <dc:creator>Maryam</dc:creator>
      <pubDate>Sun, 10 Dec 2023 20:03:04 +0000</pubDate>
      <link>https://dev.to/mnajibi/making-strides-progress-update-on-the-pcga-project-40eh</link>
      <guid>https://dev.to/mnajibi/making-strides-progress-update-on-the-pcga-project-40eh</guid>
      <description>&lt;p&gt;Hi All!&lt;/p&gt;

&lt;p&gt;It's time for an update from the testing trenches of the PCGA project. The journey so far has been both challenging and rewarding, and I'm excited to share my progress with you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test Development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I've been busy writing a variety of tests. Starting with the simpler helper functions and gradually moving to the more complex core components, each test is like a puzzle piece fitting into the bigger picture of PCGA's reliability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenges Galore&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the biggest hurdles was testing the private methods. It pushed me to explore and learn more about Python's capabilities and limitations. Every challenge tackled has been a step forward in ensuring the robustness of PCGA.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Sneak Peek&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So far, the tests are doing their job – identifying minor bugs and providing insights for optimization. There's more to be done, but I'm thrilled with the progress.&lt;/p&gt;

&lt;p&gt;Stay tuned for more updates, and thanks for following my journey in enhancing PCGA's reliability through testing!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Setting the Stage for Robust Testing in PCGA</title>
      <dc:creator>Maryam</dc:creator>
      <pubDate>Sun, 10 Dec 2023 19:58:19 +0000</pubDate>
      <link>https://dev.to/mnajibi/my-adventure-in-testing-a-genetic-algorithm-1gh5</link>
      <guid>https://dev.to/mnajibi/my-adventure-in-testing-a-genetic-algorithm-1gh5</guid>
      <description>&lt;p&gt;Hey Everyone!&lt;/p&gt;

&lt;p&gt;I'm embarking on an exciting phase in the Proportions Controlling Genetic Algorithm (PCGA) project – the planning of a comprehensive testing strategy. My goal is to ensure the algorithm not only performs as intended but also stands resilient against potential bugs and future enhancements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Testing?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Having worked with PCGA, I realized that while it's powerful, it lacks a safety net. This is where testing comes in – it's like putting on a seatbelt before a thrilling drive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Game Plan&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My plan is to dissect the algorithm and understand its inner workings. This will help me identify key areas that need testing. From basic unit tests for helper functions to more complex ones for the algorithm's core logic, everything needs to be scrutinized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Heads-Up&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This phase is all about blueprints and strategies. It's where I lay down a solid foundation for the tests that will shape the future of PCGA. So, stay tuned as I dive into this crucial part of software development!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Journey to the First Release of `tml` - A Markdown to HTML Converter</title>
      <dc:creator>Maryam</dc:creator>
      <pubDate>Thu, 23 Nov 2023 15:13:34 +0000</pubDate>
      <link>https://dev.to/mnajibi/journey-to-the-first-release-of-tml-a-markdown-to-html-converter-385p</link>
      <guid>https://dev.to/mnajibi/journey-to-the-first-release-of-tml-a-markdown-to-html-converter-385p</guid>
      <description>&lt;p&gt;Hello fellow developers and curious minds,&lt;/p&gt;

&lt;p&gt;Today, I want to share my journey of releasing &lt;code&gt;tml&lt;/code&gt;, a command-line tool designed to convert &lt;code&gt;.txt&lt;/code&gt; and &lt;code&gt;.md&lt;/code&gt; files into &lt;code&gt;.html&lt;/code&gt; format. This blog post will outline the process from choosing a release tool to user testing, aiming to provide a helpful guide for those looking to do the same.&lt;/p&gt;

&lt;h3&gt;
  
  
  Choosing a Release Tool and Package Registry
&lt;/h3&gt;

&lt;p&gt;For &lt;code&gt;tml&lt;/code&gt;, I chose to distribute the package using &lt;a href="https://pypi.org/"&gt;PyPI&lt;/a&gt;, the Python Package Index, which is the de facto package registry for Python projects. PyPI is a repository of software for the Python programming language that helps users find and install software developed and shared by the Python community.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Release Process
&lt;/h3&gt;

&lt;p&gt;The process began with organizing the project structure. Ensuring that the code was in a state that would be recognized by Python's packaging tools was key. This meant creating a &lt;code&gt;src&lt;/code&gt; directory, adding an &lt;code&gt;__init__.py&lt;/code&gt; file, and updating the import statements accordingly.&lt;/p&gt;

&lt;p&gt;Next, I created a &lt;code&gt;setup.py&lt;/code&gt; file at the root of the project. This script is crucial as it contains all the metadata about your package, such as the name, version, author, and dependencies.&lt;/p&gt;

&lt;p&gt;With the &lt;code&gt;setup.py&lt;/code&gt; in place, the next step was to build the distribution files. I used the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python setup.py sdist bdist_wheel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These commands create a source distribution and a wheel, respectively. After building the distributions, I uploaded them to PyPI using &lt;a href="https://twine.readthedocs.io/en/latest/"&gt;Twine&lt;/a&gt;, a utility for publishing Python packages on PyPI.&lt;/p&gt;

&lt;p&gt;The command was simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;twine upload dist/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Learning and "Aha!" Moments
&lt;/h3&gt;

&lt;p&gt;Throughout this process, I learned the importance of a well-organized codebase. One of my "aha!" moments was when I realized the significance of the &lt;code&gt;__init__.py&lt;/code&gt; files. They may be empty, but they play an essential role in defining package structures.&lt;/p&gt;

&lt;p&gt;I also learned about semantic versioning, which is a 3-part system for versioning software in the format of &lt;code&gt;MAJOR.MINOR.PATCH&lt;/code&gt;. This was an "aha!" moment as I understood how it helps communicate the scope of changes in a release.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alterations to Accommodate the Release
&lt;/h3&gt;

&lt;p&gt;Adjusting the project to fit the packaging structure required moving files around, creating new directories, and ensuring the &lt;code&gt;setup.py&lt;/code&gt; script accurately represented the project's dependencies and metadata. Thankfully, the alterations were minimal as my code was already modular.&lt;/p&gt;

&lt;h3&gt;
  
  
  User Testing Session
&lt;/h3&gt;

&lt;p&gt;User testing was an enlightening experience. Watching someone interact with &lt;code&gt;tml&lt;/code&gt; without any context exposed some assumptions I had made in my documentation. My tester got stuck on the installation process, as I had omitted the command to install &lt;code&gt;tml&lt;/code&gt; from PyPI. After this session, I updated the &lt;code&gt;README.md&lt;/code&gt; to clarify the installation and usage instructions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation and Usage Post-Release
&lt;/h3&gt;

&lt;p&gt;Users can now install &lt;code&gt;tml&lt;/code&gt; using pip:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;tml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once installed, you can convert files with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tml &amp;lt;path-to-file&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To specify an output directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tml &amp;lt;path-to-file&amp;gt; &lt;span class="nt"&gt;--output&lt;/span&gt; &amp;lt;path-to-output-directory&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The complete instructions are available on the &lt;a href="https://github.com/mnajibi/tml"&gt;project's README&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In conclusion, releasing &lt;code&gt;tml&lt;/code&gt; was a journey filled with learning experiences. I hope that sharing my process will help demystify the release process for other developers. The project is now available for use and contribution, and I welcome any feedback to make &lt;code&gt;tml&lt;/code&gt; even better.&lt;/p&gt;

&lt;p&gt;Thank you for reading!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Tackling the Button Size Issue in an Open-Source Fitness App</title>
      <dc:creator>Maryam</dc:creator>
      <pubDate>Sat, 18 Nov 2023 22:21:46 +0000</pubDate>
      <link>https://dev.to/mnajibi/tackling-the-button-size-issue-in-an-open-source-fitness-app-4opf</link>
      <guid>https://dev.to/mnajibi/tackling-the-button-size-issue-in-an-open-source-fitness-app-4opf</guid>
      <description>&lt;h2&gt;
  
  
  Introduction:
&lt;/h2&gt;

&lt;p&gt;Contributing to open-source projects can be an enlightening experience. Recently, I had the opportunity to work on an open-source fitness app, where I faced a unique challenge: resolving the button size inconsistency on the workout screen. In this blog post, I'll share my journey in addressing this issue and how it helped improve the app's user interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started:
&lt;/h2&gt;

&lt;p&gt;My adventure began when I expressed interest in contributing to the fitness app's development. To my delight, the project maintainer promptly assigned me to a task – fixing the button size issue on the workout screen. This experience provided me with valuable insights into open-source collaboration and problem-solving.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding the Problem:
&lt;/h2&gt;

&lt;p&gt;The button size inconsistency was a pre-existing issue that had been affecting the app's usability. As I dived into the project's codebase, I had to familiarize myself with its structure and coding conventions, ensuring that my contributions aligned with the project's existing standards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identifying the Culprit:
&lt;/h2&gt;

&lt;p&gt;The primary challenge I faced was locating the specific code responsible for controlling button sizes on the workout screen. The app was built using React Native, and styles were defined using a combination of inline styles and external style sheets. Despite my experience with React Native, pinpointing the exact code affecting button sizes proved to be a bit of a puzzle.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution:
&lt;/h2&gt;

&lt;p&gt;After meticulous code exploration, I successfully identified the root cause of the button size inconsistency. It turned out that some button components lacked consistent size attributes. To resolve this, I added width and height properties to the button styles, ensuring uniformity in button sizes throughout the workout screen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Appreciation for Feedback:
&lt;/h2&gt;

&lt;p&gt;I am grateful for the opportunity to work on this open-source fitness app and contribute to its improvement. The button size issue may have been a small hiccup, but it served as a reminder of the power of collective contributions. Open source is a vibrant ecosystem where developers come together to create something greater than the sum of its parts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion:
&lt;/h2&gt;

&lt;p&gt;My journey of addressing the button size issue in this open-source fitness app was both rewarding and educational. It highlighted the importance of collaboration, problem-solving, and maintaining a consistent user interface. As I continue to contribute to open-source projects, I look forward to more opportunities to make a positive impact on the software development community.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My Journey of Improving the MaweJS Editor's Search Feature</title>
      <dc:creator>Maryam</dc:creator>
      <pubDate>Sat, 18 Nov 2023 20:09:37 +0000</pubDate>
      <link>https://dev.to/mnajibi/my-journey-of-improving-the-mawejs-editors-search-feature-1580</link>
      <guid>https://dev.to/mnajibi/my-journey-of-improving-the-mawejs-editors-search-feature-1580</guid>
      <description>&lt;p&gt;Hello, fellow coders and tech enthusiasts! Today, I want to share my recent adventure in contributing to an open-source project, MaweJS. It's a unique story editor tailored for a special kind of writer, blending the spontaneous style of "pantsers" with the methodical approach of "planners." My focus was on a seemingly small but impactful aspect: enhancing the search functionality within its editor.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Challenge: Balancing Keyboard and Mouse Interactions
&lt;/h3&gt;

&lt;p&gt;The challenge was intriguing: how do you make the search feature more user-friendly, especially for those who prefer using a mouse, without disrupting the flow for keyboard shortcut fans? As a developer, I knew this was about striking a delicate balance between accessibility and efficiency.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Approach: Clear and Navigate
&lt;/h3&gt;

&lt;p&gt;The solution boiled down to two key enhancements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clear Search Button&lt;/strong&gt;: A simple addition, but what a difference it makes! This button allows users to quickly erase their search query, making the process smoother and more intuitive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Navigation Buttons&lt;/strong&gt;: I added two buttons for moving to the next and previous search results. This small change significantly enhanced the user experience, particularly for those who rely on mouse navigation.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Keeping the Old School Charm
&lt;/h3&gt;

&lt;p&gt;In the world of programming, respecting legacy functionalities is as important as innovating. That's why I ensured that all the beloved keyboard shortcuts, like Ctrl-F and Ctrl-G, remained intact and functional. After all, why fix something that isn’t broken?&lt;/p&gt;

&lt;h3&gt;
  
  
  The Outcome: A More Inclusive User Experience
&lt;/h3&gt;

&lt;p&gt;After thorough testing and tweaking, the new search functionality was ready. The result? A more inclusive and user-friendly search experience that caters to both mouse users and keyboard shortcut lovers. It’s a testament to how small changes can make a big impact on usability.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Takeaway: It's All About the User
&lt;/h3&gt;

&lt;p&gt;This experience reinforced a vital lesson for me: always keep the user in mind. Whether it's a massive feature overhaul or a minor tweak, the end goal is to enhance the user experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reflections and Looking Forward
&lt;/h3&gt;

&lt;p&gt;As I wrap up this post, I can’t help but feel excited about the future of MaweJS and open-source projects in general. It’s amazing how a community of passionate individuals can come together to create something truly remarkable. And I’m just glad to be a part of this journey.&lt;/p&gt;

&lt;p&gt;If you're curious about MaweJS or want to contribute, check out their &lt;a href="https://github.com/mkoskim/mawejs"&gt;repository&lt;/a&gt;. Let's keep building and improving together!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A Developer's Dive into GitHub Actions CI</title>
      <dc:creator>Maryam</dc:creator>
      <pubDate>Fri, 17 Nov 2023 03:52:53 +0000</pubDate>
      <link>https://dev.to/mnajibi/a-developers-dive-into-github-actions-ci-4d97</link>
      <guid>https://dev.to/mnajibi/a-developers-dive-into-github-actions-ci-4d97</guid>
      <description>&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;In the developer's toolkit, Continuous Integration (CI) is an essential asset, and GitHub Actions represents a modern approach to this practice. My recent exploration into setting up a GitHub Actions CI workflow for my &lt;code&gt;tml&lt;/code&gt; project, and contributing tests to a fellow developer's project, was a journey worth sharing. From YAML configurations to different project structures, here's how it unfolded.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting Up GitHub Actions CI
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Crafting the Workflow
&lt;/h4&gt;

&lt;p&gt;My project, a text-to-HTML converter named &lt;code&gt;tml&lt;/code&gt;, needed a robust way to ensure code quality. Enter GitHub Actions. The setup involved creating a YAML file in the &lt;code&gt;.github/workflows&lt;/code&gt; directory, defining the conditions under which the CI pipeline would trigger.&lt;/p&gt;

&lt;h4&gt;
  
  
  Inside the YAML
&lt;/h4&gt;

&lt;p&gt;The YAML file, named &lt;code&gt;main.yml&lt;/code&gt;, was the blueprint. Here’s a peek at its structure:&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="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Python application test&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;main&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;main&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v2&lt;/span&gt;
    &lt;span class="pi"&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;Set up Python&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-python@v2&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;python-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3.8'&lt;/span&gt;
    &lt;span class="pi"&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;Install dependencies&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
        &lt;span class="s"&gt;python -m pip install --upgrade pip&lt;/span&gt;
        &lt;span class="s"&gt;pip install pytest tomli requests&lt;/span&gt;
    &lt;span class="pi"&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;Run tests&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
        &lt;span class="s"&gt;pytest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This script essentially sets up the environment, installs dependencies, and runs &lt;code&gt;pytest&lt;/code&gt; to check the integrity of the codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  Experience with a Partner’s Repository
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Observing Variations
&lt;/h4&gt;

&lt;p&gt;My partner, also working on a Python project, adopted a different CI strategy. Their setup was tailored to their specific project needs, employing Python's latest versions and its native testing frameworks. This divergence highlighted the flexibility of GitHub Actions, accommodating various workflows and testing strategies.&lt;/p&gt;

&lt;h4&gt;
  
  
  Writing Tests for Different Setups
&lt;/h4&gt;

&lt;p&gt;Contributing tests to a project I didn't initially create was both challenging and rewarding. It demanded a deep dive into understanding another developer's logic and code structure. This process emphasized the importance of writing clear, maintainable code and tests in collaborative environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reflecting on CI in Development
&lt;/h3&gt;

&lt;h4&gt;
  
  
  CI as a Unifying Force
&lt;/h4&gt;

&lt;p&gt;Despite the differences in our CI setups, the essence of CI remained consistent – automating the testing process to maintain high code quality. My experience highlighted CI's role as a unifying force in software development, adaptable to different environments yet consistently ensuring reliability.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Learning Curve and Benefits
&lt;/h4&gt;

&lt;p&gt;The initial setup of CI was a learning curve, involving understanding YAML configurations and troubleshooting workflow issues. However, the benefits became quickly apparent – CI acts as a safeguard, catching issues early and providing peace of mind with each new code integration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Setting up and experiencing GitHub Actions CI in my own project and observing a different approach in my partner's project was an enlightening experience. It underscored the versatility of CI tools and the importance of automated testing in modern software development. As I continue my development journey, the lessons learned from this experience will undoubtedly shape my approach to coding and collaboration.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Easy Testing in Python with pytest</title>
      <dc:creator>Maryam</dc:creator>
      <pubDate>Wed, 08 Nov 2023 19:49:53 +0000</pubDate>
      <link>https://dev.to/mnajibi/easy-testing-in-python-with-pytest-5cji</link>
      <guid>https://dev.to/mnajibi/easy-testing-in-python-with-pytest-5cji</guid>
      <description>&lt;p&gt;Hi friends in code!&lt;/p&gt;

&lt;p&gt;I've been tinkering with testing in Python using a super handy tool called pytest. It’s a straightforward way to check that your code is doing its job correctly. I want to share my journey, and perhaps you'll get the testing bug too (the good kind)!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why pytest?
&lt;/h2&gt;

&lt;p&gt;For my project, pytest turned out to be a no-brainer. It’s user-friendly for both new and seasoned coders and packs a punch in utility. You can learn more about pytest and what it can do for you by visiting &lt;a href="https://docs.pytest.org/en/stable/"&gt;pytest's documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up the Scene
&lt;/h2&gt;

&lt;p&gt;Getting pytest up and running was like prepping a new gadget — do it once, and you reap the benefits every time thereafter. Here's what I did:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;: I added pytest to my virtual environment using &lt;code&gt;pip install pytest&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Organizing Tests&lt;/strong&gt;: All my test files found their home in a &lt;code&gt;tests&lt;/code&gt; directory, neatly packaged and easy for pytest to recognize.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Writing Tests&lt;/strong&gt;: Crafted each test with the attention it deserves, ensuring they interrogate my code in all the cunning ways I could muster.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Running the Show&lt;/strong&gt;: A simple &lt;code&gt;pytest&lt;/code&gt; command in my terminal and voila, it's showtime for testing!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Learnings and Surprises
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Lightbulb Moments
&lt;/h3&gt;

&lt;p&gt;Setting up test "fixtures" felt like unlocking a new level in a game. It prepared my test environment in a snap.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Bug Hunt
&lt;/h3&gt;

&lt;p&gt;Yes, I encountered bugs — sneaky ones that played hide and seek with file names and logic. But catching them was oddly satisfying.&lt;/p&gt;

&lt;h3&gt;
  
  
  The True Value of Testing
&lt;/h3&gt;

&lt;p&gt;I used to push testing aside, but not anymore. It's an investment in the sanity of your future self and the clarity for anyone who picks up your code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributing to the Garden
&lt;/h2&gt;

&lt;p&gt;I also updated the &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; in my project repository with instructions on how to use pytest for any new contributors. It’s a small step towards collective code quality and helps maintainers understand how to run and write tests, ensuring everyone’s on the same page.&lt;/p&gt;

&lt;h2&gt;
  
  
  In Conclusion
&lt;/h2&gt;

&lt;p&gt;Imagine pytest as a compass for your coding journey. It points you in the right direction and ensures you don't lose your way. If you haven't begun testing, now's a great time to start. It's not just about finding bugs; it’s about creating a map for others to follow in your footsteps with confidence. &lt;/p&gt;

&lt;p&gt;Take the plunge, start with pytest, and you might just find it’s a key part of your development toolkit.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Making Coding Easier: My Story with Cool Coding Tools</title>
      <dc:creator>Maryam</dc:creator>
      <pubDate>Sat, 04 Nov 2023 23:16:00 +0000</pubDate>
      <link>https://dev.to/mnajibi/making-coding-easier-my-story-with-cool-coding-tools-4foc</link>
      <guid>https://dev.to/mnajibi/making-coding-easier-my-story-with-cool-coding-tools-4foc</guid>
      <description>&lt;p&gt;Hi everyone! I want to share my story about making coding a lot easier and more fun with some cool tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tools I Used
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prettier
&lt;/h3&gt;

&lt;p&gt;Think of &lt;a href="https://prettier.io/"&gt;Prettier&lt;/a&gt; like a broom that sweeps your code and makes it look neat. It's not usually used for Python, the language I write in, but with a special add-on, it can tidy up Python code too.&lt;/p&gt;

&lt;h3&gt;
  
  
  Flake8
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://flake8.pycqa.org/en/latest/"&gt;Flake8&lt;/a&gt; is like a friendly teacher who points out where you might have slipped up in your Python homework. It tells you about little mistakes and helps you write better code that looks good and follows the rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Visual Studio Code
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://code.visualstudio.com/"&gt;VSCode&lt;/a&gt; is like my digital toolbox. It lets me write and fix code, and I can add all sorts of tools to it, like Prettier and Flake8, to make coding easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Them Up
&lt;/h2&gt;

&lt;p&gt;First, I set up Prettier to make sure my code lines are all nice and even. Then I put Flake8 in place to catch mistakes and keep everything super clean. I even made sure they both work right inside VSCode, so I can see and fix problems on the fly, just like autocorrect when you're typing a message.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fixing Up My Code
&lt;/h2&gt;

&lt;p&gt;When I got these tools working, they showed me a few spots where my code was a bit messy or could be better. I fixed those up, and now the code looks great and is easy to read.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running the Tools Without a Hassle
&lt;/h2&gt;

&lt;p&gt;To check my code, I can type a few words into my computer's command line (like asking it to do a quick check-up) and see if anything needs fixing. It's like having a spellchecker for coding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making Them Work With My Toolbox
&lt;/h2&gt;

&lt;p&gt;I told VSCode to use these tools to tidy up my code every time I save a file, just like how your phone fixes typos automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Having tools to clean up your code is awesome because it saves you time and helps you write better code.&lt;/li&gt;
&lt;li&gt;Putting these tools right into the editor means less jumping around between programs.&lt;/li&gt;
&lt;li&gt;Spending a bit of time to set things up makes everything easier later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it! Using these tools was like getting a helping hand that's always there to make sure I write code that not only works but is also clean and easy for others to understand.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Introducing Link Management Inspired by Docusaurus</title>
      <dc:creator>Maryam</dc:creator>
      <pubDate>Sun, 29 Oct 2023 17:44:46 +0000</pubDate>
      <link>https://dev.to/mnajibi/introducing-link-management-inspired-by-docusaurus-4poa</link>
      <guid>https://dev.to/mnajibi/introducing-link-management-inspired-by-docusaurus-4poa</guid>
      <description>&lt;p&gt;Hello, friends! Today, I'd like to tell you about a new feature I made for my tool. I was really inspired by how Docusaurus, a popular tool, does things. Let's dive in!&lt;/p&gt;

&lt;h2&gt;
  
  
  What's My New Thing?
&lt;/h2&gt;

&lt;p&gt;I made a new part for my tool. It does two main things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Looking at Links&lt;/strong&gt;: It looks at all the links in a piece of writing to see if they work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finding Broken Links&lt;/strong&gt;: If a link doesn't work, my tool will tell you!&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Docusaurus Gave Me an Idea!
&lt;/h2&gt;

&lt;p&gt;Docusaurus is like a big brother tool. It has a smart way to handle links in writings. After seeing how Docusaurus works, I got an idea for my tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Are They Alike?
&lt;/h2&gt;

&lt;p&gt;Remember when we talked about this before? Here's how the two are alike:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Checking Links&lt;/strong&gt;:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Docusaurus&lt;/strong&gt;: Docusaurus checks every link to make sure it works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;My Tool&lt;/strong&gt;: My tool does the same thing. It checks every link to see if it's correct.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Telling You About Bad Links&lt;/strong&gt;:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Docusaurus &amp;amp; Our Chat Before&lt;/strong&gt;: Docusaurus will tell you if a link is broken.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;My Tool&lt;/strong&gt;: My tool does that too! If a link is broken, it will let you know.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's my story of how I made a new part for my tool. It's like giving it a new toy to play with. Thanks, Docusaurus, for the cool idea! And thank you for joining me on this fun journey.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/facebook/docusaurus/blob/main/packages/docusaurus-utils/src/markdownLinks.ts"&gt;you can find the code I got inspired by here&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/mnajibi/tml"&gt;My Tool&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Understanding How Docusaurus Fixes and Checks Your Links: A Simple Explanation</title>
      <dc:creator>Maryam</dc:creator>
      <pubDate>Sat, 28 Oct 2023 18:32:30 +0000</pubDate>
      <link>https://dev.to/mnajibi/understanding-how-docusaurus-fixes-and-checks-your-links-a-simple-explanation-26d9</link>
      <guid>https://dev.to/mnajibi/understanding-how-docusaurus-fixes-and-checks-your-links-a-simple-explanation-26d9</guid>
      <description>&lt;h3&gt;
  
  
  What We’re Talking About Today
&lt;/h3&gt;

&lt;p&gt;When you’re creating a website, especially one that holds a lot of information like a documentation site, it’s really important that all the links (you know, those clickable texts that take you to another page) work well. Today, we’re exploring a part of Docusaurus, a tool that helps people create these websites, which makes sure all your links are in good shape.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Overview: What’s This Feature All About?
&lt;/h3&gt;

&lt;p&gt;Imagine you’re organizing a big book with lots of chapters and pages. Some pages talk about other pages, and you want to make sure that when you say “Hey, look at Page 5 for more info,” Page 5 really has that info. Docusaurus does this for websites. It checks all your "Hey, look over there" directions (or links) to make sure they actually go to the right place.&lt;/p&gt;

&lt;h3&gt;
  
  
  How It’s Done: Looking at the Code
&lt;/h3&gt;

&lt;h4&gt;
  
  
  The Gatekeeper: &lt;code&gt;index.ts&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Think of &lt;code&gt;index.ts&lt;/code&gt; as the front door. Every time you want to add or change something on your website, it needs to go through this door. What it does for links is simple: it takes them, hands them over to a helper (another piece of code) named &lt;code&gt;linkify&lt;/code&gt;, and says, “Make sure these links go to the right place, will you?”&lt;/p&gt;

&lt;h4&gt;
  
  
  The Helper: &lt;code&gt;linkify.ts&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;linkify&lt;/code&gt; is where the real action happens. It’s like having a smart assistant. You give it a bunch of directions (links), and it goes through each one, making sure they go to the right page. If it finds a direction that’s broken or goes nowhere, it takes a note and tells you, “Hey, this one’s not right!”&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned and Found Tricky
&lt;/h3&gt;

&lt;p&gt;Reading through this code felt a bit like solving a puzzle. It’s written in a special computer language that’s very precise, and it’s meant to do its job super efficiently.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Learning to Be Precise&lt;/strong&gt;: I saw how important it is to be super precise and clear when giving instructions to computers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dealing with Mistakes&lt;/strong&gt;: I loved seeing how the code is ready to find and point out mistakes, making sure everything runs smoothly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Understanding the Language&lt;/strong&gt;: Sometimes, the language of the code was a bit like learning a new language. But with some patience, it started making sense!&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How I Figured It Out
&lt;/h3&gt;

&lt;p&gt;Reading code can be like trying to understand a recipe written by a master chef. You might not get everything at first, but with some time and maybe a bit of help from Google or friendly tools like ChatGPT, it starts to make sense.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wrapping It Up
&lt;/h3&gt;

&lt;p&gt;So, that’s my adventure in Docusaurus’s world of fixing and checking links! It’s a bit like having a super-smart librarian in a giant library, making sure every “This book is over there” sign actually points to the right book. And that, my friends, makes finding and using information a whole lot easier and more fun!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My Open Source Adventure: A Friendly Recap</title>
      <dc:creator>Maryam</dc:creator>
      <pubDate>Thu, 26 Oct 2023 15:36:51 +0000</pubDate>
      <link>https://dev.to/mnajibi/my-open-source-adventure-a-friendly-recap-473p</link>
      <guid>https://dev.to/mnajibi/my-open-source-adventure-a-friendly-recap-473p</guid>
      <description>&lt;h1&gt;
  
  
  My Open Source Adventure: A Friendly Recap
&lt;/h1&gt;

&lt;p&gt;Hello, friends! 👋 I've been on some fun coding adventures recently, and I can’t wait to tell you all about them. Grab a cup of coffee, and let’s chat!&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Tidying Up the Uno Platform 🧹
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What I Did&lt;/strong&gt;: Found two methods, &lt;code&gt;RestoreBindings&lt;/code&gt; and &lt;code&gt;ClearBindings&lt;/code&gt;, that weren’t doing anything and removed them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Learning Part&lt;/strong&gt;: Got to know the Uno Platform really well, especially how it connects different parts of programs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Tough Part&lt;/strong&gt;: Making sure that taking away these methods didn’t mess up anything else because the Uno Platform is huge!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Making Podcast Words Better 🎙
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What I Did&lt;/strong&gt;: Fixed up the text version of a podcast to make sure it matched exactly what was said.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Learning Part&lt;/strong&gt;: My grammar skills got a nice workout, and I learned some new techy words.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Tough Part&lt;/strong&gt;: Had to listen super carefully to the podcast, sometimes more than once, to catch every word.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Making the Curio Logo Clickable 🖱
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What I Did&lt;/strong&gt;: Made it so when you click on the Curio logo, it actually takes you back to the home page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Learning Part&lt;/strong&gt;: Felt really part of the coding community and loved making the website nicer for users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Tough Part&lt;/strong&gt;: The challenge was just right, but it was my friend who gave me the nudge to jump in and try.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Helping with the Python Port Scanner 🔍
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What I Did&lt;/strong&gt;: Made error messages clearer and gave better feedback during scans.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Learning Part&lt;/strong&gt;: Got even better at Python and learned heaps about network scanning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Tough Part&lt;/strong&gt;: Focusing on making the tool super user-friendly and helpful.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  To Wrap It Up
&lt;/h2&gt;

&lt;p&gt;And that’s my story! I had heaps of fun, learned a lot, and it felt awesome to help out. Open source is all about everyone chipping in, and I’m stoked to be part of that. Thanks for reading, and happy coding! 🎉&lt;/p&gt;

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