<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ThePatik]]></title><description><![CDATA[Join me on my blog as I share my passion for web development and my journey in learning computer science 🚀]]></description><link>https://blog.thepatik.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1645351434192/aueYBLeGT.png</url><title>ThePatik</title><link>https://blog.thepatik.com</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 23:45:48 GMT</lastBuildDate><atom:link href="https://blog.thepatik.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Push Notifications: How They Work & Why They Matter]]></title><description><![CDATA[Hey 👋, I'm back with a new blog post after a long break!
This past week, I’ve been diving deep into integrating push notifications into a mobile app. If you've ever wondered how they work and why they’re so effective, this post is for you!
What Are ...]]></description><link>https://blog.thepatik.com/push-notifications-how-they-work-why-they-matter</link><guid isPermaLink="true">https://blog.thepatik.com/push-notifications-how-they-work-why-they-matter</guid><category><![CDATA[Developer]]></category><category><![CDATA[push notifications]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[software development]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Sun, 09 Feb 2025 19:44:30 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1739130196818/676cef10-8f01-44d5-bf2a-70b1769cb9aa.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Hey 👋, I'm back with a new blog post after a long break!</strong></p>
<p>This past week, I’ve been diving deep into integrating push notifications into a mobile app. If you've ever wondered how they work and why they’re so effective, this post is for you!</p>
<h3 id="heading-what-are-push-notifications">What Are Push Notifications?</h3>
<p>Push notifications are short, clickable messages that appear on a user’s device—whether it’s a smartphone, tablet, or desktop. They can be triggered by various events, such as app updates, reminders, personalized offers, or breaking news.</p>
<p>Unlike emails or SMS, push notifications don’t require users to open an app or website to receive updates, making them a powerful tool for real-time engagement.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1739128682130/6f189576-c25f-44f6-8b96-361f04affeb2.jpeg" alt class="image--center mx-auto" /></p>
<h3 id="heading-how-do-push-notifications-work">How Do Push Notifications Work?</h3>
<p>Push notifications rely on both client-side and server-side technologies. Here’s a quick breakdown of the process:</p>
<ol>
<li><p><strong>User Subscription</strong> – When a user installs an app or visits a website, they are prompted to allow push notifications. Their consent is required to receive notifications.</p>
</li>
<li><p><strong>Push Service Registration</strong> – Once the user opts in, the app or website registers the device with a push notification service, such as:</p>
<ul>
<li><p>Firebase Cloud Messaging (FCM) for Android</p>
</li>
<li><p>Apple Push Notification Service (APNs) for iOS</p>
</li>
<li><p>Web Push Protocol for web browsers</p>
</li>
</ul>
</li>
</ol>
<p>    The service then returns a unique device token, which acts as an identifier for sending notifications.</p>
<ol start="3">
<li><p><strong>Sending Notifications</strong> – When the backend system wants to send a notification, it makes a request to the push notification service, including the device token, message content, and optional metadata (such as priority or expiration time).</p>
<p> Here’s an example of sending a push notification via Firebase Cloud Messaging (FCM):</p>
</li>
</ol>
<pre><code class="lang-bash">POST  https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send
Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

{
   <span class="hljs-string">"message"</span>:{
      <span class="hljs-string">"token"</span>:<span class="hljs-string">"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."</span>,
      <span class="hljs-string">"notification"</span>:{
         <span class="hljs-string">"body"</span>:<span class="hljs-string">"This is an FCM notification message!"</span>,
         <span class="hljs-string">"title"</span>:<span class="hljs-string">"FCM Message"</span>
      },
      <span class="hljs-string">"android"</span>:{
         <span class="hljs-string">"notification"</span>:{
            <span class="hljs-string">"icon"</span>:<span class="hljs-string">"stock_ticker_update"</span>,
            <span class="hljs-string">"color"</span>:<span class="hljs-string">"#7e55c3"</span>
         }
      }
   }
}
</code></pre>
<ol start="4">
<li><p><strong>Delivery &amp; Display</strong> – The push notification service delivers the message to the user’s device. The client-side app or browser processes the message and displays it in the notification center.</p>
</li>
<li><p><strong>User Interaction &amp; Analytics</strong> – When a user interacts with a notification, apps can track engagement metrics such as click-through rates, conversion rates, and user behavior.</p>
</li>
</ol>
<h3 id="heading-popular-use-cases-for-push-notifications">Popular Use Cases for Push Notifications</h3>
<p>Push notifications are versatile and can be used in various industries, including:</p>
<ul>
<li><p><strong>E-Commerce</strong>: Alert users about sales, discounts, or abandoned cart reminders.</p>
</li>
<li><p><strong>News &amp; Media</strong>: Deliver breaking news updates or trending articles.</p>
</li>
<li><p><strong>Healthcare &amp; Fitness</strong>: Send reminders for medication, workout schedules, or health tips.</p>
</li>
<li><p><strong>Finance &amp; Banking</strong>: Notify users of account updates, transactions, or fraud alerts.</p>
</li>
<li><p><strong>Social Media</strong>: Inform users about messages, mentions, or friend requests.</p>
</li>
</ul>
<p>Push notifications, when used strategically, can enhance user engagement, boost retention, and drive conversions.</p>
<p>Have you implemented push notifications in your app? What challenges did you face? Let’s discuss this in the comments!</p>
]]></content:encoded></item><item><title><![CDATA[🔐Exploring Ways to Secure Your App: From Cookies to Two-Step Verification]]></title><description><![CDATA[I'm back again with a new blog post. The idea for this post came very spontaneously. I'm currently investing a lot of time in my new development project, and I came up with how to further secure the application.
As a solution to this issue, quite a f...]]></description><link>https://blog.thepatik.com/exploring-ways-to-secure-your-app-from-cookies-to-two-step-verification</link><guid isPermaLink="true">https://blog.thepatik.com/exploring-ways-to-secure-your-app-from-cookies-to-two-step-verification</guid><category><![CDATA[Web Development]]></category><category><![CDATA[Security]]></category><category><![CDATA[Beginner Developers]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Thu, 18 Apr 2024 16:31:48 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1713457837743/c6ab3d97-4c81-4dca-9bb4-ac8cf69bc993.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I'm back again with a new blog post. The idea for this post came very spontaneously. I'm currently investing a lot of time in my new development project, and I came up with how to further secure the application.</p>
<p>As a solution to this issue, quite a few options were available. About each option, I will present what disadvantages it brings and what advantages it brings.</p>
<h2 id="heading-cookies">Cookies</h2>
<p>Cookies are a straightforward and common option for detecting whether a specific user has already logged in to a specific browser on a specific device.</p>
<p>However, cookies expire or are deleted by the user, based on which we cannot know without a doubt whether the user's identification information is still valid. In addition, cookies may also be subject to attacks such as identity theft or cookie spoofing.</p>
<h2 id="heading-ip-addresses"><strong>IP addresses</strong></h2>
<p>Another way to detect devices is through IP addresses. Each device has its unique IP address that can be used for identification, but this only applies to private IP addresses.</p>
<p>However, the use of IP addresses may be restricted due to the use of VPN servers or proxy servers, which may hide the user's real IP address. In addition, multiple users can access the Internet through the same IP address, which can cause identity confusion.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1712828149350/00c6d920-9bd3-4667-8a3b-4f4c3f50376c.jpeg" alt class="image--center mx-auto" /></p>
<h2 id="heading-use-of-browser-fingerprints"><strong>Use of browser fingerprints</strong></h2>
<p>Browser fingerprints are based on collecting information about browser configuration and user behaviour, such as browser versions, operating systems, installed plugins, etc.</p>
<p>This method can be very accurate in identifying a device, but users may be aware of their fingerprints and consciously alter or hide them, reducing the effectiveness of this method. However, in my opinion, one of the better ways of detection.</p>
<h2 id="heading-two-step-or-multistep-authentication"><strong>Two-step or multistep authentication</strong></h2>
<p>Two-step or multistep authentication (2FA or MFA) is a process that requires the user to provide an additional form of verification in addition to the normal password, for example via an SMS message, an authentication application or a physical security key.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1712828122146/8700a15d-c838-4248-8642-b7e98fa0bc0b.jpeg" alt class="image--center mx-auto" /></p>
<p>This method provides an additional layer of security. It can prevent unauthorized access to the account but can also cause a bit more complexity for users and hinder them from accessing the application quickly.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Which method is most appropriate depends on the specific needs and requirements of the application and the compromise between security and user experience. It is also important to take into account any legal requirements or regulations that determine methods of protecting user data.</p>
]]></content:encoded></item><item><title><![CDATA[📂File Management with JavaScript in Node.js]]></title><description><![CDATA[Node.js is an engine that allows us to run JavaScript outside the browser. Many applications today are powered by Node.js, offering numerous advantages and a few drawbacks. However, my intention today is not to introduce Node.js or JavaScript. Today,...]]></description><link>https://blog.thepatik.com/file-management-with-javascript-in-nodejs</link><guid isPermaLink="true">https://blog.thepatik.com/file-management-with-javascript-in-nodejs</guid><category><![CDATA[Node.js]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Open Source]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Sun, 21 Jan 2024 10:21:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1705832439650/aa4e7a7a-952d-4157-bf99-2d91fe70acc6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Node.js is an engine that allows us to run JavaScript outside the browser. Many applications today are powered by Node.js, offering numerous advantages and a few drawbacks. However, my intention today is not to introduce Node.js or JavaScript. Today, I want to showcase how we can manage files on our computer using JavaScript.</p>
<p>One of the built-in modules in Node.js is the file system module.</p>
<p>This module provides us with all CRUD functions (Create, Read, Update, and Delete):</p>
<ul>
<li><p>Creating files</p>
</li>
<li><p>Reading files</p>
</li>
<li><p>Renaming files</p>
</li>
<li><p>Updating files</p>
</li>
<li><p>Deleting files</p>
</li>
</ul>
<p>File management like this is useful when we want to write something to a file, such as logging. Additionally, we'll likely use this module when our application users are changing their profile pictures.</p>
<p>This module allows us to manage files both asynchronously and synchronously.</p>
<h2 id="heading-file-system-module"><strong>File System Module</strong></h2>
<p>Before using the library, we need to import it, just like importing any other libraries in JavaScript. Importing is done using the <code>require</code> function.</p>
<pre><code class="lang-jsx"><span class="hljs-keyword">let</span> fileSystem = <span class="hljs-built_in">require</span>(<span class="hljs-string">'fs'</span>);
</code></pre>
<h2 id="heading-deleting-files"><strong>Deleting Files</strong></h2>
<p>To delete files, we use the <code>unlink</code> or <code>unlinkSync</code> function.</p>
<h3 id="heading-unlink"><strong>unlink</strong></h3>
<p><code>unlink</code> is used for asynchronous file deletion, allowing us to use callbacks, which <code>unlinkSync</code> does not.</p>
<pre><code class="lang-jsx"><span class="hljs-keyword">const</span> fs = <span class="hljs-built_in">require</span>(<span class="hljs-string">'fs'</span>);

fs.unlink(<span class="hljs-string">'./fileForDelete.txt'</span>, <span class="hljs-function">(<span class="hljs-params">error</span>) =&gt;</span> {
     <span class="hljs-keyword">if</span> (error) <span class="hljs-keyword">throw</span> error;
     <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Successfully deleted the file.'</span>);
});
</code></pre>
<p>The function takes the path to the file to be deleted as the first parameter and a function as the second parameter, which notifies of any errors or provides a success message.</p>
<h2 id="heading-creating-files"><strong>Creating Files</strong></h2>
<p>For creating files, we use the <code>writeFile</code> or <code>writeFileSync</code> function.</p>
<h3 id="heading-writefile"><strong>writeFile</strong></h3>
<p>The <code>writeFile</code> function allows asynchronous file creation.</p>
<pre><code class="lang-jsx"><span class="hljs-keyword">const</span> fs = <span class="hljs-built_in">require</span>(<span class="hljs-string">'fs'</span>);

<span class="hljs-keyword">const</span> content = <span class="hljs-string">'Content of the file to be created.'</span>;

fs.writeFile(<span class="hljs-string">'./newFile.txt'</span>, content, <span class="hljs-function">(<span class="hljs-params">error</span>) =&gt;</span> {
     <span class="hljs-keyword">if</span> (error) <span class="hljs-keyword">throw</span> error;
     <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'File successfully created.'</span>);
});
</code></pre>
<p>The <code>writeFile</code> function takes the path to the file (first parameter), the content of the file (second parameter), and a function that handles any errors or reports success (third parameter).</p>
<h3 id="heading-writefilesync"><strong>writeFileSync</strong></h3>
<p>The <code>writeFileSync</code> function allows synchronous file creation.</p>
<pre><code class="lang-jsx"><span class="hljs-keyword">const</span> fs = <span class="hljs-built_in">require</span>(<span class="hljs-string">'fs'</span>);

<span class="hljs-keyword">const</span> content = <span class="hljs-string">'Content of synchronously created file.'</span>;

fs.writeFileSync(<span class="hljs-string">'./newSyncFile.txt'</span>, content);

<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Synchronous file successfully created.'</span>);
</code></pre>
<p>The <code>writeFileSync</code> function takes the path to the file (first parameter) and the file's content (second parameter).</p>
<h2 id="heading-reading-files"><strong>Reading Files</strong></h2>
<p>For reading files, we use the <code>readFile</code> or <code>readFileSync</code> function.</p>
<h3 id="heading-readfile"><strong>readFile</strong></h3>
<p>The <code>readFile</code> function allows asynchronous file reading.</p>
<pre><code class="lang-jsx"><span class="hljs-keyword">const</span> fs = <span class="hljs-built_in">require</span>(<span class="hljs-string">'fs'</span>);

