Articles

On compound interest

How interest rates and time period of investment, effects return.

by ciju

Blogs

Sort order preserving serialization

FoundationDB is a distributed key-value store. From the database perspective, both keys and values are just bytes. Keys are sorted lexicographically and different chunks are assigned to different servers. Because of this locality property, the range read operation is efficient as most of the time the client would be able to fetch the data from a single server.

by ananthakumaran - 17 Aug 2018
High contention allocator

FoundationDB is a distributed key-value store. The whole database can be considered as a giant sorted map where keys and values are bytes. FoundationDB client libraries provide two means for handling namespaces.

by ananthakumaran - 05 Aug 2018
Introducing exq-scheduler, a distributed scheduler for Sidekiq

One of our customers wanted to setup a time based job scheduling system, similar to cron, to reliably schedule critical tasks. They were already using sidekiq, to run some tasks in the background. To improve fault tolerance, we tried running sidekiq-schedular (a popular scheduling library) in a distributed setup. But we found synchronization issues that could lead to jobs being scheduled multiple times under some scenarios. In our effort to fix these issues, we built exq-scheduler.

by rahul - 17 Jul 2018
A primer on Elixir Stream

For many problems in programming, the most straightforward solution is to transform a list (E.g. map/filter/reduce etc over it). Once in a while, there will be problems which could be solved with list and transformations, except that the list is big and consumes lot of memory. Let’s say you want to export records in database as a csv report, it might not be possible to load the entire set of records in memory before the transformations can be applied to it. Stream abstraction in Elixir is designed to address these kinds of problems.

by ananthakumaran - 28 Nov 2017
Debugging cryptic errors

At a project I am working on, our backend system makes http requests to hundreds of different servers. It is sort of like webhook, http requests are made to the customer server with the payload whenever some specific events occur in our system. We were in the midst of migrating our systems from ruby to elixir.

by ananthakumaran - 08 Aug 2017
Visualization of backoff functions

Failures are inevitable in any system. How it should be handled varies from one system to another. In job processing systems, a common approach is to retry the failed jobs for a fixed number of times before they are considered as permanent failures. A backoff function is used to determine the wait time between successive retries.

by ananthakumaran - 01 Apr 2017
Y combinator in small steps

The Y combinator is an interesting construct, allowing recursion without referring the function being recursed. In other words, call a function recursively, without naming it. We will go through one approach of deriving it.

by ciju - 16 Jul 2015
Mocha TDD like DSL in less than 100 lines

TL;DR A minimal synchronous mocha like DSL, in less than 100 lines of JavaScript. Code at github.com/ciju/mini-mocha

by ciju - 14 Jun 2015
Logging with Colors in JavaScript Console (Chrome/FF)

colorlog.js Helps with managing the information overload in JavaScript Console logs.

by ciju - 09 Aug 2013
Salary Reviews need not be black magic

When we started Activesphere we were very sure that we wanted to have a an open salary system, ie. everybody knows everybody’s salaries. We have stuck to it, and it seems to have worked well for us for the last 3 years. But come April of every year, we need to give hikes to people and it becomes really hard to figure out how to give hikes and who should get more and who should get less.

by Sreekanth - 25 Apr 2013
Gotunnel: make localhost server accessible over internet

To access a server on the internet, you need its IP address and port. Your local machine might be running behind a NAT. So, a server running on your local machine, might not be addressable from internet (ex: no publically visible IP). This is where localtunnel comes in. It makes the local server accessible over an IP (and port), on the internet.

by ciju - 26 Mar 2013
Scaling and Large numbers

Let’s take a pop Quiz.

An alter table on a MySQL database, takes 10 seconds to execute on a table of 30,000 rows.

How much time will it take on a table that has 80 million rows?

by Sreekanth - 07 Feb 2012
Node.js Patterns Presentation

I spoke at the JsFoo a month ago, It was a brief introduction to Node and things we dealt with when building Activenode(from the NodeKnockout).

by Sreekanth - 13 Nov 2011
Node toolbox

While searching for a node client for CouchDb, we came across quite a few node.js packages. 6 to be precise, to figure out the best fit for our project, we had to do a fair bit of Googleing and look at Github to see which ones are active and better fit for the project.

A lot of projects are defunct, have very little documentation or just experimental. It would be good to go to one place to find the right module and a general feeling of how good the module is.Turns out there is one, the Node Modules Wiki page. It shows simple wiki page that lists modules by categories.

Coming from the Ruby world which has a similar vibrant community and tons of gems, we felt there needed to be a version of the awesome Ruby Toolbox

So over a weekend we build a simple version of it and called it Node toolbox

by Nilakanta - 25 Oct 2011
NodeKnockout and Activenode.no.de

Last weekend we participated in the community driven 48 hour programming contest called Node Knockout. The idea is to go from an idea to production in exactly 48 hours using the wonderful Node.js. Noders from all over the world compete for the prizes that are awarded based on Innovation, Design, Utility and Completeness

by Sreekanth - 31 Aug 2011
From the begining programmer's bookshelf

We were looking for some book recommendations for some of the new people we hired recently. And here is an opinionated list of books and some of my thoughts around it.

by Sreekanth - 22 Aug 2011
Things we don't like about Couchdb

We love Couchdb, it is a workhorse, and we use it on a lot of projects. Obviously it does not fit everywhere. There are some places where it just does not cut it. I am trying to document a few issues we’ve been having with couchdb.

by Sreekanth - 27 Jun 2011
Goodbye Rails, Hello Node.js

A few months ago, I decided to play with node.js. The new server side JavaScript hotness and now I am hooked onto it. I use Ruby on Rails for most of my work. Though I am not a big fan of Rails, it is better than most things around and it’s in Ruby which I really like.

by Sreekanth - 21 Apr 2011
Rise of Symmetric Systems

For a long time we have been building software in a very standard fashion, put a web server in the front, a big application server and a standard backing database. This is the standard layered architecture. Most application stacks Rails or .Net for example assume a single database server, a few application servers, some web servers and a load balancer.

by Sreekanth - 30 Mar 2011
Restful design, Open formats and an Outlook Add-In

We mostly work with startups, and most prefer using dynamic languages like Ruby and Python. Occasionally though, we have worked on .NET/Java projects because they were really interesting. One such project was to build an Outlook add-in to synchronize mails, contacts and calendar to a CRM system. There was already an existing add-in we were replacing, because it had lots of bugs, and its performance was bad. We analyzed the problems with the existing design and moved towards a more RESTful design. Using a RESTful design helped us in several ways:

by Suresh Harikrishnan - 11 Mar 2011
Introducing Couchup. An interactive Couchdb Console

Recently a friend asked me how to fetch multiple documents from couch using a single request. Couch 0.90 and above provided the ability to post to couch the array of keys to return the matching documents. But he was having trouble getting curl to work correctly. I had to dig through the code to give him the actual curl request.

by Sreekanth - 28 Feb 2011
CouchDb: The Honda Accord of databases

We have been using with CouchDB at Activesphere, for some of our customer projects.

We looked at a few options before we eventually plunged into Couchdb ‘Relax’. I’m trying to list out in hindsight why CouchDb has worked out a good choice for us.

by Sreekanth - 19 Feb 2011
Activesphere: Long time coming

It took us a long time to post this first blog, but we are officially here now.

by Sreekanth - 10 Feb 2011