<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ramesh Lingappa</title>
    <description>The latest articles on DEV Community by Ramesh Lingappa (@rameshl).</description>
    <link>https://dev.to/rameshl</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%2F108234%2F08f37ece-893b-4247-96de-7202c6a73bf3.png</url>
      <title>DEV Community: Ramesh Lingappa</title>
      <link>https://dev.to/rameshl</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rameshl"/>
    <language>en</language>
    <item>
      <title>Managing Application Secrets like a Pro using Google Secret Manager</title>
      <dc:creator>Ramesh Lingappa</dc:creator>
      <pubDate>Sun, 05 Apr 2020 16:48:25 +0000</pubDate>
      <link>https://dev.to/rameshl/managing-application-secrets-like-a-pro-using-google-secret-manager-43c9</link>
      <guid>https://dev.to/rameshl/managing-application-secrets-like-a-pro-using-google-secret-manager-43c9</guid>
      <description>&lt;p&gt;At the beginning of last year, I wrote an article titled &lt;a href="https://medium.com/@rameshlingappa/securing-managing-secrets-using-google-cloud-kms-3fe08c69f499"&gt;How to secure and manage secrets using Google Cloud KMS&lt;/a&gt;, explaining how we can use Google Cloud KMS (Key Management System) to encrypt secrets and securely use it in our applications.&lt;/p&gt;

&lt;p&gt;I mentioned it is a decent approach because of the lack of support for good secret management solutions within the Google cloud ecosystem. It is kind of, a hacky way to get the job done, because,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it requires a lot of code setup&lt;/li&gt;
&lt;li&gt;had to keep the encrypted version within version control&lt;/li&gt;
&lt;li&gt;no easy way to manage these secrets (like a console UI)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, there is now an easier &amp;amp; better a solution, Google has announced their secret management solution Google Secret Manager.&lt;/p&gt;

&lt;p&gt;Huge shout-out to Google Cloud and their team behind this solution 👏👏👏&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Secret Manager is a secure and convenient storage system for API keys, passwords, certificates, and other sensitive data. Secret Manager provides a central place and a single source of truth to manage access, and audit secrets across Google Cloud.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's get our hands dirty…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/swlh/google-cloud-run-service-with-grpc-using-spring-boot-e43daf155752"&gt;Read more...&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>googlecloud</category>
      <category>springboot</category>
      <category>security</category>
    </item>
    <item>
      <title>Google Cloud Run Service with gRPC using Spring Boot</title>
      <dc:creator>Ramesh Lingappa</dc:creator>
      <pubDate>Wed, 01 Apr 2020 09:42:47 +0000</pubDate>
      <link>https://dev.to/rameshl/google-cloud-run-service-with-grpc-using-spring-boot-48f2</link>
      <guid>https://dev.to/rameshl/google-cloud-run-service-with-grpc-using-spring-boot-48f2</guid>
      <description>&lt;p&gt;Welcome to another article on Google Cloud Platform. If you are building services using GCP then you might already know the several limitations that come with it. One of them being a lack of support for gRPC in their easy to use solutions such as Google AppEngine (Standard and Flexible), Cloud Functions or in the initial days of Cloud Run.&lt;/p&gt;

