-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
362 lines (331 loc) · 16.8 KB
/
index.html
File metadata and controls
362 lines (331 loc) · 16.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
<!DOCTYPE html>
<html lang="en" dir="auto">
<head>
<meta name="generator" content="Hugo 0.131.0"><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Vishnu Prasad</title>
<meta name="description" content="">
<meta name="author" content="Vishnu Prasad">
<link rel="canonical" href="https://vishnuprasad.blog/">
<meta name="google-site-verification" content="G-2GF369X3PK">
<link crossorigin="anonymous" href="https://vishnuprasad.blog/assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://vishnuprasad.blog/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://vishnuprasad.blog/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://vishnuprasad.blog/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://vishnuprasad.blog/apple-touch-icon.png">
<link rel="mask-icon" href="https://vishnuprasad.blog/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://vishnuprasad.blog/index.xml">
<link rel="alternate" type="application/json" href="https://vishnuprasad.blog/index.json">
<link rel="alternate" hreflang="en" href="https://vishnuprasad.blog/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
<style>
@media (prefers-color-scheme: dark) {
:root {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--code-block-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
}
.list {
background: var(--theme);
}
.list:not(.dark)::-webkit-scrollbar-track {
background: 0 0;
}
.list:not(.dark)::-webkit-scrollbar-thumb {
border-color: var(--theme);
}
}
</style>
</noscript>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-2GF369X3PK"></script>
<script>
var doNotTrack = false;
if ( false ) {
var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
var doNotTrack = (dnt == "1" || dnt == "yes");
}
if (!doNotTrack) {
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-2GF369X3PK');
}
</script>
<meta property="og:title" content="Vishnu Prasad" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://vishnuprasad.blog/" />
<meta property="og:image" content="https://vishnuprasad.blog/papermod-cover.png" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:image" content="https://vishnuprasad.blog/papermod-cover.png" />
<meta name="twitter:title" content="Vishnu Prasad"/>
<meta name="twitter:description" content=""/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Vishnu Prasad",
"url": "https://vishnuprasad.blog/",
"description": "",
"thumbnailUrl": "https://vishnuprasad.blog/favicon.ico",
"sameAs": [
"https://github.com/imewish", "https://www.linkedin.com/in/vishnu-prasad-a2490b91/", "https://dev.to/imewish", "index.xml"
]
}
</script>
</head>
<body class="list" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
} else if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://vishnuprasad.blog/" accesskey="h" title="Home (Alt + H)">Home</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://vishnuprasad.blog/posts" title="Posts">
<span>Posts</span>
</a>
</li>
<li>
<a href="https://vishnuprasad.blog/about-me" title="AboutMe">
<span>AboutMe</span>
</a>
</li>
<li>
<a href="https://vishnuprasad.blog/tags/" title="Tags">
<span>Tags</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<article class="first-entry home-info">
<header class="entry-header">
<h1>Hi I’m Vishnu Prasad</h1>
</header>
<div class="entry-content">
Here you will see blogs around AWS/Serverless/Backend etc
</div>
<footer class="entry-footer">
<div class="social-icons" >
<a href="https://github.com/imewish" target="_blank" rel="noopener noreferrer me"
title="Github">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round">
<path
d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22">
</path>
</svg>
</a>
<a href="https://www.linkedin.com/in/vishnu-prasad-a2490b91/" target="_blank" rel="noopener noreferrer me"
title="Linkedin">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round">
<path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path>
<rect x="2" y="9" width="4" height="12"></rect>
<circle cx="4" cy="4" r="2"></circle>
</svg>
</a>
<a href="https://dev.to/imewish" target="_blank" rel="noopener noreferrer me"
title="Dev.to">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round">
<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path>
<path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path>
</svg>
</a>
<a href="index.xml" target="_blank" rel="noopener noreferrer me"
title="RsS">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round">
<path d="M4 11a9 9 0 0 1 9 9" />
<path d="M4 4a16 16 0 0 1 16 16" />
<circle cx="5" cy="19" r="1" />
</svg>
</a>
</div>
</footer>
</article>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">Managing Multiple GitHub Accounts from the CLI
</h2>
</header>
<div class="entry-content">
<p>The Problem If you use multiple GitHub accounts—for example, a work account and a personal account—you may encounter a frustrating issue when working from the command line:
You try to push code to your personal repository, but GitHub rejects it with a permission denied error because it is authenticating as your work account.
This happens even though you are the owner of the personal repository.
Why This Happens GitHub allows multiple accounts, but Git does not automatically switch identities per repository The CLI (SSH or HTTPS) reuses a cached or default identity As a result, all pushes to github....</p>
</div>
<footer class="entry-footer"><span title='2025-12-23 18:30:00 +0000 UTC'>December 23, 2025</span> · 2 min · Vishnu Prasad</footer>
<a class="entry-link" aria-label="post link to Managing Multiple GitHub Accounts from the CLI" href="https://vishnuprasad.blog/posts/github-multiple-account-management-cli/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">Building a Robust Error Handling System for AWS AppSync APIs with Appsync JS Resolvers
</h2>
</header>
<div class="entry-content">
<p>Introduction If you’ve built REST APIs with AWS API Gateway, you know how nice it is to return structured error responses with proper HTTP status codes, error types, and detailed context. Then you switch to GraphQL with AppSync, and suddenly your beautiful error handling becomes… generic.
{ "errors": [{ "message": "Error" }] } That’s it. No error types. No structured context. Just a string.
This doesn’t have to be the case....</p>
</div>
<footer class="entry-footer"><span title='2025-11-23 18:30:00 +0000 UTC'>November 23, 2025</span> · 12 min · Vishnu Prasad</footer>
<a class="entry-link" aria-label="post link to Building a Robust Error Handling System for AWS AppSync APIs with Appsync JS Resolvers" href="https://vishnuprasad.blog/posts/appsync-error-handling/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">Optimizing Amazon CloudWatch Insights Queries With Field Level Indexes for Efficient Log Analytics
</h2>
</header>
<div class="entry-content">
<p>Introduction to Amazon CloudWatch Logs Insights Amazon CloudWatch Logs Insights is a powerful tool designed to help developers, DevOps engineers, and cloud administrators extract actionable intelligence from their log data. Whether you’re troubleshooting application errors, monitoring system health, or auditing security events, CloudWatch Logs Insights enables you to query logs in real time using a purpose-built query language.
Query Methods: CloudWatch Logs Insights uses a SQL-like syntax with support for commands like:...</p>
</div>
<footer class="entry-footer"><span title='2025-02-14 18:30:00 +0000 UTC'>February 14, 2025</span> · 4 min · Vishnu Prasad</footer>
<a class="entry-link" aria-label="post link to Optimizing Amazon CloudWatch Insights Queries With Field Level Indexes for Efficient Log Analytics" href="https://vishnuprasad.blog/posts/cloud-watch-logs-field-level-indexes/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">AWS SQS With Lambda, Partial Batch Failure Handling: Improved Way
</h2>
</header>
<div class="entry-content">
<p>This article is the continuation of one (link) of the previous articles, where I explained how to handle partial batch failures in SQS when using it with AWS Lambda. At the time of writing that article, there was no native way of handling this. Two feasible methods were, either using a batch size of one or deleting each successful message after processing.
Quick Recap On, What Happens If One Of The Messages In The Batch Failed To Process....</p>
</div>
<footer class="entry-footer"><span title='2024-03-11 18:30:00 +0000 UTC'>March 11, 2024</span> · 3 min · Vishnu Prasad</footer>
<a class="entry-link" aria-label="post link to AWS SQS With Lambda, Partial Batch Failure Handling: Improved Way" href="https://vishnuprasad.blog/posts/aws-sqs-lambda-partial-batch-failure-improved-way/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">How to Run AWS Lambda every 10 sec
</h2>
</header>
<div class="entry-content">
<p>Recently I had a requirement at work to run a cron job every 10 sec or 30 sec to poll some third-party API to pull some data. There will be more than 40 of these cron parallelly to fetch different sets of data from different APIs. The first obvious option would come to a serverless first mindset which I have is to run these on lambda functions.
The only native way in AWS to run the Lambda function is to have an Event bridge trigger with Cron expressions....</p>
</div>
<footer class="entry-footer"><span title='2023-02-18 18:30:00 +0000 UTC'>February 18, 2023</span> · 3 min · Vishnu Prasad</footer>
<a class="entry-link" aria-label="post link to How to Run AWS Lambda every 10 sec" href="https://vishnuprasad.blog/posts/how-to-run-aws-lambda-every-10-sec/"></a>
</article>
<footer class="page-footer">
<nav class="pagination">
<a class="next" href="https://vishnuprasad.blog/page/2/">Next »
</a>
</nav>
</footer>
</main>
<footer class="footer">
<span>© 2026 <a href="https://vishnuprasad.blog/">Vishnu Prasad</a></span>
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>