<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Georgios Komninos</title>
    <description>The latest articles on Forem by Georgios Komninos (@gosom).</description>
    <link>https://forem.com/gosom</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1647749%2F2988f418-d92a-4b35-a8c9-7f83cc27a5d3.jpeg</url>
      <title>Forem: Georgios Komninos</title>
      <link>https://forem.com/gosom</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gosom"/>
    <language>en</language>
    <item>
      <title>Tutorial: Repository pattern in Golang with Test Driven Development</title>
      <dc:creator>Georgios Komninos</dc:creator>
      <pubDate>Wed, 19 Jun 2024 05:00:40 +0000</pubDate>
      <link>https://forem.com/gosom/tutorial-repository-pattern-in-golang-with-test-driven-development-2gme</link>
      <guid>https://forem.com/gosom/tutorial-repository-pattern-in-golang-with-test-driven-development-2gme</guid>
      <description>&lt;p&gt;In the last blog post I showed you how you can implement the repository pattern in Golang. We used SQLite and GORM to implement the CompanyRepository . Today I am going to show you how to implement the InvoiceRepository .The implementation will be ve...&lt;/p&gt;

</description>
      <category>generalprogramming</category>
      <category>go</category>
      <category>coding</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Crafting a Web Application with Golang: A Step-by-Step Guide</title>
      <dc:creator>Georgios Komninos</dc:creator>
      <pubDate>Tue, 18 Jun 2024 20:46:35 +0000</pubDate>
      <link>https://forem.com/gosom/crafting-a-web-application-with-golang-a-step-by-step-guide-8ck</link>
      <guid>https://forem.com/gosom/crafting-a-web-application-with-golang-a-step-by-step-guide-8ck</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This is the first part the series &lt;a href="https://blog.gkomninos.com/series/webapp-using-golang"&gt;Build a Web App with Golang&lt;/a&gt; . I am going to show you how you can build a web application using Golang. In fact, we are going to build an application that I need.&lt;/p&gt;

&lt;p&gt;I this blog post we will cover the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scope, meaning we will define what we want to build&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal of this blog post is to understand the problem and it's domain. This will help us to understand what we need to code.&lt;/p&gt;

&lt;p&gt;I will try to keep each blog post in a separate git branch. I believe this will make it easier for you to follow the tutorial.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scope
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;As a freelancer I want a web application in which I will login and I can create invoices for my clients.&lt;/p&gt;

&lt;p&gt;I want to be able to view the invoices created and download a PDF version&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's breakdown the above requirements one by one.&lt;/p&gt;

&lt;p&gt;First, let's see what an invoice contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Freelancer's details which include:&lt;br&gt;&lt;br&gt;
Company Name&lt;br&gt;&lt;br&gt;
Company Address&lt;br&gt;&lt;br&gt;
Email&lt;br&gt;&lt;br&gt;
Tax Number&lt;br&gt;&lt;br&gt;
VAT Number&lt;br&gt;&lt;br&gt;
Bank Accounts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Client details which include:&lt;br&gt;&lt;br&gt;
Company Name&lt;br&gt;&lt;br&gt;
Company Address&lt;br&gt;&lt;br&gt;
Email&lt;br&gt;&lt;br&gt;
VAT number&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Invoice Details:
Invoice Number
Invoice Date
Line Items&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here a sample invoice:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzcfz0mk92sn4zngjho69.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzcfz0mk92sn4zngjho69.png" alt="Image description" width="800" height="780"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A Line Item, consists of:&lt;br&gt;&lt;br&gt;
        - Description&lt;br&gt;&lt;br&gt;
        - Disbursements&lt;br&gt;&lt;br&gt;
        - Fees&lt;/p&gt;

&lt;p&gt;A Bank Account, consists of:&lt;br&gt;&lt;br&gt;
        - Bank Name&lt;br&gt;&lt;br&gt;
        - Account No.&lt;br&gt;&lt;br&gt;
        - IBAN&lt;br&gt;&lt;br&gt;
        - BIC&lt;/p&gt;

&lt;p&gt;We also need to have the VAT rate for our country and the amount of days that the invoice is payable within.&lt;/p&gt;

&lt;p&gt;Let's now discuss the invoice number. This should be unique per invoice and in most of the cases it must be sequential. For my case the invoice number has the form for example 1030/24 which means that the invoice belongs to 2024 year and it has the number 1030. The next invoice should be 1031/24 and so on.&lt;br&gt;&lt;br&gt;
    This generation should be automated.&lt;/p&gt;

&lt;p&gt;Since this is an MVP and it should work only for one freelancer we will use HTTP Basic Authentication and the UI will be really minimal&lt;/p&gt;

&lt;h3&gt;
  
  
  Pages
&lt;/h3&gt;

&lt;p&gt;Since we will build a web application let's define the pages that we want to build.&lt;br&gt;&lt;br&gt;
That's a draft but it will help us to get started.&lt;/p&gt;

