I moved to Linux from being a Windows power user, you should too. Here's Why.

One year ago, I switched to Linux operating system from windows and I realized how much I've been missing so much of the customization that is offered by Linux. So Why you should move to Linux? There are a number of advantages and there are some downsides too. The Linux v/s Windows battle is a never ending one mostly because both the operating systems have their own share of users. And amidst that comes Mac OS, which again have a lot of users using it too. Here I am not going to write about what you get in Linux and not in Mac os or Windows (You'll get plenty of those articles on the Internet). I will just write how effective things have become after I made the switch from Windows to Linux.

But almost 54% of the worldwide home PCs run Windows. According to me the main reason for that would be Gaming, and the user friendliness that Windows is able to make up with its users. I am any computer science freshman, and I must say Open Source is way cooler than proprietary software. 

Using Linux for getting better at Programming

Using the command line for programming gave me a better understanding how things are actually working and I am able to debug my programs better, I am kind of anti-IDE guy, So switching here and there between tmux sessions and figuring what was going wrong in the browser from a script running from the terminal, all these stuff for me would never have been possible for me If I were using Windows right now. 
For some, this might be like "hah.. He's new to the game.." yeah, I am kind of new and pretty late into the game too. For the Windows lovers it will be like "You can code in Windows too! Nothing's stopping you!" Well, Here's my view, Using something like Linux gives you the the Command Line. 
Hey! Windows has powershell! It's powerful too!
Yeah maybe, but the light feel and and customization that Linux gives is much much more than what Windows has to offer. I am not saying those who code in Windows are unaware of the awesomeness of Linux, I am just writing this for the love for Linux and open source.

So, I was into programming when I was using windows, here's what I learnt after  the switch.

  • Knowing your way through the command line can help you get better at figuring out what problems can you be having with those path and library issues. At this point, I am able to figure out what missing or what's going wrong without heading over to SO and it gives me pleasure to run across the filesystem and open up the file which is having the issues and then reading it and figuring out what's up. 
  • Knowing the IO can help you solve your file problems in your program, may it be c,cpp,python,nodejs anything. It just helps a lot!  
  • Basically If you use a command line, you know which path you are heading which I don't think I ever got when I was using windows. It really helped me a lot build a better understanding of the basics, I mean I am still at the basics. xD
And because I see everyone in the community showing so much love to open source, I also feel like giving some, but alas! I don't have it(the skill they call it). So In a way Linux and Opensource has always motivated me to get better and better at C++ and JavaScript, so that someday I'll be able contribute something to the community. Which I think I am going to do pretty soon too! 

So that was my story about how Linux helped me get better at programming, now Linux have also helped me think SIMPLE.

Linux as a source of Entertainment 

Getting frustrated becomes your hobby when it comes to entertain yourself using Linux, As a initial distro I used Linux Mint. I liked editing photos in Photoshop and stuff, Here with gimp I had a very limited set of tools and when I thought of watching some movie the codecs were not well supported for some, So basically in Linux "You Make Things Work" , These kind of problems arise in Windows too for sure but how many times do you get the opportunity to read the code behind the problem and understand nothing or something at times. It's all worth it I guess. 

There are so many helpful learning projects such as the LFS, which guides you through building your own custom Linux. Things are more fun and entertaining with Linux because you break things and you fix them. It's almost like having breakfast after a 10km run. 

Do you need to switch to Linux from Windows?

Well this depends on you, If you are a designer or something like that In my knowledge sticking around with windows and Mac OS are the best options, though there are a few good multimedia utilities in Linux, but not as robust as the ones adobe has to offer. 
If you use git and gihub for programming needs, you should definitely try doing it from the bash shell or the shell of your choice in some Linux distribution. Also there are so many distributions to choose from and to be honest, some actually look much much better than windows does [peace bro].  You can choose what Window manager you want to use, like for example I am using something called the i3 tiling window manager which  tiles everything you see on your screen, Whereas in Windows you can't have that kind of customization, all you can do is add some silly theme. Agree with me or not, you should definitely give a try to Linux because it's really awesome.    

An Introduction to Linux Kali Commands

