Monday, January 12, 2009

Dojo - Javascript Framework

Overview

- Dojo is a HTML and Javascript Framework for Rich interactive Applications
- Dojo offers many widgets, utilities and ajax libraries to develop your application.
- Open source under BSD license
- Robus Ajax framework
- Programmer can use just API to build powerful functions
-

Basic components

Tree,Button,Calendar control,Grid,List box

Pros

Associative arrays
Loosely typed variables
Regular expressions
Objects and classes
Highly evolved date, math, and string libraries
W3C DOM support in the Dojo

Challenges:

- Browser dependent; applicable for any client framework
- No way to hide dojo code in view source

Wednesday, January 7, 2009

What is === operator in Javascript?

=== is strict equality operator ,it returns true only when the two operands are having the same value without any type conversion.

Example

alert(1=="1"); returns true
alert(1==="1"); returns false

Javascript Cookies

Cookies

Cookies were originally invented by Netscape to give 'memory' to web servers and browsers. The HTTP protocol, which arranges for the transfer of web pages to your browser and browser requests for pages to servers, is state-less, which means that once the server has sent a page to a browser requesting it, it doesn't remember a thing about it. So if you come to the same web page a second, third, hundredth or millionth time, the server once again considers it the very first time you ever came there.

This can be annoying in a number of ways. The server cannot remember if you identified yourself when you want to access protected pages, it cannot remember your user preferences, it cannot remember anything. As soon as personalization was invented, this became a major problem.

Cookies were invented to solve this problem. There are other ways to solve it, but cookies are easy to maintain and very versatile.

How cookies work
A cookie is nothing but a small text file that's stored in your browser. It contains some data:

A name-value pair containing the actual data
An expiry date after which it is no longer valid
The domain and path of the server it should be sent to


As soon as you request a page from a server to which a cookie should be sent, the cookie is added to the HTTP header. Server side programs can then read out the information and decide that you have the right to view the page you requested or that you want your links to be yellow on a green background.

So every time you visit the site the cookie comes from, information about you is available. This is very nice sometimes, at other times it may somewhat endanger your privacy. Fortunately more and more browsers give you the opportunity to manage your cookies (deleting the one from the big ad site, for example).

Cookies can be read by JavaScript too. They're mostly used for storing user preferences.

name-value


Each cookie has a name-value pair that contains the actual information. The name of the cookie is for your benefit, you will search for this name when reading out the cookie information.
If you want to read out the cookie you search for the name and see what value is attached to it. Read out this value. Of course you yourself have to decide which value(s) the cookie can have and to write the scripts to deal with these value(s).

Expiry date


Each cookie has an expiry date after which it is trashed. If you don't specify the expiry date the cookie is trashed when you close the browser. This expiry date should be in UTC (Greenwich) time in the format created by the Date.toGMTString() method

Domain and path


Each cookie also has a domain and a path. The domain tells the browser to which domain the cookie should be sent. If you don't specify it, it becomes the domain of the page that sets the cookie, in the case of this page www.quirksmode.org.Please note that the purpose of the domain is to allow cookies to cross sub-domains. My cookie will not be read by search.quirksmode.org because its domain is www.quirksmode.org . When I set the domain to quirksmode.org, the search sub-domain may also read the cookie.I cannot set the cookie domain to a domain I'm not in, I cannot make the domain www.microsoft.com . Only quirksmode.org is allowed, in this case.
The path gives you the chance to specify a directory where the cookie is active. So if you want the cookie to be only sent to pages in the directory cgi-bin, set the path to /cgi-bin. Usually the path is set to /, which means the cookie is valid throughout the entire domain.This script does so, so the cookies you can set on this page will be sent to any page in the www.quirksmode.org domain (though only this page has a script that searches for the cookies and does something with them).

document.cookie


Cookies can be created, read and erased by JavaScript. They are accessible through the property document.cookie. Though you can treat document.cookie as if it's a string, it isn't really, and you have only access to the name-value pairs.

If I want to set a cookie for this domain with a name-value pair 'ppkcookie1=testcookie' that expires in seven days from the moment I write this sentence, I do

document.cookie =
'ppkcookie1=testcookie; expires=Thu, 2 Aug 2001 20:47:11 UTC; path=/'
First the name-value pair ('ppkcookie1=testcookie')
then a semicolon and a space
then the expiry date in the correct format ('expires=Thu, 2 Aug 2001 20:47:11 UTC')
again a semicolon and a space
then the path (path=/)


