欢迎大家访问我的BLOG,我会多多的出原创文章,希望大家支持我,为我祈祷,让我实现我的三个梦想!再30岁能成为一个名优秀的软件架构师!

2011年8月12日

佛说十二因缘

 

佛说十二因缘


“十二因缘说”,也叫“缘起说”,是佛教用以解释人生现象及世间没有任何孤立存在的现象,也没有任何永恒不变的现象;一切的现象的产生和变化都因一定的条件,叫做“缘起”。据佛教的说法是:“有因有缘集世间,有因有缘世间集;有因有缘灭世间,有因有缘世间灭。”
 

    在“四谛”说中,“缘起”和“佛法”密不可分,“但见缘起便见法,但见法便见缘起”。实际上,“缘起”是佛法的表现,人生现象和世间现象变化无常,其因缘也各异,但“四谛”说认为,最基本的是事儿因缘,这就是:

 

      1 老死。佛家认为,认得最大的烦恼是害怕老死。死为人生的终结。为什么会有“死”的烦恼呢?那是因为有“生”,有“生”才有“死”,所以说“生是老死缘”。

 

      2“生”。“生”是人生的开端。而“生”的原因又是什么呢?佛家认为那是因为“有”。什么是“有”?在佛家看来,“有”是指某个人前生思想行为的总和,佛教又称之为“业力”。也就是说,是由前生“业力”之因,导致今世得以生为某类众生之果。所以说“有”为“生”因,“生”为“有”果。

 

      3“有”。既然“有”的本质是各个人前生的思想行为,即“业力”的总和,那末,“有”的原因又是什么呢?佛教认为是“取”。佛教讲“取”,是指人们对人生和物欲的各种追求,由此形成各种不同的思想行为,即各种不同的“业力”,进而得到不同的回取,所以说“取是有缘”。

 

      4“取”。既然“取”是人们对人生和物欲的追求,那么,“取”的原因又是什么?佛教认为, “取”的原因是“爱”。“爱”包括***、食欲等感情的和物质的各种贪爱。人是因为具有各种贪爱才去追求种种人生物欲的,所以说“爱是取缘”。

 

      5“爱”。既然“爱是各种贪爱,那么“爱”的原因又是什么?佛教认为,“爱”的原因是“受”。“受”指各种苦乐感受,它导致了人们产生各种贪爱。所以说“受是爱缘”。

 

      6“受”。既然“受”是人的种种苦乐感受,那么,导致种种苦乐感受的原因又是什么呢?佛教认为是“触”。“触”指人的肉体、精神与外界直接接触,因为有接触才有感受,所以说“触是受缘”。
 
    7“触”。既然“触”是人的肉体或精神与外界直接接触,那么,导致“触”的原因又是什么呢?佛教认为是“六入”。“六入”指人的眼、耳、鼻、舌、身、意六种感觉器官和认识机能;如果没有这些器官和功能,人们就不能触受外界事物,所以说“六入是触缘”。

 

      8“六入”。既然“六入”,是眼、耳、鼻、舌、身、意六种感觉器官和认识机能,那么,导致“六入”的原因又是什么呢?佛教认为是“名色”。“名”指人的精神活动,“色”指人的肉体,“名色”则是指有意识活动的人体。因为有了它才会产生“六入”,所以说“名色是六入缘”。

 

      9“名色”。既然“名色”是指有意识活动的人体,那么导致产生有意识活动的人体又是什么呢?佛教认为是“识”。“识”是指人在投生一刹那间的精神本体的神秘活动,相当于通常讲的“灵魂”。佛教认为,人体生命是托“识”而成,所以说“识是名色缘”。

 

      10"识"。既然“识”是指人的投生一刹那间的精神本体的活动,那么,导致这种精神本体如此投生(或投宝贵人家,或投贫家,或投生为畜牧,等等)的原因又是什么呢?佛教认为是“行”。这里的“行”一是指人的一切(包括前生今生)思想行为(即业行),二是指推动这些思想行为获得一定果报的过程和力量。“识”是由于“业行”引发的,所以说“行是识缘”。

 

      11“行”。既然“行”是指人的能导致一定果报的业行,那么,导致人的种种“业行”的原因又是什么呢?佛教认为是“痴”。“痴”,又叫做“无明”,即愚昧无知,人之所以致力于种种不善的“业行”,是由于无知的结果,所以说“痴是行缘”。

 

      12“痴”。佛教认为,人的一生和人世间之所以有种种“苦”的现象,根源全在于“痴”,这是苦的最后根源。

 

      上述十二缘,又叫十二支。“四缔”说认为,十二支中,对人生起最重要作用的是“生”、“爱”、“痴”三支,因为有“生”,就有“爱”,就会导致各种“苦”,而归根到底则是由于“痴”。因此,人们要能获得最终的解脱,便应修习佛理,彻底摆脱“痴”的羁绊,这就是“十二因缘说”的最终结论。

 

