Wednesday, July 30, 2008

Freebsd|[精华] 写给新手:显卡驱动的安装

[精华] 写给新手:显卡驱动的安装 - ChinaUnix.net

[精华] 写给新手:显卡驱动的安装


http://www.chinaunix.net 作者:snnn  发表于:2007-04-18 14:35:54
发表评论】 【查看原文】 【BSD讨论区】【关闭

刚在这里看见几篇关于显卡驱动的安装,dri等问题。

我简单说下我的经验:

第一条原则:不要尝试把Linux下的驱动装到freebsd下来。
第二条原则:不要去Linux社区问怎么在freebsd下安装显卡驱动

1、nv
在nv的官方网站上就可以下载到专门为freebsd设计的驱动,不过那样太麻烦。
nv的驱动在ports中就有。/usr/ports/x11/nvidia-driver/
/usr/ports/x11/nvidia-xconfig/这个ports是帮你配置xorg.cfg的

nv的驱动安装的时候会有几个选项。
例如是选用freebsd的agp驱动还是nv的agp驱动。

建议是:
不要使用freebsd自带的agp驱动。

如果你要使用nv的agp驱动,
首先检查你的内核配置文件,如果有driver agp这样的行,一定要注释掉。
如果你对内核配置文件做了任何修改,请先重新编译内核。
然后切记,xorg.cfg中这样一行必须删除或者注释掉。
Load  "dri"


2、ati
ATI没有freebsd的驱动。
请在内核配置文件中加入下面两行
device          drm             # DRM core module required by DRM drivers
device          radeondrm       # ATI Radeon
然后重新编译内核。

然后切记,xorg.cfg中这样一行必须删除或者注释掉。
Load  "dri"

3、intel集成显卡。
intel集成显卡没有freebsd的驱动。
device          drm             # DRM core module required by DRM drivers
device          i915drm         # Intel i830 through i915
然后切记,xorg.cfg中这样一行必须删除或者注释掉。
Load  "dri"


附:
1、如何使用ports安装驱动请参考freebsd使用手册。
2、我的系统是freebsd 6.2,以上方式在部分5.x系统下测试过,还有一部分没有测试过。
3、配置xorg.cfg可以使用xorgcfg -textmode命令。
4、我的ati显卡的xorg.cfg的配置
Section "ServerLayout"
        Identifier     "Layout0"
        Screen      0  "Screen0" 0 0
        InputDevice    "Keyboard0" "CoreKeyboard"
        InputDevice    "Mouse0" "CorePointer"
EndSection

Section "Files"
EndSection

Section "Module"
        Load "freetype"
        # Load "xtt"
        Load  "extmod"
        Load  "glx"
        #Load  "dri"
        Load  "dbe"
        Load  "record"
        Load  "xtrap"
        Load  "type1"
        Load  "speedo"
EndSection

Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Protocol" "Auto"
        Option      "Emulate3Buttons"
        Option      "Device" "/dev/sysmouse"
EndSection

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
        Option      "XkbModel" "pc105"
        Option      "XkbLayout" "us"
EndSection

Section "Monitor"
        Identifier   "Monitor0"
 ### Comment all HorizSync and VertSync values to use DDC:
        HorizSync    31.5 - 57.0
        VertRefresh  50.0 - 90.0
EndSection

Section "Device"
        Identifier  "Card0"
        Driver      "ati"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        DefaultDepth     24
        SubSection "Display"
                Viewport   0 0
                Depth     24
                Modes    "1024x768" "800x600"
        EndSubSection
EndSection

Keve Nagy wrote:
> Thank you for the feedback, Everyone!
>
> Seems that for now a cheap nvidia is a good choice.


I have a 7300 GS myself. One of the 7600 models is probably a notch
better - very good, cheap, fanless cards with all the resolution you
need, I believe.

> Those of you who had success with these nvidia cards, what driver did
> you use? I found one in the ports, did you build that one? Or did you
> use the one available for download from the nvidia site?


The one in the ports seems to be the official Nvidia driver. You will
need to have kernel sources.

> How smooth did the driver installation go?
> Any reliability issues with these binary drivers?


No problems, but do read the fine print about agp and running
nvidia-xconfig. Install nvidia-settings if you are into photography or
otherwise care about good colors etc.

