Saturday, June 15, 2013

VPN Client for Linux Systems: Alternative for Cisco AnyConnect VPN Client

Hi,

Here is how you can connect to your VPN server without Cisco AnyConnect VPN client.


1. First install network-manager plug-in for VPN

 $ sudo apt-get install network-manager-openconnect  

2. Click on your network manager applet you will see  "VPN Connections" option, roll mouse over it, some options will pop-up, then click on "Configure VPN..."



3. Then click on "Add" to add new VPN connection, select VPN connection type "Cisco AnyConnect Compatible VPN (openconnect)" and click on "create". Window to configure new VPN connection will pop-up.



4. Then enter your VPN gateway and click save.



5. To Connect to VPN, go to network manager applet again, then "VPN Connections", it will pop-up VPN connection you just created, click on it.  Then VPN connection window will be up, just click on connect icon to establish VPN connection.




Done!
cheers!!

Thursday, June 13, 2013

Life of C : Part 1 - Compilation

Hi Guys,

From so long I was thinking of putting some stuff together regarding all basic things about C that gives better understanding not only about C but also some about OS perspective. So Here is the start, (oh please... "Hello World!" again)


0. Prerequisites 
Through out the post I am assuming that reader has some knowledge of C. All explanations/examples  bellow are tested/explained on Linux system. To prepare system install following packages,

1. Compilation
Bear with the stupid example :)
This is basic C program, almost all programmers have written this program at least one in life.

Ok, so this is the C syntax to say computer to write/ display "Hello Guys!". What happens next?
Program to become executable it needs to go through certain steps,

1. Pre-processing
2. Compilation
3. Assembly
4. Linking


To see all intermediate file in process of compilation compile above program as follows,

This will save all intermediate files in current directory.
 1. Pre-processing
This is very first step in process of compilation of the C program. It mainly does following tasks,

1. Macro substitution
2. Comments stripping
3. Expansion of included files


Output of pre-processor for above program is as shown bellow,

file explanation:
1. first observation is at end of the file you can see argument in printf() is replaced by string "Hello Guys!" instead of macro.
2. second is it does not have any comments we added, they have been stripped out.
3. Third observation in "#include<stdio.h>" is replaced by lots of other stuff. It has been expanded and added in the source file so that compiler can clearly see "printf()" function.

It says printf() is defined somewhere externally.


2. Compilation
Next, compiler takes helloguys.i as input and converts it into compiler intermediate output file. This is assembly code. You can see "helloguys.s" file bellow. its consists of assembly instructions of your processor. Next assembler takes this instructions and converts them into machine code.

3. Assembly
In this stage "helloguys.s" file is taken as input and intermediate file "helloguys.o" is generated. This is object file.

This file contains machine level instructions. But function calls to external functions are not resolved yet. Since this is machine code it's not readable. But still see, it will look as bellow,

ELF string in file tells that this is Executable and Linkable Format.

4. Linking
So, this is the final stage of compilation process. It does linking of function calls and their definitions. Like printf() function. Until now this code doesn't know anything about printf(). It only puts place holder at the place of function call. At his stage actual function call printf() gets resolved and function address gets plugged-in.

function of linker:
1. Plug-ins actual function address
2. It also adds some extra code/info in your file. To run our code we need to submit it to system, so this stage adds some extra code to your code like, at start of code OS needs to set some environment variables, command line arguments plus some OS specific code so that OS can signal your application. Also to while exiting, code needs to return some variables to OS which will help to maintain the status of code and its environment. This all extra things will be added by linker.

To verify it, do following,



At least you can see that size of executable is lager than object file.

So, now you know Life of C, the stages that your code needs to go through before becoming executable.  This is just a tip of an ice-burg, there is lot more if you want to go into details.

Next part of the Life of C, will contain the life of your executable, what all happens when you submit it to OS to run.



Cheers!!!  

Wednesday, June 5, 2013

How to fix "VPN client driver encountered an error" on Windows 7/8 : Cisco AnyConnect VPN Client

This is most common problem with the windows 7/8.
While connecting to the corporate (or personal) network using Cisco AnyConnect VPN Client it gives error massage as bellow,
" The VPN client driver has encountered an error"

Solution is very simple, its just error in driver name in windows registry for VPN client driver.

  • Solution: (Windows 8)
1. Press Windows key to go to start menu
2. type "regedit" and hit enter, you will enter into Registry Editor window
3. Go to registry key "DisplayName" for vpn client driver as follows:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\vpnva\DisplayName

4. Double click on "DisplayName" and remove everything before "Cisco AnyConnect VPN Virtual Miniport Adapter for Windows"

For Example:
replace: "@oem8.inf,%vpnva_Desc%;Cisco AnyConnect VPN Virtual Miniport Adapter for Windows"
with: "Cisco AnyConnect VPN Virtual Miniport Adapter for Windows"