&lt;p&gt;- / : this is the homepage of the application. It should display a list of all the invoices created with pagination. Next to each invoice we want to have a button to view its details.&lt;br&gt;&lt;br&gt;
- /settings: Here we will display our company's details&lt;br&gt;&lt;br&gt;
-/settings/edit: A form to edit our company's details&lt;br&gt;&lt;br&gt;
- /clients: We will display a list of our clients&lt;br&gt;&lt;br&gt;
- /clients/id: It will display the details for the client with id id&lt;br&gt;&lt;br&gt;
- /clients/id/edit: a form to edit the client's details with id&lt;br&gt;&lt;br&gt;
- /clients/new: a form to add a new client&lt;br&gt;&lt;br&gt;
- /invoices/id/download: this will download the invoice with id id&lt;br&gt;&lt;br&gt;
- /invoices/id: we will view the details of an invoice&lt;br&gt;&lt;br&gt;
- /invoices/new: a form to create a new invoice&lt;/p&gt;

&lt;h3&gt;
  
  
  Technologies that we will use
&lt;/h3&gt;

&lt;p&gt;We need to store our data somewhere. For simplicity and easy of deployment we are going to use the awesome &lt;a href="https://sqlite.org/"&gt;SQLite&lt;/a&gt; DBMS.&lt;/p&gt;

&lt;p&gt;This post is all about Golang so that's the back-end language. However we are going to use the &lt;a href="https://echo.labstack.com/"&gt;Echo Framework&lt;/a&gt; and &lt;a href="https://gorm.io/index.html"&gt;GORM&lt;/a&gt; to speedup development.&lt;/p&gt;

&lt;p&gt;For the front-end I am not sure yet, most likely we are going to use &lt;a href="https://getbootstrap.com/"&gt;Bootstrap&lt;/a&gt; . I am also pretty sure that we are going to use ChatGPT to write the basic HTML and CSS for us.&lt;/p&gt;

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

&lt;p&gt;In the blog post we will dive into coding. We will create our git repository and setup some basics tooling that will save us a lot of time while we are developing.  &lt;/p&gt;

&lt;p&gt;I expect to release the next blog post of the tutorial every day.  &lt;/p&gt;

&lt;p&gt;If you have any questions or requests please write a comment.  &lt;/p&gt;

&lt;p&gt;Please subscribe to my newsletter so you get the updates.  &lt;/p&gt;

&lt;p&gt;Finally, just today I created an &lt;a href="https://x.com/gkomdev"&gt;X Account&lt;/a&gt; and I would love to start having some followers.&lt;/p&gt;

</description>
      <category>go</category>
      <category>webdev</category>
      <category>coding</category>
    </item>
    <item>
      <title>Tutorial: Implementing Repository with GORM and SQLite</title>
      <dc:creator>Georgios Komninos</dc:creator>
      <pubDate>Tue, 18 Jun 2024 05:00:47 +0000</pubDate>
      <link>https://forem.com/gosom/tutorial-implementing-repository-with-gorm-and-sqlite-4obk</link>
      <guid>https://forem.com/gosom/tutorial-implementing-repository-with-gorm-and-sqlite-4obk</guid>
      <description>&lt;p&gt;In the previous part of the series we created the required interface for you invoice generation/management web application. In this post we are going to provide and implementation of the CompanyRepository . In our requirements in the first part of th...&lt;/p&gt;

</description>
      <category>generalprogramming</category>
      <category>golanguage</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Tutorial: Defining the Domain entities</title>
      <dc:creator>Georgios Komninos</dc:creator>
      <pubDate>Mon, 17 Jun 2024 05:00:27 +0000</pubDate>
      <link>https://forem.com/gosom/tutorial-defining-the-domain-entities-3d42</link>
      <guid>https://forem.com/gosom/tutorial-defining-the-domain-entities-3d42</guid>
      <description>&lt;p&gt;This blog is the part of the series Building a Web App with Golang. In today's article we are going to define the basic entities and the operations on them for our web application. In the first part we defined the scope of the application. We are goi...&lt;/p&gt;

</description>
      <category>golanguage</category>
      <category>domaindrivendesign</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Tutorial: Deployment of Golang web app using Systemd</title>
      <dc:creator>Georgios Komninos</dc:creator>
      <pubDate>Sun, 16 Jun 2024 05:00:20 +0000</pubDate>
      <link>https://forem.com/gosom/tutorial-deployment-of-golang-web-app-using-systemd-23pn</link>
      <guid>https://forem.com/gosom/tutorial-deployment-of-golang-web-app-using-systemd-23pn</guid>
      <description>&lt;p&gt;Today, I am going to show you a simple way of deploying a Golang web application. We are going to use Systemd and a Makefile to deploy the code when we merge to main branch. In a future blog post we will revisit and show you how you can deploywhen yo...&lt;/p&gt;

