<?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: Dhananjay Thomble</title>
    <description>The latest articles on DEV Community by Dhananjay Thomble (@dhananjaythomble).</description>
    <link>https://dev.to/dhananjaythomble</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%2F1104928%2Fa7301a89-5604-4a78-883a-007d001fb636.jpeg</url>
      <title>DEV Community: Dhananjay Thomble</title>
      <link>https://dev.to/dhananjaythomble</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dhananjaythomble"/>
    <language>en</language>
    <item>
      <title>Hacktoberfest 2023 Journey: Maintaining SnapURL</title>
      <dc:creator>Dhananjay Thomble</dc:creator>
      <pubDate>Wed, 25 Oct 2023 15:01:15 +0000</pubDate>
      <link>https://dev.to/dhananjaythomble/hacktoberfest-2023-journey-maintaining-snapurl-349e</link>
      <guid>https://dev.to/dhananjaythomble/hacktoberfest-2023-journey-maintaining-snapurl-349e</guid>
      <description>&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;

&lt;p&gt;Hacktoberfest is always an exciting time in the world of open source. As a long-time open-source enthusiast, I've been part of several Hacktoberfest events in the past, but Hacktoberfest 2023 brought something special. It marked my first Hacktoberfest as the maintainer of SnapURL, a URL shortening and management project.&lt;/p&gt;

&lt;p&gt;You can check out my GitHub profile to see the project: &lt;a href="https://github.com/DhananjayThomble"&gt;https://github.com/DhananjayThomble&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Project
&lt;/h3&gt;

&lt;p&gt;SnapURL is a project that I have been passionate about for a while. It is an open-source URL shortening tool that enables users to shorten and manage their URLs efficiently. We are using the MERN Stack for this web application, and we also have a Chrome extension to support it. When Hacktoberfest started, I decided to open SnapURL for contributions to welcome developers, beginners, and open-source enthusiasts from around the world.&lt;/p&gt;

&lt;p&gt;I prepared the repository, set up clear contribution guidelines, and introduced tags to categorize issues, making it easier for contributors to pick tasks of their choice. We utilized GitHub's issue tracker, which served as the central hub for contributors to find tasks, communicate, and share their progress.&lt;/p&gt;

&lt;p&gt;In addition, I ensured that every contribution added value to the project. To maintain code quality, we adopted a pull request (PR) review process where PRs were reviewed, and tested before merging. This process helped keep the project organized and efficient.&lt;br&gt;
Furthermore, I leveraged GitHub actions workflows and Netlify for a bit of CI/CD&lt;/p&gt;
&lt;h3&gt;
  
  
  Highs and Lows
&lt;/h3&gt;

&lt;p&gt;Hacktoberfest 2023 was filled with moments of celebration and a few challenges. The biggest accomplishment was witnessing the community's enthusiasm. SnapURL received contributions from talented developers worldwide, and this not only helped us in addressing bugs and adding new features but also brought diverse perspectives to the project.&lt;/p&gt;

&lt;p&gt;Furthermore, some contributors reached out to express how working on this project as a team had significantly enhanced their skills and served as a motivational force for their development journey. This aspect was especially rewarding, highlighting the collaborative and empowering nature of open-source participation.&lt;/p&gt;

&lt;p&gt;In addition, I had the honor of being recognized by the GitHub Education Community Exchange as the "Maintainer of the Week." &lt;iframe class="tweet-embed" id="tweet-1714633733012136203-967" src="https://platform.twitter.com/embed/Tweet.html?id=1714633733012136203"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1714633733012136203-967');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1714633733012136203&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;However, no journey is without its challenges. We faced some complex bugs that initially seemed impossible to fix. But the community came together, shared insights, and collaborated to solve them. This was a testament to the power of open source and the Hacktoberfest spirit. &lt;/p&gt;

&lt;h3&gt;
  
  
  Growth
&lt;/h3&gt;

&lt;p&gt;Before Hacktoberfest 2023, I had been maintaining SnapURL with a very small team. This Hacktoberfest brought growth not just to the project but also to my own skill set. As a maintainer, I had the opportunity to learn from the diverse contributions we received. It improved my code review skills, communication, and collaboration abilities.&lt;/p&gt;

&lt;p&gt;Maintaining an open-source project isn't just about writing code; it's also about cultivating a welcoming and inclusive community. SnapURL's objectives have expanded beyond providing a robust URL management tool to creating an environment where contributors can thrive and grow, regardless of their experience.&lt;/p&gt;

