Thursday, November 13, 2008

Health|锻炼你的心肺功能

锻炼你的心肺功能
林弘谕 (2005-03-08)

你的心肺功能好吗?长跑、长程游泳、打网球等,都不会令你气喘如牛,脸色铁青;那么,你就能归类于较“长气”的一组,心肺功能比一般人强。


平日注意运动,适当地跑跑步,出出汗,能使身心保持健康。


最近,香港中文大学医学院的一项调查显示,拥有类似运动员的“长气袋”或“巨肺”的良好肺部功能,其死亡率、患上各类长期疾病如糖尿病、心脏病、高血压等的几率也相对减低。

化氧气为能量

心肺功能指的是人的摄氧和转化氧气成为能量的能力。整个过程,牵涉心脏制血及泵血功能、肺部摄氧及交换气体能力、血液循环系统携带氧气至全身各部位的效率,以及肌肉使用这些氧气的功能。

心肺功能良好,也反应身体主要机能都可健康运作,从而可推断出患慢性疾病如心血管病、内分泌系统疾病、呼吸系统疾病的机会较低。

现代人做运动,除了健身之外,更多是为了消脂瘦身;另外,也应将锻炼心肺功能作为运动的目的之一。

如何锻炼心肺功能,使自己更健康,预防各种疾病?

带氧运动可锻炼心肺功能。一般来说,温和、达最高心跳率(即220减去自己年龄)60%至70%的运动量,消脂功能最好,在运动中的能量消耗有 40%来自脂肪、60%为碳水化合物。如果要锻炼心肺功能,则需达到最高心跳70%以上的剧烈运动,而此时能量消耗90%为碳水化合物、10%为脂肪。

例如太过肥胖者需要运动消脂,虽然剧烈运动消耗的热量大,但是不适合一开始便急于进行太剧烈的运动,因其心肺功能仍不能应付;或需先以温和运动消脂,并提高基本心肺功能,逐渐减重瘦身后,才能增强运动量,以锻炼心肺功能,进一步提高消脂效果。

一般人并不清楚本身的心肺功能到什么水平,因此必须进行心肺功能测试,评估体能和身体状况后,才开始进行适合的运动,逐步锻炼与提升心肺功能。

提升心肺功能

根据美国运动医学协会(ACSM)建议,45岁以上男性、55岁以上女性进行最高摄氧量测试时,需有医生在旁,以备不时之需。除了通过仪器测试摄氧量外,也可通过爬楼梯测试、来回跑,或特定距离如2.5公里或1公里跑步来评估。

由于人们受脂肪比例与运动量改变的影响,一般人的心肺功能,都会随着年龄轻微下降,男性每年下跌0.46个单位,女性则是0.54个单位。专家建议,都市人运动量较少,因此应多进行适量的运动,不断提升心肺功能的水平,以保持身心健康。

长气袋好处多

心跳:因心脏肌肉增厚和力量增加,使每次心跳更有效率,令静态心跳下降、心室容量增加、总血量增加,而运动后可更会回复正常心跳。

血压:因心跳更有效,加上运动有助降低胆固醇,避免血管阻塞导致血压上升,因此令静态血压下降或趋于正常。

呼吸:静态呼吸的深度加强、肺气泡血管数目增加,使交换气体功能增强,因而每次呼吸更有效,呼吸速率下降。运动后,能较快回复到正常呼吸速率,不致气喘如牛。



坚持锻炼有利心肺功能发展坚持长期体育锻炼的人都有一副好身体。健康的机体,良好的体质完全依靠强健的心肺功能来支持。
人体通过肺脏(呼吸器官)进行气体交换称为外呼吸,然而,把氧气和营养物质源源不断地输送到人体的各个、细胞这一过程又称为呼吸,使之维持人体的新陈代谢。因此,心肺功能的好坏直接关系到人体代谢功能的强弱和健身锻炼后机体恢复功能的快慢。
健身锻炼使人心跳加速,心搏有力,每分钟心输出量增加,心肌的微循环全面扩张;锻炼时肌肉活动产生的二氧化碳刺激了人体的呼吸中枢,使呼吸频率加 快,肺容量加大,与此同时呼吸肌(膈肌、肋间外肌和肋间内肌)和呼吸辅助肌得到了锻炼,特别是膈肌的上下运动幅度增长。长期锻炼能使心脏的重量、容积增 大,安静时的心率变缓,心肌的室壁增厚,使其每次收缩变得强韧有力。经常锻炼的人安静时心率可能只有每分钟40—50次,剧烈运动时的最高心率每分钟可达 220次。缺乏锻炼的人在应激状态下最高心率超过每分钟190次时,就会出现恶心、呕吐、头晕、面色苍白、出冷汗等虚脱症状。
有文献报导,停止体育锻炼10年后的女孩摄氧量平均下降了29%,但心脏容积却毫无变化,这说明青少年时期的锻炼对成年后的心肺功能依旧有深远的影响,对体质的促进与增强有十分深远的意义。






自断心肺功能7法




字号选择〖 大 中 小 〗/ 双击滚屏 单击停止




心肺功能最能反映一个人的健康情况,下面向老年人介绍一些在家里自我判断心肺功能的办法.它们是:
一、登楼试验 能用不紧不慢的速度一口气登上三楼,不感到明显气急与胸闷,则心肺功能良好。
二.血压检查 舒张期血压与收缩期血压之比正常为50%左右,如果低于25%,或高于75%,则说明心肺功能较差.
三、血压与脉搏计算 收缩期血压加上舒张期血压之和,再乘以每分钟脉搏数,如果乘积在13000—20000之内,则心肺功能良好。
四、血压、脉搏与活动试验 平睡时血压、脉搏正常,在30—40秒钟内较快地坐起,如果下降不到1.4千帕,脉搏每分钟加快10—20次,表示心肺功能良好。相反,血压下降超过1. 4千帕,脉搏每分钟加快20次以上,甚至出现恶心、呕吐、眩晕、冷汗等现象,说明心肺功能很差。
五、哈气试验 距离一尺左右点燃一根火柴,使劲哈口气,能将火焰熄灭则心肺功能不错。
六、小运动量试验 原地跑步一会儿,脉搏增快到每分钟100—120次,停止活动后,如能在5—6分钟脉搏恢复正常者,心肺功能正常。
七、憋气试验 深吸气后憋气,能憋气达30秒钟示心肺功能很好,能憋气达20秒钟以上者也不错。

Health|《保温原理》

《保温原理》
人是恒温动物,藉由身体对食物的代谢作用来产生热量,以维持适当的体温及活动能力。大部分产热的代谢作用发生於肌肉及肝脏。对於体温的保持则是藉 由身体皮肤表面薄薄的暖空气保温层来达成。低温、风、雨都会带走这空气层的热量造成体温下降,如果身体无法产生足够的热量来抵抗,体温持续下降则可能导致 失温或冻伤。反之在高温、闷热或活动过度的情形下,体内所产的热量如果散出不良,则可能导致体温过高造成中热衰竭、中暑等热病,这和失温一样会造成致命的 伤害。要保持舒适的体温又要能便於活动的最佳方法就是穿衣服。至於衣服要怎麼穿?我们可以在保温原理里看出端倪,并导出在登山界最流行的「三层皮肤」穿衣 法。另外在野外求生应用时也会有莫大的助益。在普通物理学中有关温度、热及相对湿度的解释可参考附注一~五。现在我们就以人体保温及我们所使用的登山器具 为出发点来看看这些现象对我们的影响。对人体而言热量系以 「汽蒸发」、「对流」、「传导」及「辐射」等四种方式散入环境中。在温和无风的环境中「辐射」是体热散失的最大因素(参考附注六)。辐射热无法以衣服做有 效的阻绝,因为热会由身体辐射到衣服上,再由衣服辐射到环境中。企图以具有反射能力的材质做衣服以达保温目的,到目前为止并没有太大的成果。最近日本虽已 研发出一种内含陶瓷的纤维衣料并声称具抗紫外线能力,但尚未有成品出现市面上,希望这种具反射能力的衣物能早日出现以强化衣著系统。事实上在登山作息环境 中由辐射所散出的热比其他途径所散出的热小很多,所以对人体保温影响不大。然而人在休眠状态或在极冷的环境中,如果无法有效阻绝其他散热途径时,辐射热的 散失依然会构成重大的影响。求生纸、绝缘地布具有很好的反射效果且质地很轻又防水,在野外求生中特别有用(运用方式另述)。水银内胆式的保温瓶其保温能力 比真空式保温瓶更强。MSR汽化炉的防风板及反射板同时使用可提高20%的燃烧效率。使用铝箔睡垫时这下子您该知道铝箔面朝上才是正确的用法。「传导」属 於接触性的热传递,媒介体的比热是相当重要的因素。当身体或器具与岩、雪、地面等较低温的地方直接接触时,热量自然会向较低温处流去。在雪地从事登山活动 时,有时必须坐著为队友做确保,此时即会产生极大的传导性热散失,唯有嫺熟快速的动作才能减少体力虚耗。空气的比热极小可以有效的阻绝热传导。膨松的衣 服、睡袋可以在身体皮肤表层造成空气保温层,达到保温目的。但睡觉时身体下面的部分由於体重的压迫而无法形成空气层,所以要靠睡垫来撑开,以免身体与地面 直接接触造成大量的体热散失。在高山上(尤其是雪地上)很多人会有冷得睡不著的经验,但这并不完全是睡袋保温力不足的关系,有些根本就是背部太冷所造成 的,所以只要改善睡垫即可解决。水的比热不小所以衣服弄湿时体热散失极快。铝的比热大於钢所以使用铝制炊具在传热时有较佳的效率。「对流」是体热散出的主 因,皮肤表面的暖空气层会藉由对流跑掉并移入冷空气,空气流动时或在较冷气温中会加速这过程带走更多的热量,即使在温和的微风中亦
会丧失大量的热。由空气流动(风)所带走的热量与空气流速的平方值成正比,所以强烈的风所带走的热量是非常可怕的。这种因风所引起使体感温度较 实际气温低的现象称为「风寒效应」,参考附注七的公式我们可以算出当环境温度为12℃时如果吹著风速为每秒9公尺的风,则体感温度只有0℃;也就是说相当 置身於无风雨而气温为0℃的环境中,由此可知防风的重要性。衣服是保温的好方法,但真正扮演保温角色的是存在衣服纤维间的的静止空气层。所以选择能形成较 厚空气层的衣服就能减少较多的对流热散失。防风外套可以防止风直接带走这层空气,增强衣服的保温性。野炊时有个挡风的东西自然可以增加燃烧效率。选个避风 的营地住起来也比较安全舒适。「水汽蒸发」亦是体热散出的主因,由於是潜热的关系所以会带走大量的热,即使在寒冷的环境中人体仍会持续的小量的排汗。当淋 湿、落水、或大量流汗时造成衣服潮湿的情况下,水不但会把衣服上的暖空气层排挤掉使其失去保温作用,因其比热较大所以会很快的经由传导从身体上吸收很多 热,更由於水汽的蒸发作用会带走更多的热量,如果还有强风来肆虐加速水汽蒸发,则在低温下有立即冻毙之虞。虽然不自觉的小量排汗及由呼吸(尽量用鼻呼吸, 参考附注八)所造成的热散失是无法减少,但穿湿衣服及大量出汗则应极力避免,因为湿衣服所造成的热散失为乾燥衣服的25倍。然而在高温、潮湿的环境下,身 体能否有效的以排汗来散热,则与热病息息相关。要预防热病除了摄取足量的水份和盐份外,最重要的是辨认不利於热散失的环境并调整自己在该环境中的体能活 动。不论何种散热方式,温差及散热面积都是决定性的因素之一。在睡觉时如果保暖不够,皮肤先会变得较冷(降低与环境的温差)接著身体会自然采取蜷缩的睡姿 (减少散热面积并形成体温共济)。这是人体自然反应机制(参考附注九),最主要是维持人体的核心温度。如果仍无法维持核心温度,这时会冻得睡不著自然醒 来,清醒时各种生理循环加速及不自主的颤抖会增加产热,并由於求生意志人会运用智慧想出各式方法来保温,或逃离低温环境。如果仍然不足以维持核心温度,则 手脚部分会先被身体放弃(遭受冻伤),所有血液亦向身体中心及头部集中企图维持生命到最后一秒钟。另外我们从身材来看,对於相同体重的人而言,高瘦者会比 矮胖者容易失温,也是由於前者的散热面积较大的关系。还有并指手套比五指都分开的手套保暖也是相同的道理。水和食物也与保温息息相关。身体产热需要食物当 燃料,较高的进食频率(少量多餐)能持续补充身体所需,这要比一天吃两三次大餐更能预防体能下降。有经验的登山者常会在行进间不时的吃些零食来补充热量, 就是最好的证明。水份的补充则是维持身体机能正常运作之必须,但喝水要适量,太多的饮水容易造成大量流汗,加速体热发散及体能的流失。饮用水的温度要温和 (最好与体温相似)才能快速为身体所吸收,太热的水一喝马上冒汗显然是不智的,但如果吃的是冰水那也不好,一来身体吸收慢、二来身体还得需付出额外的热量 把这些家伙加热到与体温相等的温度,当然更忌讳吃雪或冰来止渴;在雪地里应喝热一点的水,可以增加体温。当我们看到队友吃不下东西但却又一味的猛喝水时 (走没两步就想喝水而且看到水就喝)这是很明显的体力透支现象。如果放任其喝水只会加速体力恶化,此时应给予适度的休息及流质食物(可冲泡些高醣类的饮 料,助其迅速补充热量)并限制喝水。如果其体力仍无法完成预定行程只好提前扎营,并找出体力透支的原因,以免隔天又重蹈覆辙。人可以三天不吃饭但不可以一 天没有水,水份补充不足也是大问题,在大热天及雪地里会有渴感消褪现象导致不自觉的水份补充不足。其实我们在排尿时注意一下尿液的颜色即知,正常颜色应为 淡黄色,深黄或橘红时表示有脱水现象应自我警惕,除了在行进间做少量的、持续的补充水份外,如果环境许可应在扎营后尽量多喝一点水,当然泡茶聊天更好。

Wednesday, November 12, 2008

Shell|Shell Script to capture CPU usage

[fepprdl2@ cpuUsage]$ cat cpuUsage.sh
top -C -b|head -n 20 >>/apps/users/fepprdl2/cpuUsage/fepCpu.log

Cron it:
*/5 * * * * /bin/bash /apps/users/fepprdl2/cpuUsage/cpuUsage.sh

[fepprdl2@ cpuUsage]$ vi fepCpu.log

11:53:54 up 53 days, 6:25, 2 users, load average: 4.80, 5.03, 4.99
331 processes: 326 sleeping, 5 running, 0 zombie, 0 stopped
CPU states: cpu user nice system irq softirq iowait idle
total 75.9% 0.0% 1.4% 0.0% 0.0% 0.2% 22.3%
Mem: 6157864k av, 6131600k used, 26264k free, 0k shrd, 247052k buff
3827416k actv, 1639940k in_d, 143104k in_c
Swap: 4194256k av, 0k used, 4194256k free 3868516k cached

PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
32739 fepprd 25 0 22188 21M 6540 R 23.3 0.3 23335m 2 java
578 fepprd 25 0 22188 21M 6540 R 20.9 0.3 23850m 3 java
10134 fepprd 25 0 22188 21M 6540 R 19.9 0.3 20549m 3 java
30080 weblogic 16 0 1748M 1.7G 38692 R 8.4 29.0 48:04 1 java
20758 fepprd 25 0 22188 21M 6540 S 2.6 0.3 2474m 2 java
11226 fepprdl2 22 0 1396 1396 876 R 0.9 0.0 0:00 0 top
30029 weblogic 15 0 1748M 1.7G 38692 S 0.4 29.0 21:29 2 java
30030 weblogic 15 0 1748M 1.7G 38692 S 0.4 29.0 21:22 1 java
30031 weblogic 15 0 1748M 1.7G 38692 S 0.2 29.0 21:23 0 java

Thursday, November 6, 2008

Taiji|初学太极拳者应注意的三个问题

初学太极拳者应注意的三个问题

郑华金 2007年 11月 1日

