Sunday 28 October 2012

Compiling a Boost program

Here is a sample Filesystem tutorial program

http://www.boost.org/doc/libs/1_50_0/libs/filesystem/example/tut1.cpp

We will try to compile this program

So Assuming that you have installed boost libraries. If not then read my previous post

Now to compile any boost related program we will be needing the header files, the libraries and the boost_root folder. Boost_root folder is the folder from where you have installed boost. In my previous post my boost_root is boost_1_50_0. Next step is very easy you have to run the following command in Terminal.

g++ tut1.cpp -o first -lboost_filesystem -lboost_system -I path/to/boost_1_50_0

Feel free to comment if the above command is not working for you

Installing Boost 1.50 in Ubuntu 12.10

Source:http://ubuntuforums.org/showthread.php?t=1180792

I have made few changes

Welcome. This a guide on how to install the Boost libraries from source. Although the boost libraries are available in the universe repository there are people who have tried to install from source for one reason or another (myself included) and, because of the unfamiliar method by which Boost choose to create their libraries, fall into trouble or else never really understand what to do (even though it's not all that hard actually).
This is only a very simple guide on how to get the source compiled and installed and I wont go into more advanced topics on how to customize the installation (because I don't know myself) or on how to cross-compile (since I've tried and given up on that -- the problem being that the boost build system doesn't use the correct cross-compiling binaries for compiling and creating the libraries and it's next to Alchemy trying to understand how to get the thing to use the correct ones. As a last resort, not even creating symlinks from the the cross-compiling binary to the corresponding normal build binary didn't work!).

-1) General Information

This guide is specifically written for boost libraries version 1.39.0. The general idea of what we're doing will probably still apply for some of the more recent older library version; but, there will be crucial differences, like the fact that the file configure will exist instead of bootstrap.sh.

0) Pre-requisites

0.1)
You will need the necessary compiling tools (g++, ld, etc...); so, first, install them:
Code:
sudo apt-get install build-essential g++
0.2)
You will need the source code! Boost's website is not the best when it comes to finding where things are, so just navigate to their getting started page and under the section Get Boost follow the link to the download page and download tar.bz2 file (the tar.7z file has Windows line-terminators, so reading those files in Linux will cause errors). Incidentally, that getting started page is the general reference from which I've derived this guide (along with a bit of trial and much error).

1) Compile the library

1.1)
Go to where you downloaded the directory and uncompress it:
Code:
cd download_location
tar xjf boost_1_50_0.tar.bz2
Note that the uncompressed source is over 250Mb; so if space is an issue, make the necessary sacrifices!
Then change directory into the boost directory:
Code:
cd ./boost_1_50_0
1.2)
Next, we'll need to build the bjam binary and perhaps also set some options on what to compile and where to. Read the next three sub-sections carefully and read it all before you do anything! 

1.2.1)
Firstly, you will not want to compile the whole boost library since that means compiling a lot of libraries that you don't want or wont use. So, to see a list of the libraries that need compiling, run:
Code:
./bootstrap.sh --show-libraries
Pick which ones you want and remember them: I'll be choosing filesystemprogram_options and system. Note that picking system is needed since it contains the error class that filesystem uses, and I bet that, since the majority of you readers will be looking to compile the filesystem library, this means cutting a few problems out later on for a lot of you!
What you'll need to run is the command:
Code:
./bootstrap.sh --with-libraries=filesytem,program_options,system
But don't do that just yet: keep reading!
If you do want to compile the whole damned thing, then you don't need to bother with the command above: you'll just run bootstrap.sh as it is:
Code:
./bootstrap.sh
Again, don't run anything yet: still keep on reading!

1.2.2)
Next, you'll need to consider where you want the library installed to. By default, the header files are installed to /usr/local/include, and the libraries themselves are installed to /usr/local/lib. These locations will be more than adequate (it's not recommended to install stuff to /usr/include, /usr/include/lib or /lib); but, if you do want/need to specify a different location, you'll need to run bootstrap.sh like this:
Code:
./bootstrap --libdir=/my/lib/dir --includedir=/my/include/dir
which will install the libraries to /my/lib/dir and the header files to /my/include/dir.
Note: there is a bug in that the libraries are installed to /lib and not /usr/local/lib by default; so I'd recommend explicitly telling the build process to install to /usr/local/lib. Do this by adding the flag: --exec-prefix=/usr/local.
Still, don't run anything yet! Keep reading!