&lt;p&gt;As the project's maintainer, I'm thrilled to continue advancing SnapURL and developing a platform that empowers both users and contributors. Feel free to reach out to me, and don't forget to check out SnapURL on GitHub: &lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/DhananjayThomble"&gt;
        DhananjayThomble
      &lt;/a&gt; / &lt;a href="https://github.com/DhananjayThomble/URL-Shortener-App"&gt;
        URL-Shortener-App
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      URL Shortener WebApp &amp;amp; Chrome-Extension using Javascript, Node.js, React, and MongoDB.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1 id="user-content-snapurl-the-beginner-friendly-url-shortener"&gt;&lt;a class="heading-link" href="https://github.com/DhananjayThomble/URL-Shortener-App#snapurl-the-beginner-friendly-url-shortener"&gt;SnapURL: The Beginner-Friendly URL Shortener&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;SnapURL is an open-source URL shortener web application and chrome-extension. It simplifies the process of converting long URLs into short and shareable links.&lt;/p&gt;
&lt;h2 id="user-content-features"&gt;&lt;a class="heading-link" href="https://github.com/DhananjayThomble/URL-Shortener-App#features"&gt;Features&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;User signup and login.&lt;/li&gt;
&lt;li&gt;Email verification for added security.&lt;/li&gt;
&lt;li&gt;Password reset via email.&lt;/li&gt;
&lt;li&gt;Robust password hashing with Bcrypt.&lt;/li&gt;
&lt;li&gt;Automated email notifications for account creation and password resets.&lt;/li&gt;
&lt;li&gt;URL shortening with randomly generated 10-character strings.&lt;/li&gt;
&lt;li&gt;Visit count tracking for shortened URLs.&lt;/li&gt;
&lt;li&gt;User-specific lists of generated URLs.&lt;/li&gt;
&lt;li&gt;Deletion of shortened URLs.&lt;/li&gt;
&lt;li&gt;Secure API authentication using JSON Web Tokens (JWT).&lt;/li&gt;
&lt;li&gt;Express Rate Limit for API rate limiting.&lt;/li&gt;
&lt;li&gt;Cross-Origin Resource Sharing (CORS) enabled.&lt;/li&gt;
&lt;li&gt;API documentation powered by Swagger.&lt;/li&gt;
&lt;li&gt;Export Generated URLs to Excel file.&lt;/li&gt;
&lt;li&gt;Chrome extension for URL shortening.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="user-content-future-plans"&gt;&lt;a class="heading-link" href="https://github.com/DhananjayThomble/URL-Shortener-App#future-plans"&gt;Future Plans&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We have exciting plans to enhance SnapURL in the future, making it even more robust and user-friendly. Our upcoming features include:&lt;/p&gt;
&lt;h3 id="user-content-user-profile-enhancements"&gt;&lt;a class="heading-link" href="https://github.com/DhananjayThomble/URL-Shortener-App#user-profile-enhancements"&gt;User Profile Enhancements&lt;/a&gt;&lt;/h3&gt;
&lt;ul class="contains-task-list"&gt;
&lt;li class="task-list-item"&gt;
 &lt;strong&gt;User Profile Visibility&lt;/strong&gt;: Choose whether your profile is public…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/DhananjayThomble/URL-Shortener-App"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>hack23maintainer</category>
      <category>beginners</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Analyze Apache Logs with Python: Introducing the Apache Log Analyzer Script</title>
      <dc:creator>Dhananjay Thomble</dc:creator>
      <pubDate>Thu, 10 Aug 2023 04:49:13 +0000</pubDate>
      <link>https://dev.to/dhananjaythomble/analyze-apache-logs-with-python-introducing-the-apache-log-analyzer-script-2dne</link>
      <guid>https://dev.to/dhananjaythomble/analyze-apache-logs-with-python-introducing-the-apache-log-analyzer-script-2dne</guid>
      <description>&lt;p&gt;As developers, understanding how our APIs are performing is crucial. To help with this, I've created the &lt;strong&gt;Apache Log Analyzer Script&lt;/strong&gt;, a Python tool that simplifies the process of analyzing Apache access logs to extract valuable insights about API response times and usage patterns.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the Apache Log Analyzer Script?
&lt;/h3&gt;