fs.readFile(<span class="hljs-string">'./existingFile.txt'</span>, <span class="hljs-string">'utf8'</span>, <span class="hljs-function">(<span class="hljs-params">error, data</span>) =&gt;</span> {
     <span class="hljs-keyword">if</span> (error) <span class="hljs-keyword">throw</span> error;
     <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'File content:'</span>, data);
});
</code></pre>
<p>The <code>readFile</code> the function takes the path to the file (first parameter), an option for decoding the file content (in this case, 'utf8'), and a function that handles any errors or returns the read content (third parameter).</p>
<h3 id="heading-readfilesync"><strong>readFileSync</strong></h3>
<p>The <code>readFileSync</code> function allows synchronous file reading.</p>
<pre><code class="lang-jsx"><span class="hljs-keyword">const</span> fs = <span class="hljs-built_in">require</span>(<span class="hljs-string">'fs'</span>);

<span class="hljs-keyword">const</span> data = fs.readFileSync(<span class="hljs-string">'./existingSyncFile.txt'</span>, <span class="hljs-string">'utf8'</span>);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Synchronous file content:'</span>, data);
</code></pre>
<p>The <code>readFileSync</code> function takes the path to the file (first parameter) and an option for decoding the file content (in this case, 'utf8').</p>
<h2 id="heading-renaming-files"><strong>Renaming Files</strong></h2>
<p>For renaming files, we use the <code>rename</code> or <code>renameSync</code> function.</p>
<h3 id="heading-rename"><strong>rename</strong></h3>
<p>The <code>rename</code> function allows asynchronous file renaming.</p>
<pre><code class="lang-jsx"><span class="hljs-keyword">const</span> fs = <span class="hljs-built_in">require</span>(<span class="hljs-string">'fs'</span>);

fs.rename(<span class="hljs-string">'./oldName.txt'</span>, <span class="hljs-string">'./newName.txt'</span>, <span class="hljs-function">(<span class="hljs-params">error</span>) =&gt;</span> {
     <span class="hljs-keyword">if</span> (error) <span class="hljs-keyword">throw</span> error;
     <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'File successfully renamed.'</span>);
});
</code></pre>
<p>The <code>rename</code> function takes the current name of the file (first parameter), the new name of the file (second parameter), and a function that handles any errors or reports success (third parameter).</p>
<h3 id="heading-renamesync"><strong>renameSync</strong></h3>
<p>The <code>renameSync</code> function allows synchronous file renaming.</p>
<pre><code class="lang-jsx"><span class="hljs-keyword">const</span> fs = <span class="hljs-built_in">require</span>(<span class="hljs-string">'fs'</span>);

fs.renameSync(<span class="hljs-string">'./oldSyncName.txt'</span>, <span class="hljs-string">'./newSyncName.txt'</span>);

<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Synchronous file successfully renamed.'</span>);
</code></pre>
<p>The <code>renameSync</code> function takes the current name of the file (first parameter) and the file's new name (second parameter).</p>
<h2 id="heading-updating-files"><strong>Updating Files</strong></h2>
<p>For updating files, we can use the <code>appendFile</code> or <code>appendFileSync</code> function.</p>
<h3 id="heading-appendfile"><strong>appendFile</strong></h3>
<p>The <code>appendFile</code> function allows asynchronous appending to an existing file.</p>
<pre><code class="lang-jsx"><span class="hljs-keyword">const</span> fs = <span class="hljs-built_in">require</span>(<span class="hljs-string">'fs'</span>);

<span class="hljs-keyword">const</span> additionalContent = <span class="hljs-string">'\\nAdditional content for updating the file.'</span>;

fs.appendFile(<span class="hljs-string">'./existingFile.txt'</span>, additionalContent, <span class="hljs-function">(<span class="hljs-params">error</span>) =&gt;</span> {
     <span class="hljs-keyword">if</span> (error) <span class="hljs-keyword">throw</span> error;
     <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'File successfully updated.'</span>);
});
</code></pre>
<p>The <code>appendFile</code> function takes the path to the file (first parameter), additional content (second parameter), and a function that handles any errors or reports success (third parameter).</p>
<h3 id="heading-appendfilesync"><strong>appendFileSync</strong></h3>
<p>The <code>appendFileSync</code> function allows synchronous appending to an existing file.</p>
<pre><code class="lang-jsx"><span class="hljs-keyword">const</span> fs = <span class="hljs-built_in">require</span>(<span class="hljs-string">'fs'</span>);

<span class="hljs-keyword">const</span> additionalSyncContent = <span class="hljs-string">'\\nSynchronous additional content for updating the file.'</span>;

fs.appendFileSync(<span class="hljs-string">'./existingSyncFile.txt'</span>, additionalSyncContent);

<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Synchronous file successfully updated.'</span>);
</code></pre>
<p>The <code>appendFileSync</code> function takes the path to the file (first parameter) and additional content (second parameter).</p>
<p>These are the basic operations provided by the file system module in Node.js, and they are crucial for managing files using JavaScript. With these functions, we can efficiently create, read, update, and delete files on our computer.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In summary, Node.js's file system module empowers developers to efficiently manage files using JavaScript. The module offers CRUD functions, allowing for flexible file operations in both asynchronous and synchronous modes.</p>
<p>Whether handling logs, user-uploaded files, or routine file management, Node.js provides a robust solution. Key functions like <code>writeFile</code>, <code>readFile</code>, <code>rename</code>, <code>unlink</code>, and <code>appendFile</code>, along with their synchronous counterparts, enable developers to tailor file operations to their application's requirements.</p>
]]></content:encoded></item><item><title><![CDATA[🎓 GitHub for students benefits (must know if you are a student)]]></title><description><![CDATA[I have said many times that computer science is a huge field in which everyone can find themselves. Being a computer science student has its advantages and benefits, and one such advantage is what GitHub offers with its GitHub for Education program a...]]></description><link>https://blog.thepatik.com/github-for-students-benefits-must-know-if-you-are-a-student</link><guid isPermaLink="true">https://blog.thepatik.com/github-for-students-benefits-must-know-if-you-are-a-student</guid><category><![CDATA[GitHub]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Benefits]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Thu, 02 Nov 2023 19:33:03 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1698953532228/8fffa008-aaba-4199-b116-3c47f6d15747.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I have said many times that computer science is a huge field in which everyone can find themselves. Being a computer science student has its advantages and benefits, and one such advantage is what GitHub offers with its GitHub for Education program and the GitHub Student Developer Pack.</p>
<p>The GitHub Student Developer Pack gives students access to the tools companies use in their development. GitHub and its partners are aware of this and make it possible for students to get these tools.</p>
<h2 id="heading-how-do-i-get-access-to-the-github-student-developer-pack">How do I get access to the GitHub Student Developer Pack?</h2>
<p>If you don't have a GitHub profile yet, just create one on the GitHub website. I recommend that you create a GitHub account with your personal email address and add your school email address to the account.</p>
<p>If you have a GitHub user account, visit the GitHub Education website and click the "Sign up for Student Developer Pack" button</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1698951861045/04b024d2-06ec-40bb-97c6-724ba97a12c6.png" alt class="image--center mx-auto" /></p>
<p>In the next step, a new page will open, on which you can click "Get student benefits".</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1698951896695/4eda0d97-a60a-4e4a-bcb1-6d7924d38196.png" alt class="image--center mx-auto" /></p>
<p>A form with three questions will open. In the first question, you select the appropriate school email address. The next question can be filled in automatically, or you will need to enter the school's name manually. The last question is what is your purpose for using GitHub?</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1698952029079/e7c7986d-7ba2-448b-922c-0e2f22687e60.png" alt class="image--center mx-auto" /></p>
<p>GitHub can now ask you to upload a certificate or proof that you are indeed a student.</p>
<p>Your request will be processed within one week. As soon as your application is approved, you will be able to start using GitHub for students benefits.</p>
<h2 id="heading-what-benefits-does-the-package-bring-me">What benefits does the package bring me?</h2>
<p>The package brings a lot of benefits that can make it easier to enter the world of computing. Some of them are:</p>
<ul>
<li><p>Subscription to GitHub Pro for the duration of the course</p>
</li>
<li><p>JetBrains IDE subscription</p>
</li>
<li><p>Subscription to Azure for Students with annual credit of 100 EUR and some license programs.</p>
</li>
<li><p>Free .me domain for a year</p>
</li>
<li><p>6-month subscription to the Educative portal</p>
</li>
</ul>
<p>You can view all benefits on the GitHub Education website</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>I hope this post has convinced you to try out tools from GitHub and partners. Just bravely try the benefits of the package.</p>
]]></content:encoded></item><item><title><![CDATA[What is an open graph? You must know this feature in web development.]]></title><description><![CDATA[Open Graph is an Internet protocol created by Facebook to standardize the display of metadata on social networks.
What advantages does it bring?
Open Graph brings advantages when displaying a website on social networks. Open Graph makes our posts mor...]]></description><link>https://blog.thepatik.com/what-is-an-open-graph-you-must-know-this-feature-in-web-development</link><guid isPermaLink="true">https://blog.thepatik.com/what-is-an-open-graph-you-must-know-this-feature-in-web-development</guid><category><![CDATA[Web Development]]></category><category><![CDATA[SEO]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Open Source]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Mon, 23 Oct 2023 17:30:52 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1698082061421/59f08748-7e3d-4f9b-b836-b523402a961f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Open Graph is an Internet protocol created by Facebook to standardize the display of metadata on social networks.</p>
<h3 id="heading-what-advantages-does-it-bring">What advantages does it bring?</h3>
<p>Open Graph brings advantages when displaying a website on social networks. Open Graph makes our posts more visible on social networks and shows them better in searches.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1698080910614/c0623cbc-ca9c-477e-943b-f8b59ea75c15.png" alt class="image--center mx-auto" /></p>
<p>Above we can see a website without Open Graph tags and how the link will be displayed on the Facebook social network.</p>
<p>Now I will show how my blog post would look if I share or post a link on Facebook or another social network using the Open Graph protocol.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1698080948759/cfd3917c-6838-420a-ba37-32f2a860a156.png" alt class="image--center mx-auto" /></p>
<p>Even if you don't have any Open Graph tags on your page, nothing serious will happen, but they improve your presentation on social networks.</p>
<h3 id="heading-basics-of-open-graph">Basics of Open Graph?</h3>
<p>We know the four basic tags used in the Open Graph protocol, which are considered mandatory. These tags are <code>og:title</code>, <code>og:type</code>, <code>og:image</code>, and <code>og:url</code>.</p>
<p>What represents which element is shown in the image below?</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1687196513137/c6e65320-0558-4a5c-8fac-87a4f882b7e3.png" alt class="image--center mx-auto" /></p>
<p>Purpose of individual labels:</p>
<ul>
<li><p><code>og:image</code> - displays an image (contains the URL to the image)</p>
</li>
<li><p><code>og:title</code> - usually the same as in &lt;title&gt; and displays the page title</p>
</li>
<li><p><code>og:description</code> - used to describe the page</p>
</li>
<li><p><code>og:url</code> -represents the URL of the page</p>
</li>
<li><p><code>og:locale</code> - intended to indicate the language of the publication</p>
</li>
</ul>
<p>There are officially 17 different tags that you can use on your website. You can read more about the possible tags in the <a target="_blank" href="https://ogp.me/">official documentation</a>.</p>
<h3 id="heading-how-to-add-an-open-graph-to-a-website">How to add an Open Graph to a website?</h3>
<p>Adding Open Graph tags is easy. We add them to the header in the meta tag with the desired content. Below is a simple Open Graph example for the above example post at the following <a target="_blank" href="https://blog.thepatik.com/open-source-software-what-makes-it-so-attractive">link</a>.</p>
<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">property</span>=<span class="hljs-string">"og:title"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"Open-source software: what makes it so attractive?"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">property</span>=<span class="hljs-string">"og:description"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"You may already be familiar with the term <span class="hljs-symbol">&amp;quot;</span>open source<span class="hljs-symbol">&amp;quot;</span> if you have been involved in programming for some time. Open-source software has gained popularity for many reasons, some of which I will attempt to explain below."</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">property</span>=<span class="hljs-string">"og:type"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"article"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">property</span>=<span class="hljs-string">"og:url"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"https://blog.thepatik.com/open-source-software-what-makes-it-so-attractive"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"image"</span> <span class="hljs-attr">property</span>=<span class="hljs-string">"og:image"</span> <span class="hljs-attr">content</span>=<span class="hljs-string">"https://hashnode.com/utility/r?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1682593145782%2F3f7705ec-2679-4c1c-a52d-b8d3fdeaa78d.png%3Fw%3D1200%26h%3D630%26fit%3Dcrop%26crop%3Dentropy%26auto%3Dcompress%2Cformat%26format%3Dwebp%26fm%3Dpng"</span>&gt;</span>
</code></pre>
<h3 id="heading-conclusion">Conclusion</h3>
<p>As we have seen, the Open Graph protocol is a simple addition to websites that improve presentation on social networks.</p>
]]></content:encoded></item><item><title><![CDATA[What is Web OTP, and which benefits do it provide to users?]]></title><description><![CDATA[More and more online services are introducing new ways to confirm login to their services. Logging in with an OTP confirmation token is becoming a very common practice. But such authorization methods have their disadvantages such as bad UX and what i...]]></description><link>https://blog.thepatik.com/what-is-web-otp-and-which-benefits-do-it-provide-to-users</link><guid isPermaLink="true">https://blog.thepatik.com/what-is-web-otp-and-which-benefits-do-it-provide-to-users</guid><category><![CDATA[Web Development]]></category><category><![CDATA[authentication]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Open Source]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Sun, 01 Oct 2023 16:17:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1696176624405/02187641-7a4f-4153-a2c7-69ea6880f433.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>More and more online services are introducing new ways to confirm login to their services. Logging in with an OTP confirmation token is becoming a very common practice. But such authorization methods have their disadvantages such as bad UX and what if the user does not have a phone with him, what is the other authentication confirmation method?</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1696175934996/b59bb8a2-aefe-4908-acba-c72e7463c897.jpeg" alt class="image--center mx-auto" /></p>
<p>WebOTP is a Web API browser function integrated into Chrome, Samsung Internet and Opera Mobile (Apple devices have their version), browsers on mobile devices, intended for obtaining an OTP (One-Time-Password) in the process of two-factor or multi-factor with the help of an SMS message.</p>
<h3 id="heading-how-webotp-works">How WebOTP works</h3>
<p>An example of using WebOTP in practice.</p>
<p>The user logs in to the website with his user data (email and password), and then the server sends him an SMS message in the prescribed format and an OTP token.</p>
<p>If the browser detects the message, it prompts the user to allow access to read the SMS message.</p>
<p>If the user gives permission, the OTP is automatically entered in the OTP input field and the form is sent to the server, which confirms the validity of the entered OTP token.</p>
<p>If the OTP token is valid, the user is logged in, it is not.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1694776253521/55e66e46-a705-4fd8-9699-e089cca27291.webp" alt class="image--center mx-auto" /></p>
<p>A page must use the WebOTP API to have a valid SSL certificate and a secure HTTPS connection established, otherwise, this WebAPI will not work.</p>
<h3 id="heading-sms-message-format"><strong>SMS message format</strong></h3>
<p>A standardized message format is provided for using the WebOTP API so that the browser can successfully read the data from the message.</p>
<p>Message content:</p>
<ul>
<li><p>Message to the user (optional) -&gt; message to the user;</p>
</li>
<li><p>Website domain (mandatory) -&gt; must be written in its line and start with <code>@</code> and continue with the domain name without path and protocol;</p>
</li>
<li><p>OTP (mandatory) -&gt; written in the same line as the domain, the OTP value can be from four to six digits. The OTP must start in the message with <code>#</code>.</p>
</li>
</ul>
<p>Example of SMS with OTP</p>
<table><tbody><tr><td><p>@www.example.com #123456</p></td></tr></tbody></table>