转自:http://blog.sina.com.cn/s/blog_48dbe8060100v4ed.html

 

posted @ 2011-08-12 14:24 程序缘 阅读(43) 评论(0) 编辑

2009年12月1日

数据库的表和字段的注释。表的结构。(转)

这里的表结构指的表的基本信息:表名,表的注释(备注),字段名,字段类型,长度,是否允许空,缺省值,字段注释(备注)。
 
主要的是注释..你的表明叫lcxxb,字段名叫lcmc,智商300的用户也看不懂你这是拼音,意思是"流程信息表"和"流程名称"。大家的思路都不一样。

我要做到的就是让用户看到的是"流程信息表"和"流程名称"而实际操作的是lcxxb和lcmc。
你自己建个表XXX来保存lcxxb,lcmc和"流程信息表","流程名称"的对应吧。是相当麻烦的事情,
1,造成数据冗余,人家数据库基本上都能让你给表和字段写注释,你还自己搞一套..
2,每次修改表都要去修改一下这张表,删除的表和字段要删除,更新的表和字段要更新,新建的表和字段要新建,累..
3,每次创建数据库都要独立的再填写表XXX的内容。每次修改了数据库设计,创建数据库的程序也要跟着修改。
所以俺还是老老实实用数据库提供的注释或备注或数据字典功能吧。

但是这又涉及一个问题:各种数据库保存注释(备注)的方法不一样,虽然现在只用MS Sql server,但难保以后不会用Oracle。要不是大家都各搞一套,巴别塔也许早就建成了。
 
SQL server下的方法:
SQL Server下生成数据库框架。
经过反复学习和测试,最后发现自定义的视图才能简单地胜任所需要的工作,否则把事情会变得很复杂。
视图代码如下(摘自 SQL Server下生成数据库框架):
CREATE VIEW dbo.Data_Frame
AS
SELECT dbo.syscolumns.name AS Name, dbo.systypes.name AS Type,
      dbo.syscolumns.length AS Width, dbo.syscolumns.isnullable AS IsNull,
      dbo.sysproperties.[value], dbo.sysobjects.name AS Table_Name
FROM dbo.sysobjects INNER JOIN
      dbo.syscolumns ON dbo.sysobjects.id = dbo.syscolumns.id INNER JOIN
      dbo.sysproperties ON dbo.syscolumns.colid = dbo.sysproperties.smallid AND
      dbo.syscolumns.id = dbo.sysproperties.id INNER JOIN
      dbo.systypes ON dbo.syscolumns.xtype = dbo.systypes.xtype AND
      dbo.syscolumns.xusertype = dbo.systypes.xusertype

最后输出的是:
列名
系统类型
限制长度
是否允许为空
备注
所在表
可以进一步根据需要增加/删除自己希望的部分。
调用:
Select * From [自定义的视图名称] Where Table_Name='[希望检索的表名]'

或者 取得一个表中所有的字段列表及字段描述的方法:
字段名列表:
select Name from syscolumns where id=object_id('custmoerinfo')
字段描述:
select * from ::fn_listextendedproperty(NULL, 'user', 'dbo', 'table', 'custmoerinfo','column', default)

ORACLE下的方法:
ORACLE自己搞了一套数据字典(摘自Oracle数据字典的介绍与应用实例)
创建表的SQL语句如下
--" 创建数据表
create table TABLE_TEST
(
  NAME varchar2(40) not null,
  SEX varchar2(1) default 'Y' not null,
  BIRTHDAY date not null,
  HEIGHT number(3,2),
  WEIGHT number(3,2),
  MEMO blob
);
-- 给列添加备注
  comment on column TABLE_TEST.NAME is '姓名';
  comment on column TABLE_TEST.SEX is '性别';
  comment on column TABLE_TEST.BIRTHDAY is '生日';
  comment on column TABLE_TEST.HEIGHT is '身高';
  comment on column TABLE_TEST.WEIGHT is '体重';
  comment on column TABLE_TEST.MEMO is '备注';
-- 创建约束关系 主键 外键 其他
  alter table TABLE_TEST add constraint TB_TEST_P_NAME primary key (NAME);
  
