Bulk Shorten URLs with your Bitly API (v4) and Google App Script using google sheets (working in 2022)

This is a working code for Bitly using v4 API to shorten a long URL. You can also create a copy of this sheet and bulk create bitly links using the function bitlyShortenUrl in the 3rd column- https://docs.google.com/spreadsheets/d/1TS-aQcDu3rRv-LexEoIqDiX0ydv69ijkXQP-nuQdBz4/edit#gid=0

function bitlyShortenUrl(longLink, accessToken) {
  var form = { 
    "domain": "bit.ly",
    "long_url": longLink
  };
  var url = "https://api-ssl.bitly.com/v4/shorten";

  var options = {
      "headers": { Authorization: `Bearer ${accessToken}` },
      "method": "POST",
      "contentType" : "application/json",
      "payload": JSON.stringify(form)
  };
  var response = UrlFetchApp.fetch(url, options);
  var responseParsed = JSON.parse(response.getContentText());
  return(responseParsed["link"]);
}

PS: Bitly access token details given here https://support.bitly.com/hc/en-us/articles/230647907-How-do-I-generate-an-OAuth-access-token-for-the-Bitly-API-

Wireless File transfer from Oneplus to Mac

On your OnePlus phone:

  1. Enable hotspot on you android phone.
  2. Download and Install CX File Explorer from https://play.google.com/store/apps/details?id=com.cxinventor.file.explorer
  3. Click on “NETWORK” tab and then “Access from network”
  4. Click “Start Service”

On your Macbook:

  1. Connect Mac to your Phone’s hotspot.
Goto Finder. Click “Go” > “Connect to Server”
  • Now enter the username as “pc” and the password as shown in your phone.
  • Now your Mac should get connected to android. You should be able to enjoy file transfer wirelessly on your oneplus using hotspot connection. From your android phone to Mac or vice versa.

MAC OS – Digitally sign pdf e-mudhra | epass 2003 auto

On your Mac


  • Unzip, open and install “ePass2003-India-20210303.pkg”. You will have to allow this program in System Preferences > Security & Privacy
  • Now open “EnterSafeUserMgr” via applications. You should see Token is inserted and ready to use.
  • Now “Export” the “.cer” file to a location on your mac.
  • Download “Adobe Acrobat Reader DC” for mac (not Pro DC).
  • Open the pdf file to be digitally signed in Acrobat Reader and click on the placeholder for the digital signature.
Click on “Use a Signature Creation Device”
Click on Manage Digital ID
In PKCS#11 Modules and Tokens, click on Attach Module and choose library path as “/usr/local/lib/libcastle_v2.1.0.0.dylib”. The value may be different for you, please check. This library got installed when you installed the emudhra software.
Click on refresh a few times, if it asks for “login”, enter the password for your DSC device. Thereafter, you should see your attachable signature. In my case the signature has expired, which I will be renewing.

Common git commands to use

Here are a common git commands that I end up using pretty frequently. Will keep on updating this list

  1. List all remote branches
  2. Simplest is git branch -a Shows all remote and local branches. git branch -r Will show all remote branches only.
    Another way is to use git remote feature like:
    git remote show origin This shows all branches on remote and how they corelate with local repo.
    git ls-remote Will meticulously list all branches and tags.

  3. Just view modified files between 2 branches (without diff)
  4. git diff --name-status master..branch Will list out only filenames git diff master..branch without –name-status will show whole diff.

  5. git remote -v Displays url of remote repo from where local git was pulled
  6. Alternatively use git remote show origin or git config --get remote.origin.url

  7. Viewing Unpushed Git Commits
  8. git log origin/master..HEAD
    To view diffs: git diff origin/master..HEAD
    Another way: git log @{u}..

Timesjobs.com sell your email address and phone numbers to spammers

Online job search portals are flourishing in India. However it turns out that some job portals have totally sold their conscience and pay no respect to user’s privacy and trust. One such lame job portal is timesjobs.com. The retards in this company carelessly sell user’s email and phone to nuisance creating spammers, breaching all privacy policy clauses as laid down on their own website. These nasty spammers, in turn send useless crap about lottery, and hoax job offers.

To expose their scandal, I registered on timesjobs.com via a separate email id specially made for timesjobs. Soon I started receiving spam messages. When I analysed headers in the original email, it officially proved that messages were sent to timesjobs id.

I have sent an email to their corporate office as well.

To: corporatecare@timesgroup.com

Hi,

I recently realized that timesjobs is illegally selling private information like phone numbers and email addresses to spammers and marketeers. I have attached a snapshot which proves this. It is a clear breach of the privacy policy as mentioned here: http://www.timesjobs.com/popuphtml/privacy.html.

Let me know what explanation you have for this.

-Prakhar

I am trying to find a legal aspect to sue these guys. If anyone is aware of this process, kindly let me know. In the meantime, request you to tweet and digg this post so that timesjobs can learn some lesson.

Bank Loan EMI and recurring deposit interest calculator

Just yesterday, I was signing up for a LIC Jeevan Saral plan. I needed to perform some quick calculation to select the best recurring deposit (RD), based on ROI. I tried searching for some good online utility which can serve the purpose. To my surprise, out of several available online calculators, there was not a single one which was presentable enough. None of them provide breakup details etc. I decided to create one myself and make it publicly available so that others can use it as well.

Features:

  • Cleaner user interface. No clutter.
  • Provides accurate calculations and 2 decimal precision.
  • Time (in years or months) can be in fractions.
  • Rate of interest can be above 100.
  • Printer friendly print option.

Loan EMI calculator: https://prakhargoel.com/projects/calculators/emi_calculator.php

