-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
773 lines (520 loc) · 26.2 KB
/
index.html
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
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
<!DOCTYPE html>
<html lang="en-us">
<head>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XNSPFRLLVH"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XNSPFRLLVH');
</script>
<link href="https://gmpg.org/xfn/11" rel="profile">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="Cache-Control" content="public" />
<!-- Enable responsiveness on mobile devices -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<meta name="generator" content="Hugo 0.88.1" />
<title>fossick • Vijay Anant</title>
<meta name="description" content="blog by Vijay Anant :: technology, thoughts, opinions, and rants">
<meta name="keywords" content="thoughts, programming, technology">
<meta name="robots" content="index,follow">
<meta name="googlebot" content="index,follow">
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content=""/>
<meta name="twitter:description" content="Vijay Anant"/>
<meta property="og:title" content="" />
<meta property="og:description" content="Vijay Anant" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.vijayanant.com/" /><meta property="og:site_name" content="fossick" />
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Muli" type="text/css" media="all" />
<link rel="stylesheet" href="/css/hyde-hyde.css">
<link rel="stylesheet" href="/css/print.min.css" media="print">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<!-- Icons -->
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/apple-touch-icon-144-precomposed.png">
<link rel="shortcut icon" href="/author.png">
<link href="https://www.vijayanant.com/index.xml" rel="alternate" type="application/rss+xml" title="fossick" />
<link href="https://www.vijayanant.com/index.xml" rel="feed" type="application/rss+xml" title="fossick" />
</head>
<body >
<div class="sidebar">
<div class="container ">
<div class="sidebar-about">
<span class="site__title">
<a href="https://www.vijayanant.com">fossick</a>
</span>
<div class="author-image">
<img src="https://www.vijayanant.com/author.png" alt="Author Image" class="img--circle img--headshot element--center">
</div>
<p class="site__description">
Vijay Anant
</p>
</div>
<div class="collapsible-menu">
<input type="checkbox" id="menuToggle">
<label for="menuToggle">fossick</label>
<div class="menu-content">
<div>
<ul class="sidebar-nav">
<li>
<a href="/posts/">
<span>All Posts</span>
</a>
</li>
<li>
<a href="/resume.pdf">
<span>Résumé</span>
</a>
</li>
<li>
<a href="/kn/">
<span>ವಿಜಯಾ೦ತರ೦ಗ</span>
</a>
</li>
<li>
<a href="/about/">
<span>About</span>
</a>
</li>
</ul>
</div>
<section class="social">
<a href="https://twitter.com/vijayanant"><i class="fab fa-twitter fa-lg" aria-hidden="true"></i></a>
<a href="https://github.com/vijayanant"><i class="fab fa-github fa-lg" aria-hidden="true"></i></a>
<a href="https://linkedin.com/in/vijayanant"><i class="fab fa-linkedin fa-lg" aria-hidden="true"></i></a>
<a href="https://keybase.io/vijayanant"><i class="fab fa-keybase fa-lg" aria-hidden="true"></i></a>
<a href="mailto:[email protected]"><i class="fas fa-at fa-lg" aria-hidden="true"></i></a>
</section>
</div>
</div>
</div>
</div>
<div class="content container">
<div class="post-list">
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/design-principles-and-design-patterns/">Design Principles and Design Patterns</a>
</span>
<span class="item__date">
03 Apr 2023
</span>
The relationship between design patterns and design principles
is complimentary. Design principles provide high-level guidelines and best
practices for designing software. Design patterns provide concrete
implementations to specific design problems while adhering to the design
principles
<div class="read-more-link">
<a href="/posts/design-principles-and-design-patterns/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/why-you-should-blog-too/">Why YOU Should Blog Too!</a>
</span>
<span class="item__date">
30 Mar 2023
</span>
Even though I liked the idea of blogging, I didn't know why I
should blog. What was I going to add to the world when all I know comes from
reading others' books and blogs? I had no reason to write about topics that are
already written about extensively by experts in that area. I didn't think I knew
enough contribute.
<div class="read-more-link">
<a href="/posts/why-you-should-blog-too/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/technical-debt/">Technical Debt</a>
</span>
<span class="item__date">
28 Dec 2022
</span>
Consequence of Tech Debt is quicker to market now, refactoring
effort later. Consequence of bad code is apparent speed now, legacy code and
code rewrite later.
<div class="read-more-link">
<a href="/posts/technical-debt/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/struggles-of-a-newcomer-to-fp/">Struggles Of A Newcomer To FP</a>
</span>
<span class="item__date">
09 Jun 2022
</span>
Using a language that promotes functional style of programming
does not automatically guarantee simple and maintainable code.
<div class="read-more-link">
<a href="/posts/struggles-of-a-newcomer-to-fp/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/higher-ranked-types/">Higher Ranked Types</a>
</span>
<span class="item__date">
24 Jan 2019
</span>
Monomorphism, Polymorphism, and Higher ranked types
<div class="read-more-link">
<a href="/posts/higher-ranked-types/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/gadts-talk-bengaluru-haskell-meetup/">GADTs Talk - Bengaluru Haskell Meetup</a>
</span>
<span class="item__date">
29 Nov 2018
</span>
Talk I gave at Bangalore Haskell Meetup Group on using GADTs to
bring compile time correctness to Haskell programs
<div class="read-more-link">
<a href="/posts/gadts-talk-bengaluru-haskell-meetup/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/the-expression-problem/">The Expression Problem</a>
</span>
<span class="item__date">
13 Nov 2018
</span>
The expression problem is a well known problem in programming
language theory dealing with the expressiveness of a programming language.
Whether a language can solve the Expression Problem is a salient indicator of
its capacity for expression.
<div class="read-more-link">
<a href="/posts/the-expression-problem/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/expressiveness/">Expressiveness</a>
</span>
<span class="item__date">
08 Nov 2018
</span>
What is expressiveness of a language?
<div class="read-more-link">
<a href="/posts/expressiveness/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/expressiveness-of-haskell/">Expressiveness of Haskell</a>
</span>
<span class="item__date">
04 Nov 2018
</span>
Demonstrate the expressiveness of Haskell using a simple
Binary Tree and in-order traversal in Haskell, Python and Java
<div class="read-more-link">
<a href="/posts/expressiveness-of-haskell/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/dependent-types-to-eliminate-runtime-checks/">Dependent Types To Eliminate Runtime Checks</a>
</span>
<span class="item__date">
26 Oct 2018
</span>
One of the main advantages of static typing is to catch errors before we deploy
code to production. Dependent Types allow us to eliminate some checks that are
usually done at run time. I take a simple example to show how dependent types
can be used in that regard in day-to-day programming.
<div class="read-more-link">
<a href="/posts/dependent-types-to-eliminate-runtime-checks/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/distributed-systems-and-scalable-databases/">Distributed Systems and Scalable Databases</a>
</span>
<span class="item__date">
08 Oct 2018
</span>
Introduction to distributed systems. How distributed databases work and their scaling model.
<div class="read-more-link">
<a href="/posts/distributed-systems-and-scalable-databases/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/quick-guide-to-test-driven-development-tdd/">Quick Guide to Test-Driven Development (TDD)</a>
</span>
<span class="item__date">
11 May 2018
</span>
Test-Driven Development (TDD) is a software development approach that emphasises on tests driving the development. It means that tests play a central role in guiding the entire development process. With each new test driving the development of a small piece of functionality, the tests act as both a specification and a guide, providing clear expectations for the code’s behaviour and helping developers stay focused on delivering the required features.
The Essence TDD can be summarised by two key principles:
<div class="read-more-link">
<a href="/posts/quick-guide-to-test-driven-development-tdd/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/basic-lambda-calculus/">Basic Lambda Calculus</a>
</span>
<span class="item__date">
25 Feb 2018
</span>
Introduction to Lambda-Calculus
<div class="read-more-link">
<a href="/posts/basic-lambda-calculus/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/outward-counterclockwise-spiral-matrix-traversal-haskell/">Outward Counterclockwise Spiral Matrix Traversal - Haskell</a>
</span>
<span class="item__date">
12 Feb 2018
</span>
An efficient, lazy implementation of spiral traversal on a matrix in Haskell.
<div class="read-more-link">
<a href="/posts/outward-counterclockwise-spiral-matrix-traversal-haskell/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/notes-on-sets-relations-and-functions/">Notes on Sets, Relations, and Functions</a>
</span>
<span class="item__date">
04 Nov 2017
</span>
Basic maths - Sets, Relations, and Functions
<div class="read-more-link">
<a href="/posts/notes-on-sets-relations-and-functions/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/tensorflow-basics/">TensorFlow Basics</a>
</span>
<span class="item__date">
02 Oct 2017
</span>
TensorFlow is Google's open source library for numerical computation. All computations are represented as Data Flow Graphs. The Nodes in the graph represent operations and Edges represent the data-communication between nodes.
<div class="read-more-link">
<a href="/posts/tensorflow-basics/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/thinking-in-imperative-object-oriented-and-functional-way/">Thinking in Imperative, Object Oriented and Functional way</a>
</span>
<span class="item__date">
15 Sep 2017
</span>
programming paradigms stem from different concepts about how the
world works. They represent different opinions about how to best model the world
while we are writing programs.
<div class="read-more-link">
<a href="/posts/thinking-in-imperative-object-oriented-and-functional-way/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/ooh-principles/">OO(h!) Principles</a>
</span>
<span class="item__date">
23 Oct 2016
</span>
An (incomplete) list of principles of OO software development
<div class="read-more-link">
<a href="/posts/ooh-principles/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/gadts-to-eliminate-runtime-checks/">GADTs To Eliminate Runtime Checks</a>
</span>
<span class="item__date">
15 Oct 2016
</span>
GADTs generalizes ordinary algebraic data types by permitting value constructors
to return specific types. GADTs are used for ensuring program correctness and in
generic programming. This article is specific to Haskell programming language.
In Haskell GADTs are implemented as a language extension. The article describes
these use cases with small programs.
<div class="read-more-link">
<a href="/posts/gadts-to-eliminate-runtime-checks/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/a-detour-called-monads/">A Detour Called Monads</a>
</span>
<span class="item__date">
15 Aug 2016
</span>
When learning Haskell, all of us are faced with this monad monster. I too have spent many days and night fighting it - hoping that it will grant me all the wisdom if I survive long enough. I have come to believe that the community as whole has created this monstor. And many of us have taken this detour to master the art of monstor slaying instead of going on ahead - just to realise later that the detour was unnesessory.
<div class="read-more-link">
<a href="/posts/a-detour-called-monads/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/decisions/">Decisions</a>
</span>
<span class="item__date">
15 Aug 2016
</span>
We all make decisions. We should make decisions to be happy
<div class="read-more-link">
<a href="/posts/decisions/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/duplication-vs-abstraction/">Duplication Vs Abstraction</a>
</span>
<span class="item__date">
05 Jul 2016
</span>
When you see code duplication and can’t think of an abstraction to put that piece of code in, it is wise to keep the code separate. At least until you figure out the right abstraction.
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/pair-programming-what-why-and-how/">Pair Programming - What? Why? And How?</a>
</span>
<span class="item__date">
31 Jan 2015
</span>
What? Simply put, pair programming is two programmers with a single computer working together to solve a problem!
Why? To produce better code To learn more from your peers To learn and practice objectively evaluating possible solutions To collaborate with better programmers How? The Driver is responsible to coding (owns the keyboard) The Navigator is responsible for reviewing the driver’s work 30 min Rule: Role changes every 20-30min (at a logical break point) Take control of the worl.
<div class="read-more-link">
<a href="/posts/pair-programming-what-why-and-how/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/10-vim-plugins-that-made-my-vim-easy/">10 Vim Plugins That Made My Vim Easy </a>
</span>
<span class="item__date">
04 Jan 2015
</span>
Few days back I posted the below pic online and some of my friends wanted to know how I got there. I am no vim expert and there are myriad of other (possibly better) ways of doing things. So I will just list the plugins I have used in my setup.
Note that the side panes (NERDTree on the left and Tagbar on the right) auto-collapse. They magically appear when you summon them and hide themselves when the task is done.
<div class="read-more-link">
<a href="/posts/10-vim-plugins-that-made-my-vim-easy/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/unscramble-a-word-puzzle/">Unscramble - A Word Puzzle</a>
</span>
<span class="item__date">
22 Nov 2014
</span>
Part 1 of how a newspaper puzzle became coding challenge
<div class="read-more-link">
<a href="/posts/unscramble-a-word-puzzle/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/performance-analysis-in-python/">Performance Analysis In Python</a>
</span>
<span class="item__date">
02 Nov 2014
</span>
My recent escapade with Python taught me many things. One of which is to “start doing something that interests you. And each such daring act will teach you many more things.”
This time I set out to finding ways of analysing the performance of an application - specifically Python applications. And as always I wasn’t disappointed with the results. Why Python? I just happened to be playing around with Python at the time (what I really mean is I was learning Python!
<div class="read-more-link">
<a href="/posts/performance-analysis-in-python/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/"></a>
</span>
<span class="item__date">
01 Jan 0001
</span>
A Comprehensive Guide to Microservices Components Microservices architecture has gained significant popularity in recent years due to its ability to create scalable and resilient applications. This architectural style involves breaking down complex applications into smaller, independent services that communicate with each other through well-defined APIs. In this blog post, we will explore the key components of microservices architecture, provide examples of their implementation, and discuss advanced concepts to deepen your understanding.
<div class="read-more-link">
<a href="/posts/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/"></a>
</span>
<span class="item__date">
01 Jan 0001
</span>
Chapter 1: Introduction to Microservices 1.1 What are Microservices? Microservices, is an architectural style that structures an application as a collection of small, loosely coupled services. Each service is designed to perform a specific business capability and can be developed, deployed, and scaled independently. These services communicate with each other through well-defined APIs, often using lightweight protocols such as HTTP or message queues.
The main idea behind microservices is to break down a complex application into a set of smaller, autonomous services that can be developed and deployed independently.
<div class="read-more-link">
<a href="/posts/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/"></a>
</span>
<span class="item__date">
01 Jan 0001
</span>
Chapter 10: Microservices and Domain-Driven Design (DDD) 10.1 Introduction to Domain-Driven Design (DDD) In the world of software development, Domain-Driven Design (DDD) has gained significant recognition as an approach that brings a deeper understanding of the problem domain and improves the design of software systems. When combined with microservices architecture, DDD can provide a powerful framework for developing scalable and maintainable applications.
DDD emphasises the importance of aligning software design with the domain it serves.
<div class="read-more-link">
<a href="/posts/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/"></a>
</span>
<span class="item__date">
01 Jan 0001
</span>
Chapter 2: Microservices Components In microservices architecture, components play a crucial role in designing and building scalable, maintainable, and loosely coupled systems. Components are the building blocks that encapsulate specific functionalities and services within a microservices ecosystem. They enable modular development, deployment, and management of individual services, promoting flexibility and agility in the overall system.
Microservices components can be seen as independent, self-contained modules responsible for handling specific business capabilities or technical functionalities.
<div class="read-more-link">
<a href="/posts/">Read More…</a>
</div>
</div>
<div class="post-list__item">
<span class="item__title--big">
<a href="/posts/"></a>
</span>
<span class="item__date">
01 Jan 0001
</span>
Microservices Introduction
What are microservices? Benefits of microservices architecture Comparison with monolithic architecture Design Principles
Single Responsibility Principle (SRP) Loose Coupling Autonomous Services Scalability and Resilience Architectural Components
Service Discovery API Gateway Message Brokers Service Orchestration vs. Choreography Containerisation and Orchestration (Docker, Kubernetes) Communication and Protocols
RESTful APIs Message-based Communication (e.g., RabbitMQ, Apache Kafka) Event-Driven Architecture (EDA) Service-to-Service Communication Patterns Data Management
<div class="read-more-link">
<a href="/posts/">Read More…</a>
</div>
</div>
</div>
</div>
<script type="application/javascript">
var doNotTrack = false;
if (!doNotTrack) {
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-58152749-1', 'auto');
ga('send', 'pageview');
}
</script>
<script async src='https://www.google-analytics.com/analytics.js'></script>
<script defer src="https://use.fontawesome.com/releases/v5.2.0/js/all.js"
integrity="sha384-4oV5EgaV02iISL2ban6c/RmotsABqE4yZxZLcYMAdG7FAPsyHYAPpywE9PJo+Khy"
crossorigin="anonymous">
</script>
</body>
</html>