<p>The most common mistakes in OTP messages:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Incorrect message format</td><td>Error description</td></tr>
</thead>
<tbody>
<tr>
<td>Your PIN: #123456</td><td>The code must be on its line with the specified domain.</td></tr>
<tr>
<td>Your registration code: @www.example.com #123456</td><td>Domain and OTP must be on their line.</td></tr>
<tr>
<td>@https://example.com #123456</td><td>The URL scheme must not be included.</td></tr>
<tr>
<td>@example.com/otp.html #123456</td><td>The URL must not include a path</td></tr>
<tr>
<td>@example.com #123456 Your code for login: 123456.</td><td>The domain and OTP must be the last line of the message.</td></tr>
<tr>
<td>Your login code is 123456. @www.example.com#123456</td><td>There must be one space between the domain and the OTP.</td></tr>
<tr>
<td>Hi, I'll be home by lunch today 😊</td><td>Missing @ and #.</td></tr>
<tr>
<td>Your login code is 123456. www.example.com #123456</td><td>@ is missing before the domain.</td></tr>
</tbody>
</table>
</div><h3 id="heading-user-side-code-example-javascript">User-Side Code Example (JavaScript)</h3>
<pre><code class="lang-javascript">&lt;!DOCTYPE html&gt;
<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">html</span>&gt;</span>
   <span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>Test WebOTP API<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
   <span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
   <span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">form</span>&gt;</span>
         <span class="hljs-comment">&lt;!-- Form is a GET method to see the sent request --&gt;</span>
         <span class="hljs-tag">&lt;<span class="hljs-name">label</span> <span class="hljs-attr">for</span>=<span class="hljs-string">"otp_input"</span>&gt;</span>OTP<span class="hljs-tag">&lt;/<span class="hljs-name">label</span>&gt;</span>
         <span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">autocomplete</span>=<span class="hljs-string">"one-time-code"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"otp_input"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"otp_input"</span> <span class="hljs-attr">required</span>/&gt;</span>
         <span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"submit"</span>&gt;</span>
      <span class="hljs-tag">&lt;/<span class="hljs-name">form</span>&gt;</span>
   <span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
   <span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
      <span class="hljs-keyword">if</span> (<span class="hljs-string">'OTPCredential'</span> <span class="hljs-keyword">in</span> <span class="hljs-built_in">window</span>) { <span class="hljs-comment">// Checking if OTP is even available in the browser</span>
      <span class="hljs-built_in">console</span>.log(<span class="hljs-literal">true</span>)
      <span class="hljs-built_in">window</span>.addEventListener(<span class="hljs-string">'DOMContentLoaded'</span>, <span class="hljs-function"><span class="hljs-params">e</span> =&gt;</span> {
      <span class="hljs-keyword">const</span> input = <span class="hljs-built_in">document</span>.querySelector(<span class="hljs-string">'input[autocomplete="one-time-code"]'</span>);
      <span class="hljs-keyword">if</span> (!input) <span class="hljs-keyword">return</span>;
          <span class="hljs-keyword">const</span> ac = <span class="hljs-keyword">new</span> AbortController();
          <span class="hljs-keyword">const</span> form = input.closest(<span class="hljs-string">'form'</span>);
      <span class="hljs-keyword">if</span> (form) {
          form.addEventListener(<span class="hljs-string">'submit'</span>, <span class="hljs-function"><span class="hljs-params">e</span> =&gt;</span> {
              ac.abort();
          });
      }
      navigator.credentials.get({
          <span class="hljs-attr">otp</span>: { <span class="hljs-attr">transport</span>:[<span class="hljs-string">'sms'</span>] },
          <span class="hljs-attr">signal</span>: ac.signal
      }).then(<span class="hljs-function"><span class="hljs-params">otp</span> =&gt;</span> { <span class="hljs-comment">// In case of successful reading of the message, sending the OTP message</span>
          input.value = otp.code; <span class="hljs-comment">// Enter the OTP value</span>
          <span class="hljs-built_in">console</span>.log(otp)
          <span class="hljs-keyword">if</span> (form) form.submit(); <span class="hljs-comment">// Form submission</span>
          }).catch(<span class="hljs-function"><span class="hljs-params">err</span> =&gt;</span> {
              <span class="hljs-built_in">console</span>.error(err); <span class="hljs-comment">// Log an error in case of error</span>
          });
          });
      }
   </span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span></span>