</description>
      <category>golanguage</category>
      <category>tutorial</category>
      <category>golangwebdevelopment</category>
    </item>
    <item>
      <title>Building a Robust Web Server in Go: A Step-by-Step Guide</title>
      <dc:creator>Georgios Komninos</dc:creator>
      <pubDate>Sat, 15 Jun 2024 05:00:44 +0000</pubDate>
      <link>https://forem.com/gosom/building-a-robust-web-server-in-go-a-step-by-step-guide-4iih</link>
      <guid>https://forem.com/gosom/building-a-robust-web-server-in-go-a-step-by-step-guide-4iih</guid>
      <description>&lt;p&gt;We continue our journey implementing a real world web application in Golang in this blog post. In the previous post we setup our docker development environment that just prints hello world. In this post we are going to setup a real webserver that it'...&lt;/p&gt;

</description>
      <category>coding</category>
      <category>go</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Setting up a Docker development enviroment for Go</title>
      <dc:creator>Georgios Komninos</dc:creator>
      <pubDate>Fri, 14 Jun 2024 05:00:08 +0000</pubDate>
      <link>https://forem.com/gosom/setting-up-a-docker-development-enviroment-for-go-4li7</link>
      <guid>https://forem.com/gosom/setting-up-a-docker-development-enviroment-for-go-4li7</guid>
      <description>&lt;p&gt;Welcome back to our Golang web application series! If you're excited to learn web development with Golang, you're in the right place. In this guide, we'll set up a solid development environment. By the end, you'll have a well-organized project and be...&lt;/p&gt;

</description>
      <category>coding</category>
      <category>tutorial</category>
      <category>go</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Use context in your HTTP handlers</title>
      <dc:creator>Georgios Komninos</dc:creator>
      <pubDate>Wed, 12 Jun 2024 06:09:32 +0000</pubDate>
      <link>https://forem.com/gosom/use-context-in-your-http-handlers-51h0</link>
      <guid>https://forem.com/gosom/use-context-in-your-http-handlers-51h0</guid>
      <description>&lt;p&gt;Learn to handle context in HTTP handlers to manage client disconnections and long-running tasks efficiently&lt;/p&gt;

</description>
      <category>golanguage</category>
      <category>coding</category>
      <category>bestpractices</category>
      <category>technology</category>
    </item>
    <item>
      <title>Unveiling a Powerful Google Maps Scraping Tool</title>
      <dc:creator>Georgios Komninos</dc:creator>
      <pubDate>Sun, 03 Dec 2023 11:39:14 +0000</pubDate>
      <link>https://forem.com/gosom/unveiling-a-powerful-google-maps-scraping-tool-k0d</link>
      <guid>https://forem.com/gosom/unveiling-a-powerful-google-maps-scraping-tool-k0d</guid>
      <description>&lt;p&gt;Introduction In a world where data is increasingly crucial, having the right tools to gather information is essential. This introduces a command-line Google Maps scraper, developed using the Scrapemate web crawling framework. Ideal for business analy...&lt;/p&gt;

</description>
      <category>scraping</category>
      <category>dataanalysis</category>
      <category>googlemaps</category>
      <category>datascraper</category>
    </item>
    <item>
      <title>PostgreSQL window functions crash course</title>
      <dc:creator>Georgios Komninos</dc:creator>
      <pubDate>Sat, 20 May 2023 10:24:50 +0000</pubDate>
      <link>https://forem.com/gosom/postgresql-window-functions-crash-course-e7c</link>
      <guid>https://forem.com/gosom/postgresql-window-functions-crash-course-e7c</guid>
      <description>&lt;p&gt;Discover the power of PostgreSQL window functions with this beginner-friendly guide. Learn to analyze data with real-world examples and easy steps.&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>postgres</category>
      <category>dataanalysis</category>
    </item>
    <item>
      <title>Distributed Google Maps scraping</title>
      <dc:creator>Georgios Komninos</dc:creator>
      <pubDate>Sun, 14 May 2023 15:10:45 +0000</pubDate>
      <link>https://forem.com/gosom/distributed-google-maps-scraping-1a05</link>
      <guid>https://forem.com/gosom/distributed-google-maps-scraping-1a05</guid>
      <description>&lt;p&gt;Introduction In this post, I will show you how you can utilize the power of Kubernetes to scrape data from Google Maps without using an API key. for the tutorial, I will use as an example deploying to But this will work in any managed Kubernetes pro...&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>googlemapsscraper</category>
      <category>googlemapscrawler</category>
      <category>go</category>
    </item>
    <item>
      <title>How to extract data from Google maps using Golang</title>
      <dc:creator>Georgios Komninos</dc:creator>
      <pubDate>Sun, 07 May 2023 07:26:23 +0000</pubDate>
      <link>https://forem.com/gosom/how-to-extract-data-from-google-maps-using-golang-12k5</link>
      <guid>https://forem.com/gosom/how-to-extract-data-from-google-maps-using-golang-12k5</guid>
      <description>&lt;p&gt;This post introduces a command-line application that allows you to extract data from Google Maps. If you want to extract to collect some data for local businesses using Google Maps then this tool is for you. The tools retrieve and export to a CSV fil...&lt;/p&gt;

</description>
      <category>scraping</category>
      <category>googlemapscrawler</category>
      <category>datascraping</category>
      <category>marketing</category>
    </item>
  </channel>
</rss>
