How to pipe one bash command output to another within a python script

I was recently working with something which required me to build a code base and flash it into the board (hw) and then once that is done open a serial console (where the hw is connected through USB) and issue further commands on the hw. Now, that is a regular job and I wrote a python script which does all the manual works of cleaning, building etc. But flashing the binary onto the hardware is where the problem started coming. The first time I flash the board there is no issue. However, once I opened a serial console, next time when I try to flash the binary the script finds the serial console to be already occupied.

Read More »

nuttx kernel make menuconfig error in Ubuntu

If you are working with nuttx kernel you might have issues trying to bring up the kernel menuconfig with the below command:

make menuconfig

I had to do the below to get it working in a newly installed Ubuntu system:

  • Make sure you have the right compiler tool chain installed, if not install it
 sudo apt-get install gcc-arm-none-eabi
  • Make sure you have the nuttx frontend tools installed in your Ubuntu, if not install it as below:
git clone https://bitbucket.org/nuttx/tools.git
cd tools/kconfig-frontends
./configure --prefix=/usr --enable-mconf --disable-nconf --disable-gconf
make
sudo make install

Now try the make menuconfig again from the console and you should be able to see the Kernel menuconfig page somewhat like this:Screenshot from 2019-10-25 10-53-26

Useful git command for developers

Git log

git log --pretty=format:"%h%x09%an%x09%ad%x09%s"

Adding it to the bash script

echo "alias gitl='git log --pretty=format:"%h%x09%an%x09%ad%x09%s"'" >> ~/.bashrc
source ~/.bashrc

From now on you can type:

gitl
3918a7c8        Vivek Bhadra    Wed Oct 23 14:02:16 2019 +0100  Integrating the esp8266 wifi module in SPRESENSE sdk.
cbce5ee6        Vivek Bhadra    Tue Oct 22 13:16:11 2019 +0100  Fixes.
d4fc23c7        Vivek Bhadra    Wed Oct 16 16:01:03 2019 +0100  Enhanced camera App for better user interactivity.
6cc05f93        Vivek Bhadra    Wed Oct 16 13:47:02 2019 +0100  Customized for delayed capture of 1 mins.

and see the formatted git log, change the format as you would like.

Checking your current git branch

git branch -av

Add it to the .bashrc

echo "alias gitb='git branch -av'" >> ~/.bashrc
source ~/.bashrc

Type:

gitb
* customize_for_12_demo             3918a7c8 Integrating the esp8266 wifi module in XYZ sdk.
  master                            ee8f2ddf Merge pull request #41 from XXX/release-v1.4.1
  remotes/origin/HEAD               -> origin/master
  remotes/origin/auto_build_doxygen a5681292 Updated readme and only build doc from master
  remotes/origin/master             ee8f2ddf Merge pull request #41 from XXX/release-v1.4.1
  remotes/origin/release_1.0.1      ec7f3dab Release tag XYZ_1.0.001 YYY.0.001 release.

on the console to check the git branch you are on.

Creating a patch from multiple commits

git format-patch -x --stdout > patch-ddmmyyy.patch
git format-patch --ignore-space-change --ignore-space-at-eol --ignore-all-space -n --stdout > ~/patch4-LH3-18466-19092019.patch

where n is the number of commits you want to get back.
–ignore-space-change
–ignore-space-at-eol
–ignore-all-space
the above options are self-explanatory.

How to remove untracked files in git?

  • Print out the list of files which will be removed (dry run)
git clean -n
  • Delete the untracked files from the repository
git clean -f

How to not display the untracked files with git status?

git status --untracked-files=no

or


git status -uno

Renaming a local branch in command line

switch to the branch you want to rename

git checkout branch-name

Then rename it as below:

git branch -m new-name

Ubuntu developer’s tips and tricks

Stop Ubuntu going into suspended mode

Disable suspend

$ sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
Created symlink /etc/systemd/system/sleep.target → /dev/null.
Created symlink /etc/systemd/system/suspend.target → /dev/null.
Created symlink /etc/systemd/system/hibernate.target → /dev/null.
Created symlink /etc/systemd/system/hybrid-sleep.target → /dev/null.

Re-enable suspend

sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target

Introduction to Arduino

Install the arduino IDE
1. https://www.arduino.cc/en/Main/Software/
2. Select Linux 64 bit
3. Click Just Download

Unzip the downloaded file as below:
vbhadra@jupiter:~/Downloads$ tar -xf arduino-1.8.10-linux64.tar.xz