怎样才能打好太极拳?笔者体会:
立身中正 拳谱曰:“学者上场打拳,端然恭立,合目息气,身桩端正,洗心涤虑,去其妄念,平心静气,以待其动,如此而后可以学拳。”立身中正就是松静直立,脊骨垂直 于地面站立。两肩松开,胸腹放松,两肋充实,臂部下垂,而头却向上领起,使胸腔空灵,呼吸加深,肺活量增大,血液带氧量增加。全身肌肉的放松,减轻了对血 管壁的压力和心脏的负担,从而加大了供血量。太极拳以松静为纲,以改变新陈代谢环境为手段,让微循环如大海的波涛,一浪一浪地荡涤机体内的污浊,使有害物 质排出体外。
笔者认为,保持脊骨垂直于地面,是初学者的第一难点,而在脊骨垂直的基础上,尾闾的垂、敛、翻则是立身中正的重中之重。
立身中正不是机械地90°垂直于地面,而是根据攻防需要(作用力的方向)和姿势的高低来调整尾闾变化。当作用力上下或左右变化时,尾闾要下垂(如“起 势”、“金鸡独立”、“下势按掌”和陈式拳“搬拦肘”等),这时身形基本垂直于地面;当作用力向后或侧后变化时,尾闾要内敛(如“搌”、“靠”等),这时 身形看似中正然因尾闾的内敛,实则稍有后倾;当作用力向前时,尾闾在定时要外翻(如“搬拦捶”、“搂膝拗步”、“单鞭”等),身形约前倾至80°左右。而 一些特殊招法如杨式拳的“海底针”、陈式拳的“击地捶”、武式拳的“按式”等,从外形看前倾角度很大。但由于它作用力是向下的,则领头垂尾闾的意势更浓, 立身中正的控制力更足。
立身中正要自然、协调,要符合人体结构美,符合力学原理,不是教条的机械的中正,而是符合所谓“黄金切割线的0.618”,这也是所有要求的最佳点。
没有起伏 学太极拳要做到轻灵沉稳,虚实变化于不知不觉中,所以没有起伏就是初学者的第二个目标。初学太极拳,学者往往由于腿部力量的不足,要么双重,要么立直,欲去此病只有大量练习太极步方可见效。
拳谱曰:“上动下相随,下动上身领,中动两头应。”太极拳足部的移动,是为手臂的运动服务的。如果在重心移动时高低发生变化,或是左右晃动,何来轻灵沉稳?推起手来就会被对方发现你的企图并利用,此为练拳之大忌。
学者两足一开,要有撑裹之感,重心移动更有撑裹之力加在里边;后足前蹬,前足有一个反作用力;后足后坐,前足仍有一个反作用力,前后足的运动始终处在矛盾 之中。在这对矛盾中不管前进还是后退,后足永远是矛盾的主要方面,前足是矛盾的非主要方面。当然随着重心的变化,矛盾的主要方面和非主要方面是跟着转化 的。前后足的运动,矛盾的转变必口传心授才得以言明,非笔墨可以形容清楚的,望学者细心体会。
连绵不断 拳谱曰:“劲断意不断,意断神不断”、“如长江大河,滔滔不绝,一气呵成”。
打太极拳没有断续处,没有凹凸处,没有突然加速与减慢,每一式的结尾定式便是下式的开头。每一式的结尾之动已包含了下式的开始之动。所谓“开中寓合,合中寓开”是也。
要想连绵不断就要松静自然,要想松静自然就要先从不自然开始,像写字一样,先描红,再写帖(楷书),一笔一画一丝不苟地练起,不可能开始就练行书草书,待 有一定功底后才可练行草。学拳初始,每一分解动作都要准确到位并要反复练习,久而久之便能成为一种条件反射,成为一种机械化的动力定型,再而松静自然,再 而熟练,再而连绵不断。如果学时不认真,动作不准确,久而久之就会成为一种错误的熟练,错误的定型,就不可能达到练拳的高级境界。俗话说“练拳容易改拳 难”,可见学拳初始一丝不苟地按要求去做的重要性和必要性。

Qigong|谈谈脊柱锻炼的基本方法与动作要领

谈谈脊柱锻炼的基本方法与动作要领


   2008-08-05   来源:中国健身气功协会网   作者:



  脊柱是人体的支柱。它由椎骨、韧带、脊髓等组成,具有支撑身体、保护脊髓及其神经根的作用。现代医学认为,注重脊柱的锻炼保护,对于促进身体健康有重 要意义。在国家体育总局健身气功管理中心组织编创的四种健身气功功法中,就强调要通过脊柱的旋转屈伸运动来带动四肢、内脏的运动,从而达到健身、防病、延 年、益智的目的。本文拟就人体脊柱的基本构成与运动形式、脊柱锻炼的目的意义和脊柱锻炼的方法与要领做一些初步的分析,以引起人们对锻炼和保护脊柱重要性 的高度重视。

  一、脊柱的基本构成及运动形式

   成年人的脊柱由26块椎骨构成,椎骨之间通过椎间盘、韧带及肌肉群相互衔接在一起。脊柱之所以能在一定范围内自由活动,是靠脊柱附近诸多肌肉群和韧带的 收缩、伸展,以及椎间盘运动、髓核的位置移动变化来实现的。因此,当脊柱向前弯屈时,髓核被挤到后方,脊髓变得细长,棘间韧带、棘上韧带紧张度增加;当脊 柱往后仰时,髓核被挤向前方,椎体小关节压力增大,前纵韧带紧张度增加,棘间韧带、棘上韧带变得松弛;当脊柱侧弯时,同侧的小关节负重加大,对侧小关节、 关节囊及韧带都处于紧张状态;当脊柱旋转时,各韧带的紧张度都将增高。下面从解剖学和运动方式两个方面对脊柱的构成及其运动形式作进一步分析。

  (一)人体的解剖学姿势、方位、轴和面

  了解人体的解剖学姿势、方位、轴和面这些基本常识,对于理解和掌握脊柱运动形式及其锻炼方法有重要意义。

  解剖学姿势:身体直立,两臂自然下垂,掌心向前,两足并拢,足尖向前,双眼向前平视。

  方位:近头部为上,近足部为下;近躯干前后正中平面为内侧,反之为外侧。

  轴:垂直轴是指通过身体自上而下与地面垂直的轴;矢状轴是指与垂直轴垂直的前后方向的轴;冠状轴(又称额状轴)是指与两轴都垂直的左右方向的轴。

  面:水平面是指与地面平行的切面;矢状面是指通过身体前后方向,将身体分为左右两部分的切面;冠状面(又称额状面)是指通过身体左右方向,将身体分为前后两部分的面。

  (二)脊柱运动的基本动作

   人体的各种运动,如俯、仰、屈、伸、折叠、开、合、旋转等,在脊柱上的表现其实只有四种,即屈、伸、侧屈、回旋。任何人体动作,包括武术动作、舞蹈动 作、传统体育养生动作,都是脊柱的四种基本运动与上肢和下肢运动相组合而成的,再结合站、坐和卧的不同人体姿势,构成了全部的人体动作。理解并掌握脊柱的 四种基本动作非常重要,因为它们是脊柱运动的基本动作,无论多么复杂的脊柱动作都可以分解成这四种基本动作。

  屈:是脊柱以冠状轴为转动轴,在矢状面上由解剖学姿势向前弯曲或由后屈返回解剖学姿势并继续向前弯曲的运动。

  伸:是脊柱以冠状轴为转动轴,在矢状面上由解剖学姿势向后弯曲或由前屈返回解剖学姿势并继续向后弯曲的运动。

  侧屈:是脊柱以矢状轴为转动轴,在冠状面上向左侧或右侧弯曲的运动。

  回旋:是脊柱以垂直轴为转动轴,在水平面上由解剖学姿势向左后或右后,或由后向前返回解剖学姿势的运动。

  二、脊柱锻炼的目的和意义

  现代医学认为,人体的一切活动都是靠与脊柱有着密切连带关系的神经系统来指挥的。作为神经系统中枢重要组成部分的脊髓,从头至尾贯穿于脊柱正中的椎管内。因此,人体的神经系统与脊柱有着十分密切的关系。脊柱有毛病,椎体错位,会导致各种疾病,甚至影响整个肌体健康。

   植物神经也称为自主神经,是支配内脏、血管、腺体等器官的神经,是人体神经系统的重要组成部分。植物神经系统和脊柱有着不可分割的密切关系,植物神经的 节前神经元在脊髓的侧角和前角内,节后神经元在脊柱的两侧或脊柱的前面。可见,植物神经系统是与脊柱紧紧地“捆绑”在一起的。因此,脊柱的健康状况,将对 植物神经系统产生直接影响。脊椎骨无论是哪一节出现异常,譬如长骨刺、小错位、椎间盘突出,或是脊柱周围韧带、肌肉损伤,都会影响到脊髓,进而影响到植物 神经系统。如颈椎病,可引起头晕、头痛、耳鸣、血压不正常,甚至呕吐等;胸椎不正常可引起心脏病、动脉硬化、肺炎、胃病;腰椎不正常可引起下肢麻木、腹 泻、肝病、贫血等。可见,脊柱健康对人体健康具有重要意义。

  从我国传统医学角度来看,脊柱运动能增强腰部肌肉力量,脊柱的伸展折叠, 牵动任、督二脉。督脉,有总督诸阳经的作用,贯通四肢百骸,它行于背部正中,为阳脉之海,任脉行于腹部正中,为健身气功·五禽戏中的“虎扑”动作形成了脊 柱的前后伸展折叠运动,尤其是引腰前伸,增加了脊柱各关节的柔韧性和伸展度,目的就在于加强对脊柱的锻炼。此外,经脉循行于人体各处,维系着人体的正常功 能,是人体的总控系统。《黄帝内经》说,经络对人体起着“决生死,处百病”的作用,并有“经脉者,行血气,通阴阳,以荣于身”之说,强调经络、经脉遍于全 身,是人体气血津液运行的通道。由此可以看出,无论是任、督二脉的运行,还是分布于脊柱两旁或交叉于脊柱循行于全身的经络,无一不与脊柱有着密切的关系。 如果脊柱发生异常,就会直接影响到经络的通行。经络不通则气血凝滞,营卫不和,个别部位的功能变化最终会影响到全身,进而产生疾病。可见,加强对脊柱的锻 炼是非常重要的。

  脊柱锻炼主要是通过提高和平衡脊柱两侧肌肉的力量,提高脊柱周围韧带组织的柔韧性、协调性,改善脊柱及其周围软组织的血液循环,加速代谢物排泄,延缓脊柱组织结构老化,从而防止脊柱周围软组织病变,预防骨质增生,增强脊柱和椎体的稳定性,以达到强筋骨、通关节的目的。

  三、脊柱锻炼的方法与要领

  我国古代劳动人民在长期与疾病作斗争的实践中,创造了许多行之有效的脊柱保健锻炼方法,其中健身气功功法和太极拳练习方法,就是通过各种伸、展、拔、拉、转动作,使脊柱及其周围的经脉得以疏通,从而达到强身健体的作用。

  在对脊柱进行锻炼时,人们往往针对自己的身体状况来选择锻炼方式,其中一些人就非常重视对颈椎的锻炼。因此,本文拟从颈椎运动和脊柱运动两个方面,按照单一动作、组合动作和混合动作三个层次,对脊柱锻炼的基本功分别加以分析和介绍。

  (一)颈椎锻炼的基本功练习

  进行颈椎锻炼时,两肩的位置应基本固定。

  1、颈椎单一动作

  所谓颈椎单一动作,是指进行颈椎锻炼时基本动作的运行方向。

  颈椎屈:身体保持站立姿势,闭嘴,低头,下颌内收尽量贴近胸,两眼看胸;吸气时用力,颈椎屈肌保持紧张状态,呼气时颈椎屈肌放松。反复练习几次后,恢复预备姿势。

  颈椎伸:身体保持站立姿势,闭嘴,抬头,眼睛尽量向后上看;吸气时用力,颈椎伸肌保持紧张状态,呼气时颈椎伸肌放松。反复练习几次后,恢复预备姿势。颈椎伸还有一种动作,其动作与上述要求基本相同,只是要求练习时嘴要微微张开。

  颈椎侧屈:头偏向左侧(或右侧),眼睛向前平视;吸气时颈椎侧屈肌用力,呼气时放松。反复练习几次后,恢复预备姿势。

  颈椎回旋:头向左侧(或右侧),眼睛向同侧后方平视。吸气时用力,呼气时放松。反复练习几次后,恢复预备姿势。

  2、颈椎组合动作

  所谓颈椎组合动作,就是在合理的运动条件下,把屈、伸、侧屈、回旋的基本动作按先后顺序进行两两组合,目的是通过牵拉不同部位,使平时很少运动的肌肉韧带得到锻炼,提高颈椎的协调性,进而达到对颈椎进行全方位锻炼的目的。

   颈椎先屈后侧屈、先屈后回旋:首先,在预备姿势的基础上颈椎先前屈,而后做向左(或右)侧屈动作,眼睛看下方。上动不变,吸气用力,呼气放松。反复练习 几次后,恢复预备姿势。其次,在预备姿势的基础上颈椎先前屈,而后做向左(或右)回旋动作,眼睛看同侧上方。上动不变,吸气用力,呼气放松。反复练习几次 后,恢复预备姿势。

  颈椎先伸后侧屈、先伸后回旋:基本动作同上面所述,惟在预备姿势的基础上颈椎先伸。

  颈椎先侧屈后屈、先侧屈后伸、先侧屈后回旋:在预备姿势基础上颈椎先侧屈,然后做屈,或伸,或回旋动作。

  颈椎先回旋后屈、先回旋后伸、先回旋后侧屈:在预备姿势基础上颈椎回旋,然后做屈、伸、侧屈动作。

  3、颈椎混合动作

  所谓颈椎混合动作,就是把多个基本动作和组合动作连贯起来进行练习,主要目的是提高颈椎的协调性。

  颈椎环转:颈椎的环转就是把颈椎的单一动作连接起来连续进行锻炼,有向左的环转和向右的环转两种方法。进行环转时,要注意眼睛与动作的配合,颈椎屈时向下看,颈椎伸时向上看,尽量让环转的幅度加大,使参与环转的所有肌肉得到最大限度的牵拉。

  颈椎全方位运动:把所有颈椎组合动作,不重复、不间断的做完一遍。呼吸自然,频率尽量不变,匀速慢做。

  (二)脊柱锻炼的基本功练习

  预备姿势要求两脚分开,自然站立,两髋关节基本不动(之所以称基本不动是因为运动时骨盆或多或少要配合脊柱运动)。脊柱锻炼包括尾部、腰部、胸部和颈部的整体运动,即脊柱的整体运动。练习时,要假想脊柱是一个直的弹性圆柱体,其运动轴心就是脊柱圆柱体的中段部分。

  另外,值得注意的是,在进行脊柱锻炼的基本功练习时要时刻注意尾闾与头部及目视方向的配合,时时提醒自己——头部是脊柱圆柱体的上端,尾闾是脊柱圆柱体的下端,目视方向是头部位置准确协调的准星。

  1、脊柱单一动作

   脊柱屈:由预备姿势开始,先深吸气;然后,在呼气的同时,低头,下颌内收,眼睛下视鼻尖,含胸,两肩内扣;收腹,敛臀,尾闾内扣,腰背向后拱出;两小臂 内旋合拢至小腹前相对,两掌心向外;两膝微屈。继而,当脊柱屈至不能屈时,整个腰背部和腹部肌肉在吸气时用力至完全紧张,呼气时放松,反复练习几次;最 后,两小臂边外旋边打开,同时,抬头、松腰、尾闾下沉,脊柱伸直,两膝伸直,返回到预备姿势。

  脊柱伸:由预备姿势开始,先深呼气;然 后,在匀速深吸气的同时,尾闾后上挑起,臀部向后翻,展腹、挺胸、两肩胛骨相靠拢,抬头,塌腰,两臂边外旋边侧后举,两掌心翻至向外,两膝渐至伸直。继 而,吸气用力,呼气放松,反复练习几次。最后,两臂边内旋边收回,低头、敛臀、收腹,返回到预备姿势。

  脊柱侧屈:由预备姿势开始,上体向左(或右侧)侧弯曲,髋关节位置保持不变,尾闾配合侧弯曲动作向同侧顶髋。

  脊柱回旋:由预备姿势开始,转动过程中两髋关节保持固定不动;上体向左(或右)后转动,两眼平视远方,尽力向后转动;保持上动姿势不变,吸气时脊柱回旋肌用力,呼气时放松,反复练习几次;最后,呼气配合放松回转至预备姿势。

  2、脊柱组合动作

   脊柱组合动作与上面颈椎组合动作相同。可以分为脊柱先屈后侧屈、先屈后回旋;先侧屈后屈、先侧屈后伸、先侧屈后回旋;先回旋后屈、先回旋后伸、先回旋后 侧屈等几种组合锻炼方法。这些动作在健身气功功法中有很多类似的动作。如健身气功·易筋经中的“摘星换斗势”就是脊柱先回旋再屈的动作。以“左摘星换斗 式”为例:身体左转就是脊柱左回旋,右手摆至左髋节外侧的“摘星”动作时,低头眼看手,这是脊柱屈的动作。因此,做“摘星”这个动作时,尾闾要向前上翘, 配合低头,使脊柱屈。而健身气功?五禽戏中的“鹿抵”动作是脊柱的先侧屈再回旋。以左侧的“鹿抵”为例:左脚脚跟落地,然后身体重心边前移,脊柱边向左回 旋,动作快结束时,脊柱左侧屈。

  3、脊柱混合动作

  脊柱环转:脊柱环转就是脊柱的单一动作连续进行的结果,有向左 的环转和向右的环转两种方法。其要领是:首先,假想脊柱是一个直的圆柱体,头部为圆柱体上端,尾闾为圆柱体下端;其次,假想脊柱环转时,脊柱圆柱体的中间 部位固定不动;第三,在上面假想基础上,把脊柱假想为以头和尾闾为端点的线段,姑且称为脊柱线。那么,脊柱的环转运动整个运行路线就是头和尾闾在水平面 上,同步、同向在脊柱线的中点上面和下面划了两个相同的圆。这三个要领初看起来,似乎是太抽象,但是经过仔细体会后,就会感觉到其实很形象,它直观地把脊 柱环转的运动路线描绘出来了。理解了上述三个假想,就会完全掌握健身气功?八段锦中的“摇头摆尾去心火”的动作内涵。以该势“由右向左摇”的动作为例,从 马步开始,上体向右倾,这时脊柱线是直的;低头看右脚时,脊柱是屈的,假想的脊柱线两端右前弯曲;当头摇至身体正前方时,假想的脊柱线的两端向正前弯曲; 当低头摇至左侧时,假想脊柱线弯向左前方;抬头的同时,尾闾向后上翘,假想脊柱线同时弯向后上方,因此形象的称之为“摇(抬)头摆(翘)尾”。

  脊柱全方位动作:同颈椎全方位动作一样,把脊柱的单个动作、组合动作逐一地、连贯地做一遍。

  脊柱的蠕动:蠕动有两种,其一是以冠状轴为转动轴,在矢状面蠕动,因此称为屈伸蠕动;其二是以矢状轴为转动轴,在冠状面上蠕动,因此称为侧屈蠕动。脊柱的蠕动是以每两节脊椎骨的运动为基本运动单位,其实质是对脊柱屈、伸、侧屈、侧身动作顺序、节奏细化的结果。

   屈身蠕动的目的是对椎间盘的前后进行挤压、松开锻炼。由预备姿势开始,脊柱先自然弯屈,敛臀、收腹、含胸、低头;然后,沉裆,尾闾由前上翘向下、向后划 弧,即向后翻臀;继而塌腰,再展腹,尔后再挺胸、肩胛骨内靠,最后抬头,直至脊柱尽力伸拉。接上动,先沉裆,尾闾由后上翘向下向前划弧;继而松腰,再收 腹,尔后含胸、扣肩;最后颈椎屈,低头。然后恢复至预备姿势。如健身气功·五禽戏中“虎扑”动作就是脊柱屈伸蠕动的一个过程。

  侧屈蠕动和屈伸蠕动类似,惟尾闾向侧上翘,头向侧屈。

  通过上述对脊柱锻炼方法和动作要领的分析,可以看出,提高对脊柱运动机理的认识,掌握脊柱运动的规律,对提高脊柱锻炼质量,增强锻炼效果具有十分重要的意义。