Rainer Duffner wrote:
> I'm not running FreeBSD natively on my setup (yet), but I believe there
> are multiple version of the binary NVidia driver in the freebsd
> ports-tree, because NVidia doesn't have a "unified" driver for all their
> hardware.


I presumed that Keve was looking at /usr/ports/x11/nvidia-driver, which
is the latest driver and most probably the correct one if he buys a new
product. But he could always keep in mind that there are legacy
versions. Hard to discuss the matter until he decides on a card.
--
Tore (home period no, user tl18)



Saturday, July 26, 2008

怎样气沉丹田,穴道?_百度知道 - Sent Using Google Toolbar

怎样气沉丹田,穴道?_百度知道

"气沉丹田"是杨式太极拳 "十要"中的"一要"。(包括很多气功都有这个说法,)这是针对人们练拳时,气容易上提,产生憋气和上重下轻、重心不稳的毛病而提出来的。丹田在脐下三寸,气沉丹田,就是要求练拳时尽量保持自然,不要有意识地强行向下压气。因为"先天之气宜稳,后天之气宜顺"。后天之气宜顺就是指的呼吸要顺其自然。腹稳,呼吸自然就顺,下盘就能稳固。
一、静态下行功:先将全身放松。上下口唇微闭,意守丹田,自然吸气入胸腔,然后将气分成两部分,一部分用鼻孔徐徐排出,另一部分内气松沉降于腹腔丹田部位。再吸气时如上述重复循环,自然而然,毫不造作。我们练拳起势或站桩时气的运化,一般来讲是将气沉在丹田部位,但并非绝对,功夫高深者实战中则随其需要,以意领气,带动气血运行,从而产生内劲,可以在周身运行。然非修炼多年不能达到如此境界。

二、动态下行功:太极拳行功走架时,有的采取逆腹式呼吸,即吸气时腹中空,呼气时腹中实。笔者行拳时采用吸气时口微闭,用鼻吸,务要缓、细、实,以意领气,全身放松,胸膈肌受压膨胀上升。尾闾下降,谷道内收。合为吸为蓄,呼为开为发。呼气时胸膈肌下降,引气下行,气沉丹田,下腹凹型腔底受压有膨胀感,尾闾上升,气贴脊背。以上泛指一般情况而言,然拳势千变万化,万物变化规律皆存在一般性和特殊性,望同好们悉心体会,认真领悟。

另外需要说明的是,气沉丹田是随呼吸变化有沉有浮,物极必反,内功亦然,松之极,则紧之至,柔尽刚来,阴极则阳必生,沉极则浮。即吸气胸膈膜上浮,内气上升,呼气时胸膈膜下降,内气下沉,往而复之,循环不已,且阴中有阳,阳中寓阴,细观阴阳鱼图或另有所悟。

用丹田之力来唱,发出的声音才会有穿透力,就以功用来看,丹田的功用也正是气功 中活力的源头,也是一种保健的方式。那什么是丹田呢?我们的丹田位在我们的躯干肚脐下方约三指幅宽的地方(也就是约一点五�),所谓丹田用力是靠身体的内 部深层肌肉在做运动,也就是位在丹田位置后方的深层肌肉在用力。该如何感觉丹田位置呢?请先看完下面简单的训练方法:

一.气入丹田:先慢慢地深深吸一口气,记得用腹式呼吸,用手放在腰的两侧,要感觉腹部有在涨大,这就是气入丹田。
二.闭气宁神:当无法再吸入时,憋住口中真气,集中注意力在肚脐下方约三指幅宽,感觉丹田周围的肌肉有在用力支撑着。
三.聚力吐气:只利用丹田周围的肌肉用力支撑着,其他部位放松,并缓缓的将气吐出来。
四.气尽神散:把身体里的气全吐完后,全身放松,准备再吸一口气。

如此几遍后,会感觉到小腹部的肌肉有一点酸,每次用力时与上大号的感觉是相类似的,请记得这种感觉。不久你就会发现丹田的所在位置,这个位置会因为每个人的体型不同而有所差异,所以你必须记得下次要用力的位置。