&lt;p&gt;So if we need to support or have our own gRPC services then we need to use either Google Compute Engine or Google Kubernetes Engine, which is not an easy solution for several small use cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An alternate question would be why gRPC? and what benefits does it offer over REST?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you are new to gRPC, then I highly recommend giving a readout, &lt;a href="https://grpc.io"&gt;https://grpc.io&lt;/a&gt;. In short,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;gRPC is a modern open-source high-performance RPC framework that can run in any environment, efficiently connecting distributed services&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fiWE1SHC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2A3tWP3Dpm7I5ygwN0yvfkZw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fiWE1SHC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/1%2A3tWP3Dpm7I5ygwN0yvfkZw.png" alt="grpc-communication"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;gRPC offers several benefits over HTTP APIs with JSON, some of them are,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strong Contract-based communication&lt;/li&gt;
&lt;li&gt;uses improved HTTP/2 protocol&lt;/li&gt;
&lt;li&gt;Protobuf (efficient binary message format)&lt;/li&gt;
&lt;li&gt;Great support for code generation on several languages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So gRPC is a great fit for communication between microservices.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/swlh/google-cloud-run-service-with-grpc-using-spring-boot-e43daf155752"&gt;Read more...&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>googlecloud</category>
      <category>springboot</category>
      <category>grpc</category>
    </item>
    <item>
      <title>Going Multi-Regional in Google Cloud Platform</title>
      <dc:creator>Ramesh Lingappa</dc:creator>
      <pubDate>Mon, 04 Nov 2019 13:44:36 +0000</pubDate>
      <link>https://dev.to/rameshl/going-multi-regional-in-google-cloud-platform-32k6</link>
      <guid>https://dev.to/rameshl/going-multi-regional-in-google-cloud-platform-32k6</guid>
      <description>&lt;p&gt;For a successful business, it is important to know who your customers are. Knowing your customers helps to understand your business better, build better versions of your ideas, and can make effective decisions for the successful long run. Everyone knows it right!&lt;/p&gt;

&lt;p&gt;When it comes to software infrastructure, it remains important. Knowing your customers greatly improves the performance of your application, makes it more resilient, after all, no one likes to wait for the response :)&lt;/p&gt;

&lt;p&gt;Okay getting to the point, if your services are being used by a wide range of audiences across the globe, but your servers are located within a single region, then your users from other parts of the world are going to experience high latency resulting in bad user experience. Several case studies are proving why faster response time is very important for business,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why Performance Matters&lt;/li&gt;
&lt;li&gt;Mobile Site Speed Performance,&lt;/li&gt;
&lt;li&gt;Google, Amazon, and many other big software giants confirm several milliseconds(ms) increase in latency can degrade user engagement greatly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's go for an example, &lt;a href="http://gcping.com"&gt;GCP ping&lt;/a&gt; is a simple website which makes a ping request to servers located in various regions, and show result ordered by low latency.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/swlh/going-multi-regional-in-google-cloud-platform-18495a833838"&gt;Read more...&lt;/a&gt;&lt;/p&gt;

</description>
      <category>googlecloud</category>
      <category>programming</category>
      <category>serverless</category>
      <category>devops</category>
    </item>
    <item>
      <title>End to End Restful API development using OpenAPI Specification</title>
      <dc:creator>Ramesh Lingappa</dc:creator>
      <pubDate>Wed, 23 Oct 2019 09:14:08 +0000</pubDate>
      <link>https://dev.to/rameshl/end-to-end-restful-api-development-using-openapi-specification-9h3</link>
      <guid>https://dev.to/rameshl/end-to-end-restful-api-development-using-openapi-specification-9h3</guid>
      <description>&lt;p&gt;With the increasing number of adoption towards service-oriented architecture and for better integrations with external systems, it became a necessity to write Restful APIs for our services. While building so we might often find several challenges such as,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Standard &amp;amp; Consistent API design&lt;/li&gt;
&lt;li&gt;Better documentation&lt;/li&gt;
&lt;li&gt;Client Libraries&lt;/li&gt;
&lt;li&gt;Playground (better developer experience)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So while writing APIs, we have to make sure it sticks to a standard design principle, update documentation (hosted elsewhere) and finally write client libraries (harder if you have to support multiple languages). Doing all of this manually is a painful job.&lt;/p&gt;

