庄周梦蝶

生活、程序、未来
   :: 首页 ::  ::  :: 聚合  :: 管理

     摘要: javascript之DOM技术(一) 一。样式编程1.页面中的每一个元素都具有一个style对象,此对象管理元素的CSS样式。这是在IE4.0引入的,后来作为DOM标准被接受。使用方法:var oDiv=document.getElementById("div1");alert(oDiv.style.backgroundColor);style对象拥有一个cssText属性,返回描...  阅读全文

posted @ 2007-02-10 15:12 dennis 阅读(6345) | 评论 (0)编辑 收藏

    今天到china-pub逛了逛,有段时间没在那买书了,都在当当网上买,那边满99元省运费啊!china-pub上我也是有3个星星了,琢磨这再买几本争取到4个星星。一直在关注《programming ruby》的出版,英文版粗略看过一遍,很想好好搞本中文的读读。博文视点跳票N次,真没信誉。逛了一圈,决定买几本。

一。《鸟哥的linux私房菜——基础学习篇》
    玩ubuntu也有段时间了,没有系统学习过linux,靠的都是摸索和同事的指点,很有必要系统学习linux的使用。这本书是引进台湾某鸟哥的(这名字真不错)的作品,看书评不赖。
shupi.gif   

二.《重构:改善既有代码设计(中文版)》
    这本书早就想读,在学校尝试读过,看不下去,那时热衷于各种各样的技巧、框架和新鲜玩意,沉不下心来读这些砖头。06年是我对设计模式以及重构开始深入接触的一年,兴趣也越来越浓厚,这本书一定要读!
shupi2.gif

三。《重构与模式》
    第15届jolt的生产效率大奖得主,价值毋庸置疑,继续我的模式热情。

shupi4.gif

四。《lucene in Action中文版》

    买这本书的原因有二:1.足够便宜,35块大洋看看搜索技术,值! 2.我对搜索确实感兴趣,很好奇,工作中也没用过lucene,作为技术储备来学习,不赖!
     满大街的webwork in action ,struts in action,spring in action,这样一本书显得很不同,也好像很有趣。
shupi5.gif    

五。《征服ruby on rails:web开发技术详解》
    国内比较重量级的一本原创rails书籍,两位作者也是牛人:
龚昕:现任NEC高级工程师,有10多年开发经验,精通跨平台开发,掌握多种数据库系统,使用Perl/Ruby超过三年.
张浩:现任网讯(中国)软件有限公司项目主管,主要研究Web技术,对RubyOnRails有独特的见解

看书评也是不错,值的读读。封面和书名搞的很差劲,比较遗憾。在狗日的《programming ruby》出来之前解解馋。
shupi6.gif

posted @ 2007-02-10 12:52 dennis 阅读(315) | 评论 (0)编辑 收藏

    我得老实承认,我很早就想好好学习下C#,学习下ASP.NET。因为我听说ASP.NET的开发速度很让人羡慕,听说C#也是蛮有趣的语言。装了.net Framework2.0,下了C#的语言规范(本来想找本书,发现网上的电子书都做的很糟糕,还是看语言规范得了),写第一个Hello World。

using System;

public class HelloWorld
{
    
public static void Main()
    {
        Console.WriteLine(
"Hello World");
    }

    
}

    存为hello.cs。配置好环境变量,在命令行运行:csc hello.cs。在目录下会生成一个hello.exe,直接运行hello。打印:
Hello World

    看起来跟java确实没什么不同,除了字母的大小写,和java默认引入java.lang包,而这里需要using System;
    稍微复杂点的例子,我们写一个库文件stack.dll,或者说一个程序集(java中包的概念):
using System;

namespace Acme.Collections
{
    
public class Stack
    {
        Entry top;
        
public void push(object data)
        {
            top 
= new Entry(top, data);
          

        }
        
public object pop()
        {
            
if (top == nullthrow new InvalidOperationException();
            
object result = top.data;
            top 
= top.next;
            
return result;

        }
        
public Stack()
        {
     

        }
        
class Entry
        {
            
public Entry next;
            
public object data;
            
public Entry(Entry next, object data)
            {
                
this.next = next;
                
this.data = data;
            }
        }
    }
}