Run the arduino IDE
vbhadra@jupiter:~/Downloads$ cd arduino-1.8.10/
vbhadra@jupiter:~/Downloads/arduino-1.8.10$ ./arduino

Configure
1. Tools -> Board -> Board -> Arduino/Genuino Uno
Tools -> Port -> /dev/ttyACM0

Installing and uninstalling .zip user libraries in Arduino IDE
Install
Sketch -> Include Library -> Add .zip library
Uninstall
$ find ~/ -type d -iname Arduino
./Arduino
$ ls -la Arduino/
drwx—— 4 vbhadra vbhadra 4096 Oct 1 11:31 libraries
$ ls -la Arduino/libraries/
readme.txt xxxLPWA/ Vivek/

Remove the library folder you want to uninstall
$ sudo rm -rf Arduino/libraries/xxxLPWA/

Then modify your library code, create a .zip file and install it again.

Compile & verify the code
Sketch -> Verify & Compile
You should see “Done compiling”

Upload the code
Sketch -> Upload
You should see “Done Uploading”.

Troubleshooting
1. Issue 1:
An error occurred while uploading the sketchavrdude: ser_open(): can’t open device “/dev/ttyACM0”: Permission denied

-> Check if the port exist on the linux machine:

ls -l /dev/ttyACM*

-> Change the permission of the port as below:
sudo chmod a+rw /dev/ttyACM0

2. Junk characters in serial port

void setup()
{
  Serial.begin(9600);
  Serial.write("Hello World");
}

3. Mounting the SD card into the /mnt

mount -t vfat /dev/mmcsd0 /mnt

How to work in private branch in GIT

Time to time we have to work on source code which are downloaded from a git repository, modify the code, implement the functionality, test it, get the code reviewed and then push it up to the repository. Now, how do we achieve this with the following in mind:

1. I do not want to do a git pull on my local source code base frequently simply because it is cumbersome.

2. I however, want to catch up with the mainline code (let’s call it master branch) so that when I am ready to push the code up I do not have enormous amount of merge conflicts, or conflicting other features which somehow difficult to accommodate at the last minute. So to avoid any surprise I would like to catch up with the mainline (be it master branch)  time to time (I do it one a week at least).

3. I do not want to use merge command to catch up with the mainline code as it messes up with the git log.

All these points in mind I would recommend the below working principle:

1. git clone <git repository>

2. git checkout <branch name> (or by default you maybe already in the master branch. This would depend from source code to source code or repository to repository, so better check where you want to base your implementation.)

3. Now, after the above step 2, we are sitting at the branch where we want to start our implementation/bug fixing etc. Let’s call this “master” branch.

4. I would now like to create my private branch called “my_private”. To create a private branch do the below:

git checkout -b my_private

5. Now carry on with your implementations.

Multiple commits in private branch

While developing a new feature you might like to do it in a incremental way, i.e. when a little milestone is achieved you may like to commit it before carrying further. To do this do the below:

git add <file names>

git commit -m “commit message”

Now, if you carry on like this you would end up with multiple commits on your private branch. However, for doing review and pushing it up, it would be nice if all your changes/new implementations comes under one single commit. To achieve this you can use git interactive rebase command as below:

git rebase -i HEAD~n

where n stands for the number of commits (from the latest commits) to be included in the single commit.

This will bring up a screen which will look like as below:


pick 794969c79 Revert all commits that comprise 10x feature
pick 808bc82dd Added database version and product code into DiagnosticsPresenter.
pick 0b4d6973c Implementing Recent Tab
pick 0c284d078 Implementing Recent Tab

# Rebase 75ff6ea39..1f778b29d onto 75ff6ea39 (4 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

Leave the first pick but convert the second and all other picks to squash as below:


pick 794969c79 Revert all commits that comprise 10x feature
squash 808bc82dd Added database version and product code into DiagnosticsPresenter.
squash 0b4d6973c Implementing Recent Tab
squash 0c284d078 Implementing Recent Tab

# Rebase 75ff6ea39..1f778b29d onto 75ff6ea39 (4 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

Write and save, and you will be presented with the screen where you can decide what you would like to have as the new single commit message. Save and exit and you would have all your local commits squished into one single commit as below:


107b084c0 vbhadra Mon Sep 9 10:36:26 2019 +0100 Rework Recents presenter to communicate with STEDs facade instead of other presenter.
1aef95ec0 Andrei Tucma Tue Sep 10 08:30:19 2019 +0100 ITC5 calibration: calibrate popover option only available for itc5
8f761ce9c Robert Fry Mon Sep 9 15:57:09 2019 +0100 Possible fix for internal GPS to show signal strength
475af1405 dlangford Mon Sep 9 15:43:23 2019 +0100 STEDS Message popup design change
eb1eaf342 Algirdas Balciunas Mon Sep 9 14:24:20 2019 +0100 GPS source switching fix
460b05fee Algirdas Balciunas Mon Sep 9 14:11:25 2019 +0100 Fixed ship/cargo values in AIS data dialog
d7a47f77b Algirdas Balciunas Mon Sep 9 10:29:52 2019 +0100 Fix for app slowdown on Atom devices

Now, let’s say you want to catch up with the master branch. Go back to your master branch as below:

git checkout master (remember your base code maybe from a branch which not called master. It doesn’t matter, just go to the branch where you started)

git status (this will tell you how many commits your master is behind the latest commit)

git pull (this will bring all the latest changes delivered by others into your local master branch)

Now, go back to your private branch:

git checkout my_private (move to my_private branch)

git rebase master  (this will rebase your my_private branch with the master)


107b084c0 vbhadra Mon Sep 9 10:36:26 2019 +0100 Rework Recents presenter to communicate with STEDs facade instead of other presenter.
1aef95ec0 Andrei Tucma Tue Sep 10 08:30:19 2019 +0100 ITC5 calibration: calibrate popover option only available for itc5
8f761ce9c Robert Fry Mon Sep 9 15:57:09 2019 +0100 Possible fix for internal GPS to show signal strength

Time to push up your changes

1. Go back to the master branch

2. Merge your private branch with master

3. git push


<strong>git checkout master</strong>

<strong>git merge my_private</strong>

<strong>git push</strong>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Customizing Qt Creator 5.12.4

Install the custom Toolchain

Download and install the toolchain rpm

sudo alien ~/Downloads/<toolchain-name>.rpm

sudo dpkg -i ./<toolchain-name>.deb

Locate the arm compiler

sudo find / -iname arm-*-gnueabihf-g++ 2>/dev/null

/opt/toolchain/arm-cortexa9_neon-linux-gnueabihf-lh3/bin/arm-cortexa9_neon-linux-gnueabihf-g++

Settings

Go to the Projects Tab on the left pane.

BuildSettings

Click on the Manage Kit buttons.

ManageKits

If you want use your custom compiler and debugger etc then you have to create a manual kit.

A kit is a set of tools like compiler, QtVersion (qmake), debugger, device etc.

Before you can create a manual kit, you have to create place holders for your custom compiler, debugger etc.

Kit

image

Qt Version

Go tot the Qt Version Tab and select manual. Then click on Add button.

Here we are trying to specify the qmake binary we are going to use for the project.

In my case my qmake is located (comes from installation of the toolchain) at the below location:

/opt/toolchain/arm-cortexa9_neon-linux-gnueabihf-lh3/bin/qmake.

So in the add wizard I navigate to the above location and select qmake binary.

Qt automatically detects it as Qt Version 5.11.2. In the Kit section we are going to refer to this in near future.

Compilers

Next we have to choose our own custom C++ compiler.

In my case my C++11 compiler is located (comes from the toolchain installation) at the below location

/opt/toolchain/arm-cortexa9_neon-linux-gnueabihf-lh3/bin/arm-cortexa9_neon-linux-gnueabihf-g++.

Now, click on the Manual → C++ and click the Add button to start adding your own custom g++ compiler to the list.

This will ask you to provide a name to the custom compiler, give a name, e.g. “G++ for ATOM”, any other string you like.

Put the absolute path of the g++ binary which you want to add under the Compiler path:

/opt/toolchain/arm-cortexa9_neon-linux-gnueabihf-lh3/bin/arm-cortexa9_neon-linux-gnueabihf-g++

In the ABI, select arm-linux-generic-elf-32bit, leave the rest as default.

Apply, ok. Now you have your custom compiler in the list.

Debuggers

Go to the debugger tab.

Click on the Manual and Add.

Provide a suitable name, “ATOM GDB for Cortex A9”.

Specify the absolute path in the Path.

/opt/toolchain/arm-cortexa9_neon-linux-gnueabihf-lh3/bin/arm-cortexa9_neon-linux-gnueabihf-gdb