&lt;p&gt;Likely we have &lt;a href="https://swagger.io/specification/"&gt;OpenAPI Specification&lt;/a&gt; (formerly known as swagger), which offers us a standard, language-agnostic interface to write RESTful APIs which allows both humans and computers to understand the service capabilities.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/swlh/end-to-end-restful-api-development-using-openapi-specification-c73d45e98c8d"&gt;Read more...&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>tutorial</category>
      <category>api</category>
    </item>
    <item>
      <title>AppEngine unit testing made easy with JUnit Rules</title>
      <dc:creator>Ramesh Lingappa</dc:creator>
      <pubDate>Fri, 19 Apr 2019 06:23:05 +0000</pubDate>
      <link>https://dev.to/rameshl/appengine-unit-testing-made-easy-with-junit-rules-jg7</link>
      <guid>https://dev.to/rameshl/appengine-unit-testing-made-easy-with-junit-rules-jg7</guid>
      <description>&lt;p&gt;If you are using AppEngine for hosting your application, then you will be using one or more of their services like Datastore, Memcache, TaskQueues, UserService, etc.&lt;/p&gt;

&lt;p&gt;And you will be needing to write unit tests to make sure your application functionality is working as expected with these services. For that, you need to set up some configurations to test these services in your local environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.freecodecamp.org/appengine-unit-testing-made-easy-with-junit-rules-97c2127a161a"&gt;Read more...&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>appengine</category>
      <category>java</category>
      <category>junit</category>
    </item>
    <item>
      <title>How to secure and manage secrets using Google Cloud KMS</title>
      <dc:creator>Ramesh Lingappa</dc:creator>
      <pubDate>Tue, 08 Jan 2019 07:03:38 +0000</pubDate>
      <link>https://dev.to/rameshl/how-to-secure-and-manage-secrets-using-google-cloud-kms-1g56</link>
      <guid>https://dev.to/rameshl/how-to-secure-and-manage-secrets-using-google-cloud-kms-1g56</guid>
      <description>&lt;p&gt;Let’s jump right in. We all know it’s a bad idea to store application secrets within our code. So why we are storing there it still? Let’s take an example.&lt;/p&gt;

&lt;p&gt;We could store those secrets in a file and add it to the gitignore so it’s not added to version control. But there are a couple of hurdles:&lt;/p&gt;

&lt;p&gt;How do we manage those secrets?&lt;br&gt;
What happens when the local copy is deleted?&lt;br&gt;
How do we share it with other developers?&lt;br&gt;
How do we manage versioning of those secrets during changes and an audit log of who changed what?&lt;br&gt;
A lot of questions! So we end up storing it within the code, since it’s too much complexity to deal with.&lt;/p&gt;

&lt;p&gt;For a big application or application which needs a higher level of security, we can use Production grade secret management services like &lt;a href="https://www.vaultproject.io/"&gt;Hashicorp Vault&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In this article, we will look at a decent approach in dealing with secrets while still achieving better security. We are going to achieve this using Google KMS + Git + IAM + automation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.freecodecamp.org/securing-managing-secrets-using-google-cloud-kms-3fe08c69f499"&gt;Read more&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>programming</category>
      <category>gcp</category>
      <category>git</category>
    </item>
    <item>
      <title>Dynamic AppEngine Configurations using Gradle Part 2</title>
      <dc:creator>Ramesh Lingappa</dc:creator>
      <pubDate>Thu, 29 Nov 2018 15:16:18 +0000</pubDate>
      <link>https://dev.to/rameshl/dynamic-appengine-configurations-using-gradle-part-2-30g1</link>
      <guid>https://dev.to/rameshl/dynamic-appengine-configurations-using-gradle-part-2-30g1</guid>
      <description>&lt;p&gt;In the previous story &lt;a href="https://medium.com/@rameshlingappa/dynamic-appengine-configurations-using-gradle-part-1-e3959a39f31b"&gt;Dynamic AppEngine Configurations using Gradle Part 1&lt;/a&gt;, we discussed how we can easily deploy to various environments like (prod, stag, test) using simple gradle argument. If you haven’t read before, would recommend to read it before proceeding.&lt;/p&gt;

&lt;p&gt;Now let’s take a look at how we can have multiple configuration files(cron.xml, appengine-web.xml, queue.xml) for each of those environments&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/swlh/dynamic-appengine-configurations-using-gradle-part-2-49a30eb87672"&gt;Read on&lt;/a&gt;&lt;/p&gt;