    代码很明显,一个简单的栈结构,我们把Stack类放在命名空间Acme.Collections中。运行:csc /t:library stack.cs,在应用目录下生成一个stack.dll。我们怎么调用这个链接库呢?写个测试类:
using System;
using Acme.Collections;
public class Test
{
    
public static void Main()
    {
        Stack stack 
= new Stack();
        stack.push(
1);
        stack.push(
10);
        stack.push(
100);
                    
        Console.WriteLine(stack.pop());
        Console.WriteLine(stack.pop());
        Console.WriteLine(stack.pop());
    }
}

    很明显,只是把java的import换成了using,而且不需要通配符。编译test.cs:csc /r:stack.dll test.cs。
    C#和ruby将是我07年主要的学习计划,另外就是J2EE深入技术方面的掌握和理解,特别是模式、工作流和Portal方面。


posted @ 2007-02-09 10:38 dennis 阅读(705) | 评论 (0)编辑 收藏

一.几个概念:
1.我们把一件“事”称为案例(case),有时又叫做工作(work),职业(job),产品(Product),服务(service),项目(item)。案例总处于某个特定状态,该状态由三个元素组成:
(1)案例相关的属性
(2)已经满足的条件
(3)案例的内容
2.本质上case都是离散的,它们有自己独立的开始和结束,都能彼此区分,每一个case都在一个过程中被执行。(其实这里的case就是我们一般工作流中的所谓工作流实例)

3.过程:由许多要被执行的task(任务)和一系列决定任务执行次序的条件构成。过程定义了案例的生命周期

4.任务(task):是一个工作的逻辑单元,它能够作为一个整体被资源(resource)执行。任务可以被定义为不能再细分的过程,即原子过程,这里存在主观因素。在定义或者分派任务的人看来,任务是原子性的,但是对于执行它的人来说经常是非原子性。
5.资源(resource):是指能够执行特定任务的一个人、一台机器或一群人。
6.过程结构的四种基本机制,或者说案例的生命周期(称为路由):顺序(sequence),选择(selection),并行,循环。
7.活动(Activity):任务的具体执行(由资源所执行)称为活动。
8.过程的分类:
基本过程:企业中那些生产产品或者服务的过程,也称作生产过程。
二级过程:支持基本过程的过程,因此也被称为支持过程,比如财务管理、人力管理等。
三级过程:指导与协调基本和二级过程的管理过程。

9.工作流的启动(触发)有3类:
(1)资源驱动(人工,自动,半自动)
(2)外部事件,一个JMS消息?
(3)时间信号(定时事件)

二.组织结构
1.组织结构确立了如何把组织所需要完成的工作分配给员工,最重要的三种组织形式:
(1)层次结构,常见的、通过树结构来描述的组织图
(2)矩阵结构,在以项目为中心的公司中较为常见,比如软件公司,一个员工同时属于电信事业部和XXX现场项目组
(3)网状结构
2.有关工作流权限系统的设计,更多请见银狐999的文档《工作流系统组织模型应用和解决方案

三.过程管理
1.区分管理系统与被管理系统,管理系统将目标、前提和决策传达给被管理系统,被管理系统可以向管理系统回报,根据汇报,管理系统可以修正这些目标。
2.过程管理分为四个层次:
(1)Real-time,实时管理
(2)Operational 操作管理
(3)战术管理
(4)战略管理
从上往下影响的范围越广,持续时间越长。
3.业务过程信息系统的发展,历史表明,越来越多的通用任务已被从程序中分离出来并且放入分解的管理系统中:
(1)1965-1975年:分解应用。信息系统由分解的应用组成,每个应用都有自己的数据库和定义。
(2)1975-1985年:数据库管理——将数据管理从应用程序中抽离出来,不同的程序共享一个数据库,面向数据的开发方法产生
(3)1985-1995年:用户界面管理——将用户界面从应用程序中抽取出来。
(4)1995-2005:工作流管理——将业务过程从应用程序中抽取出来。工作流系统负责管理工作流并组织案例数据在不同的人员以及应用程序间进行流转。


posted @ 2007-02-08 19:13 dennis 阅读(2013) | 评论 (1)编辑 收藏

前天在CSDN上看到一个帖子很有感触:昨天我昏倒在家里。做这行,真有点用健康和青春卖命的味道。最近有点累,说不清为什么,一直在读工作流方面的资料,也总算搞清楚了osworkflow的运行原理。想动手写一个osworkflow的demo,刚开始一半,就提不起兴趣搞下去。没点压力,人也懒了。想回家过年了!-_-

posted @ 2007-02-07 14:38 dennis 阅读(248) | 评论 (0)编辑 收藏

项目要初验,完善文档基本没我什么事,正好有时间把blog搬家!-_-
第一次写blog在CSDN(killme2008),那时CSDN的blog系统刚出来,速度很惊人——慢的惊人,而且3天两头当机的玩意。不是我玩blog,是blog玩我。忍受了接近一年的时间,把家搬到了sohu(花非花)。在那也呆了4,5个月了吧,可毕竟不是技术blog圈,八卦新闻一大堆,而且似乎大伙都喜欢在blog上贴图,写上那么一段风花雪月的文字然后满世界打广告叫别人去看!-_-  我说你丫是写blog还是想出名啊!
blog对我的意义仅在于网上有个写东西的地方,写下自己每天的得失,写下某一件快乐的事情,写下几行也许以后用得着又怕忘记的代码......

搬家够累,懒的一篇一篇复制黏贴了,转了20篇就没兴趣了,就这样吧,开始俺的blogjava生涯,等下顺便把域名映射到这来,嘿嘿

posted @ 2007-02-06 14:27 dennis 阅读(273) | 评论 (0)编辑 收藏

