How interest rates and time period of investment, effects return.
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.
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.
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.
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.
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.
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.
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.
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?
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).
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
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
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.
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.
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.
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:
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.
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.
It took us a long time to post this first blog, but we are officially here now.