<?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: Akshay Galande</title>
    <description>The latest articles on DEV Community by Akshay Galande (@mybytecode).</description>
    <link>https://dev.to/mybytecode</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F845849%2F84ad2ae2-5a5d-4fa5-a35c-07eb29a3710c.jpg</url>
      <title>DEV Community: Akshay Galande</title>
      <link>https://dev.to/mybytecode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mybytecode"/>
    <language>en</language>
    <item>
      <title>The Hidden Tax Your On-Call Rotation Is Charging Your Team</title>
      <dc:creator>Akshay Galande</dc:creator>
      <pubDate>Thu, 02 Jul 2026 06:36:06 +0000</pubDate>
      <link>https://dev.to/mybytecode/the-hidden-tax-your-on-call-rotation-is-charging-your-team-3nkl</link>
      <guid>https://dev.to/mybytecode/the-hidden-tax-your-on-call-rotation-is-charging-your-team-3nkl</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0gtvbuhshlid7b0hjmtb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0gtvbuhshlid7b0hjmtb.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's a number most engineering leaders don't track: the real cost of their on-call rotation.&lt;/p&gt;

&lt;p&gt;Not the PagerDuty bill. Not the pager pay. The actual cost — measured in burned out engineers, slower sprint velocity, compounding bugs, and the quiet resignation emails that always seem to come the month after a bad on-call week.&lt;/p&gt;

&lt;p&gt;I've spent the last year talking to engineering teams about their on-call experience. The conversations are remarkably similar regardless of company size, stack, or industry. The pain is the same everywhere. Here's what I keep hearing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 62% problem
&lt;/h2&gt;

&lt;p&gt;Across every team I've talked to, the rough number is consistent: somewhere between 55 and 70 percent of production pages are for issues the team has already solved before.&lt;/p&gt;

&lt;p&gt;Not the same bug in the same service. The same pattern in a different service. A null check that was fixed in the checkout service in March pages someone in the payments service in June. A timeout retry that was handled in the API gateway shows up as a new incident in the notification service.&lt;/p&gt;

&lt;p&gt;The knowledge exists inside the organization. It's sitting in a merged PR from three months ago. But the engineer getting paged at 2am has no way to know that. So they start from scratch. Read the stack trace. Form a hypothesis. Write the fix. Run the tests. Open a PR. Two hours later, they go back to sleep — having essentially duplicated work that already existed somewhere in the codebase.&lt;/p&gt;

&lt;p&gt;This is the core inefficiency of on-call. Not that the problems are hard. Most of them aren't. It's that the system has no memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  The day-after tax
&lt;/h2&gt;

&lt;p&gt;The incident itself is only the beginning of the cost. The real damage happens the next morning.&lt;/p&gt;

&lt;p&gt;The engineer who got paged at 3am shows up to standup running on four hours of sleep. They context-switch poorly. Their code quality drops. They skip the thorough review they'd normally do. They rubber-stamp a PR that introduces a subtle bug — which becomes next week's 3am page for someone else.&lt;/p&gt;

&lt;p&gt;I call this "on-call debt." It works exactly like technical debt. Each incident doesn't just cost the time to fix it. It reduces the team's capacity to prevent the next one. And like technical debt, it compounds quietly until something breaks badly enough that leadership finally notices.&lt;/p&gt;

&lt;p&gt;But by then, the senior engineer who could have prevented it has already accepted an offer somewhere else.&lt;/p&gt;

&lt;h2&gt;
  
  
  The retention problem nobody talks about
&lt;/h2&gt;

&lt;p&gt;Here's the stat that should keep engineering leaders up at night: roughly one in four senior engineers say on-call is their primary reason for leaving a company.&lt;/p&gt;

&lt;p&gt;Not compensation. Not the tech stack. Not the manager. The 3am pages.&lt;/p&gt;

&lt;p&gt;This makes sense when you think about it from the engineer's perspective. They spent years developing deep expertise. They can architect systems, mentor juniors, and solve genuinely hard problems. And they're being woken up at 3am to add a null check.&lt;/p&gt;

&lt;p&gt;The mismatch between their skill level and the work they're being paged for is what drives the frustration. It's not that they can't do it. It's that they shouldn't have to.&lt;/p&gt;

&lt;p&gt;When a senior engineer leaves because of on-call burnout, the replacement cost is staggering. Six months of recruiting. Six months of ramping. A year of lost institutional knowledge. For a 10-person team, on-call-driven turnover can easily cost $200K to $300K per year in hidden replacement costs alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tool chain gap
&lt;/h2&gt;