Apply, Ok.

Devices

In the Devices specify the details of the device where you want to run your generated binaries.

Custom Kit

Now go back to the Kits tab.

Select Manual.

Click on Add.

Provide a name for your custom Kit, e.g. ATOM.

In the Device Type, select Generic Linux Device.

In Device, select your own device, e.g. Custom Atom Device.

Compiler: C++: select your own created compiler from the drop down list.

Debugger: select the one you created previously.

Qt Version: select your own Qt Version as created previously.

Additional build arguments

Under Build & Run on the left hand panel, select the Build Option.

This will show you a loads of option on the right hand pane.

For our project we need to set the environment variable PRODUCT=ATOM.

To add this, click on the Details button along side qmake command under Build & Run.

This will look like below:

In the Additional Argument section specify, PRODUCT=ATOM.

Now, save it and try compiling your code. Make sure you clean it before giving it a try.

Git Rebasing

 

Problem Description

Suppose you have a local GIT repository where dev-stable-topic is the development branch and time to time the releases are made to the customer from a remote GIT repository which has a branch called release-stable from where the selective changes are merge in a controlled way. The remote repository is hosted in a separate linux server.

Read More »

Marketing Management Assignment – Feasibility Analysis: Launching a branch of a company in a new market/country/economic zone

Task

In your role as a Marketing Consultant, you have been asked by Wiggo*: a fictitious European supermarket (food retailer) chain (similar to Aldi and Lidl) to research and report on the feasibility of them launching in a new international market (this can be a country or economic zone of your choice and/or one you are familiar with).

Read More »

How to publish a topic with mqtt broker running on iot.eclipse.org server

As part of iot application development for IoT I had to play around with the SSL connection establishment  with the remote mqtt servers. The below briefly describes the issue I faced and how did I got over the problem while connecting to a remote mqtt server over SSL.

https://iot.eclipse.org/ is a publicly accessible which runs a MQTT server. As per the tutorial the MQTT server is accessible using the host name io.eclipse.org and the port 1883 in unsecured mode. The server can be securely accessed on the encrypted port 8883.

Read More »

How to install ssh service in Ubuntu Linux (12.04)

Check if sshd service is running in Ubuntu with the below command:


vbhadra@vbhadra-VirtualBox:~$ ps aux | grep ssh
vbhadra 1702 0.0 0.0 4088 204 ? Ss 11:49 0:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session gnome-session --session=ubuntu
vbhadra 4358 0.0 0.0 4400 824 pts/3 S+ 14:10 0:00 grep --color=auto ssh
vbhadra@vbhadra-VirtualBox:~$ sudo netstat -natp | grep sshd
vbhadra@vbhadra-VirtualBox:~$ sudo netstat -natp | grep ssh
vbhadra@vbhadra-VirtualBox:~$

The above command and their output shows there is no sshd service running on my Ubuntu Linux.

Read More »

Installing ftp service in Ubuntu 12.04

This may be very simple but to keep things handy the below will install ftp service in you Ubutu Linux machine:


vbhadra@vbhadra-VirtualBox:~$ sudo apt-get install vsftpd
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed
vsftpd
0 to upgrade, 1 to newly install, 0 to remove and 318 not to upgrade.
Need to get 130 kB of archives.
After this operation, 353 kB of additional disk space will be used.
Get:1 http://gb.archive.ubuntu.com/ubuntu/ precise/main vsftpd i386 2.3.5-1ubuntu2 [130 kB]
Fetched 130 kB in 0s (927 kB/s)
Preconfiguring packages ...
Selecting previously unselected package vsftpd.
(Reading database ... 183924 files and directories currently installed.)
Unpacking vsftpd (from .../vsftpd_2.3.5-1ubuntu2_i386.deb) ...
Processing triggers for man-db ...
Processing triggers for ureadahead ...
Setting up vsftpd (2.3.5-1ubuntu2) ...
vsftpd start/running, process 4107
vbhadra@vbhadra-VirtualBox:~$

This has been tested on a Ubutnu 12.04 running on a virtual box.

Read More »

How to modify kernel command line

[/contact-form] You can modify the kernel command line from the below dts file: ~/repos/solaris_src/linux/arch/mips/boot/dts/xyx/xyz.dts chosen { – bootargs = “console=ttyS0,115200n8 loglevel=8 earlycon=uart8250,mmio32,0x1CC40000,115200 rootwait ro”; + bootargs = “mem=32M console=ttyS0,115200n8 loglevel=8 earlycon=uart8250,mmio32,0x1CC40000,115200 rootwait ro”; };  