等到你已经可以正确把握丹田的位置时,接着要做快吸快吐的训练,把气快速地吸入小腹部,再快速吐出,像小狗在喘气,但是只有丹田的部位在动,这样 可以让你的丹田肌肉做快速的收缩运动,记得只能利用丹田周围的肌肉用力,全身的其他部位是放松的。这个动作可强化腹肌的力量,建议你只要时间地点允许,可 以多多练习这个动作,尤其是孕妇更要多练习,在生产时会有意想不到的效果。

运动也是不错的方法,像跑步、仰卧起坐或仰卧空踩脚踏车,有一些瑜珈的动作也可以达到训练的目的,还有摇呼拉圈、爬楼梯、蛙人操……等等的运动, 要注意以自己身体能承受方式来训练,反正目的是一样的,只是所需时间各有长短。网路上有一位声乐老师说过:「唱歌它本身也是一种艺术,除了需要专注外,也 需要本身身体的体能状态良好,甚至必须达到颠峰,如此再加上本身歌者的涵养,才能缔造美妙的歌声!」

丹田训练在歌唱方面的功用,可归纳为下列几项:

一.更宽广的音域
二.可调控的音量
三.清晰的咬字
四.丰富的声音表现技巧
五.持续的耐久力
六.长久不衰的嗓音

若你持续练习一段时日后,应该会感受到上述几项改变,或许是全部,也有可能只有一、二项有改进,但总体而言,对于在歌唱技巧方面(各种共鸣腔的运用及技巧)无法突破的人来说,丹田训练是一项必修的课程。

最后要提到一点,丹田的运用必须配合腹式呼吸的方式,因为当我们在吸气时,气会进入我们的肺脏,让肺泡充气进而扩大我们的胸腔,但这样的肺活量用 于唱歌仍是不够的,还必须靠着横隔膜的向下扩张,这样吸入的空气量才会足,丹田的肌肉才会有力。当你已经很容易感觉到丹田后,试一试发一长音(至少要30 秒)!一秒一拍的数,可以正确地运用后,再把你要唱的歌拿一小段来做练习,记得丹田要用力!假以时日,必有小成。



呼吸功是调整呼吸的功法,人在胎儿时期,在母亲腹中,是不需要接触空气呼吸的,先贤们称这样的呼吸为胎息,也叫先天呼吸;而离开母腹,接触空气以后,人体 的肺功能开始自动作用,使人完成呼吸。先贤们称之为后天呼吸!随着人的成长,难免生出种种疾患,在不只不觉下使人的呼吸发生改变。有人吸的长,呼的短,有 人相反,也有人呼吸都很短,甚至感到呼吸困难!发生这样的现象,虽然表面上以西医的观点来看,身体并无物理病变,但是以中医的辨证观点就会发现脏腑不调, 阴阳不平衡,气血疲虚等等问题~所以在这里,我安排了这个呼吸功,通过调整呼吸,有意识的训练,来改善身体的健康状况!只有身体处于健康状态,才能进行高 层次的气功修炼!

呼吸功的主要作用:

1可以改善身体状况,改善由气血两虚,阴阳不调导致的脏腑紊乱,胸闷,气短,贫血,慢性微胃疾病,呼吸系统疾病等~

2促进身体新陈代谢,促进血液循环;

3平心静气,使心境更能趋于安静祥和的气功状态;

4为以后的入定和胎息打下坚实的基础!

功法如下:

端坐或盘坐,上身务必保持正直,但切忌挺胸抬头。应当虚胸含腹,气沉丹田,颈部保持正直,下巴微收~两手心向下,自然放于膝盖上,两眼微闭。按照松通功的要领,开始放松。

放松后,开始练习1鼻子缓慢自然吸气,越慢越好,气吸满后,微微闭气2秒,再慢慢呼出。有些人做一两次可能就会感到吃力,憋气,可稍做调整后再接着进行!如此呼吸9次!

2接上不停,鼻子缓慢吸气的同时小腹微微外凸,同时要意念气是吸到小腹去了,吸满后缓慢呼出,同时小腹微内收!整个过程要做到:匀,细,缓,深!做9次!


匀,就是呼吸要均匀,吸气时不要一下吸的多,一下吸的少。呼吸都要均匀。

细,就是呼吸尽可能的细,不要粗,气一点点的进,一点点的出。