</description>
      <category>appengine</category>
      <category>googlecloud</category>
      <category>gradle</category>
      <category>programming</category>
    </item>
    <item>
      <title>Dynamic AppEngine Configurations using Gradle Part 1</title>
      <dc:creator>Ramesh Lingappa</dc:creator>
      <pubDate>Tue, 13 Nov 2018 06:21:56 +0000</pubDate>
      <link>https://dev.to/rameshl/dynamic-appengine-configurations-using-gradle-part-1-4f9m</link>
      <guid>https://dev.to/rameshl/dynamic-appengine-configurations-using-gradle-part-1-4f9m</guid>
      <description>&lt;p&gt;When working with AppEngine applications, often times we need to work with configuration files like appengine-web.xml, cron.xml, dispatch.xml etc. And also we have multiple environments to deal with like staging, alpha and production.&lt;/p&gt;

&lt;p&gt;The problem is we need different configurations for each of those environments for example,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@rameshlingappa/dynamic-appengine-configurations-using-gradle-part-1-e3959a39f31b"&gt;Read On&lt;/a&gt;&lt;/p&gt;

</description>
      <category>appengine</category>
      <category>googlecloud</category>
      <category>gradle</category>
      <category>programming</category>
    </item>
    <item>
      <title>Auto Detect Environment in Google AppEngine</title>
      <dc:creator>Ramesh Lingappa</dc:creator>
      <pubDate>Sat, 03 Nov 2018 05:15:32 +0000</pubDate>
      <link>https://dev.to/rameshl/auto-detect-environment-in-google-appengine-4862</link>
      <guid>https://dev.to/rameshl/auto-detect-environment-in-google-appengine-4862</guid>
      <description>&lt;p&gt;If you were working in a product which is in production or potentially gets to production, then for sure you will be having other environments like Staging, Alpha (and Development of-course) to test your code before deploying it to production&lt;/p&gt;

&lt;p&gt;And for each of these environments, you need to set up different Credentials, Configurations and other properties, etc… Eg: ApiKeys, API URLs etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@rameshlingappa/auto-detect-app-mode-in-google-appengine-fd7749b100c3"&gt;Read on&lt;/a&gt;&lt;/p&gt;

</description>
      <category>appengine</category>
      <category>programming</category>
      <category>googlecloud</category>
      <category>java</category>
    </item>
    <item>
      <title>Session Hijacking and how to stop it</title>
      <dc:creator>Ramesh Lingappa</dc:creator>
      <pubDate>Tue, 16 Oct 2018 18:06:15 +0000</pubDate>
      <link>https://dev.to/rameshl/session-hijacking-and-how-to-stop-it-2jo</link>
      <guid>https://dev.to/rameshl/session-hijacking-and-how-to-stop-it-2jo</guid>
      <description>&lt;p&gt;This story is for beginners and anyone who have minimal idea about cookies (sessions cookies), and not sure how to secure them properly. You don’t have to be a security expert to do that. You just have to understand it then you will know.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@rameshlingappa/session-hijacking-and-how-to-stop-it-711e3683d1ac"&gt;Read on&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>programming</category>
      <category>webdev</category>
      <category>begineers</category>
    </item>
    <item>
      <title>Best practices for building API Keys</title>
      <dc:creator>Ramesh Lingappa</dc:creator>
      <pubDate>Tue, 16 Oct 2018 18:02:05 +0000</pubDate>
      <link>https://dev.to/rameshl/best-practices-for-building-api-keys-2e2a</link>
      <guid>https://dev.to/rameshl/best-practices-for-building-api-keys-2e2a</guid>
      <description>&lt;p&gt;Hello there, we all know how valuable APIs are, its a gateway to explore other services, integrate with them and build great solutions faster.&lt;/p&gt;

&lt;p&gt;Probably you might be having APIs or thinking to build one for other developers to use. As part of it, API needs some form of authentication to access it. There are several authentication standards available already like API Keys, OAuth, JWT, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@rameshlingappa/best-practices-for-building-api-keys-97c26eabfea9"&gt;Read on&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>security</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
