2004年12月14日星期二

双雄会——观阿森纳Vs切尔西德比有感(@tom blog)

两个高手,一个一个近况颇佳,匹马领先群雄,一个重整旗鼓,正欲再霸江湖,这时,两位高手相遇了。
这就是周日阿森纳与切尔西北伦敦德比前的情况。在比赛前,双方情况迥然不同,切尔西兵强马壮,联赛领先,冠军杯轻松出线,也没有什么伤病禁赛之类的减员。 而阿森纳刚刚从黑色11月中挣扎出来,冠军杯经过最后一轮的苦战才获得出线。而主力阵容中,劳伦、维埃拉、永贝里因伤或禁赛缺席本场比赛,加上之前因伤休 战的吉尔博托和埃杜,此役中,阿森纳在两个中前场居然只能放上弗拉米尼和法布雷加斯两员小将,形式可谓不利阿。

时间过去已久,当时的情况忘得也差不多了,只记得亨利的进球,还有特里的进球,现在的切尔西,已经领先枪手10分之多,是否会有奇迹出现那?
----2005.01.26晚补


2004-12-14 18:16:20 Tue

【转】Oracle函数大全(@tom blog)

转自:http://blog.csdn.net/austinlei/archive/2004/11/08/172955.aspx

SQL中的单记录函数
1.ASCII
返回与指定的字符对应的十进制数;
SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual;

A A ZERO SPACE
--------- --------- --------- ---------
65 97 48 32


2.CHR
给出整数,返回对应的字符;
SQL> select chr(54740) zhao,chr(65) chr65 from dual;

ZH C
-- -
赵 A

3.CONCAT
连接两个字符串;
SQL> select concat('010-','88888888')||'转23' 高乾竞电话 from dual;

高乾竞电话
----------------
010-88888888转23

4.INITCAP
返回字符串并将字符串的第一个字母变为大写;
SQL> select initcap('smith') upp from dual;

UPP
-----
Smith


5.INSTR(C1,C2,I,J)
在一个字符串中搜索指定的字符,返回发现指定的字符的位置;
C1 被搜索的字符串
C2 希望搜索的字符串
I 搜索的开始位置,默认为1
J 出现的位置,默认为1
SQL> select instr('oracle traning','ra',1,2) instring from dual;

INSTRING
---------
9


6.LENGTH
返回字符串的长度;
SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst;

NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL))
------ ------------ ---------------- ------------ --------- --------------------
高乾竞 3 北京市海锭区 6 9999.99 7



7.LOWER
返回字符串,并将所有的字符小写
SQL> select lower('AaBbCcDd')AaBbCcDd from dual;

AABBCCDD
--------
aabbccdd


8.UPPER
返回字符串,并将所有的字符大写
SQL> select upper('AaBbCcDd') upper from dual;

UPPER
--------
AABBCCDD



9.RPAD和LPAD(粘贴字符)
RPAD 在列的右边粘贴字符
LPAD 在列的左边粘贴字符
SQL> select lpad(rpad('gao',10,'*'),17,'*')from dual;

