Thursday, November 17, 2011

Force a PDF to download

I recently needed to force a PDF to download using Apache. The default behaviour for most browsers is to try to open the PDF inside the browser itself. This is fine for a small PDF or for powerful machines - but a large PDF on even a modest machine can often lock the browser up. This needed fixing!

Little R&D of the Apache documents, you can get FilesMatch option which takes Regular Expressions. Initially I used something like this...
<files *.pdf=""></files><br />
<files *.pdf=""> ForceType application/pdf</files><br />
<files *.pdf=""> Header set Content-Disposition attachment</files><br />
This worked PERFECTLY - except some files had upper-case extensions and some had lower and I could see situations in the future where combinations of upper and lower case would be used too - just to piss me off! Because of this, not even this would work...

<filesmatch \.(pdf|pdf)=""></filesmatch>
<filesmatch \.(pdf|pdf)=""> ForceType application/pdf</filesmatch><filesmatch \.(pdf|pdf)=""> Header set Content-Disposition attachment</filesmatch>
That would match perfectly - as long as it was an EXACT match on upper OR lower case.
I was reaching the end of my patience - that is until I read the Using Character Classes on PerlDoc.
This showed me that I could force the RegEx (short for Regular Expressions) to match in a case-insensitive manner. This lead me to the following...
<filesmatch \.(?i:pdf)$=""></filesmatch>
<filesmatch \.(?i:pdf)$=""> ForceType application/pdf</filesmatch><filesmatch \.(?i:pdf)$=""> Header set Content-Disposition attachment</filesmatch>
However this only worked in proper browsers - and the bulk of the world are sadistic enough  to use Internet Explorer based ones. For some reason, if Internet Explorer see's the content type "Application/PDF" it will simply open it up in the reader. The solution? Why not pretend its a bog standard Octet Stream, just like a Zip file? After all, that's basically all it is; a binary file... A steam of bytes.
<FilesMatch "\.(?i:pdf)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
And there you have it… A perfectly working modification to force all PDF files to download - this will work for any file extensions you chose to put into the FilesMatch argument!

Impotant Note :
You can put this code in either the htaccess or the vhost configuration for your server.
You can read more about FilesMatch at the Apache Document page.

Wednesday, September 14, 2011

Android Basics 2

As per  the first step of leaning any thing u have to configure the environment so just follow what is here (i wont go into details of installation) 

Now to the concepts
there are some basic concepts we should have a look at,before going into details

From a developer's perspective, the fundamental building blocks / components of Android are:
1. Activities
2. Services
3. Broadcast Receivers
4. Content Providers.

The means of communication between the above mentioned components is through
1. Intents
2. Intent Filters

The User Interface elements are by using what are called:
2. Notifications

Now lets simply define these concepts 

  1. Activity : Activity is the presentation layer for a Android App. in Simple words Activity is the screen visible to user. Every screen in an application is an activity by itself each activity is an independent entity.For Example  A screen Showing Key pad to type the text.
  2. Services : Services are the background tasks/program that can be executed for a a specific task.For example, a service might play music in the background
  3. Broadcast Receiver : Broadcast Receiver is a component that can receive and respond to any broadcast announcements from the system. for example, a broadcast announcing that the battery is low.each broadcast is delivered as an Intent object .(Intentent described below)
  4. Content Provider  : A Content Provider manages application dataou can store the data in the file system, an SQLite database, on the web, or any other persistent storage location your application can access. Through the content provider, other applications can query or even modify the data (if the content provider allows it).
  5. IntentsIntents are the messages passed between the components just like the parameter passed between APIs.mostly Intents are async.
  6. Intent Filters : Intent Filters are the mean through which component advertise their capabilities to do a task/job/operation to ANDROID platform.
  7. View : User Inter face of activities. simply any drwable object used as an element like button and Image etc
  8. Notifications

Android Basics 1

My current employer is cellular compny providing Value added services (VAS ) to different cellular companies like Mobilink ,Warid and Telenor etc across the country.
as the world is going to mobile computing so we are going to start delivering services for different handsets like android, iphone nokia etc....

In the first phase ANDROID.
so here we be updating our day to day learning and concepts so keep going and enjoy ANDROID development.........

Tuesday, September 13, 2011

extend flexigrid

It's quite easy to understand, what's the magic behind
flexigrid, so I am not a afraid of not beeing able to update, since my
flexigrid at least twice as powerfull as the original one... In Germany we
say "Kosten Nutzen Rechnung", dunno if the translation "Costs and Benefits
Calculation" will point it out...

But here's something for you!! You can extend any jquery plugin easyly by
using the correct extender-function.