&lt;p&gt;The irony is that engineering teams have never had more tools. Sentry catches the error. Datadog shows the metrics. PagerDuty wakes someone up. Slack broadcasts the alert to the whole channel.&lt;/p&gt;

&lt;p&gt;Detect. Notify. Amplify. Human.&lt;/p&gt;

&lt;p&gt;That's the current workflow. Every tool in the chain is doing its job. But notice what's missing: nothing in that chain does the actual work. Every tool passes the incident to the next one until a human picks it up.&lt;/p&gt;

&lt;p&gt;We have AI that can write code, generate tests, refactor entire files. But the on-call workflow still terminates at a sleepy engineer with a laptop. The tooling around the incident is sophisticated. The resolution is still completely manual.&lt;/p&gt;

&lt;h2&gt;
  
  
  The split that should exist
&lt;/h2&gt;

&lt;p&gt;Not every incident needs a human. That's the uncomfortable truth that the current on-call model refuses to acknowledge.&lt;/p&gt;

&lt;p&gt;When you look at the 62% of repeat-pattern pages, these are incidents where the diagnosis is straightforward, the fix is small, and the risk is low. A null check. A timeout retry. An unhandled promise. A missing error boundary.&lt;/p&gt;

&lt;p&gt;These don't require creativity or architectural judgment. They require pattern recognition and the mechanical work of writing a fix, running tests, and opening a PR.&lt;/p&gt;

&lt;p&gt;Meanwhile, the other 38% — the genuinely novel failures, the cascading incidents, the architectural problems — these absolutely need a human. They need someone who understands the system deeply, can reason about edge cases, and can make judgment calls under pressure.&lt;/p&gt;

&lt;p&gt;The split should be:&lt;/p&gt;

&lt;p&gt;Routine incidents get handled automatically. Complex incidents get escalated to humans with full context so they can solve, not investigate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tier 1: automation. Tier 2: your best engineers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This isn't a futuristic idea. It's how every other operational domain works. Customer support has had tier-1 automation for years. IT helpdesks auto-resolve password resets. Network operations centers auto-remediate known failure patterns.&lt;/p&gt;

&lt;p&gt;Software engineering is the last holdout. And the cost of that holdout is measured in burnout, turnover, and lost velocity.&lt;/p&gt;

&lt;h2&gt;
  
  
  What would have to be true
&lt;/h2&gt;

&lt;p&gt;For this split to work, you'd need something that can do four things:&lt;/p&gt;

&lt;p&gt;First, it needs to understand production errors at the code level. Not just "this service is throwing 500s" but "this is a null reference on line 47 of checkout.ts because session.user can be undefined when the auth token expires."&lt;/p&gt;

&lt;p&gt;Second, it needs pattern memory across services. If Service A fixed this exact pattern three months ago, the system should know that and apply the same approach.&lt;/p&gt;

&lt;p&gt;Third, it needs to actually produce the fix. Not a suggestion. Not a recommendation. A working code change with tests that passes CI and is ready for human review.&lt;/p&gt;

&lt;p&gt;Fourth, it needs to know its own limits. When the incident is too complex or the confidence is too low, it should escalate immediately with full diagnostic context — not attempt a fix it's not sure about.&lt;/p&gt;

&lt;p&gt;This is the problem we set out to solve with BugOps. It connects to your monitoring and version control, handles the routine incidents autonomously, and escalates the hard ones to your team with everything they need to resolve quickly.&lt;/p&gt;

&lt;p&gt;But regardless of what tool solves it, the underlying shift is overdue. Engineering teams deserve an on-call model that respects the difference between routine work and genuinely hard problems. The current model treats every incident like it needs a human. It doesn't. And the humans are paying the price.&lt;/p&gt;

&lt;h2&gt;
  
  
  The question I'd leave you with
&lt;/h2&gt;

&lt;p&gt;Look at your team's on-call data from the last three months. Count the pages that were repeat patterns. Count the ones that were genuinely novel.&lt;/p&gt;

&lt;p&gt;If the split is anywhere close to 60/40, your team is spending most of their on-call time on work that shouldn't require them.&lt;/p&gt;

&lt;p&gt;The question isn't whether to automate the routine 60%. It's how long your team can sustain the cost of not doing it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;bugops.app&lt;/em&gt;&lt;/p&gt;