缓,就是慢,呼吸要慢,刚开始可能比较困难,但是要尽可能的去慢,多练~

深,就是吸要吸满,吸到头,不要吸一半或者吸三分之二,这样都是不对的!

3接上不停,鼻子缓慢吸气的同时微微内收小腹,呼气时小腹微外凸~与上一步基本相同,区别在小腹内收外凸的先后上!做9次!

4接上不停,深吸气的同时身体向上起,呼气时身体放松下伏。整个过程是缓慢的,千万不要快~呼吸要慢的自己感觉不到,身体的起伏也感觉不到,这才是对的!做9次!

OK,到这里就可以了,自然呼吸几次,放松一下身体!搓搓手,搓搓脸~慢慢睁开眼睛,看,是不是特别的精神?

注意:1整个过程不长,49次呼吸而已,但是有人可以练半个小时或更长,有人只能练十几分钟。当然,这是你呼吸是否慢的原因!这里,我强调,尽可能的慢,刚开始练,可以对自己放松点,但是练几次以后就要严格要求了~

2虽然是呼吸功,但是对调心也是很有帮助的!你试着感觉是否在练功时急噪,想快点练完?是否心静不下来?是否烦躁?有这种现象就要及时去调整!要像老僧入定一样,不急不躁,心平气和,心如止水~长期都能这样,你呀,离成功也就不远了~

Taiji|练好太极拳同时也要练气功

练好太极拳同时也要练气功吧?太极拳只有练到一定境界了才有实战作用吧?_百度知道

练习太极拳可以同时练习气功吗?《中华武术》杂志已请专家做了解答。我是既练太极拳,又练养生站桩功的想谈一点个人的体会和认识,以资交流,并向专家请教。
一般认为太极拳是动中求静,气功是静中求动,两者相反相成,我也一贯持此看法并加以实践。但近来我在想,这两者的动与静二样吗?:首先,它们的实质是不同的,太极拳动的是四肢身体,气功动的是意念引导下的内气;太极拳静的是心态平静,气功静的是肢体外表,可见两者的动与静的内涵是不相同的。其次,气功静中求动是求内气运动;而太极拳动中求静只是一个手段、一种方法(以静御动),静不是目的,它真正追求的目的,也是内气的动,心平气和(静),才能很好地运用意念(用意不用力)并在拳势的导引下达到内气运动。
由于这两者都是以促进内气运动为目的,故具有相互促进、相得益彰、殊途同归的功效;对于养生来说,不但可以同练,而且最好同练。为什么?
因为太极拳要达到内气运转比较费时,光是练拳架从不会到精熟,在业余条件下,没有几年功夫是不行的。而练站桩身上没动作,专心松静,用意念,随呼吸导引内气在体内转,一门心思;就比较容易"得气"。当你在站桩过程中有了内气潜转的真切感受,便能帮助你在练太极拳时,通过放松用意不用力,再配以拳势呼吸,也就会比较容易捉摸到内气随拳势而流动。再反过来,由于拳势的整体性、多样性、多变性,忽左忽右;忽进忽退,这就必须要有相当于大周天的内气周身运转相配合。这样的内气周身运转,也就会促使你在站桩中,内气运转由原来的小周天任督二脉运转,扩展到遍及全身的大周天运转。但我的这种"大周天"不像传统练法那样繁琐:要记忆十二经络;有关穴位,以及来龙去脉,既不大容易弄清楚,又难操作,弄不好还要出偏等。我是采取随意用多种方式运转,既可按身体需要随便选择,又可增加趣味以免单调乏味。这种内气的随意运转处于有规律与无规律之间,总的规律是:吸升呼降,气沉丹田(升,沿督脉及四肢外侧;降,沿任脉及四肢内侧),吸蓄呼发,让内气"满身能跑",(杨澄甫语)。其实这种内气的随意运转,近乎《十三势行功心解》中所说的"气以直养而无害",是指内气的自然调养修炼,也就是通过吐纳、导引,用意念推动内气的运转和强化;
练太极拳也好,练气功也好,能明白这个理,就像是走在阳光大道上,信心十足。倘或一知半解,难免有摸黑弄堂的迷茫。