Kali Linux is a Debian-derived Linux distribution designed for digital forensics and penetration testing. It is maintained and funded by Offensive Security Ltd. It was developed by Mati Aharoni and Devon Kearns of Offensive Security through the rewrite of BackTrack, their previous forensics Linux distribution.

What makes Kali linux a favorite OS for every hacker or pentester is that Kali Linux is preinstalled with numerous penetration-testing programs, including nmap (a port scanner), Wireshark (a packet analyzer), John the Ripper (a password cracker), Aircrack-ng (a software suite for penetration-testing wireless LANs), Burp suite and OWASP ZAP (both web application security scanners). Also Kali Linux can run natively when installed on a computer’s hard disk, can be booted from a live CD or live USB, or it can run within a virtual machine. It is a supported platform of the Metasploit Project’s Metasploit Framework, a tool for developing and executing security exploits.

Knowing commands used in linux can help us get a good hold on the OS. In this article We are going to be looking at some of the basics of Linux kali commands. This is really just to get you started – to get you prepared.

Here are the list of  all Kali Linux Commands ( Most of them are same with all other Linux Distros )


apropos Search Help manual pages (man -k)
apt-get Search for and install software packages (Debian)
aptitude Search for and install software packages (Debian)
aspell Spell Checker
awk Find and Replace text, database sort/validate/index


basename Strip directory and suffix from filenames
bash GNU Bourne-Again SHell
bc Arbitrary precision calculator language
bg Send to background
break Exit from a loop
builtin Run a shell builtin
bzip2 Compress or decompress named file(s)


cal Display a calendar
case Conditionally perform a command
cat Concatenate and print (display) the content of files
cd Change Directory
cfdisk Partition table manipulator for Linux
chgrp Change group ownership
chmod Change access permissions
chown Change file owner and group
chroot Run a command with a different root directory
chkconfig System services (runlevel)
cksum Print CRC checksum and byte counts
clear Clear terminal screen
cmp Compare two files
comm Compare two sorted files line by line
command Run a command - ignoring shell functions
continue Resume the next iteration of a loop
cp Copy one or more files to another location
cron Daemon to execute scheduled commands
crontab Schedule a command to run at a later time
csplit Split a file into context-determined pieces
cut Divide a file into several parts


