Friday, September 24, 2010

How to physically locate a FreeBSD machine using its shell

If a machine is being used only through remote access, it is very likely that one will forget its physical location. And one won't care where it is located unless one day you plan to upgrade the hardware of the machine. This is when one will try to recall where the machine is placed. Most of the time, its not easy to recall where the machine is located.

Wouldn't it be great if it was possible for you to tell the machine to make some noise so that you can locate it? Actually, it is possible. How? very easy :

Load speaker device in kernel:
kldload speaker

Then you can use it this way
Code:
echo "BP" > /dev/speaker
echo "SO4L16G>L8C." > /dev/speaker

Tuesday, June 22, 2010

How to use regex in find command

Today I discovered how to use regex in unixs' find command. It has a very simple syntax as below:

Syntax: find \path\ -regex '\regex pattern\'
e.g. find ./ -regex 'file[0-9]+.txt'

In above example, we are looking for files with name like file1.txt or file23.txt or file567.txt. This is a match on the whole path, not a search. For example, to match a file named `./fubar3', you can use the regular expression `.*bar.' or `.*b.*3', but not `f.*r3'.

According to find man page, it is also possible to specify the type of regex to be used, like emacs regex, posix-awk, posix-basic, posix-egrep and posix-extended. Default is emacs regex.

Another option is -iregex. It is just like -regex, but the match is case insensitive.

Monday, June 21, 2010

How to specify destination for tar extraction

Specify a destination to extract a tar archive
It is very simple, say:
/root/file.tar.gz - gzipped tar archive file
/usr/local/tmp - destination location where above file needs to be extracted to.

command:
tar -xzf /root/file.tar.gz -C /usr/local/tmp

You might have already noticed '-C' option. This can be used to explicitly specify destination location if it is other than PWD.


Sunday, March 21, 2010

Selenium: Upload Files

Selenium despite of being a great tool can be very painful at times. It is when you are trying hard to automate some action and despite of putting all the steps correctly Selenium fails to do what you want. If the warrior within you do not want to give up easily, you will definitely end up draining hours of energy to figure out that one li`l bit. In the end you may triumph or forfeit. I have gone through such experiences a number of times and many a times all the hard work pays in the end. In the jubilation of figuring out the riddle, I almost always forget to document steps those would help me in case I stumble upon the same situation later in time. But this time I made sure that I document it and put it on the Internet so that I can also change to a giver from an all time taker from the Internet.

This time I was trying to automate a part of web page where the script was supposed to upload a file by clicking on a browse button, choose a local file and upload it. Very easy to do when done manually but not so easy through Selenium if you don't know what exactly needs to be done. First of all, clicking on the browse button and selecting a file using selenium doesn`t work. Instead Selenium RC has a function, type(), which is used to type text into text boxes or text fields. This function can be used to type in the full path of the file into the browse element. Example:

$sel->type($locator, $filename);

Here $locator can be the name or id/value pair or just id of the browse element. For more information on locators in Selenium please see this.

Once Selenium has picked up the mentioned file using type function, now its time click on upload button. If you are lucky you'll need not to do anything more and just use click function of Selenium and get going. But modifying browse button tends to misbehave. I noticed that once you have used type function to select a file, Selenium will loose focus and won't be able to execute click function on upload button successfully. The solution of this is to get focus of upload button using focus function from WWW::Selenium and then use click function. So the final sequence turns out to be as below:

$sel->type('browseid', '/home/dir/filename');
$sel->focus('uploadid');
$sel->click('click');

This worked for me very well, hope will be helpful to all of you :)