 1.Global对象。这对象之所以特别就是因为它根本不存在!-_-。如果你声明
var pointer=Global;
报错,找不到此对象。这是因为在ECMAScript中,每个函数都某个对象的方法,我们用到的isNaN(),isFinite(),parseInt()和parseFloat()函数,看起来是独立的函数,其实它们都是Global对象的函数。
需要注意两个用于处理url编码的函数:

1)encodeURI()和decodeURI()  处理完整的uri
2)encodeURIComponent()和decodeURIComponent()     处理片段

2.其他对象如Array,Math,Date对象,我发现比较有趣的是Array的处理方式与ruby中Array的处理方式几乎一样。

3.ECMAScript对象的创建方式:
1)工厂方式:

function showColor(){
  alert(
this.color)
}

function createCar(sColor, iDoors, iMpg) {
    
var oTempCar = new Object;
    oTempCar.color 
= sColor;
    oTempCar.doors 
= iDoors;
    oTempCar.mpg 
= iMpg;
    oTempCar.showColor 
=showColor;
    
return oTempCar;
}


var oCar1 = createCar("red"423);
var oCar2 = createCar("blue"325);

这样的方式看起来很奇怪,好象方法showColor()不是对象的方法

2)构造函数方式:

function Car(sColor, iDoors, iMpg) {
    
this.color = sColor;
    
this.doors = iDoors;
    
this.mpg = iMpg;
    
this.showColor = function () {
        alert(
this.color)
    }
;
}


var oCar1 = new Car("red"423);
var oCar2 = new Car("blue"325);


这样的方式有个新问题,那就是每次构造一个对象都将重复生成函数showColor,为每个对象创建独立的函数版本。

3)原型方式

function Car() {
}


Car.prototype.color 
= "red";
Car.prototype.doors 
= 4;
Car.prototype.mpg 
= 23;
Car.prototype.drivers 
= new Array("Mike""Sue");
Car.prototype.showColor 
= function () {
    alert(
this.color);
}
;

var oCar1 = new Car();
var oCar2 = new Car();

oCar1.drivers.push(
"Matt");

alert(oCar1.drivers);    
//outputs "Mike,Sue,Matt"
alert(oCar2.drivers);    //outputs "Mike,Sue,Matt"


利用对象的prototype属性来构造对象,但是有两个问题:没办法使用构造函数传参来生成对象;函数虽然被不同对象共享,但是属性竟然也被共享,比如上面代码中,oCar1的drivers属性与oCar2的drivers属性是同一个Array对象。