</code></pre>
<p>There is a Web component for integration into websites. The web component is written in the JavaScript programming language and can be installed using the NPM tool.</p>
<p>This library is available on <a target="_blank" href="https://github.com/philnash/web-otp-input">GitHub</a> and it is licensed under the MIT license.</p>
<h3 id="heading-browser-support">Browser support</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1696175295344/5db7afaf-091f-4450-8e27-558d50a637b9.png" alt class="image--center mx-auto" /></p>
<p>The most commonly used browsers on Android phones are supported. Apple devices are not supported but use their own Apple AutoFill.</p>
<p>Chrome, Edge and Opera desktop browsers are also supported, as sending is possible OTP from the phone to the computer if the conditions for this are met (<a target="_blank" href="https://developer.chrome.com/blog/cross-device-webotp/">https://developer.chrome.com/blog/cross-device-webotp</a>).</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1696176916399/c1281dc1-38ec-4b9c-980a-4452d0e64ae3.jpeg" alt class="image--center mx-auto" /></p>
<h3 id="heading-advantages-of-using-webotp"><strong>Advantages of using WebOTP</strong></h3>
<p>The main advantage of using the WebOTP functions is a better user experience of entering OTPs, as there is no need to open the SMS message and copy it only to the application itself.</p>
<p>I would suggest adding to the login flow the possibility of a different login method in case the user does not have his phone with him to read and enter the OTP.</p>
<p>Taken from:</p>
<ul>
<li><p><a target="_blank" href="https://developer.chrome.com/articles/web-otp/">https://developer.chrome.com/articles/web-otp/</a></p>
</li>
<li><p><a target="_blank" href="https://developer.mozilla.org/en-US/docs/Web/API/WebOTP_API">https://developer.mozilla.org/en-US/docs/Web/API/WebOTP_API</a></p>
</li>
<li><p><a target="_blank" href="https://developer.chrome.com/blog/cross-device-webotp/">https://developer.chrome.com/blog/cross-device-webotp/</a></p>
</li>
<li><p><a target="_blank" href="https://philna.sh/blog/2022/12/07/better-two-factor-authentication-experiences-with-web-otp">https://philna.sh/blog/2022/12/07/better-two-factor-authentication-experiences-with-web-otp</a></p>
</li>
<li><p><a target="_blank" href="https://developer.apple.com/news/?id=z0i801mg">https://developer.apple.com/news/?id=z0i801mg</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[The importance of application testing🤖]]></title><description><![CDATA[Back again with a new post👋. This time I went a little deeper into what software testing means and what types of testing exist. Already during my internship as a student, I encountered automatic testing of web applications.
This time I present the a...]]></description><link>https://blog.thepatik.com/the-importance-of-application-testing</link><guid isPermaLink="true">https://blog.thepatik.com/the-importance-of-application-testing</guid><category><![CDATA[Web Development]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Testing]]></category><category><![CDATA[Automated Testing]]></category><category><![CDATA[Devops]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Mon, 10 Jul 2023 18:13:32 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1689012633163/f896dfc6-984b-4d8f-9e0e-a0e4073d8c9b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Back again with a new post👋. This time I went a little deeper into what software testing means and what types of testing exist. Already during my <a target="_blank" href="https://blog.thepatik.com/one-month-internship-at-hrc">internship as a student</a>, I encountered automatic testing of web applications.</p>
<p>This time I present the advantages and disadvantages of automatic testing and when it pays to introduce automatic testing in the development itself, and what we need to pay attention to when introducing automatic testing.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1689012688283/dc654ad7-8bb1-47a1-9c82-215167dea948.jpeg" alt class="image--center mx-auto" /></p>
<h2 id="heading-testing">Testing</h2>
<p>If you are a developer, then you have already heard that it is necessary to test the application several times before it goes into production. The application can be tested in two different ways, most often it is done manually, but there is also the option of automatic testing (yes, the computer itself can check that everything is working as expected).</p>
<p>Manual testing is the execution of functional tests by “hands”, when we click on the application ourselves, and in this way, we find errors and bugs. Application testing is not only functional testing, if all functions work correctly, but application testing also includes a huge number of other types of testing.</p>
<p>Other types of tests:</p>
<ul>
<li><p><strong>Cross-browser Testing</strong> – testing the application if it is working in different browsers</p>
</li>
<li><p><strong>Load and stress testing</strong> – testing the website's behavior in the event of an increased number of requests or users</p>
</li>
<li><p><strong>UI testing (GUI Testing)</strong> – testing the user experience and appearance of the application/website under various conditions</p>
</li>
<li><p><strong>A/B Testing</strong> – testing different versions of the application, which works better for the user</p>
</li>
<li><p><strong>Compatibility Testing</strong> – compatibility testing with different device configurations or servers</p>
</li>
<li><p><strong>Security Testing</strong> – testing the security of the application for any security vulnerabilities</p>
</li>
<li><p><strong>Smoke Testing</strong> – testing of the operation of the main functions in accordance with expectations</p>
</li>
<li><p><strong>Acceptance and Compliance Testing</strong> – testing if the application complies with the requirements and expectations of the project</p>
</li>
</ul>
<p>As we can see, we can find that testing does not only include testing if all functions work correctly but also a lot of other types of tests.</p>
<p>Manual testing can be very, very time-consuming if we have a complex application with a lot of features. This is why automated testing exists.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1689011644993/f64e3333-de18-4b93-8389-7a54e38c8571.jpeg" alt class="image--center mx-auto" /></p>
<h2 id="heading-automatic-testing">Automatic testing</h2>
<p>Automated testing is testing that takes place without the intervention of a tester. It allows us to run application tests automatically.</p>
<p>Automated testing is most often used in E2E (end-to-end) tests. These are tests that illustrate user behavior in the real world. There are also Unit tests, which are used to test individual functions of the application.</p>
<p>Automated testing usually works together with integration in CI/CD (Continuous Integration/Continuous Delivery).</p>
<p>The power of automated testing is most apparent in larger applications/projects. For this reason, I do not recommend initiating automated testing in smaller projects. In smaller projects, you prefer to use manual testing.</p>
<h3 id="heading-advantages-of-automated-testing">Advantages of automated testing</h3>
<p>Automated testing brings enormous advantages over manual testing.</p>
<ul>
<li><p><strong>Speed</strong> – Automated testing is faster than manual testing</p>
</li>
<li><p><strong>More frequent testing</strong> – automated tests can be run more frequently than manual tests (for example, after each push to Git).</p>
</li>
<li><p><strong>Higher product quality</strong> – frequent testing reduces the chances of errors and bugs in the project and quick detection of these</p>
</li>
<li><p><strong>Reuse of scripts</strong> – all automated test code can be used in multiple places</p>
</li>
</ul>
<h3 id="heading-disadvantages-of-automated-testing">Disadvantages of automated testing</h3>
<p>Although automated testing has many advantages over manual software testing, it also has its disadvantages.</p>
<ul>
<li><p><strong>UI testing</strong> – automated testing is not suitable for UI testing</p>
</li>
<li><p><strong>High initial costs</strong> – the initial costs of investing in automated testing can be very high (you need to buy software licenses, find someone who knows how to write tests…)</p>
</li>
<li><p><strong>Constant correction</strong> – automatic tests need to be changed every time the program structure changes</p>
</li>
<li><p><strong>Generates false positives and false negatives</strong> – many times a test can fail and generate a false result</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1689011716629/13bc743d-5ca1-449b-9a80-a7241d545a0f.jpeg" alt class="image--center mx-auto" /></p>
<h3 id="heading-factors-for-deciding-on-the-start-of-automated-testing">Factors for deciding on the start of automated testing</h3>
<p>Automated testing has its pros and cons, it's just a matter of when to decide to initiate automated tests into our development cycle.</p>
<p>The biggest factor in integrating automated tests is the size of the application/project. If we have a smaller project with few functions, manual testing is still the most useful, but if we have several applications or one larger application with many functions, it would be wise to start thinking about automatic testing. Automated testing is easiest to implement on new projects when all members of the development team write tests for features as they are developed.</p>
<p>The next question is how much money we are willing to invest in automated testing. There is no right answer here because we need to know what we want to test and in what way. There are free (open source) and paid solutions. It is also necessary to consider the costs of maintaining the tests when the product will change.</p>
<p>The number of people in the team is also important, a larger team may decide that someone should be responsible for writing tests and the rest should focus on product development.</p>
<h3 id="heading-planning-automated-tests">Planning automated tests</h3>
<p>If we have determined that it would be worthwhile for us to start integrating automated tests, we must start with good planning, because only with a good plan will we achieve higher product quality.</p>
<ul>
<li><p><strong>Deciding what we want to test</strong> – in the first step, we ask ourselves what we want to test, whether these are the main critical functions or something else</p>
</li>
<li><p><strong>Choosing the appropriate tool for testing</strong> – in the next step, we ask ourselves which tool would be the most optimal and best for us, here we also determine the work methodologies</p>
</li>
<li><p><strong>Planning the infrastructure</strong> – in the third step, we plan what kind of infrastructure we want to run the tests on, this includes planning the integration in CI/CD and the use of automation tools.</p>
</li>
<li><p><strong>Planning and writing tests</strong> – in the fourth step, we start planning the writing of tests for our project. It is essential to test the written tests several times if they work correctly in different situations.</p>
</li>
<li><p><strong>Analysis</strong> – in the last fifth step, we must analyze the results of automatic tests and decide about the next steps (update some test scripts or write new tests)</p>
</li>
</ul>
<p>If we follow all these steps and everything else mentioned in the previous paragraphs, we can greatly increase the quality of the product/application.</p>
<p>In a future article, however, I will try to present some frameworks for automated application testing.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1689011473973/5d78fcde-3a55-4286-92ce-c53d3b91d3b6.jpeg" alt="Planning" class="image--center mx-auto" /></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>As we saw in the course of the article, testing automation can achieve higher product quality and free the tester to focus on other tests. Integrating automated testing requires a lot of planning to make the integration as successful as possible, but it pays off in the long run.</p>
<p>I hope the post helped you, I will be happy about any comments and also likes. See you soon.</p>
]]></content:encoded></item><item><title><![CDATA[Open-source software: what makes it so attractive?]]></title><description><![CDATA[You may already be familiar with the term "open source" if you have been involved in programming for some time. Open-source software has gained popularity for many reasons, some of which I will attempt to explain below.

Introduction
To start with, l...]]></description><link>https://blog.thepatik.com/open-source-software-what-makes-it-so-attractive</link><guid isPermaLink="true">https://blog.thepatik.com/open-source-software-what-makes-it-so-attractive</guid><category><![CDATA[Open Source]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Junior developer ]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[software development]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Thu, 27 Apr 2023 11:00:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1682593145782/3f7705ec-2679-4c1c-a52d-b8d3fdeaa78d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You may already be familiar with the term "open source" if you have been involved in programming for some time. Open-source software has gained popularity for many reasons, some of which I will attempt to explain below.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1682592641324/57f84bc6-5ef9-4e0e-9eda-74daee1acebc.jpeg" alt class="image--center mx-auto" /></p>
<h2 id="heading-introduction">Introduction</h2>
<p>To start with, let's define what open-source software is. Put simply, it refers to programs whose source code is publicly available. This code can typically be accessed through online Git repositories, with GitHub being one of the largest collections of open-source software available.</p>
<p>You're likely already familiar with some examples of open-source software, such as MySQL, Visual Studio Code, Apache HTTP server, Mozilla Firefox Browser, VLC media player, and Linux OS. These programs and operating systems have all been developed using open-source methodologies.</p>
<p>The benefits of open-source software are numerous and extend to developers and businesses.</p>
<h2 id="heading-better-security">Better security</h2>
<p>One common misconception about open-source software is that it is inherently less secure than closed-source software, as the code is publicly accessible and could be vulnerable to analysis by malicious actors. However, the reality is quite the opposite - open-source software is widely considered to be more secure than its closed-source counterparts.</p>
<p>A prime example of this is the comparison between Windows and Linux operating systems. Windows has been plagued by numerous security vulnerabilities over the years, whereas Linux has a reputation for being more secure.</p>
<p>This can largely be attributed to the "many eyes" phenomenon, in which a greater number of people can analyze the code and identify bugs and security flaws more quickly.</p>
<h2 id="heading-freedom">Freedom</h2>
<p>Another major advantage of open-source software is the freedom it provides. With open-source software, individuals and businesses can easily adapt the software to meet their specific needs. This level of customization is not possible with closed-source software, which is often restricted by licensing agreements and proprietary code.</p>
<p>In practice, open-source software enables greater flexibility and control over the software, allowing for a more tailored user experience. This level of freedom is particularly important for businesses, as it enables them to adapt the software to meet their specific needs and gain a competitive advantage in their industry.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1682592788339/adbe6467-fb04-4f71-9a21-fca8a0514560.jpeg" alt class="image--center mx-auto" /></p>
<h2 id="heading-community-support">Community support</h2>
<p>One of the key strengths of open-source software is the strong sense of community that surrounds it. Open-source projects are often supported by large and passionate communities of developers and users, who are dedicated to improving the software and helping others to use it effectively.</p>
<p>This community support can take many forms, including online forums, user groups, and developer communities. These resources provide a wealth of knowledge and expertise that can be invaluable when encountering issues with open-source software. The strength of the community also ensures that open-source software is constantly evolving and improving, as developers collaborate and share ideas to enhance the software's functionality and performance.</p>
<p>For users and businesses, the community support provided by open-source software can be a major advantage, as it ensures that help is readily available when needed and that the software remains up-to-date and relevant.</p>
<h2 id="heading-transparency">Transparency</h2>
<p>Another important benefit of open-source software is the transparency it provides. Open-source software is developed in an open and collaborative environment, allowing anyone to view, edit, and review the source code.</p>
<p>This level of transparency ensures that the software is free from hidden features or malicious code, increasing user confidence in the software's integrity. In contrast, closed-source software can sometimes hide unexpected or unwanted features, such as data collection, which can erode user trust and lead to privacy concerns.</p>
<p>By providing full visibility into the code, open-source software enables users and businesses to fully understand how the software works and make informed decisions about its use. This transparency is particularly important in industries such as healthcare and finance, where trust and accountability are critical.</p>
<h2 id="heading-a-free-alternative">A free alternative</h2>
<p>Open-source applications are often created to create an alternative to paid applications. It can also happen that the alternative to commercial applications is even better than the commercial application itself.</p>
<p>These are just a few reasons why open source is so attractive, if you have any other ideas of your own why open source is so attractive, add it in the comments.</p>
<p>If you like the content I create, connect with me at:</p>
<p>🔷<a target="_blank" href="https://mstdn.social/@patik123">Mastodon</a></p>
<p>🔷<a target="_blank" href="https://www.linkedin.com/in/patrick-kosir/">LinkedIn</a></p>
]]></content:encoded></item><item><title><![CDATA[Let's talk about something - cyber bullying]]></title><description><![CDATA[Today, almost every individual has at least 5 different social networks.
Social networks can be a handy thing if we use them in an appropriate way and with good intentions. Increasingly, however, social networks are being used to harass and damage an...]]></description><link>https://blog.thepatik.com/lets-talk-about-something-cyber-bullying</link><guid isPermaLink="true">https://blog.thepatik.com/lets-talk-about-something-cyber-bullying</guid><category><![CDATA[cyberbullying]]></category><category><![CDATA[internet]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Sun, 12 Feb 2023 17:28:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1676222841277/df84716a-b632-47de-8954-ee6e3ccc2730.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today, almost every individual has at least 5 different social networks.</p>
<p>Social networks can be a handy thing if we use them in an appropriate way and with good intentions. Increasingly, however, social networks are being used to harass and damage an individual's reputation, which has many consequences for both the victim and the perpetrator.</p>
<p>During the epidemic, the amount of online violence increased very much, as children and adolescents spent more and more time on social networks.</p>
<h2 id="heading-what-types-of-online-violence-do-we-know">What types of online violence do we know?</h2>
<p>The most common forms of online violence are:</p>
<ul>
<li><p><strong>Offensive messages and comments</strong> - constantly write offensive comments against the individual and state untruths about the person</p>
</li>
<li><p><strong>Exclusion from groups</strong> - the person is removed from chat rooms and social media groups in which the victim is discussed and is aware of it.</p>
</li>
<li><p><strong>Fake profiles</strong> - creating fake profiles on social networks and pretending to be the victim</p>
</li>
<li><p><strong>Editing photos offensively</strong> - this is about editing photos that would offend an individual</p>
</li>
<li><p><strong>Defamation</strong> - spreading false rumours about someone</p>
</li>
<li><p><strong>Threats</strong> - sending/posting threats to individuals or groups</p>
</li>
<li><p><strong>Blackmail</strong> - sending requests to the victim</p>
</li>
</ul>
<p>Not all forms of cyberbullying are listed here, as there are many other forms.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1676219331345/0478975f-de55-4d10-920d-6329c1f6aa06.jpeg" alt class="image--center mx-auto" /></p>
<h2 id="heading-what-are-the-consequences-for-the-victim">What are the consequences for the victim?</h2>
<p>The violence of any kind has consequences for the victim. Physical violence typically results in physical injuries, while psychological violence can lead to psychological issues.</p>
<p>Even seemingly harmless violence has consequences for the victim(s). However, if online aggression persists and intensifies, it can lead to further repercussions. In the worst-case scenario, which is unfortunately quite common, the victim may suffer from depression and suicidal tendencies and even take their own life.</p>
<h2 id="heading-what-can-the-victim-do">What can the victim do?</h2>
<p>As a victim of cyberbullying, it's important to speak up. Reach out to a trusted adult, such as a teacher, school counsellor, or parent, and work together to find a solution. Additionally, you can contact countries' institutions and projects that focus on raising awareness about safe Internet use.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1676219979471/0b7f7dce-c611-42e6-81d5-127bb50c7001.jpeg" alt class="image--center mx-auto" /></p>
<p>It is essential to prevent online violence. Victims must not remain silent; most children and adolescents do not even discuss being bullied, threatened, or extorted online. Talking about it is key.</p>
<h2 id="heading-what-are-the-repercussions-for-someone-who-commits-violence">What are the repercussions for someone who commits violence?</h2>
<p>Many people mistakenly believe that if they are sending threatening messages from their home phones and computers, they cannot be tracked. However, this is not true; all online activity can be traced back to its source.</p>
<blockquote>
<p>Cyberbullies can hide behind a mask of anonymity online and do not need direct physical access to their victims to do unimaginable harm. – Anna Maria Chavez</p>
</blockquote>
<p>The consequences of violence can be severe. Depending on the severity of the act, the perpetrator may face criminal charges, fines, jail time, and other penalties. In addition, they may suffer social, emotional, and psychological repercussions, such as public humiliation, loss of relationships, and difficulty finding employment.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1676220022912/8970d6f7-ecad-4466-b258-605c276232ba.jpeg" alt class="image--center mx-auto" /></p>
<p>It is important to remember that the person sending the messages is also legally responsible for their actions and could face imprisonment.</p>
<p>I will end this post with this quote</p>
<blockquote>
<p>Every call, email and text is a chance for you to send more love into the world. Stop cyberbullying.</p>
</blockquote>
<p>Like my content. You can find me on:</p>
<p>🔹<a target="_blank" href="https://mstdn.social/@patik123">Mastodon</a></p>
<p>🔹<a target="_blank" href="https://www.linkedin.com/in/patrick-kosir/">LinkedIn</a></p>
<p>🔹<a target="_blank" href="https://www.instagram.com/patik_123_/">Instagram</a></p>
<p>🔹<a target="_blank" href="https://github.com/patik123">GitHub</a></p>
]]></content:encoded></item><item><title><![CDATA[A year full of success and new knowledge—Dev Retro 2022]]></title><description><![CDATA[The year is nearly over and now is the ideal time to contemplate and reflect on the successes we have achieved and the lessons we have learned.
This year has been a journey of discoveries and revelations as we navigated the ever-evolving computing wo...]]></description><link>https://blog.thepatik.com/a-year-full-of-success-and-new-knowledgedev-retro-2022</link><guid isPermaLink="true">https://blog.thepatik.com/a-year-full-of-success-and-new-knowledgedev-retro-2022</guid><category><![CDATA[#DevRetro2022]]></category><category><![CDATA[Hashnode]]></category><category><![CDATA[portfolio]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[personal development]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Tue, 27 Dec 2022 06:00:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1672080031346/7f5aeecc-5959-4630-bd10-475a599124a0.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The year is nearly over and now is the ideal time to contemplate and reflect on the successes we have achieved and the lessons we have learned.</p>
<p>This year has been a journey of discoveries and revelations as we navigated the ever-evolving computing world.</p>
<p>Today is particularly momentous and significant, as it is my 19th birthday🎉.</p>
<p>Before I take a look back over the year, allow me to introduce myself.</p>
<p>My name is Patrick and I come from Slovenia, a beautiful country. I am currently ending my learnings in computer science at Celje and, in my free time, I give a lot of effort to improving my web development skills. I have been actively creating web solutions for three years now.</p>
<h2 id="heading-blogging">Blogging✒</h2>
<p>Over the year, I wrote 11 articles on my technical blog, which focused primarily on web development, computer science, and my personal experiences with these topics.</p>
<p>Writing has become a passion of mine, as I thoroughly enjoy being able to share my knowledge with the world.</p>
<p>I strongly believe that knowledge is the only way to progress, and no matter where or when we learn, the value of writing an article to document what we've learned is priceless.</p>
<p>Writing about what we know helps us not only expand our understanding but also gives others the chance to learn more about what we have discovered. It also allows us to connect with others who have similar interests, and to help one another grow in our shared understanding.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672074276061/4b00eec7-6af6-4f64-b1dd-ef0bc35a88e4.jpeg" alt class="image--center mx-auto" /></p>
<p>The most-read articles in 2022:</p>
<ul>
<li><p><a target="_blank" href="https://blog.thepatik.com/find-a-reason-why-to-write-a-blog">Find A reason why to write a blog📚</a></p>
</li>
<li><p><a target="_blank" href="https://blog.thepatik.com/how-to-bypass-captcha">How to bypass CAPTCHA?</a></p>
</li>
<li><p><a target="_blank" href="https://blog.thepatik.com/what-is-crud">What is CRUD?</a></p>
</li>
</ul>
<h2 id="heading-research-paper">Research paper📚</h2>
<p>At my high school, we create a good deal of research projects each year. This year, I made one too: a mobile application for my school centre, the largest in Slovenia—School Center Celje. I'm very proud of it.</p>
<p>The ŠCC Mobile app was popular among all students. It simplified a lot of information from various sources. Unfortunately, I had to shut it down due to the School Center's requirements.</p>
<p>I faced many challenges with the research project. The most important lesson I learned is to never give up, even in the face of failure.</p>
<p>The research project was also presented at the national competition of young researchers in Murska Sobota.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672074329342/6b25410f-dc07-469e-93b0-31eab84775da.jpeg" alt class="image--center mx-auto" /></p>
<h2 id="heading-presentation-of-my-school">Presentation of my school🏛</h2>
<p>In March, I had the opportunity to present my school, the Secondary School for Chemistry, Electrical Engineering, and Computer Science, on a day of open doors.</p>
<p>I was excited to have the chance to explain why our school in Celje is an excellent choice for those looking for an education in the sciences.</p>
<p>I was able to take advantage of this opportunity to practice my public speaking skills in front of a large audience. During the presentation, I was able to highlight the numerous advantages of our school.</p>
<p>I was also able to showcase my research paper ŠCC Mobile.</p>
<p>In the end, I'm proud to say that I was able to present my school in the best possible light, and I was thrilled to have had the chance to do so.</p>
<p>What matters most to me is the experience of public speaking, in front of a big audience.</p>
<h2 id="heading-internship-at-hrc">Internship at HRC👨‍💻</h2>
<p>In June, I completed a mandatory internship at the local company HRC. They produce software for Slovenian and Croatian banks, called Hibis.</p>
<p>During my daily tasks, I learned a lot of new things. My main task was to perform manual and automated testing of the online bank.</p>
<blockquote>
<p>Working collaboratively with others can lead to faster, more efficient problem-solving.</p>
</blockquote>
<p>This experience made me realize that testing is an important part of development, which is often overlooked and not given enough attention. Testing helps to ensure that the product is of the highest quality before it is released to the public.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1657786159081/Xa9oNzmmS.jpg?auto=compress,format&amp;format=webp" alt="HRC Žalec" /></p>
<p>I believe that schools should teach something about this topic. The most important lesson I learned from this experience was that if you have a development problem, you have a team of experts to help you solve it. Working collaboratively with others can lead to faster, more efficient problem-solving.</p>
<h2 id="heading-sloveniaskills-2022-competition">SloveniaSkills 2022 competition🏆</h2>
<p>In September, my classmate Tilen Goršek and I represented the School Center of Celje in the SloveniaSkills competition in computer science and informatics.</p>
<p>The competition gave us real experience in setting up a network in a company, as well as how to secure the entire system. We learned about the advantages of using name servers and managing user authorizations.</p>
<p>Though we weren't the most successful, my classmates and I gained valuable knowledge.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1684658411876/3c48a252-ac8c-4759-a963-b17528a36114.jpeg" alt class="image--center mx-auto" /></p>
<p>Throughout the year, I encountered many people. I acquired a great deal of knowledge. What I appreciate the most is that there are countless opportunities to acquire new information at every turn; you just have to be proactive in finding them.</p>
<h2 id="heading-whats-coming">What's coming? 🚀</h2>
<p>Perfect question… For now, I know I will write a new research paper and create a new product, BiznisBox. What's more, we'll see what the year brings. Before that, I'll finish high school and enrol in the university.</p>
]]></content:encoded></item><item><title><![CDATA[How I set up my home server]]></title><description><![CDATA[You may wonder why you want to set up your server at home. In today's world, this has many advantages.
I've wanted to set up my server for my needs for a while now but never found the time or how to. Well, last week I finally made it happen, and curr...]]></description><link>https://blog.thepatik.com/how-i-set-up-my-home-server</link><guid isPermaLink="true">https://blog.thepatik.com/how-i-set-up-my-home-server</guid><category><![CDATA[Ubuntu]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Linux]]></category><category><![CDATA[Cloud]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Fri, 02 Dec 2022 17:56:32 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1670003778038/69f3a217-af9d-46a6-b58c-daf6bf9a0861.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You may wonder why you want to set up your server at home. In today's world, this has many advantages.</p>
<p>I've wanted to set up my server for my needs for a while now but never found the time or how to. Well, last week I finally made it happen, and currently, it's working for me (the server, make no mistake).</p>
<p>First, the advantages of having your server:</p>
<ul>
<li><p>The data is only yours, everything you have stored on your computer you know until you access it.</p>
</li>
<li><p>You can configure it as you wish, you are not tied to a service provider</p>
</li>
<li><p>It is cheap to set up and maintain</p>
</li>
</ul>
<p>But what can be the disadvantages of one's own server</p>
<ul>
<li><p>Security, You have to deal with who accesses your server and how you have it configured</p>
</li>
<li><p>Extra electricity costs</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670002610268/c2bbd47d-7be1-4fd8-a86d-657a09199db6.jpeg" alt /></p>
<h2 id="heading-nextcloudhttpsnextcloudcom"><a target="_blank" href="https://nextcloud.com/">Nextcloud</a></h2>
<p>Before presenting how my server works, I will present what Nextcloud is. Nextcloud is open-source software that allows us to build our digital cloud.</p>
<p>Nextcloud is an excellent alternative to big fishes like Dropbox, Office 365 and Google Drive, as it allows for a massive amount of expansion and many extra functions that are unavailable in any of the commercial programs listed above.</p>
<p><img src="https://nextcloud.com/wp-content/uploads/2021/12/logo.png" alt="Nextcloud logo" class="image--center mx-auto" /></p>
<p>The software also has the option of installing a tool for group file editing and an online editor of documents, layouts, and tables like that of Microsoft Office. Nextcloud also allows you to make video calls and send direct messages.</p>
<p>By adding plugins, Nextcloud can become the ultimate productivity tool.</p>
<p>Nextcloud is also used in companies and also in the German government and schools.</p>
<h1 id="heading-how-do-i-set-up-my-server">How do I set up my server?</h1>
<p>I've taken tons of photos in my life, and last year Google Photos introduced a photo upload limit. So, some time ago, I ran out of space in the Google Photo service. So, I had one computer at home, which I did not use in principle, and I installed the Ubuntu operating system.</p>
<p>I chose the Ubuntu operating system because it is used and because it has a nice graphical interface (if I ever decide to take my computer with me).</p>
<p>First, it was necessary to update all packages to the latest version.</p>
<p>How I went about installing <a target="_blank" href="https://nextcloud.com/">Nextcloud</a> on Ubuntu.</p>
<p>There is already a package for easy installation of Nextcloud in the Snap online market and it contains everything we need (<a target="_blank" href="https://snapcraft.io/nextcloud">installation package link</a>).</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670003097827/4e3ab497-4900-44b0-a837-0109457f05a8.jpeg" alt /></p>
<p>All we have to do is install this package. The easiest way to do this is with a simple command.</p>
<pre><code class="lang-bash">sudo snap install nextcloud
</code></pre>
<p>Then, inside my home local network, I entered the IP address of my computer in the web browser installed Nextcloud to the end and created a user account to access the installation.</p>
<p>Such an installation is only available within a local network? But what if I want to access my “cloud” also from some other network?</p>
<p>There are many solutions for this as well, from redirecting your router to a suitable computer, setting up a VPN server at home or tunnelling. Tuning turned out to be the most optimal and cheapest solution for me.</p>
<p>I always host my domains with Cloudflare because it gives me many free features. Some free services are CDN with unlimited bandwidth, static website hosting, DNS domain hosting with unlimited DNS records, Cloudflare Tunnels, DDoS website protection…</p>
<h2 id="heading-cloudflare-tunnels">Cloudflare Tunnels</h2>
<p>Usually, to access your server at home in a private network, you need a static IP and port forwarding on the router.</p>
<p>But there are tunnels in the networking. Like in the real world, tunnels are designed to overcome obstacles. In our case, the obstacle is our local network. Network tunnels allow us to create secure connections to our application on the server, something like a VPN.</p>
<p>In case we already have our domain on Cloudflare DNS, then creating tunnels is accessible like a cake. We only need to install the Cloudflare application on the device (only one command on Linux) and then we can set up the applications hosted on the device in the Cloudflare GUI.</p>
<p>The first step of installing Cloudflare Tunnels. We must install this little package into our system.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670002794413/61a5809c-654f-4ab2-aabb-a8abc43ab338.png" alt /></p>
<p>And then set our public hostnames. What is simple, is just enter the subdomain of the domain which we like and then set the hostname on the device URL.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670002873089/7e36d276-a456-4113-b5e3-ffcd01a59481.png" alt /></p>
<p>We can use <a target="_blank" href="https://www.cloudflare.com/products/tunnel/">Cloudflare Tunnels</a> for SSH or RDP access to our machine.</p>
<p>The function is also proper when we want to show a prototype of our product.</p>
<p>I hope this article helped you to discover how easy it is to set up your own media server.</p>
<p>Till next time 👋.</p>
]]></content:encoded></item><item><title><![CDATA[How to make a website compliant with Europe law?]]></title><description><![CDATA[Europe is a country that puts citizens and their privacy first.
Large corporations collect data about their users daily, without their knowledge. Because of these examples, there is quite a lot of European legislation that we must follow when creatin...]]></description><link>https://blog.thepatik.com/how-to-make-a-website-compliant-with-europe-law</link><guid isPermaLink="true">https://blog.thepatik.com/how-to-make-a-website-compliant-with-europe-law</guid><category><![CDATA[Web Development]]></category><category><![CDATA[Beginner Developers]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Fri, 07 Oct 2022 18:31:26 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1665167406645/xxRPBAJFH.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Europe is a country that puts citizens and their privacy first.</p>
<p>Large corporations collect data about their users daily, without their knowledge. Because of these examples, there is quite a lot of European legislation that we must follow when creating websites and applications.</p>
<blockquote>
<p>Privacy is dead, and social media holds the smoking gun.</p>
</blockquote>
<h2 id="heading-protection-of-personal-data">Protection of personal data</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1665166499731/Fxm_AqzEZ.jpg" alt="europe GDPR" /></p>
<p>One of the most high-profile requirements was the GDPR (<strong>General Data Protection Regulation</strong>) adopted in 2016, which changed a lot of things in the field of personal data collection and processing. The order increased the transparency of personal data's use and collection, transmission and use.</p>
<p>The GDPR requires every developer of web applications/sites to draw up a privacy policy in which data is collected about who collects personal data (it can be a natural or legal person), what data is collected and how it is obtained. It is necessary to be aware that the amount of collected personal data must be limited to a minimum, which means that we must not collect more data “in case we need it sometime in the future”. It is also necessary to provide a contact whom the visitor/user can contact in case he wants to exercise his rights under the GDPR. At the same time, it is necessary to specify the user's rights.</p>
<p>The document in which we describe this is called the <strong>privacy policy.</strong></p>
<h2 id="heading-cookies">Cookies</h2>
<p>Cookies are very popular for storing data in user sessions, and services for website visit analytics are very popular on websites.</p>
<p>The European directive on electronic privacy (ePrivacy) requires the companies to offer the user, in the case of using cookies for analytics, and marketing, the option of choosing if they agree to the use of services.</p>
<p>In practice, this usually means. When visitors visit the page, the website must display a banner about the use of cookies and options to agree or not.</p>
<p>If the visitor/user refuses to use cookies, it is necessary to ensure that the cookies aren't installed.</p>
<p>This rule does not apply to functional cookies (e.g., cookies that store login information)</p>
<p>But this directive applies not only to cookies but to all technologies that enable storage on the computer and re-recognition of users, including possible storage in the browser's local storage (LocalStorage, SessionStorage).</p>
<p>Because of this European law, every website must have a document called a <strong>cookie policy</strong>, which must contain what a cookie is, why it is used and the categorization of each cookie on the website. What this means, is that it is necessary to list all the cookies that are on the website and describe why they are used and how long they are kept.</p>
<blockquote>
<p><em>Privacy is not something that I'm entitled to, it's an absolute prerequisite.</em></p>
</blockquote>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1665166640912/HPRYVP5md.jpg" alt="business" /></p>
<h1 id="heading-google-analytics-yes-or-no">Google Analytics yes, or no?</h1>
<p>Many companies/organizations use Google Analytics to track user behaviour (me included).</p>
<p>But, can I even use it? The answer is not clear.</p>
<p>The European countries of Austria, France, and Italy have already banned the use of Google Analytics on websites, as Google collects a huge amount of data on user behaviour with Google Analytics and uses it for its own needs - targeted advertising.</p>
<p>However, there are quite a few alternatives with which we can collect analytical data about visits to our websites.</p>
<p>Some of them are:</p>
<ul>
<li><p><a target="_blank" href="https://matomo.org/">Matomo Analytics</a></p>
</li>
<li><p><a target="_blank" href="https://plausible.io/">Plausible Analytics</a></p>
</li>
<li><p><a target="_blank" href="https://piwik.pro/">Piwik Analytics Suite</a></p>
</li>
<li><p><a target="_blank" href="https://umami.is/">umami</a></p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1665166721067/q0y62g23u.jpg" alt="Data image" /></p>
<p>All these alternatives try to be and collect as little data about visitors as possible, but still, try to get enough data for analysis.</p>
<p>If you ever check a website, you will find that many websites do not follow European directives.</p>
<p>I hope I have shown you how much is required for a website to follow European legislation.</p>
<p>All these rules apply in the European Union and to companies outside the European Union if they collect data about EU citizens.</p>
<p>The article is informative, I am not a lawyer. Consult a lawyer/lawyer for exact determinations.</p>
]]></content:encoded></item><item><title><![CDATA[One-month internship at HRC]]></title><description><![CDATA[Hey, I'm back again with a new post. I've been writing this post for three weeks this time and I think that's huge, but every time I wrote it, I wasn't happy with it. So, I spent a lot of time…

It was a fantastic experience because I gained experien...]]></description><link>https://blog.thepatik.com/one-month-internship-at-hrc</link><guid isPermaLink="true">https://blog.thepatik.com/one-month-internship-at-hrc</guid><category><![CDATA[internships]]></category><category><![CDATA[Career]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[personal]]></category><category><![CDATA[Beginner Developers]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Thu, 14 Jul 2022 08:17:40 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1657786543752/rMdqGkWtd.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, I'm back again with a new post. I've been writing this post for three weeks this time and I think that's huge, but every time I wrote it, I wasn't happy with it. So, I spent a lot of time…</p>
<blockquote>
<p>It was a fantastic experience because I gained experience I would never have in school.</p>
</blockquote>
<p>In June, I did a four-week mandatory internship at the local company <a target="_blank" href="https://www.hrc.si/eng/home-eng">HRC</a> in Žalec, Slovenia. I did my internship with my classmate <a target="_blank" href="https://www.linkedin.com/in/tilen-gor%C5%A1ek-b49bba234">Tilen Goršek</a>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1657786108807/KNK4-kcMH.jpg" alt="HRC Žalec " /></p>
<p>HRC is a company that produces software for most Slovenian and a few Croatian banks and savings banks. The company produces practically everything that a bank needs for its operation, from a mobile app to an app for work at the front office of the bank. The product they make is called <a target="_blank" href="https://www.hrc.si/eng/platform">Hibis</a>.</p>
<blockquote>
<p>The biggest lesson I learned is that there are never any stupid questions, you will always get an answer to a question, you just have to ask if something is not clear to you.</p>
</blockquote>
<p>Before starting work in the assigned position, I had to sign a non-disclosure agreement, which prevents the disclosure of customer and company data. I was introduced to the rules of work in the company and also how to act by the ISO 27001 standard (standard for information security).</p>
<p>As an intern, I was assigned to the Digital Channels department, more precisely in the department where they create an electronic bank. My task was to find mistakes that programmers make when creating an application. In the beginning, I looked for bugs and errors manually, but in the second week, automated testing with the Ranorex Studio software came into play. A lot of test cases are already written, but I also wrote one according to a pre-written specification. </p>
<p>I got an insight into how software development is done in a team and what DevOps looks like on a real project.</p>
<p>During my four weeks at HRC, I learned a lot about how banking systems work, which I didn't know much about before, and the importance of testing software before sending it to production. I also learned a lot about working in a company and information security. It was a fantastic experience because I gained experience I would never have in school.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1657786159081/Xa9oNzmmS.jpg" alt="HRC Žalec" /></p>
<p>The biggest lesson I learned is that there are never any stupid questions, you will always get an answer to a question, you just have to ask if something is not clear to you.</p>
<p>I will most likely return to HRC, as I see many opportunities for personal advancement in the company.</p>
<p>Until next time 👋.</p>
]]></content:encoded></item><item><title><![CDATA[Web Storage API - Explain Like I'm Five]]></title><description><![CDATA[Web browsers today have a huge range of features, and more and more will get them.
We all know about cookies in our browsers, but browsers today have a special feature called the Web Storage API that allows us to temporarily or permanently store valu...]]></description><link>https://blog.thepatik.com/web-storage-api-explain-like-im-five</link><guid isPermaLink="true">https://blog.thepatik.com/web-storage-api-explain-like-im-five</guid><category><![CDATA[Web Development]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Mon, 13 Jun 2022 19:22:31 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1655147873980/fZ3Ku3Oa9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Web browsers today have a huge range of features, and more and more will get them.</p>
<p>We all know about cookies in our browsers, but browsers today have a special feature called the Web Storage API that allows us to temporarily or permanently store values.</p>
<h2 id="heading-what-is-the-web-storage-api">What is the Web Storage API?</h2>
<p>The Web Storage API is a browser functionality that can store data in key-value format. The purpose of this browser API is to make the site more intuitive than cookies.</p>
<p>A big advantage of the Web Storage API is that values are stored even if the user closes the browser.</p>
<p>But where is the data stored? Data stored using the Web Storage API is stored in an SQLite file in the user's local folder.</p>
<p>The data stored in <code>localStorage</code> and <code>sessionStorage</code> can be accessed anywhere in the application with the JavaScript code.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1655148017994/5P1RvHD33.jpg" alt="Keyboard image" class="image--center mx-auto" /></p>
<h2 id="heading-difference-between-localstorage-and-sessionstorage">Difference between <code>localStorage</code> and <code>sessionStorage</code></h2>
<p>The Web Storage API has two data storage functions, <code>localStorage</code> and <code>sessionStorage</code>, the main difference between the two being that localStorage remains stored in the browser until it is deleted (it can also be permanent). However, SessionStorage is only stored until the user closes the browser. SessionStorage is a useful thing if you want to save some value in a browser instead of a cookie.</p>
<p>In this article, I will focus on <code>localStorage</code>, but almost all functions and features are the same as <code>sessionStorage</code>.</p>
<h2 id="heading-localstorage"><code>LocalStorage</code></h2>
<p>LocalStorage, as I mentioned earlier, stores data in key-value format.</p>
<p><code>localStorage</code> knows five main functions that can be used anywhere within the application.</p>
<p>These features are:</p>
<ul>
<li><code>setItem()</code>, the function allows us to store values in <code>localStorage</code>,</li>
<li><code>getItem()</code>, allows us to retrieve a specific value from <code>localStorage</code>,</li>
<li><code>removeItem()</code>, the function allows us to remove key with value from <code>localStroage</code>,</li>
<li><code>clear()</code>, the function clears all <code>localStorage</code>,</li>
<li><code>key()</code>.</li>
</ul>
<p><strong>setItem()</strong></p>
<p>With this feature, we can store the value in our localStorage.</p>
<p>Using the feature is very simple. The function accepts two parameters, the first is the key and the second is the value of this key.</p>
<pre><code class="lang-js"><span class="hljs-built_in">window</span>.localStorage (<span class="hljs-string">"key"</span>, <span class="hljs-string">"value"</span>);
</code></pre>
<p>In <code>localStorage</code> we can store different data types such as string, int, bool, object…</p>
<p>The <code>JSON.stringify</code> function allows us to save a JSON object to <code>localStorage</code>.</p>
<pre><code class="lang-js"><span class="hljs-keyword">const</span> user = {
    <span class="hljs-attr">id</span>: <span class="hljs-number">12345</span>,
    <span class="hljs-attr">name</span>: <span class="hljs-string">"John Doe"</span>,
    <span class="hljs-attr">email</span>: <span class="hljs-string">"john.doe@example.com"</span>,
}