数据表创建完毕,执行下列SQL语句:
  select
  A.column_name 字段名,A.data_type 数据类型,A.data_length 长度,A.data_precision 整数位,
  A.Data_Scale 小数位,A.nullable 允许空值,A.Data_default 缺省值,B.comments 备注
  from
  user_tab_columns A,user_col_comments B
  where
  A.Table_Name = B.Table_Name
  and A.Column_Name = B.Column_Name
  and A.Table_Name = 'TABLE_TEST'
  
我们可以得出以下结果:
字段名 数据类型 长度 整数位 小数位 允许空值 缺省值 备注
Name varchar2 40     N <long> 姓名
Sex varchar2 1     N <long> 性别
........

 

MySql是怎么弄的?有一个词中文读gan,英文读f*ck,法文读什么?-_-!

 

学习数据库的一些资料:

存储过程的好处:1编译2封装3重复使用4安全性5减少网络流量

JDBC读取字段需要按顺序的原因?:SQL数据库在构造虚拟表的时候就是以一种先进先出的原则,把所有的数据排列在一个内存段之中,通过顺序的读取,将数据逐一的读取,而如果跳过某个具体的字段获取下一个字段的信息,系统就会将原来的那个字段的信息丢失,以释放内存,这是出于系统构造的简单性和系统的内存最低化的要求,所以这样也保证了有限的内存资源得到最充分的发挥。?

在SQL Server中保存和输出图片http://www.pcdog.com/p/html/2004124/41220041381_1.htm

很好的一个电子书下载地址http://www.ibook8.com/book/shuju.htm

posted @ 2009-12-01 09:40 程序缘 阅读(236) 评论(0) 编辑

2009年11月5日

(转)不同数据库的数据插入

转自:http://www.cnblogs.com/xiayang/archive/2008/11/20/1337499.html

1.同一服务器不同数据库表的数据插入

insert into GDUAPDEV3.dbo.tbltmTaskList
select * from UAP2.dbo.tbltmTaskList --表结构相同的情况

2.不同服务器的数据库表的数据插入

SQL Server2005中要先链接服务器才执行SQL

a.点击链接服务器

b.输入链接服务器的IP,以及选择SQL Server

c.选择“安全性”,点击,“添加”,添加一条,注意第一个选择第项,然后输入用户名与密码,在下面,也要选择最后一个,然后输入用户名与密码。

 

OK,现在已经将数据库链接上了,接下来写脚本然后执行喽。

insert into GDUAPDEV3.dbo.tbltmTaskList
select * from [192.168.138.36].UAP2.dbo.tbltmTaskList --表结构相同的情况

posted @ 2009-11-05 17:30 程序缘 阅读(97) 评论(0) 编辑

不同服务器的数据库的数据导入

INSERT INTO OPENDATASOURCE('SQLOLEDB','Data Source=机器名\A实例名;User ID=登陆名;Password=密码').dbname.dbo.tbname
   
SELECT *

   
FROM OPENDATASOURCE('SQLOLEDB','Data Source=机器名\B实例名;User ID=登陆名;Password=密码').dbname.dbo.tbname

这时出现了SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。的错误

解决方法:

    启用Ad Hoc Distributed Queries:
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
    使用完成后,关闭Ad Hoc Distributed Queries:
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure

posted @ 2009-11-05 17:25 程序缘 阅读(34) 评论(0) 编辑

2009年10月26日

(转)C#冒泡算法

 参加多次笔试,居然有几次都考到了冒泡算法,一次是C#版的填空,一次是javascript版的全部写出。
  虽然每次都凭着我对冒泡法的理解给弄出来的,但是多多少少与标准模式有点差别,在网上搜了一下关于C#版的冒泡算法,居然也没有一个象样的,自己对照算法模式认真写了一个C#版的,已经测试成功。

    class Program
    {
        static void Main()
        {
            int[] R ={ 9, 2, 8, 4, 7, 6 };
            BubbleSort(R);
            foreach (int i in R)
            {
                Console.WriteLine(i);
            }

            Console.Read();
           
        }
         public static void BubbleSort(int[] R)
          {
              int i, j, temp; //9 2 8 4 7 6
              //交换标志
              bool exchange;
              //最多做R.Length-1趟排序
              for (i = 0; i < R.Length; i++)
              {
                  //本趟排序开始前,交换标志应为假
                  exchange = false;
                  for (j = R.Length - 2; j >= i; j--)
                  {
                      //交换条件
                      if (R[j + 1] < R[j])
                      {
                          temp = R[j + 1];
                          R[j + 1] = R[j];
                          R[j] = temp;
                          //发生了交换,故将交换标志置为真
                          exchange = true;
                      }
                  }


                  //本趟排序未发生交换,提前终止算法
                  if (!exchange)
                  {
                      break;
                  }
              }
          }  
    }