date Display or change the date & time
dc Desk Calculator
dd Convert and copy a file, write disk headers, boot records
ddrescue Data recovery tool
declare Declare variables and give them attributes
df Display free disk space
diff Display the differences between two files
diff3 Show differences among three files
dig DNS lookup
dir Briefly list directory contents
dircolors Colour setup for `ls'
dirname Convert a full pathname to just a path
dirs Display list of remembered directories
dmesg Print kernel & driver messages
du Estimate file space usage


echo Display message on screen
egrep Search file(s) for lines that match an extended expression
eject Eject removable media
enable Enable and disable builtin shell commands
env Environment variables
ethtool Ethernet card settings
eval Evaluate several commands/arguments
exec Execute a command
exit Exit the shell
expect Automate arbitrary applications accessed over a terminal
expand Convert tabs to spaces
export Set an environment variable
expr Evaluate expressions


false Do nothing, unsuccessfully
fdformat Low-level format a floppy disk
fdisk Partition table manipulator for Linux
fg Send job to foreground
fgrep Search file(s) for lines that match a fixed string
file Determine file type
find Search for files that meet a desired criteria
fmt Reformat paragraph text
fold Wrap text to fit a specified width.
for Expand words, and execute commands
format Format disks or tapes
free Display memory usage
fsck File system consistency check and repair
ftp File Transfer Protocol
function Define Function Macros
fuser Identify/kill the process that is accessing a file


gawk Find and Replace text within file(s)
getopts Parse positional parameters
grep Search file(s) for lines that match a given pattern
groupadd Add a user security group
groupdel Delete a group
groupmod Modify a group
groups Print group names a user is in
gzip Compress or decompress named file(s)


hash Remember the full pathname of a name argument
head Output the first part of file(s)
help Display help for a built-in command
history Command History
hostname Print or set system name


iconv Convert the character set of a file
id Print user and group id's
if Conditionally perform a command
ifconfig Configure a network interface
ifdown Stop a network interface
ifup Start a network interface up
import Capture an X server screen and save the image to file
install Copy files and set attributes


jobs List active jobs
join Join lines on a common field


kill Stop a process from running
killall Kill processes by name


less Display output one screen at a time
let Perform arithmetic on shell variables
ln Create a symbolic link to a file
local Create variables
locate Find files
logname Print current login name
logout Exit a login shell
look Display lines beginning with a given string
lpc Line printer control program
lpr Off line print
lprint Print a file
lprintd Abort a print job
lprintq List the print queue
lprm Remove jobs from the print queue
ls List information about file(s)
lsof List open files


make Recompile a group of programs
man Help manual
mkdir Create new folder(s)
mkfifo Make FIFOs (named pipes)
mkisofs Create an hybrid ISO9660/JOLIET/HFS filesystem
mknod Make block or character special files
more Display output one screen at a time
mount Mount a file system
mtools Manipulate MS-DOS files
mtr Network diagnostics (traceroute/ping)
mv Move or rename files or directories
mmv Mass Move and rename (files)


netstat Networking information
nice Set the priority of a command or job
nl Number lines and write files
nohup Run a command immune to hangups
notify-send Send desktop notifications
nslookup Query Internet name servers interactively


open Open a file in its default application
op Operator access


passwd Modify a user password
paste Merge lines of files
pathchk Check file name portability
ping Test a network connection
pkill Stop processes from running
popd Restore the previous value of the current directory
pr Prepare files for printing
printcap Printer capability database
printenv Print environment variables
printf Format and print data
ps Process status
pushd Save and then change the current directory
pwd Print Working Directory


quota Display disk usage and limits
quotacheck Scan a file system for disk usage
quotactl Set disk quotas


ram ram disk device
rcp Copy files between two machines
read Read a line from standard input
readarray Read from stdin into an array variable
readonly Mark variables/functions as readonly
reboot Reboot the system
rename Rename files
renice Alter priority of running processes
remsync Synchronize remote files via email
return Exit a shell function
rev Reverse lines of a file
rm Remove files
rmdir Remove folder(s)
rsync Remote file copy (Synchronize file trees)


screen Multiplex terminal, run remote shells via ssh
scp Secure copy (remote file copy)
sdiff Merge two files interactively
sed Stream Editor
select Accept keyboard input
seq Print numeric sequences
set Manipulate shell variables and functions
sftp Secure File Transfer Program
shift Shift positional parameters
shopt Shell Options
shutdown Shutdown or restart linux
sleep Delay for a specified time
slocate Find files
sort Sort text files
source Run commands from a file `.'
split Split a file into fixed-size pieces
ssh Secure Shell client (remote login program)
strace Trace system calls and signals
su Substitute user identity
sudo Execute a command as another user
sum Print a checksum for a file
suspend Suspend execution of this shell
symlink Make a new name for a file
sync Synchronize data on disk with memory


tail Output the last part of file
tar Tape ARchiver
tee Redirect output to multiple files
test Evaluate a conditional expression
time Measure Program running time
times User and system times
touch Change file timestamps
top List processes running on the system
traceroute Trace Route to Host
trap Run a command when a signal is set(bourne)
tr Translate, squeeze, and/or delete characters
true Do nothing, successfully
tsort Topological sort
tty Print filename of terminal on stdin
type Describe a command


ulimit Limit user resources
umask Users file creation mask
umount Unmount a device
unalias Remove an alias
uname Print system information
unexpand Convert spaces to tabs
uniq Uniquify files
units Convert units from one scale to another
unset Remove variable or function names
unshar Unpack shell archive scripts
until Execute commands (until error)
uptime Show uptime
useradd Create new user account
userdel Delete a user account
usermod Modify user account
users List users currently logged in
uuencode Encode a binary file
uudecode Decode a file created by uuencode


