Categorical and Numeric Data in Scikit-Learn Pipelines

I always tend to organize every aspect of my experiments with organizers as useful as Pipeline. However, one shouldn’t be passing continuous variables into a OneHotEncoder or vice versa for Scalers. The solution is, split your data, treat them in separate pipelines before merging them together again. Inspired by Scikit Learn Examples.

Continue reading Categorical and Numeric Data in Scikit-Learn Pipelines

Counting Weekends between Two Dates in PostgreSQL

I found myself the problem of counting the occurrence of specific “days of the week” between two dates; for, of course, generating features for a predictive analysis task. For example, the number of Fridays and Saturdays between 2019-01-01 and 2019-01-15. And thankfully, good old PostgreSQL came to the rescue!

Continue reading Counting Weekends between Two Dates in PostgreSQL

Collecting Documents for Transferring from NSU

Transferring your credits from North South University might seem like a huge bureaucratic mess. But it is not. This post will guide you through the process of collecting the necessary papers for the process.

Making your ID “0”

Your NSU ID has a few parts.

181 0000 6 42

The 8-th digit is our digit of interest. If it is 6, you need to make it 0 before proceeding with anything. Visit the Office of Records (Admin, Level-3) and ask them for the form to perform the ID change. You’ll need to have:

  • SSC Certificate (Original + 1 Photocopy)
  • HSC Certificate (Original + 1 Photocopy)
  • SSC Transcript (Original + 1 Photocopy)
  • HSC Transcript (Original + 1 Photocopy)

The officer will return the originals after verification. Your ID will get updated in 5 ~ 7 days depending on the workload at the office.

Requesting Documents

Typically you’ll need the “Official Transcript” and the “Medium of Instruction Certificate”. They cost 300 and 100 BDT respectively.

  • You can make the payment online from the RDS. Payments -> Online Payment.
  • Or, you can collect the necessary forms from the Office of the Controller of Examinations. (Level-3, Admin Building)

Make sure that your ID has been ‘0’-ed before you proceed with this step. Attach a photocopy of your SSC Certificate with each of the forms.

Congratulations and Good luck!

GP launched 013: Update your RegExp!

Grameenphone quietly rolled out its 013 series of numbers and it wrecked everything. No web service, including Google is working with this 013 series of numbers. Its time for developers to fix this mess and update every validation logic you may have for validating mobile numbers or MSISDNs.

I enlisted a few RegExps for de-terrorizing you, even if a bit.


Enough reading, update your RegExps now!

Flask-like “global” request context in Sanic (asyncio)

Although something like Flask’s globally accessible request object is considered a terrible way of writing code (explicit is better than implicit), sometimes it makes sense to use it. For example, while passing a Correlation-ID to track a request’s life cycle through your micro-services.

You can memorize the Correlation-ID throughout the lifecycle of a request without explicitly passing it around like juggling balls. This is actually a good approach as the Correlation ID is not a core business logic – just a distraction. We’ll see how we can implement such a request-bound “global” context in Sanic, and how to setup a simple Correlation ID implementation.


This nifty Python module can maintain a distinct context against each asyncio Task. Which means, each request can have an associated context we can use to store and pass around passive details.

$ pip install aiotask-context
from sanic import Sanic
from sanic.response import json

# import aiotask-context
import aiotask_context as context

app = Sanic()

# hook aiotask-context
async def hook_context(app, loop):

async def test(request):
    return json({"hello": "world"})

if __name__ == "__main__":"", port=8000)

Now we have a simple Sanic app with the context hooked up.

Implementing Correlation ID Generation and Passing

Now, let’s grab the correlation ID if it comes with the request, or generate our own otherwise. Afterwards, we need to save that value to the context for future use in other parts of the code (i.e. logging, requests to other microservices and so on).

from uuid import uuid4
import aiotask_context as context

async def handle_correlation_id(request):
    cid = request.headers.get('X-Correlation-ID') or str(uuid4())
    context.set('cid', cid)

And throughout the code, if you need the cid or any context value you have set, simply use context.get(key).

And the last step is definitely all about responding with the Correlation ID. We’ll be sticking to the middleware for this too. We just need to update the response object from the context.

async def insert_correlation_id(request, response):
    response.headers["X-Correlation-ID"] = context.get('cid')

Great! Now we don’t have to write spaghetti code and get lost in passing CIDs from functions to functions. Cheers!

Erlang and Elixir: Managing Multiple versions with asdf

Often keeping multiple versions of Erlang or Elixir on the same machine might become necessary; also it helps to have the latest versions on your machine as soon as they are released. An amazing tool asdf is capable of doing just that. It makes things as easy as,

asdf install erlang 20.3.2
asdf install elixir 1.6.4
asdf global elixir 20.3.2
asdf global elixir 1.6.4

Continue reading Erlang and Elixir: Managing Multiple versions with asdf

3 Tools To Help With Writing Scientific Papers

You are finally ready to start writing your first scientific paper, maybe for a journal or conference. But you don’t know where to start. You have heard of LaTeX, BibTex, Citations and nothing is really adding up. You just need easy and uncomplicated tools to work with. Learning about the new tools should not be more difficult than writing the paper itself! I am discussing a few tools and websites here, for beginners.

What is LaTeX and why does it matter?

Wikipedia prescribes LaTeX as a document preparation system; the official website states it as a typesetting system. I would describe LaTeX as a system for preparing documents where fine-grained pixel-by-pixel perfection is a reality. The leading conferences or journals provide their template in LaTeX, and often in word-processor formats. Personally, I have found word processor behavior to be quite unreliable and prefer LaTeX for it’s ease and simplicity. A quick search on your favorite search engine might (and probably will) more reasons to use LaTeX.

BibTex is a markup format for bibliography generation. It is used a lot in par with LaTeX for generating citations according to the required styling.


ShareLaTeX is a website similar to Google Docs, for LaTeX. It allows collaborative editing, history tracking and free hosting online. It also helps out by providing a plethora of templates to choose from; including templates from well-reputed journals or conferences. You will not need to install anything other than a modern web browser on your computer for using ShareLaTex, everything is done online. As per expectation, it can preview and export as PDF.


CiteThisForMe is a great website for managing your bibliography. You can generate citations for books, websites, journal articles and more. By the way, citations are the references you make to content your paper “borrows ideas from”. A variety of export styles are supported, including Harvard, MLA, Vancoover et cetera or the generic BibTex.

Google Scholar Extension for Chrome

This extension lets you search for any piece of text on Google Scholar. Also lets you discover papers, generate citations all without leaving your current tabs. I find it extremely handy for generating quick citations and searching for referenced papers while reading.

I am planning to write down a very basic tutorial on LaTeX syntax sometimes in the near future. Please let me know in the comments if you are interested.