&lt;p&gt;The Apache Log Analyzer Script is a command-line tool designed to process Apache access logs and provide meaningful information about API performance. It calculates response times, tracks hit counts for different routes, and allows you to set custom time ranges for analysis.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Response Time Analysis:&lt;/strong&gt; The script calculates and analyzes the response times of various APIs recorded in the access logs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Custom Time Ranges:&lt;/strong&gt; You can choose to analyze logs from specific time ranges, making it easy to identify trends and anomalies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;API Hit Counts:&lt;/strong&gt; The script also tracks the number of hits for each API route, helping you understand which routes are most frequently accessed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to Use the Apache Log Analyzer Script:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Clone the Repository:&lt;/strong&gt;&lt;br&gt;
Start by cloning the &lt;a href="https://github.com/DhananjayThomble/Apache-Log-Analyzer"&gt;Apache-Log-Analyzer&lt;/a&gt; containing the script.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Install Dependencies:&lt;/strong&gt;&lt;br&gt;
Run the following command to install the required dependencies:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run the Script:&lt;/strong&gt;
Execute the script by running the following command:
&lt;/li&gt;
&lt;/ol&gt;

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

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Follow the Prompts:&lt;/strong&gt;&lt;br&gt;
The script will guide you through the process. You can choose between different time ranges or provide a custom time range.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;View the Results:&lt;/strong&gt;&lt;br&gt;
Once the analysis is complete, the script will generate an &lt;code&gt;api_names_with_response_times.txt&lt;/code&gt; file with detailed results.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Code Breakdown:
&lt;/h3&gt;

&lt;p&gt;The script is divided into several parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Log File Selection:&lt;/strong&gt; Choose the Apache access log file to analyze.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Time Range Selection:&lt;/strong&gt; Select the time range for analysis, whether it's custom or predefined.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Log Processing:&lt;/strong&gt; The script reads and processes the log lines, calculating response times and hit counts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Results Generation:&lt;/strong&gt; The results are organized and saved in the &lt;code&gt;api_names_with_response_times.txt&lt;/code&gt; file.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Get Involved!
&lt;/h3&gt;

&lt;p&gt;The Apache Log Analyzer Script is open source, and I invite you to contribute to its development. Feel free to create issues, submit pull requests, or provide feedback through the GitHub repository.&lt;/p&gt;

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

&lt;p&gt;The Apache Log Analyzer Script streamlines the process of analyzing Apache access logs, making it easier for developers to gain insights into their API performance. Try it out, and let me know your thoughts and suggestions! You can find the script and more details here: &lt;a href="https://github.com/DhananjayThomble/Apache-Log-Analyzer"&gt;Apache-Log-Analyzer&lt;/a&gt;.&lt;/p&gt;

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

</description>
    </item>
    <item>
      <title>A Beginner's Guide to Node.js: What It Is, How It Works, and Its History</title>
      <dc:creator>Dhananjay Thomble</dc:creator>
      <pubDate>Tue, 20 Jun 2023 10:14:03 +0000</pubDate>
      <link>https://dev.to/dhananjaythomble/a-beginners-guide-to-nodejs-what-it-is-how-it-works-and-its-history-9hh</link>
      <guid>https://dev.to/dhananjaythomble/a-beginners-guide-to-nodejs-what-it-is-how-it-works-and-its-history-9hh</guid>
      <description>&lt;p&gt;Node.js is not a framework or a library, but rather a runtime environment that allows you to run JavaScript code on the server side. This means that you can use JavaScript not only for creating dynamic web pages in the browser, but also for writing backend logic, accessing databases, handling HTTP requests and responses, and much more.&lt;/p&gt;

&lt;p&gt;But why would you want to use JavaScript on the server side? Well, there are several advantages of using Node.js:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can use the same language for both frontend and backend development, which simplifies your workflow and reduces the learning curve.&lt;/li&gt;
&lt;li&gt;You can leverage the huge ecosystem of npm packages (over 2.3 million) that provide ready-made solutions for various tasks and challenges.&lt;/li&gt;
&lt;li&gt;You can benefit from the high performance and efficiency of Node.js, which is based on Google's V8 engine that compiles JavaScript into native machine code.&lt;/li&gt;
&lt;li&gt;You can easily create real-time applications that support bidirectional communication between clients and servers using WebSockets or Socket.io.&lt;/li&gt;
&lt;li&gt;You can take advantage of the asynchronous and event-driven nature of Node.js, which enables you to handle multiple concurrent requests without blocking the main thread or creating multiple threads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How does Node.js achieve this?&lt;/strong&gt;&lt;br&gt;
its history and more: &lt;a href="https://blog.dhananjaythomble.me/beginners-guide-to-nodejs-how-it-works"&gt;https://blog.dhananjaythomble.me/beginners-guide-to-nodejs-how-it-works&lt;/a&gt;&lt;/p&gt;

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