太极拳能否用于实战这个话题,已争论很久。即使在旧中国的民国初期的比武中,太极拳也是败多胜少,当时的太极拳家向恺然先生说:"在一次武术比赛之后,声明以太极拳为专长的,多未胜利。而北平方面,所去应试之人,其胜利者,虽十之七八也曾练太极拳,但在报名时,却未声明以太极拳为专长……此番南京考试(注:指中央国术馆南京国考)之结果便可证明练太极拳者不如练外家拳容易致用也。"向先生还评论了太极拳的得失,他说:"练太极拳者,每有存心轻视外家拳之习气,论拳理,太极拳自较外家拳精细,但外家拳亦自有其好处。"目前,人们普遍认为,太极拳只是玩的,只是健身的一种途径(健身体操),而不能应用到实战中去;笔者早年也曾对太极拳的实战功效产生过疑惑,但随个人不断修炼和体悟,逐渐加深了认识,现就个人经验分析一下为何太极拳在益于养生的同时也具备强大的实战功能。

太极拳实际上具备一套完整的技击训练体系,完整的太极拳修炼应包含自我训练及实战训练两个部分,自我训练包括站桩、盘架、推手(包括程序化的单推、双推、大捋及沾手和接手)、功力(包括静态与动态训练)、发力、抗击打训练等。以上每种训练方式,实际上都有其独特的功效,分别培养了技击实战中所必须的各种基本素养,个人可根据自身的具体状况进行有选择的训练。有必要指出的是,单靠盘架和程序化推手的训练是不能成为实战高手的。

在自我训练有一定基础后,便可进行技击实战训练,在此需要指出的是,自我训练与技击实战训练是两种不同层次的训练,它们之间有很大的区别,自我训练是实战技击训练的基础,而实战技击训练是在对方不断变化的情形下,自己随机应变,逐步培养充分发挥个人拳学素养的能力。在这一阶段,主要训练与对方的距离感、时间差、角度、速度、步法的灵活变化、灵敏性与本能、击打发放的力度等,是在动态当中,针对于实战状态的综合训练,如缺少此过程,就很难发挥出太极拳的技击威力了。

笔者曾系统接触过形意、八卦、大成、少林、太极、无极等多派武学,在实践中,深切体验到其拳理皆是相通的。从前贤们的理论可以明确一点,那就是太极拳的拳理,是慎密而奥妙的,太极拳自产生之日起,便与实战紧密相关,直接服务于实战。只不过太极拳在历代延传过程中,由于老师的保守或个人资质领悟能力的不同,致使不同的人对太极拳实质的把握也是千差万别,太极拳的上乘功夫,历代除极少数拳家外,很少有人能充分体悟其内涵。

笔者幼年即嗜武学,尤其对太极一门情有独钟,为探求太极真谛,也曾不计艰辛,遍访明者求其点滴真意,经多年探索体悟,对太极的技击内涵颇有所得。可以说太极拳为我国传统文化宝库中的奇珍异宝,但若一味炫耀已成为历史的前辈的高超武技,不思进取,正所谓逆水行舟不进则退,不免使此瑰宝在我辈手中遗失,那将是中华武学的巨大损失,我辈也会成为历史的罪人而愧对后人。因此我辈总结前辈宝贵的武学理论和实践经验,百尺竿头更进一步,使之发扬光大、后继有人。故笔者大力呼吁:"武界应团结互助,共同为挖掘保护太极拳精髓而尽力。"

近来,传出一种狂妄的叫嚣声,说传统中华武术根本与散打无法相提并论,只是一种花拳锈腿,根本不能用于实战当中。观持此种论调的人,他们并没有真正领悟传统武术的真谛,仅凭一些表皮的功夫和一点道听途说,便主观臆断,自认为掌握住真理。传统武学,作为中华文化的一部分,博大精深,应作为一门严谨的学术看待,而钻研学术,必须做到客观公正,冷静思考,亲身体验,并且富于实战,只有这样学术才可有真正发展。

Friday, July 25, 2008

Concept|软件工程师不可不知的10个概念

软件工程师不可不知的10个概念 - 基于 COMSHARP CMS

软件工程师不可不知的10个概念
Label作者: its|发布: 2008-7-24 (7:36)|阅读: 268|评论: 0