This is a very strict syntax, don't change it! (Of course the script manages these dirty bits for you)

Also, even though it looks like I'm writing this whole string to the string document.cookie, as soon as I read it out again I only see the name-value pair:ppkcookie1=testcookie
If I want to set another cookie, I again do

document.cookie ='ppkcookie2=another test; expires=Fri, 3 Aug 2001 20:47:11 UTC; path=/'

The first cookie is not overwritten, as it would when document.cookie would be a real string. Instead the second one is added to document.cookie, so if we read it out we get

ppkcookie1=testcookie; ppkcookie2=another test
If I reset a cookie

document.cookie ='ppkcookie2=yet another test; expires=Fri, 3 Aug 2001 20:47:11 UTC; path=/'

the old cookie is overwritten and document.cookie readsppkcookie1=testcookie; ppkcookie2=yet another test

To read out a cookie you have to treat document.cookie as a string and search for certain characters (semicolons, for instance) and for the cookie name. I'll explain how to do it below.
Finally, to remove a cookie, set it with an expiry date before today. The browser sees that the cookie has expired and removes it.

document.cookie ='ppkcookie2=yet another test; expires=Fri, 27 Jul 2001 02:47:11 UTC; path=/'


Example
If you're thoroughly confused by all this strange syntax, try the example below. You can set two cookies, ppkcookie1 and ppkcookie2. Fill in the desired value in the text box.
The value of the cookie should be

I set the cookies to remain active for seven days. If you return to this page within that time, you'll get an alert that the cookie(s) is/are still active. Try it by setting a cookie, then reloading this page.

These are the three scripts you need.

function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name,"",-1);
}


Explanation


functions are not very difficult, the hardest part is creating the correct syntax for setting a cookie.
createCookie

When calling createCookie() you have to give it three bits of information: the name and value of the cookie and the number of days it is to remain active. In this case the name-value pair should become ppkcookie=testcookie and it should be active for 7 days.createCookie('ppkcookie','testcookie',7)