</description>
      <category>oncall</category>
      <category>ai</category>
      <category>devops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>MCP logging and tracing using mcp-trace | ContexaAI</title>
      <dc:creator>Akshay Galande</dc:creator>
      <pubDate>Sat, 12 Jul 2025 19:08:00 +0000</pubDate>
      <link>https://dev.to/mybytecode/mcp-logging-and-tracing-using-mcp-trace-contexaai-4ccm</link>
      <guid>https://dev.to/mybytecode/mcp-logging-and-tracing-using-mcp-trace-contexaai-4ccm</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: Add tracing to your MCP server in literally 3 lines of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;TraceMiddleware&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;FileAdapter&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mcp-trace-js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;traceAdapter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FileAdapter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;trace.log&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;traceMiddleware&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TraceMiddleware&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;traceAdapter&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// Use in your MCP server - boom, full visibility&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;mcp-trace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let me tell you why this matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;Look, I've been there. You're building an MCP server, everything seems fine in development, then you deploy it and suddenly you have no idea what's happening. Users are complaining about slow responses, tools are failing mysteriously, and you're stuck playing detective with zero visibility into what's actually going on.&lt;/p&gt;

&lt;p&gt;When you're building with the Model Context Protocol, you're essentially creating a black box. Sure, your server handles requests and returns responses, but what happens in between? Which tools are being called? How long are they taking? What arguments are being passed? Are there patterns in the failures?&lt;/p&gt;

&lt;p&gt;Without proper observability, you're flying blind. And trust me, that's not a fun place to be when things go wrong at 2 AM.&lt;/p&gt;

&lt;p&gt;That's exactly why I created &lt;strong&gt;mcp-trace-js&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Adapters That Actually Matter
&lt;/h2&gt;

&lt;p&gt;Here's where it gets interesting. I didn't just build one way to store traces - I built adapters for the places you're actually storing data:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File Adapter&lt;/strong&gt; - Sometimes you just want logs in a file. Perfect for development or simple deployments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PostgreSQL Adapter&lt;/strong&gt; - Because your data is probably already in Postgres, and querying traces with SQL is powerful as hell.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supabase Adapter&lt;/strong&gt; - Same as Postgres but with all the Supabase goodness if that's your thing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contexa Adapter&lt;/strong&gt; - For when you want cloud-based trace analytics without the setup headache.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Console Adapter&lt;/strong&gt; - Pretty-printed logs right in your terminal. Great for debugging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi Adapter&lt;/strong&gt; - Use multiple adapters at once. Log to file AND database. Because why not?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Privacy Thing
&lt;/h2&gt;

&lt;p&gt;Here's something most tracing tools get wrong - they log everything by default and make it hard to exclude sensitive data. I built mcp-trace-js the other way around.&lt;/p&gt;

&lt;p&gt;Want to log tool names but not arguments? Easy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;traceMiddleware&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TraceMiddleware&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;traceAdapter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;logFields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;tool_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tool_response&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;tool_arguments&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// Nope, keep this private&lt;/span&gt;
    &lt;span class="na"&gt;client_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="c1"&gt;// This too&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You control exactly what gets logged. No surprises, no accidentally logging user data you shouldn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Talk: Why This Matters
&lt;/h2&gt;

&lt;p&gt;I've seen too many projects fail because the developers lost control of their systems. You build something, it works, then it scales and suddenly you don't understand your own creation anymore.&lt;/p&gt;

&lt;p&gt;Observability isn't just about fixing bugs - it's about understanding patterns, optimizing performance, and staying in control as your system grows.&lt;/p&gt;

&lt;p&gt;With mcp-trace-js, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Debug faster&lt;/strong&gt; - See exactly what tool calls are failing and why&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimize performance&lt;/strong&gt; - Identify slow operations and bottlenecks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Understand usage patterns&lt;/strong&gt; - Know which tools are popular and which aren't&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor in production&lt;/strong&gt; - Get alerts when things go wrong, not when users complain&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Technical Details (If You Care)
&lt;/h2&gt;

&lt;p&gt;It's built with TypeScript, so you get full type safety and IntelliSense. The trace format is JSON, so you can query it however you want. It's composable, so you can use multiple adapters. It's configurable, so you can log exactly what you need.&lt;/p&gt;

&lt;p&gt;But honestly? The technical details don't matter if it doesn't solve your problem. And the problem it solves is simple: &lt;strong&gt;visibility into your MCP servers&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;mcp-trace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check out the examples in the repo. There's a basic usage example, an MCP server integration, and even a complete HTTP server setup. Pick what fits your use case and go.&lt;/p&gt;