1.2.3)
OK, now bring the info from the last two sub-sections together: you'll want the command:
Code:
./bootstrap.sh --exec-prefix=/usr/local --with-libraries=desired_list_of_libs --libdir=/my/lib/dir --includedir=/my/include/dir
For example, I want to only install the filesystemprogram_options, and system libraries, and just to the default lib and include directories; so, I'll personally run:
Code:
./bootstrap.sh --with-libraries=filesystem,program_options,system --exec-prefix=/usr/local
Having done this (or something similar depending on what you want to do) you'll see the message:
Quote:
Bootstrapping is done. To build, run:

./b2

To adjust configuration, edit 'project-config.jam'.
Further information:

- Command line help:
./b2 --help

- Getting started guide:
http://www.boost.org/more/getting_st...-variants.html

- Boost.Build documentation:
http://www.boost.org/boost-build2/doc/html/index.html
At this point, you can then do the compiling proper...

1.2.4)
Run the command:
Code:
./b2
And that's it!

2) Installation

Immediately after compiling, and before we install them, the header files will be in the directory boost, and the libraries in the directory stage/lib. To install them, just run:
Code:
sudo ./b2 install
Note that, on my system, that command seems to hang for a while; so, give it a chance before killing it.

In my case there was no need to do this step as libboost_filesystem.so was already there in /usr/local/lib

Now, there is one "bug" in the installation process. The installation procedure does not create a symlink called libboost_filesystem.so. It's not really a problem, but it's very useful if it does exist. Look in your library directory to see if it's there, or else create it:
Code:
sudo ln -s /usr/local/lib/libboost_filesystem-gcc43-mt.so /usr/local/lib/libboost_filesystem.so
And change /usr/local/lib if you changed where you installed your libraries to at stage 1.2.3, and amend libboost_filesystem-gcc43-mt.so if it's different on your system. (Post a comment if you are having trouble with this since the names will probably be different from system-to-system and don't do anything if you're not at all sure on how libraries are named and symlinked).

3) Using the libraries

This bit normally causes a few problems, so read it carefully!

3.1)
Include your header files as usual in your code like:
Quote:
#include <boost/filesystem.hpp>
and then tell your compiler where the include libraries are with a -I flag:
Code:
g++ -I/usr/local/include/boost-1_39 ...
If you changed your include directory at stage 1.2.3 by issuing:
Quote:
./bootstrap.sh --includedir=/my/include/dir
then you'll need to amend the g++ command to:
Code:
g++ -I/my/include/dir/boost-1_39
3.2)
Then, we'll also need to make sure we can link to the libraries.
If you did not change the directory to where the libraries are installed to from the default at stage 1.2.3, then simply run:
Code:
sudo ldconfig

Note: If you are using Filesystem then also add lboost_system with it as it is dependent on it

And you can start linking the library as usual:
Code:
g++ -lboost_filesystem -lboost_system ...
If you did change the lib directory at stage 1.2.3 by running:
Quote:
./bootstrap.sh --libdir=/my/lib/dir
then you'll need to run the linking stage as:
Code:
g++ -L/my/lib/dir -lboost_filesystem
Hopefully, that's it! You should now be able to use boost!

So The final Code to be run on terminal will look something like this if you have not changed the installation directory on step 1.2.3

Sample.cpp //Sample program to check if boost is working or not
#include<boost/filesystem.hpp>
int main()
{
//anything here
return 0;
}

Code:
g++ -lboost_filesystem -lboost_system Sample.cpp
Feel free to comment below if I have missed something! Happy Coding

Always remember in perl

Use eq to compare string and == to compare numeric

Tuesday 16 October 2012

Need for Speed Most Wanted Lan Multiplayer problem

NFS MW is the best game ever made by EA that still millions are playing even after 7 years of its release. The best thing it had was the gameplay and the story. We often used to play LAN Multiplayer in it. But after installing Windows 7, most of the times it stopped working after connecting to the host player or while connecting to host player. The Need for speed is causing these problems because Windows is not providing him with enough privileges to connect to the port. So run it in as Administrator in Windows 7. Everything will work fine. :)