look at the end of the flexigrid.js. here you will find several extentions,
the author already implemented. Just Copy-Paste one of them, change the name
und the method, that will be called... add private method to flexigrid..


$.fn.flexReload = function(p) { // function to reload grid

        return this.each( function() {
                if (this.grid&&this.p.url) this.grid.populate();

    }; //end flexReload

This function should be in your flexigrid.js already.  Copy that and paste
it like this:

$.fn.flexMyExtendedFunc = function(p) { // function to reload grid

        return this.each( function() {
                if (this.grid&&this.p.url) this.grid.myprivatefunction();

    }; //end flexReload

Now, search for the function "populate" ... you'll find something like this:

populate: function () { //get latest data
                var g = this;


Again.. Copy paste the whole function and rename it to "myprivatefunction"
and, of course, change the code inside the function.

You can pass parameters as well!

And now you may ask, how to call this function??

very easy!

Let's says, you have a " <table id="myFlexTable"/>∓lt;/table&gt;

You did   "$("#myFlexTable").flexigrid(...); somewhere...

Now just call  $("#myFlexTable").flexMyExtendedFunc();" 
and the code INSIDE the flexigrid ("myprivatefunction") will be executed. You have full control
in here... you can access all variables, the flexigrid uses...

And what about updating?

If you really JUST add a new extension method AND ONLY add methods to the
flexgrid-plugin, you can easyly copy-paste them to a new version.... That's
how I would do it... Anyway, trust me, if you ll get to understand the code,
the other way - adding updates via copy-paste to your version of flexigrid,
might be a lot faster...

Hope that helps some people out there, who try to expand the flexigrid.

Source code

Monday, September 12, 2011

How to install LAMP (Apache, PHP and MySQL in Linux) using Yum - Techie Corner

How to install LAMP (Apache, PHP and MySQL in Linux) using Yum - Techie Corner: "Below are the steps to install LAMP (Apache, PHP and MySQL in Linux) using Yum:-

Open a terminal (if you are using X-Window), and type
   yum install httpd 
and follow on screen instruction to install apache web server
Once apache web server has been installed, type
yum install php
Once PHP installed successfully, type
yum install mysql-server mysql php-mysql

Once everything finish,
you can do all the above steps in a single command like
yum install httpd php mysql-server mysql php-mysql
service httpd start  
to start your apache web server, screen will show you if web server service successfully started
type service mysqld start 
to start your mysql server"

'via Blog this'

Cross domain ajax calls

Friday, September 9, 2011



Lightweight but rich jquery  php data grid with resizable columns and a scrolling data to match the headers, plus an ability to connect to an xml based data source using Ajax to load the content.
Similar in concept with the Ext Grid only its pure jQuery love, which makes it light weight and follows the jQuery mantra of running with the least amount of configuration.

Thursday, August 18, 2011

20 Years of Linux [Infographic]

Linux celebrated it’s 20th birthday this week. During these twenty years Linux has evolved remarkably from an ordinary computer application that could do nothing much than bootin-up a computer to now a full scale and highly featured operating system, which is still free.

Linux Foundation, at the occasion of it’s birthday, released following infographic which pretty much shows the transition that Linux has undergone during the years.

At the end there’s a video as well – to better understand the concept of Linux, just in case if aren’t aware of it’s business rules.

Tell Us: Do you think you are Being Trapped by Google?

Google has become an essential part of our online lives. Gmail, Google Docs, Search Engine, Feed Reader, Maps, Google Earth, YouTube and What Not?

I am not doubting the ease this single company has brought to our lives, but at the same ever you thought that Google stores all the activities you do on internet, for instance, what searches you did, emails you send, your mobile number and much much more – there is a huge list we can make. For a sneak peak, find out what information Google stores about you by clicking this link:

There are good chances that Google knows that you are looking for admission in a medical college in Abbotabad, or maybe it knows well that you are preparing a research report on a particular topic for your degree project or even it may know your medical history as well.

Instead of commenting further – we want to hear from you in comments, and question is

“Ever you thought that Google knows too much about you? If not, are you thinking the same now? What’s in your mind – say it” (Silent Readers are also requested for input)

Expect a follow up post on the same topic – but first, we want to listen you.

Wednesday, August 17, 2011

linux commands for every web developer/Software engineer

scp - Linux command line tool to copy files over ssh

scp [[user@]from-host:]source-file [[user@]to-host:][destination-file]

scp  abc.TXT root@

Is the name or IP of the host where the source file is, this can be omitted if the from-host is the host where you are actually issuing the command
Is the user which have the right to access the file and directory that is supposed to be copied in the cas of the from-host and the user who has the rights to write in the to-host
Is the file or files that are going to be copied to the destination host, it can be a directory but in that case you need to specify the -r option to copy the contents of the directory
Is the name that the copied file is going to take in the to-host, if none is given all copied files are going to maintain its names

Copy Multiple fies

scp root@$dir/\{abc.txt,def.txt,ghi.txt\} root@

Restart MySql Ubuntu

To restart Apache2 on Ubuntu, we enter the following command in a terminal such as bash:
restart mysql

service mysql start

Restart Apache2 Ubuntu

To restart Apache2 on Ubuntu, we enter the following command in a terminal such as bash:
/etc/init.d/apache2 restart
Of course, you most likely will need to be the superuser to do that so you might need to enter the following command and then your password when requested:
sudo /etc/init.d/apache2 restart


use pointer to acees the variable within a variable directly like
 echo ${!name}
Result : bar

grep command: 

grep command usually interpet "|" as "AND" sign but you can use the same "|" for "OR" sign

for example
zgrep "^2012-06-05" /var/path/to/file/abc12346-12-06* | grep -E '3003300356|3003301763|3008203898|3008202542|3008226266|3003404159'

zgrep = grep for gzipped files

Monday, August 15, 2011

some of the basic linux command

There are many common Linux commands that will be helpful to you, if you ever even use the command line interface in Linux. Most average users just use the graphical user interface instead which usually has many tools and front-ends to Linux common commands. This Linux tutorial on command commands will help even the average user in case X server crashes, fails, is not properly configured, etc. So continue reading for some of the more common Linux bash commands.

Some of the more common Linux shell commands are listed below for more information on each command you can always run man [command] and this will bring up the manpage for that command, you can also click on the commands listed for some common examples and syntax.
First before I list them any syntax in [] will need some kind of input from you normally, for example:
man [command] you will want to actually replace [command] with the shell command you want to read the man page for: man ls will give you the man page for the Linux shell command ls.
  • linux ls command – is used to list files on the filesystem.
  • file – command that will check the filetype, this will output to you what the file type is no matter what the extension is.
  • mkdir command – used to make directories on the filesystem.
  • cd – is used for changing into a different directory in the Linux shell
  • cp – is the Linux copy command, this shell command is used to copy files|directories from one location on the filesystem to another.
  • mv – the Linux terminal command to move files|directories. Like the cp command, but deletes the original source.
  • rm – shell command in Linux to remove files|directories.
  • Linux cat command- this command is used to print|view the contents of a file to the screen|terminal.
  • grep – command used to search|find contents of a file and print|view on your terminal|screen.
  • Linux more and less – commands that will allow you to read output of files, unlike cat that will output the entire file at once, even if it is too large for your terminal more and less will output only as many lines as the shell you are in can output, and allow you to scroll through the file contents.
  • chown – Linux command to change ownership of a file|directory.
  • Linux chmod – command that allows you to change mode of user access|permissions, basically set read, write, and execute permissions.
  • Linux ps – lists the current running processes on your Linux system
  • Linux kill and killall commands – used to kill|terminate running processes

Unpacking or uncompressing gz files under Linux and UNIX systems

Using gunzip command:
$ gunzip file.gz
$ ls file
Using gzip -d command:
$ gzip -d file.gz
$ ls file
If file extension is tar.gz, type the command:
$ tar -zxvf file.tar.gz
Please note that gunzip can currently decompress files created by gzip, zip, compress, compress -H or pack programs.

Friday, June 24, 2011

Chromium on Ubuntu ! [HOW TO]

Chromium is an open source web browser. The project was founded by Google, which built Google Chrome on top of the code of Chromium. Sadly enough, only a Windows version of Google Chrome as been released, leaving the rest of us in the dust.
What I learned today is pretty awesome.
While I knew that Linux and Mac versions were in the works, I found out that a PPA repository for daily builds of Linux’s Chromium does exist ! (we’re talking about a native non-using Wine version)
Before explaing how to install it, let me just specify we’re talking about alpha builds, and pretty incomplete ones. Just basic web surfing works.: Chromium may don’t work, make your loose data or make your loose your cat. Remember if that anything breaks, you’re on your own – install it only if you’re confortable with restoring your system/data. Also keep in mind this disclaimer on the PPA’s launchpad page:
Ubuntu daily builds of the Chromium browser.
The PPA is maintained by a bot, so it contains completely untested builds, mostly useful to track regressions or if you are curious, or just brave.
The package is still a work-in-progress, so is Chromium, please be patient.
FAQ: no native 64bit debs planed for now. The amd64 package is using ia32-libs.
Project page for Chromium in Ubuntu:
How to install Chromium on Ubuntu
Open your /etc/apt/sources.list file !
gksudo gedit /etc/apt/sources.list
Add these lines at the very bottom of it:
deb intrepid main
deb-src intrepid main
then upload and install:
sudo apt-get update
sudo apt-get install chromium-browser
Update: due to some bug Chromium requires the msttcorefonts package to actually show content (otherwise it will just show a blank content area). So, make sure to have multiverse repositories enabled and also type:
sudo apt-get install msttcorefonts

Saturday, March 12, 2011

promote your business and post jobs

promote your business and post/get jobs for free at
no need to login

Tuesday, March 8, 2011

Installing Apache2 With PHP5 And MySQL On Ubuntu 10.10 (LAMP)

LAMP is short for Linux, Apache, MySQL, PHP. This tutorial shows how you can install an Apache2 webserver on an Ubuntu 10.10 server with PHP5 support (mod_php) and MySQL support.

1 Preliminary Note

In this tutorial I use the hostname with the IP address These settings might differ for you, so you have to replace them where appropriate.I'm running all the steps in this tutorial with root privileges, so make sure you're logged in as root:
sudo su

2 Installing MySQL 5

First we install MySQL 5 like this:
aptitude install mysql-server mysql-client

You will be asked to provide a password for the MySQL root user - this password is valid for the user root@localhost as well as, so we don't have to specify a MySQL root password manually later on:
New password for the MySQL "root" user: <-- yourrootsqlpassword
Repeat password for the MySQL "root" user: <-- yourrootsqlpassword

3 Installing Apache2

Apache2 is available as an Ubuntu package, therefore we can install it like this:
aptitude install apache2
Now direct your browser to, and you should see the Apache2 placeholder page (It works!):
Apache's default document root is /var/www on Ubuntu, and the configuration file is /etc/apache2/apache2.conf. Additional configurations are stored in subdirectories of the /etc/apache2 directory such as /etc/apache2/mods-enabled (for Apache modules), /etc/apache2/sites-enabled (for virtual hosts), and /etc/apache2/conf.d.

4 Installing PHP5

We can install PHP5 and the Apache PHP5 module as follows:
aptitude install php5 libapache2-mod-php5
We must restart Apache afterwards:
/etc/init.d/apache2 restart

5 Testing PHP5 / Getting Details About Your PHP5 Installation

The document root of the default web site is /var/www. We will now create a small PHP file (info.php) in that directory and call it in a browser. The file will display lots of useful details about our PHP installation, such as the installed PHP version.
vi /var/www/info.php
<?php phpinfo(); ?>
Now we call that file in a browser (e.g.
As you see, PHP5 is working, and it's working through the Apache 2.0 Handler, as shown in the Server API line. If you scroll further down, you will see all modules that are already enabled in PHP5. MySQL is not listed there which means we don't have MySQL support in PHP5 yet.

6 Getting MySQL Support In PHP5

To get MySQL support in PHP, we can install the php5-mysql package. It's a good idea to install some other PHP5 modules as well as you might need them for your applications. You can search for available PHP5 modules like this:
aptitude search php5
Pick the ones you need and install them like this:
aptitude install php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-json
Now restart Apache2:
/etc/init.d/apache2 restart
Now reload in your browser and scroll down to the modules section again. You should now find lots of new modules there, including the MySQL module:

7 phpMyAdmin

phpMyAdmin is a web interface through which you can manage your MySQL databases. It's a good idea to install it:
aptitude install phpmyadmin
You will see the following questions:
Web server to reconfigure automatically: <-- apache2
Configure database for phpmyadmin with dbconfig-common? <-- No
Afterwards, you can access phpMyAdmin under

Wednesday, February 16, 2011

market your product and Post jobs ( provide a huge upsurge in sales, and a significant decrease in expenses, thus making it a clever and astute business move. A website:

* Acts as an inexpensive showroom, storefront and salesperson to your local market and beyond — 24 hours a day, seven days a week.
* Serves to satisfy the phenomenon of customers increasingly researching purchases before buying, thus leading to an informed customer who is ready to buy.
* Allows for mailing lists to send the same email message to hundreds of customers for the same cost as sending to one. No more huge postal costs, or licking envelopes.
* Can provide answers to frequently asked questions, which reduces the costs of staff having to answer the same thing over and over.
* Provides a shopping experience that is both convenient and timesaving. (And for women, satisfying!)
* Gives your business a great advantage over your competitors and consequently provides an opportunity to capture their market share.
* Doesn’t limit a business to its location; you can reach a wider and more diversified market.
* Makes it easy to collect and collate information on the purchasing patterns of your customers, thereby allowing a vendor to cost effectively alter their sales and promotion methods.
* Can accept automated orders and payments for products.
* Can facilitate an online database of products, which is quick and easy to modify; whereas traditional media catalogues cannot be altered without great expense.