<?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: Anisha Mohanty</title>
    <description>The latest articles on Forem by Anisha Mohanty (@anisha).</description>
    <link>https://forem.com/anisha</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%2F383122%2F86d7670a-2a95-4ec6-b89f-584b7d14701a.jpg</url>
      <title>Forem: Anisha Mohanty</title>
      <link>https://forem.com/anisha</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/anisha"/>
    <language>en</language>
    <item>
      <title>GraphQL CRUD Java: Overview </title>
      <dc:creator>Anisha Mohanty</dc:creator>
      <pubDate>Thu, 05 Nov 2020 14:54:31 +0000</pubDate>
      <link>https://forem.com/anisha/graphql-crud-java-overview-36dj</link>
      <guid>https://forem.com/anisha/graphql-crud-java-overview-36dj</guid>
      <description>&lt;h2&gt;
  
  
  What is GraphQL CRUD Java?
&lt;/h2&gt;

&lt;p&gt;GraphQLCRUD java is an extensive framework built using the GraphQLCRUD spec which provides a specification for common operation on top of GraphQL. It provides numerous options for users to access and modify their data from any data sources they are connected to.&lt;/p&gt;

&lt;h3&gt;
  
  
  Common Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check specifications for patterns and pick only those that will really work for your specific database or business requirements.&lt;/li&gt;
&lt;li&gt;It provides canonical versions and other variants giving you an overview of different approaches used in most schemas.&lt;/li&gt;
&lt;li&gt;Focus on your business logic and data and generate GraphQL CRUD compliant schemas in any language of your choice.&lt;/li&gt;
&lt;li&gt;It abstracts from large GraphQL vendors giving you flexibility, and the ability to migrate without rebuilding your clients and resolves.&lt;/li&gt;
&lt;li&gt;It focuses on productivity by giving developers powerful query capabilities that are not specific to any GraphQL solution providers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  CRUD methods
&lt;/h3&gt;

&lt;p&gt;GraphQL CRUD java defines different CRUD capabilities that represent various operations that can be executed on a set of objects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create: create an object&lt;/li&gt;
&lt;li&gt;Update: update a specific object's properties&lt;/li&gt;
&lt;li&gt;Delete: delete a specific object by its ID&lt;/li&gt;
&lt;li&gt;Get: get a specific object by its ID&lt;/li&gt;
&lt;li&gt;Find: find multiple objects&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Capabilities
&lt;/h3&gt;

&lt;p&gt;GraphQL CRUD java defines different capabilities that developers can enable to modify what queries can be made against the service. Examples of these capabilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pagination: Ability to paginate content&lt;/li&gt;
&lt;li&gt;Filtering: Ability to perform filtering on specific fields&lt;/li&gt;
&lt;li&gt;Countability: Ability to count the total number of objects&lt;/li&gt;
&lt;li&gt;Consistency: Ability to verify whether a write operation is overriding data&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How it works?
&lt;/h3&gt;