LPAD(RPAD('GAO',1
-----------------
*******gao*******
不够字符则用*来填满


10.LTRIM和RTRIM
LTRIM 删除左边出现的字符串
RTRIM 删除右边出现的字符串
SQL> select ltrim(rtrim(' gao qian jing ',' '),' ') from dual;

LTRIM(RTRIM('
-------------
gao qian jing


11.SUBSTR(string,start,count)
取子字符串,从start开始,取count个
SQL> select substr('13088888888',3,8) from dual;

SUBSTR('
--------
08888888


12.REPLACE('string','s1','s2')
string 希望被替换的字符或变量
s1 被替换的字符串
s2 要替换的字符串
SQL> select replace('he love you','he','i') from dual;

REPLACE('H
----------
i love you


13.SOUNDEX
返回一个与给定的字符串读音相同的字符串
SQL> create table table1(xm varchar(8));
SQL> insert into table1 values('weather');
SQL> insert into table1 values('wether');
SQL> insert into table1 values('gao');

SQL> select xm from table1 where soundex(xm)=soundex('weather');

XM
--------
weather
wether


14.TRIM('s' from 'string')
LEADING 剪掉前面的字符
TRAILING 剪掉后面的字符
如果不指定,默认为空格符

15.ABS
返回指定值的绝对值
SQL> select abs(100),abs(-100) from dual;

ABS(100) ABS(-100)
--------- ---------
100 100


16.ACOS
给出反余弦的值
SQL> select acos(-1) from dual;

ACOS(-1)
---------
3.1415927


17.ASIN
给出反正弦的值
SQL> select asin(0.5) from dual;

ASIN(0.5)
---------
.52359878


18.ATAN
返回一个数字的反正切值
SQL> select atan(1) from dual;

ATAN(1)
---------
.78539816


19.CEIL
返回大于或等于给出数字的最小整数
SQL> select ceil(3.1415927) from dual;

CEIL(3.1415927)
---------------
4


20.COS
返回一个给定数字的余弦
SQL> select cos(-3.1415927) from dual;

COS(-3.1415927)
---------------
-1


21.COSH
返回一个数字反余弦值
SQL> select cosh(20) from dual;

COSH(20)
---------
242582598


22.EXP
返回一个数字e的n次方根
SQL> select exp(2),exp(1) from dual;

EXP(2) EXP(1)
--------- ---------
7.3890561 2.7182818


23.FLOOR
对给定的数字取整数
SQL> select floor(2345.67) from dual;

FLOOR(2345.67)
--------------
2345


24.LN
返回一个数字的对数值
SQL> select ln(1),ln(2),ln(2.7182818) from dual;

LN(1) LN(2) LN(2.7182818)
--------- --------- -------------
0 .69314718 .99999999


25.LOG(n1,n2)
返回一个以n1为底n2的对数
SQL> select log(2,1),log(2,4) from dual;

LOG(2,1) LOG(2,4)
--------- ---------
0 2


26.MOD(n1,n2)
返回一个n1除以n2的余数
SQL> select mod(10,3),mod(3,3),mod(2,3) from dual;

MOD(10,3) MOD(3,3) MOD(2,3)
--------- --------- ---------
1 0 2


27.POWER
返回n1的n2次方根
SQL> select power(2,10),power(3,3) from dual;

POWER(2,10) POWER(3,3)
----------- ----------
1024 27


28.ROUND和TRUNC
按照指定的精度进行舍入
SQL> select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual;

ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)
----------- ------------ ----------- ------------
56 -55 55 -55


29.SIGN
取数字n的符号,大于0返回1,小于0返回-1,等于0返回0
SQL> select sign(123),sign(-100),sign(0) from dual;

SIGN(123) SIGN(-100) SIGN(0)
--------- ---------- ---------
1 -1 0


30.SIN
返回一个数字的正弦值
SQL> select sin(1.57079) from dual;

SIN(1.57079)
------------
1


31.SIGH
返回双曲正弦的值
SQL> select sin(20),sinh(20) from dual;

SIN(20) SINH(20)
--------- ---------
.91294525 242582598


32.SQRT
返回数字n的根
SQL> select sqrt(64),sqrt(10) from dual;

SQRT(64) SQRT(10)
--------- ---------
8 3.1622777


33.TAN
返回数字的正切值
SQL> select tan(20),tan(10) from dual;

TAN(20) TAN(10)
--------- ---------
2.2371609 .64836083


34.TANH
返回数字n的双曲正切值
SQL> select tanh(20),tan(20) from dual;

TANH(20) TAN(20)
--------- ---------
1 2.2371609



35.TRUNC
按照指定的精度截取一个数
SQL> select trunc(124.1666,-2) trunc1,trunc(124.16666,2) from dual;

TRUNC1 TRUNC(124.16666,2)
--------- ------------------
100 124.16



36.ADD_MONTHS
增加或减去月份
SQL> select to_char(add_months(to_date('199912','yyyymm'),2),'yyyymm') from dual;

TO_CHA
------
200002
SQL> select to_char(add_months(to_date('199912','yyyymm'),-2),'yyyymm') from dual;

TO_CHA
------
199910


37.LAST_DAY
返回日期的最后一天
SQL> select to_char(sysdate,'yyyy.mm.dd'),to_char((sysdate)+1,'yyyy.mm.dd') from dual;

TO_CHAR(SY TO_CHAR((S
---------- ----------
2004.05.09 2004.05.10
SQL> select last_day(sysdate) from dual;

LAST_DAY(S
----------
31-5月 -04


38.MONTHS_BETWEEN(date2,date1)
给出date2-date1的月份
SQL> select months_between('19-12月-1999','19-3月-1999') mon_between from dual;

MON_BETWEEN
-----------
9
SQL>selectmonths_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.mm.dd')) mon_betw from dual;

MON_BETW
---------
-60


39.NEW_TIME(date,'this','that')
给出在this时区=other时区的日期和时间
SQL> select to_char(sysdate,'yyyy.mm.dd hh24:mi:ss') bj_time,to_char(new_time
2 (sysdate,'PDT','GMT'),'yyyy.mm.dd hh24:mi:ss') los_angles from dual;

BJ_TIME LOS_ANGLES
------------------- -------------------
2004.05.09 11:05:32 2004.05.09 18:05:32


40.NEXT_DAY(date,'day')
给出日期date和星期x之后计算下一个星期的日期
SQL> select next_day('18-5月-2001','星期五') next_day from dual;

NEXT_DAY
----------
25-5月 -01



41.SYSDATE
用来得到系统的当前日期
SQL> select to_char(sysdate,'dd-mm-yyyy day') from dual;

TO_CHAR(SYSDATE,'
-----------------
09-05-2004 星期日
trunc(date,fmt)按照给出的要求将日期截断,如果fmt='mi'表示保留分,截断秒
SQL> select to_char(trunc(sysdate,'hh'),'yyyy.mm.dd hh24:mi:ss') hh,
2 to_char(trunc(sysdate,'mi'),'yyyy.mm.dd hh24:mi:ss') hhmm from dual;

HH HHMM
------------------- -------------------
2004.05.09 11:00:00 2004.05.09 11:17:00



42.CHARTOROWID
将字符数据类型转换为ROWID类型
SQL> select rowid,rowidtochar(rowid),ename from scott.emp;

ROWID ROWIDTOCHAR(ROWID) ENAME
------------------ ------------------ ----------
AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH
AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN
AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD
AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES


43.CONVERT(c,dset,sset)
将源字符串 sset从一个语言字符集转换到另一个目的dset字符集
SQL> select convert('strutz','we8hp','f7dec') "conversion" from dual;

conver
------
strutz


44.HEXTORAW
将一个十六进制构成的字符串转换为二进制


45.RAWTOHEXT
将一个二进制构成的字符串转换为十六进制



46.ROWIDTOCHAR
将ROWID数据类型转换为字符类型



47.TO_CHAR(date,'format')
SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY
-------------------
2004/05/09 21:14:41



48.TO_DATE(string,'format')
将字符串转化为ORACLE中的一个日期


49.TO_MULTI_BYTE
将字符串中的单字节字符转化为多字节字符
SQL> select to_multi_byte('高') from dual;

TO
--



50.TO_NUMBER
将给出的字符转换为数字
SQL> select to_number('1999') year from dual;

YEAR
---------
1999


51.BFILENAME(dir,file)
指定一个外部二进制文件
SQL>insert into file_tb1 values(bfilename('lob_dir1','image1.gif'));


52.CONVERT('x','desc','source')
将x字段或变量的源source转换为desc
SQL> select sid,serial#,username,decode(command,
2 0,'none',
3 2,'insert',
4 3,
5 'select',
6 6,'update',
7 7,'delete',
8 8,'drop',
9 'other') cmd from v$session where type!='background';

SID SERIAL# USERNAME CMD
--------- --------- ------------------------------ ------
1 1 none
2 1 none
3 1 none
4 1 none
5 1 none
6 1 none
7 1275 none
8 1275 none
9 20 GAO select
10 40 GAO none


53.DUMP(s,fmt,start,length)
DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值
SQL> col global_name for a30
SQL> col dump_string for a50
SQL> set lin 200
SQL> select global_name,dump(global_name,1017,8,5) dump_string from global_name;

GLOBAL_NAME DUMP_STRING
------------------------------ --------------------------------------------------
ORACLE.WORLD Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D


54.EMPTY_BLOB()和EMPTY_CLOB()
这两个函数都是用来对大数据类型字段进行初始化操作的函数


55.GREATEST
返回一组表达式中的最大值,即比较字符的编码大小.
SQL> select greatest('AA','AB','AC') from dual;

GR
--
AC
SQL> select greatest('啊','安','天') from dual;

GR
--



56.LEAST
返回一组表达式中的最小值
SQL> select least('啊','安','天') from dual;

LE
--



57.UID
返回标识当前用户的唯一整数
SQL> show user
USER 为"GAO"
SQL> select username,user_id from dba_users where user_id=uid;

USERNAME USER_ID
------------------------------ ---------
GAO 25



58.USER
返回当前用户的名字
SQL> select user from dual;

USER
------------------------------
GAO


59.USEREVN
返回当前用户环境的信息,opt可以是:
ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE
ISDBA 查看当前用户是否是DBA如果是则返回true
SQL> select userenv('isdba') from dual;

USEREN
------
FALSE
SQL> select userenv('isdba') from dual;

USEREN
------
TRUE
SESSION
返回会话标志
SQL> select userenv('sessionid') from dual;

USERENV('SESSIONID')
--------------------
152
ENTRYID
返回会话人口标志
SQL> select userenv('entryid') from dual;

USERENV('ENTRYID')
------------------
0
INSTANCE
返回当前INSTANCE的标志
SQL> select userenv('instance') from dual;

USERENV('INSTANCE')
-------------------
1
LANGUAGE
返回当前环境变量
SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
LANG
返回当前环境的语言的缩写
SQL> select userenv('lang') from dual;

USERENV('LANG')
----------------------------------------------------
ZHS
TERMINAL
返回用户的终端或机器的标志
SQL> select userenv('terminal') from dual;

USERENV('TERMINA
----------------
GAO
VSIZE(X)
返回X的大小(字节)数
SQL> select vsize(user),user from dual;

VSIZE(USER) USER
----------- ------------------------------
6 SYSTEM



60.AVG(DISTINCT|ALL)
all表示对所有的值求平均值,distinct只对不同的值求平均值
SQLWKS> create table table3(xm varchar(8),sal number(7,2));
语句已处理。
SQLWKS> insert into table3 values('gao',1111.11);
SQLWKS> insert into table3 values('gao',1111.11);
SQLWKS> insert into table3 values('zhu',5555.55);
SQLWKS> commit;

SQL> select avg(distinct sal) from gao.table3;

AVG(DISTINCTSAL)
----------------
3333.33

SQL> select avg(all sal) from gao.table3;

AVG(ALLSAL)
-----------
2592.59


61.MAX(DISTINCT|ALL)
求最大值,ALL表示对所有的值求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次
SQL> select max(distinct sal) from scott.emp;

MAX(DISTINCTSAL)
----------------
5000


62.MIN(DISTINCT|ALL)
求最小值,ALL表示对所有的值求最小值,DISTINCT表示对不同的值求最小值,相同的只取一次
SQL> select min(all sal) from gao.table3;

MIN(ALLSAL)
-----------
1111.11


63.STDDEV(distinct|all)
求标准差,ALL表示对所有的值求标准差,DISTINCT表示只对不同的值求标准差
SQL> select stddev(sal) from scott.emp;

STDDEV(SAL)
-----------
1182.5032

SQL> select stddev(distinct sal) from scott.emp;

STDDEV(DISTINCTSAL)
-------------------
1229.951



64.VARIANCE(DISTINCT|ALL)
求协方差

SQL> select variance(sal) from scott.emp;

VARIANCE(SAL)
-------------
1398313.9


65.GROUP BY
主要用来对一组数进行统计
SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno;

DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
10 3 8750
20 5 10875
30 6 9400



66.HAVING
对分组统计再加限制条件
SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno having count(*)>=5;

DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
20 5 10875
30 6 9400
SQL> select deptno,count(*),sum(sal) from scott.emp having count(*)>=5 group by deptno ;

DEPTNO COUNT(*) SUM(SAL)
--------- --------- ---------
20 5 10875
30 6 9400


67.ORDER BY
用于对查询到的结果进行排序输出
SQL> select deptno,ename,sal from scott.emp order by deptno,sal desc;

DEPTNO ENAME SAL
--------- ---------- ---------
10 KING 5000
10 CLARK 2450
10 MILLER 1300
20 SCOTT 3000
20 FORD 3000
20 JONES 2975
20 ADAMS 1100
20 SMITH 800
30 BLAKE 2850
30 ALLEN 1600
30 TURNER 1500
30 WARD 1250
30 MARTIN 1250
30 JAMES 950




2004-12-14 11:03:16 Tue

2004年12月8日星期三

阿森纳,重整旗鼓(@tom blog)

自从那场比赛比较窝囊的输给了曼联之后,阿森纳就像一个被打晕头的巨人,跌跌撞撞,失去了往日的自信,也失去了对比赛的掌握。在这个黑色的11月中,以往被连续的胜利所压制的种种问题都暴露了出来,一时间,人们都在哀叹,阿森纳到底怎么啦?
好了,在渡过了尴尬的11月之后,阿森纳终于找到了自己的轨道,重新开始了新的征程。在失去了联赛杯,在联赛落后切儿西5分的情况,阿森纳面临着在冠军联 赛中的背水一战,对手是身体强悍的罗森博格,这是阿森纳比较讨厌的对手类型,好在,枪手们顶住了压力,干净漂亮的赢得了比赛,避免了再被淘汰出冠军杯的尴 嘛。也为周末与切尔西的北伦敦德比战打下了一个好的心理基础。
然而,我们也应该看到,在过去的11月中,温格教练还是暴露了不少的问题,过于依赖主力阵容,给年轻人的机会太少,导致主力过于疲劳,是其中一个重要的问 题。也许,温格是想给年轻人一个循序渐进的成长过程,但是,一直不给年轻人压力,他们又怎么能快速成长那?事实证明,阿森纳的年轻人是能够依赖的。
愿枪手们在新的征程中更强悍!

2004-12-08 11:39:22 Wed

2004年11月22日星期一

【转】Wiki 簡介(@tom blog)

转自:http://ccca.nctu.edu.tw/~hlb/articles/archives/000662.php

前言

我 家 wiki 順利運作超過一個月了,這段期間也看到不少朋友們開始玩起 wiki。我跟朋友們( Schee, ilya, zonble)都寫過一些關於 wiki 的文章,不過我猜大概不少人還是搞不懂這是什麼玩意、可以怎麼玩,而且也沒時間去讀文件。所以我決定寫篇文章介紹一下,讓更多朋友來玩 wiki。
什麼是 wiki?

根 據 wiki 社群的定義,wiki 是一種提供「共同創作(collaborative)」環境的網站,也就是說,每個人都可以任意修改網站上的頁面資料。這聽起來挺瘋狂的,萬一有陌生人來 網站上亂搞怎麼辦?別擔心,所有的 wiki 都有「版本控制(Version Control)」的概念,你隨時都可以找回之前的正確版本;更何況你可不是單打獨鬥,社群的力量是非常驚人的。就在這種相信人性本善的概念下,整個 wiki 社群迅速地成長茁壯。如果你還是很擔心,更可以幫 wiki 加入權限管理(Access Control)的機制,保證萬無一失。除了版本控制之外,值得一題的是「格式化語法(Formating Rule)」。因為對一般人來說,HTML 語法實在是個惡夢,所以 wiki 創造了一套更簡單的寫作語法,讓大家可以專注在寫作上。

wiki 這個字到底是什麼意思呢?根據 FAQ 的說法,wiki-wiki 是夏威夷語裡「快(quick)」的意思。實際上 wiki 也真的是既簡單又快速,你可以看到 wiki 每天都在成長。
wiki 可以怎麼玩?

首 先會想到的當然是共筆系統(例如 FreeBSD 共筆 )、讀書會、專案開發、寫書、翻譯、資料整理(例如網站設計資源)、常見問題整理等等,這些本來就非常適合一群人來做。其次你可以想想怎麼樣來利用版本控 制的功能,例如拿來整理想法(可以時常比對舊版本)、寫作業、記上課筆記等等。甚至有人用 wiki 寫百科全書喔!如果你還想到可以怎麼玩,歡迎告訴我 :)
怎麼安裝 wiki?

現在已經有不少中文資源,可以參考我之前寫的「wiki 經驗談」,你也該先去逛逛 wiki 討論區 的資料。相關資源已經很多了,我在這裡就不多談。
臺灣發展現況

前 些天在聊天室(#elixus)裡跟 clsung 、 hcchien 討論過之後,決定把我這邊大部分資料都轉到 Wikilla 去。雖然也許只是名義上的差別,但是我相信由團體共同維護的 wiki 一定會比「我的後花園」吸引更多人參與。目前我們正在聊天室及 wiki 上討論搬家事宜,也歡迎你參與 :)

另外 evi1c 也剛用 JSPWiki 幫 #bsdchat 聊天室頻道架了個 wiki ,看起來很讚唷!

除此之外,已經有些人開始採用 wiki、或正計劃要採用 wiki 作為公司或組織內部的討論區囉!別再等了,一起來吧! :)
結語

這只是一份簡單的入門指南,別忘了去 Wiki Wiki Web 看看,相信你會因此對 wiki 瞭解得更透徹。
我看 wiki

根 據 Tim Berners-Lie 原本的構想,瀏覽器應該同時具備所見即所得的編輯功能,讓人們透過全球資訊網分享資訊,並直接共同合作。據他所說,W3C 內部很早就使用 Amaya 配上 Jigsaw 來共同維護文件了。我覺得 wiki 就是在這種理念下的妥協性產物,不過 wiki 的作者當時似乎不知道這一點。

延伸閱讀:

* 我的 wiki 觀察報告 ,提供了一些數據資料以及大事記。
* The Wiki Way Review ,再次感謝 Schee 借我這本書。
* wiki 討論區 。關於 wiki 的討論會移到 Wikilla 去,希望大家多多提供資料。
* 一千零一網(原名:Weaving The Web)
* W3C Annotea 專案

2004-11-22 22:27:59 Mon

【转】WIKI呼唤网络时代的共创分享(@tom blog)

互联网络的发展,不仅为知识的互换分享提供了跨越时空的得天独厚的场所,而且近来社会软件的发展,还为知识的共创分享提供了前所未有的协同作业平台,这就是wiki。


WIKI呼唤网络时代的共创分享
作者:庄秀丽 北京师范大学现代化教育技术研究所 博士生

互 联网络信息技术飞速发展所带来的社会变革,不仅体现在我们生活工作方式的改变上,还体现在我们学习认知方式的变化上。社会的发展步伐要求我们必须更加关注 学会学习,而要学会学习,就首先要学会分享,只有在分享的环境和氛围中,学会学习的能力才能更加有效地得到培养和提高。基于知识经济的信息社会,分享互换 知识跟工业社会的物质互换孑然不同。在工业社会,A与B互换某件物品,就意味着A不再拥有这件物品。而当知识进行分享互换时,互换分享的双方不再是失去的 关系,而是分享双方知识的叠加、递增关系,甚至是集思广益碰撞产生火花的突破创新关系。互联网络的发展,不仅为知识的互换分享提供了跨越时空的得天独厚的 场所,而且近来社会软件的发展,还为知识的共创分享提供了前所未有的协同作业平台,这就是wiki。


一.Wiki概述

Wiki 的历史并不很长,早在1995年,在PUCC(Purdue University Computing Center)工作的Ward Cunningham为了方便模式社群的交流建而建立了一个工具叫波特兰模式知识库(Portland Pattern Repository)。在建立这个系统的过程中,Ward Cunningham创造了Wiki的概念和名称(WikiWiki一词来源于夏威夷语的 "wee kee wee kee" ,英文就是“quick”,中文就是“迅速”的意思。),并且实现了支持这些概念的服务系统,这就是最早的Wiki系统。
从1996年至2000年间,波特兰模式知识库围绕着面向社群的协作式写作,不断发展出一些支持这种写作的辅助工具,从而使Wiki的概念不断得到丰富和传播,并在网络空间出现了许多类似的网站和软件系统,其中最有名的就是Wikipedia(中文版为“维基百科”)。
作 为面向社群的协作创作系统,wiki提供了基于web的形式超链结构,可以对编辑内容进行浏览、创建、更改。wiki通过对不同版本内容的有效控制管理, 来支持网络的面向社群的协作式共同创作活动,wiki简单易用,有效打破了网络上信息技术人员垄断信息管理的更新维护发布工作的局面,使得基于wiki创 作的自组织社群更容易形成和发展。
基于wiki的共创分享的应用非常多,下面重点介绍最出名的Wikipedia(维基百科)后,再集中给出其它的多种应用情境。

二.wikipedia / 维基百科

台 湾著名的资讯作家邹景平女士2003年4月在其“elearning心法102讲——Wikipedia揭示知识协作的新里程碑”中写道“最近网络上让我 大为叹服的一件事,就是Wikipedia(http://en.wikipedia.org/),它是由一群热心网友合写的百科全书,目前还在成长中, 它鼓励所有人参与,它最宝贵的精神是平等,没有人有特权,任何人都有权利修改其中内容,只要你觉得可把内容润饰得更好,马上就可动手修改,当然若有人觉得 不妥,也可再把它改回来,Wikipedia不怕别人修改,因为所有的修改纪录都保存下来,不但可事后查验,也能追踪、回复至本来面目。”
Wikipedia 是一个正在进行中的国际性的内容开放的百科全书协作计划,这个协作计划的特点是人人都可以参与。Wikipedia最初的构想是Larry Sanger(以前Nupedia电子百科全书计划的主编)于2001年1月2日在和电脑程序员Ben Kovitz一次谈话中产生,当Ben Kovitz在晚餐中向Sanger解释wiki的概念时,Sanger立即发现wiki可能是创建一个更开放的百科全书计划的技术。 于是英文版本Wikipedia(http://en.wikipedia.org/)最初就于2001年1月15日开始了,而中文版Wikipedia (http://zh.wikipedia.org/)则开始于2002年10月底。到2003年1月22日,英语Wikipedia达到了 100,000条条目的里程碑,而到 2003年11月21日中文维基百科突破了3000条条目。整个Wikipedia/维基百科全计划中没有所谓的主编,Wikipedia/维基百科完全 由全球无数志愿学者、玩家、学生等等有知识的人共同建筑。
由于Wikipedia/维基百科良好发展和迅速成长,2002年12月,兄弟计划 Wiktionary也正式开始,它的宗旨是建立一个所有语言的词典。它与维基百科在同一个服务器上运行,使用同样的软件。 在后来的发展中还启动了维基教科书计划(http://wikibooks.org/),维基资源计划(http: //sources.wikipedia.org/),维基语录计划(http://quote.wikipedia.org/)。所有这一切的蓬勃发展 说明了wiki——共创分享的强大生命力。
Wikipedia/维基百科本身作为开放共创分享的百科全书的创作,有着与传统百科全书不同的地方, 它力图通过大众的参与,创设一个包含人类所有知识领域的百科全书,它还是一部内容开放的百科全书,其内容开放的材料允许任何第三方不受限制地复制、修改及 再发布材料的任何部分或全部。

三.Wiki案例

关于wiki的应用案例非常多,而且涉及到各种各样的应用情境,除最常用 的主题知识拓展创作共享,还有应用于作为共创资源的目录索引,进行学术课题研究,拓展传统会议研讨主题,另外wiki还被用在编写个人简历,产品的FAQ 文档等等。关于wiki的应用案例,在此只是列举几个以起抛砖引玉作用。
1.基于主题的协作共创
基于主题的协作共创是wiki最常见的一种应用情境,比如“中文weblog百科全书”(http://www.cnblog.org/wiki/)就是非常典型的网络社群共同参与的共享创作,只有善于分享,才能习得更多。
Social Software Alliance Wiki(http://www.socialtext.net/ssa/index.cgi)是国外的一个基于主题的协作共创wiki,其探讨主题就是 关于社会性软件(social software)发展,wiki本身也属于社会软件的一种。
2.共建资源的目录索引
BlogLink( http://blogs.51.net/pmwiki/pmwiki.php/Main/BlogLink)是用wiki创作的一个关于blog的链接 目录索引。其页面写道“中文Blog日益增多,和我相互链接的Blog的数目也在见涨,看着首页面上越来越长的Blog列表,心里想找个好的链接解决方 式。在观察了众多Blogger的链接方案之后,最终决定采用这个Wiki页面。一来链接的数目不受限制,二来,可以让有意者自己动手添加链接”。由此可 见应用wiki的价值所在。
3.学术课题研究
上海中医药大学针灸推拿学院文献室暨教育技术研究室主任徐平教授的“针灸研究和教学 ”(http://61.129.75.54/zhenjiu/grass/wiki/default.asp?p=针灸研究和教学)是我国率先利用 wiki师生一起进行国家课题的研究和内容共创。
中国科学院国家科学数字图书馆也利用wiki作为课题研究共创分享信息的一个平台,见http://159.226.100.132/pmwiki/pmwiki.php。
4.传统会议的内容拓展
2003 年10月上旬,由美国国防部高级分布式学习实验室(Academic ADL Co-Lab)组织举行了关于“学习对象“的高峰会(http: //www.academiccolab.org/events/oct78.html),有别于传统会议的组织及会议电子文稿的共享,这次会议特别利用 wiki来对会议主题进行了内容的拓展(http: //www.academiccolab.org/projects/repositories/community/wiki/index.php?page =LearningRepositoryCommunity)。
同样在国内,中国科学院文献情报中心在2003年11月份的学术研讨会,也采用了 wiki来进行会议内容的共享和主题的拓展(http://mylibrary.csdl.ac.cn/oddmuse/wiki.pl)。所有这些应用 和尝试,大大提升了传统会议的效果和价值。

四.Wiki行动

参与wiki的内容共创分享的方式有多种,可以选择自己感兴 趣的网站主题,在学习分享知识的过程中,将自己了解的知识添加进去。Wiki的使用非常简单,只要在页面上找到类似“编辑本页”的字眼,点击就可以进行编 辑书写,写完按保存就完成了一次知识共创分享的活动。另外还有一种方式,可以自己架设wiki服务平台系统,创设主题,然后再逐步形成一个虚拟社群,进行 知识的共创分享。
有关wiki的安装软件有多种,常用见的有使用perl语言开发无需另外安装数据库的Oddmuse;还有用php语言开发,可 以进行页面存取权限控制的pmwiki;另外在线教育资讯网(http://www.online-edu.org/)秦宇站长的个人网站(http: //www.qinyu.net/)上提供了将Blog和Wiki整合在一起的汉化的安装包。

五.小结

Wiki的迅速发 展跟其使用方便、自组织、开放等特性密切相关。另一方面,在wiki这样共创分享的数字化协同作业内容创作模式刚刚起步之后,有很多问题值得我们进一步深 思和研究,如网络资源内容的数字版权问题,内容创作过程的人的品格问题。由于wiki是一种完全开发的共同创作共享的协同环境,使得每一个人都能参与共享 的创作过程中,那么丰满的数字内容也有可能毁于那些恶作剧的人之手。当我们生活在网络空间时,我们需要随时反省自我的行为,因为我们时刻在与别人互动。
wiki不仅是一个内容共创平台,wiki还呼唤着培育网络空间奉献分享的精神和优秀的数字人生品格的形成。

参考文献
1. http://blogbus.com/blogbus/blog/diary.php?diaryid=8968
2. http://zh.wikipedia.org/
3. http://wiki.3382.net/
4. http://c2.com/cgi/wiki?WikiWikiWeb
5. http://zh.wikipedia.org/
6. http://wiki.newzilla.org/
7. http://www.cnic.org/
8. http://www.artima.com/intv/wiki.html
9. http://www.online-edu.org/member/article/538.html


2004-11-22 18:30:02 Mon

【转】测试跟踪工具Bugzilla介绍(@tom blog)

转自:http://221.4.148.118/testmanager/testmanager_pro/testmanager_24.htm

测试跟踪工具Bugzilla介绍

徐异婕
   也许你还没有看到一个错误管理系统所具有的价值;也许你正被大量的测试数据所淹没,而迫切的需要一个产品缺陷的记录及跟踪的好帮手;也许你正在通过如: 电子表格、数据库等各种方式来不断的开发和完善一个错误跟踪系统。Mozilla公司向我们提供了一个共享的免费工具Buzilla.作为一个产品缺陷的 记录及跟踪工具,它能够为你建立一个完善的Bug跟踪体系,包括报告Bug、查询Bug记录并产生报表、处理解决、管理员系统初始化和设置四部分。并具有 如下特点:
  1。基于Web方式,安装简单、运行方便快捷、管理安全。
  2。有利于缺陷的清楚传达。本系统使用数据库进行管理,提供 全面详尽的报告输入项,产生标准化的Bug报告。 提供大量的分析选项和强大的查询匹配能力,能根据各种条件组合进行Bug统计。当错误在它的生命周期中变化时,开发人员、测试人员、及管理人员将及时获得 动态的变化信息,允许你获取历史纪录,并在检查错误的状态时参考这一记录。
  3。系统灵活,强大的可配置能力。Buzilla工具可以对软件产 品设定不同的模块,并针对不同的模块设定制定的开发人员和测试人员;这样可以实现提交报告时自动发给指定的责任人;并可设定不同的小组,权限也可划分。设 定不同的用户对Bug记录的操作权限不同,可有效控制进行管理。允许设定不同的严重程度和优先级可以在错误的生命其中管理错误,从最初的报告到最后的解 决,确保了错误不会被忽略,同时可以使注意力集中在优先级和严重程度高的错误上。
  4。自动发送Email,通知相关人员。根据设定的不同责任人,自动发送最新的动态信息,有效的帮助测试人员和开发人员进行沟通。
  下面我们将按照Bugzilla的操作说明、 Bugzilla管理员的操作指南两部分来说明这个工具的具体使用。本文有不少观点来自个人使用心得,有不妥之处,敬请斧正。
Bugzilla操作说明
1、 用户登录及设置
1.1用户登录
  1. 用户输入服务器地址http://192.168.1.6/bugzilla/。
  2. 进入主页面后,点击【Forget the currently stored login】,再点击【login in】进入。
  3. 进入注册页面,输入用户名和密码即可登录。用户名为Email 地址,初始密码为用户名缩写。
  4. 如忘记密码,输入用户名,点击【submit request】,根据收到的邮件进行重新设置。
1.2、修改密码及设置
  1.Login登录后,【Edit prefs】->【accout settings】 进行密码修改。
  2.【Edit prefs】->【email settings】 进行邮件设置。
  3.【Edit prefs】-> 【permissions】 进行权限查询
2、Bug的处理过程
2.1、报告Bug
2.1.1测试人员报告Bug
  1. 请先进行查询,确认要提交的bug报告不会在原有纪录中存在,若已经存在,不要提交,若有什么建议,可在原有纪录中增加注释,告知其属主,让bug的属主看到这个而自己去修改。
  2. 若Bug不存在,创建一份有效的bug报告后进行提交。
  3. 操作:点击New,选择产品后,填写下表。
  4. 填表注意:Assigned to: 为空则默认为设定的 owner, 也可手工制定。CC: 可为多人,需用","隔开。Desription中要详细说明下列情况:
  1) 发现问题的步骤
  2) 执行上述步骤后出现的情况。
  3) 期望应出现的正确结果。
  选择group设置限定此bug对组的权限,若为空,则为公开。
  5. 操作结果:Bug状态(status)可以选择Initial state 为New或Unconfirmed.
  系统将自动通过Email通知项目组长或直接通知开发者。
  6.帮助: Bug writing guidelines
2.1.2 开发人员报告Bug.
  1. 具体方法同测试人员报告。
  2. 区别: Bug初始状态将自动设为Unconfirmed,待测试人员确定后变为“New".
2.2、Bug的不同处理情况
2.2.1 Bug的属主 (owner) 处理问题后,提出解决意见及方法。
  1 . 给出解决方法并填写Additional Comments,还可创建附件(如:更改提交单)
  2.具体操作(填表项如下)
  3 . 填表注意:
  FIXED 描述的问题已经修改
  INVALID 描述的问题不是一个bug (输入错误后,通过此项来取消)
  WONTFIX 描述的问题将永远不会被修复。
  LATER 描述的问题将不会在产品的这个版本中解决.
  DUPLICATE 描述的问题是一个存在的bug的复件。
  WORKSFORME 所有要重新产生这个bug的企图是无效的。如果有更多的信息出现,请重新分配这个bug,而现在只把它归档。
2.2.2 项目组长或开发者重新指定Bug的属主。(owner)
  1. 为此bug不属于自己的范围,可置为 Assigned,等待测试人员重新指定。
  2. 为此bug不属于自己的范围,但知道谁应该负责,直接输入被指定人的Email, 进行Ressigned。
  3. 操作:(可选项如下)
  * Accept bug (change status to ASSIGNED)
  * Reassign bug to
  * Reassign bug to owner and QA contact of selected component
  4. 操作结果:此时bug状态又变为New,此bug的owner变为被指定的人。
2.2.3测试人员验证已修改的 Bug.
  1. 测试人员查询开发者已修改的bug,即Status为"Resolved",Resolution为"Fixed".进行重新测试。(可创建test case附件)
  2. 经验证无误后,修改Resolution为VERIFIED。待整个产品发布后,修改为CLOSED。
  若还有问题,REOPENED,状态重新变为“New",并发邮件通知。
  3. 具体操作(可选择项)
   1. Leave as RESOLVED FIXED
   2. Reopen bug
   3. Mark bug as VERIFIED
   4. Mark bug as CLOSED
2.2.4 Bug报告者(reporter)或其他有权限的用户修改及补充Bug
  1. 可以修改Bug的各项内容。
  2. 可以增加建立附件,增加了相关性, 并加一些评论来解释你正在做些什么和你为什么做。
  3. 操作结果:每当一些人修改了bug报告或加了一个评论,他们将会被加到CC列表中,bug报告中的改变会显在要发给属主、写报告者和CC列表中的人的电子邮件中。
2.2.5测试人员确认开发人员报告的Bug是否存在.
  1. 查询状态为“Unconfirmed"的Bug,
  2. 测试人员对开发人员提交的Bug进行确认,确认Bug存在。
  3. 具体操作:选中“Confirm bug(change status to New)"后,进行commit.
  4. 操作结果:状态变为“New".
2.3、查询Bug
  1.直接输入Bug Id,点击find 查询。可以查看Bug的活动纪录。
  2.点击Query,输入条件进行查询。
  3.查询Bug活动的历史
  4.产生报表。
  5.帮助:点击Clue.
3、关于权限的说明
  1. 组内成员对bug具有查询的权利,但不能进行修改。
  2. Bug的owner 和 reporter 具有修改的权利。
  3. 具有特殊权限的用户具有修改的权利。
4、 BUG处理流程
  1. 测试人员或开发人员发现bug后,判断属于哪个模块的问题,填写bug报告后,通过Email通知项目组长或直接通知开发者。
  2. 项目组长根据具体情况,重新reassigned分配给bug所属的开发者。
  3. 开发者收到Email信息后,判断是否为自己的修改范围.
  1) 若不是,重新reassigned分配给项目组长或应该分配的开发者。
  2) 若是,进行处理,resolved并给出解决方法。(可创建补丁附件及补充说明)
  4. 测试人员查询开发者已修改的bug,进行重新测试。(可创建test case附件)
  1) 经验证无误后,修改状态为VERIFIED。待整个产品发布后,修改为CLOSED。
  2) 还有问题,REOPENED,状态重新变为“New",并发邮件通知。
  5. 如果这个BUG一周内一直没被处理过。Bugzilla就会一直用email骚扰它的属主,直到采取行动。
5、一个Bug的生存周期

Bugzilla管理员操作指南
1、主要工作内容:
1. 1产品(Product)、版本号(versions)和模块(Components)的定义,同时指定模块相应的开发者(owner)和测试人员(QA Contact)。
1.2小组的定义和划分
1.3测试中Bug严重程度、优先级的定义
1. 4增加用户,并分别设定全部用户的分组、权限。
1. 5主要参数(parameters)的设置
  1) urlbase: 输入bugzilla 工具所在的服务器IP地址。
  2) usebuggroupsentry: 设为ON,可以分组。
  3) whinedays:Bug在whinedays设定的期限内若未被处理,将自动重发mail,默认为7天。
  4) defaultpriority:设定默认的优先级
  5) commentonresolve:设为ON,系统将强制要求开发者处理完Bug 后,必须填写修改的内容。
2、基本操作:
2.1创建默认的管理员用户。
  运行checksetup.pl。若不小心删除管理员,重新运行checksetup.pl.
2.2 管理用户
2.1 增加新用户
  点击页面右下角【users】,submit后,出现【Add new user】页面。输入相应输入即可。Login name: 一般为邮件地址,可以设为其他标识。
2.2 禁止一个用户
  填写Disabled text 输入框即可。
2.3 修改用户
  可以修改用户注册名、密码。
  设置权限
  QA的权限一般设为: Canconfirm, editbugs
  Developer的权限设为: none
  分组控制:group
3、管理group
3.1.增加group
  edit groupàadd groups (New User Regexp可不填/active 选择则可选)->add
3.2修改group ,submit 即可。
  4、管理Product 和 component
  a)增加Product
  b) Component 对应一个owner(进行fixed),QA Contact(确保已fixed)
  c) Component Number of Unconfirmed =10000,此产品将选择bug的初始状态(Unconfirmed,New)

2004-11-22 18:20:45 Mon

2004年11月16日星期二

Eclipse及其插件主要网址(@tom blog)

说明:资料收集,感谢网上众多同仁的奉献

Eclipse官方网站:
http://www.eclipse.org/
不用过多说明,要看Eclipse的最新发展,就到这里吧。

插件网站:
http://www.eclipse-plugins.info/eclipse/index.jsp
Eclipse 正牌插件专门网站,有插件分类,top rated统计,以及用户反馈信息。 这些足够你少走弯路,最快地找到最好胜的插件了。(说明引用自网上)

Lomboz:
http://forge.objectweb.org/projects/lomboz
J2EE 开发中用得最火的插件,关键是更新速度很快,基本上 eclipse IDE 有新版本,几天之内他就可以 release 版本。新版本功能也改进不少,现在也可以直接在 JSP 中显示标签的提示了,甚至语法错误提示。(我一直用这个)
随 着eclipse的发展,现在的LOMBOZ插件越来越大了。但是速度成了主要的问题。和Myeclipse、IBM的Eclipse Web Tools Platform相比,LOMBOZ的技术有点落后了。Myeclipse是把整个项目的JSP先编译了,而IBM也是第一次把所有的JSP加入索引。虽 然每次打开的时候,也慢一些,但是并不随着工程的变大,而出现速度成反比的现象。现在用lomboz 打开一个大的项目中的JSP文件的话,一般人已经受不了它的速度了。(说明引用自网上)

Struts Console:
http://www.jamesholmes.com/struts/console/
最 老牌的 Struts 插件了,支持的平台很多。同时支持eclipse2.1和3.0!!!而且一直在维护更新。我还是认为它是最好用的 Struts 插件。新版本也支持 Eclipse IDE 的最新版本。其实对于 Struts 关键是完善地支持配置文件地图形化就够了,其他关系不大。这个东东对Struts配置文件支持得很完善。另外他也可以相对独立地作为一个程序运行,我现在 是这种方式在用它。


2004-11-16 22:55:49 Tue

2004年11月2日星期二

【转】中国四大神兽的由来!(@lilybbs blog)

中国四大神兽的由来!

我国古代的天文学家位了观测天象,而去了解日月星辰在天空中運行的情況,在黃道赤道附近,先后选择了二十八个星宿做为观测点。   這二十八個星宿,被称为「二十八星宿」,也是古代划分天区的标准。

二十八星宿按照東、西、南、北四個方位,分为四组 

(1)東方苍龙七宿

(2)北方玄武七宿

(3)西方白虎七宿

(4)南方朱雀七宿

这四方神在古代曾被利用与军队阵列,战国时代便有「前朱雀后玄武,左青龍右白虎」的说法,道教兴起之后,青龍、朱雀、白虎、玄武成为道教的守护神。

东方青龙

关于龙的传说有很多,龙的出处也有很多的说法,有的说是由印度传入的、有的说是中国星宿变成。印度本身是在龙神的说法的,但龙在印度的地位是不高的,也是有实物的-蟒蛇。
在五行学说盛行的年代里,慢慢的也开始流传着有关青龙的故事;五行家们照着阴阳五行给东南西北中配上五种颜色,而每种颜色又配上一个神兽与一个神灵;东为青色,配龙,西为白色,配虎,南为朱色,配雀,北为黑色,配武,黄为中央正色。
   在四方的神灵中,根据山海经的说法,「南方祝融,兽身人面,乘两龙。」;「西方蓐收,左耳有蛇,乘两龙。」;「东方有句芒,身鸟人面,乘两龙。」; 「北方禺疆,黑身手足,乘两龙。」,比较有趣的一点是,在山海经中的龙都是用骑乘的,而跟他同类的蛇则都是被或握或操或绕颈,显示出两者的不同来;不过在 五方的五神却跟四方的四神不大一样,这里就不再详述了。朱雀、玄武(黑色的龟蛇,武是龟蛇之意)、青龙、白虎又分别代表了四方的二十八宿,龙是东方的七宿 ﹣﹣角、亢、氐、房、心、尾、箕,而这七宿的形状又极似龙形,从他们的字义上就可以看出来,角是龙的角,亢是颈项,氐是本,而是颈根,房是膀,是胁,心是 心脏,尾是尾,箕是尾末。
还有在龙心的部分,有人称之为「大火」的,跟晴雨有关,又因为青龙属木,所以也是木星当年的年太岁。而在道教兴起之后, 这些四灵也被冠上了人名,便于人类 称呼,青龙叫「孟章」,白虎叫「监兵」,朱雀称「陵光」,玄武为「执明」,而在众多的朝代中也有一些君主取青龙来做自己的年号,如三国的魏明帝就是一例, 而史记中也有关于夏朝是属于木德的朝代,所以他有「青龙生于郊」的祥瑞之兆的记载。
在古时后的中国,头有角的为公龙;双角的称为龙,单角的称蛟;无角的为螭,古时玉佩常有大小双龙,仍称母子螭;龙的地位远高于印度。因在中国龙是神物、是至高无上的,也是皇帝的象征。也是东方的代表、五行中是属木的,也因青色是属木的,故此有左青龙、右白虎的说法。
星宿的是用廿八星宿中,东方七宿-角、亢、氐、房、心、尾、箕,古人把它们想象成为龙的形象,因位于东方,按阴阳五行给五方配色之说,东方色青,故名「青龙」。  

而民间又有龙性淫旳说法,和牛交时生麒麟、和猪交时生象。
又有龙生九子,都不像龙的说法,是这样的:  
大儿是叫囚牛:它平身喜爱音乐,故常立在琴头上。如汉族的胡琴,白族的三弦琴等。而蒙古的马头琴也可能是囚牛的变种。  
二儿子是睚毗:它平身爱杀所以多被安在兵器上,用以威摄敌军。同时又用在仪仗上,以显得更加威严。  
三儿是嘲风:是只兽形龙,样子有点像狗,它善于瞭望,故多安在殿角上。据说可以威摄妖魔、消灭灾祸。 
第四儿是蒲牢:喜欢吼叫,人们就把它安在钟上,大多是蒲牢的形象。据说它是住在海滨的,但却十分怕鲸鱼,一但鲸鱼发起攻击,它就会吓得乱叫。故人们把木杵造成鲸的形状,以令铜钟格外

北方玄武
玄武是一种由龟和蛇组合成的一种灵物。玄武的本意就是玄冥,武、冥古音是相通的。武,是黑的意思;冥,就是阴的意思。玄冥起初是对龟卜的形容:龟背是黑色 的,龟卜就是请龟到冥间去诣问袓先,将答案带回来,以卜兆的形式显给世人。因此,最早的玄武就是乌龟。以后,玄冥的含义不断地扩大。龟生活在江河湖海(包 括海龟),因而玄冥成了水神;乌龟长寿,玄冥成了长生不老的象征;最初的冥间在北方,殷商的甲骨占卜即「其卜必北向」,所以玄冥又成了北方神。
  它和其它三灵一样,玄武也由天下二十八星宿变成的:斗、牛、女、虚、危、室、壁。
  而古时后的人对玄武牠的解释有以下的数种,「玄武」即龟。《礼记.曲礼上》云:「行,前朱鸟而后玄武...」「玄武」乃龟蛇。《楚辞.远游》洪兴祖补注:「玄武,谓龟蛇。位在北方,故曰玄。身有鳞甲,故曰武。「玄武」为蛇合体、龟与蛇交。
  《文选》卷十五张衡《思玄赋》曰:「玄武宿于壳中兮,腾蛇蜿蜒而自纠。」李善注云:「龟与蛇交曰玄武。」《后汉书.王梁传》:「《赤伏符》曰:「王梁 主衡作玄武。」」李贤注云:「亡武,北方之神,龟蛇合体。」「玄武」为水神、北方之神。《后汉书.王梁传》:「玄武,水神之名。」《重修纬书集成》卷六 <河图帝览嬉>:「北方玄武所生,...镇北方,主风雨。」
  但玄武被后世的道士们升级做北方的大帝﹁真武大帝﹂。有别于其它三灵。其它的青龙和白虎,只做了山庙的门神,而朱鸟就成了又天玄女。
  玄武在宋代身价培增,并被人格化。这与宋代各帝推波助澜分不开。宋初太祖时,即有真武、天蓬等为天之大将的传说。未真宗天禧元年,在军营中发生了一件 事。在《事物纪原》卷七载:「营卒有见蛇者,军士因其建真武堂。二年闰四月,泉涌堂侧,汲不竭,民疾疫者,饮之多愈。」真宗听说此事,下诏就地建观,赐名 「祥源」。这大约是中国最早的真武庙。
  真武大帝的身世,后人多说是在隋炀帝时,玉帝将自己的三魂之一,化身投胎于挣乐国皇后,厌恶尘世,舍位入武当山上修行,成功飞升,镇守北方,号曰:玄武。

西方白虎
在中国四圣兽中,另外一个常常跟龙相提并论的就是「白虎」;虎,为百兽之长,牠的威猛和传说中降服鬼物的能力,使得牠也变成了属阳的神兽,常常跟着龙一起出动,「云从龙,风从虎」成为降服鬼物的一对最佳拍档。
  而白虎也是战神、杀伐之神。白虎具有避邪、禳灾、祈丰及惩恶的扬善、发财致富、喜结良缘等多种神力。而它是四灵之一,当然也是由星宿变成的。是由二十 八星宿之中,位西方七宿:奎、娄、胃、昂、毕、觜、参。所以是西方的代表,而它的白,是因是西方,西方在五行中属金,色是白的。所以它叫白虎不是因它是白 色,而是从五行中说的了。

  除了道教中的四灵包括了青龙白虎之外,连在风水师探勘墓地时,在地形前方左右两边突起的地形,可以当作墓穴的地方,都有独特的称号,称之左青龙、右白 虎,取其护卫之意,而在公堂中也有相同的装饰,在左右堂柱上绘有青龙百虎,以其镇压邪灵。而在道教兴起之后,龙虎被借用为道家炼丹的术语,就是指"铅汞、 坎离、水火、阴阳",等的同意词。而道家炼丹分内外(内丹炼气,外丹炼丹药,笔者才疏学浅不敢十分确定),内丹是就阴阳五行而言,龙阳,生于离,离属火, 故云「龙从火里出」,虎阴,生于坎,坎属水,故云「虎向水边生」,两者结合之后,一阴一阳,互相调和,称为道本,都是元神、元精的代表。而另外一种说法 是,性属木,木代表东方,于卦为震,故比为青龙;情属金,金代表西方,于卦为兑,金白色,故喻为白虎。金能够克木,故情多损性,而用二八之真精气,使之交 合为一,则金木无间,龙虎自伏而成丹,在人体中则以肝为龙、肾为虎,而外丹则仍取阴阳之意,以龙为铅,虎为汞。
  在古人心目中,老虎是可怕的东西,又是可敬的东西。可怕的是,它会食人畜。而可敬的是因其威猛无比,能够避邪。而在一些古书中,如东汉.应劭的《风俗 通义.祀典》:「画虎于门,鬼不敢入」,「虎者,阳物,百兽之长也。能执抟挫锐,噬食鬼魅。今人卒得恶遇,烧虎皮饮之。击其爪,亦能辟恶。此其验也。」古 人还认为白虎是一种祥瑞:「德至鸟兽。」
  最初的西天星神是熊和猫头鹰,但后因古羌族的图腾在由熊变为龙的时候。而又到黄帝的向东发展时,龙的图腾被带到东方,跟「东方苍龙星座」合而为一,朱 鸟则成了统一南方时凤图腾在天国的新居,因两大部族融合而终于成「龙凤呈祥」。作为古代图腾是东凤而西龙,作为星象则是东苍龙而西朱鸟。到周朝以后,封建 制度正式确立,五行思想也成熟,把天像重新划分,朱鸟放到了南方,和祝融火神一起崇拜了。而西方的就崇拜白虎。在部族斗争及迁移,西北方的龙向东移,东方 的凤向南移,南方的虎向北移,全国显示一个大周转的观念运动。到汉代五行观念成了统一的思想,再补出玄武完成「四方之神」的配套。
  在古时《史记.天宫书》「东宫苍龙、南方朱鸟、西宫咸池、北宫玄武。」在这里的不是白虎,而是咸池。而咸池是主五谷的星,主秋季,因五谷是在秋天有收 成的,所以就把它放在秋季,但它不是动物,如何能和龙、鸟、龟配成四灵呢?在《正义》:「咸池三星在五车中,天演南,鱼鸟所扥也。」所以在宋代己提出质 疑:「苍龙、朱鸟、玄武、各总七宿而言之。至于咸池,则别一星,自在二十八宿之外。咸池还有一个解释,就是太阳洗浴之所。在《淮南子.天文篇》:「日出于 旸谷,浴于咸池,拂于扶桑,是谓晨明」。
可见咸池原是羌人视为日出之处,咸池也就是咸水湖,应是岷山地区的芋个湖泊,或是青海。由此可证明原始人所崇拜的星宫天象尚没有青龙白虎的观念。在《礼记.礼运》所谓:「麟凤龟龙,谓之四灵。」把不属于动物的咸池换成麒麟。后世有四灵有麟、四象有虎的习惯。
  又由于白虎是战伐之神,所以有多位的猛将被说成为白虎星充扥世的,如:唐代大将罗成、薛仁贵父子等人。除此之外,白虎又被道教吸放,被神化起来,成为了各庙宇的门神。

南方朱雀
朱雀又可说是凤凰或玄鸟。朱雀是四灵之一,也和其它三种一样,它是出自星宿的,是南方七宿的总称:井、鬼、柳、星、张、翼、轸。联想起来就是朱雀了。朱为赤色,像火,南方属火,故名凤凰。它也有从火里重身的特性,和西方的不死鸟一样,故又叫火凤凰。
在古籍的记载中凤是一种美丽的鸟类,而以牠的歌声与仪态为百鸟之王,牠能给人间带来祥瑞,同时也拥有「非梧桐不栖,非竹实不食,非醴泉不饮」的特殊灵性, 而由于牠是「羽虫」之长,所以和「鳞虫」之长的龙在传说中就渐渐成了一对,一个变化多端,一个德性美好,就成了民俗中相辅相成的一对,更由于龙象征着至 阳,而原来也有阴阳之分的凤(凤为雄,雌为凰)在跟龙相对之后就渐渐的成为纯阴的代表了。
而凤凰它的原形有很多种。如锦鸡、孔雀、鹰鹫、鹄、玄鸟(燕子)等等...又有说是佛教大鹏金翅鸟变成的。凤凰神话中说的凤凰是有鸡的脑袋、燕子的下巴、蛇的颈、鱼的尾、有五色纹。又请凤是有五种品种,以颜色来分的:红是凤、青则是鸾鸟、白是天鹅、另有黄和紫的。
而玄鸟的说法就是从《诗经.商颂.玄鸟》说:「天命玄鸟、降而生商、它殷土芒芒。古帝命武汤、正域彼四方。」中,就是殷商说的后代说自己的先袓-契是由玄 鸟生下来的,建立强大的商朝。因此玄鸟就成了商人的始袓了。《史记.殷本记》也记了这段历史:「殷契、母曰简狄,有绒氐之女,为帝喾次妃......三人 行浴,见玄鸟随其卵,简狄取而吞之,因孕生契。」
除了殷商之外,战国时的秦,满清的始袓和朝鲜新罗的始袓也是和仙女吞食玄鸟卵有关的。
不论玄鸟或是凤凰,都是随道教的发展,而把它由一只雀鸟,或孔雀或山鸡等等...先变成一个半人半禽的、传人兵法的仙女到完全是人的仙女,都是随道教的发展的。


Nov 2 18:23:04 2004

2004年10月25日星期一

阿森纳输了,sigh(@lilybbs blog)

虽然知道迟早会有这么一天的,但是以这样的一种方式输球,的确还是有所不甘。

应该说,今天阿森纳的状态的确不是很好,维埃拉、亨利、冰王子、永贝里等人的状态都不甚好,加上大雨之中似乎不大利于阿森纳的发挥,总体发挥不好也在情理 之中,毕竟周三的冠军杯比赛也耗费了球队的一定的精力。总之,一段历史的结束,同时也是另外一段历史的开始,希望阿森纳再放下不败的包袱之后,能开始一段 新的传奇。

不想评价曼联球员的表现,不过估计有位新星会成为流星,场内假摔,场外嫖妓。

不得不说说裁判,时松时紧的表现,关键性点球的判罚,毁掉了一场本应该精彩的比赛。

愿上帝保佑枪手!

Oct 25 01:11:31 2004

2004年10月17日星期日

今天看到地铁试车了(@lilybbs blog)

中华门外的高架上,刚好坐公交路过的时候看到了。

Oct 17 17:08:48 2004

九华山行忆(1)(@lilybbs blog)

到九华山的汽车出发的很早,大概7:30左右就从中央大厦出站了。本来以为汽车是到青阳的呢,结果,在颠簸了4个小时左右之后,汽车直接停在九华山下,看来我又被原来的印象误导了。

下车,问好回去的乘车地点后,就直奔入口处而去。买好票(多少钱忘记了,好像是60吧)之后,进入景区,一问,这边离真正的山脚还有一段距离呢,还要坐车过去,于是找到车,上车买票,终于来到了九华山下。

在山脚下,入口处是一道牌坊,牌坊里面要收费,牌坊外面不需要,这就是入口了。从入口进去,门票的副卷被撕走,正卷是一张明星片,那种邮票印在上面的。这 样的设计我当时是第一次看到,觉得颇有意义,当年去黄山的时候就没有这这样的门票。更合理的是,入口旁边就是一个邮筒,让你能够很方便的邮寄。话不多说, aha马上开始写地址,寄出了他的门票。我无人可寄,只好仍在包里,现在估计还能找到。

办完这些小事,就要开始考虑大事了。什么是大事?当然是吃饭问题。从早上到现在,已经快5个小时了,得赶快补充食物。

Oct 17 11:50:04 2004

2004年9月3日星期五

【转】天津小吃!(@lilybbs blog)

  狗不理包子:

  津门食品三绝之一。创始于清朝末年。因店主高贵友乳名狗不理而 扬名。制作工艺严
格,实行独特的“八步操作法”。特点:肉馅松散、包褶均匀、 肥而不腻、清香适口。1
989年获全国食品金鼎奖。

  耳朵眼炸糕:

  津门食品三绝之一。因店铺紧靠耳朵眼胡同而得名。距今已近百年。 特点是外焦里嫩
、细甜爽口、香味芬芳。1989年获商业部金鼎奖。

  十八街麻花:

  津门食品三绝之一。制作考究,料精货实。特点: 香甜、酥脆。1989 年获全国食品金
鼎奖。

  大福来锅巴菜:

  津门传统小吃。创于清光绪年间。特点是色香味型俱佳。

  鲜果馅汤元:

  天津风味小吃。特点是清香爽口、粉糯软滑、果味浓厚、别具风味。以小白楼地区的
白楼小吃店与江南春餐馆的最有名。

  贴饽饽熬鱼:

  天津民间流传美食。特点是玉米面饽饽颜色金黄、底面焦脆。小鱼 味鲜香浓,鱼骨酥
软。

  京东馅饼:

  清真风味食品。特点:色泽金黄,肥而不腻,清香适口。

  喇嘛糕:

  津门传统风味小吃。以辽宁路 144号京津餐厅经营的为最好,特点是色 泽金黄,甜暄
适口,营养丰富,松软。清素,营养成份高。

  罗汉肚:

  酱制食品。由天津狗不理包子总店采用传统的酱制方法研制生产。因肉 皮层次分明,
形似罗汉的肚子而得名。特点:紧固不散,光泽透明,口感咸鲜, 适口不腻,酱香醇厚。


  知味斋水爆肚:

  天津风味小吃,创于1920年。特点:肚丝鲜、脆、嫩、爽口。吃 时趁热蘸料,滋味醇
厚,具健脾养胃之功效。

  杜称奇火烧:

  津门风味小吃。特点:外焦内嫩,馅心细腻,口艳醇香。

  崩豆张:

  天津老字号食品店,历经五代传人。创于清嘉庆年间。特点:脆而不绵、 不硬、不含
胆固醇,久嚼成浆,浓香满口。

  果仁张:

  老字号食品店,历经四代传人,有 160年历史,属宫廷御膳食品,被赐 名为“蜜贡张
”。主要产品为挂霜系列果仁。

  马记茶汤:

  天津风味小吃。起源于明朝末年。特点为:色泽粉红、质地细腻,香甜润口。

  石头门坎素包:

  天津传统风味小吃。 由清末天后宫旁的真素园餐馆发明。特点: 薄皮大馅、低脂肪
、高蛋白。味醇清口。

  恩发德蒸饺:

  清真风味小吃。1921年由时文德创建。用洗净的西葫去皮去瓤,羊 肉末用开水烙透。
搅入酱油、花生油、香油、精盐、葱姜末。最后将西葫馅投入 拌匀。将擀成的面挤捏成道
士帽形的饺子生坯,上屉用旺火蒸熟。特点:有咬劲、 不渗油、肥而不腻、鲜嫩味美。


  陆记烫面炸糕:

  创始于1918年,制作时选用优质面粉、黑白小豆、白沙板糖、花 生油为原料。经过
7道工序,慢慢加火,炸成扁球形的红色成品。特点:外皮酥 脆、不粘不艮、馅甜爽口、
清香不腻。

  芝兰斋糕干:

  津门著名风味小吃。具有60多年历史的老字号。选用优质小站稻米、 江米为主料,辅
以优质红小豆、芝麻、桃仁、葡干、瓜条、桔丁等精制而成。特 点:外观洁白,不粘牙、
不掉面、绵软筋道、内味独特。

  明顺斋烧饼:

  传统风味小吃。由吕凤祥在本世纪20年代在“唯一斋”制作经营。 用热香油与富强粉
混合面酥面,包上馅,经过烙、烤两道工序而成。特点:色泽 杏黄、外皮酥脆、内层柔韧
面软。

Sep 3 19:40:29 2004

2004年8月30日星期一

今天南京拉空袭警报了(@lilybbs blog)

不知道是在准备什么啊,反正不是为了7月15的缘故。

Aug 30 21:31:37 2004

2004年8月22日星期日

今天是七夕(@lilybbs blog)

传说中的牛郎和织女的节日。

那些可爱的喜鹊们,今天可是要辛苦的劳作阿,其实,我们大家的生活,那天不是在辛苦的劳作呢,喜鹊们有着自己的目标,有着成人之美的风尚,而我们在现实的生活中,是否有着自己的目标呢?我不知道。

牛郎和织女每年的辛苦工作,就是为了今夜的一夕相会么?这样的执着,是否值得呢?

生活的目标,生活的意义,到底是什么?

愿天下有情人常相厮守,不再因为一些莫名的原因而只能遥遥相望,甚至是劳燕分飞!

Aug 22 20:21:30 2004

2004年8月14日星期六

希腊的奥运会(@lilybbs blog)

两点感觉比较好:

开幕式很成功,也很漂亮,几乎可以用完美来形容,比以往的感觉要好,有历史感。

橄榄枝的头环和绑紧的花束都很好,很有感觉。

一切,都是底蕴


Aug 14 21:44:25 2004

2004年7月29日星期四

九华山行忆(序)(@lilybbs blog)

今日因事,心甚不平,忆前次九华之行,偶有所感,遂记之。

去九华山,是一个偶然的计划,虽然我早就知道这样一个地方了。因为我姐姐在芜湖上的大学,她们宿舍的其中一人就在九华山脚的青阳县。而我姐姐和她的关系又 很好,所以,因为姐姐的原因,我了解九华还是比较早的,上大学之后,也一直想去,苦于资金的限制,一直未能去成。02年的五一期间,因为一些原因,心情不 是很好,很想出去走走,想起九华山,就邀人同去。于是,在5月2日,我和同学aha踏上了前往九华山的汽车。

Jul 29 23:10:53 2004

2004年7月27日星期二

【转】走进新疆(@lilybbs blog)

行前准备:
证件:(身份证,学生证,边防证)、介绍信(有条件的带几张,要有五角星的的单位公章,可用于办边防证)、信用卡(新疆以工行、建行为多)。

物品:地图、绳子(晾衣服及绑东西)、垃圾袋,小锁(旅馆房间及淋浴间的衣服柜有时无锁)、钱袋(贴身,隐秘)、口罩、头巾(南疆风沙大)、太阳镜、大包 (加防雨罩,坐车包放行李舱或车顶,可以防尘防水)、睡袋(想露营的可带帐篷、防潮垫)、帽子、水壶、头灯或电筒、电池、防晒霜、唇膏、纸巾、相机、胶 卷、笔、记事本、表、小刀、手机、充电器、打火机、洗漱用品、个人食品。

衣物:新疆早晚、地域温差大,在9月热的到30多度,最冷时可达0度,御寒衣物视个人体质而定,一般冲锋衣加抓绒即可。

药物:新疆美食众多,卫生就难说,带足个人特效止泻药,如氟哌酸;长途行车,人比较累,再加点消炎感冒药;气候干燥,最好再带点眼药水。

在新疆费用/人:

火车票 200
汽车票:800
包 车:500
食 品:500
住 宿:300
门 票:400
杂 费:100
合 计:2700


注意事项:
1. 办理通行证:
一是往哈纳斯自然保护区须在布尔津县办理通行证办理,边防证的时候必须出示本人的身份证由其中一人持所有人的身份证办理即可。边防证每人两元,押金10元。办理边防证地方的就在公安局的大门的值班室里面,在内地办理的边境通行证同样有效。
二是红其拉甫,要先在喀什海关办理去塔什库尔干的边防证(到塔什库尔干的路上有检查站检查),到塔县后再到边防队换通行,办理时间:09:00-17:00,要押身份证和边防证,回来时记住取回边防证,回程检查站还要检查。

2.入疆后开始使用新疆时间(北京时间7:00=北疆时间8:00=南疆时间9:00),沿路一切有关时间问题皆要问清。本文皆采用北京时间。

行程:

9/6 T52南京21:21出发,48小时后到达乌鲁木齐。

9/8 D1:乌鲁木齐
行: 到达乌鲁木齐21:04。

住:乌市碾子沟汽车站旁的扬子江旅馆,方便便宜卫生(三人间16元/人),可免费寄存行李和洗澡(女宾:16:30-21:00;男宾:21:00-23:00);澡要洗的,以后连续几天都没得洗。
乌市碾子沟汽车站附近还有一个果品招待所,(四人间16元/人),浴室连厕所(不分男女),挺干净的,24:00前有热水。

9/9 D2:乌鲁木齐-----------布尔津

行:在乌鲁木齐碾子沟长途客运站买晚上19:00去布尔津的班车,夜班卧铺车,约13 小时,在第二天早上8:00到布县, 票价105/人。此路坐在汽车左侧,可看日落,坐右侧,可观日出。

玩:到乌市白天即可游有吃有玩的二道桥,是乌鲁木齐最出名的一个巴扎,这里有各式各样的维吾尔族手工艺品,有各式各样的新疆特产,还能品尝到各式各样的维 吾尔族食品。特别是这里的抓饭和烤梭梭肉味道更是一流;二道桥是维族的大集市,一路走可感受越发浓郁的民族风情,店铺售卖的衣服、饰物、挂毯等的颜色鲜艳 夺目却又朴实和谐;满街行人嘴里说的都是难懂的维语,游客可从中体味到不掺任何商业虚假的民族风情;干果店里便宜得诱人的葡萄干、枣干、无花果等则适用于 带到以后的旅途上品尝;不过这里顾客很多,小偷也较为猖獗,游览时一定要提高警觉;天池已被彻底商业开发,去不去无所谓。

吃: 羊肉串可能是大家都非常熟悉的新疆小吃,不过,正宗的新疆羊肉串是非常讲究的,肉要新鲜而且有肥有瘦,穿肉串的时候,一般是一片瘦肉加一片肥肉把它 们穿到铁扦上。穿好后,将它们放在炭火上烤,待肥肉开始滴油的时候,撒上盐、辣椒、孜然,把烤的羊肉串分成两份,将烤出的油和着佐料相互抹均匀,翻面再 烤,烤得肥肉成金黄色时就可以品尝了。瘦肉入口香嫩,肥肉外脆而焦,一咬一口油。
据前人介绍,要吃全疆最便宜(0.5元/串)最好的的烤羊肉串要在19:00前赶到尚未开市的五一灯光夜市(20:30开市),这家常年兴旺的羊肉串馆位于夜市第二个路口拐角处,以20串为单位购买。店内食兴很浓,令人胃口大开,可惜这次时间衔接不上,只好作罢。
抓饭,维吾尔语称“朴劳”,是新疆维吾尔、乌孜别克等民族的一种饭食,多净手抓食,故汉语称为“抓饭”。抓饭的主要原料有大米、羊肉、胡萝卜、葡萄干、洋 葱和清油,特点是油亮生辉,香气四溢,味道可口。名副其实的手抓饭仅供应至约16:00,作为午饭最好。炒得金黄的手抓饭常一整锅地置于食店门口,十分诱 人。食店提供清水作饭前洗手,店主还会热心教导吃手抓饭的正确方法,边吃边玩很是有趣,新疆各地的抓饭的做法并不完全一致,而二道桥的饭粒晶莹剔透,卖像 诱人。

住: 车上

9/10 D3:布尔津----------- 禾木

行:早上到布县后,在车站就可以联系包车(北京吉普),花4天游禾木、喀纳斯、白哈巴三个地方(1200元/4人/4天、不管司机的任何费用)准备好以后 就去办边防证,2元/人,司机可以代办,办理边防证的时候必须出示本人的身份证由其中一人持所有人的身份证办理即可。边防证每人两元,押金10元。办理边 防证地方的就在公安局的大门的值班室里面,当然,在内地办理的边境通行证同样有效。,马上可以走。
布尔津很小,仅在往布尔津河时需乘坐电动三轮车,价钱约2.00-2.5元,其余均可徒步。中午吃过饭去禾木,路途因未被开发路况较差,晚上即可到达四面环山,木屋点缀的禾木乡。

玩: 今天没的玩,要赶路,沿途有大片的向日葵和满山的各色野花. 路上有当地人卖的酸奶疙瘩与野草莓,野草莓虽小味却酸甜郁香. 禾木的山上遍地有野草莓.。

吃:中午好好吃一顿,然后在布尔津准备好三天的食品(如面和蔬菜)带在路上交食店加工,也可在乌鲁木齐买好干粮,因为哈纳斯的食物太贵了,FB的则不用那么辛苦自己背吃的;水果解饥解渴,是必备之品,沿途均是。

住:在禾木则住乡招待所(20元/人),干净卫生,每个房间备一桶清水供客人洗漱(在北疆沿途景点开发程度低,多没自来水)。也可在河边洗簌,不过注意天黑,回来的路一定要认清。

9/11 D4:禾木-----------哈纳斯

行: 中午前出发去哈纳斯。下午16:00到达哈纳斯村。

玩:早起欣赏晨雾中的禾木,之后过木桥爬上后山可俯瞰禾木如积木般的木屋。这里有遍地野草莓可采,但满山野花会弄得一身花粉,易过敏者小心。爬完山,应在 12:00前出发去喀纳斯,沿途风景比喀湖还要好,拍照要抓紧了。美丽风景有一半都是在途中,坐车时千万不要错过哦!傍晚可以在喀纳斯村旁小山坡观日落。 因为纬度高,哈纳斯的夜空非常壮观,繁星密布,可以看到许多星座,经常还能看到流星。

吃: 吃自带食品。

住:在喀纳斯应宿于离湖一两公里的木屋村庄,哈纳斯村牧民的木头房,一种原木垒起的木屋,颇有古朴的味道,男女混住,15-20元/人,但距湖边还有约40分钟步行路程。如住在湖边的度假村,每床价格则60-100元。

9/12 D5: 哈纳斯-----白哈巴

行: 上午在哈纳斯玩,下午去白哈巴。

玩:哈纳斯:喀纳斯自然保护区北接哈萨克斯坦、俄罗斯,东邻蒙古人民共和国,美丽的哈纳斯湖,蒙古语是“美丽而神秘”的意思;湖呈弯月形,面积是天山天池 的10倍,最大湖深 188.5米,它是我国内陆最深的湖泊。喀那斯湖的狭长湖体也叫六道湾,就是24公里长的湖水随着两侧的山势轻柔地绕过了六个拐弯。
喀纳斯湖四周群山环抱、峰峦叠嶂,峰顶银装素裹,森林密布、草场繁茂,山坡一片葱绿,湖面碧波荡漾,群山倒映湖中,使蓝天、白云、雪岭、青山与绿水浑然一体,湖光山色美不胜收;既具有北国风光之雄浑,又具江南山水之娇秀。
早上早点起床,秋季哈纳斯的日出时间大约在8点,此时屋外草坪水汽在阳光照到之处缓缓升起,形成晨雾,村妇则在牛群中挤牛奶,此景象原汁原味。早饭后穿过人工化的渡假区,就可到达喀湖边。哈纳斯的门票是100元,10人以上按团队七折优惠,可以凑齐10人买。
所有的车辆都必须停在保护区外的停车场内,游客要携带行李转乘保护区的专车(第一次免费)。
湖对面山顶的观鱼亭可俯瞰喀湖,那里可以完整地看清楚其中的三道拐湾,到观鱼亭的单程车票要20元,如果你喜欢徒步,还是选择走上山去爬观鱼亭,坐船 (10元/人)到湖对面,从山脚到山顶近2个小时,要爬将近四千级阶梯!沿路风景变幻不定,远处皑皑的雪山,近处金黄色的树木,山底下泛着乳白色的蓝蓝的 湖水,令人目不暇及,此段路为哈纳斯风景最佳之处。而且早晨的时候风如果静下心来,闭上眼睛,就会听到一阵阵松涛声,犹如海浪拍岸。
下山后,游客可以往月亮湾、卧龙湾,这段路步行需要大约一个半至两个小时左右;保护区的班车直达;途中沿着哈纳斯河有大片的滩涂和芦苇,风光秀丽。
你也可以乘汽艇游哈那斯湖(哈湖共有六道湾,游六道湾需150元,但你可选择去几道湾,如一道湾30元,二道湾50元,三道湾70元)。

如果晚上不走的,可以去走访蒙古族图瓦人家,图瓦属蒙古族的一支,本区及其周围是我国图瓦人的集中分布区之一;居住着一些信奉喇嘛教的蒙古族居民,他们保 留着古老、完整的部落、氏族血缘观念,强烈的民族意识和我国现存的稀有语种-图瓦语(系阿尔泰语系突厥语族);他们素以游牧狩猎为生,住房均垒木为室,屋 顶尖斜,牲畜棚圈也一概以原木围栏,即可以就地取材;图瓦人主食是肉、奶,兼面食。他们性格直爽,热情好客,待客礼仪周到、细致,宾至如归。(不要在湖畔 边找,那已是商业化的图瓦人,去卧龙湾,月亮湾等远一点的地方找淳朴的);晚上湖畔广场还有民族歌舞晚会。

吃:吃自带食品,若有机会可以尝尝哈纳斯湖里的鱼,那可是鲜美至极。

住:晚上借宿在白哈巴村民自办的招待所,住宿条件较差,睡通铺,没有自来水,更加没有厕所。可以到河边梳洗。
也可在哈巴河宾馆四人普间,35元/床,公共浴室24小时热水供应.

9/13 D6: 白哈巴-----布尔津

行:中午回布尔津,下午到。在客运站买到第二天早去乌尔禾的汽车票。

玩:白哈巴可能是整个哈纳斯风景最美的地方:哈萨克人的小木屋沿哈巴河谷而建,每家门前都种有鲜艳的花草,周围全部被大片的白桦树所包围。刚刚转黄的白桦 树叶在阳光下透出亮丽的金黄,早晨的薄薄雾气,缕缕晨光;午间的蓝天白云,潺潺流水;傍晚的村庄阡陌,万道霞光;显现出一种恍如世外桃源一般的山水田园风 光。
从白哈巴回布尔津路上可见到壮观的中俄界河,临近布尔津还可看到巨大的风力发电风车群布尔津的河堤夜市后面可以看到额尔齐斯河,在布尔津县城的西边,我国 唯一一条流入北冰洋的河,傍晚的景色很美,额尔齐斯河日落为全疆最为美丽的日落,秋天河水很浅,河后是一片没有穷尽的白桦林。

吃:晚上到河堤夜市尝小吃,那里的酸奶子味道很不错,还有烤鱼、烤肉。

住:布尔津住,车站旅馆是较好的选择(10元/人);洗澡则要到市场内的澡堂2元/人,常开至22:00. 记得在布尔津洗澡。

9/14 D7 布尔津-----乌尔禾------奎屯

行: 9:00从布尔津出发到15:00可达乌尔禾,当晚23:00左右坐车出发去奎屯。

玩:刚抵乌尔禾时不应急于游览,应先去市场采购全疆最好最便宜的西瓜(0.25元/公斤)、比蜜还甜的哈密瓜(1元/个)。约19:00雇能坐六人的三轮 车(20元包来回)去魔鬼城,30分钟可到;其实中国有很多个地方有魔鬼城地貌,例如奇台和敦煌,但是以乌尔禾的魔鬼城最出名,魔鬼城是典型的风蚀地貌, 其怪异复杂的地形,恐怖凌厉的风声得名。 

   魔鬼城只有在落日前和日出时才显得恐怖神秘,在黄昏中还很壮观很美;远眺风城,宛若中世纪的一座古城堡,但见堡群林立,大小相间,高矮参差,错落重 迭,给人以凄森苍凉恐怖之感,故又有“魔鬼城”之称。喜欢石头的朋友可在此地捡到全疆最漂亮的石头(此处石头大小不一,五彩班驳,十分特别),记得带小刀 去撬几块留念;日落前要找回司机离开,否则天黑后会迷路。

吃:
住: 车上。

9/15 D8 奎屯-------赛里木湖

行:早上5:00左右到奎屯,然后转车去赛里木湖边40元/人,下午到;上车时注意告诉司机是去赛里木湖,而非三台镇,地名为松树头。

玩:赛里木湖蒙语称“赛里木淖尔”,意为“山脊梁上的湖”。赛湖水面坦荡,碧绿澄清,视野开阔,水禽群集;四周群山巍峨,幽林秀草漫野;这里青山如洗,水碧如染,草原上的万紫千红,云影霞光,一起汇聚在湖水里。
赛湖长期以来还流传着湖怪、湖心风洞、漩涡与海底磁场等传说,这给美丽的赛湖又蒙上了一层极富想象力的神秘面纱。赛湖之滨有大量草原先民的历史遗存:岩画、乌孙古墓群、寺庙遗址、鄂博、碑刻、古驿站遗址……还有许多优美的神话传说。
赛里木湖是骑马最便宜最好的地方,如果你在七月去,羊肥马壮,一年一度的那达慕大会,都要把博尔塔拉草原上具有的欢乐集中到这湖畔;当著名的赛马、摔跤、射箭三艺比赛开始的时候,欢歌和马嘶混在一起,笑脸和红霞映在一起,浪花和鲜花开在一起,整个草原都会沉醉在欢乐里。
从赛里木湖至伊宁途经当地人十分推崇的果子沟,景色主要是峡谷风光,多树,多水,秀、奇、幽,但客观来说,这种景色中国中部多的是,只因新疆到处是荒漠才显其特别。
如果说哈纳斯是一个世外桃源,那赛里木就象一片心灵的港湾,傍晚躺在湖边的草地上,呼吸着自由清新的空气。

吃:在赛里木湖一般在少数民族的作坊式小饭馆吃饭,但价格较贵而不好吃。 

住:因为赛里木湖住宿条件较差,一般都是一些流动的毡房或蒙古包是80元一晚,大约能住六个人,天气冷的话还有火炉提供,不过只有一点热水供应,这里的毡房都是季节性的,十月中旬或者天气转冷以后,这里就没有住宿的地方了。

9/16 D9 赛里木湖------伊宁

行:中午从塞湖出发,可在公路边拦车去伊宁(15元/人),经4小时到伊宁。

玩:到伊犁河大桥看日落,桥上的婚礼浪漫而又富传统特色。当地人有一个习惯,就是结婚那一天新人要到伊宁大桥步行一段路,仪式举行的时间一般在黄昏,落日下,一对新人的亲戚朋友,簇拥着新人,沿着大桥一边弹奏着乐器,一边载歌载舞,非常有趣。

吃:在招待所楼下的饭馆就可吃到40元/份的足够五人享用的大盘鸡;而影剧院夜市正中的烤羊排串肥瘦适中,与烤羊肉串的风味又有不同;伊宁与新疆其它地方 的抓饭完全不同,抓饭颗粒饱满,比较松软,特别的好吃;早饭也可很丰盛,小吃店的羊肉包、炸饼和豆浆都很好,馕店新鲜的烤馕也不错。

住:广源招待所(走入车站对面右边的小马路约30米,可讲价至10元/人)干净、可洗澡。

  
9/17 D10 伊宁-------巴音布鲁克

行: 早上从伊宁到巴音布鲁克,约361公里,下午到巴音布鲁克镇。

玩:伊宁到巴音布鲁克期间要路过那拉提草原和翻越那拉提达坂,那拉提达坂路途险峻,常年都有风雪,途中数处更可见全国独一无二的“雪山隧道”。

吃:这里的野菜、山菇和河鲜的味道特别鲜美;在巴音布鲁克可挑当地最大最旺的食店(门前停车最多者便是),这里的羊肉汤和手抓饭都可以添(免费)。

住:巴音布鲁克由于交通不便,很小,同时游客也较多,因此这里的消费物价水平较高;天河源饭店每人要30元一晚,没有自来水,每间房只有门口的一桶冷水供应;电视塔宾馆因仅需10元/人,可免费洗热水澡,老板和服务员都很和善。

9/18 D11 巴音布鲁克-------库车

行:早上去天鹅湖,下午回到巴音布鲁克镇,搭车到库车。巴音布鲁克镇--库车路经铁里买德达坂、大小龙池、库车河峡谷、赤沙山、库车达坂,路途险峻,一般在十月中旬以后即不可通行。

玩:玩巴音布鲁克草原和开都河,巴音布鲁克草原是全国第二大草原,盆地四周的群山海拔超过4000米以上,山顶终年白雪皑皑,冰川晶莹。“巴音布鲁克”为 蒙语,就是丰富的山泉之意。开都河蜿蜒曲折在盆在中穿过形成一个长30千米,宽约 10千米,总面积 1370多平方千米的湖沼星罗棋布的水域,成为我国最大的天鹅繁殖、栖息地--巴音布鲁克天鹅湖。
天鹅湖(在和静县巴音乌鲁乡西南2公里); 由巴音布鲁克到天鹅湖还有30多公里的土路,路况非常的差,偶尔可见水鸟飞翔、起落,中秋以后,天鹅逐渐南 迁,10月以后则绝迹矣。在保护区的了望塔上可用望远镜(要租,5元/人)远观;明信片上线条极美的经典S型河流在天鹅出现的相反方向。 

吃:
住:库车交通宾馆普通双人间50元/间;龟兹宾馆,四人间(30/床),可以洗澡。

9/19 D12 库车------喀什

行:晚上到库车,早上坐05:18坐火车去喀什(887次空调快速98/座)。火车站离库车县城挺远的,不过有公共汽车连接两地,2元一人。下午14:25到喀什。

玩:由于库车景点分布较远需包车,门票也贵,看石窟还是留着去敦煌了,所以此次放弃库车,在库车中转去喀什;有兴趣的朋友可以一游。
喀什是古丝绸之路的重要枢纽,曾有“不到喀什就等于未到新疆”一说。
著名的景点有新疆最大的清真寺——艾提尕清真寺,阿帕霍加墓(香妃墓)、千年佛教遗址——莫尔佛塔、大巴扎(喀什中西亚国际贸易市场)。
这是一座民族风情一流的大城市(新疆第二大城市),满街美若天仙的维族少女和小驴上的悠然自得的"阿凡提"足以令游人驻足;最好是周五早上到喀什,立即去 喀什地区边防局办往塔县的边防证(周六日早上也可,办边防证地点:1.喀什市公安局:人民东路64号0998-2822048(3041).2.喀什边防 支队:色满路64号0998-2825201),自己办证只需10元,而色满宾馆代办则要40元;星期五下午赶去1:00开始的大礼拜。
 艾提尕尔清真寺是新疆地区伊斯兰著名清真寺,位于喀什市中心解放路,是喀什古城的象征,为中国最大的一座清真寺,迄今已有 500多年的历史。斯居玛日(星期五)礼拜者常可达六七千人,古尔邦节多达10万人。大礼拜之后,穆斯林群众在艾提尕尔广场上跳起原始古老的“萨满”舞, 狂欢通宵达旦,全寺布局合理,建筑工艺精细,装饰古朴典雅,风格独特,是我国阿拉伯式伊斯兰建筑的典范。,每周五下午1:00便是其举行大礼拜的时间,艾 提尕清真寺白天收门票6元,妇女未经同意,不得进入清真寺。

吃:喀什的水果闻名于世,而其中又以无花果、石榴、伽师瓜和巴旦木杏最出名。这里的石榴巨大无比,为别处所不曾见;莫合烟是新疆的一大特产,特别的呛人,甚至可以用来熏蚊子,吸烟人士不妨一试。

住:色满宾馆是喀什最著名的宾馆,那里有多档次的房间可以选择,是自助旅行者的大本营。喀什车站对面的天南饭店一号楼(三号楼较贵),4人间10元/人,可免费洗澡。

9/20 D13 喀什

玩: 上午游香妃墓、下午去大巴扎。
阿帕霍加墓始建于1640年,据说墓内葬有同一家族的五代72人(实际只见大小58个墓穴)。第一代是伊斯兰著名传教士玉素甫霍加。他死后, 其长子阿帕克霍加继承了父亲的传教事业,成了明末清初喀什伊斯兰教“依禅派”著名大师,并一度夺得了叶尔羌王朝的政权。他死于1693年,亦葬于此,所以 后来人们便把这座陵墓称为“阿帕克霍加墓”。传说,埋葬在这里的霍加后裔中,有一个叫伊帕尔汗的女子,是乾隆皇帝的爱妃,由于她身上有一股常有的沙枣花 香,人们便称她为“香妃”。香妃死后其尸体护送回喀什,并葬于阿帕霍加墓内,因而人们又将这座陵墓称做 “香妃墓”。
不过据考证,香妃并没有葬在这里,她确切的葬地是在河北遵化清东陵的裕妃园寝。香妃墓(市内20路车1元到达),门票15元;附的有维吾尔族民居大片整齐的乡村院落,保留了完好的民族特色。
东巴扎和艾提尕尔巴扎更是游客不可不去之处。东巴扎是全疆最大的巴扎,它有点像内地的大型商贸集市,除了贩卖各色各样的衣物、服饰和手工艺品的中西亚国际 贸易市场以外,还有专门买卖牛羊的羊市和牛市。每个星期六和星期天是大巴扎,周围各地的群众都会蜂拥而来,巴扎里面人群川流不息,热闹非凡。平时则冷清得 多,生意对象也以城市居民和游客为主,很多店铺甚至只在周末和周日才开门营业。
不要在巴扎里面购买"英吉沙"小刀,在艾提尕尔清真寺附近的艾提尕尔巴扎有很多刀具制作工厂,那里要便宜得多。至于艾提尕尔巴扎,则主要摆卖食品和手工艺 品,游客可以在晚上来这里品尝各种特色民族小吃。不过需要注意的是,与乌鲁木齐不同,喀什的夜市收摊的时间较早,一般晚上10半点以后大部分的店铺就都关 门了。

9/21 D14 喀什--塔什库尔干

行:喀什—卡拉库力湖—塔什库尔干(9个小时),.早上:9:00出发,14:30到达卡湖33.4元,卡湖--塔什库尔干90公里,搭出租车 60元,每天下午有长途车路过,但时间相差很大.

玩:卡湖可以说是一个登山基地,水呈蓝黑色,故称卡拉库里,意为“黑湖”;湖周群山环绕,湖中雪峰倒影,水光潋滟,其正前方是公格尔九别山,右侧是霸气十 足是“雪山之父”慕士塔格峰,卡湖海拔3600KM,塔县更高,喀湖上慕士塔格峰的倒影是新疆的一绝。虽然多数情况下喀湖的天气都很好,但是由于围绕慕士 塔格峰的云雾较多,想要看到清晰的雪峰倒影还真的不容易;想住的朋友可以中途下车住一晚,第二天在路边拦车去塔县。

塔什库尔干县位于喀什以南304公里的帕米尔高原上,沿路是看不尽的高原风光:蔚蓝的天空、高耸的雪山令人心血沸腾。红旗拉甫是中国西南最出名的一个口 岸,它距离塔什库尔干才126公里,去红旗拉甫必须办理边防证,如果游客出发之前没有办理,可以在塔什库尔干办理,非常方便,不过听说节假日不办公。
石头城地处古丝绸之路中道和南道的交汇要冲,汉代时,这里是西域 36国之一的蒲犁国王城;这里视野开阔,是拍摄雪山高原的好地方,石头城就在塔县城东偏北侧,,很近,完全可以步行去。
住: 喀湖边非常冷,四人普间50元/床,,游客最好自备睡袋和食品。
塔什库尔干粕米尔宾馆20元/人的3人间,有卫生间;交通宾馆(10元/人)。

吃:卡湖的饭很贵,还是带干粮吃吧!餐厅免费供应开水。

9/22 D15 塔什库尔干----红其拉普----塔什库尔干

行:包车去红其拉甫国界碑(300/天),当天回塔什库尔干。

玩:红其拉甫口岸国界碑,是中国和巴基斯坦的交界处,这里海拔达4700米,有高山反应的游客要格外注意,这条丝路再往南行,翻过红其拉甫达坂,就到达巴 基斯坦北部地区,如翻越明铁盖达阪,即可进入阿富汗境内,沿途的风光无限,巍峨的雪峰就在跟前,抓起相机随手一按快门,都是一张不错的风景照。去红其拉甫 界碑要一天时间来回。在界碑能碰到各色人种,以感受无国界,无歧视的美好时光。路上离界碑越近越冷,甚至下雪。

住: 塔什库尔干

吃:

9/23 D16 塔什库尔干----喀什----和田

行:早8:00去喀什,晚上到喀什,买票去和田74元/人,喀什21:00的车至和田是早上8:00,行车时间大概10-12小时。

住: 车上

吃:

9/24 D17 和田---库尔勒

行:早上8:00到和田,立即买好傍晚和田到库尔勒的汽车卧铺票,经此路是为了穿越沙漠公路,以不枉遍游新疆。

玩:和田是南疆重镇,较喀什更加古朴,民俗风情也更加完整和浓郁;和田有三宝——玉石、丝绸、地毯;有时间可以包车50元到核桃树王及无花果树王处参观, 共用3小时,无花果树王距今400多年历史,每年挂果15000余,核桃树王已有500多年历史,躯干要5个成年人才能抱拢。傍晚能看到塔克拉玛干沙漠, 死亡之海,中国第一大沙漠,世界第二大,这里有看不尽的茫茫大漠,有彻夜不息的油田之火,还有大片千奇百怪、虬韧坚拔的胡杨林。
沙漠公路全长500多公里,横穿塔克拉玛干沙漠,每一公里沙漠公路的造价都极其昂贵,栅栏和草方格随沙丘起伏绵延,犹如一条千里锁链牢牢缚住了黄色巨龙, 雄伟壮观的气势动人心魄,为塔克拉玛干大沙漠增添了一道独特的风景线。途中只有塔中油田一个可以加油和补给的地方。游客一般选择在此过夜:黄昏,可以观 赏;“大漠孤烟直,长河落日圆”的美景;早晨,可以远眺一轮红日从茫茫大漠中冉冉升起。
     
住: 车上
吃:

9/25 D18 库尔勒

行: 上午到库尔勒市购当晚22:20,K884次往吐鲁番的火车票。

玩:有空的话可以去博斯腾湖玩,距离库尔勒市70公里,博湖是中国最大的内陆淡水湖,有点像白洋淀,如果你长于江南,如果你去过塞里木或哈纳斯,那我认为可以不用再去;
湖最美的时候是黄昏和早晨,圆圆的太阳倒影在静静的水中,密密的芦苇在温和的阳光下散发出微微的金光,远处杨柳依依,炊烟袅袅。

吃:晚上在库尔勒市区的夜市上品尝博斯腾湖产的烤五道黑鱼。
住:车上

9/26 D19 库尔勒---吐鲁番

行:早上06:10到,吐鲁番下车的地方不过是大河沿镇,还得再坐约2个小时汽车到吐鲁番。

玩:包车吐鲁番一日游50元/人;交河故城{西12公里},坎儿井{西8公里},火焰山{东37公里},柏孜克里克千佛洞{东43公里},葡萄沟{北10公里}。
交河故城曾是车师前部王国的国部,为唐代遗址,为一河心洲,状如柳叶,地势十分险要,特别是黄昏日落的时候,近处残墙败瓦,荒草凄凄,远处是高大的废弃佛塔、城楼,景致独特,值得一游。
柏孜克里克千佛洞在火焰山峡谷之中,石窟位于山崖之下,对面就是红色高大的火焰山山体。千佛洞据说共有80多个石窟,是回鹘文化的精品。可惜现在大部分的石窟都已经为人为所破坏,残余的壁画在经过千年风雨的侵蚀之后,只剩下斑驳的痕迹依稀可辨。
火焰山山体雄浑曲折,主要受古代水流的冲刷,山坡上布满道道冲沟。山上寸草不生,基岩裸露,且常受风化沙层覆盖。盛夏,在灼热阳光照射下,红色山岩热浪滚滚,绛红色烟云蒸腾缭绕,恰似团团烈焰在燃烧。
吐鲁番14:00-18:00最热最晒,避之则吉。每年从8月25日始的一周在吐鲁番有盛大的葡萄节,如有时间应算准时间去。

住:住在吐鲁番至少要有风扇,而电影院对面的军区属下的兰新旅馆则比较好,且讲价后可10元/人。由于天气过于炎热建议,在吐鲁番尽量少呆些时间。

吃:电影院广场晚上的夜市既有熟食又有各种又便宜又好吃的水果;此地葡萄干仅7-8元/公斤。

9/27 D20 吐鲁番---哈密

回家的到乌鲁木齐,吐鲁番到乌鲁木齐的班车很多,3小时;想玩的可以继续去敦煌一带玩。


Jul 27 21:50:49 2004

2004年7月24日星期六

今天遇到一个可爱的小姑娘(@lilybbs blog)

下出租车的时候,不小心把钱包掉在地方了,还没注意的时候,旁边一个小姑娘就替我捡起来了,“叔叔,你的钱包”。那一瞬间,感觉真是很不错,多可爱的小姑娘啊,天真、活泼而又纯洁。我急忙真诚道谢。

愿上天保佑她健康成长!


Jul 24 13:43:54 2004

2004年7月5日星期一

希腊的神话,雷哈格尔的又一次奇迹!(@lilybbs blog)

还记得凯泽斯劳腾的神话么?

还有,这样的结果,或多或少打消了大部分人关于幕后操作的猜测!


Jul 5 04:36:52 2004

2004年7月3日星期六

最近真忙(@lilybbs blog)

都不知道在忙些什么,过去的一个月。今天买了7月份的CNG,才惊醒6月份的CNG还没看完呢,

忙阿忙,不知道这个月会怎么样啊。

Jul 3 19:08:57 2004

2004年7月2日星期五

克里纳猪头,同情捷克,恭喜希腊(@lilybbs blog)

只能说很遗憾,捷克人的努力,在克里纳的严厉面前,变得缩手缩脚。而内德韦德的提前离场,为这场比赛提前标注了一个不良的信号。

希腊人很努力,也很运气,在结束的时候给了捷克人致命一击,没有给捷克人留下任何反扑的机会。

也许,点球才是更好的结局。

最好,让克里纳赶快退休吧,太自以为是了。


Jul 2 05:01:10 2004

2004年6月30日星期三

怀念家驹(@lilybbs blog)

这么多年过去了,他的歌声还是不会断的。
永远的家驹,在遥远的paradise里,祝你愉快。


Jun 30 18:29:34 2004

2004年6月28日星期一

捷克人轻松取胜,丹麦人沮丧回家(@lilybbs blog)

真是轻松阿,捷克人赢得,布鲁克纳不愧是大师记得指挥!

Jun 28 04:41:07 2004

2004年6月22日星期二

【转】jsp文件输出(@lilybbs blog)

byte[] bytes = downloadApptDAO.getPdfFile(id);

if (bytes == null)
return;

logger.debug("write pdf file to response, size = " + bytes.length)
;

HttpServletResponse response = reqRuntime.getHttpResponse();
response.reset();
response.setContentType("application/pdf");
response.setContentLength(bytes.length);

ServletOutputStream servletOutputStream = response.getOutputStream
();
servletOutputStream.write(bytes);

servletOutputStream.flush();
servletOutputStream.close();


Jun 22 22:24:31 2004

【转】如何用jsp生成excel文件?(@lilybbs blog)

介绍:
Jakarta_POI 使用Java读写Excel(97-2002)文件,可以满足大部分的需要。
因为刚好有一个项目使用到了这个工具,花了点时间顺便翻译了一下POI本身带的一个Guide.有一些节减和修改,希望给使用这个项目的人一些入门帮助。
POI 下面有几个自项目:HSSF用来实现Excel 的读写.以下是HSSF的主页
http://jakarta.apache.org/poi/hssf/index.html
下面的介绍是基于以下地址的翻译:
http://jakarta.apache.org/poi/hssf/quick-guide.html
目前的版本为1.51应该是很长时间之内的一个稳定版,但HSSF提供的Sample不是基于1.51所写,所以使用的时候需要适当的注意.
其实POI下面的几个子项目侧重不同读写 Word 的HDF正在开发当中.
XML下的FOP(http://xml.apache.org/fop/index.html可以输出pdf文件,也是比较好的一个工具

目录:
创建一个workbook
创建一个sheet
创建cells
创建日期cells
设定单元格格式

说明:
以下可能需要使用到如下的类
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;

创建workbook

HSSFWorkbook wb = new HSSFWorkbook();
//使用默认的构造方法创建workbook
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
//指定文件名
wb.write(fileOut);
//输出到文件
fileOut.close();

创建一个sheet

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet1 = wb.createSheet("new sheet");
//workbook创建sheet
HSSFSheet sheet2 = wb.createSheet("second sheet");
//workbook创建另外的sheet
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();

创建cells
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("new sheet");
//注意以下的代码很多方法的参数是short 而不是int 所以需要做一次类型转换
HSSFRow row = sheet.createRow((short)0);
//sheet 创建一行
HSSFCell cell = row.createCell((short)0);
//行创建一个单元格
cell.setCellValue(1);
//设定单元格的值
//值的类型参数有多中double ,String ,boolean,
row.createCell((short)1).setCellValue(1.2);
row.createCell((short)2).setCellValue("This is a string");
row.createCell((short)3).setCellValue(true);

// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();

创建日期cells
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("new sheet");

HSSFRow row = sheet.createRow((short)0);

HSSFCell cell = row.createCell((short)0);
//设定值为日期
cell.setCellValue(new Date());

HSSFCellStyle cellStyle = wb.createCellStyle();
//指定日期显示格式
cellStyle.setDataFormat(HSSFDataFormat.getFormat("m/d/yy h:mm"));
cell = row.createCell((short)1);
cell.setCellValue(new Date());
//设定单元格日期显示格式
cell.setCellStyle(cellStyle);

FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();


设定单元格格式
单元格格式的设定有很多形式包括单元格的对齐方式,内容的字体设置,
单元格的背景色等,因为形式比较多,只举一些例子.以下的例子在
POI1.5中可能会有所改变具体查看API.
..........
// Aqua background
HSSFCellStyle style = wb.createCellStyle();
//创建一个样式
style.setFillBackgroundColor(HSSFCellStyle.AQUA);
//设定此样式的的背景颜色填充
style.setFillPattern(HSSFCellStyle.BIG_SPOTS);

//样式的填充类型。
//有多种式样如:
//HSSFCellStyle.BIG_SPOTS
//HSSFCellStyle.FINE_DOTS
//HSSFCellStyle.SPARSE_DOTS等
style.setAlignment(HSSFCellStyle.ALIGN_CENTER );
//居中对齐
style.setFillBackgroundColor(HSSFColor.GREEN.index);
//设定单元个背景颜色
style.setFillForegroundColor(HSSFColor.RED.index);
//设置单元格显示颜色
HSSFCell cell = row.createCell((short) 1);
cell.setCellValue("X");
cell.setCellStyle(style);

Jun 22 20:31:29 2004

【转】MICROSOFT EXCEL FILE FORMAT(@lilybbs blog)

MICROSOFT EXCEL FILE FORMAT

Microsoft Excel is a popular spreadsheet. It uses a file format called BIFF (Binary File Format). There are many types of BIFF records. Each has a 4 byte header. The first two bytes are an opcode that specifies the record type. The second two bytes specify record length. Header values are stored in byte-reversed form (less s ignificant byte first). The rest of the record is the data itself (Figure 2-1).

Figure 2-1. BIFF record header.
| Record Header | Record Body
Byte Number | 0 1 2 3 | 0 1 ...
-----------------------------------
Record Contents | XX | XX | XX | XX | XX | XX | ...
-----------------------------------
| opcode | length | data

Each X represents a hexadecimal digit Two X's form a byte. The least significant (low) byte of the opcode is byte 0 and the most significant (high) byte is byte 1. Similarly, the low byte of the record length field is byte 2 and the high byte is byte 3.

BOF (Beginning of File)
The first record in every spreadsheet is always of the BOF type (Figure 2-2).

Figure 2-2. BOF record.
| Record Header | Record Body |
Byte | 0 1 2 3 | 0 1 2 3 |
-----------------------------------------
Contents | 09 | 00 | 04 | 00 | 02 | 00 | 10 | 00 |
-----------------------------------------
| opcode | length | version | file |
| | | number | type |
The first two bytes, arranged with the low byte first, show that the opcode for BOF is 09h. The second two bytes indicate that the record body is 4 bytes long. The first two bytes of the body are the version number (2 for the initial version of Excel). The last two bytes are the file type. Type 10h is a worksheet file.

Relating Spreadsheet Cells to Record Data Bytes A spreadsheet appears on a screen or printout as a matrix of rectangular cells. Each column is identified by a letter at its top, and each row is identified by a number. Thus cell A1 is in the first column and the first row. Cell C240 is in the third column and the 240th row. This scheme identifies cells in a way easily understood by people. However, it is not particularly convenient for computers, as they do not handle letters efficiently. They are best at dealing with binary numbers. Thus, Excel stores cell identifiers as binary numbers, that people can read as hexadecimal. The first number in the system is 0rather than 1.
Figure 2-3, which shows the form of an INTEGER record, illustrates the storage
of column
and row information.

Figure 2-3. INTEGER record.
| Record Header | Record Body
Byte | 0 1 2 3 | 0 1 2 3 4 5 6 7 8 |
------------------------------------------------------------------
Value | 02 | 00 | 09 | 00 | 00 | 00 | 02 | 00 | 00 | 00 | 00 | 39 | 00 |
------------------------------------------------------------------
| opcode | length | row | column | rgbAttr | w |
Opcode 2 indicates an integer record. The length bytes show that the record b
ody is 9
bytes long. Row 0 in the body corresponds to spreadsheet row 1. Row 1 corres
ponds to
spreadsheet row 2, and so on. Column 2 corresponds to spreadsheet column C.
Thus,
Figure 2-3 deals with cell C1. The next three bytes, labeled "rgbAttr," speci
fy cell
attributes (Table 2-3). The final pair of bytes, (labeled "w") holds the inte
ger's
value. Here it is 39H or 57 decimal. Thus the record specifies that cell C1
of the
spreadsheet contains an integer with the value 57.

Standard File Record Order

Excel worksheet files have each record type in a predetermined position. A fi
le need
not have all types, but the ones that are present are always be in the same or
der.

Table 2-1 lists the record types for Excel document (spreadsheet) files, in th
e order
they would appear in a BIFF file. Table 2-2 lists the types in opcode order.

Several record types in a BIFF file, namely, ROW, BLANK, INTEGER, NUMBER, LABE
L,
BOOLERR, FORMULA, and COLUMN DEFAULT, describe the contents of a cell. These
records
contain a 3 byte attribute field labeled "rgbAttr". The following table descr
ibes how
the bits in the field correspond to cell attributes.

Table 2-1. Cell Attributes

Byte Offset Bit Description Contents

0 7 Cell is not hidden 0b
Cell is hidden 1b
6 Cell is not locked 0b
Cell is locked 1b
5-0 Reserved, must be 0 000000b
7-6 Font number (4 possible)
5-0 Cell format code
2 7 Cell is not shaded 0b
Cell is shaded 1b
6 Cell has no bottom border 0b
Cell has a bottom border 1b
5 Cell has no top border 0b
Cell has a top border 1b
4 Cell has no right border 0b
Cell has a right border 1b
3 Cell has no left border 0b
Cell has a left border 1b
2-0 Cell alignment code
general 000b
left 001b
center 010b
right 011b
fill 100b
Multiplan default align. 111b
The font number field is a zero-based index into the document's table of fonts
. the
cell format code is a zero-based index into the document's table of picture fo
rmats.
There are 21 different standard formats. Additional custom formats may be def
ined by
the user. See the FONT and FORMAT record descriptions form additonal details.


Table 2-2. Excel Record Type in Order of Appearance

Record Type Opcode (Hexadecimal)

BOF 09
FILEPASS 2F
INDEX 0B
CALCCOUNT 0C
CALCMODE 0D
PRECISION 0E
REFMODE 0F
DELTA 10
ITERATION 11
1904 22
BACKUP 40
PRINT ROW HEADERS 2A
PRINT GRIDLINES 2B
HORIZONTAL PAGE BREAKS 1B
VERTICAL PAGE BREAKS 1A
DEFAULT ROW HEIGHT 25
FONT 31
FONT2 32
HEADER 14
FOOTER 15
LEFT MARGIN 26
RIGHT MARGIN 27
TOP MARGIN 28
BOTTOM MARGIN 29
COLWIDTH 24
EXTERNCOUNT 16
EXTERNSHEET 17
EXTERNNAME 23
FORMATCOUNT 1F
FORMAT 1E
NAME 18
DIMENSIONS 00
COLUMN DEFAULT 20
ROW 08
BLANK 01
INTEGER 02
NUMBER 03
LABEL 04
BOOLERR 05
FORMULA 06
ARRAY 21
CONTINUE 3C
STRING 07
TABLE 36
TABLE2 37
PROTECT 12
WINDOW PROTECT 19
PASSWORD 13
NOTE 1C
WINDOW1 3D
WINDOW2 3E
PANE 41
SELECTION 1D
EOF 0A

Table 2-3. Excel Record Types in Opcode Order

Record Type Opcode (hexadecimal)

DIMENSIONS 00
BLANK 01
INTEGER 02
NUMBER 03
LABEL 04
BOOLERR 05
FORMULA 06
STRING 07
ROW 08
BOF 09
EOF 0A
INDEX 0B
CALCCOUNT 0C
CALCMODE 0D
PRECISION 0E
REFMODE 0F
DELTA 10
ITERATION 11
PROTECT 12
PASSWORD 13
HEADER 14
FOOTER 15
EXTERNCOUNT 16
EXTERNSHEET 17
NAME 18
WINDOW PROTECT 19
VERTICAL PAGE BREAKS 1A
HORIZONTAL PAGE BREAKS 1B
NOTE 1C
SELECTION 1D
FORMAT 1E
FORMATCOUNT 1F
COLUMN DEFAULT 20
ARRAY 21
1904 22
EXTERNNAME 23
COLWIDTH 24
DEFAULT ROW HEIGHT 25
LEFT MARGIN 26
RIGHT MARGIN 27
TOP MARGIN 28
BOTTOM MARGIN 29
PRINT ROW HEADERS 2A
PRINT GRIDLINES 2B
FILEPASS 2F
FONT 31
FONT2 32
TABLE 36
TABLE2 37
CONTINUE 3C
WINDOW1 3D
WINDOW2 3E
BACKUP 40
PANE 41

Worksheet Record Types in Opcode Order

The following section lists all record types in opcode order. It gives a spec
ification
and byte-by-byte breakdown of each type. Note that Excel terminology refers t
o
spreadsheets or worksheets as "documents."

DIMENSIONS 00h 0d

Record Type: DIMENSIONS
Description: Entire dimensions or range of a spreadsheet
Record Body Length: 8 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 First row
2-3 Last row plus 1
4-5 First column
6-7 Last column plus 1
Note: The last row and column in the record are both one greater than the high
est
numbered occupied ones.

BLANK 01h 1d

Record Type: BLANK
Description: Cell with no formula or value
Record Body Length: 7 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Row
2-3 Column
4-6 Cell attributes (rgbAttr) (Table 2-3)

INTEGER 02h 2d

Record Type: INTEGER
Description: Constant unsigned integer
Record Body Length: 9 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Row
2-3 Column
4-6 Cell attributes (rgbAttr) (Table 2-3)
7-8 Unsigned integer value (w)

NUMBER 03h 3d

Record Type: NUMBER
Description: Constant floating point number
Record Body Length: 15 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Row
2-3 Column
4-6 Cell attributes (rgbAttr) (Table 2-3)
7-14 Floating point number value (IEEE format, see Appendix A
)

LABEL 04h 4d

Record Type: LABEL
Description: Constant string
Record Body Length: 8 to 263 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Row
2-3 Column
4-6 Cell attributes (rgbAttr) (Table 2-3)
7 Length of string
8-263 ASCII string, 0 to 255 bytes long

BOOLERR 05h 5d

Record Type: BOOLERR
Description: Boolean constant or error value
Record Body Length: 9 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Row
2-3 Column
4-6 Cell attributes (rgbAttr) (Table 2-3)
7 Boolean or error value
Boolean
true 1
false 0
Error
#NULL! 0
#DIV/0! 7
#VALUE! 0Fh
#REF! 17h
#NAME? 1Dh
#NUM! 24h
#N/A 2Ah
8 Specifies Boolean or error
Boolean 0
Error 1

FORMULA 06h 6d

Record Type: FORMULA
Description: Name, size, and contents of a formula cell
Record Body Length: 17-272 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Row
2-3 Column
4-6 Cell attributes (rgbAttr) (see Table 2-3)
7 Current value of formula (IEEE format, see Appendix A)

15 Recalc flag
16 Length of parsed expression
17 Parsed expression
If a formula must be recalculated whenever it is loaded, the recalc flag (byte
15) must
be set. Any nonzero value is a set recalc flag. However, a flag value of 3 i
ndicates
that the cell is a part of a matrix, and the entire matrix must be recalculate
d. Bytes 7
through 14 may contain a number, a Boolean value, an error code, or a string.
The
following tables apply.
Case 1: Bytes 7 - 14 contain a Boolean value.
Byte Number Byte Description Contents (hex)
7 otBool 1
8 Reserved 0
9 Boolean value
10-12 Reserved 0
13-14 fExprO FFFFh
Case 2: Bytes 7 - 14 contain an error code.
Byte Number Byte Description Contents (hex)
7 otErr 2
8 Reserved 0
9 error code
10-12 Reserved 0
13-14 fExprO FFFFh
Case 3: Bytes 7 - 14 contain a string.
Byte Number Byte Description Contents (hex)
7 otString 0
8-12 Reserved 0
13-14 fExprO FFFFh
The string value itself is not stored in the field, but rather in a separate r
ecord of
the STRING type.

STRING 07h 7d

Record Type: STRING
Description: Value of a string in a formula
Record Body Length: variable
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0 Length of the string
1-256 (max) The string itself
The STRING record appears immediately after the FORMULA record that evaluates
to the
string, unless the formula is in an array. In that case, the string record im
mediately
follows the ARRAY record.

ROW 08h 8d

Record Type: ROW
Description: Specifies a spreadsheet row
Record Body Length: 16 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Row number
2-3 First defined column in the row
4-5 Last defined column in the row plus 1
6-7 Row height
8-9 RESERVED 0
10 Default cell attributes byte
Default attributes 1
Not default attributes 0
11-12 Offset to cell records for this row
13-15 Cell attributes (rgbAttr) (see Table 2-3)

BOF 09h 9d

Record Type: BOF
Description: Beginning of file
Record Body Length: 4 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Version number
Excel 2
Multiplan 3
2-3 Document type
worksheet 10h
chart 20h
macro sheet 40h
If bit 8 of the version number byte pair is high (mask with 0100h to find out)
, the BIFF
file is a Multiplan document.

EOF 0Ah 10d

Record Type: EOF
Description: End of file
Record Body Length: 0 bytes
The EOF record is the last one in a BIFF file. It always takes the form 0A000
000h.

INDEX 0Bh 11d

Record Type: INDEX
Description: Contains pointers to other records in the BIFF file, and defines
the range
of rows used by the document. It is used to simplify searching a file for a p
articular
cell or name.
Record Body Length: variable
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-3 Absolute file position of first NAME record
4-5 First row that exists
6-7 Last row that exists plus 1
8-on Array of absolute file positions of the
blocks of ROW records.
The INDEX record is optional. If present, it must immediately follow the FILE
PASS
record. IF there is no FILEPASS record, it must follow the BOF record.

CALCCOUNT 0Ch 12d

Record Type: CALCCOUNT
Description: Specifies the iteration count
Record Body Length: 2
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Iteration Count
CALCMODE 0Dh 13d

Record Type: CALCMODE
Description: Specifies the calculation mode
Record Body Length: 2
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Calculation mode
Manual 0
Automatic 1
Automatic, no tables -1
PRECISION 0Eh 14d

Record Type: PRECISION
Description: Specifies precision of calculations for document
Record Body Length: 2
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Document precision
precision as displayed 0
full precision 1
REFMODE 0Fh 15d

Record Type: REFMODE
Description: Specifies location reference mode
Record Body Length: 2
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Reference mode
R1C1 mode 0
A1 mode 1
DELTA 10h 16d

Record Type: DELTA
Description: Maximum change for an iterative model
Record Body Length: 8
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-7 Maximum change (IEEE format, see Appendix A)
ITERATION 11h 17d

Record Type: ITERATION
Description: Specifies whether iteration is on
Record Body Length: 2
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Iteration flag
Iteration off 0
Iteration on 1
PROTECT 12h 18d

Record Type: PROTECT
Description: Specifies whether the document is protected with a document passw
ord
Record Body Length: 2
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Document protection
Not protected 0
Protected 1
PASSWORD 13h 19d

Record Type: PASSWORD
Description: Contains encrypted document password
Record Body Length: 2
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Encrypted password
HEADER 14h 20d

Record Type: HEADER
Description: Specifies header string that appears at the top of every page whe
n the
document is printed
Record Body Length: variable
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0 Length of string (bytes)
1-on Header string (ASCII)
FOOTER 15h 21d

Record Type: FOOTER
Description: Specifies footer string that appears at the bottom of every page
when the
document is printed
Record Body Length: variable
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0 Length of string (bytes)
1-on Footer string (ASCII)
EXTERNCOUNT 16h 22d

Record Type: EXTERNCOUNT
Description: Specifies the number of documents referenced externally by an Exc
el
document
Record Body Length: 2
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Number of externally referenced documents
EXTERNSHEET 17h 23d

Record Type: EXTERNSHEET
Description: Specifies a document that is referenced externally by the Excel f
ile.
There must be an EXTERNSHEET record for every external file counted by the EXT
ERNCOUNT
record.
Record Body Length: variable
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0 Length of document name
1-on Document name
The document name may be encoded. If so, its first character will be 0, 1 or
2.
0 indicates the document name is an external reference to an empty sheet.
1 indicates the document name has been translated to a less sys-tem-dependent
name.
This feature is valuable for documents intended for a non-DOS environment.
2 indicates that the externally referenced document is, in fact, the current d
ocument.

NAME 18h 24d

Record Type: NAME
Description: User-defined name on the document
Record Body Length: variable
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0 Name attribute
Only bits 1 and 2 are ever nonzero.

Bit 1 is 1 if the name is a function or
command name on a macro sheet.

Bit 2 is 1 if the name definition
includes:
* A function that returns an array, such
as TREND or MINVERSE
* A ROW or COLUMN function
* A user-defined function

Name attribute
Meaningful only if bit 1 of
byte 0 is 1 (the name is a function or
command name). Only bits 0 and 1 are
ever nonzero.

Bit 0 is 1 if the name is a function.

Bit 1 is 1 if the name is a command.

2 Keyboard shortcut. Meaningful only if the
name is a command.
If no keyboard shortcut 0
If shortcut exists ASCII value

3 Length of the name text
4 Length of the name's definition
5-? Text of the name
?-? Name's definition (parsed) in internal
compressed format
? Length of the name's definition (duplicate)
All NAME records should appear together in a BIFF file.

WINDOW PROTECT 19h 25d

Record Type: WINDOW PROTECT
Description: Specifies whether a document's windows are protected
Record Body Length: 2 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Window protect flag
Not protected 0
Protected 1
VERTICAL PAGE BREAKS 1Ah 26d

Record Type: VERTICAL PAGE BREAKS
Description: Lists all column page breaks
Record Body Length: variable
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Number of page breaks
2-on Array containing a 2-byte integer for each
column that immediately follows a column page
break. Columns must be sorted in ascending
order.
HORIZONTAL PAGE BREAKS 1Bh 27d

Record Type: HORIZONTAL PAGE BREAKS
Description: Lists all row page breaks
Record Body Length: variable
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Number of page breaks
2-on Array containing a 2-byte integer for each
row that immediately follows a row page
break. Rows must be sorted in ascending
order.
NOTE 1Ch 28d

Record Type: NOTE
Description: Note associated with a cell
Record Body Length: Variable, maximum of 254
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Row of the note
2-3 Column of the note
4-5 Length of the note part of the record
6-on Text of the note
Notes longer than 2048 characters must be split among multiple records. All e
xcept the
last one will contain 2048 text characters. The last one will contain the ove
rflow.

SELECTION 1Dh 29d

Record Type: SELECTION
Description: Specifies which cells are selected in a pane of a split window.
It can
also specify selected cells in a window that is not split.
Record Body Length: Variable
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0 Number of pane
bottom right 0
top right 1
bottom left 2
top left 3
no splits 3
1-2 Row number of the active cell
3-4 Column number of the active cell
5-6 Reference number of the active cell
7-8 Number of references in the selection
9-on Array of references
Each reference in the array consists of 6 bytes arranged as follows:
Byte Number Byte Description
0-1 First row in the reference
2-3 Last row in the reference
4 First column in the reference
5 Last column in the reference
FORMAT 1Eh 30d

Record Type: FORMAT
Description: Describes a picture format in a document. All FORMAT records mus
t appear
together in a BIFF file.
Record Body Length: Variable
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0 Length of format string
1-on Picture format string
FORMATCOUNT 1Fh 31d

Record Type: FORMATCOUNT
Description: The number of standard FORMAT records in the file. There are 21
different
format records.
Record Body Length: 2 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Number of built in format records.
COLUMN DEFAULT 20h 32d

Record Type: COLUMN DEFAULT
Description: Specifies default cell attributes for cells in a particular colum
n. The
default value is overriden for individual cells by a subsequent explicit defin
ition.
Record Body Length: Variable
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Column number of first column for which a
default cell is being defined
2-3 Column number of last column for which a
default cell is being defined, plus 1.
4-on Array of cell attributes
ARRAY 21h 33d

Record Type: ARRAY
Description: Describes a formula entered into a range of cells as an array. O
ccurs
immediately after the FORMULA record for the upper left corner of the array.

Record Body Length: variable
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 First row of the array
2-3 Last row of the array
4 First column of the array
5 Last column of the array
6 Recalculation flag
Array is calculated 0
Needs to be calculated nonzero
7 Length of parsed expression
8-on Parsed expression (array formula)
1904 22h 34d

Record Type: 1904
Description: Specifies date system used on this spreadsheet
Record Body Length: 2 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Specifies date system used
1904 date system 1
anything else 0
EXTERNNAME 23h 35d

Record Type: EXTERNNAME
Description: An externally referenced name, referring to a work-sheet or macro
sheet or
to a DDE topic. All EXTERNNAME records associated with a supporting document
must
directly follow its EXTERNSHEET record.
Record Body Length: Variable
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0 Length of the name
1-on The name
When EXTERNNAME references a DDE topic, Excel may append its most recent value
s to the
EXTERNNAME record. If the record becomes too long to be contained in a single
record,
it is split into multiple records, with CONTINUE records holding the excess.

COLWIDTH 24h 36d

Record Type: COLWIDTH
Description: Sets column width for a range of columns
Record Body Length: 3 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0 First column in the range
1 Last column in the range
2-3 Column width in units of 1/256th of a
character
DEFAULT ROW HEIGHT 25h 37d

Record Type: DEFAULT ROW HEIGHT
Description: Specifies the height of all rows that are not defined explicitly

Record Body Length: 2 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Default row height in units of 1/20th of a
point
LEFT MARGIN 26h 38d

Record Type: LEFT MARGIN
Description: Specifies the left margin in inches when the document is printed

Record Body Length: 8 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-7 Left margin (IEEE format, see Appendix A)
RIGHT MARGIN 27h 39d

Record Type: RIGHT MARGIN
Description: Specifies the right margin in inches when the document is printed

Record Body Length: 8 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-7 Right margin (IEEE format, see Appendix A)
TOP MARGIN 28h 40d

Record Type: TOP MARGIN
Description: Specifies the top margin in inches when the document is printed

Record Body Length: 8 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-7 Top margin (IEEE format, see Appendix A)
BOTTOM MARGIN 29h 41d

Record Type: BOTTOM MARGIN
Description: Specifies the bottom margin in inches when the document is printe
d
Record Body Length: 8 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-7 Bottom margin (IEEE format, see Appendix A)
PRINT ROW HEADERS 2Ah 42d

Record Type: PRINT ROW HEADERS
Description: Flag determines whether to include row and column headers on prin
tout of
document
Record Body Length:
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Row and Column Header Print Flag
Do not print headers 0
Print headers 1
PRINT GRIDLINES 2Bh 43d

Record Type: PRINT GRIDLINES
Description: Flag determines whether to print gridlines on print-out of docume
nt
Record Body Length: 2
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Gridline Print Flag
Do not print gridlines 0
Print gridlines 1
FILEPASS 2Fh 47d

Record Type: FILEPASS
Description: Specifies a file password. If this record is present, the rest o
f the file
is encrypted. The file password specified here is distinct from the document
password
specified by the PASSWORD record. If present, the FILEPASS record must immedi
ately
follow the BOF record.
Record Body Length: ?
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-on ?
FONT 31h 49d

Record Type: FONT
Description: Describes an entry in the document's font table. A document may
have up to
4 different fonts, numbered 0 to 3. Font records are written in the font tabl
e in the
order in which they are encountered in the file.
Record Body Length: variable
Record Body Byte Structure:
Byte Number Byte Description Contents (binary)
0-1 Height of the font (in 1/20ths of a point)
2-3 Font Attributes
First byte (reserved) 00000000b
Second byte
Bit 0 - bold 1b
Bit 1 - italic 1b
Bit 2 - underline 1b
Bit 2 - strikeout 1b
Bits 4-7 (reserved) 0000b
4 Length of font name
5-? Font name
FONT2 32h 50d

Record Type: FONT2
Description: System specific information about the font defined in the previo
us FONT
record. The FONT2 record is option-al.
Record Body Length: Variable
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-on ?
TABLE 36h 54d

Record Type: TABLE
Description: Describes a one-input row or column table created through the Dat
a Table
command
Record Body Length: 12 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 First row of the table
2-3 Last row of the table
4 First column of the table
5 Last column of the table
6 Recalculation flag
Table is recalculated 0
Not recalculated nonzero
7 Row or column input table flag
Column input table 0
Row input table 1
8-9 Row of the input cell
10-11 Column of the input cell
The area given by the first and last rows and columns does not include the out
er row or
column, which contains table formulas or input values. If the input cell is a
deleted
reference, the row of the input cell, given by the bytes at offset 8 and 9, is
-1.
TABLE2 37h 55d

Record Type: TABLE2
Description: Describes a two-input table created by the Data Table command. I
t is the
same as the TABLE record, except there is no distinction between a row input t
able and a
column input table, there are two input cells rather than one, and either may
have a
value of -1, indicating a deleted reference.
Record Body Length: 16 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 First row of the table
2-3 Last row of the table
4 First column of the table
5 Last column of the table
6 Recalculation flag
Table is calculated 0
Needs recalculation nonzero
7 RESERVED - must be zero 0
8-9 Row of the row input cell
10-11 Column of the row input cell
12-13 Row of the column input cell
14-15 Column of the column input cell
CONTINUE 3Ch 60d

Record Type: CONTINUE
Description: Continuation of FORMULA, ARRAY, or EXTERNNAME records that are to
o long to
fit in a single record.
Record Body Length: variable
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-on Parsed expression
WINDOW1 3Dh 61d

Record Type: WINDOW1
Description: Basic window information. Locations are relative to the upper le
ft corner
of the Microsoft Windows desktop, and are measured in units of 1/20th of a poi
nt.
Record Body Length: 9 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Horizontal position of the window
2-3 Vertical position of the window
4-5 Width of the window
6-7 Height of the window
8 Hidden attribute
Window is not hidden 0
Window is hidden 1
If you do not include a WINDOW1 record in your BIFF file, Excel will create a
default
window in your document.
WINDOW2 3Eh 62d

Record Type: WINDOW2
Description: Advanced window information. The WINDOW2 record is optional. If
present,
it must immediately follow the WINDOW1 record.
Record Body Length: 14 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0 Display Formulas
Display values 0
Display formulas 1
1 Display Grid
Do not display gridlines 0
Display gridlines 1
2 Display Row and Column Headers
Do not display headers 0
Display headers
3 Freeze window panes
Do not freeze panes 0
Freeze panes 1
4 Display zero values
Suppress display 0
Display zero values 1
5-6 Top row visible in the window
7-8 Leftmost column visible in the window
9 Row/column header and gridline color
Specified in next four bytes 0
Use window's default 1
foreground color.
10-13 Row/column headers and gridline color (RGB)
BACKUP 40h 64d

Record Type: BACKUP
Description: Specifies whether a BIFF file should be backed up
Record Body Length: 2 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Backup flag
Do not back up 0
Back up 1
PANE 41h 65d

Record Type: PANE
Description: Describes the number and position of unfrozen panes in a window.
Panes are
created by horizontal and vertical splits, which are measured in units of 1/20
th of a
point.
Record Body Length: 9 bytes
Record Body Byte Structure:
Byte Number Byte Description Contents (hex)
0-1 Horizontal position of the split, zero if none
2-3 Vertical position of the split, zero if none
4-5 Top row visible in the bottom pane
6-7 Leftmost column visible in the right pane
8 Pane number of the active pane

Jun 22 20:27:21 2004