Taiji|中国传统内家拳揭秘

第一部分

各位练武术的朋友,请你们先把手头儿上的功夫放一放。我要告诉你们一个秘密,这个 秘密在长达半个多世纪以来无人揭晓。而今天终于被找出了答案。这个答案是多年来我一直想知道的,我想也应该是大家一直都想知道的。那就是咱们的武术前辈们 在与人交手中是如何做到抖手人飞犯者立扑的。这其中的道理是什麽,怎样练才能达到呢?这个问题一直捆扰着我们。多少年来大家一直再猜测。因为这种功夫一直 被拳家所秘传。而国术在近百年来又是几经沧桑,本来就鲜为人知的内家功夫到现在已成残喘之势。以至于有很多人已经开始怀疑它的存在。认为这种功夫只是传闻 而已,可信度不高。不象国外的拳击与格斗。全部都有相关的记载。真实可信,来得又快。所以有很多朋友现在已经开始改练拳击和散打了。这种局面不能不让我们 每一个热爱传统武术的男儿所忧虑。可问题是光忧虑是没有用的,要想使这种状况得到解决就必须拿出事实来予以证明。但我们却又苦于自身功夫的浅薄,无法拿出 事实来说明。所以只好是望而兴叹了。  

而现在的武术界从表面上看起来虽然是武馆林立,各门各派人才辈出。而实际上这些所 谓的衣钵传人和关门弟子在拳学理论上大都海阔天空,在实际应用方面则推三堵四。别说是技击,就连推手也难以让人信服。嘴上说是传统武术,而实际上是武术加 散打。所谓发放也只不过是在说手当中以大个对付小个,体重大的对体重轻的,会打的打不会的。更有甚者,竟利用后学者的无知和经验不足,用下流的手段来蒙骗 学生。    

这些实际情况让我们这些热衷传统武术的后辈们真的是饱尝了风霜。但这并不是最惨痛 的,最可悲的是那些受了蒙蔽还不自知,每天还要花上几个小时的时间去苦炼,梦想自己能有一天终有所成的人。这些人不单单是在经济上受到了损失,而无法挽回 的是几年或是十几年的宝贵时光。经济上的损失终归是可以弥补的,可大好的光阴却是一去不复返了。  

我个人这个圈子里摸扒滚打了二十多年。一边寻师访友, 一边刻苦钻研。可进展上却总是颇为缓慢。在这当中不知打了多少次退堂鼓。就在我一筹莫展的时候,老天爷给了我一个意外的收获。几年前的一次外出我有幸结识 了一位原籍河北的老人。到现在我们也不知他姓氏名谁。可在这几年当中我却一直蒙受他老人家的教诲。在这几年的时间里,我不但自身的功夫有了前所谓有的变 化,而且通过学习以前遗留下的诸多问题也全部得到了解决。这真让我心喜若狂。但在喜庆之余我并没有忘记还在泥泞之中蹒跚而行的朋友们。我要郑重的告诉大 家,在我二十多年的武术生涯中,所结识的圈子里的朋友多不胜数。包括我在内大家全都练错了。我这麽说不是在吓唬大家,我知道大家听到这样的话心里是什麽滋 味,这和我当初听到先生这样说时内心的感触是一样的。所以我就更应该把真相告诉大家,把所谓的不传之秘告诉大家。在如今这个年代,我所遇见的这位老人能不 惜打破几百年来一脉单传的陈规,既不为名也不为利,把武功首次外传。我想这应该是出自一位老武术家对中华武术的热爱与关怀吧。作为他老人家的学生,就更应 该把继承和宏扬中华传统武术作为自己所应肩负起的一种责任。刚才我跟大家讲这麽多年咱们都练错了,那麽究竟咱们错在那里了呢?

下面我将针对这个问题给大家做一个粗略的分析。要说都 练错了,那可是个大问题。这个问题可不是随便乱讲的,是要拿出事实依据的。要说错,其实咱们大家都错在了一点上。那就是传统武术练的是心,是人体的先天功 能。而我们现在所练的却是后天的躯体。当然练先天功能,后天躯体也要跟着发生变化。但大家却忽视了先天才是问题的根本,应当作为下手之初,而我们现在全都 是在舍本逐末。大家不妨想想,如果我们把锻炼的重点放在后天形质上的话,那麽无论你使用任何方式方法,你的这种锻炼模式和现代所有竞技体育项目的训练在本 质上是没有区别的。说到这里,肯定会有很多练形意,八卦,或是练太极练大成的朋友表示反对。没关系,我在这里先要跟大家说两句佛家的偈语。这几句偈语千百 年来一直没人能够破解。在我与先生学习期间,他曾多次对这首偈子进行讲解,使我获益匪浅。我想在这里提出来多少也能给大家一些帮助吧。这首偈语的原文是: 空手把锄头,行路骑水牛,人从桥上过,桥流水不流。咱们都是行路骑水牛的人。嘴上说自己练的是内家拳,形式上也没有错。可练的过称中却一直是在跟着自己的 感觉走。无论是好的感觉还是坏的感觉,只要是你在跟着它转悠,你所练的就都是后天而非先天。拳法本身并没有错,无论是桩功还是架子,错的是我们每一个执着 自我意识的人。我个人在平日里经常与各门各派练武术的朋友们一起切磋交流。对于很多难以解答的问题我都曾向先生一一进行请教。比如说抖大杆子,先生说秆子 必须要在自身练到内外相合的基础上才能练习,否则极易出偏。尤其是那些体质差的人,在既没人指点又急于求成的情况下进行大运动量练习,会造成很严重的后 果。先生还说,当年丘处机丘真人练功用的试力石重达四百斤。如果没有相应的内功作基础,即使你练到能把它举起来,也只不过练的是一身蛮力。况且我国国人体 质与西方人种相比相差甚远。这一点从现代所有对抗性体育项目上都表现锝极为明显。而基于中国传统文化的内家功夫在这个方面却有其非常独特的锻炼方式。恰恰 能够弥补国人体质之不足。

说到这儿,不禁使我想起了几个练形意和八卦的朋友。他 们针对自己所练的拳术在练功的方式方法上提出了很多问题。而这些问题正好可以做为典型事例来给大家在学习上提供帮助。大家应该知道,形意,八卦,太极包括 所有内家拳在内,不论是拳架还是桩功,只有形式上的不同,而没有本质上的区别。其目的都是在开发人体的先天功能。并使之与后天形体合二为一。以备其用。在 练法上,无论是行拳架还是练站桩,虽然可以按照高中低三种不同的姿势去锻炼。但是在上中下三盘之中,我们还是应该以高式作为最基础同时也是最关键的课程勤 加练习。因为只有在最自然的姿势状态下,我们才有可能作到身心两个方面的放松。而只有在身心两个方面都得到放松了之后,我们才有望启动人体的先天功能。作 为中盘和下盘只不过是先天功能在人体内部充分发挥使后天形质得到明显改善的一种外形体现。而现在的练习者大都把事情本末倒置。把原有的内功训练变成了力量 性训练。以至于把肌肉练锝僵硬,关节造成异常的比比皆是。身体素质好的也只不过是增长了些力量而已。对于内功则毫无意义可言。而在力量方面果真要和专业队 的运动员相比较的话,其差距真不是略逊一筹的问题。因为要真把这种形式作为增长力量的手段来实施的话,远远不如现代体育项目训练得科学。

说到传统武术的内劲,有很多朋友多次提到气沉丹田的问 题。其实这与咱们上述的问题相似。现在的习练者大都把事情前后混淆了。所谓气沉丹田是人体的生理机能得到充分改良之后的一种特征。当先天功能在习练者的身 体内部被启动之后,其皮肉筋骨与五脏六腑全部发生了显著的变化。身体从后天状态逐步向先天状态过度。其身体特征表现为形体柔软,呼吸由原先的胸式呼吸漫漫 下降成腹式呼吸。由粗重逐渐变得匀细深长。头脑中的杂念也越来越细微。所以说先天功法在人体生理的改造上一步有一步的征候。而我们却把前人在无为状态下获 得的身体变化特征,用后天的思维方式变成了一种有为的运动方法。在现实中,这种情形不胜枚举。就拿形意拳的明暗劲来说吧。所谓明劲,是习练者在先天功能的 作用下,使身体达到节节贯通,节节贯川的状态之后,在平日练习或技击当中在形体上浑然而生的一种整脆之力。常会给人一种其锋莫可当之的感觉。而后人却误认 为此劲一定要使劲才能练成。假如真那样做的话即使你苦练一辈子也是白费功夫。所谓暗劲,是指先天功能使后天形质进一步发生变化,先天一气由体内出露体外。 使先天功能由习练者的形体本身扩充到形体之外。与大自然中的先天一气相互融合。所以习练者在平日的练习或是在技击当中,其形体上表现得好似轻描淡写,给人 一种毫不经意之感。而现在的习练者对于暗劲的理解在这里我们就不做评判了。其实一直让人难以置信的轻功,也是待身体整齐化一之后,先天之气由体内出露体外 与地表形成一种相斥之力。而后再行穿沙衣跑板子的一种特殊功法。在这里我们不做详述。

而作为内家三拳之一的太极拳,当年王芗斋先生在达记者 问中曾说该拳却有几种力学原理。而得其要者百不能一,因为其基础体认功夫早已消亡。这是王芗斋先生在当时哪个年代对我国传统武术的一种担忧。如果从现今来 看,几乎所有传统武术都是从一开始的铁老虎而逐渐变成今天的纸老虎。几年前我从先生的藏书中曾看到一本太极拳的老拳谱。其中几句有关于棚劲的描述,我想大 家看了之后也许会和我有相同的感受。书中写到:所谓棚劲者,如水负行舟,先实丹田气,次要顶头悬,遍体弹簧似,开合一定间,任凭千斤力,漂浮并不难。从这 几句话中大家可以得知,太极拳也要求习练者在推手与断手中具备无点不成弹簧挨着何处何处击的混元力。而并非象现今的太极拳,只能运用一些近乎于摔跤的手法 在力量和技巧上去赢人。同时也说明了遍体弹簧似这种技击状态并非只被一家或几家拳种所拥有。而应该是中华传统武术所共有。

但是在如今,这种传统功夫已几乎成为绝学。造成这种现 状最重要的原因无外乎有三种:语言,文字和童子功的问题。因为前辈们的心得体会全部来自于先天功能。而语言和文字都是后天所为。所以当老师的倘若在这两个 方面尺度把握不好的话,就很容易使学生产生误解。况且做学生的在对先天功能没有切身体会之前,全都习惯于用后天的思维模式去理解老师说的话。这也是造成错 误的一个重要原因。然而这种功夫并不意味着真的象古语所说的那样圣人之道不可传。关键是要看当老师的怎麽教。在过去,一般都是有钱的人家把老师请到家里 来。既然你请人家来就是相信人家,所以过去当老师的一般都很严厉。学生练的不对不是打就是骂,而且一开始决不给你讲其中的道理,只是叫你按他说的去练。练 的不对他自然会告诉你。当学生的从不敢多问。其实这才是高明的老师。因为他知道说了你也理解不了,不但没帮助反而会害了你。当学生的只要能按老师的要求认 认真真的去练就行了。但是在这里面有一个很关键性的问题,就是过去凡属武术名家在学艺途中都有两个基本相同的特点。一是童子功,二是都有明师指点。所以大 都不会走冤枉路,等功夫上身之后拳理也就自然明了了。可后来由于社会条件的改变和政治上一些相关因素的影响,很多习武之人大都是半路出家,而这些人在很多 方面缺乏练武所必备的条件。尤其是在身体条件上与学龄前的孩子相比是有天壤之别的。而咱们的武术前辈们在教学上对于这些半路出家的人来说大都缺少相关的教 学经验。这就必将造成形体训练这一重要环节在难度上的加大。

