Tuesday, February 23, 2010

css tric to set containers height with minimum and auto values

.selector {
width:200px;
min-height:100px;
height:auto !important;
height:500px;
border:1px solid #000000;
padding:5px;
}
when you assign this class to any contaner like div or span, its minimum height is 100px if there is no content, then it is automatically exanded instead of scrolling when loaded content is more. Maximum height is 500px it is for IE browser only.

Monday, February 22, 2010

Sending emails with Gmail smtp server rather than your server's smtp

Download the phpmailer classes At http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php5_6/

Then use the below code to send emails.
require(“includes/class.phpmailer.php”);
$mailer = new PHPMailer();
$mailer->IsSMTP();
$mailer->Host = ’ssl://smtp.gmail.com:465′;
$mailer->SMTPAuth = TRUE;
$mailer->Username = ‘{somename}@gmail.com’; // Change this to your gmail adress
$mailer->Password = ‘{password}’; // Change this to your gmail password
$mailer->From = ‘{someid}@gmail.com’; // This HAVE TO be your gmail adress
$mailer->FromName = ‘Venkat’; // This is the from name in the email, you can put anything you like here
$mailer->Body = ‘Message body’;
$mailer->Subject = ‘Message subject’;
$mailer->AddAddress(‘{toaddress email id}’); // This is where you put the email adress of the person you want to mail
if(!$mailer->Send())
{
echo “Message was not sent
”;
echo “Mailer Error: ” . $mailer->ErrorInfo;
}
else
{
echo “Message has been sent”;
}
?>

Friday, February 19, 2010

Cron job settings in server

Cron jobs are used to run a script automatically with some time interval Example if you want to send emails daily morining to all newsletter subscribers when new jobs were added to your jobs portal these cron jobs are used. Below are the steps to setup cron jobs

For php:
Login to hosting server and goto the cron job settings page and select the time interval you want to run the script then give the command to run the php file as below

php /path-to-your-phpfile.php
(OR)
/usr/local/bin/php /path-to-your-phpfile.php

For Ruby:
/usr/local/bin/ruby /home/user/domainname/script/runner /home/user/domainname/app/cron_job.rb

Understanding of Restful Architecture

RESTful interface means clean URLs, less code, CRUD interface.

CRUD means Create-READ-UPDATE-DESTROY.

You might heard about HTTP verbs, GET, POST. In REST, they add 2 new verbs, i.e, PUT, DELETE.

There are 7 default actions, those are – index, show, new, create, edit, update, destroy

GET is used when you retrieve data from database. POST is used when you create new record in database. PUT is used when you are updating any existing record in database, and DELETE is used when you are destroying any record in database. Following table may clear the concept.

Action VERB

index GET

show GET

new GET

create POST

edit GET

update PUT

destroy DELETE

Tuesday, February 16, 2010

PHP and Flash Interaction Through XML and Actionscript

Flash can interact with dynamic data using XML files and also submit data to the php code using Action Script's getURL function. The getURL function in ActionScript can be used to set the external url to links and also for the flash form submissions. You can send any variable value from within the flash file to a PHP file. For example the following code,

getURL("fromFlash.php", "_blank", "POST");

can be used to send variables from Flash to a PHP file fromFlash.php. The variable sent according to the code above use the POST method. You can use the $_POST('variable_name') to get the data from the flash file and assign that value to some other variable within the PHP file. It is so easy to do it.

To load XML data in flash you can create an XML object and use that object's Load method to load the XML file you need.

Monday, February 15, 2010

Open multiple urls at a time

To open multiple windows at a time use the below code in Javascript
window.open('http://www.yahoo.com');
window.open('http://www.gmail.com');

take the above lines in one js function and call the function when you want to open yahoo and google at a time in two different tabs.

Sunday, February 14, 2010

All about Ajax and its states