Write a program to convert a decimal number to its binary equivalent using stack.

#include <iostream>
#include <sstream>
#include <stdio.h>
#include <string>

using namespace std;

template <typename T>
class Stack {
private:
    int top;
    T datastore[100];
public:
    Stack() : top(-1) {}
    bool is_stack_empty(void) {return (top == -1) ? true : false;}
    bool is_stack_full(void) {return (top >= 100) ? true : false;}
    void push(T elem)
    {
        if (!is_stack_full()) {
            top++;
            datastore[top] = elem;
        }
    }

    T pop()
    {
        if (is_stack_empty()) {
            cout << "Stack is empty" << endl;
        } else {
            int data = datastore[top];
            top--;
            return data;
        }
    }

    T peek(void)
    {
        if (is_stack_empty()) {
            cout << "Stack is empty" << endl;
        } else {
            int data = datastore[top];
            return data;
        }
    }
};

int main()
{
    Stack<int> s;
    int num;

    do {
        cout << "Enter a number ";
        cin >> num;
        cout << "Number entered is " << num << endl;
        while (num)
        {
            int n = num % 2;
            num = num/2;
            s.push(n);
        }

        cout << "The binary equivalent of the number is " << endl;
        while(!s.is_stack_empty()) {
            cout << s.pop();
        }
        cout << endl;
        cout << "Do you want to continue? (y/n) ";
        getchar();
    } while (getchar() == 'y');

    return 0;
}

Write a program to check if a word is a palindrome using stack.

#include <iostream>
#include <sstream>
#include <stdio.h>
#include <string>

using namespace std;

template <typename T>
class Stack {
private:
    int top;
    T datastore[100];
public:
    Stack() : top(-1) {}
    bool is_stack_empty(void) {return (top == -1) ? true : false;}
    bool is_stack_full(void) {return (top >= 100) ? true : false;}
    void push(T elem)
    {
        if (!is_stack_full()) {
            top++;
            datastore[top] = elem;
        }
    }

    T pop()
    {
        if (is_stack_empty()) {
            cout << "Stack is empty" << endl;
        } else {
            int data = datastore[top];
            top--;
            return data;
        }
    }

    T peek(void)
    {
        if (is_stack_empty()) {
            cout << "Stack is empty" << endl;
        } else {
            int data = datastore[top];
            return data;
        }
    }
};

int main()
{
    Stack<char> word;
    string str;
    string pali = "";

    cout << "Enter a word ";
    cin >> str;
    char w;
    for (auto i = 0; i < str.size(); ++i) {
        w = str[i];
        word.push(w);
    }
    while(!word.is_stack_empty()) {
        stringstream ss;
        char c = word.pop();
        ss << c;
        string s = ss.str();
        pali += s;
    }

    if (str == pali)
        cout << "The word is a palindrome " << endl;
    else
        cout << "The word is not a palindrome " << endl;


    return 0;
}

Browse Kernel code with Eclipse

This blog will try to demonstrate the steps required to use eclipse for browsing Linux kernel level source code, e.g. Linux kernel tree or device driver codes. If you have already worked with Linux kernel level source code you will know that the Linux kernel is written in C and Linux kernel space device drivers are also written in C. For c/c++ source code the eclipse version I use is called Eclipse-CDT (C/C++ Development Tooling). My development environment is Ubuntu Linux. So most of my references will be based on Ubuntu packages but these steps are pretty much similar in other Linux distros.

Read More »

How to run an external program from a python script

This blog will try to demonstrate how a python script can be used to automate the running of an external program with data input file located at a particular location.

Lets say we have the below c++ program which reads from a data file called myData.txt located for this example at user home i.e. ~/. The user home is usually /home/<username> for example /home/vbhadra in my case. Use your linux user name instead while trying it yourself. To find out what is your home directory you can use echo $HOME in linux command prompt. Our objective in this blog is to demonstrate the pythoin script which will run any external program binary with data input. So we will have a less focus on the c++ program.

Read More »

comepletion_done

Problem Statement

The main mlme processing kernel thread comes out of the wait_for_completion() immediately without waiting for the complete() to be called on the completion variable. As a result the mlme response was erroneous and the command to check the wifi link status “sudo iw wlan0 link” was returning error.

Read More »

Is #AAP hurting Modi?