人体在筋肉骨骼上的构造基本上是这样的。在医学上,筋 是指一条肌肉的两端附着在骨骼上的那一部分,骨骼与骨骼之间是靠白韧带与黄韧带相连接的。关节的中间是软组织,软组织中有组织液。它能在人体受到重力时起 到缓冲作用。而由若干肌肉纤维组成的肌肉束的外围有一层筋膜,学名叫结缔组织。这种结缔组织把若干肌肉束组成的肌肉群也包裹着并同时把全身所有的肌肉群全 部连接在一起。传统武术中讲的筋膜腾起说的就是针对这种结缔组织通过良好锻炼之后所达到状态。它本身是有弹性的。而人体在后天当中由于诸多因素的影响,尤 其是长期从事体力劳动的人,都会导致这些人体的组织结构发生很大的变化。所以在过去的武行中有肩不挑担手不提篮的说法。这句话是相当有道理的,因为手持肩 扛对人体脊柱的影响最大。

人在三岁之前脊柱与盆腔还没有完全长合在一起,所以在 这个年龄段的小孩走起路来晃晃悠悠总是爱摔跟头。在这之后随着人体的成长和发育,由腰到尾闾这一段的脊椎渐渐和盆腔长合在一起了。这一段为人体的中节。在 人体的上中下三节当中,中节的锻炼在中国传统武术的修习过程中起着至关重要的作用。作为习拳者中节必须要打开,这一段被贯通之后当人体在做原地旋转时,整 条脊柱与盆腔还有两跨是分别转动的。而现在练武术的朋友从腰到尾闾这一部分的脊椎骨与盆腔都是闭合在一起的。这正是问题的关键之所在。因为只有在这一段被 完全打开之后,习拳者在平日练习或是技击当中才能做到上下相连,手足相顾,内外如一。所发之力才能均整,攻防之中才能作到化打合一。否则,我们只能是去和 对手比拼力量,速度,耐力还有技巧,从而落入了现代竞技体育的模式,与中国传统武术完全背道而驰。

喜欢看武狭小说的朋友都知道大侠徐良的背是驼的,这种 说法可真是外行看热闹。当人体脊柱舒展到最佳状态的时候就跟猫科动物的脊柱一样是耷拉着的。尤其象猫在蹲着的时候,背是圆的。世人还误以为是驼背,其实这 正是传统武术中要求习练者所必须达到的含胸拔背。而溜肩圆背则是一种最佳状态,它是先天功能在人体生理改造上的一个重要标志。所以在拳谱中有熊蹲虎坐,鹰 眼猿神,鸡腿蛇身的说法。对于这些老话大家千万不可忽视,不能只当作是一种形象上的比喻。而现在的练习者大都只是一味的从外形上去模仿。没有真正理解传统 武术在体用这两个方面的实质与作用。这正是需要我们每一个人反思的。真正的传统功夫告诉我们:只有通过人的本体即先天功能的发挥,才能使后天形质得到改 善,直至在实际当中发挥出这些动物的特性,而这才是我们每一个习武者所应追求的。

在人体的所有关节当中尾闾这一节是最难打开的,当尾闾 被打开之后其他关节均已被打开。在这种状态下尾闾与两跨在同一平面形成了一个三角形的万向轴。各项力量都可以由此而转换。所以在中国传统武术中把两跨与尾 闾称为一身之根节。当习练者达到了这一层次,就可以在推手或技击当中,在身形不动或微动的状态下使对方的力量通过与我的肢体接触而使其化为乌有。

比如当对方用力推住我的双臂或前胸时,对方的力量会自 然而然的沿着我的脊椎产生快速移动,由脊椎骨的自行传导下降至尾闾而使其落空。在此同时,我的力却由脚根起经腿和腰传送到接触点作用在对方身上。这在传统 武术中叫分阴阳。在这种生理条件作用下,不管对方有多用力,我的身体却始终保持在松弛的状态。对方推不动并不是因为我在用力抵抗,而是由于我的身体在做自 然性的传导。这正是传统武术中无力之力的道理所在。

在一般情况下,对方越是推不动就越会用力,而越是用力 身体就会越僵。直至想撤回来都不容易。就好象是我把对方给粘在了身上。这时候对方的感觉就好象是推到了墙上,从脚底下有一种被棚起来的感觉。因为对方的力 根本没有作用在我身上,而是随着自然性传导全部回到了他自己身上。在这种状态下对方越是用力脚底下就越是站不稳。因为对方的重心已被他自己所发的力给破坏 了。所以脚下失去了平衡,这就是棚劲。而棚劲的产生正是由于自身阴阳的自动运动。

在这里要向大家说明的是,功夫到了这个层次的习练者无所谓推人和被人推,因为道理是一样的,因为这种自身阴阳的转换或称之为攻防上的变化已完全脱离了外形的招数和技巧。庄子云:得其环中以应无穷。而这正是环中之力的初级阶段也可以说是遍体弹簧似的刚刚开始。

到了这个阶段习拳者才真正作到了推手即是断手。因为这 时候的习拳者在技击当中已不必左躲右闪的去逃避对方的拳脚,或是在你来我往当中被动的去忙于招架。我们要做的就是主动靠近对方,已迅雷不及掩耳之势去攻击 对方的中线。几乎不给对方留第二次出拳的机会。所以拳经有云:起如箭,落如风,追风赶月不放松。起如风,落如箭,打倒还嫌慢,足打七分,手打三,五形四梢 要合全,气连心意随时用,硬打硬进无遮拦。这就是中华传统武术的初级层次。到了这个程度,习拳者才能在技击当中体现出传统武术的味道。

第二部分

说了这些,大家应该明白了什麽才是改造生理,改造生理在传统武术中的重要性是什麽。而改造生理的关键是要启动人体的先天功能。那麽如何启动人体的先天功能呢?首先,我们要从改变自己的思维模式入手。

为了让大家便于理解,我先说一个日常生活中的事例。人 在睡觉的时候,由于长时间在一个姿势状态下造成肢体上受到压迫,使自身的血液循环受到阻碍。在正常情况下,我们都会自动的进行调整。但是由于过度疲劳或其 它等原因,大脑对肢体发出的信号没有反应,而这时由于肢体压迫造成的疼痛不断的加大,使大脑不断的收到大量的紧急求救信号。如果这时侯大脑对此还是没有反 应的话,脑神经就会因为受到这种大量不良信息的反馈而产生出各种幻觉,我们把这种现象叫做梦。在这种情况下所做的梦往往都很恐怖,我们便会从噩梦中惊醒, 而这一切都是由于肢体的极度不安造成的。这个事例告诉我们,人体在生理和心理上是相互作用的。一个人有什么样的生理状况,就会产生出什么样的心理状态。而 地球上所有的动物,包括人类这种高级动物,他们的思想行为都是根据自身的生理条件来决定的。

那么,换一个角度讲,我们每一个人都是被禁锢着的。被 什么给禁锢着呢?就是被我们现在所具备的生理条件。人的生理条件决定了他在现实当中所做的一切。我们平常要用眼睛才能去看,用耳朵才能去听。但是有很多武 林前辈都有不见不闻之知觉。这正是人体先天功能所产生的作用。然而先天功能的发挥完全有赖于后天心态的改变。人体现有的生理条件是固定的,我们不可能让它 再长出第三只眼睛来。能够改变的只有我们的思想。

说到心态的转变,大家就会想到佛家所说的修心。没错, 我们所说的转变思维模式的确跟佛家所说的的修心有关。那么大家一定要问:佛家历来只注重心性上的修为,而忽略形体上的锻炼。这跟武术有什么关联呢?其实无 论是佛家也好,道家也好。根本就不存在只修性不修命,或是只修命不修性的问题。因为性命是不可分的。心物是一元的。

但是佛道两家的经书浩如烟海,这让人从何学起呢?其实 经书只是前人练功的经验和体会。纵然有千卷万卷,其实问题只有一个。讨论的都是如何去解决。那么在这个问题上,方法虽有八万四千,但是你却只能拥有一个。 所以事情并不象大家想的那么复杂。但在这里要提醒大家注意的是,千万不要迷信有什么修炼口诀。所谓千古不传之秘只不过是教你如何改变后天的思想意识,让你 从被禁锢的思维模式中解放出来。而只有这样才能启动本我的原有功能,打开人与自然之间被后天堵塞的通道。这就是禅机,道家称为玄关。它是开通人体先后天的 一把钥匙。要想开通它的确要有方法,但决没有什么口诀。因为每个人的情况都不一样,大家怎么可能都用同一种方法来解决所有的问题呢。

前面已经说过,人的思维是受人类现有的这种生理条件影 响的,所以说它是有很大局限性的。如果我们能从主观上改变自己的思维模式,把它从一种有局限的思维逐渐转变成一种无局限的思维。而后再通过这种无局限性的 思维来改变我们在后天思想意识作用下的能量运行模式。使它从一种杂乱无章的非常状态,回到一种无意而有序的自我调节状态。古人把这种状态称之为先天状态。 在这种先天状态下,人体能量是自然运行而不受后天各种因素的干扰的。所以前辈们把这种自然状态下的能量运动也叫做自动运动。这种自动运动可以使我们的身体 不练而自练,不养而自养。不锻而自锻。被破坏的人体组织机能在这种运动的作用下会自然的进行修补而逐渐得到康复。使不健康的身体变得健康,使健康的身体变 得更强壮。最终,这种自动运动会沟通人体与自然界之间的能量通道,从而达到天人合一的理想境界。

当习练者具备了这种自动运动的体验之后。接下来,我们 将面对的就是如何节流的问题。有人说开源为第一,节流为第二。其实,开源与节流同样重要。开源就如同人在沙漠中找到了水源,但如果不能很好的保存和利用, 其结果还是会被沙漠所吞噬。所以,节流是个大学问。这对所有修习传统武术的人来说都是一个重要的转折点。它与心性上的修为是并驾齐驱的。很多人到了这个阶 段就停滞不前了。如果我们想在武学的修为上继续大踏步的前进,那么必然要在心性的修为上高瞻远瞩,不能只看眼前的这点成绩。欲穷千里目,还需更上一层楼。 否则,只能是内家里的门外汉。曾有一位前辈感叹地说:想不到搞了一辈子的养生,到最后却落得如此地步。其实,这个问题在中国传统内家拳的修习过程中是必修 课。不然的话古人就不会在武学上一直把德行放在首位。

在武学中,技击只不过是人体在生理改造的进程中各个不同层次的不同表现。如果我们本末倒置的把表象当成了目的,那么即使你水平再高最终难蹬内家之堂奥。

对于开源和节流的问题在武学上只是历来被拳家所秘传。 在世间少为人知。其实佛道儒三家的经典之作当中对开源和节流这两个问题都有独到之处。只是在方法和作用上有所不同,后人看不明白而已。作为后人看不明白的 原因,主要是由于这两个问题一旦展开就会变得非常复杂,因为每个人的脾气秉性都各不相同,所以入手功夫决不可能千篇一律。最终所得的结果也是深浅不一。在 这种情况下,前人的经验之谈便会给后人一种无所适从之感。况且前人在个人心得的描述上用词多有隐晦。这就更使后人如入五里迷雾。但这并不是说就没有好的方 法可行。佛家六神通里的漏尽通,道家的斩赤龙,断白虎都是前人在开源与节流这两个问题上的实际验证。然而,凡属非常之成就都来自于平常。可大部分人总是喜 欢把问题复杂化。误认为前人的一些成就是高不可攀的。这种思想意识的形成一是由于没能掌握好的学习方法,二是由于现实当中的误导。比如,佛道两家的清规戒 律到底是为什么而设?这个问题肯定会有很多人都能回答。可答案却不一定正确。有人说现在市面上所流行的佛道两家的修持方法都是普法,真正的大法一直在秘密 流传。这种说法也不能说它完全没有道理。比如说,在节流这个问题上属男女之事最难解决。而现在社会上有那么多的大师到处讲经说法,大家不妨可以请教一下, 问问他们对于这个问题是如何解决的。仁义道德谁都会讲。而为什么在实际当中却排不上用场。近年有人在刊物上大谈男女双修的问题。明明知道这种功夫容易麻痹 世人害人害己。还在那儿一个劲的的肆意宣扬。殊不知,所谓男女双修本来只是对节流功夫的一种验证。要想做到不漏,首先要做到无欲。然而无欲并非无能,只是 慧而不用。这种功夫一定要在形神合一的基础之上才有可能操行。它是练己功夫的验证,而绝非技巧。历来高僧大德在这个问题上决不敢信口雌黄。对于这个问题的 对治方法从释迦摩尼佛开始就没有明确的记载。可见这个问题的复杂性绝非一般。难怪南怀瑾先生说他这么多年来在市面上还没见过一个百日筑基的人。

在武学中,要过这一劫必须先要过生死关才行。所谓生死 关就是让你在思想意识上,体验什么才是真我。这样你才能明了人的生死只是表面现象的变化而已,其实无所谓生也无所谓死。由此,你才能具备清逸之大勇。而非 匹夫之蛮勇。李洛能先生端坐椅上一笑而逝,孙禄堂先生说自己视生死如游戏。过去有很多的老武术家在这个问题上都有具体验证。当年王重阳祖师在终南山修炼掘 活死人墓。大家不妨仔细想想,也许可以从中悟出一些道理。

对于心性的修持是无止境的。万丈高楼平地起,最基础的东西往往才最重要。谈论了半 天开源与节流,而实际上开源与节流是一个问题的两个不同的方面。把它作为两个问题是因为在后天的表现上有所不同而已。前面已经说过,开源是对人体先天功能 的启动,而节流实际上是先天功能对后天形体的转变。只不过这种转变需要我们在思想意识上进一步提高。在功法的修炼上更加精进。所以,我们的重点还是要放在 如何改变自己的思想意识,启动人体先天功能这一方面。


第三部分

中国传统武术中的内劲与道家的先天一气,佛所说的自性,儒家的中庸之道,所修炼的都属同一资源。

中国的老祖宗们用周易来解释万事万物。认为天地之间人是一小天地,宇宙为一大天地,人天是一理,也就是说天道即人道。

人在未出生时,犹如宇宙的原始状态,阴阳未判,天地未分,无形无相,无我无他,浑浑噩噩,一气浑然。

当婴儿出生后,正如天地已分,物质世界产生,分阴分阳,有善有恶。先天之元气即先天之气,随着人的成长,为知识情欲所惑。元气渐消,体质日弱,若按易学之理术,扭转契机,把握阴阳,引中和之气,返还原始之初,使人体质增强,以复先天之本能也。

因而,古人有先天八卦与后天八卦之分。先天八卦的排列是乾上坤下,离东坎西,后天八卦的方位排列是离上坎下,震东兑西,而乾坤两卦分别居于西北和西南。

古代的先贤们认为,人本来是乾健之体,阴阳是相和的,正如先 天八卦图所示。乾卦中的三个阳爻表示纯阳之气,坤卦中的三个阴爻表示纯阴之气,而当人落入后天则阴阳分离,乾卦的中爻陷入坤卦,坤卦的中爻陷入乾卦,这样 一来乾卦与坤卦发生了质的变化。由先天而变为后天,乾卦转为离卦,离卦属心,心属火,故称离火。坤卦转为坎卦,坎卦属肾,肾主水。故称坎水。

要想使人恢复乾坤正体,就必须使坎卦中的阳爻入于离卦的中 爻,让离卦变回乾卦。离卦中的阴爻下归坎卦的中爻,让坎卦变回坤卦,这叫做坎离交媾。由此而行,周天运转,使人恢复乾坤正体即所谓后天返先天,至此,于道 来说还并未到达究竟。需更进一步使乾坤交媾也就是阴阳相和。易理是一分为二现在是由二返一。所以古人云:得其一而万事毕。

需要注意的是,前人在修炼上所总结的鼎炉,药物,火候,河车 运转,结丹等术语,其用意只是作为比喻。比如丹田窍穴虽有其方位,但却无实处,使得后学难识其本来面目。在此奉劝各位,用功一定要从无入有。心中需空空洞 洞,待需极静笃之时自然明了其中奥秘。玄关玄窍只不过是用后天之呼吸引发先天真一之气,并没有固定方位。但却有其真实景象,古人所言实不虚也。

老子在道德经中说:天下皆知美之为美,斯恶矣。皆知善之为善,斯不善矣。故有无相生,难易相成,长短相较,高下相倾,音声相和,前后相随,其大意是说,如果大家都追求至善至美的生活,那必然会有善恶的产生.这样一来,所谓美的东西也就不美了,所谓善也就不成其为善了。所以老子奉劝世人,有无,难易,高下,前后等等,都是人为划分,这一切都源于人的后天欲望。因此他主张无为,希望大家不要被同一事物的两个方面所蒙蔽。

