session.name string
session.name specifies the name of the session which is used as cookie name. It should only contain alphanumeric characters. Defaults to PHPSESSID. See also session_name().
session.auto_start boolean
session.auto_start specifies whether the session module starts a session automatically on request startup. Defaults to 0 (disabled).
session.serialize_handler string
session.serialize_handler defines the name of the handler which is used to serialize/deserialize data. Currently, a PHP internal format (name php) and WDDX is supported (name wddx). WDDX is only available, if PHP is compiled with WDDX support. Defaults to php.
session.gc_probability integer
session.gc_probability specifies the probability that the gc (garbage collection) routine is started on each request in percent. Defaults to 1.
session.gc_maxlifetime integer
session.gc_maxlifetime specifies the number of seconds after which data will be seen as 'garbage' and cleaned up.
Note: If you are using the default file-based session handler, your filesystem must keep track of access times (atime). Windows FAT does not so you will have to come up with another way to handle garbage collecting your session if you are stuck with a FAT filesystem or any other fs where atime tracking is not available.
session.referer_check string
session.referer_check contains the substring you want to check each HTTP Referer for. If the Referer was sent by the client and the substring was not found, the embedded session id will be marked as invalid. Defaults to the empty string.
session.entropy_file string
session.entropy_file gives a path to an external resource (file) which will be used as an additional entropy source in the session id creation process. Examples are /dev/random or /dev/urandom which are available on many Unix systems.
session.entropy_length integer
session.entropy_length specifies the number of bytes which will be read from the file specified above. Defaults to 0 (disabled).
session.use_cookies boolean
session.use_cookies specifies whether the module will use cookies to store the session id on the client side. Defaults to 1 (enabled).
session.use_only_cookies boolean
session.use_only_cookies specifies whether the module will only use cookies to store the session id on the client side. Defaults to 0 (disabled, for backward compatibility). Enabling this setting prevents attacks involved passing session ids in URLs. This setting was added in PHP 4.3.0.
session.cookie_lifetime integer
session.cookie_lifetime specifies the lifetime of the cookie in seconds which is sent to the browser. The value 0 means "until the browser is closed." Defaults to 0.See also session_get_cookie_params() and session_set_cookie_params().
session.cookie_path string
session.cookie_path specifies path to set in session_cookie. Defaults to /.See also session_get_cookie_params() and session_set_cookie_params().
session.cookie_domain string
session.cookie_domain specifies the domain to set in session_cookie. Default is none at all. See also session_get_cookie_params() and session_set_cookie_params().
session.cookie_secure boolean
session.cookie_secure specifies whether cookies should only be sent over secure connections. Defaults to off. This setting was added in PHP 4.0.4. See also session_get_cookie_params() and session_set_cookie_params().
session.cache_limiter string
session.cache_limiter specifies cache control method to use for session pages (none/nocache/private/private_no_expire/public). Defaults to nocache. See also session_cache_limiter().
session.cache_expire integer
session.cache_expire specifies time-to-live for cached session pages in minutes, this has no effect for nocache limiter. Defaults to 180. See also session_cache_expire().
session.use_trans_sid boolean
session.use_trans_sid whether transparent sid support is enabled or not. Defaults to 0 (disabled).
Thursday, February 12, 2009
Php Regular Expression
ereg ("abc", $string);
/* Returns true if"abc"
is found anywhere in $string. */
ereg ("^abc", $string);
/* Returns true if "abc";
is found at the beginning of $string. */
ereg ("abc$", $string);
/* Returns true if "abc"
is found at the end of $string. */
eregi ("(ozilla.[23]|MSIE.3)", $HTTP_USER_AGENT);
/* Returns true if client browser
is Netscape 2, 3 or MSIE 3. */
ereg ("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)", $string,$regs);
/* Places three space separated words
into $regs[1], $regs[2] and $regs[3]. */
$string = ereg_replace ("^", "
", $string);
/* Put a
tag at the beginning of $string. */
$string = ereg_replace ("$", "
", $string);
/* Put a
; tag at the end of $string. */
$string = ereg_replace ("\n", "", $string);
/* Get rid of any newline
characters in $string. */
/* Returns true if"abc"
is found anywhere in $string. */
ereg ("^abc", $string);
/* Returns true if "abc";
is found at the beginning of $string. */
ereg ("abc$", $string);
/* Returns true if "abc"
is found at the end of $string. */
eregi ("(ozilla.[23]|MSIE.3)", $HTTP_USER_AGENT);
/* Returns true if client browser
is Netscape 2, 3 or MSIE 3. */
ereg ("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)", $string,$regs);
/* Places three space separated words
into $regs[1], $regs[2] and $regs[3]. */
$string = ereg_replace ("^", "
", $string);
/* Put a
tag at the beginning of $string. */
$string = ereg_replace ("$", "
", $string);
/* Put a
; tag at the end of $string. */
$string = ereg_replace ("\n", "", $string);
/* Get rid of any newline
characters in $string. */
Circular Queue in C
#include
#include
#define n 5
struct cqueue{
int a[n],rear,front;
}*cq;
typedef struct cqueue cque;
int empty(cque *cq);
int full(cque *cq);
void insert(cque *cq,int);
void del(cque *cq);
void disp(cque *cq);
void main()
{
int ch,no;
clrscr();
cq->front=cq->rear=-1;
do
{
textattr(ch);
printf("\ncase 1:insert"
"\ncase 2:delete"
"\ncase 3:display"
"\ncase 4:empty"
"\ncase 5:full"
"\ncase 6:get_rear"
"\ncase 7:get_front"
"\ncase 8:exit");
cprintf("\nenter req case ");
scanf("%d",&ch);
switch(ch)
{
case 1:printf("\nenter no ");
scanf("%d",&no);
insert(cq,no);
break;
case 2:del(cq);
//printf("\ndeleted no is %d",no);
break;
case 3:disp(cq);
break;
case 4:no=empty(cq);
if(no==1)
printf("empty");
else
printf("not empty");
break;
case 5:if(cq->rear==n-1)
cq->rear=0;
else
cq->rear++;
no=full(cq);
if(no==1)
printf("full");
else
{
printf("not full");
if(cq->rear==0)
cq->rear=n-1;
else
cq->rear--;
}
break;
case 6:if(empty(cq))
printf("\nrear->-1");
else
printf("\nrear->%d value %d",cq->rear,cq->a[cq->rear]);
break;
case 7:if(empty(cq))
printf("\nfront->-1");
else
printf("\nfront->%d value %d",cq->front,cq->a[cq->front]);
break;
case 8:printf("GOOD BYE!!");
getch();
break;
default:printf("wrong case");
}
getch();
}while(ch!=8);
}
int empty(cque *cq)
{
if(cq->front==-1)
return(1);
else
return(0);
}
int full(cque *cq)
{
if(cq->rear==cq->front)
{
if(cq->rear==0)
cq->rear=n-1;
else
cq->rear--;
return(1);
}
else
return(0);
}
void insert(cque *cq,int no)
{
if(cq->rear==n-1)
cq->rear=0;
else
cq->rear++;
if(full(cq))
printf("circular queue full");
else
{
cq->a[cq->rear]=no;
if(cq->front==-1)
cq->front++;
}
}
void disp(cque *cq)
{
int i=cq->front;
if(empty(cq))
printf("\nempty");
else
{
while(i!=cq->rear)
{
printf("%d \t",cq->a[i]);
if(i==n-1)
i=0;
else
i++;
}
printf("%d",cq->a[cq->rear]);
}
}
void del(cque *cq)
{
int temp;
if(empty(cq))
{
printf("\ncircular queue empty");
}
else
{
temp=cq->a[cq->front];
if(cq->front==cq->rear)
cq->front=cq->rear=-1;
else
{
if(cq->front==n-1)
cq->front=0;
else
cq->front++;
}
printf("\ndeleted no is %d",temp);
}
}
#include
#define n 5
struct cqueue{
int a[n],rear,front;
}*cq;
typedef struct cqueue cque;
int empty(cque *cq);
int full(cque *cq);
void insert(cque *cq,int);
void del(cque *cq);
void disp(cque *cq);
void main()
{
int ch,no;
clrscr();
cq->front=cq->rear=-1;
do
{
textattr(ch);
printf("\ncase 1:insert"
"\ncase 2:delete"
"\ncase 3:display"
"\ncase 4:empty"
"\ncase 5:full"
"\ncase 6:get_rear"
"\ncase 7:get_front"
"\ncase 8:exit");
cprintf("\nenter req case ");
scanf("%d",&ch);
switch(ch)
{
case 1:printf("\nenter no ");
scanf("%d",&no);
insert(cq,no);
break;
case 2:del(cq);
//printf("\ndeleted no is %d",no);
break;
case 3:disp(cq);
break;
case 4:no=empty(cq);
if(no==1)
printf("empty");
else
printf("not empty");
break;
case 5:if(cq->rear==n-1)
cq->rear=0;
else
cq->rear++;
no=full(cq);
if(no==1)
printf("full");
else
{
printf("not full");
if(cq->rear==0)
cq->rear=n-1;
else
cq->rear--;
}
break;
case 6:if(empty(cq))
printf("\nrear->-1");
else
printf("\nrear->%d value %d",cq->rear,cq->a[cq->rear]);
break;
case 7:if(empty(cq))
printf("\nfront->-1");
else
printf("\nfront->%d value %d",cq->front,cq->a[cq->front]);
break;
case 8:printf("GOOD BYE!!");
getch();
break;
default:printf("wrong case");
}
getch();
}while(ch!=8);
}
int empty(cque *cq)
{
if(cq->front==-1)
return(1);
else
return(0);
}
int full(cque *cq)
{
if(cq->rear==cq->front)
{
if(cq->rear==0)
cq->rear=n-1;
else
cq->rear--;
return(1);
}
else
return(0);
}
void insert(cque *cq,int no)
{
if(cq->rear==n-1)
cq->rear=0;
else
cq->rear++;
if(full(cq))
printf("circular queue full");
else
{
cq->a[cq->rear]=no;
if(cq->front==-1)
cq->front++;
}
}
void disp(cque *cq)
{
int i=cq->front;
if(empty(cq))
printf("\nempty");
else
{
while(i!=cq->rear)
{
printf("%d \t",cq->a[i]);
if(i==n-1)
i=0;
else
i++;
}
printf("%d",cq->a[cq->rear]);
}
}
void del(cque *cq)
{
int temp;
if(empty(cq))
{
printf("\ncircular queue empty");
}
else
{
temp=cq->a[cq->front];
if(cq->front==cq->rear)
cq->front=cq->rear=-1;
else
{
if(cq->front==n-1)
cq->front=0;
else
cq->front++;
}
printf("\ndeleted no is %d",temp);
}
}
Chatting Application in C++
Here it is basic chatting application in c/c++ that will give you idea about serial communication in c/c++
#include
#include
#include
void send()
{
char c[100];
int port=0x3f8,i;
printf("\nEnter String u want to send: ");
flushall();
gets(c);
for(i=0;c[i];i++)
{
outpw(port,c[i]);
}
c[i+1]='*';
outpw(port, c[i+1]);
printf("String is sent.");
getch();
}
void recieve()
{
int port=0x3f8,i=-1;
char c[100];
clrscr();
getch();
do{
i++;
c[i]=inpw(port);
if(c[i]=='*')
c[i]=NULL;
}while(c[i]);
puts(c);
getch();
}
void main()
{
int ch;
clrscr();
do{
printf("\n1.Send\n2.Receive\n3.Exit\n\n\tEnter your choice: ");
scanf("%d",&ch);
switch(ch){
case 1: send();
break;
case 2: recieve();
break;
case 3: break;
default: printf("Wrong choice!!");
break;
}
}while(ch!=3);
}
#include
#include
#include
void send()
{
char c[100];
int port=0x3f8,i;
printf("\nEnter String u want to send: ");
flushall();
gets(c);
for(i=0;c[i];i++)
{
outpw(port,c[i]);
}
c[i+1]='*';
outpw(port, c[i+1]);
printf("String is sent.");
getch();
}
void recieve()
{
int port=0x3f8,i=-1;
char c[100];
clrscr();
getch();
do{
i++;
c[i]=inpw(port);
if(c[i]=='*')
c[i]=NULL;
}while(c[i]);
puts(c);
getch();
}
void main()
{
int ch;
clrscr();
do{
printf("\n1.Send\n2.Receive\n3.Exit\n\n\tEnter your choice: ");
scanf("%d",&ch);
switch(ch){
case 1: send();
break;
case 2: recieve();
break;
case 3: break;
default: printf("Wrong choice!!");
break;
}
}while(ch!=3);
}
Saturday, February 7, 2009
Email about Time Management By Narayan Murthy to Infosys Staff
It's half past 8 in the office but the lights are still on...
PCs still running, coffee machines still buzzing...
And who's at work? Most of them ??? Take a closer look...
All or most specimens are ??
Something male species of the human race...
Look closer... again all or most of them are bachelors...
And why are they sitting late? Working hard? No way!!!
Any guesses???
Let's ask one of them..
Here's what he says... "What's there 2 do after going home...Here we get to surf, AC, phone, food, coffee that is why I am working late...Importantly no bossssssss!! !!!!!!!!!"
This is the scene in most research centers and software companies and other off-shore offices.
Bachelors "Time-passing" during late hours in the office just bcoz they say they've nothing else to do...
Now what r the consequences. ..
"Working" (for the record only) late hours soon becomes part of the institute or company culture.
With bosses more than eager to provide support to those "working" late in the form of taxi vouchers, food vouchers and of course good feedback, (oh, he's a hard worker... goes home only to change..!!).
They aren't helping things too...
To hell with bosses who don't understand the difference between "sitting" late and "working" late!!!
Very soon, the boss start expecting all employees to put in extra working hours.
So, My dear Bachelors let me tell you, life changes when u get married and start having a family... office is no longer a priority, family is... and
That's when the problem starts... b'coz u start having commitments at home too.
For your boss, the earlier "hardworking" guy suddenly seems to become a "early leaver" even if u leave an hour after regular time.. after doing the same amount of work.
People leaving on time after doing their tasks for the day are labeled as work-shirkers. ..
Girls who thankfully always (its changing nowadays... though) leave on time are labeled as "not up to it". All the while, the bachelors pat their own backs and carry on "working" not realizing that they r spoiling the work culture at their own place and never realize that they wuld have to regret at one point of time.
*So what's the moral of the story?? *
* Very clear, LEAVE ON TIME!!!
* Never put in extra time " *unless really needed *"
* Don't stay back un-necessarily and spoil your company work culture which will in turn cause inconvenience to you and your colleagues.
There are hundred other things to do in the evening..
Learn music...
Learn a foreign language...
Try a sport... TT, cricket..... ....
Importantly Get a girl friend or boy friend, take him/her around town...
* And for heaven's sake net cafe rates have dropped to an all-time low (plus, no fire-walls) and try cooking for a change.
Take a tip from the Smirnoff ad: *"Life's calling, where are you??"*
Please pass on this message to all those colleagues And please do it before leaving time, don't stay back till midnight to forward this!!!
IT'S A TYPICAL INDIAN MENTALITY THAT WORKING FOR LONG HOURS MEANS VERY HARD WORKING & 100% COMMITMENT ETC.
PEOPLE WHO REGULARLY SIT LATE IN THE OFFICE DONT KNOW TO MANAGE THEIR TIME. SIMPLE!
Regards,
NARAYAN MURTHY.
PCs still running, coffee machines still buzzing...
And who's at work? Most of them ??? Take a closer look...
All or most specimens are ??
Something male species of the human race...
Look closer... again all or most of them are bachelors...
And why are they sitting late? Working hard? No way!!!
Any guesses???
Let's ask one of them..
Here's what he says... "What's there 2 do after going home...Here we get to surf, AC, phone, food, coffee that is why I am working late...Importantly no bossssssss!! !!!!!!!!!"
This is the scene in most research centers and software companies and other off-shore offices.
Bachelors "Time-passing" during late hours in the office just bcoz they say they've nothing else to do...
Now what r the consequences. ..
"Working" (for the record only) late hours soon becomes part of the institute or company culture.
With bosses more than eager to provide support to those "working" late in the form of taxi vouchers, food vouchers and of course good feedback, (oh, he's a hard worker... goes home only to change..!!).
They aren't helping things too...
To hell with bosses who don't understand the difference between "sitting" late and "working" late!!!
Very soon, the boss start expecting all employees to put in extra working hours.
So, My dear Bachelors let me tell you, life changes when u get married and start having a family... office is no longer a priority, family is... and
That's when the problem starts... b'coz u start having commitments at home too.
For your boss, the earlier "hardworking" guy suddenly seems to become a "early leaver" even if u leave an hour after regular time.. after doing the same amount of work.
People leaving on time after doing their tasks for the day are labeled as work-shirkers. ..
Girls who thankfully always (its changing nowadays... though) leave on time are labeled as "not up to it". All the while, the bachelors pat their own backs and carry on "working" not realizing that they r spoiling the work culture at their own place and never realize that they wuld have to regret at one point of time.
*So what's the moral of the story?? *
* Very clear, LEAVE ON TIME!!!
* Never put in extra time " *unless really needed *"
* Don't stay back un-necessarily and spoil your company work culture which will in turn cause inconvenience to you and your colleagues.
There are hundred other things to do in the evening..
Learn music...
Learn a foreign language...
Try a sport... TT, cricket..... ....
Importantly Get a girl friend or boy friend, take him/her around town...
* And for heaven's sake net cafe rates have dropped to an all-time low (plus, no fire-walls) and try cooking for a change.
Take a tip from the Smirnoff ad: *"Life's calling, where are you??"*
Please pass on this message to all those colleagues And please do it before leaving time, don't stay back till midnight to forward this!!!
IT'S A TYPICAL INDIAN MENTALITY THAT WORKING FOR LONG HOURS MEANS VERY HARD WORKING & 100% COMMITMENT ETC.
PEOPLE WHO REGULARLY SIT LATE IN THE OFFICE DONT KNOW TO MANAGE THEIR TIME. SIMPLE!
Regards,
NARAYAN MURTHY.
Tuesday, February 3, 2009
What is trigger element in Ajax?
The element can contain any number each of two child nodes:
and . They both accept two
attributes, ControlID and EventName, and can specify any Control within the current unit of
encapsulation (for instance, if your UpdatePanel control resides within a Web User Control, you
should not attempt to reference a Control on the Page on which the User Control will reside).
The element is particularly useful in that it can target any event
from a Control that exists as a child of any UpdatePanel control in the unit of encapsulation, not
just the UpdatePanel under which this trigger is a child. Thus, any control can be made to
trigger a partial page update.
Similarly, the element can be used to trigger a partial page render, but
one that requires a full round-trip to the server. This trigger element can also be used to force a
full page render when a control would otherwise normally trigger a partial page render (for
instance, when a Button control exists in the element of an
UpdatePanel control). Again, the PostBackTrigger element can specify any control that is a child
of any UpdatePanel control in the current unit of encapsulation.
attributes, ControlID and EventName, and can specify any Control within the current unit of
encapsulation (for instance, if your UpdatePanel control resides within a Web User Control, you
should not attempt to reference a Control on the Page on which the User Control will reside).
The
from a Control that exists as a child of any UpdatePanel control in the unit of encapsulation, not
just the UpdatePanel under which this trigger is a child. Thus, any control can be made to
trigger a partial page update.
Similarly, the
one that requires a full round-trip to the server. This trigger element can also be used to force a
full page render when a control would otherwise normally trigger a partial page render (for
instance, when a Button control exists in the
UpdatePanel control). Again, the PostBackTrigger element can specify any control that is a child
of any UpdatePanel control in the current unit of encapsulation.
IBM To build Strongest Supercomputer for USA
The U.S. government has hired IBM to build a supercomputer with more power than all the supercomputers on the Top500 supercomputer list combined.
It's an ambitious claim by IBM in a business where jumbo-size claims are the norm. The planned Sequoia system, capable of 20 petaflops, will be used by the U.S. Department of Energy in its nuclear stockpile research. The fastest systems today can only reach 1 petaflop, a remarkable achievement in its own right that was met only last year.
It "is the biggest leap of computing capability ever delivered to the lab," said Mark Seager, assistant department head for advanced technology at the Lawrence Livermore National Laboratory in Livermore, Calif., where the system will be housed. It's expected to be up and running in 2012.
IBM is actually building two supercomputers under this contract. The first one, to be delivered by midyear, is called Dawn and will operate at around 500 teraflops. Researchers will use Dawn to help prepare for the larger system.
Sequoia will use approximately 1.6 million processing cores, all IBM Power chips, running Linux, which dominates high-performance computing at this scale. IBM is still developing a 45-nanometer chip for the system and may produce something with eight or 16 cores -- or more -- for it. Although the final chip configuration has yet to be determined, the system will have 1.6TB of memory and be housed in 96 "refrigerator-size" racks.
The cost of the system wasn't disclosed.
The supercomputer is also helping to drive a massive power upgrade at Lawrence Livermore, which is increasing the amount of electricity available for all its computing systems from 12.5 megawatts to 30 megawatts. To achieve the upgrade, it will run more power lines to its facility. Sequoia alone is expected to use about 6 megawatts, according to Seager.
The world's first computer to break the teraflop barrier was built at Sandia National Laboratories in 1996. A teraflop equals a trillion floating points a second; a petaflop is 1,000 trillion (one quadrillion) sustained floating-point operations per second.
It takes government funding to build systems of this scale and size, but that also means that the U.S. is paying for much of the problem-solving it takes to scale across more than a million cores. "This is what's so good about it," said Herb Schultz, manager of deep computing at IBM. "They [the national lab] end up proving that you can get codes to scale that high."
In effect, by solving those problems, the national lab's work will pave the way for broader adoption of massive systems that could improve weather research, forecasts, tornado tracking, and work on a variety of other research problems. Large systems such as Sequoia help researchers reduce uncertainty and improve precision in simulations that can, for instance, predict tornado paths. The more compute power available, the more fine tuned and accurate the simulation.
The major problem in running a system of this scale is "the applications -- porting the applications and scaling them up is a critical problem we are facing," said Seager.
There are two petaflop systems in the U.S., IBM's Roadrunner at Los Alamos National Laboratory, which passed the petaflop barrier last May, and Cray Inc.'s XT Jaguar at the Oak Ridge National Laboratory.
It's an ambitious claim by IBM in a business where jumbo-size claims are the norm. The planned Sequoia system, capable of 20 petaflops, will be used by the U.S. Department of Energy in its nuclear stockpile research. The fastest systems today can only reach 1 petaflop, a remarkable achievement in its own right that was met only last year.
It "is the biggest leap of computing capability ever delivered to the lab," said Mark Seager, assistant department head for advanced technology at the Lawrence Livermore National Laboratory in Livermore, Calif., where the system will be housed. It's expected to be up and running in 2012.
IBM is actually building two supercomputers under this contract. The first one, to be delivered by midyear, is called Dawn and will operate at around 500 teraflops. Researchers will use Dawn to help prepare for the larger system.
Sequoia will use approximately 1.6 million processing cores, all IBM Power chips, running Linux, which dominates high-performance computing at this scale. IBM is still developing a 45-nanometer chip for the system and may produce something with eight or 16 cores -- or more -- for it. Although the final chip configuration has yet to be determined, the system will have 1.6TB of memory and be housed in 96 "refrigerator-size" racks.
The cost of the system wasn't disclosed.
The supercomputer is also helping to drive a massive power upgrade at Lawrence Livermore, which is increasing the amount of electricity available for all its computing systems from 12.5 megawatts to 30 megawatts. To achieve the upgrade, it will run more power lines to its facility. Sequoia alone is expected to use about 6 megawatts, according to Seager.
The world's first computer to break the teraflop barrier was built at Sandia National Laboratories in 1996. A teraflop equals a trillion floating points a second; a petaflop is 1,000 trillion (one quadrillion) sustained floating-point operations per second.
It takes government funding to build systems of this scale and size, but that also means that the U.S. is paying for much of the problem-solving it takes to scale across more than a million cores. "This is what's so good about it," said Herb Schultz, manager of deep computing at IBM. "They [the national lab] end up proving that you can get codes to scale that high."
In effect, by solving those problems, the national lab's work will pave the way for broader adoption of massive systems that could improve weather research, forecasts, tornado tracking, and work on a variety of other research problems. Large systems such as Sequoia help researchers reduce uncertainty and improve precision in simulations that can, for instance, predict tornado paths. The more compute power available, the more fine tuned and accurate the simulation.
The major problem in running a system of this scale is "the applications -- porting the applications and scaling them up is a critical problem we are facing," said Seager.
There are two petaflop systems in the U.S., IBM's Roadrunner at Los Alamos National Laboratory, which passed the petaflop barrier last May, and Cray Inc.'s XT Jaguar at the Oak Ridge National Laboratory.
Subscribe to:
Posts (Atom)