Ajax (Asynchronous Javascript And XML) is used to update part of the webpage's content Asynchronously without reloading the entire page. Below are the five possible response states in Ajax
0: The request is uninitialized (before you've called open()).
1: The request is set up, but not sent (before you've called send()).
2: The request was sent and is in process (you can usually get content headers from the response at this point).
3: The request is in process; often some partial data is available from the response, but the server isn't finished with its response.
4: The response is complete; you can get the server's response and use it.

About ORM (Object Relation Mapping)

Accessing database using a layer of classes is called ORM. The rest of the application uses these classes and their objects. It never allow directly interacting with database.

1. ORM libraries map database tables to classes. If a database has a table users(plural).Our program will have a class named user(singular) stored in model folder,

2. Rows in this table correspond to objects of the class—a particular user is represented as an object of class user.
3. By using this object's attributes we can set and get the individual columns.

So an ORM layer maps tables to classes, rows to objects and columns to attributes of that object(methods).


Class methods are used to perform table-level operations.
Instance methods are used to perform operations on the individual rows.

It is all taken care by ActiveRecord class.

Zend installation steps

Zend framework requires php5 or later
1)Download the zend framework package from http://framework.zend.com/download/latest

2)Unzip the package and place it where ever you want
Here in my system /usr/var/zendframework

3)Open the zendframework/library and copy the folder path.

4)Open the php.ini file and set the include_path for this libray
Here in my system I have found include_path like include_path = ".:/usr/share/php5:/usr/share/pear , And i added the zend library path like include_path = ".:/usr/share/php5:/usr/share/pear:/var/www/ZendFramework/library"

5)Now we have create alias for zf.sh (self executable file in console for linux) ,To do this run the fallowing command in terminal.
alias zf.sh= /var/www/ZendFramework/bin
6)Run the fallowing command in terminal
zf create project myproject
7)Now directory structure has been created with the name myproject.In this directory you will be given with some sub directories in order to develop your application(project).

PHP Design Patterns

Design pattern is nothing but how a civil engineer planed before start constructing any building i.e where a kitchen is, and how it will be, where temple room, where dining hall etc., In a software engineering design pattern is nothing but a blueprint for your software to avoid tight coupling of modules means when you modify some code in one module which doesn't take effect on other modules. The most usefull and common design patterns are

Sigleton pattern: Used to restrict instantiation of a class to one object only. The real time use of this pattern is connection to database is opened only once.

Factory pattern: Used to implement loosecoupled modules.

Observer pattern: Used to maintain all dependents and notifies them automatically when any change made

Friday, February 12, 2010

Generating rsa public and private keys in linux

Open terminal and run ssh-keygen with below optional params
$ ssh-keygen -t rsa -C "venkatadapa@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/venkat/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/venkat/.ssh/id_rsa.
Your public key has been saved in /home/venkat/.ssh/id_rsa.pub.
The key fingerprint is:
01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db venkatadapa@gmail.com

Use "ssh-add path/to/my_key" If you want to change the path of the keys to store at Your public key has been saved in /home/venkat/.ssh/id_rsa.pub.

To know more about passphrases just visit http://help.github.com/working-with-key-passphrases/

After finished the above steps an hidden .ssh folder was created in that specified path containing with files id_rsa,id_rsa.pub and known_hosts. id_rsa contains private key. id_rsa_pub contains your public key.

You can use this key for your github account to manage your data from your computer.

Tuesday, February 9, 2010

Real time usage of polymorphism concept

One of the basic concepts of Object Oriented Programming is that we use polymorphism instead of conditional logic when we want to change runtime behaviour of a program. The Open Closed Principle clarifies this idea by suggesting that software should be open to extension (means can be flexible for adding new features), but closed to modification (means not able change the existng functionality).

Conditional assignment operator in Ruby

Hi, ||= is an operator for assigning value to a variable conditionally in Ruby. See the example below
Here a @secrete is an instance variable contains array of four values. End user guess that values along with the order
If value found and at same position you will see T, If found but not at same position output is 't'. If your guessed value is not at all in the @secrete list your output is F

<%
@secret = %w[chiru ballaya nag venki]