<span class="hljs-built_in">window</span>.localStorage.setItem(<span class="hljs-string">'user'</span>, <span class="hljs-built_in">JSON</span>.stringify(user));
</code></pre>
<p><strong>getItem()</strong></p>
<p>With this function, we can get the value stored in <code>localStorage</code>. The function accepts one parameter, which is the value we want to get from memory.</p>
<pre><code class="lang-jsx"><span class="hljs-built_in">window</span>.localStorage.getItem (<span class="hljs-string">'user'</span>);
</code></pre>
<p>The function will return a string with the value:</p>
<pre><code><span class="hljs-string">"{"</span> id <span class="hljs-string">": 12345,"</span> name <span class="hljs-string">":"</span> John Doe <span class="hljs-string">","</span> email <span class="hljs-string">":"</span> john.doe@example.com <span class="hljs-string">"} '</span>
</code></pre><p>Since such a string cannot be used in our application, it must be returned to the JSON object. This is done with the <code>JSON.parse()</code> function</p>
<pre><code class="lang-jsx"><span class="hljs-built_in">JSON</span>.parse(<span class="hljs-built_in">window</span>.localStorage.getItem(<span class="hljs-string">'user'</span>));
</code></pre>
<p><strong>removeItem()</strong></p>
<p>The <code>removeItem()</code> function is used to remove only one element from localStorage.</p>
<p>The function accepts only one parameter and that is the name of the key we want to remove from <code>localStorage</code>. Removes the item if the key exists.</p>
<pre><code class="lang-jsx"><span class="hljs-built_in">window</span>.localStorage.removeItem (<span class="hljs-string">'user'</span>);
</code></pre>
<p><strong>clear()</strong></p>
<p>With the <code>clear()</code> function, we remove all elements in <code>localStorage</code>.</p>
<p>The function does not accept any parameters.</p>
<pre><code class="lang-jsx"><span class="hljs-built_in">window</span>.localStorage.clear();
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1655148077870/NS6Drkviv.jpg" alt="Computer image" /></p>
<h3 id="heading-disadvantages-of-localstorage">Disadvantages of <code>localStorage</code></h3>
<p>Everything has its drawbacks and so does <code>localStorage</code>, one of the biggest is limiting the amount of data we can store to 5 MB.</p>
<p>Another drawback is that <code>localStorage</code> is synchronous, which means that items can be accessed gradually.</p>
<hr />
<p>I hope I have introduced you to how we can store data in a browser in a different way.</p>
<p>Let's connect:</p>
<p>🔹<a target="_blank" href="https://twitter.com/Patik123_">Twitter</a></p>
<p>🔹<a target="_blank" href="https://instagram.com/patik_123_">Instagram</a></p>
<p>🔹<a target="_blank" href="https://github.com/patik123">GitHub</a></p>
<p>🔹<a target="_blank" href="https://polywork.com/patik123">PolyWork</a></p>
]]></content:encoded></item><item><title><![CDATA[SQL vs. NoSQL]]></title><description><![CDATA[In my previous article about what CRUD is, I also discussed that a part of any application is a database.
Today, a database is almost necessary for every application, because it allows us to store different data.
Databases can be relational or non-re...]]></description><link>https://blog.thepatik.com/sql-vs-nosql</link><guid isPermaLink="true">https://blog.thepatik.com/sql-vs-nosql</guid><category><![CDATA[SQL]]></category><category><![CDATA[NoSQL]]></category><category><![CDATA[Databases]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Beginner Developers]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Fri, 13 May 2022 09:24:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1652433321518/m-FU3HwuO.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In my previous article about <a target="_blank" href="https://blog.thepatik.com/what-is-crud">what CRUD is</a>, I also discussed that a part of any application is a database.</p>
<p>Today, a database is almost necessary for every application, because it allows us to store different data.</p>
<p>Databases can be relational or non-relational, they can be accessed via the Internet and the Internet, or they can be local on a local device.</p>
<p>Today, I will walk between relational and non-relational databases.</p>
<h2 id="heading-relational-databases-sql">Relational Databases (SQL)</h2>
<p>Relational databases are the most used databases. Data in these databases are stored in tables and rows.</p>
<p>The relational database is like Excel worksheets.</p>
<p>Relational databases have better readable data than non-relational databases because they have very structured data.</p>
<p>For creating queries in those databases is used an existing language called SQL is.</p>
<p>Advantages of relational database:</p>
<ul>
<li>Great choice for structured data</li>
<li>Great choice for demanding queries</li>
</ul>
<p>The biggest drawback of a non-relational database is the inability to dynamically change the schema. After all, if we want to add a new attribute to a relational database, this will affect the entire database.</p>
<p>At the same time, compared to non-relational databases, they need more time to execute and search for data.</p>
<p>Some relational databases:</p>
<ul>
<li><a target="_blank" href="https://www.mysql.com">MySQL</a>,</li>
<li><a target="_blank" href="https://mariadb.org">MariaDB</a>,</li>
<li><a target="_blank" href="https://www.postgresql.org">PostgreSQL</a></li>
<li><a target="_blank" href="https://www.microsoft.com/en-us/sql-server/sql-server-2019">Microsoft SQL-Server</a></li>
<li><a target="_blank" href="https://www.sqlite.org/index.html">SQLite</a></li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1652433413656/6pWa8CC-W.jpg" alt="Server" class="image--center mx-auto" /></p>
<h2 id="heading-non-relational-databases-nosql">Non-relational databases (NoSQL)</h2>
<p>Non-relational databases contain unstructured, structured or structured data, usually in a key-value pair.</p>
<p>The big advantage of those databases is the option of being very flexible. This allows you to quickly add new attributes which do not impact the full database. </p>
<p>The advantage of such a database is that we can store a lot of data in one table.</p>
<p>The non-relational database is faster than the relational sub-database.</p>
<p>The disadvantage of such a database is that each has its own method of making queries for managing data in the database.</p>
<p>Some non-relational databases:</p>
<ul>
<li><a target="_blank" href="https://www.mongodb.com">MongoDB</a></li>
<li><a target="_blank" href="https://redis.io">Redis</a></li>
<li><a target="_blank" href="https://www.couchbase.com">Couchbase</a></li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>I can figure out that relational databases are the best option in an application that had structured data and we want to have them portable and an option for use in different infrastructures. But, a lot of companies still use relational databases.</p>
<p>But non-relational databases get the most out when we start creating a project and want to have a lot of flexibility. Also, the non-relation database is great if we store a huge amount of data. </p>
<hr />
<p>If you like reading what I write, you can donate me a cup of coffee or start following me on Twitter(<a target="_blank" href="https://twitter.com/Patik123_">@Patik123_</a>).</p>
]]></content:encoded></item><item><title><![CDATA[Why is an SSL certificate important?🔐]]></title><description><![CDATA[A few days ago, I got a question from a colleague about why we need to have an SSL certified website nowadays.
I answered, “It's because you see the green lock in your browser,” off the top of my head. However, because I am the type of person who isn...]]></description><link>https://blog.thepatik.com/why-is-an-ssl-certificate-important</link><guid isPermaLink="true">https://blog.thepatik.com/why-is-an-ssl-certificate-important</guid><category><![CDATA[Web Development]]></category><category><![CDATA[SSL]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Tue, 05 Apr 2022 09:14:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1649150023858/zYHMSR-5w.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few days ago, I got a question from a colleague about why we need to have an SSL certified website nowadays.</p>
<p>I answered, “It's because you see the green lock in your browser,” off the top of my head. However, because I am the type of person who isn't pleased with such a response, I began my research. This is how the idea for this article came.</p>
<p>The SSL certificate allows us to have an encrypted connection on the HTTP protocol used to transfer the server's web pages to the browser.</p>
<p>With an SSL certificate, we prevent anyone from intercepting or accessing confidential data on the network as such (bank card numbers or passwords from web applications).</p>
<p>Because Google decided in 2018 to penalize all sites without an SSL certificate, indicating that the site is not secure is a must-have today.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1649148634353/hdARgeb9V.jpg" alt="Computer" /></p>
<h1 id="heading-what-types-of-ssl-do-we-know">What types of SSL do we know?</h1>
<p>We know three types of certificates, but they have different levels of authentication.</p>
<h3 id="heading-domain-certificate">Domain Certificate</h3>
<p>The domain certificate is one of the most common certificates in the world. It is also the cheapest, you can also get it for free.</p>
<p>When issuing a certificate, only domain ownership is verified. The disadvantage of these certificates is that they do not protect subdomains, but only domains.</p>
<h3 id="heading-business-certificate">Business certificate</h3>
<p>The business certificate has a medium level of trust, as it verifies domain ownership and the company that owns the domain when issuing the certificate. Business certificates are used by companies, non-profit organizations and governments, as they want to show that they are on the correct site of the company.</p>
<h3 id="heading-extended-ssl-certificates-ev-ssl">Extended SSL Certificates (EV SSL)</h3>
<p>Extended SSL certificates offer the highest level of trust. The issuing process also to verification, domain and company, ensuring that the connection between the server and the browser is encrypted.</p>
<p>In the address bar, it shows the company name in addition to the lock and HTTPS tag.</p>
<p>We also know three types of certificates, which differ in how many domains we can use.</p>
<h3 id="heading-wildcard-ssl-certificates">Wildcard SSL Certificates</h3>
<p>Wildcard certificates are alternate certificates and are issued to only one domain and allow installation on different subdomains. For example, if a certificate is issued for [example.com] (http://example.com), you can also install it on [blog.example.com] (http://blog.example.com) and <a target="_blank" href="http://mail.example.com">mail.example.com</a>.</p>
<p>The advantage is that we can protect multiple subdomains with one certificate instead of buying each subdomain.</p>
<h3 id="heading-multi-domain-ssl-certificates">Multi-domain SSL certificates</h3>
<p>Multi-domain certificates allow you to connect multiple domains under one SSL certificate. It is used when a company has several domains and wants to protect several domains with one certificate. Up to 100 domains can be protected by one SSL certificate.</p>
<h3 id="heading-single-domain-ssl-certificates">Single domain SSL certificates</h3>
<p>Single-domain certificates are intended and issued for only one domain. This means that they cannot be used for subdomains such as blog.example.com and mail.example.com if is a certificate issued for example.com.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1649148672380/sQxeJBjZB.jpg" alt="Wordpress" /></p>
<h1 id="heading-benefits-of-ssl-certificates">Benefits of SSL Certificates</h1>
<h3 id="heading-data-encryption">Data encryption</h3>
<p>In the first place, the SSL certificate encrypts the connection between the user and the server, thus preventing any data from being read during the transfer.</p>
<p>If you have an online store, and you are transferring personal data, the security of your visitors must be paramount, so you must install the certificate. </p>
<p>This also gains the additional trust of your visitors.</p>
<h3 id="heading-confirm-identity">Confirm identity</h3>
<p>With an SSL certificate, you not only protect visitors but also prove that you own the site. This gains the trust of visitors.</p>
<h3 id="heading-increases-seo-of-the-site">Increases SEO of the site</h3>
<p>It has been proven that using SSL certification increases the SEO of your website. With an SSL certificate, your site will be ranked higher among the hits in the browser.</p>
<h3 id="heading-speed-up-our-website">Speed up our website</h3>
<p>The SSL certificate allows the use of the HTTP/2 protocol, which reduces and speeds up our site as the protocol compresses the request heads.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1649149080072/2p1qk4Cy_.jpg" alt="Computer" /></p>
<h1 id="heading-what-is-the-difference-between-a-free-and-paid-ssl-certificate">What is the difference between a free and paid SSL certificate?</h1>
<p>Some providers such as Let’s Encrypt offer free domain certificates. Why do half the other providers offer paid certificates if I can get a certificate for free?</p>
<p>The difference is that both certificates provide data encryption but, the difference is in the extra trust of the users.</p>
<p>If you have one blog in WordPress or another CMS then free SSL is enough, but if you accept payments or run an online store then it is wise to buy an SSL certificate.</p>
<h1 id="heading-conclusion">Conclusion</h1>
<p>I hope I have introduced you to what SSL certificates exist and how they help today.</p>
<hr />
<p>Let's connect</p>
<p>🔹<a target="_blank" href="https://twitter.com/Patik123_">Twitter</a></p>
<p>🔹<a target="_blank" href="https://instagram.com/patik_123_">Instagram</a></p>
<p>🔹<a target="_blank" href="https://github.com/patik123">GitHub</a></p>
<p>🔹<a target="_blank" href="https://polywork.com/patik123">PolyWork</a></p>
<p>By the way, I love coffee.
<a href="https://www.buymeacoffee.com/patik123" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-blue.png" alt="Buy Me A Coffee" /></a></p>
]]></content:encoded></item><item><title><![CDATA[What is CRUD?]]></title><description><![CDATA[We interact with the CRUD application daily as part of our work. Maybe you record a task in your phone's calendar or take notes.
CRUD is the acronym for Create, Read, Update, and Delete. Any program's basic operations are known as CRUD.
The CRUD appl...]]></description><link>https://blog.thepatik.com/what-is-crud</link><guid isPermaLink="true">https://blog.thepatik.com/what-is-crud</guid><category><![CDATA[Web Development]]></category><category><![CDATA[crud]]></category><category><![CDATA[app development]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Fri, 25 Mar 2022 12:17:52 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1648210640964/Zn0g9h17q.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We interact with the CRUD application daily as part of our work. Maybe you record a task in your phone's calendar or take notes.</p>
<p>CRUD is the acronym for Create, Read, Update, and Delete. Any program's basic operations are known as CRUD.</p>
<p>The CRUD application consists of three key components:</p>
<ul>
<li>Database</li>
<li>User interface</li>
<li>API or back-end system</li>
</ul>
<p>The database is used to store data. A relational (SQL) or non-relational (NoSQL) database can be used. In most CRUD applications, relational databases are used. MySQL, MariaDB, PostgreSQL, and MS SQL are some of the most popular relational databases.</p>
<p>User Interface (UI) display data in a user-friendly format. With the user interface, the user makes API calls.</p>
<p>The API or back-end system communicates between the database and the user interface. It contains functions for performing CRUD operations.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1648210270299/ARmzGTHii.jpg" alt="Computer" /></p>
<h2 id="heading-crud-operations">CRUD operations</h2>
<p>We know four different CRUD operations: create, read, update and delete. Each of these operations has its function in the SQL programming language.</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>CREATE</td><td>INSERT</td></tr>
</thead>
<tbody>
<tr>
<td>READ</td><td>SELECT</td></tr>
<tr>
<td>UPDATE</td><td>UPDATE</td></tr>
<tr>
<td>DELETE</td><td>DELETE</td></tr>
</tbody>
</table>
</div><p>API requests can use different HTTP methods.</p>
<p>We know different HTTP methods such as POST, GET, PETCH, PUT, DELETE. Each letter of the CRUD can be associated with a specific HTTP method.</p>
<p>These are usually:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>CREATE</td><td>POST</td></tr>
</thead>
<tbody>
<tr>
<td>READ</td><td>GET</td></tr>
<tr>
<td>UPDATE</td><td>PUT</td></tr>
<tr>
<td>DELETE</td><td>DELETE</td></tr>
</tbody>
</table>
</div><p>The create operation allows us to create new rows in the database.</p>
<p>The read operation retrieves data from the database. It can return different data to us, depending on the filters created.</p>
<p>The update operation updates the existing data in the table. We can update only one line in or even more lines at a time.</p>
<p>The delete operation allows us to delete a row in the database.</p>
<p>Some CRUD application ideas</p>
<ul>
<li>To-Do list</li>
<li>library system,</li>
<li>account management system</li>
<li>notebook</li>
<li>contact manager</li>
</ul>
<p>I hope you have got an idea of what CRUD is and how we use it daily.</p>
<hr />
<p>You can start following me on <a target="_blank" href="https://twitter.com/Patik123_">Twitter</a>, or you can <a target="_blank" href="https://www.buymeacoffee.com/patik123">buy me a cup of coffee☕</a> if you enjoy it.</p>
]]></content:encoded></item><item><title><![CDATA[How did I build a mobile app for my school?]]></title><description><![CDATA[I've been working on an application for my school, School Center Celje, for the past six months. 
In school, we have more than over 3,000 students who must keep track of a lot of apps every day. This can be really time-consuming and sometimes stressf...]]></description><link>https://blog.thepatik.com/how-did-i-build-a-mobile-app-for-my-school</link><guid isPermaLink="true">https://blog.thepatik.com/how-did-i-build-a-mobile-app-for-my-school</guid><category><![CDATA[portfolio]]></category><category><![CDATA[app development]]></category><category><![CDATA[personal]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Sun, 20 Mar 2022 16:16:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1647792692833/Wncyf2MvS.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I've been working on an application for my school, <a target="_blank" href="https://www.sc-celje.si">School Center Celje</a>, for the past six months. </p>
<p>In school, we have more than over 3,000 students who must keep track of a lot of apps every day. This can be really time-consuming and sometimes stressful because you can forget to check one site and you aren't updated with the latest school events. </p>
<p>This is the reason why I decided to help my schoolmates and other students at my school. </p>
<p>And they have come idea about ŠCC Mobile. </p>
<p>Students can find a lot of functions in the app but its key features are the user's timetable, a review of school notifications, a menu, the option to check grades, absences, written examination dates, and teacher's contact information. The app also includes useful tools such as a calendar and tasks to help in the organizing of school duties.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1647788663197/JUf-fcQFx.jpg" alt="Image" /></p>
<h2 id="heading-how-is-the-application-built">How is the application built?</h2>
<p>I decided to create a <a target="_blank" href="https://blog.thepatik.com/is-a-progressive-web-application-the-futur">progressive web application (PWA)</a> because I wanted to cover as many devices as possible with the same codebase and remove the need for separate codebases for each platform. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1647788818666/SGN12-rRY.jpg" alt="Devices" /></p>
<p>So, I utilized the NuxtJS framework, which had a lot of excellent modules that have helped me and had to save me a lot of time.</p>
<p>I had to develop a back-end system that receives data from many sources since I required server processing for specific application tasks. </p>
<p>The PHP framework called Laravel is used to create the back-end system because it had a lot of functions that I need for my app. </p>
<p>Because I wanted to make the app available for all students at the school, I had to set up my server hosting both works. So, I set up my own VPS server with CentOS 7 operating system and <a target="_blank" href="https://control-webpanel.com">CentOS Web Panel</a> control panel, which saved me a lot of administrative work.</p>
<p>When creating the app, I had to write my API to process and process data from the school system.</p>
<h2 id="heading-tech-stack">Tech stack</h2>
<p>To create the entire application, I used:</p>
<ul>
<li><a target="_blank" href="https://laravel.com">Laravel</a>,</li>
<li><a target="_blank" href="https://nuxtjs.org">NuxtJS</a>,</li>
<li><a target="_blank" href="https://vuetifyjs.com/en">Vuetify</a>.</li>
</ul>
<p>I use NuxtJS modules (Auth, Matomo, PWA, Moment)</p>
<p>I use various APIs and web scraping to get all the data:</p>
<ul>
<li><a target="_blank" href="https://www.untis.at/en">Untis</a>,</li>
<li><a target="_blank" href="https://docs.microsoft.com/en-us/graph/overview">Microsoft Graph API</a>,</li>
<li>Web scarping school websites,</li>
<li>Web scarping pages with menus.</li>
</ul>
<h2 id="heading-some-screenshots-of-the-application">Some screenshots of the application</h2>
<center>
 <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1647788138772/Zl7q_rN2w.png?w=180&amp;h=400" alt="First page" /> 