哲学家们则认为,自然界中的一切事物都是相互对立而又统一的。

王芗斋先生在大成拳论中也曾指出,天地之间,无一不是矛盾,又无一不是圆融,必须打破圆融,统一矛盾,也能融会贯通。 

以上三段文字都是前人对物质世界的种种看法,具体到拳术中又如何理解呢?

王芗斋先生说练拳要从抽象中求具体,在虚无中度其有,在有中揣其无,大部分人对抽象与具体两者间的关系都是这样理解的。

下面举例说明,当习拳者在站桩时,双手如报球状。球是想象出来的属于抽象,因此而产生的撑抱力是身体方面的属于具体。

试力时身体犹如站在水中,水是想象出来的属于抽象,由运动而感觉到上下,左右,前后都有相应的阻力是身体方面的属于具体,如果说这就是抽象与具体的话,那么大家都忽略了关键性的一点,那就是两个事例当中所谓的抽象都来自体后天的器官――大脑的想象。

这么一来,大家就把问题给单一化了。也可以说是 陷入文字障碍中了,因为人认识事物都是有标准的。正如老子所说的,有无、难易、高下、音声、前后。那么标准从何而来呢?当然来自于日常生活的积累。人从很 小的时候,就开始观察。观察生活中周围的一切。这个是什么?那个是什么?等等等等。从简单到复杂,从家庭到社会,逐渐形成个人意识。什么是好?什 么是坏?什么是美?什么是丑?乃至人生观与世界观的形成。人的大脑把看到的,听到的,或是感受到的知识经验全部储存起来,然后分门别类。在需要的时候,再 把相关内容从记忆库中调出来。所以说,人们在站桩与试力中所运用的精神假借全部都是现实生活中的第二重投影。人们只不过是把真实的事物通过大脑的想象了一 下而已。这并非是抽象。对于身体方面的感受来说就更不言而喻了。

那么,什么才是王芗斋先生所说的抽象呢?抽象就是不能有具体 的形象,换句话说,它不是现实中人们可以用肉眼看到,用手触摸到的物质。庄子说物物者非物就是这个道理。而在人们大脑中所储存的全部都是自然界中的事物。 哪怕是人们编造出来的,现实中没有的东西。也只不过是把现实中的某些个体七拼八凑而成的。凡是有形有质的物质,包括人本身,都不属于抽象的范畴。抽象是看 不见,摸不着,但又是确实存在的。

佛在两千多年千正悟到的自性本空。他认为宇宙万物都是这个自 性变化而成的。而中国的道家也有相似的说法。丹书云:道自虚无生一气,便从一气产阴阳。阴阳再合成三体,三体重生万物张。不管这是唯心论还是唯物论,还是 心物一元论,不管现代科学能否辨别其真伪,人类的先贤就是这样来解释宇宙的。

而不论是道家学说还是佛家学术,这与咱们谈论的抽象又有什么联系呢?中国道家的代表人物老子说:一生二。这个一是只天地万物未分之时,属于混沌状态。所以,老子叫它无名天地之始,也就是还不能赋予名称的意思。对人来说属于没生之时。

那么,数字二又叫两仪或阴阳,是指原始的混沌世界由于运动而分化出天地,随着天地的产生而生成万物。自此,天地万物各有其名,所以老子把它称之为有名万物之母。对人来说为己生。

物质有了名称就产生了分别,有分别便会有矛盾。然而矛盾的双 方即是对立的又是统一的。比如:长短、大小、高低、前后。假如没有长的观念也就不会有短的概念产生。没有大也就无所谓小。如果从拳学的角度看,无论是动 静、虚实、开合、吞吐都是同一事物的两个方面而已。换句话说,是一个事物在各个不同方面的表现。或者说是这个事物在现实中所表现出来的具体形象为动静、虚 实、开合、吞吐。那么这个事物为何物呢?老子把它称为一。在拳学中,王芗斋先生说使身体动作达到松即是紧,紧即是松,松紧紧松勿过正。实即是虚,虚即是 实,实虚虚实得中平。要想能达到这个中平,那么就非得回到一的状态不可,而这个一就是道家所说的先天一气,也正是我们所寻找的抽象。

为什么这么说呢?如果说先天一气是有的话,可是它既看不见也 摸不着。如果说它是无,你只要按规矩练,练对了它就有相应效果。它既不着于有也不着于无。佛家讲不执着不着相。金刚经说的好,无我相无人相,无众生相,凡 所有相皆是虚妄,若见诸相非相,即见如来。这里说的如来就是真如自性。孟子曰:养浩然之正气。这个正不是代表正义,而是不偏不倚的意思,不偏不倚谓之正。 所谓不勉强而中,不思而得,从容中道是也。意思是说:不带有一丝一毫的勉强,没有后天欲望的驱使,如此中道方为从容。

王芗斋先生自称矛盾老人,他认为,物质世界无一不是矛盾又无 一不是圆融,必须打破圆融,统一矛盾才能融会贯通。这个物质世界中的一切都是相互联系,然而又是相互矛盾的。所谓圆融正如五行相生,水生木,木生火,火生 金。所谓矛盾就像五行相克,水克火,火克金,金克木,木克土,土克水。如要维持这种圆融的状态就必然会导致矛盾的产生。所以,要想解开这种局面唯一的方法 就是打破,只有打破这种表面的圆融才能统一所谓的矛盾。在拳学中,王芗斋说一法不力无法不容,老子曰:为无为则无不治。

以上所谈皆是法则,具体用功又当如何呢?前面已经说过,易学 从数理上认为,物质世界是一生二,二生三,三生万物。那么,要想由后天返到先天,从数理上讲是一个由繁入简的过程。从后天八卦和先天八卦的卦爻上看,是一 个从低级阶段向高级阶段变化的过程。然而,数理也好,卦爻也好,都只是用来比喻而已。就象用手指月,目的是让人看到月亮而不是让你去研究手指。在具体操作 上,大家可任选一种适合自己的方法来练习。具体要求简单的说,就是身心皆不可用力。因为人活着,包括成长,发育,全部依赖于先天一气。它是一股活力,内含 无限的生机。它和人的关系就好像燃油与汽车,没有油的燃烧车是发动不起来的。而当人落入后天,先天的作用就被取代了。所以,只有在后天欲望与注血之力得以 控制之后,它才有可能逐渐恢复其功能。

神秀法师对此曾有,时时勤擦拭,莫使染尘埃的诗句。王芗斋先生说,改造生理,发挥量能。

那么,什么叫改造生理呢?用老子的一句话来解释就是损之又 损,以至于无为。只有损之又损才能由二变成一,才能发挥良能。发挥先天一气的作用。那么这个由二变成一,或者说损之又损,用现在的话说就是要你不断的去掉 后天意识,因为在后天当中任何事物都有正反两个方面。假如不能打破这个局面的话,你将永远也不能统一矛盾而融会贯通。相反,如果你真的能在锻炼中有所体 悟,那么在身心两个方面都会有明显的改变。正如佛所说,本来具足。这个自性是不生不灭,不垢不净,不增不减的。你练它它也不会多,你不练它它也不会少。如 果你存有一个念头想去求它,就已经执着了。关键是你要能放下。只要你能把后天意识放下,当下即是。就这么简单。可难就难在放下了却难以保持。这也就是我们 为什么要勤奋练习的原因。所以六祖说:顿悟还需渐修。见地有了,剩下的就看你怎么用功修持了。

因此,大家应该能明白一个道理。练武并不是像一般人所说的, 先要炼精化气,再炼气化神,最后才能练神还虚。精气神是一体的,是不可分割的。只要你能明了还虚之理,合着规矩练习,那么你每练一日,都在炼精化气,炼气 化神,练神还虚。它是同时进行的。也就是说,你的后天意识去掉一分,先天功能就显露一分。后天意识去得越干净,你先天的功能就越强,你的武功也就越高。

那么,剩下的就是怎么练的问题了。从武术的角度说,不论你是 练站桩,还是行拳架。都必须合这规矩,使自己逐渐从后天状态恢复未生之时的先天功能。在这当中,首先第一步是你要先能明理。明理的目的是让你能够彻底的改 变你的思维。也就是让你明白,现已形成的在头脑中的都属后天的意识。要想恢复先天功能,就要把后天意识清扫干净。佛家称为转识成智或叫明心见性。倘若真的 能转,习练者在身体方面跟着就会发生变化。所以王芗斋先生说:心理作用于生理。在生理上真的起变化之后,再把身体方面的体认信息反馈于心理。这样,在心理 与生理上产生良性循环,也就是说,此时此刻先天功能已经在你身心两个方面发生作用了。

如果在身体上没有明显的改变,那只能说明你在理论上认识得不 清或根本就不正确。顺便提一句,所谓身体上的改变,就是身体应该越练越软,软到什么程度呢?当然能达到老子说的专气至柔能婴儿乎是再好不过了。在武术中叫 抻筋拔骨。这个过程在锻炼中会很不舒服的。每个人的情况不同所表现出来的程度也各不相同,在此不做详述。

所谓去掉后天意识,发挥人体的先天功能。其表现从心理上说是 无杂念,也就是通常人们说的入静。可别忘了,佛说过本来具足。你本来就是静的,只是后天把你给扰乱了。假如你把它当作一个追求的目标,那么无形当中等于又 多了一条杂念。本来出发点是好的,可真去做的话又变成了后天的欲望。结果是似是而非。这就是人后天意识的惯性,很难一下子解决。我已经认识到错误啦,现在 正朝好的方向努力呢,怎么又不对了?

下面,咱们来看看王芗斋先生是怎么说的。在大成拳论中,王芗 斋先生说身体要如大冶烘炉,无物不淘熔。杂念来你就让它来吗,反正它也不会待得太久。该走的时候它自然就走了。你是这里的主人,把杂念当成过客,来去不 留。在杂念的来去之间有一个空白,这个空白就是我们所说的静。可关键是太短暂了,顷刻之间就又让杂念给掩盖了。

怎么办呢?结论是没有具体的方法。只能让你头脑中纷飞的杂念像水中的灰尘一样。当水被盛入容器中后,让它自然沉淀。不要去管它。倘若一用方法,反会事与愿违。

说起来容易,真正能做到的确很难。这也就是王芗斋先生为什么感叹地说:吾道千年后,渗透禅关有几人啊!

前面已经说过,先天功能其表现从心理上是无杂念,也就是静。 而现在我要告诉大家,这个静也是着相。因为有无二相全是先天的表现,而不是先天的本身。这就是很多人虽然认识到头脑中的诸多杂念都是在后天逐渐形成的,因 而就片面的认为只要把后天杂念从头脑中清除干净,不就从后天状态返回先天了吗。而且,许多前辈高人都曾有过这样的描述。比如说:道本无也,心中空空洞洞等 等。可问题并不象大家想像的那么简单。先贤们说的空也好,无也好,并没有错。他们所说的空和无并非有无二相其中之一的那个无,而是有无二相两者之间的无, 或者说是空。也可以说是有无二相两者之间的有。确切地说它应该是非有非无。

为什么呢?因为说到其表现,如果认为它是有的话,可在人练功的过程中,它即没有身体上的固定方位,也没有具体的形象可言。假如说它是无,但它又却能不断的使人体产生出种种不可思议之妙。

从另一个方面讲,因为人与万物都同为道的载体,或者说是道的 表现。前面已经说过,当先天一落入后天那么必然会产生出正反两个方面。所以人做为道的载体,在练功过程中从身心两个方面所表现出来的也必然如此。要么就是 有,要么则是无。其两者同为道的表象。而道本身是无形无相的。因此大家要想合于道,就既不要被有的现象所蒙蔽,也不要因为无的现象而迷惑。既不要因为有好 的感觉而得意,也不要因为有太多坏的感觉而苦恼。因为这些全部都是道的表面现象。因此,在你前进的路途中所有的感觉都是过程,而非究竟。要做的只有正确的 把握尺度,而万万不可设立具体的标准。这就是规矩也就是道的法则。在此提示一下,我们通篇所谈的,皆是教授大家从身心两个方面怎么才能合于道。而至于能不 能成为道,那是另一个问题。所以我在第三部分一开始就说:佛道儒三家与中国传统武术的内劲所修所练的都属同一资源,而没说是同一究竟。

下面,我们将继续以王芗斋先生的拳学理论为主线,对内家拳进行具体分析。王玉芳女士在纪念先父王芗斋的文章中写到,意拳蕴含着深厚的天人合一的哲学思想。其内容博大精深。没有较高的学识与修养就无法理解其中之妙。更无法使功夫臻为上乘。

那么,如何才能将自我融入于宇宙之中,通过不断的自我放大,从而达到浑圆扩大空洞 无我也就是天人合一的至高境界呢?唯一的途径就是习练者必须对宇宙和人生的根本原则与原理进行深入细致的研究。也就是王芗斋先生说的以宇宙之原则原理以为 本。那么什么是宇宙与人生的原则原理呢?

它就是我们所说的先天一气。先天一气是宇宙与人生的原动力。前面已经说过,天道既 是人道,天人是一理。王芗斋先生提出的宇宙与人生的原则原理,并不是人类社会的原则原理。也不是自然界的原则原理。而是天与人两者所共有的原则原理。换句 话说,就是产生天人合一的道理是什么。很显然,道理就是天地人同为道的产物,都是由先天一气而产生。所以,道的法则也就是天地人共有的法则。也正是我们所 要探求与遵循的原则原理。

那么,怎么才能不断的自我放大,也就是将自己融入于自然之中,从而达到浑圆扩大空洞无我的境界呢?

古人对先天一气早就做过这样的描述。无穷如天地,充实如太仓。放之则弥六合,退之则藏于密。其大无外,其小无内。充塞于天地之间。

练拳就是要将人体内部的先天一气与大自然中的先天一气通过锻炼而产生联系。其中之 关键就在于后天意识的转变。转变的越彻底,就越能更好的利用自然。到了这个阶段,习拳者才刚刚开始超越自我。而只有做到超越自我,你才能够做到以小胜大, 以弱胜强。所以,中国传统内家拳能不能练好,完全不在于体质的好坏和身材的大小。孙禄堂先生曾云:苟有气即能练,天姿不昧既能成。因而,练武首要修德。古 语说,厚德载物。试想一个总是把个人利益放在第一位的人怎么能够做到无我呢。难怪佛家把行愿搁在第一位。练武也是一样,后天意识改变不了,先天功能在身体 上就不能得以发挥。先天不能在身体上发挥作用,即使你练的是内家拳但实际上早已和内家拳背道而驰了。因为后天之躯是不能融于自然的,更不可能浑圆放大。

在单双中与不着相一篇中,王芗斋先生说平日练习或是技击当中须保持全身均整,使之 毫不偏倚。凡有些微不平衡即为着相,力亦破体也。盖双重之病非专指两足部位而言。头,手,足,肩,肘,膝,胯,以及大小关节即一点细微之力都有单双,松 紧,虚实,轻重之别。今之拳家大都由片面之单重走向绝对之双重,更由绝对之双重而趋于僵死之途。

上述这些情况是如何造成的呢?因为就人体的各部位而言,各有各的使命。虽然都有连 带关系,但只要是你的身体发生动作,无论大小,都不可能做到一动无不动。只要是你还没有达到一动无不动的状态,那么身体只要稍一动作,那怕是一点细微之力 都会有单双,松紧,虚实,轻重之别。不是单重,就是双重。形必破体,力必出尖。这是毫无疑问的。其原因就是没能够做到统一。这里说的统一指的是肢体上的统 一和精神上的统一。精神上的统一还包括与外界的联系。而只有达到神,形,意,气,力的高度协调统一,才能避免单双重与着相之弊。

大家注意,这里说的统一可不是组合。因为神,形,意,气,力本身就是组合在一起 的。那么如何才能做到统一呢?众所周知,神,形,意,气,力都是人体的组织或是组织特性。也就是说,是先天一气在后天载体上的表现。既然如此,那么想要统 一就只能是让先天功能在人体内部产生作用。使人体的各组织和组织特性从各司其职的状态,通过运动调整而达到一以贯之的先天状态。然后,再逐渐的与体外发生 联系,使先天一气由体内出露体外。由自身的统一逐步发展到内外的相互统一。从而产生出一动无有不动的高度协调统一状态。