5. Click on "OK" and (re)start Cisco AnyConnect VPN Client
6. Enter your vpn server (e.g. myvpn.company.com), and enter your credentials as requested.
7. Click on Connect, DONE.

(Similar changes apply to Windows 7)
Cheers!!! 

Friday, May 24, 2013

Free Source Code Hosting for Personal/Business Use

Even as student or  in life time of Engineer we do many things, many great things (hehe), tonnes of projects, seminars etc. and we never know when we might need to re-touch or re-collect the project codes, presentations, latex reports, documents and so and so ... yes storing them on the optical disk or in some back-up drive is good idea but not the great one... we never know when this stuff stop working, after all we built it... isn't it? So you need to put them in place where they never get lost....on SOURCE CODE HOSTING SITES.

So there are many free source code hosting sites out there. Some of them can be used for small businesses for sharing and development, most of them comes with version control tools like mercurial (on of the best and easy). Here I am going to introduce you to some of them.


  1. Bitbucket:
    This is the one of the best source code hosting site suited for small business and of course for personal use too, its closed source site, no one can peek into your repository. For business purpose you can share any repository between FIVE users for free. You need to pay for more than five users. It comes with mercurial and git version control tools. Only disadvantage is that, if you are going to develop some open source tool/project you cant put good wiki pages related to your project.



    Advantage: Closed source code, no one can peek into your code, professional tool
    Disadvantage: No good wiki support
    Version Control: Mercurial, Git
  2. CodePlex:
    This is Microsoft's code hosting site. This is having most elegant interface and awesome wiki support. It also has best code sharing, discussion forum support. It has all facilities that person/group need for open source project development.
     

    AdvantageBest suited for open source projects. It has wiki, forum, sharing support, elegant design.
    DisadvantageYour code might not be closed.
    Version Control: Mercurial, Git
  3. Google Code:
    As can be seen from name itself, its service provided by Google. It also has good facilities, but interfaces are not that good. CodePlex is better than this, which provides same (more) services in elegant way. But one advantage is that, its linked to your Google mail account.


    AdvantageGives all basic tools with simple interface. Linked to your Google account, wiki support.
    Disadvantage: Interface is simple, your code might not be closed.
    Version Control: Mercurial, Git


So, in short if you are looking for personal, closed source backup tool or small business source sharing tool BitBucket it best suited for you. If you are open source enthusiast CodePlex is best suited. Google Code is just an alternative if you are looking for...

Cheers !!! 

Thursday, May 23, 2013

Create your own Linux (custom) commands

Hi,
Most of the time we need to use some commands repeatedly while working. It's just annoying to type them again and again, of course we can use reverse search [ctrl+r] for reverse command search but I am lazier than that ;)

Here are couple of ways to customize (or get more lazy) Linux commands,

  • Use Aliases to Customize Linux Commands:

This is actually for small commands (can be used for large ones also). You can set it in terminal as bellow,
 $alias ll='ls -l'  

Now onward whenever you execute 'll' command it will work as 'ls -l', so simple.

Another way is to add aliases in .bashrc file in your home directory so it will become permanent.
e.g. put following at end of ~/.bashrc

 # Aliases:   
 alias ll='ls -l'   
 alias la='ls -a'   

  • Write shell scripts for your commands:
This is when you need some larger scripts as your shorten command. In this case you can write script and put them under bin directory in your home directory. You also need to give exe permission to the script.

e.g  I want to make following script as my Linux command. This script initializes the current directory as root for  cscope and also creates cscope database for recursive directory structure,

 #!/bin/bash    
 # cscope_init script   
 # Creating cscope database for large project    
 # with recursive deirectory structure    
 # First go to root dir of the source code    
 # Run this script - cscope_init $PWD   
 if test $# -ne 1; then    
  echo "usage - $0 <PROJ_ROOT>"    
  exit 1    
 fi    
 echo "PROJ_ROOT - $1"    
 cd /    
 find $1 -name "*.[ch]" -o -name "*.asm" > $1/cscope.files    
 cd $1    
 cscope -b -q -k    
 echo "Done!   
write this script to cscope_init file, and add permission to execute it.

 $chmod +x cscope_init   

Now copy this file to ~/bin/cscope_init. Now onward you can run following command in any directory to create recursive cscope database for that directory,

 $cd /path/to/project/root/directory
 $cscope_init $PWD  

Result,
 PROJ_ROOT - /path/to/project/root/directory   
  Done!   

Done!!!!!!

Sunday, April 28, 2013

Monitoring dynamic changes in dmesg

By running following command in terminal allowes you to monitor dynamic changes in dmesg.

 $ watch "dmesg |tail -15"  

Saturday, April 27, 2013

Resizing the image and convert between image format

Use the convert program to convert between image formats as well as resize an image. It has ability to crop, change aspect ratio of image etc. 

Resizing image to exact size:

 convert <input_img> -resize 300x200^ -gravity center -extent 300x200 <output_img>