4)为了解决上面问题,我们引入了构造函数/原型的混合方式:
function Car(sColor, iDoors, iMpg) {
    
this.color = sColor;
    
this.doors = iDoors;
    
this.mpg = iMpg;
    
this.drivers = new Array("Mike""Sue");
}


Car.prototype.showColor 
= function () {
    alert(
this.color);
}
;

var oCar1 = new Car("red"423);
var oCar2 = new Car("blue"325);

oCar1.drivers.push(
"Matt");

alert(oCar1.drivers);    
//outputs "Mike,Sue,Matt"
alert(oCar2.drivers);    //outputs "Mike,Sue"


属性通过构造函数方式,而函数则通过原型来生成,这就避免了纯粹原型方式带来的问题。但是函数放在对象的构造函数定义,让习惯java,c++的人也感觉不爽,对象为什么不能放在一块地方定义呢?这就引出来了动态原型方式

5)动态原型方式:
function Car(sColor, iDoors, iMpg) {
    
this.color = sColor;
    
this.doors = iDoors;
    
this.mpg = iMpg;
    
this.drivers = new Array("Mike""Sue");

    
if (typeof Car._initialized == "undefined"{

        Car.prototype.showColor 
= function () {
            alert(
this.color);
        }
;

        Car._initialized 
= true;
    }

}



var oCar1 = new Car("red"423);
var oCar2 = new Car("blue"325);

通过引入_initialized 属性,当第一次构造对象时生成方法showColor ,再次生成对象时,此时的_initialized 已经是true,就避免了重复生成函数,属性的定义和函数的定义都在构造函数内,也满足了语义上的对象封装概念。

我们应当尽量采用 构造函数/原型混合方式 动态原型方式 来创建ECMAScript对象。

posted @ 2007-02-06 14:05 dennis 阅读(551) | 评论 (0)编辑 收藏

 开始读《JAVASCRIPT高级程序设计》
第2章 ECMAScript基础

JavaScript实质上是ECMAScript在web环境中的实现,还有其他实现(如Flash的ActionScript等)。因此了解基本的ECMAScript相当于掌握javascript的基础。

1。ECMAScript的基础概念:
1)区分大小写
2)变量是弱类型(解释型语言的基本特点)
3)每行结尾的分号可有可无(与java不同)
4)注释的形式与java相同(单行或者块注释)
5)大括号代表代码块{}

2。变量,使用var定义。如var test="test1"
当然,变量是弱类型,并且可以不被初始化而定义
var test="test1"
var test2;
test=1;
建议采用匈牙利类型标记法来命名变量。

3.关键字和保留字(略)

4。原始值和引用值
与java类似,变量分成原始类型与引用类型两类:
1)原始值存储在stack中
2)引用值是存储在heap中的对象,存储在变量处的是一个point

5。原始类型:
1)ECMAScript有5种原始类型:Undefined、Null、Boolean、Number和String。可以使用typeof来判断一个值是否在某类型的范围内。如:
var s="test";
alert(
typeof s)  //输出"string"

注意:type null返回object,因为null被认为是对象的占位符。

2)Undefined类型
当变量未初始化时,该变量的默认值就是undefined。但是,undefined并不同于未定义的值。但是,typeof并不区分两者,比如:
var temp1;
alert(
typeof temp1);  //未初始化,输出undefined
alert(typeof temp2);   //未定义,也是undefined


函数无返回值,返回的也是undefined

3)Null类型
Null只有一个值,也就是null。Undefined本质上是从Null派生来的,因此两者相等:
alert(null==undefined);  //输出true
但两者意义不同,Undefined表示变量未被初始化之前的值,而Null则表示尚未存在的对象,也就是对象的占位符。

4)Boolean类型
Boolean有两个值:true,false

5)Number类型
Number类型很有趣,Number可以表示32位的数字,也可以表示64位的浮点数,以0开头的数字当成八进制,以ox开头即为十六进制。有趣的地方在于所有数字运算结果都是返回十进制!
在ECMAScript中,浮点数的计算本质上是存储的是字符串。
Number类型的大小在Number.MAX_VALUE和Number.MIN_VALUE之间
无穷大用Infinity表示,如你所见,Number.MAX_VALUE就是Infinity,而Number.MIN_VALUE就是-Infinity,可以通过isFinite(n)来判断n是否超过界限