First page
</center>

<center><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1647788176078/FULGku0eQ.png?w=180&amp;h=400" alt="Timetable" /> 
Timetable 
</center>

<center> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1647788223284/AcR76LKtx.png?w=180&amp;h=400" alt="Tasks" />
Tasks
</center>



<h2 id="heading-what-did-i-learn">What did I learn?</h2>
<p>Making this application taught me a lot about the VueJS framework and expanded my knowledge about the Laravel framework. At the same time, I was learning about server infrastructure setup and maintenance for the first time.</p>
<p>I also produced user instructions during the application's development, which considerably helped users in using the app.</p>
<p>For the first time, I was experimenting with the Microsoft Graph API, and I quickly understood how much it can do in Office 365.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>I’m very proud of myself since I first made an app that benefits people. I have gained a lot of new experiences and I am looking forward to the next challenges that will come.</p>
<p>I am also proud of the fact that the app can be used by 3,000 students and I have made their organisation easier.</p>
<p>I will continue to maintain the application and add new features.</p>
<p>Unfortunately, you cannot test or use the app, because it is intended only for students and teachers of the Celje School Center.</p>
<hr />
<p>You can start following me on <a target="_blank" href="https://twitter.com/Patik123_">Twitter</a>, or you can <a target="_blank" href="https://www.buymeacoffee.com/patik123">buy me a cup of coffee☕</a> if you enjoy it.</p>
]]></content:encoded></item><item><title><![CDATA[Is a progressive web application the future?]]></title><description><![CDATA[Time is money.

Today, we want to make as much software as possible with the least amount of effort. Large online stores are developing their own smartphone applications.
But what are the advantages of a progressive app for a business?
Benefits of a ...]]></description><link>https://blog.thepatik.com/is-a-progressive-web-application-the-future</link><guid isPermaLink="true">https://blog.thepatik.com/is-a-progressive-web-application-the-future</guid><category><![CDATA[Web Development]]></category><category><![CDATA[PWA]]></category><category><![CDATA[technology]]></category><category><![CDATA[Future]]></category><category><![CDATA[Mobile apps]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Mon, 21 Feb 2022 19:57:03 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1645473247127/0unG1BhtD.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote>
<p>Time is money.</p>
</blockquote>
<p>Today, we want to make as much software as possible with the least amount of effort. Large online stores are developing their own smartphone applications.</p>
<p>But what are the advantages of a progressive app for a business?</p>
<h2 id="heading-benefits-of-a-mobile-application-for-business">Benefits of a mobile application for business</h2>
<p>The great majority of us have a mobile device that we carry with us at all times. We check our e-mails, read the news, and shop online.</p>
<p>Many larger businesses have developed their own mobile app. Why?
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1645467403270/sUX9p1gta.jpg" alt="Mobile phone" /></p>
<p>Because the mobile application, among other things, gives consumers more options. It provides us with more opportunities to interact with potential consumers. It provides us with total creative control over our programs.</p>
<p>Above all, it provides us with unique chances to interact with our consumers.</p>
<p>A mobile application, on the other hand, is a significant investment for a company. Yes, this is correct, as an application must be developed for at least two separate platforms (Android and iOS).</p>
<p>This is where a progressive web application may help since it can drastically lower the cost of development.</p>
<h2 id="heading-progressive-web-application">Progressive web application</h2>
<p>A progressive web application (PWA) is a hybrid of a web app and a native app.</p>
<p>A progressive application is made up of a variety of technologies, browser APIs, and multiple processes rather than just one.</p>
<p>Access to user filesystem, user locations, push notifications, and WebRTC are some of the elements that may be employed in a progressive application.</p>
<h2 id="heading-differences-between-a-progressive-web-application-and-a-native-application">Differences between a progressive web application and a native application</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td>Progressive Web Application</td><td>Native application</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Programming languages</strong></td><td>​​Used HTML, JavaScript, CSS</td><td>Objective-C, Swift for iOS and Java, Kotlin for Android</td></tr>
<tr>
<td><strong>Cost of development</strong></td><td>Low (need only a web developer, updates reach users faster)</td><td>High (different programming languages require different developers)</td></tr>
<tr>
<td><strong>Distribution</strong></td><td>Via the website (user only needs URL and browser)</td><td>Various app stores (App Store, Huawei App Gallery, Google Play)</td></tr>
<tr>
<td><strong>Discoverability</strong></td><td>SEO (application can be found by searching in a search engine - the application is indexed)</td><td>ASO (application can only be detected within the application market)</td></tr>
<tr>
<td><strong>Security</strong></td><td>Uses HTTPS</td><td>It has more security options than PWA.</td></tr>
<tr>
<td><strong>Performance</strong></td><td>The progressive application depends on the browser</td><td>Native applications are faster than web applications</td></tr>
<tr>
<td><strong>Functions</strong></td><td>The progressive application cannot use all the features of the phone</td><td>Native app has access to all phone features and deeper access.</td></tr>
</tbody>
</table>
</div><h2 id="heading-conclusion">Conclusion</h2>
<p>When we have a small budget to work with and we don't have any demanding components in the program, a progressive application pays off to create.</p>
<p>However, we start constructing a native application when we require more sophisticated features with access to the user's device's native capabilities, and we need more complicated user apps if we want to have more security functions or start producing games.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1645470491875/AcUaDAMgb.jpg" alt="Computer dark" /></p>
<p>Progressive apps, in my view, will become more common in the near future since they minimize the cost of developing a mobile app for a firm and because each browser adds new capabilities every day.</p>
<p>Let's connect</p>
<p>🔹<a target="_blank" href="https://twitter.com/Patik123_">Twitter</a></p>
<p>🔹<a target="_blank" href="https://instagram.com/patik_123_">Instagram</a></p>
<p>🔹<a target="_blank" href="https://github.com/patik123">GitHub</a></p>
<p>By the way, I love coffee.
<a href="https://www.buymeacoffee.com/patik123" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-blue.png" alt="Buy Me A Coffee" /></a></p>
]]></content:encoded></item><item><title><![CDATA[How to bypass CAPTCHA?]]></title><description><![CDATA[Nowadays, almost every time we send a form, we are forced to solve a minor challenge. For many, this is a very annoying task. Well, here is the solution for those of us who hate saving CAPTCHA.
What is CAPTCHA, and how does it work?
CAPTCHA (Complete...]]></description><link>https://blog.thepatik.com/how-to-bypass-captcha</link><guid isPermaLink="true">https://blog.thepatik.com/how-to-bypass-captcha</guid><category><![CDATA[Beginner Developers]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Patrick]]></dc:creator><pubDate>Mon, 07 Feb 2022 12:00:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1644220673122/ISmFH8RNp.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Nowadays, almost every time we send a form, we are forced to solve a minor challenge. For many, this is a very annoying task. Well, here is the solution for those of us who hate saving CAPTCHA.</p>
<h2 id="heading-what-is-captcha-and-how-does-it-work">What is CAPTCHA, and how does it work?</h2>
<p>CAPTCHA (Completely Automated Public Turing Test to Tell Computers and Humans Apart) is a challenge that prevents computers from submitting forms that are not planned for them. </p>
<p>CAPTCHA tests can only be solved by humans, in theory. CAPTCHAs are becoming more and more complex as computers become more powerful and capable of recognizing characters (unfortunately).</p>
<p><strong>What are CAPTCHA's weaknesses?</strong></p>
<ul>
<li>It's often impossible to figure out what's on the Captcha test</li>
<li>Some CAPTCHAs aren't compatible with all browsers</li>
<li>Tests make website visitors feel uncomfortable</li>
</ul>
<h2 id="heading-2captchahttps2captchacom"><a target="_blank" href="https://2captcha.com">2Captcha</a></h2>
<p><a target="_blank" href="https://2captcha.com">2Captcha</a> is an image and CAPTCHA recognition service. 2Captcha's main purpose is for workers to solve CAPTCHA fast and correctly.
<a target="_blank" href="https://2captcha.com">2Captcha</a> allows you to solve almost all CAPTCHAs currently in use.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1644221080736/MMJABa7gQ.png" alt="2Captcha main webpage" /></p>
<h3 id="heading-2captcha-advantages">2Captcha Advantages</h3>
<ul>
<li>High level of accuracy</li>
<li>CAPTCHA resolution speed—around 12 seconds</li>
<li>Numerous APIs and SDKs for practically all programming languages</li>
<li>Nearly 100% rescue assurance</li>
</ul>
<h1 id="heading-how-to-use-javascript-to-solve-the-captcha-test">How to use JavaScript to solve the CAPTCHA test?</h1>
<p>Before we begin, we must first obtain the API key. It's available through the 2Captcha control panel. We create a user account if we haven't already done so before receiving the API key.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1644221135993/A2JAPDS0R.png" alt="2Captcha dashboard" /></p>
<p>Now we'll make a basic communication form. The user must complete the CAPTCHA test generated by the backend before submitting the message.</p>
<p><a target="_blank" href="https://drive.google.com/file/d/1Fg0aU1FIQdeD_poCRy4rLMVUnu6k2dtu/view?usp=sharing">This link</a> will take you to the complete source code. </p>
<p><strong>How our site works</strong></p>
<p>We make a request to 2Captcha to save CAPTCHA built with our backend when we push the solution button.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1644221219344/3uk-xaNl9.png" alt="Our example page" /></p>
<p>We won't be using the CAPTCHA auto-solve button in real life, of course. The goal of this example is to demonstrate how 2Captcha solves CAPTCHA.</p>
<p>Our JavaScript code</p>
<pre><code class="lang-js"><span class="hljs-keyword">import</span> Captcha <span class="hljs-keyword">from</span> <span class="hljs-string">'&lt;https://cdn.skypack.dev/2captcha&gt;'</span>;
<span class="hljs-keyword">const</span> solver = <span class="hljs-keyword">new</span> Captcha.Solver(<span class="hljs-string">"&lt;YOUR API KEY&gt;"</span>);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getBase64Image</span>(<span class="hljs-params">img</span>) </span>{
    <span class="hljs-keyword">var</span> canvas = <span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"canvas"</span>);
    canvas.width = img.width;
    canvas.height = img.height;
    <span class="hljs-keyword">var</span> ctx = canvas.getContext(<span class="hljs-string">"2d"</span>);
    ctx.drawImage(img, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>);
    <span class="hljs-keyword">var</span> dataURL = canvas.toDataURL(<span class="hljs-string">"image/png"</span>);
    <span class="hljs-keyword">return</span> dataURL.replace(<span class="hljs-regexp">/^data:image\\/</span>(png|jpg);base64,/, <span class="hljs-string">""</span>);
}