Tuesday 24 July 2012

Download Youtube Videos from terminal

It is very simple to download videos from Linux terminal.
Just download the following package using this command in Ubuntu

$ sudo apt-get install youtube-dl

After the installation is complete, use the following command to download videos from youtube

youtube-dl www.youtube.com/watch?v=(random)

Videos by default are downloaded in home folder. Look in your home folder for downloaded videos

Sunday 6 May 2012

Ubuntu Showing old GUI buttons and menus

One day when I started my ubuntu, everything was changed. It was suddenly changed into Windows 95. I thought of googling it but was not able to figure out what to write in google. After a little search and help from AskUbuntu.com I was able to figure out the reasons. But none of them worked for me. Here the page where solutions are given
http://askubuntu.com/questions/73576/appearance-does-not-change-on-switching-the-theme

 You can take help from this page but none of them worked in my case. After sometime I was hit bya n thought that I had installed GTK 3.4.2 recently on my Ubuntu. So I removed it and rebooted and every thing was working just fine...:)

Wednesday 2 May 2012

Nvidia Drivers Installation on Dell N5110

Don't expect me to write the steps of installation of Nvidia drivers on Ubuntu because you will not install it as it will lead to very harmful consequences. Enjoy your laptop with nvidia drivers, Drivers will not improve the performance of laptop in any way so please.

Sunday 29 April 2012

Default Arguments in Javascript

I don't know why javascript do not support default arguments. They should add that. Anyhow there is a another way to perform the same operation. Here is an example
In other languages we pass default arguments like this
int function( var=value,var=value)

We don't have this facility in Javascript so we length of code increases a bit. We can do the same by following method.

function sum(a1,b1)
{
a1=a1?typeof a1=="undefined": default-value;
//meaning
//if the type of variable a1 is undefined that means that the user has not passed any value so we can assign
//our own default value.
typeof operator in javascript returns a string telling the type of variable

for eg:
var abc="Piyush";
alert(typeof abc);
this will return string signifying that the variable is string.

It is very simple.
Happy Coding.

Tuesday 24 April 2012

Recovering MySQL Database without using MySQL

This post will tell you how to recover your databases without using MySQL or when you are not able to access MySQL. I had to do this when while experimenting I ruined my Ubuntu. I had to recover data from it. So I used Ubuntu Live Cd to excess the ubuntu ext4 drive to backup the data. From live cd we cannot access MySQL but I had to backup my database. So I just copied my database folder from /var/lib/mysql. After installing Ubuntu and MySQL and other softwares all over again I thought of just replacing database folder with the one which I copied but that didn't worked.

Recently I had used dpkg-reconfigure to solve some password problem. So I tried using that and my database was working just fine after that.
Now How to do this in detail :P
You will find folder for each of your database in /var/lib/mysq. You need root permissions to view files of this folder. You can do this by executing the following command in the terminal:

$ sudo nautilus

Then navigating to /var/lib/mysql. In this folder you will find one folder for each of your databases and other mysql files. I copied whole of the folder and kept at some safe place. Now after reinstalling Ubuntu and Lamp-server, I had to get my databases back. So I just made the same database in mysql so that a folder in /var/lib/mysql gets created. I did this because I thought mysql has other places where it saves information such as current databases and all. So by doing this thing, mysql will do all of its stuff and update all of its settings. Now just stop mysql services using:

$ sudo service mysql stop

After that I copied my database folder from backup mysql folder to the current mysql folder that is in /var/lib/mysql
You will be needing super user privileges for this. 
Don't think that the work is finished mysql will not work after this. You can check this by opening it in phpmyadmin or through mysql console.It will give some error. Now you have to reconfigure mysql package to make it work. Execute the following command in the terminal.

$ dpkg-reconfigure mysql-server-5.4

After executing this command it will reconfigure whole of the mysql server and will ask for passwords and all. Enter your password for mysql and you are done. Mysql service will automatically start after this. Just check your database after this using phpmyadmin or mysql console. In my case it was working just fine and hoping the same from your side.

Friday 23 March 2012

Installing CMU Sphinx in Ubuntu 11.10

It took me 2 installation to install CMU Sphinx successfully. But finally now it is working. Actually I also don't know how to install it but the internet helped me out. So the very first thing that you should do to download latest sphinxbase and pocketsphinx from their website.
http://cmusphinx.sourceforge.net/wiki/download/

After downloading the packages Its time for you to download dependencies. Here is the list of packages that I had to install to make it working. Screenshot of my Ubuntu Software Center.


Install all the packages that I have installed today in the screenshot. After installing all the packages now you can extract sphinxbase compressed file and open the directory and open the sphinxbase directory through the terminal and run the following commands which are normally executed to build a packages manually.
./configure
sudo make
sudo make install
Now unpack the pocketsphinx file and enter extracted directory of pocketsphinx using terminal using the cd command. and the above commands again
./configure
sudo make
sudo make install

After executing these command you can also execute this command to clean up all the mess created.
sudo make clean


NOTE: While executing ./configure focus on the output, It still there is any dependencies left to be installed, the configure script will issue an error something like that this package is missing. Install that package and then try again running the ./configure command.
Best of luck
Happy Coding.!! :)