最后,还有一个特殊值是NaN,表示Not a Number(非数),非数产生在类型转换失败时,注意,它与自身不相当:alert(NaN==NaN);  //输出false

不推荐使用NaN,我们可以通过isNaN()来判断是否是非数(很常用咯)

6) String类型
String是唯一没有固定大小的原始类型,可以存储0或者多个Unicode字符。与java不同的是,可以使用双引好和单引号来声明字符:
var s1="test1";
var s2='test2';
常见转义符与其他语言相同。

6。类型转换
1)转换成字符串:
Boolean,String和Number类型本质上都是伪对象,他们都有toString()方法(与java相同)

Number类型的toString()有两种模式:
toString(),返回数字的十进制
toString(n),返回n进制的字符串(n为2,8,10,16)

2)转换成数字:
两个方法:parseInt()和parseFloat()方法。用法略过,需要注意的是parseInt如果没指定基数,会把以0开始的解析为8进制。parseFloat反而不会。

3)强制类型转换:
3种强制类型转换:
String(value);
Boolean(value);
Number(value);
规则如下:
(1)String(value)与toString()基本一样,除了对null或者undefined的转换之外,如:
var s1=String(null); //通过
var oNull=null;
var s2=oNull.toString(); //报错

(2)Boolean(value),如果该value是空字符串、数字0、undefined或者null,返回false,其他返回true

(3)Number()与parseInt和parseFloat基本相同,不同的是Number()将转换整体,如果转换失败返回NaN。如:
Number(false)  ;//  0
Number(true);  //   1
Number(new Object());   //  NaN
Number('5.6.7');    //  NaN


7。引用类型:
1)Object类:类似于java中java.lang.Object的地位和作用,js中所有类都继承此类而来。它包含下面的属性:
(1)Constructor——对创建该对象函数的引用
(2)Prototype——对该对象对象原型的引用,对所有的类,它将返回一个Object实例
(3)HasOwnProperty(property)——判断是否有某个属性
(4)IsPropertOf(object)——判断该对象是否为另一个对象的原型
(5)PropertyIsEnumerable(property)——判断对象的属性是否可以枚举
(6)ToString()——返回对象的原始字符串表示
(7)ValueOf()——返回最适合该对象的原始值,对于许多类,它的结果与ToString()相同

2)Boolean类,尽量避免使用,注意的是,在Boolean表达式中,所有的值将被自动转化为true,所以下面的输出:
var oFalseObject=new Boolean(false);
alert(oFalseObject&&true);  //输出true,而不是false

3) Number类,是Number原始类型的引用类型,应该少使用此类,尽量使用原始类型。需要注意3个方法:
(1)toFixed():返回具有指定位数小数的字符串,如:
var oNumberObject=new Number(99);
alert(oNumberObject.toFixed(2));  // 输出99.00

 (2) toExponential(),返回用科学记数法表示的数字的字符串形式,如:
var oNumberObject=new Number(99);
alert(oNumberObject.toExponential(1));  //输出9.9e+1

(3)toPrecision(),对数进行舍入,返回尽可能接近真实值的数字,如:
var oNumberObject=new Number(99);
alert(oNumberObject.toPrecision(3));  //输出99.0
注意,这3个方法都将进行四舍五入操作

4)String类,是String原始类型的对象,常见方法见下面的例子:

var oStringObject=new String("hello world");
alert(oStringObject.length);  
//输出11
alert(oStringObject.toString()==oStringObject.valueOf());  //输出true
alert(oStringObject.charAt(1));   //输出e
alert(oStringObject.charCodeAt(1)); //输出e的字符代码:101
alert(oStringObject.concat(",china"));   //输出hello world,china
alert(oStringObject.indexOf("e"));   //输出1
alert(oStringObject.lastIndexOf("o"));  //输出7