v Verbosely list directory contents (`ls -l -b')
vdir Verbosely list directory contents (`ls -l -b')
vi Text Editor
vmstat Report virtual memory statistics


wait Wait for a process to complete
watch Execute/display a program periodically
wc Print byte, word, and line counts
whereis Search the user's $path, man pages and source files for a program
which Search the user's $path for a program file
while Execute commands
who Print all usernames currently logged in
whoami Print the current user id and name (`id -un')
wget Retrieve web pages or files via HTTP, HTTPS or FTP
write Send a message to another user


xargs Execute utility, passing constructed argument list(s)
xdg-open Open a file or URL in the user's preferred application.


yes Print a string until interrupted

Running Android Apps On Linux To be a Reality Soon - Shashlik

Running Android Apps on Linux

We all know that Android is a Linux system. But Running Android Apps in real Linux OS like openSUSE, Kubuntu or Netrunner is still hasn't happened yet. Usually it involve either some proprietary, closed source solution, or a virtual machine like virtualbox, inside which you run Android. A project named Shashlik is aiming at making this possible.

Why Can't We Run Android Apps Directly on Linux ?

Android does use the Linux kernel but the layers above it are different enough from other Linux OS for the apps to not run directly. In theory it does seem a complete impossible task to run an android application on a Linux machine but a project has been started by the KDE development team to overcome this problem.

What is Shashlik and How Does it Help in Running an Android App in a Linux Machine

Shashlik is an "Android Simulated Environment" to serve as a launcher for running Android applications on a conventional GNU/Linux distribution. This is what the project is about. This Month ( July 2015) , at the Akademy 2015 Program Shashlik is going to be presented. Here's a link to the Event for Shashlik. 

According to Dan Leinir Turthra Jensen , Shashlik, a collection of Android systems and frameworks as minimal as possible, built to run on a standard, modern linux system, using as much of the standard system as possible, and created to be Free/Libre from its inception.

Shashlik is built to integrate into your existing system, whether it be a desktop, laptop, tablet or even a plasma based phone or television.


The initial Shashlik code can be found on GitHub and more updates on Shashlik will be updated to this post. The Akademy 2015 Program Starts 25th of July 2015. Link to the event can be found above.

So, What Do You Use to run Android Apps on your Linux Machine? And Why Do you use Android Apps on your Linux Machine? Let us know! :)

Regular Expression Guide - Free Ebook

Simply put, It is a series of symbolic notations used to identify patterns in text or to identify certain amount of text. Its roots are at computer theory and mathematics but In this book we'll discuss only the high level view with some real life examples which is enough to get you started. Regular expressions are supported by many command line tools and by most of the programming languages out there to facilitate the solution of text manipulation problems. So, now we know that regexes are used for text manipulation. That's great! Simple infact. What's more to it that makes it so complex? Not all Regular Expressions are the same. They vary from language to language and tool to tool. For eg. The '%' in SQL is the '*' in POSIX standards.

Who is this book aimed at ?

Beginners . Programmers who are trying to get better and more productive on what they are doing. This book unlike other books on regexes explains everything from the very start so that the reader develops a very good concept about what regular expression really is. 

Table of Contents

  • Introduction
  • Globbing and Regular Expressions
  • Regular Expressions: A Deeper Look
  • Metacharacters
  • BRE , ERE and POSIX classes
  • Examples to drive home the concepts
  • Bibliography
 Size : 1.2 Mb | Pages : 43

Making Vim an Ideal Python IDE [Beginner's Guide]

Python is one of the most popular programming languages for learners. If you are a Linux user, 

If you are not a Linux user, you might want to read my article on Dual booting Linux and Windows.
you must have at some point of time used "Vi" The short for "Vim". It's a very powerful text editor. Here, In this article I'll be explaining how to make vim work like an IDE for you making your work-flow smooth.

I won't be explaining about how to split your vim window into four and so on which do come under smooth work-flow, but this article is only vim-python specific. 

As a beginner you won't be needing much of the plug-ins into vim.I'll be listing only the ones you'll need initially. 

So, first of all you need to have your vim version 7.4 or above. To check and update vim, you can use the following commands on the terminal emulator:
$ vim --version | less
$ sudo apt-get update
$ sudo apt-get install vim
So, ensuring that you have a supported vim version, we are now going to install a vim plugin which we rather call an utility. It will help us Manage our 'runtimepath' with ease.  In practical terms, pathogen.vim makes it super easy to install plugins and runtime files in their own private directories. 

Installing pathogen

There are certain things that we need to do before we install pathogen, 

$ mkdir ~/.vim/
$ mkdir ~/.vim/autoload
$ mkdir ~/.vim/bundle
$ cd ~/.vim/
$ git init

If you haven't installed Git yet, you really want to install it. use sudo apt-get install git for that.  
Also you want to install pip.

$ sudo apt-get install python-pip

So, till now we were kind of setting up the environment for installing pathogen, and other stuff. 
Download the pathogen zip file from github here.

Now I'll suppose you've downloaded the zip file on your desktop, unzip it, there's a file pathogen.vim inside a folder called autoload. Copy that into ~/.vim/autoload that we created a while ago.

The purpose of the autoload directory is to automatically load the vim plugin Pathogen. But Rest of our plugins which will help us make vim a python IDE are going to the bundle directory.

Some of my favorite plugins are,
jedi-vim -   autocompletion library
pep8 -  helps me make sure my code is consistent
ack.vim - replacement for 99% of the uses of grep, shows result in a split window inside vim
Gundo.vim - A Vim plugin to visualize your Vim undo tree, Very helpful if you make mistakes while deleting stuffs.

To complete our environment for using vim plugins, we need to make a file .vimrc in our home directory. which vim will read each time it is called and further it will call pathogen in the autoload directory. the commands goes like this. (You have to create the .vimrc file if it does not already exists, '#' are comments, not commands) 
$ cd
$ touch .vimrc
$ vim .vimrc

execute pathogen#infect()
filetype off
filetype plugin indent on
set nocompatible
syntax on
set tabstop=2
set shiftwidth=2
set autoindent
set expandtab
set number
colorscheme darkblue
This is my .vimrc file, you might want to modify it according to your need. So, if you don't know how to do it, you might just want to copy these lines into your .vimrc file. Your configuration should look something like this:-
(Ignore the directories inside the bundle directory for now)

I am going to show how to install jedi-vim and surround, you can learn their usage and the installation of other plugins from their respective github pages which I'll listing in the end of this article.

Installing Jedi-vim

The recommended way to install jedi-vim is to use the pip command. First we'll install the python package for jedi-vim and then we'll install it for vim using pathogen. 
$ sudo pip install jedi
$ cd ~/.vim/bundle
$ git clone https://github.com/davidhalter/jedi-vim.git

Done! You can access auto completion by using "ctrl+space", read documentation for more info.

Now we'll go around and install a plugin called surround
$ cd ~/.vim
$ git submodule add https://github.com/tpope/vim-surround.git bundle/surround

Done, you have installed the surround plugin to vim, you can read it's documentation at github for it's usage. 
Similarly, here are some more,   

$ git submodule add http://github.com/tpope/vim-fugitive.git bundle/fugitive
$ git submodule add https://github.com/msanders/snipmate.vim.git bundle/snipmate
$ git submodule add https://github.com/tpope/vim-surround.git bundle/surround
$ git submodule add https://github.com/tpope/vim-git.git bundle/git
$ git submodule add https://github.com/ervandew/supertab.git bundle/supertab
$ git submodule add https://github.com/sontek/minibufexpl.vim.git bundle/minibufexpl
$ git submodule add https://github.com/wincent/Command-T.git bundle/command-t
$ git submodule add https://github.com/mitechie/pyflakes-pathogen.git
$ git submodule add https://github.com/mileszs/ack.vim.git bundle/ack
$ git submodule add https://github.com/sjl/gundo.vim.git bundle/gundo
$ git submodule add https://github.com/fs111/pydoc.vim.git bundle/pydoc
$ git submodule add https://github.com/vim-scripts/pep8.git bundle/pep8
$ git submodule add https://github.com/alfredodeza/pytest.vim.git bundle/py.test
$ git submodule add https://github.com/reinh/vim-makegreen bundle/makegreen
$ git submodule add https://github.com/vim-scripts/TaskList.vim.git bundle/tasklist
$ git submodule add https://github.com/vim-scripts/The-NERD-tree.git bundle/nerdtree
$ git submodule add https://github.com/sontek/rope-vim.git bundle/ropevim

Ref.: sontek.net and github

You are free to explore more plugins and add more into it, it's your own little powerpacked IDE that you configured yourself using vim for python. Thanks to the open-source community. If you have more you can post them in the comments, I'll be highly delighted to see your configuration.