posted @ 2009-10-26 15:10 程序缘 阅读(61) 评论(0) 编辑

(转)用递归的算法求1,1,2,3,5,8.......的第30位数是多少,然后求这些数的和

用递归的算法求1,1,2,3,5,8.......的第30位数是多少,然后求这些数的和.
    代码如下: 
     public int num(int i)    //第i位数是多少
        {
            if (i == 1)
                return 1;
            else if (i == 2)
                return 1;
            else
                return num(i - 1) + num(i - 2);
        }
        public int sum(int i)   //所有数的和
        {
            if (i == 1)
                return 1;
            else if (i == 2)
                return 2;
            else
                return sum(i - 1) + num(i);

        }

调用:num(7),即求出第7位数是多少。

调用:sum(7),即求出这7位数的和。

 

转自:http://www.cnblogs.com/paper/archive/2009/07/28/1533111.html

posted @ 2009-10-26 14:27 程序缘 阅读(117) 评论(0) 编辑

2009年9月21日

JavaScript 闭包深入理解(closure)

本文来自: 脚本之家(www.jb51.net) 详细出处参考:http://www.jb51.net/article/18303.htm

最近在网上查阅了不少Javascript闭包(closure)相关的资料,写的大多是非常的学术和专业。对于初学者来说别说理解闭包了,就连文字叙述都很难看懂。撰写此文的目的就是用最通俗的文字揭开Javascript闭包的真实面目。
一、什么是闭包?
“官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
相信很少有人能直接看懂这句话,因为他描述的太学术。其实这句话通俗的来说就是:JavaScript中所有的function都是一个闭包。不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的“闭包”。看下面这段代码:

function a() {
  var i = 0;
  function b() {
    alert(++i);
  }
  return b;
}
var c = a();
c();
这段代码有两个特点:

函数b嵌套在函数a内部;
函数a返回函数b。

引用关系如图:


这样在执行完var c=a()后,变量c实际上是指向了函数b,b中用到了变量i,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:

当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个我们通常所谓的“闭包”。
让我们说的更透彻一些。所谓“闭包”,就是在构造函数体内定义另外的函数作为目标对象的方法函数,而这个对象的方法函数反过来引用外层外层函数体中的临时变量。这使得只要目标 对象在生存期内始终能保持其方法,就能间接保持原构造函数体当时用到的临时变量值。尽管最开始的构造函数调用已经结束,临时变量的名称也都消失了,但在目 标对象的方法内却始终能引用到该变量的值,而且该值只能通这种方法来访问。即使再次调用相同的构造函数,但只会生成新对象和方法,新的临时变量只是对应新 的值,和上次那次调用的是各自独立的。
为了更深刻的理解闭包,下面让我们继续探索闭包的作用和效果。

二、闭包有什么作用和效果?
简而言之,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。这是对闭包作用的非常直白的描述,不专业也不严谨,但大概意思就是这样,理解闭包需要循序渐进的过程。
在上面的例子中,由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后alert出i的值。

那么我们来想象另一种情况,如果a返回的不是函数b,情况就完全不同了。因为a执行完后,b没有被返回给a的外界,只是被a所引用,而此时a也只会被b引用,因此函数a和b互相引用但又不被外界打扰(被外界引用),函数a和b就会被GC回收。(关于Javascript的垃圾回收机制将在后面详细介绍)

三、闭包的微观世界
如果要更加深入的了解闭包以及函数a和嵌套函数b的关系,我们需要引入另外几个概念:函数的执行环境(excution context)、活动对象(call object)、作用域(scope)、作用域链(scope chain)。以函数a从定义到执行的过程为例阐述这几个概念。

当定义函数a的时候,js解释器会将函数a的作用域链(scope chain)设置为定义a时a所在的“环境”,如果a是一个全局函数,则scope chain中只有window对象。
当执行函数a的时候,a会进入相应的执行环境(excution context)。
在创建执行环境的过程中,首先会为a添加一个scope属性,即a的作用域,其值就为第1步中的scope chain。即a.scope=a的作用域链。
然后执行环境会创建一个活动对象(call object)。活动对象也是一个拥有属性的对象,但它不具有原型而且不能通过JavaScript代码直接访问。创建完活动对象后,把活动对象添加到a的作用域链的最顶端。此时a的作用域链包含了两个对象:a的活动对象和window对象。
下一步是在活动对象上添加一个arguments属性,它保存着调用函数a时所传递的参数。
最后把所有函数a的形参和内部的函数b的引用也添加到a的活动对象上。在这一步中,完成了函数b的的定义,因此如同第3步,函数b的作用域链被设置为b所被定义的环境,即a的作用域。
到此,整个函数a从定义到执行的步骤就完成了。此时a返回函数b的引用给c,又函数b的作用域链包含了对函数a的活动对象的引用,也就是说b可以访问到a中定义的所有变量和函数。函数b被c引用,函数b又依赖函数a,因此函数a在返回后不会被GC回收。

