Higher Ranked Types
24 Jan 2019
Monomorphism, Polymorphism, and Higher ranked types
GADTs Talk - Bengaluru Haskell Meetup
29 Nov 2018
Talk I gave at Bangalore Haskell Meetup Group on using GADTs to
bring compile time correctness to Haskell programs
The Expression Problem
13 Nov 2018
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.
Expressiveness
08 Nov 2018
What is expressiveness of a language?
Expressiveness of Haskell
04 Nov 2018
Demonstrate the expressiveness of Haskell using a simple
Binary Tree and in-order traversal in Haskell, Python and Java
Dependent Types To Eliminate Runtime Checks
26 Oct 2018
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.
Distributed Systems and Scalable Databases
08 Oct 2018
Introduction to distributed systems. How distributed databases work and their scaling model.
TDD Mantra
11 May 2018
The Essence Don’t write a line of new code unless you first have a failing automated test. Eliminate duplication. (refactor) What is Needed The ability to write concrete, deterministic, automated tests is a prerequisite for applying TDD.
Mantra - Order in Programming The two mantras imply an order to the tasks of programming:
Red - write a little test that doesn’t work, perhaps doesn’t even compile at first Green - make the test work quickly, committing whatever sins necessary in the process Refactor - eliminate all the duplication created in just getting the test to work Implications The simple mantra generates complex individual and group behavior.
Lambda Calculus
25 Feb 2018
Introduction to Lambda-Calculus and Church Numerals
Outward Counterclockwise Spiral Matrix Traversal - Haskell
12 Feb 2018
An efficient, lazy implementation of spiral traversal on a matrix in Haskell.
Notes on Sets, Relations, and Functions
04 Nov 2017
Basic maths - Sets, Relations, and Functions
TensorFlow Basics
02 Oct 2017
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.
Thinking in Imperative, Object Oriented and Functional way
15 Sep 2017
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.
OO(h!) Principles
23 Oct 2016
An (incomplete) list of principles of OO software development
GADTs To Eliminate Runtime Checks
15 Oct 2016
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.
A Detour Called Monads
15 Aug 2016
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.
Decisions
15 Aug 2016
We all make decisions. We should make decisions to be happy
Duplication Vs Abstraction
05 Jul 2016
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.
Pair Programming - What? Why? And How?
31 Jan 2015
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.
10 Vim Plugins That Made My Vim Easy
04 Jan 2015
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.
Performance Analysis In Python
02 Nov 2014
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!