Friday, December 7, 2012

Shell scripting - sleep for milliseconds

Ever tried to make your shell script sleep for milliseconds? I tried, and failed miserably in doing so. I didnt know that decimal numbers are not allowed after the sleep command.

I found the following command that could be used for "virtually simulating" the millisecond sleep command:

typeset -i count=0;
while [[ ${count} -le 5700 ]];
do
      count=${count}+1
done

decrease the value 5700 to a value which would suit your needs. 5700 gives you ~1 sec time.


Tuesday, November 20, 2012

Setting up LAMP on Ubuntu 12.04

LAMP - Linux Apache MySQL PhP.

Most of the stuff mentioned here is inspired from :: https://help.ubuntu.com/community/ApacheMySQLPHP

first to install apache use the following:

1> sudo apt-get install apache2

restart/start apache2 services using the following command:

2>  sudo /etc/init.d/apache2 restart

This will restart apache services.

Check whether the apache2 services have started again by visiting http://localhost. You should get the message "It works!" on your browser. If it actually works, move to point 3. else:

reasons:

a. check /var/log/apache2/error.log.** where ** is the most recent(largest) value. you will get some kind of error message. Though it is self explanatory (eg. could not access some file) which means that there is a mode problem (you have to make /var/www/index.html 744).

b. error log is empty - problem with browser caching - try removing recent content (if you have tried logging into localhost many times, browser caches your page). To remove this clear your browser cache.

3> "It works!" page is located at /var/www/index.html. This is the default root hosting directory for linux. for multiple sites or your own website, you do not want to clutter your /var/www directory. Therefore it is suggested you change your default browsing directory.

How do I do that you say?

for every website , apache creates a config file in the directory
/etc/apache2/sites-available/

with the name of the website. Opening the configuration file, you will notice a xml file like this:



Saturday, September 8, 2012

Ubuntu 12.04LTS Bug - Close, minimize and Maximize button becomes invisible in GNOME

Recently, I faced this issue of application window not showing the top most bar - containing close, minimize and maximize button.

I was using Ubuntu 12.04 LTS with GNOME Desktop Theme. As usual the problem was with ccsm (CompizConfig Setup Manager).

All I had to do was to go to Application -> Settings ->Compizconfig Setup manager (just type ccsm on the shell.)

once that is done, unmark (if already marked) and then mark again the Effects -> Window manager tab.



Try opening a shell. I hope this time you see the close minimize and maximize buttons.

==Don==

Wednesday, September 5, 2012

DPRINTF Debug Macro in C

Extremely useful for Debugging projects in C.


#define DEBUG   // comment if you do not want the debug statments to appear.

#ifdef DEBUG
#define DPRINTF(fmt, ...) \
    do { printf("my_file: " fmt, ## __VA_ARGS__); } while (0)
#else
#define DPRINTF(fmt, ...) \
    do { } while (0)
#endif




Usage -> DPRINTF("This is a debug statement");

if you want the debug statements to appear, then define DEBUG
#define DPRINTF
at start of the code.

if, on the other hand, you do not wish the debug statements to appear, comment it.

you can add additional information to your debug statement, for example -

DPRINTF("%p:%d Debug statement\n",__func__,__LINE__);

this gives both the function name and the line number of the DPRINTF statement along with the message "Debug statement".



Sunday, September 2, 2012

Get real clock time in C to nanosecs approximation

struct timespec start,end;

clock_gettime (CLOCK_REALTIME, &start);
<add code here>
clock_gettime (CLOCK_REALTIME, &end);
float time= (end.tv_sec - start.tv_sec) + (end.tv_nsec - start.tv_nsec) / 1000000000;

This code snippet would give you the time taken to execute the added code in real time.

Dont forget to compile your code with a -lrt flag. Not including this flag could  give you a ld error for not finding clock_gettime function.

Thursday, August 9, 2012

How to Start a stopped process in Linux

While running a process in Linux, Sometimes we press Ctrl+Z unintentionally (or by choice). This makes the program STOP.

For example while running a GDB Session, I accidentally pressed Ctrl + Z, which stopped the gdb and the process came out of the gdb session, giving the Stopped message :


I wanted to continue (not restart) the session, for restarting, i couldve killed the process checking the pid and killing the process by its pid, but that would require me to start debugging my program all over again, which is a pain.

So, with a little help from google, i discovered that when we stop a process (using Ctrl +Z ), it basically goes into the background, and goes into sleep mode.

This can be seen from bg command

bash$ bg



Now to continue the program from its sleep mode, we need to bring it to the foreground.this can be done using fg command.

bash $fg <JOB_ID>


where JOB_ID is obtained using the command jobs , which matches process name to job#.

bash $jobs


Thats all! fg will bring your stopped command back to life! 


Sunday, July 22, 2012

Core dump file not found

Has it ever occurred to you that you ran a program, it aborted saying 'core dumped' , but then when you go around looking for the core dump file, you cant find it anywhere? 0-o

Well it happened to me today. I tried finding the 'core' file in each of the possible directories - the pwd, the executable directory, all the directories in the $PATH variable.

To my dismay, none of them had the core file in them.

After some google search, I found that there may be cases where the core file is not created to save space. (Core files are usually large ~1GB ).

I also found out that in my system (Ubuntu 12.04 LTS), the default size allocated to core files is 0.

This can be found using the command

ulimit -a


 If you see ulimit -c 0 , that means 0 blocks have been allocated to core dump file , and hence core dump file is not formed.

To enable the core dump, we can do the following :


ulimit -c unlimited

This increases the coredump size to unlimited. Now, try executing the code that caused Aborted (Core dump formed).

and check the pwd (present working directory) for 'core'  file. You will notice that core file is very large. And hence I feel that in Ubuntu, as  a protective measure, the core dump file has been allocated 0 blocks by default.

NExT up -> tips on how to use objdump for debugging through core file. :)