当函数b执行的时候亦会像以上步骤一样。因此,执行时b的作用域链包含了3个对象:b的活动对象、a的活动对象和window对象,如下图所示:

如图所示,当在函数b中访问一个变量的时候,搜索顺序是:

先搜索自身的活动对象,如果存在则返回,如果不存在将继续搜索函数a的活动对象,依次查找,直到找到为止。
如果函数b存在prototype原型对象,则在查找完自身的活动对象后先查找自身的原型对象,再继续查找。这就是Javascript中的变量查找机制。
如果整个作用域链上都无法找到,则返回undefined。
小结,本段中提到了两个重要的词语:函数的定义与执行。文中提到函数的作用域是在定义函数时候就已经确定,而不是在执行的时候确定(参看步骤1和3)。用一段代码来说明这个问题:

function f(x) {
  var g = function () { return x; }
  return g;
}
var h = f(1);
alert(h());这段代码中变量h指向了f中的那个匿名函数(由g返回)。

假设函数h的作用域是在执行alert(h())确定的,那么此时h的作用域链是:h的活动对象->alert的活动对象->window对象。
假设函数h的作用域实在定义时确定的,就是说h指向的那个匿名函数在定义的时候就已经确定了作用域。那么在执行的时候,h的作用域链为:h的活动对象->f的活动对象->window对象。
如果第一种假设成立,那输出值就是undefined;如果第二种假设成立,输出值则为1。

运行结果证明了第2个假设是正确的,说明函数的作用域确实是在定义这个函数的时候就已经确定了。

四、闭包的应用场景
保护函数内的变量安全。以最开始的例子为例,函数a中i只有函数b才能访问,而无法通过其他途径访问到,因此保护了i的安全性。
在内存中维持一个变量。依然如前例,由于闭包,函数a中i的一直存在于内存中,因此每次执行c(),都会给i自加1。
通过保护变量的安全实现JS私有属性和私有方法(不能被外部访问)推荐阅读:http://javascript.crockford.com/private.html
私有属性和方法在Constructor外是无法被访问的

function Constructor(...) {
  var that = this;
  var membername = value;
  function membername(...) {...}
}以上3点是闭包最基本的应用场景,很多经典案例都源于此。

五、Javascript的垃圾回收机制
在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。

六、结语
理解JavaScript的闭包是迈向高级JS程序员的必经之路,理解了其解释和运行机制才能写出更为安全和优雅的代码。如果您对本文有任何的建议和疑问,欢迎留言。转载请著名出处。

本文来自: 脚本之家(www.jb51.net) 详细出处参考:http://www.jb51.net/article/18303.htm

posted @ 2009-09-21 13:57 程序缘 阅读(116) 评论(0) 编辑

2009年9月16日

haslayout综合

摘要: 要想更好的理解 css, 尤其是 IE 下对 css 的渲染,haslayout 是一个非常有必要彻底弄清除的概念。大多 IE下的显示错误,就是源于 haslayout。 什么是 haslayout ? haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分。在Internet Explorer中,一个元素要么自己对自身的内容进行计算大小和组织,要么...阅读全文

posted @ 2009-09-16 16:04 程序缘 阅读(71) 评论(0) 编辑

详解display:inline | block |inline-block的区别(转)

摘要: display:block就是将元素显示为块级元素. block元素的特点是:总是在新行上开始;高度,行高以及顶和底边距都可控制;宽度缺省是它的容器的100%,除非设定一个宽度<div>, <p>, <h1>, <form>, <ul> 和 <li>是块元素的例子。display:inline就是将元素显示为行内元素.inli...阅读全文

posted @ 2009-09-16 14:06 程序缘 阅读(96) 评论(0) 编辑

css中的min-width

摘要: http://kino.javaeye.com/blog/239812我们在做布局设计时,经常有这样的布局,两边或者一边是导航类工具栏 ,中间是内容区域。但我们希望中间的内区域能够自动适应,随着不同的分辨率和浏览器的大小自动适应高度和宽度,以获得较好的显示效果。我们假设中间的内容区域是个div,如果我们不明确设置它样式的width属性,它是可以自动适应的,按说这满足了要求。但是当浏览器的宽度过小时...阅读全文

posted @ 2009-09-16 11:10 程序缘 阅读(80) 评论(0) 编辑