Edit: List of packages so that you can copy and paste

libdpkg-perl
fakeroot
debhelper
libalgorithm-merge-perl
libgstreamer-plugins-base0.10-dev
libalgorithm-diff-xs-perl
po-debconf
libgstreamer0.10-dev
intltool-debian
gir1.2-gst-plugins-base-0.10
build-essential
dpkg-dev
html2text
patch
libalgorithm-diff-perl
pocketsphinx-hmm-wsj1
libpocketsphinx1
libsphinxbase1
pocketsphinx-utils
pocketsphinx-lm-wsj
gstreamer0.10-pocketsphinx
gir1.2-gstreamer-0.10
libqtgstreamer-0.10-0
libglib2.0-dev
zlib1g-dev
libqtglib-2.0-0
libtool
libltdl-dev
autoconf
automake
autotools-dev
bison
m4

Saturday 11 February 2012

Installing Opencv 2.3 in Ubuntu

Opencv is an awesome library for Real-Time Computer Vision. You can read my article on the same blog  for details about Opencv. I found this atricle in the internet which is the best article for installing Opencv on Ubuntu. You can visit the following link or you can read it on my own blog.
http://thebitbangtheory.wordpress.com/2011/10/23/how-to-install-opencv-2-3-1-in-ubuntu-11-10-oneiric-ocelot-with-python-support/#comment-224
I will be commenting in between, on how I installed it and what problems I faced