def guess(guess) #where guess is an array of having four values
result = [nil,nil,nil,nil] #array with four nil values
guess.each_with_index do |value, index|
if @secret[index] == value
result[index] = "T"
elsif @secret.include?(value)
result[@secret.index(value)] ||= "t" # ||= is conditional assignment operator, means which will only assign the value if it is currently nil or false. It will not replace if it is already have any value in that variable.
end
end
result.compact.sort.join
end


end
end
guess(%w[chiru nag ballay venki]) #here you are guessing the names and orders.
%>
#output TttT
#Chiru and Venki are exists and also at same positions.
#nag and ballayya are exists but not at same positions.

Monday, February 8, 2010

Files upload without any plugins in ROR

There are lots of plugins available for upload files in ruby on rails.

* file_column plugin:
* attachment_fu
* flex_image
* upload_column
* and many more

Accoding to me, all these file are more useful for image uplaoding not other files like voice file, pdf and other.

So I made a defination which check following things and then upload a file on defined location.

1. File extension.

2. Mime type (require mime type plugin)

3. Size of the file

#Define basic things in enviornment/development.rb file
01.FILE_EXTENSIONS = [".wav",".mp3",".gsm",".pdf"] #Allowed file types
02.
03.FILE_TEMP_PATH="#{RAILS_ROOT}/public/temp/" #Where file is initialy uploaded
04.
05.FILE_MIME_EXTENSIONS =["audio/x-wav","audio/mpeg","audio/gsm","audio /x-gsm","application/pdf"] #Allowed file types
06.
07.FILE_ROOT_PATH= "#{RAILS_ROOT}/public/saved/" #Where file is uploaded permanently
08.
09.FILE_MAXIMUM_SIZE_FOR_FILE=1048576 #Maximum Size (1MB) define in bytes

#In model
01.before_save :save_file
02.
03.attr_accessor :file_data
04.
05.def get_filename
06.#define your rename file method
07.t = Time.now
08."file_#{t.strftime("%Y%m%d%H%M")}"
09.end
10.
11.def save_file
12.begin
13.# No update necessary
14.return true if self.file_data.blank?
15.filename = get_filename
16.return false if filename.nil?
17.
18.extension = File.extname(self.file_data.original_filename)
19.if extension.nil?
20.errors.add(:file_data,"Wrong Extension")
21.return false
22.end
23.
24.# Check if the FILE_TEMP_PATH is created, if not try to create
25.if !File.directory?(FILE_TEMP_PATH)
26.File.makedirs(FILE_TEMP_PATH)
27.end
28.
29.temp_source = File.join(FILE_TEMP_PATH, filename)
30.temp_source << extension
31.final_source = File.join(FILE_ROOT_PATH, filename)
32.final_source << extension
33.
34.File.open(temp_source, "wb") { |f| f.write(self.file_data.read)}
35.
36.size=File.size(temp_source)
37.extension = File.extname(temp_source)
38.mime_extension=File.mime_type?(temp_source)
39.if FILE_MIME_EXTENSIONS.include?(mime_extension) == false
40.logger.error("Trying to upload file with mime-type: #{mime_extension} ")
41.errors.add(:file_data,"Only wav, mp3,gsm and pdf files are allowed")
42.return false
43.end
44.if FILE_EXTENSIONS.include?(extension) == false
45.logger.error("Trying to upload file with extension: #{extension} ")
46.errors.add(:file_data,"File extension should be wav, mp3, gsm or pdf")
47.return false
48.end
49.if size > FILE_MAXIMUM_SIZE_FOR_FILE
50.logger.error("Trying to upload file with size: #{size} ")
51.errors.add(:file_data,"File should not be more than #{FILE_MAXIMUM_SIZE_FOR_FILE} bytes")
52.return false
53.end
54.if valid? #Upload in permanent folder
55.logger.error("#{self.errors.to_xml}")
56.self.file=filename
57.FileUtils.copy_file(temp_source,final_source)
58.FileUtils.rm(temp_source) if File.exists?(temp_source)
59.return true
60.else
61.errors.add(:file_data,"Invalid file format")
62.FileUtils.rm(temp_source) #Remove temp file
63.return false
64.end
65.rescue => e
66.logger.error(e)
67.errors.add(:file_data,"Invalid file format")
68.return false
69.end
70.
71.end