&lt;p&gt;The documentation is straightforward, the API is clean, and it just works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I'm Sharing This
&lt;/h2&gt;

&lt;p&gt;I built mcp-trace-js because I needed it. I was tired of debugging MCP servers without proper visibility. I was tired of guessing what was going wrong.&lt;/p&gt;

&lt;p&gt;If you're building with MCP, you probably need this too. Don't wait until you're debugging a production issue at 2 AM to realize you need proper tracing.&lt;/p&gt;

&lt;p&gt;The repo is at &lt;a href="https://github.com/ContexaAI/mcp-trace-js" rel="noopener noreferrer"&gt;https://github.com/ContexaAI/mcp-trace-js&lt;/a&gt;. MIT licensed, contributions welcome, issues and PRs encouraged.&lt;/p&gt;

&lt;p&gt;Stop flying blind. Start tracing your MCP servers properly.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Found this useful? Give the repo a star and let me know what you think. And if you build something cool with mcp-trace-js, I'd love to hear about it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>modelcontextprotocol</category>
      <category>contexaai</category>
      <category>ai</category>
    </item>
    <item>
      <title>Creating Interactive Country Maps with Flutter and google_maps_flutter</title>
      <dc:creator>Akshay Galande</dc:creator>
      <pubDate>Sat, 26 Aug 2023 21:04:59 +0000</pubDate>
      <link>https://dev.to/mybytecode/creating-interactive-country-maps-with-flutter-and-googlemapsflutter-4pn7</link>
      <guid>https://dev.to/mybytecode/creating-interactive-country-maps-with-flutter-and-googlemapsflutter-4pn7</guid>
      <description>&lt;p&gt;If you're developing a Flutter application that requires displaying interactive maps with highlighted countries, you might be wondering how to achieve this using the google_maps_flutter package. While the package itself doesn't offer direct country coloring functionality, you can still accomplish this by overlaying polygons on the map. In this tutorial, we'll walk you through the process step by step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Setting Up the Project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before we begin, make sure you have a Flutter project set up. If you haven't already, install the google_maps_flutter package by adding it to your pubspec.yaml file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  flutter:
    sdk: flutter
  google_maps_flutter: ^2.0.10 # Check for the latest version\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Don't forget to run flutter pub get after adding the dependency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Creating the Map&lt;/strong&gt;&lt;br&gt;
Open your main Dart file and set up the basic structure for your Flutter app. We'll create a simple MapScreen widget that displays the Google Map.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
da  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MapScreen(),
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Overlaying Polygons&lt;/strong&gt;&lt;br&gt;
In the MapScreen widget, set up the Google Map and overlay polygons to represent countries. In this example, we'll create a single polygon to represent a country.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class MapScreen extends StatefulWidget {
  @override
  _MapScreenState createState() =&amp;gt; _MapScreenState();
}
class _MapScreenState extends State&amp;lt;MapScreen&amp;gt; {
  GoogleMapController? mapController;
  final Set&amp;lt;Polygon&amp;gt; _polygons = {
    Polygon(
      polygonId: PolygonId('country_polygon'),
      points: [
        LatLng(51.5074, -0.1278), // Example coordinates for a country
        LatLng(48.8566, 2.3522),  // Example coordinates for a country
        LatLng(52.5200, 13.4050), // Example coordinates for a country
      ],
      fillColor: Colors.blue.withOpacity(0.3), // Set the fill color
      strokeColor: Colors.blue, // Set the border color
      strokeWidth: 2, // Set the border width
    ),
  };
  void addPoints()
   {
     for( var i=0 ; i &amp;lt; GeoJson.IN.length ; i++ )
     {
       var ltlng= LatLng( GeoJson.IN[ i ][ 1 ], GeoJson.IN[ i ][ 0 ] );
       point.add( ltlng );
     }
   }