If you set the number of days to 0 the cookie is trashed when the user closes the browser. If you set the days to a negative number the cookie is trashed immediately.
The function receives the arguments and starts doing its job.function createCookie(name,value,days) {
First of all see if there is a days value. If there isn't we don't need to do the time calculation. if (days) {
If there is, create a new Date object containing the current date. var date = new Date();
Now get the current Time (in milliseconds) and add the required number of days (in milliseconds). Set the Time of the date to this new value, so that it now contains the date in milliseconds that the cookie should expire. date.setTime(date.getTime()+(days*24*60*60*1000));
Set the variable expires to this date in the UTC/GMT format required by cookies. var expires = "; expires="+date.toGMTString();
}
If 0 is passed to the function, expires is not set and the cookie expires when the user closes his browser.. else var expires = "";
Finally write the new cookie into document.cookie in the correct syntax. document.cookie = name+"="+value+expires+"; path=/";
}
Cookie created.
readCookie
To read out a cookie, call this function and pass the name of the cookie. Put the name in a variable. First check if this variable has a value (if the cookie does not exist the variable becomes null, which might upset the rest of your function), then do whatever is necessary.var x = readCookie('ppkcookie1')
if (x) {
[do something with x]
}
The function receives the argument and starts.function readCookie(name) {
We're going to search for the name of the cookie, followed by an =. So create this new string and put it in nameEQ: var nameEQ = name + "=";
Then split document.cookie on semicolons. ca becomes an array containing all cookies that are set for this domain and path. var ca = document.cookie.split(';');
Then we go through the array (so through all cookies): for(var i=0;i < ca.length;i++) {
Set c to the cookie to be checked. var c = ca[i];
If the first character is a space, remove it by using the substring() method. Continue doing this until the first character is not a space. while (c.charAt(0)==' ') c = c.substring(1,c.length);
Now string c begins with the name of the current cookie. If this is the name of the desired cookie if (c.indexOf(nameEQ) == 0)
we've found what we were looking for. We now only need to return the value of the cookie, which is the part of c that comes after nameEQ. By returning this value we also end the function: mission accomplished. if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
If, after having gone through all cookies, we haven't found the name we're looking for, the cookie is not present. We return null. return null;
}
Cookie read.
eraseCookie

Erasing is extremely simple.

eraseCookie('ppkcookie')


Pass the name of the cookie to be erased and call createCookie() to set the cookie with an expiry date of one day ago.

function eraseCookie(name) {
createCookie(name,"",-1);
}


The browser, seeing that the expiry date has passed, immediately removes the cookie.

Monday, January 5, 2009

ICU DateFormat - Year Representation

The format character 'Y' (upper case) is intended to be used in conjunction with ISO 8601 "week of year" notation whereas the format character 'y' (lower case) represents the actual year.

Example:
December 31, 2008 formatted with YYYY/MM/dd yields 2009/12/31
December 31, 2008 formatted with yyyy/MM/dd yields 2008/12/31

ICU - International Components for Unicode

What is ICU?

ICU stands for International Components for Unicode.

ICU is a cross-platform Unicode based globalization library. It includes support for locale-sensitive string comparison, date/time/number/currency/message formatting, text boundary detection, character set conversion and so on.

History

ICU was originally developed by the Taligent company. The Taligent team later became the Unicode group at the IBM® Globalization Center of Competency in Cupertino.

Developing globalized software is a continuous balancing act as software developers and project managers inadvertently underestimate the level of effort and detail required to create foreign-language software releases.In general, the standard process for creating globalized software includes "internationalization," which covers generic coding and design issues, and "localization," which involves translating and customizing a product for a specific market.

ICU Services provides standard platform-independent libraries to resolve this issue.

The ICU services support all major locales with language and sub-language pairs.

Services of ICU

ICU enables you to write language-independent C and C++ code that is used on separate, localized resources to get language-specific results. ICU supports many features, including language-sensitive text, dates, time, numbers, currency, message sorting, and searching. ICU provides language-specific results for a broad range of languages.

The set of services provided by ICU includes:

Strings, Properties and CharacterIterator
Conversion Basics
Locale and Resource Management Support
Date and Time Support
Format and Parse
Formatting Numbers
Transformations
Searching and Sorting
Text Analysis
Text Layout
Search String


ICU and Java

Java™ classes developed at Taligent were incorporated into the Java Development Kit (JDK) 1.1 developed by Sun® Microsystems. The classes were then ported to C++ and later some classes were also ported to C. The classes provide internationalization utilities for writing global applications in C, C++, or Java programming languages.

ICU for Java (ICU4J) includes enhanced versions of some of these classes, plus additional classes that complement the classes in the JDK. C and C++ versions of the same international functionality are available in ICU for C (ICU4C). The APIs differ slightly due to language differences and new functionality.

For example, ICU4C includes a character converter API.ICU4J and ICU4C keep the same development goals. They both track additions to the Java internationalization APIs and implement the latest released Unicode standard. They also maintain a single, portable source code base.

Reference

http://icu-project.org/

Wednesday, September 17, 2008

Oracle - Print Column values in Rows

Many times, we wonder how to print all the column values of a single record in row form which will be most widely used for analysis or studies

Here is an utility PL/SQL block which can print all column valus in a rows in tab limitied form (can be easily converted to Spreadsheets)


/**
* Author : Nambi Adhimoolam
* Date : 9/17/2008
* Revision : 1.0
*/

DECLARE
CURSOR c1 (v_table_name VARCHAR2)
IS
SELECT column_name
FROM all_tab_cols
WHERE table_name = v_table_name;

l_sql VARCHAR2 (100);
l_val VARCHAR2 (32000);
BEGIN
FOR k IN c1 ('MY_TABLE')
LOOP
l_sql :=
'SELECT ''''||'|| k.column_name
||' FROM MY_TABLE WHERE rownum < 2';

EXECUTE IMMEDIATE l_sql INTO l_val;

DBMS_OUTPUT.put_line (k.column_name||chr(9)||l_val);
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (SQLERRM || SQLCODE);
END;

Wednesday, September 10, 2008

Disable Substitution variables in SQL* Plus

For example, if we need to execute a following sql, in SQL*Plus


INSERT INTO USER(ID,NAME) VALUES(12,'ABC & CO');


While executing this, SQL*Plus will promt the user to input value 'CO' as its prefixed with subsititution character &. However in this scenarios, its should not act as substitution variable but rather &hersand.

To overcome this issues, we can disable the subsititution variabels with


SET DEFINE OFF


For selective disabling and other options, refer
http://www.orafaq.com/wiki/SQL*Plus_FAQ