出色的软件工程师善用设计模式,勤于代码重构,编写单元测试,并对简单有宗教般的追求。除了这些,优秀的软件工程师还要通晓10个概念,这10个概念超越了编程语言与设计模式,软件工程师应当从更广的范围内明白这些道理:

  1. 界面 (Interfaces )
  2. 惯例与模板 (Conventions and Templates)
  3. 分层 (Layering )
  4. 算法的复杂性 (Algorithmic Complexity)
  5. 散列法 (Hashing )
  6. 缓存 (Caching )
  7. 并发 (Concurrency )
  8. 云计算(Cloud Computing )
  9. 安全(Security )
  10. 关系数据库 (Relational Databases )

  

10. 关系数据库 (Relational Databases)

关系数据库因为在大规模 Web 服务上缺乏可扩充性而颇受微词,然而,关系数据库仍然是近20年来计算机技术中最伟大的成就。关系数据库对处理订单,公司数据方面有着出色的表现。

关系数据库的核心是以记录表示数据,记录存放在数据库表,数据库使用查询语言(SQL)对数据进行搜索与查询,同时,数据库对各个数据表进行关联。

数据库的标准化技术(normalization)讲的是使用正确的方式对数据进行分存以降低冗余,并加快存取速度。

 

9. 安全 (Security)

随着黑客的崛起与数据敏感性的上升,安全变得非常重要。安全是个广义的概念,涉及验证,授权与信息传输。

验证是对用户的身份进行检查,如要求用户输入密码。验证通常需要结合 SSL (secure socket layer)进行;授权在公司业务系统中非常重要,尤其是一些工作流系统。最近开发的 OAuth 协议可以帮助 Web 服务将相应信息向相应用户开放。Flickr 便使用这种方式管理私人照片和数据的访问权限。

另外一个安全领域是网络设防,这关系到操作系统,配置与监控。不仅网络危险重重,任何软件都是。Firefox 被称为最安全的浏览器,仍然需要频频发布安全补丁。要为你的系统编写安全代码就需要明白各种潜在的问题。

 

8. 云计算 (Cloud Computing)

RWW 最近的关于云计算的文章 Reaching For The Sky Through Compute Clouds 讲到了云计算如何改变大规模 Web 应用的发布。大规模的并行,低成本,与快速投入市场。

并行算法发明以来,首先迎来的是网格计算,网格计算是借助空闲的桌面计算机资源进行并行计算。最著名的例子是 Berkley 大学的 SETI@home 计划,该计划使用空闲的 CPU 资源分析太空数据。金融机构也大规模实施网格计算进行风险分析。空闲的资源,加上 J2EE 平台的崛起,迎来了云计算的概念:应用服务虚拟化。就是应用按需运行,并可以随着时间和用户规模而实时改变。

云计算最生动的例子是 Amazon 的 Web 服务,一组可以通过 API 进行调用的应用,如云服务(EC2),一个用来存储大型媒体文件的数据库(S3),索引服务(SimpleDB),序列服务(SQS)。

 

7. 并发 (Concurrency)

并发是软件工程师最容易犯错的地方,这可以理解,因为我们一直遵从线形思维,然而并发在现代系统中非常重要。

并发是程序中的并行处理,多数现代编程语言包含内置的并发能力,在 Java,指的是线程。关于并发,最经典的例子是"生产/消费"模式,生产方生产数据和任务,并放入工作线程消费或执行。并发的复杂性在于,线程需要经常访问共同数据,每个线程都有自己的执行顺序,但需要访问共同数据。Doug Lea 曾写过一个最复杂的并发类,现在是 core Java 的一部分。

6. 缓存(Caching)

缓存对现代 Web 程序不可或缺,缓存是从数据库取回,并存放在内存中的数据。因为数据库直接存取的代价非常高,将数据从数据库取回并放在缓存中访问就变得十分必要。比如,你有一个网站,要显示上周的畅销书,你可以从数据将畅销书榜一次性取回放在缓存中,而不必在每次访问时都去数据库读数据。