王芗斋先生说,根据自己四十余年体会操存之经验,感觉各项力量都由浑圆扩大,空洞 无我而产生。然浑圆扩大需由细微之棱角渐渐体会方能有得。这里说的细微之棱角并非单指形体而言。我们每个人在日常的生活和工作当中,于言行举止和思想方面 都存有太多的棱角。有棱角才会与外界产生矛盾。比如,在练静功当中。先是在身体方面产生大面积的疼痛感。而后由于功夫的深入疼痛感逐渐消失。但最困难的还 是思想上的转变。比如在你安静的时候别人打扰了你。人们总是喜欢把过错推到对方身上。其实,错误不在别人,而是由于在你自己的内心当中还存有很强的自我观 念。所以,你总是觉得是别人影响了你。因此古人为什么说要在闹市中取静。这里说的闹市并不是指喧闹的集市。而是指在最恶劣的环境下。这个恶劣环境相对于每 个人来说都是不同的。在这种情况下,看看你是否还能保持于事无心,于心无事的良好心理状态。不信你可以在自己身上验证。即使你练功练到杂念变得很细微的时 候,那最难克服的一丝杂念,必然是你头脑当中最为顽固的思想观念。这就是细微之棱角。它比躯体上的毛病要可怕得多。它不根除,你将永远也无法做到老子说的 流存无碍而不住的无为境界。王芗斋先生说,郭云深老先生心极虚,而腹极实。所以练拳其实是修心。只要你能虚得下心,那么不但任何棱角都可以迎刃而解,各项 力量也能由此而生了。所以道家讲无中生有,无为而无所不为就是这个道理。

对于各项力量来说,虽然名称各异。比如:三角,螺旋,定中,惰性,杠杆,轮轴等 等。但在实际当中,绝不可单一而论,更不可能单一而练。它们就像人体本身,从外观上看,却有上下,左右,前后之分。可一旦被先天功能统一之后,所谓各项力 量实际上都是先天一气的统一发挥。若单一而论,则又变成有形破体机械之拳道,而非精神意义之拳了。然而,拳论中有一切力量都是筋肉动荡与精神假象参互而为 的说法。其中精神假借这几个字又当如何解释呢?所谓精神假想其实是先天功能在人体上的发挥,而使人感受到的无穷无尽的景象。因为任何感受都要通过大脑,所 以称它为精神。而假想其实是根本就没去想,可感受到的一切就如同是用大脑想像出来的一样,因而把它称为假想。如果把这些由先天而产生出的景象加以描述而落 于文字的话,不论你如何描述总是有挂一漏万之感。因为文字所能表达的意思是非常有限的。针对包罗万象的道来说实属强言。因此后人大多都落入了文字障碍中。 把精神假想错误的理解成用后天思维去做幻想。而没把王芗斋先生说的精神方面须切实以为之,且莫流于虚幻的金玉之言认真体会。

自我谈了半天如何去掉后天意识。那么无疑有人会问,既然练拳就是叫人从后天返回到先天。那么,去掉后天头脑中的思想意识应为第一要素,既然这样,那么王芗斋先生为什么还要把它称之为意拳呢?

王芗斋先生说,意为心之动。而欲达此意司命全身在有脑。从这句话大家可以知道,王芗斋先生在这句话中所提到的意,指的是大脑的后天作用。这样一来,我们所说的不就和王芗斋先生的理论相互矛盾了吗。

王芗斋先生还说,人身体的动用可分为两种,合意之运动与不合意之运动。

合意之运动为有益之运动,不合意之运动为无益之运动。

合意之运动又分为有意运动和自动运动两种。它们的共性都是身心一致,合于需要之运动。

而它们的区别是有意运动是基于心意支配之运动。如果能做到不感觉受意之支配,其运动又无有不合意者,则成为自动运动。这也正是王芗斋先生说的本能。郭云深老先生说的有形有意都是假,技到无心使见奇就是对本能运动的描述。

那么要想达到此境界,习练者必须先做到知意,也就是知道意是什么。前面已经说过意是人体大脑的后天意识。然后由知意而做到得意。由得意做到存意,再臻于不知存意而意存。那么由知意,得意,存意,最后到不知存意而意存的目的是什么呢?

王芗斋先生在拳学新论意一篇中写到,习拳者之通病在欲求速效。求速效乃是贪念。此 念一生,身心定然吃力。故制止身心用力为第一要素。制止之法,唯有存意。存意检身,稍觉吃力便要挽回,一动便觉,一觉便转。久之则归于自然,全身舒适如无 力之人。其气力方能畅达周身。应运外发,无往而不利。欲望必须根除,拳功方臻神化。

这段文字已经说的很明白了,无须我们再多做解释。其中唯一需要提醒大家注意的是存 意检身,所要制止的是身心两个方面用力。不要觉得光身体放松就行了。据我所知,凡是练内家拳练到一定程度就停滞不前的人,都是心在用力。也就是欲望太多, 后天意识太强。所以往芗斋先生提倡用意。其目的是让我们利用大脑能知能觉的功能,在平日练习中时刻检查自己的身心,不要被后天意识所污染。从后天观念的束 缚中解脱出来,从而恢复先天功能的本来面目。这在道家叫借假修真,佛家称之为以幻制幻。

谈完了用意,下面,我们来看看在试力当中,往芗斋先生都说了些什么。

王芗斋先生说试力时要浑身气力均整,关节灵活,任其自然。全身不可稍有滞处。动一处即做全体想。上下,左右,前后不忘不失。动作要慢,切莫吃力。吃力则不自然。力必偏重一方,而失于滑于暴。全身原有之浑圆力则不能畅达于体外。

上述文字都是对试力时身体动作方面的要求。不难看出,其目的只有一个,那就是为了让先天一气顺利的从体内出露体外。

而先天一气能否顺利的出露体外,关键则在于后天形质的改变。也就是能否通过先天一 气在人体内部的运动,使人的形体从后天状态变为先后天相互融合的同一状态。如果融合得不好,那就说明在形体上还有某些部位没有改造完毕。仍然处于后天状 态。那莫这些部位就必定会对人体运动造成影响。不是单重,就是双重,形必破体,力必出尖待后天形体得到良好的改善之后,先天一气会自然的从体内出露体外。 就像水满自溢。王芗斋先生把人体比喻成空口袋或叫玉树挂宝衣。太极拳则称之为全体透空,全体无滞。佛家有云:空而灵,虚而妙。这些都是对后天形体得到良好 改善的描述。

当先天一气从体内畅达体外之后。对于习拳者来说有一种站在水中的感觉。你后天形质改造得越好,那么你与自然界沟通得也就越多。在这里提醒大家注意,先天一气是没有方向的。当你能与外界沟通之后,所谓体感上的薄厚,粗细,完全是习拳者的后天形体改造得不完善造成的。

这里说的不完善是相对而言的。意思是还没有达到尽善尽美的程度。这个时候要想进 步,只有在修心上下功夫。所以在练习试力的过程当中,一定要用意体检自己的周身内外。有就是有,没有就是没有。千万不可勉强,徐徐而为之。如此说来,站桩 是让习练者在静态当中与先天相互融合。而试力是让习练者在动态中检查自己的形体是否还能处处与先天相互融合。这个基础来自于站桩。如果在静态当中都不能做 得相对完美。那么在动态中就可想而知了。也就是说,不论动静,都要达到先后天的统一才行。王芗斋先生称之为力归一。

而形成争力的目的,也正是为了达到力归一。上个段落中说过,当先天一气出露体外之 后,习练者有一种站在水中的感觉。王芗斋先生把这种现象称之为空气游泳。大家都应该知道,一个站在水中的人,体重会相对变轻。其实体重并没有变,而是由于 水的浮力作用。在拳学中,当习练者自身的先天一起气与自然界相互沟通了之后。也会产生体重变轻的感觉。而只有这样,你才能逐渐减少单重与双重之弊端。沟通 得越好,你感觉自身的体重也就会越轻。大家都知道,地球对物体都是有吸引力的。那是万有引力的作用。而当你经过合理的锻炼使先天一气遍满周身,最终畅达于 体外的时候。你会与地球还有周边的物体产生相斥的作用。这是因为万物虽然名称与形状各不相同,但却同为先天一气的产物。在它们身上同有先天一气的存在。所 以古人云:格物致和,大学曰:心在内,而理周乎于外。物在外,而理具于心。老子说:同出而异名,同谓之玄,玄之又玄,众妙之门。说的都是这个道理。因此, 有很多习练者在试力当中,只要身体稍一动作,便会有相应的阻力产生。这正是习练者自身的先天一气出露体外与自然界中的先天一气由于运动产生摩擦出现的一种 同性相斥的作用。而这种相斥作用只有在后天形体改造到全体无滞全体透空的程度才有可能在实际中产生效应。否则,只能是一种片面的表象而流于虚幻了。所以 说,所谓争力是习练者自身的先天一气与自然界中的先天一气在运动中相互作用而产生的一种相斥之力。这种相斥之力在习练者具备了发挥先天功能的条件下是自然 产生的。不需要大脑的指挥。如果把这种相斥之力作用在技击当中,就会产生一触即发的效果。所谓不期然而然,莫知至而至,本能触觉之活力也。先天功能发挥得 越彻底,那么在技击当中,习练者的肢体动作的幅度也就会越小。最后直到微动或不动的时候也能产生出相应的效果。这不正是王芗斋先生说的大动不如小动,小动 不如不动的道理所在吗!

当习练者具备了全体无滞,全体透空的基础之后。根据在拳论中所说的在十字当中求生 活的原则。习练者可在试力当中逐步练习使自己做到面面生力。而力都是从一个中心点异向发出,想等相乘。因为只有这样,发力才能没有方向,形才不会破体,力 才不会出尖。最后直到全体各部无微不有上下,左右,前后百般之二争力。也就是无数个相等相乘之十字在身体内外形成一个立体的园。使对方毫无缝隙可乘。王芗 斋先生把这种状态称之为浑圆,或叫做力归一。至此,习拳者在技击当中可谓之得其环中而能以应无穷了。由此大家就不难明白,王芗斋先生为什么在大成拳论自卫 一篇中说:学者于打法一道,若非实地练习,亦不易得。故平时应加以研究。至于提打,钩打,按打,挂打等等,终是下乘功夫,聪明智慧者,则无需习此。

太极,形意,八卦三拳皆是以后天有形之驱,通过合理的锻炼,补足先天之元气,复归 乾健之体的学术。那么,何为合理之锻炼呢?合理的理又是什么到了道理呢?前面已经说过,天道既是人道,天人是一理。所谓气无二气,理无二理。我们练拳所要 遵循的原理,就是万物同为先天一气所生,而我们所要练的就是将后天意识转化成先天状态。也就是一的状态。

形意拳的拳法有五形拳,十二形拳。八卦拳有八八六十四掌。太极拳有陈式,杨式,孙式,吴式,武式等等。但无论你练的是那一门拳法,形式的繁简并不重要。重要的是你一定要遵循后天返先天的道理。而这三种拳术的拳法也正是根据后天返先天的道理而编排的。

大家都知道,形意拳的十二形拳是根据十二种动物的特性演化而成的。这十二种动物都 是天地所生,然而天地万物都是先天一气变化而来。所以说这十二种动物虽然名称与外形各不相同,但却同出一源。道理是相通的。古人说:诚于中,而形于外。诚 是至诚之道,只有空洞无我才能达到至诚。才能格十二形乃至于万形而求得天地万物之理。

那么具体该怎么做呢?拿形意拳来说,学者最好于五形拳和十二形拳中任意挑选一个式 子来练习。练时决不可用力,心中须空空洞洞不可存有欲望。时刻注意自己的动作,是否合于拳理,也就是道的法则。比如在动作的过程中,身体的各部位那儿僵, 那儿紧,那儿不顺畅。膝肘,肩胯,手足能否相合。所以做时动作一定要慢,要缓,以便于观察,也就是自检。如此这般一遍一遍的练去,最后直至身体动作无论快 慢,都能在松弛的状态下处处相合。顺畅而没有滞点。在这个阶段的练习过程中,身心皆不可用力最为关键。倘若身体一用拙力,心里一急一燥,那无疑就和内家拳 的法则背道而驰了。用功的结果只会把自己弄成既不是内家也不是外家的四不像,于实际当中毫无意义可言。

可这么做无疑有人会问,郭云深老先生明明说形意拳有明劲,暗劲,化劲之分啊。而你说明劲不能用劲去练,那又该如何呢?郭云深老先生说形意拳有三步功夫,其实是想告诉后学者,形意拳和其它内家拳在内劲上有三个不同的表现层次。而并不是让你真的使劲去练。

郭老在论形意拳明劲一篇中说到:明劲者,即炼精化气易骨之道也。因人身先天之气与 后天之气不合。所以体质不坚,故发明此道。而大凡人之初生,性无不善,体无不健,根无不固,纯是先天。以后知识一开,灵窍一闭,先后天不合,阴阳不交,皆 是后天气血用事。故气血盛行,正气衰弱,以至于身体筋骨不能健壮。而明劲易骨之道则是将人身散乱之气收纳于内,练至上下相连,手足相顾,内外如一。至此, 拳中明劲之功毕矣。正所谓六阳纯全,刚健之体是也。注意,这里说的六阳纯全正是后天返先天所致。也正是我为什么在第三部分的开头首先用先天八卦和后天八卦 中卦爻的变化来给大家予以说明,人是怎么从先天落入后天,又如何运用顺逆之理从后天返回先天的道理所在了。

所以说,形意拳其实是让习拳者通过站桩或拳法的锻炼,使身体在练习中听从心意的指 挥。这里说的心意不是后天的欲望,而是先天之真意。而听从先天真意的目的是为了去除后天的拙力和内心的欲望。通过这种循序渐进的不断练习,最终达到身体动 作无论动静,无不与先天之真意相合,内外如一,浑然一体。从而达到先后天合一的最终目的。

而要跟大家说明的是,在内家拳这三个阶段当中,能做到第一步已经很不容易了。

在明劲阶段,习拳者的大小关节都要打开。周身的关节都打开了,身体动作才能做到无 一处不合,发力才能均整。尤其是尾闾和胯最为关键。在第一部分已经说过,此处为一身之根节,如果打不开,人体上,中,下三节就不能统一。发力就会脱节,所 发之力非整体而是局部。问题还不光如此。关节不开,周身不能统一。不仅仅是造成习拳者在发力时,劲力不能由脚跟起,通过腿,腰,肩,臂最终达于指端的原 因。它的另一大弊病是造成了习拳者在技击当中与对方所发之力产生硬碰硬的顶撞。

武术散手的确是力与力的碰撞。那么双方谁力大谁就占便宜。这叫做以力降十会。但由 此而产生出的诸多变化,也可以用来以巧破千斤。这样一来,敌我双方在打斗中必将你来我往,利用力量上的悬殊和技术动作的快慢来取胜对手。因此,体能的好坏 无疑也就成为了能否胜出的重要条件之一。王芗斋先生把这种打斗形式称之为抵抗之变相。因为在这种形式的打斗当中,即使运动双方能够做到在顾的同时去打。而 实际上也只不过是肢体的分工合作而已。若从整体观的角度来说还是二而不是一。

而中国传统内家拳在技击当中有其非常独特的内涵。在上一个段落中已经说过,做为内 家拳第一步就是要做到节节贯通,节节贯穿。这样做的目的有两个,一个是为了做到来力不受,在此同时,还要做到去力无阻。这也就是内家拳为什么能够做到硬打 硬进没遮拦的道理所在。倘若敌我双方力一接触便产生顶力而受制于对手的话,那么就只能是靠运动身体的其它部位来攻击或化解了。所以说那是二而不是一。