&lt;p&gt;Take any database, the GraphQL CRUD java engine can automatically generate a GraphQL schema and process GraphQL queries and mutations. Here’s what the engine does under the hood.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The GraphQL CRUD java engine automatically generates GraphQL schema components and creates relationships between them.&lt;/li&gt;
&lt;li&gt;It defines a GraphQL type definition for your database.&lt;/li&gt;
&lt;li&gt;Provides Query with &lt;code&gt;filter&lt;/code&gt;,&lt;code&gt;order_by&lt;/code&gt;, and &lt;code&gt;page&lt;/code&gt; arguments.&lt;/li&gt;
&lt;li&gt;Provides Insert mutations with the &lt;code&gt;input&lt;/code&gt; argument that supports insert operation.&lt;/li&gt;
&lt;li&gt;Provides Update mutation with &lt;code&gt;filter&lt;/code&gt; and &lt;code&gt;input&lt;/code&gt; argument that supports bulk updates.&lt;/li&gt;
&lt;li&gt;Provides Delete mutation with a &lt;code&gt;filter&lt;/code&gt; argument that supports bulk deletes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Example: Fetch list of all accounts
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Input
{
  accounts {
    account_id
    status
    ssn
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Output
{
  "data": {
    "accounts": [
      {
        "account_id": "19980001",
        "status": "Personal",
        "ssn": "CST01002"
      },
      {
        "account_id": "19980002",
        "status": "Personal",
        "ssn": "CST01002"
      },
      {
        "account_id": "19980003",
        "status": "Personal",
        "ssn": "CST01003"
      }
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Example: Fetch an account using the primary key
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Input
{
  account(account_id: 19980001) {
    account_id
    ssn
    status
    type
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Output
{
  "data": {
    "account": {
      "account_id": "19980001",
      "ssn": "CST01002",
      "status": "Personal",
      "type": "Active"
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Example: Fetch a customer whose name is James
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Input
{
  customers(filter: {
    firstname: {
      eq: "James"
    }
  }) {
    firstname
    lastname
    ssn
    phone
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Output
{
  "data": {
    "customers": [
      {
        "firstname": "James",
        "lastname": "Drew",
        "ssn": "CST01036",
        "phone": "(216)555-6523"
      }
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Example: Fetch 2 customers from the list of all customers, starting from first
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Input
{
  customers(page: {
    limit: 2
  }) {
    firstname
    lastname
    ssn
    phone
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Output
{
  "data": {
    "customers": [
      {
        "firstname": "John",
        "lastname": "Doe",
        "ssn": "CST01002  ",
        "phone": "(646)555-1776"
      },
      {
        "firstname": "Bob",
        "lastname": "Smith",
        "ssn": "CST01003  ",
        "phone": "(412)555-4327"
      }
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Example: Fetch 2 customers from the list of all customers, starting from the 2nd customer
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Input
{
  customers(filter: {
    firstname: {
      startsWith: "J"
    }
  }, page: {
    limit: 2,
    offset: 2
  }) {
    firstname
    lastname
    ssn
    phone
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Output
{
  "data": {
    "customers": [
      {
        "firstname": "Jack",
        "lastname": "Corby",
        "ssn": "CST01015  ",
        "phone": "(469)555-8023"
      },
      {
        "firstname": "James",
        "lastname": "Drew",
        "ssn": "CST01036  ",
        "phone": "(216)555-6523"
      }
    ]
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Example: Insert a new customer object and return the inserted customer object in the response
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Input
mutation {
  createCustomer(input: {
    firstname: "James",
    lastname: "Corners",
    ssn: "CST00989"
  }) {
    firstname
    lastname
    ssn
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Output
{
  "data": {
    "createCustomer": {
      "firstname": "James",
      "lastname": "Corners",
      "ssn": "CST00989"
    }
  }
} 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Example: Update a customer with the name Bob and return the updated customer object in the response
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Input
mutation {
  updateCustomer (input: {
    firstname: "Andrew",
    lastname: "Moore"
  }, filter: {
    firstname: {
      eq: "Bob"
    }
  }) {
    firstname
    lastname
    ssn
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Output
{
  "data": {
    "updateCustomer": {
      "firstname": "Andrew",
      "lastname": "Moore",
      "ssn": "CST01003"
    }
  }
} 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Example: Delete a customer where name is Andrew
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Input
mutation {
  deleteCustomer(filter: {
    firstname: {
      eq: "Andrew"
    }
  }) {
    firstname
    lastname
    ssn
    phone
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Output
{
  "data": {
    "deleteCustomer": {
      "firstname": "Andrew",
      "lastname": "Moore",
      "ssn": "CST01003"
    }
  }
} 

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can explore the entire schema and the available queries using the GraphiQL interface. You can expand the framework as per your needs to make it more robust.&lt;/p&gt;

&lt;p&gt;To get a detailed understanding or to contribute check out the GitHub repository &lt;a href="https://github.com/graphqlcrud/graphqlcrud-java"&gt;here&lt;/a&gt; and if you like the work drop a ⭐ in the repository.&lt;/p&gt;

&lt;p&gt;Happy Reading! ❤️ &lt;/p&gt;

</description>
      <category>graphql</category>
      <category>java</category>
      <category>showdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Drop your Hacktoberfest 2020 projects! 🥳</title>
      <dc:creator>Anisha Mohanty</dc:creator>
      <pubDate>Thu, 17 Sep 2020 09:47:01 +0000</pubDate>
      <link>https://forem.com/anisha/drop-your-hacktoberfest-2020-projects-1ge3</link>
      <guid>https://forem.com/anisha/drop-your-hacktoberfest-2020-projects-1ge3</guid>
      <description>&lt;p&gt;Join the global community for the yearly celebration of open source software. Hacktoberfest is a monthlong celebration of open source software organized by DigitalOcean.&lt;/p&gt;

&lt;p&gt;I am excited for Hacktoberfest 2020 and  looking forward to contribute in some exciting projects. Drop your awesome github projects links and I will share the best ones as well. Looking forward to work with your exciting projects. &lt;/p&gt;

&lt;p&gt;May the source be with you. ✨&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>hacktoberfest</category>
      <category>discuss</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Golang Learning Resources</title>
      <dc:creator>Anisha Mohanty</dc:creator>
      <pubDate>Thu, 27 Aug 2020 15:39:08 +0000</pubDate>
      <link>https://forem.com/anisha/golang-learning-resources-4b1l</link>
      <guid>https://forem.com/anisha/golang-learning-resources-4b1l</guid>
      <description>&lt;p&gt;Hey everyone, I have started learning Golang recently and in this article, I am going to list a few useful resources for beginners getting started with Golang.&lt;/p&gt;

&lt;h3&gt;
  
  
  🏷️ Online Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tour.golang.org/welcome/1"&gt;The Go Programming Language Tour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=&amp;amp;cad=rja&amp;amp;uact=8&amp;amp;ved=2ahUKEwjp6P3B0bvrAhVg4nMBHX2mADYQFjACegQIAxAB&amp;amp;url=https%3A%2F%2Fwww.linkedin.com%2Flearning%2Fgo-essential-training&amp;amp;usg=AOvVaw1qGOsULZK_GUT5mIaDtJGi"&gt;Go Essentials Training&lt;/a&gt; by  Miki Tebeka on LinkedIn Learning&lt;/li&gt;
&lt;li&gt;&lt;a href="https://golang.org/doc/effective_go.html"&gt;Effective Go&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://golang.org/doc/code.html"&gt;How to Write Go Code &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.geeksforgeeks.org/golang/"&gt;Go Programming Language&lt;/a&gt; by GeeksForGeeks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏷️ Books
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.gopl.io/"&gt;The Go Programming Language&lt;/a&gt; by Alan A. A. Donovan and Brian W. Kernighan&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.golangbootcamp.com/"&gt;Go Bootcamp&lt;/a&gt; by Matt Aimonetti&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏷️ Videos and Podcasts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gifm.dev/"&gt;Go in 5 Minitues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://gophercises.com/"&gt;Gophercises&lt;/a&gt; by Jon Calhoun&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏷️ Editors and IDEs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.jetbrains.com/go/"&gt;GoLand&lt;/a&gt; by Jetbrains&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏷️ Community Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/golang/go/wiki"&gt;Go Community Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://forum.golangbridge.org/"&gt;Go Forum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.golang.org/"&gt;The Go Blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are some of my recommendations, feel free to add more resources in the comments. Happy Learning! 🚀&lt;/p&gt;

</description>
      <category>go</category>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Basic git commands </title>
      <dc:creator>Anisha Mohanty</dc:creator>
      <pubDate>Mon, 24 Aug 2020 16:24:22 +0000</pubDate>
      <link>https://forem.com/anisha/basic-git-commands-33ec</link>
      <guid>https://forem.com/anisha/basic-git-commands-33ec</guid>
      <description>&lt;p&gt;Working with Git on the command line can be messy. To help with that, I have listed together with some basic Git commands, what each one means, and how to use them. &lt;/p&gt;

&lt;h4&gt;
  
  
  Command: &lt;code&gt;git init&lt;/code&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Usage :
&lt;/h4&gt;

&lt;p&gt;Used to create an empty Git repository or reinitialize an existing one. Also, you create a repository within a new directory by specifying the project name.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git init 

#initailize empty git repository with a name
$ git init &amp;lt;project-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Command: &lt;code&gt;git clone&lt;/code&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Usage :
&lt;/h4&gt;

&lt;p&gt;Used to create a local working copy of an existing remote repository.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git clone &amp;lt;remote-repository&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Command: &lt;code&gt;git add&lt;/code&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Usage :
&lt;/h4&gt;

&lt;p&gt;Adds files in the to the staging area for Git. Before a commit is made to a repository, the file needs to be added to the Git index.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#add all files
$ git add .

#add a specific file:
$ git add &amp;lt;file-name&amp;gt;

#add an entire directory:
$ git add &amp;lt;directory-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Command: &lt;code&gt;git rm&lt;/code&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Usage :
&lt;/h4&gt;

&lt;p&gt;Remove files from the working tree and from the index.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#remove a file from the working index (cached)
$ git rm --cached &amp;lt;file-name&amp;gt;

#delete a file (force)
$ git rm -f &amp;lt;file-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Command: &lt;code&gt;git log&lt;/code&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Usage :
&lt;/h4&gt;

&lt;p&gt;Show commit logs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#show entire git log
$ git log

#show git log based on commit author
$ git log --&amp;lt;author&amp;gt;="Author Name"
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Command: &lt;code&gt;git status&lt;/code&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Usage :
&lt;/h4&gt;

&lt;p&gt;Show the working tree status.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git status
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Command: &lt;code&gt;git branch&lt;/code&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Usage :
&lt;/h4&gt;

&lt;p&gt;List, create or delete branches.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#create a new branch
$ git branch &amp;lt;branch-name&amp;gt;

#list all remote or local branches
$ git branch -a

#delete a branch
$ git branch -d &amp;lt;branch-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Command: &lt;code&gt;git checkout&lt;/code&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Usage :
&lt;/h4&gt;

&lt;p&gt;Switch branches or restore working tree files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#checkout an existing branch
$ git checkout &amp;lt;branch-name&amp;gt;

#checkout and create a new branch 
$ git checkout -b &amp;lt;new-branch&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Command: &lt;code&gt;git commit&lt;/code&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Usage :
&lt;/h4&gt;

&lt;p&gt;Record changes to the repository.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#add a commit with a message
$ git commit -m "commit message in quotes"
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Command: &lt;code&gt;git merge&lt;/code&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Usage :
&lt;/h4&gt;

&lt;p&gt;Join two or more development histories together.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#merge changes into current branch
$ git merge &amp;lt;branch-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Command: &lt;code&gt;git fetch&lt;/code&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Usage :
&lt;/h4&gt;

&lt;p&gt;Download objects and refs from another repository.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#fetch all of the branches from the repository
$ git fetch &amp;lt;remote-name&amp;gt;

#fetch the specified branch
$ git fetch &amp;lt;remote-name&amp;gt; &amp;lt;branch-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Command: &lt;code&gt;git pull&lt;/code&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Usage :
&lt;/h4&gt;

&lt;p&gt;Fetch from and integrate with another repository or a local branch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git pull &amp;lt;branch-name&amp;gt; &amp;lt;remote-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Command: &lt;code&gt;git push&lt;/code&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Usage :
&lt;/h4&gt;

&lt;p&gt;Update remote refs along with associated objects.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git push &amp;lt;remote-name&amp;gt; &amp;lt;branch-name&amp;gt;

# push all local branches to a remote repository
$ git push —all
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Command: &lt;code&gt;git remote&lt;/code&gt;
&lt;/h4&gt;

&lt;h4&gt;
  
  
  Usage :
&lt;/h4&gt;

&lt;p&gt;Used to connect a local repository with a remote repository.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#add remote repository
$ git remote &amp;lt;command&amp;gt; &amp;lt;remote-name&amp;gt; &amp;lt;remote-URL&amp;gt;

#list named remote repositories
$ git remote -v
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Further Learning
&lt;/h3&gt;

&lt;p&gt;There are plenty of more commands, here are few references that might be useful.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://confluence.atlassian.com/bitbucketserver/basic-git-commands-776639767.html"&gt;Basic Git Commands by Atlassian Git Tutorials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://guides.github.com/introduction/git-handbook/"&gt;Git Handbook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.hostinger.in/tutorials/basic-git-commands"&gt;Git Commands by Hostinger Tutorials&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading, I hope you &lt;strong&gt;get git done&lt;/strong&gt;. 🎉&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>opensource</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to create awesome illustrations? </title>
      <dc:creator>Anisha Mohanty</dc:creator>
      <pubDate>Sat, 15 Aug 2020 20:11:46 +0000</pubDate>
      <link>https://forem.com/anisha/how-to-create-awesome-illustrations-28fh</link>
      <guid>https://forem.com/anisha/how-to-create-awesome-illustrations-28fh</guid>
      <description>&lt;p&gt;Well well, this weekend I chose to do something new. Apart from writing code I enjoy gardening, painting and reading. But I did something interesting today. I used the Adobe Illustrator to design my first illustration. It is a very minimal and small planter. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fiSQXot2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uv556h1grab3aug6qqoh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fiSQXot2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uv556h1grab3aug6qqoh.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My key learning was that patience is the ultimate goal to get started here. I really enjoyed doing this. ♥️&lt;/p&gt;

&lt;p&gt;Any awesome resources to create and learn more of it? I wanna explore more here! &lt;/p&gt;

</description>
      <category>discuss</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to Install GO? </title>
      <dc:creator>Anisha Mohanty</dc:creator>
      <pubDate>Sat, 15 Aug 2020 05:44:18 +0000</pubDate>
      <link>https://forem.com/anisha/how-to-install-go-2pd4</link>
      <guid>https://forem.com/anisha/how-to-install-go-2pd4</guid>
      <description>&lt;p&gt;Go is a programming language that was developed by Google. The language is often referred to as &lt;em&gt;Golang&lt;/em&gt;. It was designed to have three features available at the same time - fast compilation, ease of programming, and efficient execution in production.&lt;/p&gt;

&lt;p&gt;This guide will help you through installing Go on your local machine and setting up a programming workspace via the command line.&lt;/p&gt;

&lt;p&gt;Let's get started. 🚀&lt;/p&gt;

&lt;h4&gt;
  
  
  Installing and Setting Up Homebrew
&lt;/h4&gt;

&lt;p&gt;Homebrew provides macOS with a free and open-source software package managing system that simplifies the installation of software on macOS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Installing GO
&lt;/h4&gt;

&lt;p&gt;You can use Homebrew to search for all available packages with the &lt;code&gt;brew search&lt;/code&gt; command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ brew search golang
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The terminal will output a list of what you can install.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;golang  golang-migrate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now, install golang with &lt;code&gt;brew install&lt;/code&gt; command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ brew install golang
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;To check the version of Go that you installed use the following command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ go version
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Creating Your Go Workspace
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;src&lt;/code&gt;: The directory that contains Go source files. A source file is a file that you write using the Go programming language. Source files are used by the Go compiler to create an executable binary file.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;bin&lt;/code&gt;: The directory that contains executables built and installed by the Go tools. Executables are binary files that run on your system and execute tasks. These are typically the programs compiled by your source code or another downloaded Go source code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The default directory for the Go workspace home directory with a go subdirectory, or $HOME/go. &lt;/p&gt;

&lt;p&gt;Issue the following command to create the directory structure for your Go workspace:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ mkdir -p $HOME/go/{bin,src}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;First, open &lt;code&gt;~/.bash_profile&lt;/code&gt; with your preferred text editor and set up the &lt;code&gt;$GOPATH&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Congratulations! You have a Go programming workspace set up on your local machine and can begin to write your first Go program. 🚀&lt;/p&gt;

&lt;p&gt;Thanks for reading. Happy Learning! ❤️&lt;/p&gt;

</description>
      <category>go</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Unit Testing with JUnit5</title>
      <dc:creator>Anisha Mohanty</dc:creator>
      <pubDate>Thu, 13 Aug 2020 05:35:04 +0000</pubDate>
      <link>https://forem.com/anisha/unit-testing-with-junit5-3mhb</link>
      <guid>https://forem.com/anisha/unit-testing-with-junit5-3mhb</guid>
      <description>&lt;p&gt;Unit testing is a type of software testing in which we test individual software components. It is done during the development of an application by the developers. It isolates a section of code and verify its correctness. A unit may be an individual function, method, procedure, module, or object. &lt;/p&gt;

&lt;p&gt;Well here are a few advantages of Unit testing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If unit tests are well-written, then with every build of our software with changed of code, we can notice any failures when we introduce new features.&lt;/li&gt;
&lt;li&gt;It makes your code more reusable, as, for good unit tests, code components should be modular.&lt;/li&gt;
&lt;li&gt;It acts like documentation as it describes the expected behavior for a piece of code to other developers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now that we have defined unit testing and why we use it, we are ready to move on to JUnit5.&lt;/p&gt;

&lt;p&gt;JUnit is one of the most popular unit-testing frameworks in Java. JUnit5 is composed of several different modules from three different sub-projects namely JUnit Platform, JUnit Vintage, JUnit Jupiter.&lt;/p&gt;

&lt;h4&gt;
  
  
  Install JUnit5
&lt;/h4&gt;

&lt;p&gt;For Maven, add the dependancy to Pom.xml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.junit.jupiter&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;junit-jupiter-api&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;{$version}&amp;lt;/version&amp;gt;
    &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;For Gradle, add to build.gradle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '$version'
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  JUnit Annotations
&lt;/h4&gt;

&lt;p&gt;Annotations are the meta-tags that provides additional information about the methods and classes defined in our code structure.&lt;/p&gt;

&lt;p&gt;Some commonly used annotations are listed here.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;@Test&lt;/code&gt; - Represents a test method.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@BeforeEach&lt;/code&gt; - Represents the annotated method should be executed before each test method.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@AfterEach&lt;/code&gt; - Represents the annotated method should be executed after each test method.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@BeforeAll&lt;/code&gt; - Represents the annotated method should be executed before all test methods.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@AfterAll&lt;/code&gt; - Represents the annotated method should be executed after all test methods.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@DisplayName&lt;/code&gt; - Creates a custom display name for the test class or method.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@Tag&lt;/code&gt; - Creates tags for filtering tests.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@ExtendWith&lt;/code&gt; - Registers custom extensions.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

class JUnit5Tests {

    @BeforeAll
    static void beforeAllTest() {
        log.info("Executed before all test methods.");
    }

    @BeforeEach
    void beforeEachTest() {
        log.info("Executed before each test method.");
    }

    @Test
    void test() {
        log.info("Executed test method.");
    }

    @AfterEach
    void afterEachTest() {
         log.info("Executed after all test methods");
    }

    @AfterAll
    static void afterAllTest() {
         log.info("Executed after all test methods");
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  JUnit Assertions
&lt;/h4&gt;

&lt;p&gt;Every test method must be evaluated against the condition to true using assertions so that the test can continue to execute. JUnit Jupiter assertions are kept in the &lt;code&gt;org.junit.jupiter.api.Assertions&lt;/code&gt; class. &lt;/p&gt;

&lt;p&gt;Here are some commonly used Assertions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;assertNull(actual value)&lt;/code&gt; - Fails when actual value is not null.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;assertNotNull(actual value)&lt;/code&gt; - Fails when actual value is null.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;assertEquals(expected value, actual value)&lt;/code&gt; - Fails when expected value does not equal actual value.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;assertAll()&lt;/code&gt; - Groups a bunch of assertions and every assertion is executed even if one or more of them fails.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;assertTrue(expression value)&lt;/code&gt; - Fails if expression is not true.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;assertFalse(expression value)&lt;/code&gt; - Fails when the expression is not false.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test;

import example.io.util.Customer;

class JUnit5Tests {

    private final Customer customer = new Customer("Ann", "Marie");

    @Test
    void standardAssertions() {
        assertEquals("Marie", customer.getLastName());
        assertNotNull(customer);
        assertTrue("Ann", customer.getFirstName());
    }

    @Test
    void groupedAssertions() {
        assertAll("customer",
         () -&amp;gt; assertEquals("Ann", customer.getFirstName()),
         () -&amp;gt; assertEquals("Marie", customer.getLastName())
        );
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  JUnit5 Assumptions
&lt;/h4&gt;

&lt;p&gt;Assumptions are static methods present inside the &lt;code&gt;org.junit.jupiter.api.Assumptions&lt;/code&gt; class. These methods will execute a test only when the specified condition met otherwise the test will be aborted. The aborted test will not cause a build failure. Assumptions also understand lambda expressions.&lt;/p&gt;

&lt;p&gt;Here are some commonly used Assumptions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;assumeTrue()&lt;/code&gt; - Execute the body when the positive condition hold else test will be skipped.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;assumeFalse()&lt;/code&gt; - Execute the body when the negative condition hold else test will be skipped.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;assumingThat()&lt;/code&gt; - Part of the test method will execute if an assumption holds true and everything after that will execute irrespective of the assumption in assumingThat() holds.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
import static org.junit.jupiter.api.Assumptions.assumingThat;

import example.util.Calculator;

import org.junit.jupiter.api.Test;

class JUnit5Tests {

    private final Calculator calculator = new Calculator();

    @Test
    void simpleAssumeTest() {
        assumeTrue("DEV".equals(System.getenv("ENV")),
            () -&amp;gt; "Aborting test");
    }

    @Test
    void complexAssumeTest() {
        assumingThat("CI".equals(System.getenv("ENV")),
            () -&amp;gt; {
                assertEquals(21, calculator.add(14, 7));
            });
     }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Further Reading
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;To get more insights and deeper understanding refer to the &lt;a href="https://junit.org/junit5/docs/current/user-guide/"&gt;User Guide of JUnit5&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Starter example project for Maven, check out the &lt;a href="https://github.com/junit-team/junit5-samples/tree/r5.6.2/junit5-jupiter-starter-maven"&gt;junit5-jupiter-starter-maven&lt;/a&gt; project.&lt;/li&gt;
&lt;li&gt;A basic understanding guide from &lt;a href="https://mkyong.com/junit5/junit-5-tutorials/"&gt;JUnit5 Tutorials&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We have covered JUnit5 and a few of its features with some examples. We also looked at how we can use JUnit annotations, assertions, assumptions. &lt;/p&gt;

&lt;p&gt;Thanks for reading. Happy Learning. ❤️&lt;/p&gt;

</description>
      <category>java</category>
      <category>testing</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Install docker on RHEL 8</title>
      <dc:creator>Anisha Mohanty</dc:creator>
      <pubDate>Sat, 18 Jul 2020 15:15:51 +0000</pubDate>
      <link>https://forem.com/anisha/install-docker-on-rhel-8-3fab</link>
      <guid>https://forem.com/anisha/install-docker-on-rhel-8-3fab</guid>
      <description>&lt;p&gt;Docker is a tool that allows you to easily build, test, and deploy applications smoothly and quickly using containers. It has gained widespread popularity in recent times due to the portability to run applications anywhere irrespective of the host operating system.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Let's get started on how to install Docker on CentOS / RHEL. 🚀&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Docker is available in two editions, namely,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Community Edition (CE)&lt;/li&gt;
&lt;li&gt;Enterprise Edition (EE)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here, we will install Docker Comunity Edition (CE).&lt;/p&gt;

&lt;h4&gt;
  
  
  Prerequisites
&lt;/h4&gt;

&lt;p&gt;Uninstall older versions of Dockers, named &lt;code&gt;docker&lt;/code&gt; or &lt;code&gt;docker-engine&lt;/code&gt; along with associated dependencies.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ yum -y install lvm2 device-mapper device-mapper-persistent-data device-mapper-event device-mapper-libs device-mapper-event-libs
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Add Docker Repository
&lt;/h4&gt;

&lt;p&gt;Now let’s add the CE repository for the Docker installation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Install Docker CE
&lt;/h4&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ yum install docker-ce
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Output
&lt;/h4&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error:
 Problem: package docker-ce-3:19.03.5-3.el7.x86_64 requires containerd.io &amp;gt;= 1.2.2-3, but none of the providers can be installed
  - cannot install the best candidate for the job
  - package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
  - package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
  - package containerd.io-1.2.2-3.el7.x86_64 is excluded
  - package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Install the Docker CE by skipping unavailable package
&lt;/h4&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ yum -y install docker-ce --nobest
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now you have Docker installed onto your machine, start the Docker service in case if it is not started automatically after the installation run these commands.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ systemctl start docker

$ systemctl enable docker
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Verify Docker Installation
&lt;/h4&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ docker run hello-world
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And it's done! You have successfully installed docker on your RHEL / CentOS. Happy Learning! 🎉 &lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>beginners</category>
      <category>linux</category>
      <category>opensource</category>
    </item>
    <item>
      <title>GraphQL better than REST?</title>
      <dc:creator>Anisha Mohanty</dc:creator>
      <pubDate>Tue, 07 Jul 2020 10:43:28 +0000</pubDate>
      <link>https://forem.com/anisha/graphql-better-than-rest-40i5</link>
      <guid>https://forem.com/anisha/graphql-better-than-rest-40i5</guid>
      <description>&lt;p&gt;Well, after working with GraphQL for some time now I have understood quite well how amazing the tool is and the beauty of fetching the data. It's better than REST if you don't know already read my article here! 🤩&lt;/p&gt;

&lt;h3&gt;
  
  
  🔸 REST Overview
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A REST API is an architectural standard for network-based software.&lt;/li&gt;
&lt;li&gt;RESTful web services allow to access and manipulate the web resources using a predefined set of stateless operations like GET, POST, PUT, and DELETE. &lt;/li&gt;
&lt;li&gt;The implementation of the client and server is independent of each other and does not affect each other's functionality. &lt;/li&gt;
&lt;li&gt;One advantage of using REST is, it's scalable. The architecture decouples client and server which allows developers to scale products and applications indefinitely without much difficulty. &lt;/li&gt;
&lt;li&gt;REST-based API requires multiple round trips. For example, if you wanted to retrieve data from two or more different endpoints, you’d have to send two or more separate requests to the REST API each time.&lt;/li&gt;
&lt;li&gt;Using REST also arises over-fetching and under-fetching. For example, you need to display a list of twitter users with their names and followers. But you receive a JSON data structure with the user data having user’s name, tweets, email and, address.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔸 GraphQL Overview
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;GraphQL is a query language, a specification, and a set of tools that operates over a single endpoint using HTTP. &lt;/li&gt;
&lt;li&gt;It has been to optimize for performance and flexibility. It provides detailed insight into the data that’s requested on the backend.
&lt;/li&gt;
&lt;li&gt;GraphQL uses a strong type system to define the capabilities of an API. All the types that are exposed in an API are written down in a schema using the GraphQL Schema Definition Language (SDL). &lt;/li&gt;
&lt;li&gt;The GraphQL schema serves as the path between the client and the server to define how a client can access the data.&lt;/li&gt;
&lt;li&gt;GraphQL overcomes the problems of REST over-fetching and under-fetching in a smooth manner.&lt;/li&gt;
&lt;li&gt;It enables rapid product development and a large open source community to work with.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some big firms that use GraphQL :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Rlbkio_e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bu6ldyzqpouh19k3qgal.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rlbkio_e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bu6ldyzqpouh19k3qgal.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Both REST and GraphQL are unique ways to design how an API will function and how applications will receive data from it. While REST had significantly simplified the work of developers with its standardized approach, it does have a few drawbacks. GraphQL, with its queries, schemas, and resolvers offers more flexibility, moreover, GraphQL can offer better performance. Analyze your application, data, and performance requirements, so that you can choose appropriately.&lt;/p&gt;

&lt;p&gt;Thanks for Reading. Happy Learning! ❤️&lt;/p&gt;

</description>
      <category>graphql</category>
      <category>opensource</category>
      <category>beginners</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>How to create GraphQL schema dynamically?</title>
      <dc:creator>Anisha Mohanty</dc:creator>
      <pubDate>Tue, 16 Jun 2020 10:27:12 +0000</pubDate>
      <link>https://forem.com/anisha/how-to-create-graphql-schema-dynamically-353a</link>
      <guid>https://forem.com/anisha/how-to-create-graphql-schema-dynamically-353a</guid>
      <description>&lt;p&gt;Hey everyone. 🤩 I am writing this article to guide you through to a create a dynamic GraphQL schema programmatically as java code. We would be primarily using the &lt;code&gt;graphql-java&lt;/code&gt; library for this.&lt;/p&gt;

&lt;h3&gt;
  
  
  GraphQL Schema
&lt;/h3&gt;

&lt;p&gt;GraphQL has its type system that’s used to define the schema of an API. The syntax for writing schemas is called Schema Definition Language (SDL). We can either define the schema using SDL or define it programmatically as java code. But both of them are static ways of representation. In case you are building schema during runtime, it becomes difficult to recursively add new fields to your predefined definition.&lt;/p&gt;

&lt;h4&gt;
  
  
  SDL Schema Definition
&lt;/h4&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type Customer {
   name : String
   address : String
   contact : Int 
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Programmatic Schema Definition
&lt;/h4&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GraphQLObjectType.Builder graphQLObjectType = GraphQLObjectType.newObject();
graphQLObjectType.name("Customer")
                 .field(newFieldDefinition()
                       .name("name")
                       .type(Scalars.GraphQLString))
                 .field(newFieldDefinition()
                       .name("address")
                       .type(Scalars.GraphQLString))
                 .field(newFieldDefinition()
                       .name("conatct")
                       .type(Scalars.GraphQLInt)
                 .build();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;We will be focusing on how to extract the metadata of the data source to which you are connecting. Metadata characterizes your data and makes easier for anyone to understand and consume it. To put it simply, metadata is the data describing the data that is being stored in your data source. It generally includes the name, size and number of rows of each table present in a database, along with the columns in each table, their data types, precisions, etc. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Let's get started!&lt;/em&gt; 🚀&lt;/p&gt;

&lt;p&gt;To read and store database meta data  we will be using two interfaces &lt;code&gt;DatabaseMetaData&lt;/code&gt; and &lt;code&gt;ResultSet&lt;/code&gt;.The DatabaseMetaData interface is huge, containing hundreds of methods for reading capabilities of a DBMS. You can refer to &lt;a href="https://docs.oracle.com/javase/8/docs/api/java/sql/DatabaseMetaData.html"&gt;Javadoc&lt;/a&gt; for the complete list of methods.&lt;/p&gt;

&lt;h4&gt;
  
  
  Obtaining DatabaseMetaData Instance
&lt;/h4&gt;

&lt;p&gt;Here I am using jdbc-url for &lt;code&gt;Teiid&lt;/code&gt;, you can choose others too. We obtain the &lt;code&gt;DatabaseMetaData&lt;/code&gt; object from a &lt;code&gt;Connection&lt;/code&gt; object, like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;String URL = "jdbc:teiid:customer@mm://localhost:31000";
String USERNAME = "sa";
String PASSWORD = "sa";
Connection connection = DriverManager.getConnection(URL, USERNAME ,PASSWORD );
DatabaseMetaData databaseMetaData = connection.getMetaData();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Listing Database Tables
&lt;/h4&gt;

&lt;p&gt;We can obtain a list of the defined tables in your database or data source with the help of DatabaseMetaData. Here is how that is done:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;String table[] = {"TABLE"};

ResultSet resultSet = databaseMetaData.getTables(null,null,null,table);
ArrayList&amp;lt;String&amp;gt; tables = new ArrayList();

    while(resultSet.next()) {
        tables.add(resultSet.getString("TABLE_NAME"));
    }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Listing Database Columns
&lt;/h4&gt;

&lt;p&gt;We can obtain the columns of a table via the DatabaseMetaData object in this manner :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ResultSet columns = databaseMetaData.getColumns(null,null, tableName, null);
     while(columns.next()) {
         String columnName = columns.getString("COLUMN_NAME");
         String datatype = columns.getString("DATA_TYPE");
         String columnsize = columns.getString("COLUMN_SIZE");

         System.out.println(columnName + "---" + datatype + "---" + columnsize);
      }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Creating Schema
&lt;/h4&gt;

&lt;p&gt;Next step would be to create a schema using &lt;code&gt;GraphQLObjectType&lt;/code&gt; object, store it's corresponding metadata in HashMap and read it's type from &lt;code&gt;ReturnType&lt;/code&gt; class defined in the next section.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ResultSet resultSet = databaseMetaData.getColumns(null, null, (String) tableName, null);

     GraphQLObjectType objectType = null;
     GraphQLObjectType.Builder graphQLObjectType = GraphQLObjectType.newObject();

     System.out.println("-------Schema for Table " + tableName + "-------");
     HashMap &amp;lt;String,String&amp;gt; data  = new HashMap&amp;lt;&amp;gt;();

      while (resultSet.next()) {
           data.put(resultSet.getString("COLUMN_NAME"), resultSet.getString("TYPE_NAME"));

           for (Map.Entry&amp;lt;String, String&amp;gt; hm : data.entrySet()) {

                graphQLObjectType
                        .name(tableName)
                        .field(GraphQLFieldDefinition.newFieldDefinition()
                                .name(hm.getKey())
                                .type(ReturnType(hm.getValue())));
                objectType = graphQLObjectType.build();

            }
        }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Defining the Field Type in Schema
&lt;/h4&gt;

&lt;p&gt;This class returns the type of field in each case, here I have defined only two types &lt;code&gt;GraphQLLong&lt;/code&gt; and &lt;code&gt;GraphQLString&lt;/code&gt;. You can define accordingly for other types.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static GraphQLScalarType ReturnType(String type) {
      if(type.equals("long"))
           return Scalars.GraphQLLong;
      else if (type.equals("string"))
           return Scalars.GraphQLString;
      return null;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Building and Printing Schema
&lt;/h4&gt;

&lt;p&gt;To print schema is a defined manner we are using &lt;code&gt;SchemaPrinter&lt;/code&gt; object which takes an object of GraphQLSchema type.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GraphQLSchema graphQLSchema = GraphQLSchema.newSchema()
                    .query(objectType)
                    .build();

SchemaPrinter schemaPrinter = new SchemaPrinter();
String printer = schemaPrinter.print(graphQLSchema);
System.out.println(printer);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



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

&lt;p&gt;There you have it! You have successfully connected to your data source to fetch database metadata and using the data you constructed  your graphQL schema. &lt;/p&gt;

&lt;p&gt;You can visit the Github Repo &lt;a href="https://github.com/ani-sha/schemabuilder"&gt;Schema Builder&lt;/a&gt; to view the source code. Also check &lt;a href="https://www.graphql-java.com/"&gt;GraphQL Java&lt;/a&gt; website to learn more. &lt;/p&gt;

&lt;p&gt;You're learning. I'm learning. We're all learning. Let's continue to learn and get better together. Thank you. Happy Reading! 🎉&lt;/p&gt;

&lt;p&gt;You can connect with me on &lt;a href="https://twitter.com/anisha__mohanty"&gt;Twitter&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/anisha-mohanty-97a7a7169/"&gt;LinkedIn&lt;/a&gt; ❤️&lt;/p&gt;

</description>
      <category>graphql</category>
      <category>java</category>
      <category>beginners</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Teiid : Introduction</title>
      <dc:creator>Anisha Mohanty</dc:creator>
      <pubDate>Sat, 06 Jun 2020 08:05:08 +0000</pubDate>
      <link>https://forem.com/anisha/teiid-introduction-352g</link>
      <guid>https://forem.com/anisha/teiid-introduction-352g</guid>
      <description>&lt;p&gt;Hey everyone, I have been working on a new data integration tool. This is a small introduction to new learning. 🤩&lt;/p&gt;

&lt;h3&gt;
  
  
  🏷️ Overview
&lt;/h3&gt;

&lt;p&gt;Teiid is a cloud-based &lt;a href="https://en.wikipedia.org/wiki/Data_virtualization" rel="noopener noreferrer"&gt;data virtualization&lt;/a&gt; platform. It is a flexible Java component that provides integrated access to multiple data sources through a single uniform API. Data can be accessed using standard JDBC, ODBC, OData, or REST, even if that data resides in more than one source or in sources that do not understand standard queries. Typically it is a view building tool. 🚀&lt;/p&gt;

&lt;p&gt;To clear out things first, Teiid is not a database, it does not store any data. It acts as an interface or data gateway for accessing data from data sources in an optimal manner.&lt;/p&gt;

&lt;h3&gt;
  
  
  🏷️ Why Teiid?
&lt;/h3&gt;

&lt;p&gt;Teiid offers interaction with very familiar interfaces like JDBC, ODBC, OData, and REST. It allows the capability to query from non-SQL data sources as well. Teiid is cheaper, better, and faster. It is easy to deploy and has several distributions including &lt;a href="https://teiid.io/springboot/" rel="noopener noreferrer"&gt;Teiid Spring Boot&lt;/a&gt;, &lt;a href="https://teiid.io/teiid_wildfly/" rel="noopener noreferrer"&gt;Teiid Wildfly&lt;/a&gt;, &lt;a href="https://teiid.io/teiid_cloud/" rel="noopener noreferrer"&gt;Teiid Openshift&lt;/a&gt;, etc. &lt;/p&gt;

&lt;h3&gt;
  
  
  🏷️ Teiid Basics
&lt;/h3&gt;

&lt;p&gt;Before getting started, here are some basic constructs of teiid.&lt;/p&gt;

&lt;h4&gt;
  
  
  📌 Schema
&lt;/h4&gt;

&lt;p&gt;In teiid, schemas are used to define the entities and relationships between those entities, required to fully define the integration so that they may be accessed uniformly. There are pre-built translators in teiid for MySQL, Oracle, PostgreSQL, etc.&lt;/p&gt;

&lt;h4&gt;
  
  
  📌 Data Sources
&lt;/h4&gt;

&lt;p&gt;Teiid provides the means (Translators and JEE connectors) to connect to various data sources, both relational and non-relational, for fetching required data. &lt;/p&gt;

&lt;h4&gt;
  
  
  📌 Virtual Database
&lt;/h4&gt;

&lt;p&gt;A virtual database (or VDB) is a type of database that serves as a container to transparently view and query from several other databases through a uniform API that culls from multiple sources as if they were a single entity. &lt;/p&gt;

&lt;p&gt;A VDB has multiple schema components known as models. Each schema contains the metadata. There are two different types of schemas :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Foreign schema&lt;/strong&gt; &lt;br&gt;
A foreign schema represents external or remote data sources, such as a relational database, such as Oracle, or MySQL; files, such as CSV, etc. It is also called a source or physical schema.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Virtual schema&lt;/strong&gt;&lt;br&gt;
A view layer or logical schema layer represents the structure and character to be exposed to applications. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  📌 Translator
&lt;/h4&gt;

&lt;p&gt;A translator converts a teiid specific command into its native command, executes, and returns a result to expected teiid types. It provides an abstraction layer between the Teiid Query Engine and the physical data source.&lt;/p&gt;

&lt;h3&gt;
  
  
  🏷️ Explore
&lt;/h3&gt;

&lt;p&gt;There are other projects which might interest you. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Teiid Syndesis&lt;/strong&gt; &lt;br&gt;
Syndesis allows us to connect to data sources, define REST APIs, integrations (like cloud-based Camel/Fuse routes), and data virtualizations in minutes. Teiid Syndesis allows us to create views and expose data as OData or database protocols. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Teiid Operator&lt;/strong&gt;&lt;br&gt;
It is the job of the teiid operator to deploy Teiid on your OpenShift instance. The Operator also assists with the management of and updates to your Teiid instances.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏷️ Futher Reading
&lt;/h3&gt;

&lt;p&gt;Visit &lt;a href="https://github.com/teiid/teiid" rel="noopener noreferrer"&gt;teiid&lt;/a&gt; repository on github. To contribute read the documentation &lt;a href="http://teiid.github.io/teiid-documents/master/content/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F32862813%2F83841351-4f543e80-a71e-11ea-8918-0944468eacce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F32862813%2F83841351-4f543e80-a71e-11ea-8918-0944468eacce.png" alt="Alt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you. Happy Reading! 🎉&lt;/p&gt;

&lt;p&gt;You can connect with me on &lt;a href="https://twitter.com/anisha__mohanty" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/anisha-mohanty-97a7a7169/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; ❤️&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>opensource</category>
      <category>todayilearned</category>
      <category>teiid</category>
    </item>
  </channel>
</rss>