Annual Recurring Deposit Calculator: https://prakhargoel.com/projects/calculators/annual_recurring.php

Monthly Recurring Deposit Calculator: https://prakhargoel.com/projects/calculators/monthly_recurring.php

Handy commands in Mac/Linux systems

Here’s a list of common commands I use in Linux. I will continue to update this list with more stuff.

  1. Checking fireball logs:
  2. [code lang=”bash” gutter=”false”]
    cat /var/log/appfirewall.log

    # You will see stuff like
    Jun 21 10:37:51 prakhars-MacBook-Pro Firewall[90]: postgres is listening from 0.0.0.0:5432 proto=6
    Jun 21 10:38:11 prakhars-MacBook-Pro Firewall[90]: mysqld is listening from ::ffff:0.0.0.0:3306 proto=6
    Jun 21 10:40:21 prakhars-MacBook-Pro Firewall[90]: Dropbox is listening from 0.0.0.0:17500 proto=6
    Jun 21 10:40:21 prakhars-MacBook-Pro Firewall[90]: java is listening from ::ffff:0.0.0.0:0 proto=6
    Jun 21 10:44:38 prakhars-MacBook-Pro Firewall[90]: GoogleTalkPlugin is listening from 127.0.0.1:49198 proto=6
    Jun 21 10:45:35 prakhars-MacBook-Pro Firewall[90]: python is listening from 127.0.0.1:8000 proto=6
    [/code]

  3. screen command: Use it to create parallel sessions in terminal. Useful for running long processes on remote servers even after signing out of server.Usage:
    [code lang=”bash”]
    screen
    # This creates a separate screen.

    screen -ls
    #lists all attached/detached screens IDs

    screen -x 13152
    # Enter (Attach) screen ID 13152 (just an example, can be any ID number)

    echo $STY
    # Displays current screen ID you are working in.
    [/code]
    Ctrl-a d Detach from current screen.

  4. dpkg --get-selections List all installed packages. (Only on debian systems like Ubuntu which support apt-get)
    Smartly grep to find package you are looking for eg- dpkg --get-selections | grep mysql

Using Django using VirtualEnv on MAC. Fast forward installation.

This is a fast forward tutorial which will guide you through django installation on virtualenv. Detailed installation instructions using source codes can be found on respective package’s official site.

Pre- Requirements:
Make sure you have easy_install on MAC
Install pip using easy_install pip

1) Installing Virtualenv: Run following lines in terminal:

[code lang=”bash” gutter=”false”]
pip install virtualenv
pip install virtualenvwrapper

# Use a text editor to edit .profile and Insert following lines. Eg using vim:
# $ vim .profile
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh

# Now open a new terminal window and Type:
mkvirtualenv myfirstproject

# You will see something like:
(myfirstproject) $

# This means you are now working isolatedly in myfirstproject
# The location of this project is ~/.virtualenvs/myfirstproject
[/code]

2) Installing Django and South:

[code lang=”bash” gutter=”false”]

# [info] Make sure you are inside myfirstproject:
# $ workon myfirstproject
# Now run in terminal:

pip install Django
pip install south

# This installs Django in: .virtualenvs/myfirstproject/lib/python2.6/site-packages/django/

[/code]

3) Starting first django project:

  • [info] Type workon myfirstproject if you are not already in your virtual environment.
  • [info] you can directly go to your site packages dir by typing cdsitepackages
  • [info] can check the location of django-admin by which django-admin.py
  • Initiating django project now. Assuming you are at .virtualenvs/myfirstproject/ Type:
  • django-admin.py startproject mydjangoproject
  • This will start your first django project.
  • Now start server by
  • python manage.py runserver Default port is 8000. If you have to change port, just write port number after runserver
  • Now, Visit browser at localhost:8000
  • Congrats, we have just installed a basic django app.

Display file permissions as octal number in ls command

Normally, in *nix systems like Linux, mac the file permissions are displayed as symbolic notations. So when doing a ls -l in a directory you’ll see drwxr-xr-x+ like symbolic permissions next to a directory. This is equivalent to 755 in octal permissions. I find octal permissions easier to grasp and understand. Unfortunately, there is no native switch in ls to show octal permissions. So here is a little custom command that will do the needful.

[code lang=”bash”]
ls -l | awk ‘{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o ",k);print}’
[/code]

This command will show octal file permissions before its symbolic representation.

If you find it impressive and would like to bookmark it, just add this line in your ~/.profile or ~/.bash_profile (depending on mac or linux) using your favorite editor (I’d use vim).

[code lang=”bash”]
alias l= "ls -la | awk ‘{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(\" %0o \",k);print}’"
[/code]

We have just escaped $ and " with a \ in above line.

Some under-the-hood details: This command works by piping the output of ls -l to awk as its input. awk is a pattern directed scanning and processing language. For more info you can do man awk which shows:

Awk scans each input file for lines that match any of a set of patterns specified literally in prog or in one or more files specified as -f progfile. With
each pattern there can be an associated action that will be performed when a line of a file matches the pattern. Each line is matched against the pattern
portion of every pattern-action statement; the associated action is performed for each matched pattern. The file name – means the standard input. Any file
of the form var=value is treated as an assignment, not a filename, and is executed at the time it would have been opened if it were a filename. The option
-v followed by var=value is an assignment to be done before prog is executed; any number of -v options may be present. The -F fs option defines the input
field separator to be the regular expression fs.

An input line is normally made up of fields separated by white space, or by regular expression FS. The fields are denoted $1, $2, …, while $0 refers to
the entire line. If FS is null, the input line is split into one field per character.

A pattern-action statement has the form

pattern { action }

A missing { action } means print the line; a missing pattern always matches. Pattern-action statements are separated by newlines or semicolons.