缓存需要代价,只有最常用的内容才可以放入缓存。很多现代程序,包括 Facebook,依靠一种叫做 Memcached 的分布式缓存系统,该系统是 Brad Firzpatrick 在工作于 LiveJournal 项目时开发的,Memcached 使用网络中空闲的内存资源建立缓存机制,Memcached 类库在很多流行编程语言,包括 Java 和 PHP 中都有。

5. 散列法(Hashing)

Hashing 的目的是加速访问速度。如果数据是序列存储的,从中查询一个项的时间取决于数据列的大小。而散列法对每一个项计算一个数字作为索引,在一个好的 Hashing 算法下,数据查找的速度是一样的。

除了存储数据,散列法对分布式系统也很重要。统一散列法(uniform hash )用来在云数据库环境下,在不同计算机之间分存数据。Google 的索引服务就是这种方法的体现,每一个 URL 都被散列分布到特定计算机。

散列函数非常复杂,但现代类库中都有现成的类,重要的是,如何对散列法进行细调以获得最好的性能。

4. 算法的复杂性 (Algorithmic Complexity)

关于算法的复杂性,软件工程师需要理解这样几件事。第一,大O标记法(big O notation);第二,你永远都不应该使用嵌套式循环(循环里面套循环),你应该使用 Hash 表,数组或单一循环;第三,如今优秀类库比比皆是,我们不必过分纠缠于这些库的效能的差别,我们以后还有机会进行细调;最后,不要忽视算法的优雅及性能,编写紧凑的,可读的代码可以让你的算法更简单,更干净。

 

3. 分层 (Layering)

用分层来讨论软件架构是最容易的。John Lakos 曾出版过一本关于大型 C++ 系统的书。Lakos 认为软件包含了层,书中介绍了层的概念,方法是,对每个软件组件,数一下它所依赖的组件数目就可以知道它的复杂程度。

Lakos 认为,一个好的软件拥有金字塔结构,就是说,软件组件拥有层层积累的复杂度,但每个组件本身必须简单,一个优秀的软件包含很多小的,可重复使用的模块,每个模块有自己的职责。一个好的系统中,组件之间的依赖性不可交叉,整个系统是各种各样的组件堆积起来,形成一个金字塔。

Lakos 在软件工程的很多方面都是先驱,最著名的是 Refactoring (代码重构)。代码重构指的是,在编程过程中需要不断地对代码进行改造以保证其结构的健壮与灵活。

 

2. 惯例与模板 (Conventions and Templates)

命名惯例和基础模板在编程模式中常被忽视,然而它可能是最强大的方法。命名惯例使软件自动化成为可能,如,Java Beans 框架在 getter 和 setter 方法中,使用简单的命名惯例。del.icio.us 网站的 URL 命名也使用统一的格式,如 http://del.icio.us/tag/software 会将用户带到所有标签为 software 的页。

很多社会网络均使用简单命名,如,你的名字是 johnsmith ,那你的头像可能命名为 johnsmith.jpg,而你的 rss 聚合文件的命名很可能是 johnsmith.xml 。

命名惯例还用于单元测试,如,JUnit 单元测试工具会辨认所有以 test 开头的类。

我们这里说的模板(templates )指的并不是  C++ 或 Java 语言中的 constructs,我们说的是一些包含变量的模板文件,用户可以替换变量并输出最终结果。

Cold Fusion 是最先使用模板的程序之一,后来,Java 使用 JSP 实现模板功能。Apache 近来为 Java 开发了非常好用的通用模板, Velocity。PHP 本身就是基于模板的,因为它支持 eval 函数。

1. 界面(Interfaces)

软件工程中最重要的概念是界面。任何软件都是一个真实系统的模型。如何使用简单的用户界面进行模型化至关重要。很多软件系统走这样的极端,缺乏抽象的冗长代码,或者过分设计而导致无谓的复杂。

在众多软件工程书籍中,Robert Martin 写的《敏捷编程》值得一读。

关于模型化,以下方法对你会有帮助。首先,去掉那些只有在将来才可能用得着的方法,代码越精练越好。第二,不要总认为以前的东西是对的,要善于改变。第三,要有耐心并享受过程。

Sunday, July 20, 2008

xargs|Linux command usage

Use this to copy a list of files to another dir
WSGPD1@wgwprddbsl001 $ find ../../NewPurge/data/ -ctime +3 -print |xargs -i mv {} .