# In View form
1.<% form_for :obj_name,:html=>{:multipart=>true} do |f| %>
2.
3.<%= f.error_messages %>
4.
5.File: <%=f.file_field :file_data%>
6.<%= f.submit "Create" %>
7.
8.<% end %>

Wednesday, February 3, 2010

Getting data with has_many and belongs_to associations

Projects Table
id Integer Auto-incrementing field
title Varchar(255)
description text


Tasks Table
id Integer Auto-incrementing field
name Varchar(255)
comment text
project_id Integer #This tells which project a task belongs to. This field is named following a Rails convention and refers to a related row in the projects table. This is called a foreign key and is more than just a device to help a programmer remember table and object relationships.

Project Model (project.rb)

has_many :tasks


Task Model (task.rb)

belongs_to :project

For instance, from the relationships defined in the models each task has a project title that can be accessed by task.project.title and each project has a list of tasks accessed by project.tasks.

An example shows the ease of finding all the tasks for a specific project.

def show
project = Projects.find(params[:id])
tasks = project.tasks.find(:all)
end

This example is similar to the list action above. The "1" in the URL below is where params[:id] comes from.

http://www.somesite.com/projects/show/1

Downloading files in Ruby on Rails

In rails there is default method avaialable to donwload the files by users. i.e send_file. So below code will provide the user to download the file 'home/railsway/downloads/huge.zip' if (s)he logged in.

before_filter :login_required
def download
send_file '/home/railsway/downloads/huge.zip', :type=>"application/zip"
end

Apache server needs one extra header called XSend file to download the file. so Use below in case of that.

before_filter :login_required
def download
send_file '/home/railsway/downloads/huge.zip', :type=>"application/zip", :x_sendfile=>true
end

Ruby on Rails File Column plugin usage

After installing the plugin, you should observe the below steps
In model
class Product < ActiveRecord::Base
file_column :image #image is the field name in db for Products table
end

Generate browse button in view

<%= file_column_field “product”, “image” %>

and display uploaded images in your view:

<%= image_tag url_for_file_column(“product”, “image”) %>

However, you may want to protect against the model object having no uploaded image:

<%= image_tag url_for_file_column(“product”, “image”) if @product.image %>

To resize every uploaded image to a maximum size of 640×480, you just have to declare an additional option.

class Product < ActiveRecord::Base
file_column :image, :magick => { :geometry => “640×480>” }
end

You can even automatically create versions in different sizes that have nice filenames…

class Product < ActiveRecord::Base
file_column :image, :magick => {
:versions => { “thumb” => “50×50″, “medium” => “640×480>” }
}
end

and display them in your view:

<%= image_tag url_for_file_column(“image”, “entry”) %>

Monday, February 1, 2010

Whats new in PHP5

There are somany changes were added to php5 and now it occupies 3rd position in the worlds famous programing languages. see the all new features added to php5 @ http://devzone.zend.com/article/1714

Joins in mysql

There are different joins available in mysql to retrieve results from multiple tables.
Join, left join, right join, inner join, outer join

Here i explained each one by taking two tables as an example.

mysql>Products Table;
+----+--------------+--------------+
| id | product_name | manufacturer |
+----+--------------+--------------+
| 1 | Shoes | Company1 |
| 2 | Laptop | Company2 |
| 3 | Monitor | Company3 |
| 4 | DVD | Company4 |
+----+--------------+--------------+
4 rows in set (0.00 sec)

Table buyers:
mysql> SELECT * FROM buyers;
+----+------+------------+----------+
| id | pid | buyer_name | quantity |
+----+------+------------+----------+
| 1 | 1 | Steve | 2 |
| 2 | 2 | John | 1 |
| 3 | 3 | Larry | 1 |
| 4 | 3 | Michael | 5 |
| 5 | NULL | Steven | NULL |
+----+------+------------+----------+
5 rows in set (0.00 sec)