<span class="hljs-keyword">var</span> refreshButton = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"refresh-captcha"</span>);
<span class="hljs-keyword">var</span> captchaImage = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"image-captcha"</span>);
<span class="hljs-keyword">var</span> solveButton = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"solve"</span>);
<span class="hljs-keyword">var</span> token = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"token"</span>);

refreshButton.onclick = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">event</span>) </span>{
    event.preventDefault();
    captchaImage.src = <span class="hljs-string">'captcha/image.php?'</span> + <span class="hljs-built_in">Date</span>.now();
}

solveButton.onclick = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">event</span>) </span>{
    event.preventDefault();
    solver.imageCaptcha(getBase64Image(captchaImage), <span class="hljs-string">"base64"</span>).then(<span class="hljs-function">(<span class="hljs-params">res</span>) =&gt;</span> {
        <span class="hljs-built_in">console</span>.log(res);
        token.value = res[<span class="hljs-string">'data'</span>];
    });
}
</code></pre>
<p>The code makes use of the JavaScript package 2Captcha, which handles all aspects of sending and receiving the 2Captcha API answers. The library's documentation <a target="_blank" href="https://github.com/furry/2captcha#readme">may be found here</a>.</p>
<p>CAPTCHA solving demonstration</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1644221028440/6KShjvWZr.gif" alt="demo" /></p>
<h2 id="heading-bonus">Bonus 🤑</h2>
<p><a target="_blank" href="https://blog.thepatik.eu.org/how-to-make-money-as-a-programmer-in-a-simple-way">In one of my previous posts</a>, I looked at easy ways for us to make money. We may now add another choice. This one is accomplished by saving CAPTCHA. Starting at $0.50 per hour, you can make (maybe more). Before you begin solving CAPTCHAs, you must first complete a 10-minute training session about how to solve a CAPTCHA. This is to avoid numerous CAPTCHA being lost.</p>
<h2 id="heading-final-thoughts">Final Thoughts</h2>
<p>2Captcha helps us to solve CAPTCHA for us automatically.
If we don't want to mess around with the API, there is a free Chrome plug-in that will solve all CAPTCHA checks for us without any further setups. You can download the plug-in at the following link: <a target="_blank" href="https://chrome.google.com/webstore/detail/2captcha-solver/ifibfemgeogfhoebkmokieepdoobkbpo">2Captcha Solver</a></p>
<p><strong>Let’s connect</strong></p>
<ul>
<li><a target="_blank" href="https://twitter.com/Patik123_">Twitter</a></li>
<li><a target="_blank" href="https://github.com/patik123">GitHub</a></li>
<li><a target="_blank" href="https://www.polywork.com/patik123">PolyWork</a></li>
</ul>
<p><a href="https://www.buymeacoffee.com/patik123" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-blue.png" alt="Buy Me A Coffee" /></a></p>
]]></content:encoded></item></channel></rss>