那么,什么是来力不受和去力无阻呢?在第一部分已经说过,具备了这层功夫的习练 者,在技击当中一定要采取主动出击的方式来抢占对手的重心。记住,在进攻当中双手一定要护住自己的头胸部,防止对手突然袭击。如果对方突然用拳或用腿向我 的头胸部发起攻击的话。我双手一定要打顾合一。在顾的同时直取对方的中线,这叫做逼迫式打法。给对手造成一种我要全力以赴的感觉,逼迫对手出力还击。只要 对手使出半数的力量,那么他的重心就会暴露无疑,身体也就会自动叫整,而我的目的也正在于此。在对手与我的肢体任何部位发生碰撞的同时,对手发出的力量会 经我的肢体收于脊背,经腰部下到尾闾。由尾闾的自动运动而使其来力化为乌有。在此同时,我的力量却从脚底经脊背而达于双臂,发于指尖,直捣对手的重心。以 此来破坏对手的身体平衡,产生拔根的现象。当然,这里还包括神气的运动,也就是神气要比对方足。否则,很容易给对方造成可乘之机。所以,王芗斋先生说不求 形骸似但求神意足。然而,无论是形体的贯通还是神气的薄厚,习练者必须在平日的练习中。于身心都不用力的状态下长此以往的刻苦锻炼才能有所收获。否则,未 亦有得。八卦,太极,包括其它内家拳也都是如此。

八卦拳既然以八卦命名,那么学者就必须先要对八卦进行了解。在远古时代,古人通过 对宇宙万物的分析,把自然界统一分成八类。分别用八个不同的符号代表,它们是乾,坤,坎,离,震,兑,艮。古人认为,天地万物的产生都是层层分化而成的。 由简至繁,由一而二,由二而三,由三而生成万物。古人把这种天地万物演化的过程称之为无极生太极,太极生两仪,两仪生四象,四象生八卦。所以说,八卦是取 相于万物。因此说它是远取诸物,而对于近取诸身的道理则在于,人体的形成也恰恰符合八卦生成的原理。而且人体四肢各部位并合之数正好与六十四卦之数相合。 由此说来。天地万物都是格物致和。物在外,而理具于内。道理是相通的。而今以八卦命名于拳术,无论有多少形多少式,习练者只要把握好宇宙万物之总纲。从后 天转化成先天,从有为而至无为。那么天地万物之性能皆能效法,皆能为我所用。至于拳术之精微,虽有无穷之变化而莫不在我一身之中。

太极拳由阴阳变化之理推演而成。从形式上虽有百十式之多,但其精髓,则在于舍己从 人之道。拳论曰:由己则滞,从人则活。老子曰:为欲取之,必固与之。但是要想能从人,习练者必须先练得周身一家。动作时全体俱要相随,稍有不相随处,身体 便会散乱。所以习练者于平日练习拳架,一动便要问自己周身内外是否能处处相合。稍有不合,便要改正,等日久功深练得全体一致,此时你一挨我,我既能量彼劲 之大小,前进后退,处处恰合。彼劲稍一出尖,我不用动彼分毫,彼因重心不稳自会跌出。此时,我也可乘机而入,借彼之力,发力将彼跌出。但要想练得周身一 家,无有不合之处。就必须合着理法去锻炼。使自身由后天转变为先天,将自己融入于虚无之中,才能由此而得太极拳之妙。

老师的话

中国传统武术是中华民族几千年来的文化结晶。它与其它国粹一样。是非常抽象的,需要我们心领神会的大学问。

在教学上,需要学生与老师心心相应。当老师的要对学生体贴入微的细心观察,做学生的对老师的要求要耐下心来反复体会。像这样多少年下来,才有可能培养出几个好学生。所以在过去,师徒之间亲如父子那是没错的。

现在时代不同了,社会发展的速度越来越快。干什么都要求效率。所有的人都希望自己 能在短期内掌握一门技艺。然而,在中国传统文化的范畴里面,像武术,国画,书法,京戏这些国粹,没有一样是不吃功夫的。这就造成了这些传统文化在传承上的 困难。因为它们是决不可能象其它学科那样多少人聚在一起上大课,按着编排好的教程按部就班去学就行的。做为学生,就更不要指望有什么好的方法可以速成。因 为每个学生的情况都是不一样的。所以从入门的那天起,老师传授给学生的方法一定是因人而异的。

时至今日,中国传统内家功夫已经是奄奄一息。因为现在市面上这些所谓练内家拳的早已是面目全非。若再没人极力挽救的话,我们的子孙们,以后就只能是在武侠小说和影片里把内家功夫当神话瞧了。

我们家世代相传的这门武功向来是不传外姓的。到了我这一代,若在技艺上和祖辈们相 比,已是九牛之一毛。如果再按照祖宗的规矩这样继续下去的话,恐怕不会有什么好结果。与其让它自生自灭,还不如把它留给真正喜欢它,热爱它的人们。虽然这 样做违背了先辈的遗训,但我个人认为,传统武术这支奇艳不应该为个人所有。它是中国传统文化的精髓,应属全人类所有。如果此举真的能让它重放异彩的话。列 祖列宗在九泉之下应感到欣慰才是。

几年前我遇到几个北京的小友,也算是机缘巧合吧。我见他们心地善良,为人淳朴。就 把本门功夫和多年来我个人的练功经验传一一传授给了他们。在此,我要告诫各位,中国正宗的传统武学,在去病健身,延年益寿这方面的功效是现代人无法想象 的。只是现在的人人心都太浮躁,耐不住寂寞。其实只要功夫做对了,哪怕每天抽出半个小时的时间来练习,都会让你受益无穷。最高深的武功也是由此而来。只可 惜现在的练家子大多都没上道。所以收效甚微。希望大家能认真的阅读文章的一二三部分,这些都是我口述学生们整理的。这次在网上发表的只是梗概,要想进一步 了解还需大家能静下心来聚在一起体会交流。我的这几个学生在内家功夫的修炼上已初见成效,相信给大家充当个指路牌,帮助大家认清什么才是内家功夫,内家功 夫在健身,技击等等一些问题上做个入门的见证是没有问题的。年轻人有热情,有闯劲。至于能否象我预想的那样,在几年之内通过交流让一批有识之士走上内家功 夫的正途,就要看他们的造化了。最后,希望广大武术爱好者都能尽己所能给予支持和帮助。只有这样,中华武术才会有新的希望!

Tuesday, November 4, 2008

Unicode|Setting Default Text File Encoding in Eclipse

Setting Default Text File Encoding in Eclipse

I was recently working with a set of SQL migration scripts in eclipse and started noticing that the localized characters weren't showing correctly. I've seen all kinds of chaos in my project with different file formats creeping into the sources and database. So I did a looking and found that Eclipse was defaulting to Cp1252 for the encoding. This is a pain and the cause of my files not displaying. So went into Window->Preferences... and Opened General->Workspace and changed the Text file encoding setting to UTF-8. Now all is good again.

Monday, November 3, 2008

Unicode|Screen Cast

http://farmdev.com/talks/unicode/

Sunday, November 2, 2008

Unicode|Common problem and resolution

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 10: ordinal not in range(128)

Jeff Epler jepler at unpythonic.net
Fri Oct 8 01:54:13 CEST 2004
If you compare a unicode string to a byte string, and the byte-string
has byte values >127, you will get an error like this:
>>> u'a' == '\xc0'
Traceback (most recent call last):
File "", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0: ordinal not in range(128)

There is no sensible way for Python to perform this comparison, because
the byte string '\xc0' could be in any encoding. If the encoding of the
byte string is latin-1, it's LATIN CAPITAL LETTER A WITH GRAVE. If it's
koi8-r encoded, it's CRYILLIC SMALL LETTER YU. Python refuses to guess
in this case.

It doesn't matter whether the unicode string contains any characters
that are non-ASCII characters.

To correct your function, you'll have to know what encoding the byte
string is in, and convert it to unicode using the decode() method,
and compare that result to the unicode string.

Jeff

Unicode|Unicode HOWTO

Unicode HOWTO

Version 1.02

This HOWTO discusses Python's support for Unicode, and explains various problems that people commonly encounter when trying to work with Unicode.

Introduction to Unicode

History of Character Codes

In 1968, the American Standard Code for Information Interchange, better known by its acronym ASCII, was standardized. ASCII defined numeric codes for various characters, with the numeric values running from 0 to 127. For example, the lowercase letter 'a' is assigned 97 as its code value.

ASCII was an American-developed standard, so it only defined unaccented characters. There was an 'e', but no 'é' or 'Í'. This meant that languages which required accented characters couldn't be faithfully represented in ASCII. (Actually the missing accents matter for English, too, which contains words such as 'naïve' and 'café', and some publications have house styles which require spellings such as 'coöperate'.)

For a while people just wrote programs that didn't display accents. I remember looking at Apple ][ BASIC programs, published in French-language publications in the mid-1980s, that had lines like these:

PRINT "FICHER EST COMPLETE."
PRINT "CARACTERE NON ACCEPTE."

Those messages should contain accents, and they just look wrong to someone who can read French.

In the 1980s, almost all personal computers were 8-bit, meaning that bytes could hold values ranging from 0 to 255. ASCII codes only went up to 127, so some machines assigned values between 128 and 255 to accented characters. Different machines had different codes, however, which led to problems exchanging files. Eventually various commonly used sets of values for the 128-255 range emerged. Some were true standards, defined by the International Standards Organization, and some were de facto conventions that were invented by one company or another and managed to catch on.

255 characters aren't very many. For example, you can't fit both the accented characters used in Western Europe and the Cyrillic alphabet used for Russian into the 128-255 range because there are more than 127 such characters.

You could write files using different codes (all your Russian files in a coding system called KOI8, all your French files in a different coding system called Latin1), but what if you wanted to write a French document that quotes some Russian text? In the 1980s people began to want to solve this problem, and the Unicode standardization effort began.

Unicode started out using 16-bit characters instead of 8-bit characters. 16 bits means you have 2^16 = 65,536 distinct values available, making it possible to represent many different characters from many different alphabets; an initial goal was to have Unicode contain the alphabets for every single human language. It turns out that even 16 bits isn't enough to meet that goal, and the modern Unicode specification uses a wider range of codes, 0-1,114,111 (0x10ffff in base-16).

There's a related ISO standard, ISO 10646. Unicode and ISO 10646 were originally separate efforts, but the specifications were merged with the 1.1 revision of Unicode.

(This discussion of Unicode's history is highly simplified. I don't think the average Python programmer needs to worry about the historical details; consult the Unicode consortium site listed in the References for more information.)

Definitions

A character is the smallest possible component of a text. 'A', 'B', 'C', etc., are all different characters. So are 'È' and 'Í'. Characters are abstractions, and vary depending on the language or context you're talking about. For example, the symbol for ohms (Ω) is usually drawn much like the capital letter omega (Ω) in the Greek alphabet (they may even be the same in some fonts), but these are two different characters that have different meanings.

The Unicode standard describes how characters are represented by code points. A code point is an integer value, usually denoted in base 16. In the standard, a code point is written using the notation U+12ca to mean the character with value 0x12ca (4810 decimal). The Unicode standard contains a lot of tables listing characters and their corresponding code points:

0061    'a'; LATIN SMALL LETTER A
0062 'b'; LATIN SMALL LETTER B
0063 'c'; LATIN SMALL LETTER C
...
007B '{'; LEFT CURLY BRACKET

Strictly, these definitions imply that it's meaningless to say 'this is character U+12ca'. U+12ca is a code point, which represents some particular character; in this case, it represents the character 'ETHIOPIC SYLLABLE WI'. In informal contexts, this distinction between code points and characters will sometimes be forgotten.

A character is represented on a screen or on paper by a set of graphical elements that's called a glyph. The glyph for an uppercase A, for example, is two diagonal strokes and a horizontal stroke, though the exact details will depend on the font being used. Most Python code doesn't need to worry about glyphs; figuring out the correct glyph to display is generally the job of a GUI toolkit or a terminal's font renderer.

Encodings

To summarize the previous section: a Unicode string is a sequence of code points, which are numbers from 0 to 0x10ffff. This sequence needs to be represented as a set of bytes (meaning, values from 0-255) in memory. The rules for translating a Unicode string into a sequence of bytes are called an encoding.

The first encoding you might think of is an array of 32-bit integers. In this representation, the string "Python" would look like this:

   P           y           t           h           o           n
0x50 00 00 00 79 00 00 00 74 00 00 00 68 00 00 00 6f 00 00 00 6e 00 00 00
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