Normal Join

mysql> SELECT buyers.buyer_name, buyers.quantity, products.product_name FROM buyer
s join products on buyers.pid=products.id;
(OR)
mysql> SELECT buyers.buyer_name, buyers.quantity, products.product_name FROM buyer
s,products WHERE buyers.pid=products.id;

+------------+----------+--------------+
| buyer_name | quantity | product_name |
+------------+----------+--------------+
| Steve | 2 | Shoes |
| John | 1 | Laptop |
| Larry | 1 | Monitor |
| Michael | 5 | Monitor |
+------------+----------+--------------+
4 rows in set (0.00 sec)

The above query displays results only with matching pids in both tables.



Left Join

mysql> SELECT buyer_name, quantity, product_name FROM buyers LEFT JOIN products ON
buyers.pid=products.id;
+------------+----------+--------------+
| buyer_name | quantity | product_name |
+------------+----------+--------------+
| Steve | 2 | Shoes |
| John | 1 | Laptop |
| Larry | 1 | Monitor |
| Michael | 5 | Monitor |
| Steven | NULL | NULL |
+------------+----------+--------------+
5 rows in set (0.00 sec)

Explaination:
Mysql starts with the left table (buyers) as main source then For each row from the table buyers mysql scans the table products with pid (i.e id of the product in products table) and returns the product name. Then the product name is joined with the matching row to the table buyers. For unmatched rows it returns null.

The above query is same as below (except with null values)

mysql> SELECT buyers.buyer_name, buyers.quantity, products.product_name FROM buyer
s,products WHERE buyers.pid=products.id;
+------------+----------+--------------+
| buyer_name | quantity | product_name |
+------------+----------+--------------+
| Steve | 2 | Shoes |
| John | 1 | Laptop |
| Larry | 1 | Monitor |
| Michael | 5 | Monitor |
+------------+----------+--------------+
4 rows in set (0.00 sec)

The above query displays results for only matching pids in both tables.

Right Join

mysql> SELECT buyer_name, quantity, product_name FROM buyers RIGHT JOIN products ON
buyers.pid=products.id;
+------------+----------+--------------+
| buyer_name | quantity | product_name |
+------------+----------+--------------+
| Steve | 2 | Shoes |
| John | 1 | Laptop |
| Larry | 1 | Monitor |
| Michael | 5 | Monitor |
| NULL | NULL | DVD |
+------------+----------+--------------+
5 rows in set (0.00 sec)

Explaination:
Mysql starts with the Right table (products) as main source then For each row from the table products mysql scans the table buyers with id (i.e pid of the buyers table) and returns the product name. Then the product name is joined with the matching row to the table products. For unmatched rows it returns null. From my example above it returns NULL for DVD because no one bought DVD.

Inner join is same as join.

The word OUTER may be added after the word LEFT or RIGHT in the left/right joins - it's provided for ODBC compatibility and doesn't add an extra capabilities.

Sql Difference between where clause and Having clause

Hi, below are differences between where clause and having clause in mysql select statements.

1. Having clause is usually used with Group By clause although it can be used without it too.
2. 'Having' is just an additional filter to 'Where' clause.
3. 'Where' clause applies to the individual rows whereas 'Having' clause is used to test some condition on the group(usually aggregate methods) rather than on individual rows.
4. WHERE clause is used to impose condition on SELECT statement as well as single row function and is used before GROUP BY clause where as HAVING clause is used to impose condition on GROUP Function and is used after GROUP BY clause in the query. For example queries look at http://www.allinterview.com/showanswers/6252.html

Awesome rounded cornered blocks using CSS only - nifty corners

Hi Friends,
To display rounded cornered block in your webpage, most probably we are designing rounded cornered blocks in photoshop then converted the image using css by taking small corner images as source for displaying rounded corner effect, But we can do this by using only css not any images or javascript support needed. The concept is called nifty corners see the demo http://acko.net/files/nifty-aa.html