var oStringObject1=new String("yellow");
var oStringObject2=new String("brick");
var iResult=oStringObject1.localeCompare(oStringObject2);  //根据本地比较
if(iResult>0){
  alert(
"oStringObject1在oStringObject2后面");
}
else if(iResult<0){
   alert(
"oStringObject1在oStringObject2前面");
}
else
   alert(
"oStringObject1和oStringObject2相同");
alert(oStringObject.substring(
3,7));  //输出"lo w"
alert(oStringObject.slice(3,7));  //输出"lo w"
alert(oStringObject.toUpperCase());
alert(oStringObject.toLowerCase());
alert(
"中国".toLocaleLowerCase());


8.操作符和语句,省略大部分操作符的介绍和控制语句,与其他语言(java,ruby)基本相同,需要注意的摘抄如下:
1)delete操作符:用于删除对以前定义的对象属性或者方法的引用,如:
var o=new Object();
o.name
="dennis";
alert(o.name); 
//输出dennis
delete o.name;   //解除引用
alert(o.name);  //输出undifined


2)for ... in语句,严格的枚举语句,用于枚举对象属性

3)switch可以作用于字符串,而不仅仅是整数

4)不支持重载(与ruby相同),可以通过arguments对象来变相实现

5)在ECMAScript中,函数其实是完整一个对象(与ruby相同,或者说动态语言的基本特点),可以采用:
var function_name=new Function(arg1,arg2,arg3,...,function_body);
来定义函数(速度比普通方法慢)。函数可以作为参数传递,函数的length属性返回此函数的参数个数
6)ECMAScript的闭包概念与其他动态语言的概念很不同,我还不大理解,过段时间好好研究一下。(写入备忘录)

posted @ 2007-02-06 14:03 dennis 阅读(423) | 评论 (0)编辑 收藏

     摘要: 最近一直在读《javascript高级程序设计》,也快读完了,读到事件这一章,书中提供的一个事件工具类很实用,我注释了一下,并摘记://eventutil.jsvar EventUtil = new Object;/**//*   此方法用来给特定对象添加事件,oTarget是指定对象,sEventType是事件类型,如click、keydown等,    fnHandler是事件回调函数/*Ev...  阅读全文

posted @ 2007-02-06 13:58 dennis 阅读(3059) | 评论 (1)编辑 收藏

FCKEditor是一个开源的,功能强大的富文本编辑器,在官方主页上有提供ASP,JSP,ASP.NET,PHP等版本,目前还没有rails的版本(可以设置,主要是要自己实现上传等功能),不过有一个plugin来实现此功能,有上传文件、拼写检查的功能。

1。首先到http://rubyforge.org/frs/?group_id=2038,下载0.3版本,解压缩后重命名文件夹为fckeditor,并放到你的应用的/vender/plugins下面,文件结构类似:

--rblog

    --vender

      --plugins

          --fckeditor

               --app

               --lib

               --public

               ...

2。然后在应用根目录下执行命令:rake fckeditor:install进行安装和设定。安装完成后就可以使用了,默认会在public下面新建一个uploads目录用来存放上传的文件。

3。使用方法:项目自带的readme写错的,下面是正确的做法。你首先要在页面引入js文件(当然也可以在layout中引入)

             <%= javascript_include_tag :fckeditor %>

(1)非AJAX方式:非常简单,首先你需要从你的action传来一个对象,如果没有你就会一直收到一个nil错误。假设为@artical=Artical.new,artical有一个content字段用来存储文章内容

然后在页面调用:

<%= fckeditor_textarea("artical", "content", :toolbarSet => 'Simple', :width => '100%', :height => '200px' )%>

如此一来,@artical.content将显示在fckeditor的编辑框内,我们这里为空

(2)AJAX方式调用:

<%= form_remote_tag :url => @options.merge(:controller => @scaffold_controller),
                    :before => fckeditor_before_js('note', 'text') %>

    <%= fckeditor_textarea( "artical", "content", :ajax => true ) %>

<%= end_form_tag %>

posted @ 2007-02-06 13:41 dennis 阅读(243) | 评论 (0)编辑 收藏

仅列出标题
共56页: First 上一页 48 49 50 51 52 53 54 55 56 下一页