scientists set sequence for chromosome linked to early-stage low iq
( afp report from paris , january 2 ) a group of international scientists said that they had set the sequence for human being's chromosome 14 , which is linked to many diseases including the early-stage alzheimer people in their 30s may have .
this is so far the fourth chromosome to be fully sequenced , which is made up of over 87 million dna .
the study on the british science weekly shows that chromosome 14 comprises of 1,050 genes and gene segments .
the aim of gene scientists is to offer diagnostic tools to discover flawed genes that lead to diseases and finally provide treatments that can prevent the genes from malfunctioning .
scientists led by french gene research center , genoscope , said that chromosome 14 has two groups of gene linked to immune system and over 60 kinds of disease gene .
chromosome 14 has been identified in earlier researches on many diseases , which include children's spastic paraplegia , missing teeth , several kinds of sight and hearing damages and the early-stage alzheimer .
there are about 200,000 people with alzheimer in the early state in the united states , accounting for 5 % of all the alzheimer patients in the country .
human beings have 23 pairs of chromosomes .
over the past three years , three pairs of chromosomes have been sequenced including the 20th , 21st and 22nd .
australia reopens embassy in manila
( afp report from manila , january 2 ) australia reopened its embassy in the philippines today . seven weeks ago , the embassy was shut down due to so-called confirmed terrorist attack threats .
the philippine foreign ministry said in a statement that australian ambassador to manila pearce called philippine foreign minister ople to announce the resumption of all embassy operations .
canada and the european union along with australia shut down their embassies on november 28 and reopened them earlier this week .
ople said that all the three ambassadors expressed their satisfaction with the strengthened measures taken by the philippine government .
the closing of the embassies had angered the philippine government , which said that the so-called threats were exaggerated and the closing had tarnished philippine's image .
manila had sacked a police intelligence officer because he disclosed the unconfirmed information about the terrorist threats to the australian and canadian embassies .
the european union's office and the australian embassy are both located in the same building .
around the anniversary of the 9.11 terrorist attacks in the us , western diplomatic missions in southeast asian nations closed due to threats from osama bin laden's al-qaeda network and its local alliances .
australian foreign minister says north korea will not get more aid for disgusting acts
( afp report from sydney , january 2 ) australia has called for international concerted efforts to convince north korea that the defiance of the treaty banning nuclear proliferation or other " disgusting acts " will make it impossible to obtain more aid or other compromises .
australian foreign minister downer said today that pyongyang decided to renew a controversial nuclear facility and expel un monitoring personnel , which was obviously aimed at forcing the international community to make compromises in aid and trade .
australia is one of a few of countries that have diplomatic relations with north korea .
" we think what north korea wants to do is to violate the framework of the 1994 agreement in an attempt to gain compromises , aid and trade from the world's other countries including the united states , " said downer .
talking in an interview by australian broadcasting corporation , downer said : " our point of view presented to north korea , which is also quite important , is that disgusting acts will not win rewards . "
" the expulsion of un monitoring personnel and the renewal of nuclear facilities in yongbyon , all these acts will prevent international aid , " downer pointed out .
" it will result in negative effects and we hope that these diplomatic measures will be effective . "
" on the other hand , if our reaction is excessive , we will be trapped by north korea .
we don't want to do this . "
downer said that australia is closely cooperating with the us and other alliances to force north korea to give up its recent steps to resume an already frozen nuclear program .
" what we want to do is to ensure that the international community will take joint measures and we don't expect special steps that lack coordination , " said downer .
bush defends his economic promotion plan
( afp report from washington d . c . , january 6 ) us president bush has vowed that his upcoming economic promotion plan will be in the interests of " the ordinary people , " not just for the rich , who are generally expected to obtain the most benefits from the plan that urges a dramatic cut in tax .
bush told reporters expecting him to unveil the plan in chicago : " tomorrow you will hear me say that the us economy is one of the strongest ones in the world .
however , we believe that the us economy can still be more stronger than now . "
president bush is expected to unveil a 10 - year and $ 600 - billion economic promotion plan . half of the money will be used to absorb the abolished stock profit tax of shareholders . he urges the speeding up of tax-rate cuts approved by us congressmen .
whether the plan will be smoothly pushed is seen as a prelude war of the 2004 presidential election . the democrats accused bush's plan as perfecting the perfection , instead of the democrats' plan of providing timely help .
the eight-point proposal raised by the democrats focuses on a $ 136 - billion reward measure to promote consumer spending , with a total of $ 100 billion spent within 10 years .
speaking at a joint press conference with other opposition lawmakers , house democrats' leader pelosi said : " this is a fair , fast effective and accounting-healthy plan . "
bush led the white house to refute the accusation that the plan is only in the interest of the rich people . bush said that his upcoming economic plan focused on " improving economic vitality and growth " .
bush said : " the plan will offer preferential tax-cut to the ordinary people .
the plan holds that people with surplus money are likely to spend it and thus it will create more job opportunities . "
the united states willing to talk to north korea but refuses to pay again
( afp report from washington d . c . , january 7 ) the united states said today that it was willing to talk to one of the hostile " evil axis " , north korea , but would not offer new rewards to the financially difficult communist country in an effort to spur it to revoke its nuclear program .
the us bush administration is facing two crisis involving iraq and north korea . officials from the bush administration and senior diplomats from japan as well as south korea said in a statement after talks that it meant that us policy toward pyongyang had " stepped forward " .
the statement said : " the us delegation says it is willing to hold talks with north korea on how it should abide by international obligations .
however , the us delegation stressed that the united states will not offer any rewards in return for north korea's fulfilling current obligations . "
with excessive attention to their diplomatic wordings , us officials held that although they were willing to hold talks , they would not consider carrying out negotiation procedures before north korea abides by various kinds of agreements that ban nuclear weapons .
state department spokesman boucher said : " we are not willing to pay a price for our earlier agreements once again . "
earlier , the bush administration said that before north korea gives up its nuclear program based on enriched uranium and plutonium , the united states refuses to talk to the stalinist country .
former aol real-estate chief to plead guilty to fraud charge
( afp report from los angeles ) prosecutors said that a former chief of aol's homestore had agreed to plead guilty to the fraud charge and to settle the lawsuit resulted from inside trading scandals .
federal assistant prosecutor werner said that homestore's former veteran manager of mergers and acquisitions kalina had agreed to plead guilty to a securities fraud charge linked to inside trading .
another prosecutor fox said that kalina also agreed to pay 70,000 us dollars to settle a civil complaint raised by us securities exchange .
werner said that the maximum prison term for securities fraud was 10 years but according to pleading agreement , the prison term was expected to be " dramatically shortened " .
according to prosecutors and investigators , in the securities fraud schemes involving kalina , the homestore's chief misled investors with inflated 2001 earnings report .
fox said that after kalina learnt about the fraudulent stock prices , he sold his homestore's shares to make a profit and " the wall street did not notice that homestore's key earning part was fraudulent . "
homestore's former vice president desimone on charges similar to inside trading has already pleaded guilty . the court is expected to give the verdict on april 21 .
homestore's former chief operating officer giesecke and former chief financial officer joseph shew have already pleaded guilty to the securities fraud charges .
prosecutors said that giesecke and joseph shew as well as other company chiefs were suspected of falsifying homestore's accounts and inflating the earnings .
big snow hits europe for days , causing several deaths and blocking traffic
( afp report from vienna , january 8 ) days of big snow , low temperature in siberia and strong winds in various parts of europe have caused several deaths while blocking road , railway , air and sea traffic .
temperatures in the russian capital of moscow last night fell to a degree that even local people felt chilly , causing six people dead and bringing the number of people dying from the cold this year to 239 , most of whom were vagrants and the old including many drunks .
three people died last night in lithuania while many people had to have their legs and fingers amputated for frostbites .
in the country's southern warner region temperatures hit a new low in 16 years , falling to -32.6 degrees .
in slovakia , three illegal indian immigrants also died from the cold and fatigue on monday with the local temperature falling to -20 degrees .
meanwhile , civilian authorities in and out of the european continent all said that the snow had blocked road traffic , delaying railway and paralyzing airports .
traffic in some regions of britain was paralyzed after the freezing of railways and road traffic accidents . big snow has hit the eastern part and the snow is now moving to the west .
in the republic of czech that saw severe flood last summer , the temperature has fallen to -18 degrees in its border region with slovakia .
worldwatch institute hails environmental revolution
( afp report from washington d . c . , january 9 ) in its annual report " the world's current situation " , environmental research organization worldwatch institute hails the " environmental revolution " in an unusual approach , pointing out that many countries are now successfully preventing and solving environmental , health and social problems .
worldwatch institute chief flavin said on january 9 : " it is no longer a daydream to establish a world that meets our needs while enables the next generation to enjoy a healthy society . "
the world current situation points out that one of the encouraging successes is that the use of recyclable resources , for example the use of solar energy and windmills , is getting increasingly popular in germany , japan and spain .
talking about the success of popularizing recyclable resources , flavin said : " we are entering a new era . "
the above-mentioned report says that in 1990s the use of freon that is mainly blamed for destroying the ozonosphere decreased by 81 % .
in addition , the world health organization's anti-polio program has reduced polio cases in the world to 480 in 2001 from 350,000 in 1988 .
the washington-based environmental research organization also hails local environmental protection achievement , for example , vehicles' recycling rate reaching 86 % in holland ; the comprehensive ban of aluminum cans to use recyclable bottles in denmark ; brazil's use of recyclable resources starting in 2001 .
the organization's report says that previous achievement brings hope to eliminating severe threats to the world , including malaria that claims 7,000 people's lives everyday and the pollution of air , food and water that kills 5,500 children everyday .
aol time warner chairman case to resign in may
( afp report from washington d . c . , january 12 ) chairman of american online time warner case announced tonight that he would resign in may , saying that the move " is in the best interests of the company " .
explaining his decision , he said that he had decided to take steps to prevent criticism from shareholders and " the blocking of our team-work cooperation ability and to focus on our business completely . "
case , who supervised the merger of aol and time warner approved by the us federal commission in january 2001 , will still be a member of aol and time warner's board of directors .
the merger was worth $ 155 billion when announced in january 2000 , which was approved by the decision-makers in europe later in the year .
case said in a statement : " as you have expected , personally speaking , the decision is really hard for me as i'd like to serve as the big company's chairman in years to come and as a maker of the merger , i always think that it is very important for me to stay as chairman and help things go to the right tracks . "
he stressed : " first of all , the company does not need instability in crucial moment and as many shareholders still focus disappointment on me following the merger i decide that we need to take actions to prevent the blocking of our team-work cooperation and focus on our business completely . "
aol , the online company under aol time warner , said that it expected its advertisements and business sales in 2002 would reduce to 1.5 - 1.6 billion us dollars from the 2.7 billion in 2001 .
while the total sales volume would reach 8.8 - 9 billion us dollars against 8.718 billion in the previous year .
the company predicted that there were almost no changes in aol's total sales volume between 2003 and 2002 while the advertisement and business sales will fall 40 % to 50 % .
north korea quits nuclear non-proliferation treaty to become world's enemy
( afp report from washington d . c . , january 15 ) the us-north korean showdown has developed from a minor issue of " evil axis " to an international crisis . dozens of years of world efforts on nuclear non-proliferation may fall short of success at last .
pyongyang announced to quit the nuclear non-proliferation treaty on 10th this month , confronting itself with washington .
analysts said that now the world's efforts to prevent proliferation of nuclear weapons were likely to fail . the treaty was already severely damaged when non-signatories , india and pakistan , entered the nuclear club in 1998 .
after pyongyang took the above-mentioned action , all the five permanent members of the un security council conducted preventive diplomatic steps to deal with the crisis .
russia said that it would send a special envoy to pyongyang , suggesting ending the deadlock but china proposed to host the us-north korean talks .
meanwhile , britain and france discussed the crisis in london .
the international atomic energy agency warned that if north korea refused to give up the nuclear program , it would ask the security council to take actions .
talking about russia and china's actions , many us observers thought that the talks might force moscow and beijing to decide whether they would use their vetoes concerning north korea .
other nations that may have nuclear capability , for example iran and libya , are sure to pay close attention to the development of the north korean crisis .
they will notice that north korea quitted the nuclear non-proliferation treaty without being punished , or obtaining a large sum of money from the united states in return for an end to the development of nuclear weapons .
former state department arms control official enhon said : " if north korea is considered to have the ability to quit the nuclear non-proliferation treaty , they will think that they can take the same actions without paying any cost . "