It is a myth being spread across by media that #AAP is sweeping the support of the people all across the country to garner more support in future in favour of it for some vested interest or over enthusiasm. But step back and think for a moment, Delhi was the epitome of #AAP movement, it gained its acme of campaign with all those rhetorical promises, by all those theatrics of cutting the electrical wires, burning bill in public. Populism at its best. But even after all these melodrama it couldn’t even stand as the the single largest party which it claimed to be before the election. It reminds me somewhat of the “Singur” moment in West Bengal by Mamta Banerjee. But the difference is that Mamta Banerjee (for good or bad) was able to sweep whole of Bengal, there was no sign of others around, people truly gave their mandate. But here is a party which claims to be the party with a difference (the difference is yet to come out in their practice) has not even managed to be the single largest party in a small/half state like Delhi. And I believe #AAP had a better popular plank for campaign than Mamta Banerjee. So the first impact of #AAP is not even the half of Trinomool Congress.
Now just after the election #AAP has compromised with its basic promise of not aligning with any of the “Chor”/”Bhrasth” (as they say) national parties. But they have already shook hands with Congress. Some would argue on a super technical theorem that this is not an alliance it is a support etc. But think about the support of Mulayam to Congress, that’s exactly the same, supporting from outside and not an alliance. But there is always a quid-pro-quo – Mulayam provides support to a minority govt and in turn centre doesn’t let the CBI go after him and his party leaders, centre turns a blind eye to the riots happening in the state so on and so forth. Now here in Delhi Congress’s immediate target is to defend Modi, cut into anti-congress vote and restrict him to come to power. And once that is accomplished congress can collect a bunch of so called secular parties and form the next govt. And then after what would it demand from #AAP in future that future will tell us, I have no idea. Congress support to a minority govt has been usually maximum 2 years so far. As I strongly believe there is no free lunch this has to be a part of a grand deal, time will tell.
Now coming back to #AAP garnering support across the country. So a new party with some holier than thou agenda’s, with some populist schemes in the list couldn’t even manage to totally woo the already distressed people of a very small state. And after forming the govt the way they have tried to keep their promises so far gives us two points, one they are following the standard populist measures to woo the voters(free water and 50% electricity bill reduction etc) and two that these people are modern day leftists when it comes to economy. I see a lot of people who perhaps voted for them are not happy and have already started raising their voice. So here #AAP in fact loses their voters share rather than extending it. One more point, a percentage of people who voted for AAP in Delhi thinks they want Modi as their next PM in the LS election. So #AAP loses this section of voters too when it comes to LS. The third is interesting. I see a lot of #AAP supporters are pathological Modi haters. A lot of new #AAP supporters would be bad mouthing about Modi all the time, which indicates they are the original Congress supporters and now turning to #AAP as Congress is nowhere in the picture. This section of voters are interesting because rather than cutting into Modi’s vote (which is Congress’s original plan for supporting #AAP) it seems that #AAP is now cutting into Congress’s traditional vote bank. That be the case it is going to help Mr. Modi in coming days than hurting him. It would be difficult for #AAP to translate all their dramatic campaigns in the national platform simply because state to state India is different and they would realise it soon. They would find it extremely difficult follow what they preach as lots of those are just not practical. Unlike Modi #AAP doesn’t have any track records to showcase to the people as their model of governance. The little they have shown has party gone against them already, at least to a section of voter. So however much the media may try to make the king of their choice, at last the the real people’s king would perhaps have the last laugh. Jai Hind!!

A thing called ‘PNPC’

PNPC

Who says we bongs are not good at sports? Just because we haven’t won a gold medal in the Olympics doesn’t mean we cannot. It is just that our favourite games have so far been excluded from the world events by some conspiracy by some unknown group. For example, we would have had multiple gold medals in our possession by now only if one of our favourite games called “PNPC” was there in the Olympics. We will soon find out who did this discrimination against us and launch a petition to include it ASAP.

Read More »

Extremely delighted to start off with my new client.

It’s been a new challenge, a new fresh energy was required and I am putting all into my new assignment. It’s been two weeks now and it’s all fine. Looking forward to excel in coming assignments. Feeling all set for taking up fresh new dimension into the whole aspect.

Extremely missing my family. Haven’t cuddled my little baby for around nine months in a row now. Can’t just wait anymore but still couple of months to go, can’t just help it. The recent currency dilemma is playing bad for my family’s visa. Keeping fingers crossed.
Cheers!