  void _onMapCreated(GoogleMapController controller) {
    mapController = controller;
  }
 @override
  void initState() {
    addPoints();
    List&amp;lt; Polygon &amp;gt; addPolygon = [
      Polygon(
        polygonId: PolygonId( 'India' ),
        points: point,
        consumeTapEvents: true,
        strokeColor: Colors.grey,
        strokeWidth: 1,
        fillColor: Colors.redAccent,
      ),
    ];
    polygon.addAll( addPolygon );
    super.initState();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Country Coloring'),
      ),
      body: GoogleMap(
        onMapCreated: _onMapCreated,
        initialCameraPosition: CameraPosition(
          target: LatLng(51.5074, -0.1278), // Initial map coordinates
          zoom: 4.0, // Initial zoom level
        ),
        polygons: _polygons,
      ),
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;LatLng Points for India&lt;/strong&gt;&lt;br&gt;
GeoJson.dart&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class GeoJson
{
 static const List IN = [
   [77.83745079947457,35.494009507787766],[78.91226891471322,34.32193634697579],
   [78.81108646028574,33.50619802503242],[79.20889163606857,32.994394639613716],
   [79.17612877799553,32.48377981213771],[78.45844648632601,32.61816437431273],
   [78.73889448437401,31.515906073527063],[79.7213668151071,30.882714748654728],
   [81.11125613802932,30.183480943313402],[80.4767212259174,29.72986522065534],
   [80.08842451367627,28.79447011974014],[81.05720258985203,28.416095282499043],
   [81.99998742058497,27.925479234319994],[83.30424889519955,27.36450572357556],
   [84.6750179381738,27.234901231387536],[85.25177859898338,26.72619843190634],
   [86.02439293817918,26.63098460540857],[87.22747195836628,26.397898057556077],
   [88.06023766474982,26.41461538340249],[88.17480431514092,26.81040517832595],
   [88.04313276566123,27.445818589786825],[88.12044070836987,27.876541652939594],
   [88.73032596227856,28.086864732367516],[88.81424848832054,27.29931590423936],
   [88.83564253128938,27.098966376243762],[89.74452762243884,26.719402981059957],
   [90.37327477413407,26.87572418874288],[91.21751264848643,26.808648179628022],
   [92.03348351437509,26.83831045176356],[92.10371178585973,27.452614040633208],
   [91.69665652869668,27.77174184825166],[92.50311893104364,27.89687632904645],
   [93.41334760943268,28.640629380807226],[94.56599043170294,29.277438055939985],
   [95.40480228066464,29.03171662039213],[96.11767866413103,29.452802028922466],
   [96.58659061074749,28.830979519154344],[96.24883344928779,28.41103099213444],
   [97.32711388549004,28.26158274994634],[97.40256147663612,27.88253611908544],
   [97.0519885599681,27.69905894623315],[97.1339990580153,27.083773505149964],
   [96.41936567585097,27.264589341739224],[95.12476769407496,26.5735720891323],
   [95.1551534362626,26.001307277932085],[94.60324913938538,25.162495428970402],
   [94.55265791217164,24.675238348890332],[94.10674197792505,23.85074087167348],
   [93.3251876159428,24.078556423432204],[93.28632693885928,23.043658352139005],
   [93.06029422401463,22.70311066333557],[93.16612755734836,22.278459580977103],
   [92.67272098182556,22.041238918541254],[92.14603478390681,23.627498684172593],
   [91.86992760617132,23.624346421802784],[91.70647505083211,22.985263983649183],
   [91.15896325069971,23.50352692310439],[91.46772993364367,24.072639471934792],
   [91.91509280799443,24.13041372323711],[92.37620161333481,24.976692816664965],
   [91.79959598182207,25.147431748957317],[90.8722107279121,25.132600612889547],
   [89.92069258012185,25.26974986419218],[89.83248091019962,25.96508209889548],
   [89.35509402868729,26.014407253518073],[88.56304935094977,26.44652558034272],
   [88.2097892598025,25.76806570078271],[88.93155398962308,25.238692328384776],
   [88.30637251175602,24.866079413344206],[88.08442223506242,24.501657212821925],
   [88.69994022009092,24.23371491138856],[88.52976972855377,23.631141872649163],
   [88.87631188350309,22.879146429937826],[89.03196129756623,22.055708319582976],
   [88.88876590368542,21.690588487224748],[88.20849734899521,21.703171698487807],
   [86.97570438024027,21.49556163175521],[87.03316857294887,20.743307806882413],
   [86.49935102737378,20.151638495356607],[85.0602657409097,19.4785788029711],
   [83.94100589390001,18.302009792549725],[83.18921715691785,17.67122142177898],
   [82.19279218946592,17.016636053937813],[82.19124189649719,16.556664130107848],
   [81.69271935417748,16.310219224507904],[80.79199913933014,15.951972357644491],
   [80.32489586784388,15.899184882058348],[80.02506920768644,15.136414903214147],
   [80.2332735533904,13.835770778859981],[80.28629357292186,13.006260687710833],
   [79.8625468281285,12.056215318240888],[79.85799930208682,10.35727509199711],
   [79.340511509116,10.30885427493962],[78.88534549348918,9.546135972527722],
   [79.18971967968828,9.216543687370148],[78.2779407083305,8.933046779816934],
   [77.94116539908435,8.252959092639742],[77.53989790233794,7.965534776232333],
   [76.59297895702167,8.89927623131419],[76.13006147655108,10.299630031775521],
   [75.74646731964849,11.308250637248307],[75.39610110870957,11.781245022015824],
   [74.86481570831681,12.741935736537897],[74.61671715688354,13.99258291264968],
   [74.44385949086723,14.617221787977696],[73.5341992532334,15.99065216721496],
   [73.11990929554943,17.928570054592498],[72.82090945830865,19.208233547436166],
   [72.8244751321368,20.419503282141534],[72.6305334817454,21.356009426351008],
   [71.17527347197395,20.757441311114235],[70.4704586119451,20.877330634031384],
   [69.16413008003883,22.0892980005727],[69.64492760608239,22.450774644454338],
   [69.34959679553435,22.84317963306269],[68.1766451353734,23.69196503345671],
   [68.84259931831878,24.35913361256094],[71.04324018746823,24.3565239527302],
   [70.84469933460284,25.21510203704352],[70.28287316272558,25.72222870533983],
   [70.16892662952202,26.491871649678842],[69.51439293811312,26.940965684511372],
   [70.61649620960193,27.989196275335868],[71.77766564320032,27.913180243434525],
   [72.8237516620847,28.961591701772054],[73.45063846221743,29.97641347911987],
   [74.42138024282026,30.979814764931177],[74.40592898956501,31.69263947196528],
   [75.25864179881322,32.2711054550405],[74.45155927927871,32.7648996038055],
   [74.10429365427734,33.44147329358685],[73.74994835805195,34.31769887952785],
   [74.24020267120497,34.74888703057125],[75.75706098826834,34.50492259372132],
   [76.87172163280403,34.65354401299274],[77.83745079947457,35.494009507787766]];
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Customization&lt;/strong&gt;&lt;br&gt;
You can add more polygons to represent different countries by creating additional Polygon objects within the _polygons set. Customize the coordinates, fill colors, and stroke colors for each polygon as needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
While the google_maps_flutter package doesn't directly provide country coloring functionality, you can still create interactive country maps by overlaying polygons and customizing their appearance. This approach allows you to highlight countries with distinct fill colors on a Google Map within your Flutter application. With the flexibility of Flutter's UI capabilities, you can create engaging and informative maps tailored to your project's requirements.&lt;br&gt;
We hope this tutorial helps you achieve your goal of displaying colored countries on a Google Map in your Flutter app. Happy coding!&lt;/p&gt;

</description>
      <category>googlemap</category>
      <category>googlemapflutter</category>
      <category>flutter</category>
    </item>
    <item>
      <title>How to set cookie using ExpressJS response.</title>
      <dc:creator>Akshay Galande</dc:creator>
      <pubDate>Mon, 18 Apr 2022 20:03:38 +0000</pubDate>
      <link>https://dev.to/mybytecode/how-to-set-cookie-using-expressjs-response-55k1</link>
      <guid>https://dev.to/mybytecode/how-to-set-cookie-using-expressjs-response-55k1</guid>
      <description>&lt;h2&gt;
  
  
  What is cookie?
&lt;/h2&gt;

&lt;p&gt;Cookies is simple key value pair stored by web server on clients browser to store/maintain user’s state.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it is different from Localstorage?
&lt;/h2&gt;

&lt;p&gt;Locastorage can also be used to store user’s state, but cookies has more advanced configurations like — expiration time, same site, secure flag, Httponly, etc. By using these advanced configurations we can programatically manage user’s state. It is considered that cookies are more secure than Localstorage in terms of handling user session or secret values like authentication tokens.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Httponly cookie?
&lt;/h2&gt;

&lt;p&gt;A Httponly cookie is a simple cookie which is set by server with httponly flag as true which cannot be accessed by client side javascript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;If you want to learn more, reach out to me at — &lt;a href="https://twitter.com/akshay_nocode" rel="noopener noreferrer"&gt;https://twitter.com/akshay_nocode&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cookie</category>
      <category>express</category>
      <category>node</category>
      <category>httplonly</category>
    </item>
  </channel>
</rss>