This representation is straightforward but using it presents a number of problems.

  1. It's not portable; different processors order the bytes differently.
  2. It's very wasteful of space. In most texts, the majority of the code points are less than 127, or less than 255, so a lot of space is occupied by zero bytes. The above string takes 24 bytes compared to the 6 bytes needed for an ASCII representation. Increased RAM usage doesn't matter too much (desktop computers have megabytes of RAM, and strings aren't usually that large), but expanding our usage of disk and network bandwidth by a factor of 4 is intolerable.
  3. It's not compatible with existing C functions such as strlen(), so a new family of wide string functions would need to be used.
  4. Many Internet standards are defined in terms of textual data, and can't handle content with embedded zero bytes.

Generally people don't use this encoding, choosing other encodings that are more efficient and convenient.

Encodings don't have to handle every possible Unicode character, and most encodings don't. For example, Python's default encoding is the 'ascii' encoding. The rules for converting a Unicode string into the ASCII encoding are simple; for each code point:

  1. If the code point is <128,>
  2. If the code point is 128 or greater, the Unicode string can't be represented in this encoding. (Python raises a UnicodeEncodeError exception in this case.)

Latin-1, also known as ISO-8859-1, is a similar encoding. Unicode code points 0-255 are identical to the Latin-1 values, so converting to this encoding simply requires converting code points to byte values; if a code point larger than 255 is encountered, the string can't be encoded into Latin-1.

Encodings don't have to be simple one-to-one mappings like Latin-1. Consider IBM's EBCDIC, which was used on IBM mainframes. Letter values weren't in one block: 'a' through 'i' had values from 129 to 137, but 'j' through 'r' were 145 through 153. If you wanted to use EBCDIC as an encoding, you'd probably use some sort of lookup table to perform the conversion, but this is largely an internal detail.

UTF-8 is one of the most commonly used encodings. UTF stands for "Unicode Transformation Format", and the '8' means that 8-bit numbers are used in the encoding. (There's also a UTF-16 encoding, but it's less frequently used than UTF-8.) UTF-8 uses the following rules:

  1. If the code point is <128,>
  2. If the code point is between 128 and 0x7ff, it's turned into two byte values between 128 and 255.
  3. Code points >0x7ff are turned into three- or four-byte sequences, where each byte of the sequence is between 128 and 255.

UTF-8 has several convenient properties:

  1. It can handle any Unicode code point.
  2. A Unicode string is turned into a string of bytes containing no embedded zero bytes. This avoids byte-ordering issues, and means UTF-8 strings can be processed by C functions such as strcpy() and sent through protocols that can't handle zero bytes.
  3. A string of ASCII text is also valid UTF-8 text.
  4. UTF-8 is fairly compact; the majority of code points are turned into two bytes, and values less than 128 occupy only a single byte.
  5. If bytes are corrupted or lost, it's possible to determine the start of the next UTF-8-encoded code point and resynchronize. It's also unlikely that random 8-bit data will look like valid UTF-8.

References

The Unicode Consortium site at <http://www.unicode.org> has character charts, a glossary, and PDF versions of the Unicode specification. Be prepared for some difficult reading. <http://www.unicode.org/history/> is a chronology of the origin and development of Unicode.

To help understand the standard, Jukka Korpela has written an introductory guide to reading the Unicode character tables, available at <http://www.cs.tut.fi/~jkorpela/unicode/guide.html>.

Roman Czyborra wrote another explanation of Unicode's basic principles; it's at <http://czyborra.com/unicode/characters.html>. Czyborra has written a number of other Unicode-related documentation, available from <http://www.cyzborra.com>.

Two other good introductory articles were written by Joel Spolsky <http://www.joelonsoftware.com/articles/Unicode.html> and Jason Orendorff <http://www.jorendorff.com/articles/unicode/>. If this introduction didn't make things clear to you, you should try reading one of these alternate articles before continuing.

Wikipedia entries are often helpful; see the entries for "character encoding" <http://en.wikipedia.org/wiki/Character_encoding> and UTF-8 <http://en.wikipedia.org/wiki/UTF-8>, for example.

Python's Unicode Support

Now that you've learned the rudiments of Unicode, we can look at Python's Unicode features.

The Unicode Type

Unicode strings are expressed as instances of the unicode type, one of Python's repertoire of built-in types. It derives from an abstract type called basestring, which is also an ancestor of the str type; you can therefore check if a value is a string type with isinstance(value, basestring). Under the hood, Python represents Unicode strings as either 16- or 32-bit integers, depending on how the Python interpreter was compiled.

The unicode() constructor has the signature unicode(string[, encoding, errors]). All of its arguments should be 8-bit strings. The first argument is converted to Unicode using the specified encoding; if you leave off the encoding argument, the ASCII encoding is used for the conversion, so characters greater than 127 will be treated as errors:

>>> unicode('abcdef')
u'abcdef'
>>> s = unicode('abcdef')
>>> type(s)

>>> unicode('abcdef' + chr(255))
Traceback (most recent call last):
File "", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 6:
ordinal not in range(128)

The errors argument specifies the response when the input string can't be converted according to the encoding's rules. Legal values for this argument are 'strict' (raise a UnicodeDecodeError exception), 'replace' (add U+FFFD, 'REPLACEMENT CHARACTER'), or 'ignore' (just leave the character out of the Unicode result). The following examples show the differences:

>>> unicode('\x80abc', errors='strict')
Traceback (most recent call last):
File "", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0:
ordinal not in range(128)
>>> unicode('\x80abc', errors='replace')
u'\ufffdabc'
>>> unicode('\x80abc', errors='ignore')
u'abc'

Encodings are specified as strings containing the encoding's name. Python 2.4 comes with roughly 100 different encodings; see the Python Library Reference at <http://docs.python.org/lib/standard-encodings.html> for a list. Some encodings have multiple names; for example, 'latin-1', 'iso_8859_1' and '8859' are all synonyms for the same encoding.

One-character Unicode strings can also be created with the unichr() built-in function, which takes integers and returns a Unicode string of length 1 that contains the corresponding code point. The reverse operation is the built-in ord() function that takes a one-character Unicode string and returns the code point value:

>>> unichr(40960)
u'\ua000'
>>> ord(u'\ua000')
40960

Instances of the unicode type have many of the same methods as the 8-bit string type for operations such as searching and formatting:

>>> s = u'Was ever feather so lightly blown to and fro as this multitude?'
>>> s.count('e')
5
>>> s.find('feather')
9
>>> s.find('bird')
-1
>>> s.replace('feather', 'sand')
u'Was ever sand so lightly blown to and fro as this multitude?'
>>> s.upper()
u'WAS EVER FEATHER SO LIGHTLY BLOWN TO AND FRO AS THIS MULTITUDE?'

Note that the arguments to these methods can be Unicode strings or 8-bit strings. 8-bit strings will be converted to Unicode before carrying out the operation; Python's default ASCII encoding will be used, so characters greater than 127 will cause an exception:

>>> s.find('Was\x9f')
Traceback (most recent call last):
File "", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0x9f in position 3: ordinal not in range(128)
>>> s.find(u'Was\x9f')
-1

Much Python code that operates on strings will therefore work with Unicode strings without requiring any changes to the code. (Input and output code needs more updating for Unicode; more on this later.)

Another important method is .encode([encoding], [errors='strict']), which returns an 8-bit string version of the Unicode string, encoded in the requested encoding. The errors parameter is the same as the parameter of the unicode() constructor, with one additional possibility; as well as 'strict', 'ignore', and 'replace', you can also pass 'xmlcharrefreplace' which uses XML's character references. The following example shows the different results:

>>> u = unichr(40960) + u'abcd' + unichr(1972)
>>> u.encode('utf-8')
'\xea\x80\x80abcd\xde\xb4'
>>> u.encode('ascii')
Traceback (most recent call last):
File "", line 1, in ?
UnicodeEncodeError: 'ascii' codec can't encode character '\ua000' in position 0: ordinal not in range(128)
>>> u.encode('ascii', 'ignore')
'abcd'
>>> u.encode('ascii', 'replace')
'?abcd?'
>>> u.encode('ascii', 'xmlcharrefreplace')
'ꀀabcd޴'

Python's 8-bit strings have a .decode([encoding], [errors]) method that interprets the string using the given encoding:

>>> u = unichr(40960) + u'abcd' + unichr(1972)   # Assemble a string
>>> utf8_version = u.encode('utf-8') # Encode as UTF-8
>>> type(utf8_version), utf8_version
(, '\xea\x80\x80abcd\xde\xb4')
>>> u2 = utf8_version.decode('utf-8') # Decode using UTF-8
>>> u == u2 # The two strings match
True

The low-level routines for registering and accessing the available encodings are found in the codecs module. However, the encoding and decoding functions returned by this module are usually more low-level than is comfortable, so I'm not going to describe the codecs module here. If you need to implement a completely new encoding, you'll need to learn about the codecs module interfaces, but implementing encodings is a specialized task that also won't be covered here. Consult the Python documentation to learn more about this module.

The most commonly used part of the codecs module is the codecs.open() function which will be discussed in the section on input and output.

Unicode Literals in Python Source Code

In Python source code, Unicode literals are written as strings prefixed with the 'u' or 'U' character: u'abcdefghijk'. Specific code points can be written using the \u escape sequence, which is followed by four hex digits giving the code point. The \U escape sequence is similar, but expects 8 hex digits, not 4.

Unicode literals can also use the same escape sequences as 8-bit strings, including \x, but \x only takes two hex digits so it can't express an arbitrary code point. Octal escapes can go up to U+01ff, which is octal 777.

>>> s = u"a\xac\u1234\u20ac\U00008000"
^^^^ two-digit hex escape
^^^^^^ four-digit Unicode escape
^^^^^^^^^^ eight-digit Unicode escape
>>> for c in s: print ord(c),
...
97 172 4660 8364 32768

Using escape sequences for code points greater than 127 is fine in small doses, but becomes an annoyance if you're using many accented characters, as you would in a program with messages in French or some other accent-using language. You can also assemble strings using the unichr() built-in function, but this is even more tedious.

Ideally, you'd want to be able to write literals in your language's natural encoding. You could then edit Python source code with your favorite editor which would display the accented characters naturally, and have the right characters used at runtime.

Python supports writing Unicode literals in any encoding, but you have to declare the encoding being used. This is done by including a special comment as either the first or second line of the source file:

#!/usr/bin/env python
# -*- coding: latin-1 -*-

u = u'abcdé'
print ord(u[-1])

The syntax is inspired by Emacs's notation for specifying variables local to a file. Emacs supports many different variables, but Python only supports 'coding'. The -*- symbols indicate that the comment is special; within them, you must supply the name coding and the name of your chosen encoding, separated by ':'.

If you don't include such a comment, the default encoding used will be ASCII. Versions of Python before 2.4 were Euro-centric and assumed Latin-1 as a default encoding for string literals; in Python 2.4, characters greater than 127 still work but result in a warning. For example, the following program has no encoding declaration:

#!/usr/bin/env python
u = u'abcdé'
print ord(u[-1])

When you run it with Python 2.4, it will output the following warning:

amk:~$ python p263.py
sys:1: DeprecationWarning: Non-ASCII character '\xe9'
in file p263.py on line 2, but no encoding declared;
see http://www.python.org/peps/pep-0263.html for details

Unicode Properties

The Unicode specification includes a database of information about code points. For each code point that's defined, the information includes the character's name, its category, the numeric value if applicable (Unicode has characters representing the Roman numerals and fractions such as one-third and four-fifths). There are also properties related to the code point's use in bidirectional text and other display-related properties.

The following program displays some information about several characters, and prints the numeric value of one particular character:

import unicodedata

u = unichr(233) + unichr(0x0bf2) + unichr(3972) + unichr(6000) + unichr(13231)

for i, c in enumerate(u):
print i, '%04x' % ord(c), unicodedata.category(c),
print unicodedata.name(c)

# Get numeric value of second character
print unicodedata.numeric(u[1])

When run, this prints:

0 00e9 Ll LATIN SMALL LETTER E WITH ACUTE
1 0bf2 No TAMIL NUMBER ONE THOUSAND
2 0f84 Mn TIBETAN MARK HALANTA
3 1770 Lo TAGBANWA LETTER SA
4 33af So SQUARE RAD OVER S SQUARED
1000.0

The category codes are abbreviations describing the nature of the character. These are grouped into categories such as "Letter", "Number", "Punctuation", or "Symbol", which in turn are broken up into subcategories. To take the codes from the above output, 'Ll' means 'Letter, lowercase', 'No' means "Number, other", 'Mn' is "Mark, nonspacing", and 'So' is "Symbol, other". See <http://www.unicode.org/Public/UNIDATA/UCD.html#General_Category_Values> for a list of category codes.

References

The Unicode and 8-bit string types are described in the Python library reference at <http://docs.python.org/lib/typesseq.html>.

The documentation for the unicodedata module is at <http://docs.python.org/lib/module-unicodedata.html>.

The documentation for the codecs module is at <http://docs.python.org/lib/module-codecs.html>.

Marc-André Lemburg gave a presentation at EuroPython 2002 titled "Python and Unicode". A PDF version of his slides is available at <http://www.egenix.com/files/python/Unicode-EPC2002-Talk.pdf>, and is an excellent overview of the design of Python's Unicode features.

Reading and Writing Unicode Data

Once you've written some code that works with Unicode data, the next problem is input/output. How do you get Unicode strings into your program, and how do you convert Unicode into a form suitable for storage or transmission?

It's possible that you may not need to do anything depending on your input sources and output destinations; you should check whether the libraries used in your application support Unicode natively. XML parsers often return Unicode data, for example. Many relational databases also support Unicode-valued columns and can return Unicode values from an SQL query.

Unicode data is usually converted to a particular encoding before it gets written to disk or sent over a socket. It's possible to do all the work yourself: open a file, read an 8-bit string from it, and convert the string with unicode(str, encoding). However, the manual approach is not recommended.

One problem is the multi-byte nature of encodings; one Unicode character can be represented by several bytes. If you want to read the file in arbitrary-sized chunks (say, 1K or 4K), you need to write error-handling code to catch the case where only part of the bytes encoding a single Unicode character are read at the end of a chunk. One solution would be to read the entire file into memory and then perform the decoding, but that prevents you from working with files that are extremely large; if you need to read a 2Gb file, you need 2Gb of RAM. (More, really, since for at least a moment you'd need to have both the encoded string and its Unicode version in memory.)

The solution would be to use the low-level decoding interface to catch the case of partial coding sequences. The work of implementing this has already been done for you: the codecs module includes a version of the open() function that returns a file-like object that assumes the file's contents are in a specified encoding and accepts Unicode parameters for methods such as .read() and .write().

The function's parameters are open(filename, mode='rb', encoding=None, errors='strict', buffering=1). mode can be 'r', 'w', or 'a', just like the corresponding parameter to the regular built-in open() function; add a '+' to update the file. buffering is similarly parallel to the standard function's parameter. encoding is a string giving the encoding to use; if it's left as None, a regular Python file object that accepts 8-bit strings is returned. Otherwise, a wrapper object is returned, and data written to or read from the wrapper object will be converted as needed. errors specifies the action for encoding errors and can be one of the usual values of 'strict', 'ignore', and 'replace'.

Reading Unicode from a file is therefore simple:

import codecs
f = codecs.open('unicode.rst', encoding='utf-8')
for line in f:
print repr(line)

It's also possible to open files in update mode, allowing both reading and writing:

f = codecs.open('test', encoding='utf-8', mode='w+')
f.write(u'\u4500 blah blah blah\n')
f.seek(0)
print repr(f.readline()[:1])
f.close()

Unicode character U+FEFF is used as a byte-order mark (BOM), and is often written as the first character of a file in order to assist with autodetection of the file's byte ordering. Some encodings, such as UTF-16, expect a BOM to be present at the start of a file; when such an encoding is used, the BOM will be automatically written as the first character and will be silently dropped when the file is read. There are variants of these encodings, such as 'utf-16-le' and 'utf-16-be' for little-endian and big-endian encodings, that specify one particular byte ordering and don't skip the BOM.

Unicode filenames

Most of the operating systems in common use today support filenames that contain arbitrary Unicode characters. Usually this is implemented by converting the Unicode string into some encoding that varies depending on the system. For example, MacOS X uses UTF-8 while Windows uses a configurable encoding; on Windows, Python uses the name "mbcs" to refer to whatever the currently configured encoding is. On Unix systems, there will only be a filesystem encoding if you've set the LANG or LC_CTYPE environment variables; if you haven't, the default encoding is ASCII.

The sys.getfilesystemencoding() function returns the encoding to use on your current system, in case you want to do the encoding manually, but there's not much reason to bother. When opening a file for reading or writing, you can usually just provide the Unicode string as the filename, and it will be automatically converted to the right encoding for you:

filename = u'filename\u4500abc'
f = open(filename, 'w')
f.write('blah\n')
f.close()

Functions in the os module such as os.stat() will also accept Unicode filenames.

os.listdir(), which returns filenames, raises an issue: should it return the Unicode version of filenames, or should it return 8-bit strings containing the encoded versions? os.listdir() will do both, depending on whether you provided the directory path as an 8-bit string or a Unicode string. If you pass a Unicode string as the path, filenames will be decoded using the filesystem's encoding and a list of Unicode strings will be returned, while passing an 8-bit path will return the 8-bit versions of the filenames. For example, assuming the default filesystem encoding is UTF-8, running the following program:

fn = u'filename\u4500abc'
f = open(fn, 'w')
f.close()

import os
print os.listdir('.')
print os.listdir(u'.')

will produce the following output:

amk:~$ python t.py
['.svn', 'filename\xe4\x94\x80abc', ...]
[u'.svn', u'filename\u4500abc', ...]

The first list contains UTF-8-encoded filenames, and the second list contains the Unicode versions.

Tips for Writing Unicode-aware Programs

This section provides some suggestions on writing software that deals with Unicode.

The most important tip is:

Software should only work with Unicode strings internally, converting to a particular encoding on output.

If you attempt to write processing functions that accept both Unicode and 8-bit strings, you will find your program vulnerable to bugs wherever you combine the two different kinds of strings. Python's default encoding is ASCII, so whenever a character with an ASCII value >127 is in the input data, you'll get a UnicodeDecodeError because that character can't be handled by the ASCII encoding.

It's easy to miss such problems if you only test your software with data that doesn't contain any accents; everything will seem to work, but there's actually a bug in your program waiting for the first user who attempts to use characters >127. A second tip, therefore, is:

Include characters >127 and, even better, characters >255 in your test data.

When using data coming from a web browser or some other untrusted source, a common technique is to check for illegal characters in a string before using the string in a generated command line or storing it in a database. If you're doing this, be careful to check the string once it's in the form that will be used or stored; it's possible for encodings to be used to disguise characters. This is especially true if the input data also specifies the encoding; many encodings leave the commonly checked-for characters alone, but Python includes some encodings such as 'base64' that modify every single character.

For example, let's say you have a content management system that takes a Unicode filename, and you want to disallow paths with a '/' character. You might write this code:

def read_file (filename, encoding):
if '/' in filename:
raise ValueError("'/' not allowed in filenames")
unicode_name = filename.decode(encoding)
f = open(unicode_name, 'r')
# ... return contents of file ...

However, if an attacker could specify the 'base64' encoding, they could pass 'L2V0Yy9wYXNzd2Q=', which is the base-64 encoded form of the string '/etc/passwd', to read a system file. The above code looks for '/' characters in the encoded form and misses the dangerous character in the resulting decoded form.

References

The PDF slides for Marc-André Lemburg's presentation "Writing Unicode-aware Applications in Python" are available at <http://www.egenix.com/files/python/LSM2005-Developing-Unicode-aware-applications-in-Python.pdf> and discuss questions of character encodings as well as how to internationalize and localize an application.

Revision History and Acknowledgements

Thanks to the following people who have noted errors or offered suggestions on this article: Nicholas Bastin, Marius Gedminas, Kent Johnson, Ken Krugler, Marc-André Lemburg, Martin von Löwis, Chad Whitacre.

Version 1.0: posted August 5 2005.

Version 1.01: posted August 7 2005. Corrects factual and markup errors; adds several links.

Version 1.02: posted August 16 2005. Corrects factual errors.