This “how to” is a mix of two other great tutorials on OpenCV installations: A Compreehensive Guide to Installing and Configuring OpenCV 2.3.1 on Ubuntu from ozbots.org; and the OpenCV Installation Guide on Debian and Ubuntu from the OpenCV Wiki. I used this procedure to successfully install OpenCV on two amd64 computers (a laptop and a desktop) running Ubuntu 11.10 Oneiric Ocelot. However, if you find any problem you can check the Comprehensive OpenCV Installation Troubleshooting Guide from ozbots.
1. Remove any installed versions of ffmpeg and x264
1sudo apt-get remove ffmpeg x264 libx264-dev
2. Get all the dependencies
This will take lots of time seriously. The problem I faced here was that some of the packages are not there or are missing so It was not executing the command.Here is the trick that I used while Installing for the following steps
You can use the very first command as it is i.e. sudo apt-get install update
You can break the second apt-get command like this
sudo apt-get install build-essential
sudo apt-get install checkinstall
sudo apt-get install git
See and compare.
.... and so on
Copy all these commands in a file named try and save it. Now run the following command in the terminal
sudo bash try
This execute each command serially and so even if some packages are missing it will install the other packages. And don't worry about the missing packages..You will be doing fine without them.
1sudo apt-get update
2sudo apt-get install build-essential checkinstall git pkg-config cmake libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev libpngwriter0-dev libpngwriter0c2 libfaac-dev libjack-jackd2-dev libjasper-dev libjasper-runtime libjasper1 libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev texi2html yasm zlib1g-dev zlib1g-dbg zlib1g libgstreamer0.10-0 libgstreamer0.10-dev libgstreamer0.10-0-dbg gstreamer0.10-tools gstreamer0.10-plugins-base libgstreamer-plugins-base0.10-dev gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad gstreamer0.10-ffmpeg pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-prog libavcodec-dev libavcodec52 libavformat52 libavformat-dev libxine1-ffmpeg libxine-dev libxine1-bin libunicap2 libunicap2-dev libdc1394-22-dev libdc1394-22 libdc1394-utils swig python-numpy  libpython2.7 python-dev python2.7-dev libjpeg-progs libjpeg-dev libgtk2.0-0 libgtk2.0-dev gtk2-engines-pixbuf
3. Download and install x264 – download any recent stable snapshot from ftp://ftp.videolan.org/pub/videolan/x264/snapshots/  (I used x264-snapshot-20111012-2245-stable.tar.bz2) and extract it to a folder. Then enter the folder and configure and build it:
This step will not take much time
1./configure --enable-static
2make
3sudo make install
NOTE: In my computers (64-bit) I had to add the flags “–enable-pic –enable-shared” to the configuration. Otherwise I would get compilation errors when building OpenCV. If you get them too, run
1sudo make clean
and reconfigure and rebuild using
1./configure --enable-static --enable-pic --enable-shared
2make
3sudo make install
4. Download and install ffmpeg – download any recent stable snapshot from http://ffmpeg.org/download.html (I used ffmpeg-0.8.5.tar.gz) and extract it to a folder. Then enter the folder and configure and build it:
This may take some time.
1./configure --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab
2make
3sudo make install
NOTE: Once again, in my computers (64-bit) I had to add the flags “–enable-pic –enable-shared” to the configuration. Otherwise I would get compilation errors when building OpenCV. If you get them too, run
1sudo make clean
and reconfigure and rebuild using
1./configure --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab --enable-pic --enable-shared
2make
3sudo make install
5. Download and install v4l – download any recent stable snapshot from http://www.linuxtv.org/downloads/v4l-utils/ (I used v4l-utils-0.8.5.tar.bz2) and extract it to a folder. Then enter the folder and build it:
1make
2sudo make install
6. Download and install OpenCV – download OpenCV 2.3.1 from  http://sourceforge.net/projects/opencvlibrary/files/ and extract it to a folder. Then enter the folder and build it:
This step can also take some time. Just sit behind and watch.
1mkdir release
2cd release
3cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON ..
4make
5sudo make install
7. Configure Linux – add the following line to your .bashrc in order to tell linux where the shared libraries for OpenCV are located without having to enter it everytime you start a new terminal:
1export LD_LIBRARY_PATH=/usr/local/lib
using any text editor add the following lines to the end of your /etc/bash.bashrc file
root permission should be given to gedit. You cannot edit the bash.bashrc file without it.
The following command will work for you
sudo gedit /etc/bash.bashrc
1PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
2export PKG_CONFIG_PATH
8. Reboot.
That’s it! If you perform all the steps indicated you should have OpenCV installed in your system. You can check the samples in <your opencv folder>/samples/ . To compile all the C/C++ samples at once you can enter the <your opencv folder>/samples/c folder and give the build_all.sh script permissions to be executed
1chmod +x build_all.sh
Then just run
1./build_all.sh
and all the samples will be compiled.
To make python work run
1python
2import cv2
If no error occurs, then the python wrappers are successfully installed.
To compile code that uses OpenCV libraries use
1g++ `pkg-config --cflags opencv` my_code.cpp -o my_code `pkg-config --libs opencv`
If you find any problems in this tutorial post them in the comments. I can’t promise that I’ll find the solution, since I’m not an expert, but I’ll try.
Update (24/10/11): I placed an entry on this blog on How to use CMake with OpenCV to build projects that use the OpenCV libraries.Check it out if you want
Update (29/01/12): As suggested by blog reader Cactus (thanks for your contribution :) ), I’ve added the packages “libopencore-amrnb-dev” and “gtk2-engines-pixbuf” to step 2.
Later I’ll post some basic projects using OpenCV.

 I successfully installed opencv on my system. Hoping same from your side. Gud Luck . Happy Coding.