Google

星期二, 四月 29, 2008

TRegExpr正则表达式

DELPHi中的REGEXPR
[ 2006-03-29 11:33:46 am | Author: Admin ]
其实这个Pascal单元我在几个论坛上面都推荐过,也是我唯一会用的DELPHI下面的正则表达式实现。
  正则表达式是个极其繁琐和强大的东西,小生才疏学浅,也不准备写正则表达式的教程,借着对这个单元的介绍,会有一些浅显且有用的例子。
  首先介绍的是这个单元的主角:TRegExpr类,这个类包括很多成员,这里仅简单的介绍一下一般匹配的过程。下面是一段在文本中提取邮件地址的代码:

Procedure GetName(TextToCheck:String;aList:TStringList);
Var
myExpr: TRegExpr;
begin
myExpr := TRegExpr.Create;
Try
myExpr.Expression := 'name="(.*?)"';
if myExpr.Exec(TextToCheck) then
repeat
aList.Add(myExpr.Match[1]);
until not MyExpr.ExecNext;
finally
myExpr.Free;
end;
end;

  下面对这段代码进行一点简要的说明.
  首先是myExpr.Expression := 'name="(.*?)"';这个语句用以匹配name="XXXXX"形式的字符串。
“.*?”是很常见的一段,表示对任意字符串的“非贪婪匹配”,代表符合匹配条件的最短字符串,关于贪婪非贪婪的问题,会在后面说明。
  括号表示对这段文字的引用,匹配中出现符合该模式的字符串将会存储在TRegExpr的Match数组中。
  接下来是if myExpr.Exec(TextToChceck)这一句,这一语句就是开始利用上文提到的正则表达式对TextToCheck进行匹配。Exec方法有三个重载:
function Exec (const AInputString : AnsiString) : boolean; //对AInputString参数进行匹配
function Exec : boolean; overload; //对InputString成员进行匹配
function Exec (AOffset: integer) : boolean; overload; //对InputString成员,从AOffset位置开始进行匹配
  该方法返回一个布尔型的值,如果为真,则表明InputString中包含表达式所匹配的模式,例如'Name="Hello.Gif"'作为参数,就会返回True。

  接下来的语句中出现的myExpr.Match[1],则用以取出本次匹配结果

  最后的ExecNext其实是使用了上面提到的第三个重载,用来对重复出现的字符串进行连续匹配,返回结果的含义同Exec相同

  接下来谈谈Match成员,其中Match[0]表示整个表达式的匹配结果,之后的数组元素则代表括号中的匹配结果,元素编号按照括号从左到右的顺序递增,嵌套括号则以从内向外的顺序递增。例如一个简单的对E-Mail地址的匹配:
Quotes From ???
输入字符串:'"dirt@sina.com","v@d2g.com"'
正则表达式:'"((.*?)@(.*?))",'
执行结果如下:
0 "dirt@sina.com",
1 dirt@sina.com
2 dirt
3 sina.com
  从中即可看出Match数组中的结果排列顺序。


  而上文中出现的.*?经常用于不很严谨的场合,例如前面用到的邮件地址提取,有人就写出几百字符的的验证表达式。其中“.”表示任意单个字符,“*” 表示前面的字符(串)至少出现一次,而'?'在这里就是非贪婪限定符,举一个简单的例子:"aaa""bbb",这样一个字符串,如果用'" (.*?)"'进行匹配,则Match[1]的内容就是'aaa',如果去掉了其中的'?',则Match[1]就变成了'aaa""bbb',这就可以 看出贪婪和非贪婪的区别。

  一个基本的匹配过程就到这里,有空会再继续写一些其他的相关内容,敬请丢砖

转自:http://www.delphibbs.com/keylife/iblog_show.asp?xid=13902
作者:coolbaby

TRegExpr是正则表达式在delphi中的一个很好的实现。
是一个单独的单元,使用时直接引用即可。还自带了几个sample。

对其中的SelfTest例子加了几行注释如下:
{ basic tests }

r := TRegExpr.Create;

r.Expression := '[A-Z]';
r.Exec ('234578923457823659GHJK38');
Check (0, 19, 1);
//?在此处表示让*处于非贪婪模式
r.Expression := '[A-Z]*?';
r.Exec ('234578923457823659ARTZU38');
Check (0, 1, 0);

r.Expression := '[A-Z]+';
r.Exec ('234578923457823659ARTZU38');
Check (0, 19, 5);
//和上面的+方式,功能一样
r.Expression := '[A-Z][A-Z]*';
r.Exec ('234578923457823659ARTZU38');
Check (0, 19, 5);
//?这里表示匹配[A-Z]0次或者一次
r.Expression := '[A-Z][A-Z]?';
r.Exec ('234578923457823659ARTZU38');
Check (0, 19, 2);
// \d代表数字,^代表非,总得来说就是一个或者多个非数字字符
r.Expression := '[^\d]+';
r.Exec ('234578923457823659ARTZU38');
Check (0, 19, 5);

半小时精通正则表达式
作者:Web应用网 来源:Web应用网

跟我学正则表达式!
想必很多人都对正则表达式都头疼.今天,我以我的认识,加上网上一些文章,希望用常人都可以理解的表达方式.来和大家分享学习经验.
开篇,还是得说说 ^ 和 $ 他们是分别用来匹配字符串的开始和结束,以下分别举例说明

"^The": 开头一定要有"The"字符串;
"of despair$": 结尾一定要有"of despair" 的字符串;

那么,
"^abc$": 就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配
"notice": 匹配包含notice的字符串

你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边
接着,说说 '*', '+',和 '?',
他们用来表示一个字符可以出现的次数或者顺序. 他们分别表示:
"zero or more"相当于{0,},
"one or more"相当于{1,},
"zero or one."相当于{0,1}, 这里是一些例子:

"ab*": 和ab{0,}同义,匹配以a开头,后面可以接0个或者N个b组成的字符串("a", "ab", "abbb", 等);
"ab+": 和ab{1,}同义,同上条一样,但最少要有一个b存在 ("ab", "abbb", 等.);
"ab?":和ab{0,1}同义,可以没有或者只有一个b;
"a?b+$": 匹配以一个或者0个a再加上一个以上的b结尾的字符串.
要点, '*', '+',和 '?'只管它前面那个字符.

你也可以在大括号里面限制字符出现的个数,比如

"ab{2}": 要求a后面一定要跟两个b(一个也不能少)("abb");
"ab{2,}": 要求a后面一定要有两个或者两个以上b(如"abb", "abbbb", 等.);
"ab{3,5}": 要求a后面可以有2-5个b("abbb", "abbbb", or "abbbbb").

现在我们把一定几个字符放到小括号里,比如:
"a(bc)*": 匹配 a 后面跟0个或者一个"bc";
"a(bc){1,5}": 一个到5个 "bc."

还有一个字符 '│', 相当于OR 操作:

"hi│hello": 匹配含有"hi" 或者 "hello" 的 字符串;
"(b│cd)ef": 匹配含有 "bef" 或者 "cdef"的字符串;
"(a│b)*c": 匹配含有这样多个(包括0个)a或b,后面跟一个c
的字符串;

一个点('.')可以代表所有的单一字符,不包括"\n"
如果,要匹配包括"\n"在内的所有单个字符,怎么办?
对了,用'[\n.]'这种模式.

"a.[0-9]": 一个a加一个字符再加一个0到9的数字
"^.{3}$": 三个任意字符结尾 .


中括号括住的内容只匹配一个单一的字符

"[ab]": 匹配单个的 a 或者 b ( 和 "a│b" 一样);
"[a-d]": 匹配'a' 到'd'的单个字符 (和"a│b│c│d" 还有 "[abcd]"效果一样); 一般我们都用[a-zA-Z]来指定字符为一个大小写英文
"^[a-zA-Z]": 匹配以大小写字母开头的字符串
"[0-9]%": 匹配含有 形如 x% 的字符串
",[a-zA-Z0-9]$": 匹配以逗号再加一个数字或字母结尾的字符串

你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用'^' 作为开头 "%[^a-zA-Z]%" 匹配含有两个百分号里面有一个非字母的字符串.
要点:^用在中括号开头的时候,就表示排除括号里的字符
为了PHP能够解释,你必须在这些字符面前后加'',并且将一些字符转义.
不要忘记在中括号里面的字符是这条规路的例外—在中括号里面, 所有的特殊字符,包括(''), 都将失去他们的特殊性质 "[*\+?{}.]"匹配含有这些字符的字符串.
还有,正如regx的手册告诉我们: "如果列表里含有 ']', 最好把它作为列表里的第一个字符(可能跟在'^'后面). 如果含有'-', 最好把它放在最前面或者最后面, or 或者一个范围的第二个结束点[a-d-0-9]中间的‘-’将有效.
看了上面的例子,你对{n,m}应该理解了吧.要注意的是,n和m都不能为负整数,而且n总是小于m. 这样,才能 最少匹配n次且最多匹配m次. 如"p{1,5}"将匹配 "pvpppppp"中的前五个p
下面说说以\开头的
\b 书上说他是用来匹配一个单词边界,就是...比如've\b',可以匹配love里的ve而不匹配very里有ve
\B 正好和上面的\b相反.例子我就不举了
.....突然想起来....可以到http://www.phpv.net/article.php/251 看看其它用\ 开头的语法

好,我们来做个应用:
如何构建一个模式来匹配 货币数量 的输入
构建一个匹配模式去检查输入的信息是否为一个表示money的数字。我们认为一个表示money的数量有四种方式: "10000.00" 和 "10,000.00",或者没有小数部分, "10000" and "10,000". 现在让我们开始构建这个匹配模式:
^[1-9][0-9]*$
这是所变量必须以非0的数字开头.但这也意味着 单一的 "0" 也不能通过测试. 以下是解决的方法:
^(0│[1-9][0-9]*)$
"只有0和不以0开头的数字与之匹配",我们也可以允许一个负号在数字之前:
^(0│-?[1-9][0-9]*)$
这就是: "0 或者 一个以0开头 且可能 有一个负号在前面的数字." 好了,现在让我们别那么严谨,允许以0开头.现在让我们放弃 负号 , 因为我们在表示钱币的时候并不需要用到. 我们现在指定 模式 用来匹配小数部分:
^[0-9]+(\.[0-9]+)?$
这暗示匹配的字符串必须最少以一个阿拉伯数字开头. 但是注意,在上面模式中 "10." 是不匹配的, 只有 "10" 和 "10.2" 才可以. (你知道为什么吗)
^[0-9]+(\.[0-9]{2})?$
我们上面指定小数点后面必须有两位小数.如果你认为这样太苛刻,你可以改成:
^[0-9]+(\.[0-9]{1,2})?$
这将允许小数点后面有一到两个字符. 现在我们加上用来增加可读性的逗号(每隔三位), 我们可以这样表示:
^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{1,2})?$
不要忘记 '+' 可以被 '*' 替代 如果你想允许空白字符串被输入话 (为什么?). 也不要忘记反斜杆 ’\’ 在php字符串中可能会出现错误 (很普遍的错误).
现在,我们已经可以确认字符串了, 我们现在把所有逗号都去掉 str_replace(",", "", $money) 然后在把类型看成 double然后我们就可以通过他做数学计算了.

再来一个:
构造检查email的正则表达式
在一个完整的email地址中有三个部分:
1. 用户名 (在 '@' 左边的一切),
2.'@',
3. 服务器名(就是剩下那部分).
用户名可以含有大小写字母阿拉伯数字,句号 ('.'), 减号('-'), and 下划线 ('_'). 服务器名字也是符合这个规则,当然下划线除外.
现在, 用户名的开始和结束都不能是句点. 服务器也是这样. 还有你不能有两个连续的句点他们之间至少存在一个字符,好现在我们来看一下怎么为用户名写一个匹配模式:
^[_a-zA-Z0-9-]+$
现在还不能允许句号的存在. 我们把它加上:
^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$
上面的意思就是说: "以至少一个规范字符(除了.)开头,后面跟着0个或者多个以点开始的字符串."
简单化一点, 我们可以用 eregi()取代 ereg().eregi()对大小写不敏感, 我们就不需要指定两个范围 "a-z" 和 "A-Z" – 只需要指定一个就可以了:
^[_a-z0-9-]+(\.[_a-z0-9-]+)*$
后面的服务器名字也是一样,但要去掉下划线:
^[a-z0-9-]+(\.[a-z0-9-]+)*$
好. 现在只需要用”@”把两部分连接:
^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$

这就是完整的email认证匹配模式了,只需要调用
eregi(‘^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$ ’,$eamil)
就可以得到是否为email了
正则表达式的其他用法
提取字符串
ereg() and eregi() 有一个特性是允许用户通过正则表达式去提取字符串的一部分(具体用法你可以阅读手册). 比如说,我们想从 path/URL 提取文件名 – 下面的代码就是你需要:
ereg("([^\\/]*)$", $pathOrUrl, $regs);
echo $regs[1];
高级的代换
ereg_replace() 和 eregi_replace()也是非常有用的: 假如我们想把所有的间隔负号都替换成逗号:
ereg_replace("[ \n\r\t]+", ",", trim($str));
最后,我把另一串检查EMAIL的正则表达式让看文章的你来分析一下.
"^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$"
如果能方便的读懂,那这篇文章的目的就达到了.

JScript 和 VBScript 正则表达式 的语法规则

一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

这里有一些可能会遇到的正则表达式示例:



JScript VBScript 匹配
/^\[ \t]*$/ "^\[ \t]*$" 匹配一个空白行。
/\d-\d/ "\d-\d" 验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。
/<(.*)>.*<\/>/ "<(.*)>.*<\/>" 匹配一个 HTML 标记。

下表是元字符及其在正则表达式上下文中的行为的一个完整列表:

字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\' 匹配 "\" 而 "\(" 则匹配 "("。
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 。
n 是一个非负整数。匹配确定的 n 次。例如,'o' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
n 是一个非负整数。至少匹配n 次。例如,'o' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o' 等价于 'o+'。'o' 则等价于 'o*'。
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o" 将匹配 "fooooood" 中的前三个 o。'o' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
? 当该字符紧跟在任何一个其他限制符 (*, +, ?, , , ) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 … 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。
(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern) 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
[xyz] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^xyz] 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\cx 匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
\W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。.
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)' 匹配两个连续的相同字符。
\n 标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
\nm 标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
\nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (©)。

2005-5-23 10:26:21 piao40993470 发表评论。
所有中文(不包括标点):
([\xB0-\xF7][\xA1-\xFE])+
所有GB2312-80编码
([\xA1-\xFE][\xA1-\xFE])+
所有中文空格
(\xA1\xA1)+

英文标点:[\x20-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]

2005-5-23 10:32:03 piao40993470 发表评论。
补充一下:
在delphi下使用TPerlRegEx也是不错的

http://hi.baidu.com/program8/blog/item/31800b0801b32030e824885f.html

标签: , , ,

星期一, 四月 28, 2008

什么是 Kohana? Kohana 与 CodeIgniter 的区别?

作者:沧蓝 / Fred Wu

Kohana 是一款基于 CodeIgniter 的 PHP5 框架,其与 CI 最大的区别便是 Kohana 完全采用 PHP5。

2007 年 6 月 1 日,CI 社区用户 Todd Wilson (Tido) 发布了 BlueFlame 1.0 的帖子。BlueFlame 1.0 正式发布,团队成员有九人,其中包括 Todd(原团队 lead developer)、现在 Kohana 的 lead developer、以及本人。该发布贴引起了 CI 社区用户的广泛关注。然而由于 BlueFlame 团队事前没有与 CodeIgniter 团队进行沟通,导致一些理解上的小插曲,包括 Rick (CI 的祖父)要求 BlueFlame 团队停止使用 CI 的社区资源来发布 BlueFlame 相关的信息,以及对 BlueFlame 源代码中的授权部分表示疑义。

最终通过 BlueFlame 与 CodeIgniter 团队的协调沟通,双方的小小误解很快便被解化。Rick 在此期间提到 BlueFlame 名称的潜在版权问题,于是 BlueFlame 几天后便正式更名为 Kohana,并注册了现在的官方网站:kohanaphp.com

在 BlueFlame 1.0 之后,Kohana 团队一直没有发布新的版本,之后整个项目一度处于僵化期。尽管如此,trac 上还是有更新进度。在 Todd Wilson “消失”了一阵子后,成员之一 Woody Gilk (Shadow Hand) 接下重任,担当团队 leader。

之后 Woody 联络本人,希望本人承担 Kohana 官方网站以及 logo 的设计制作。论坛上仍然可以找到当时我发的帖子(内有网站以及 logo 的草案)。可惜由于时间的因素,我最终没有将设计草案转化为 HTML。可喜的是,Geert De Deckere 之后设计了一个相当出色的方案,这也就是大家现在所见到的 Kohana 的官方网站。 :)

2007 年 11 月,经过了团队成员以及社区用户的努力,Kohana 终于发布了 2.0 版本。

下面我来翻译一下 Wikipedia 对于 Kohana 的介绍。

历史

Kohana 是基于 CodeIgniter PHP 框架开发的。

开发 Kohana 最主要的原因是 CI 对于 bug 的修复和处理用户提交的建议所需的时间过长。许多 bug 在用户报告后很久才会纳入到新版本中,甚至一些 bug 一直没有被纳入。另外,由于 EllisLab 是 CodeIgniter 唯一开发者,部分用户对于框架的开放性产生异议,他们希望框架可以更自由开放,从而使社区对框架的发展产生一定的影响。

Kohana 与 CodeIgniter 的区别


  • 严谨的 PHP5 面向对象编程。优势:可见性保护、自动类装载、超载、接口类、抽象类以及单件类。
  • 延续 CodeIgniter 的设计模式。CodeIgniter 的用户能迅速的理解 Kohana 的架构和设计模式。
  • 社区向,而非商业向。Kohana 是一款基于社区的作品。Kohana 的开发者们来自世界各地,有着各自的天赋。这使得开发速度得以提高,并在短时间内提供bug修复以及反馈用户提出的建议。
  • GET、POST、COOKIE 以及 SESSION 数组得到改进。Kohana 不对全局数据做读取限制,但依旧提供与 CodeIgniter 相同的数据过滤以及 XSS 防护。
  • 层叠式资源、模块以及类继承。控制器、数据模型、库、助手以及视图均能够在系统中的任何地方进行载入。程序的配置选项可被继承或覆盖。
  • 无命名空间的冲突。类均添加了如“_Controller”之类的后缀,从而使得用户的控制器和数据模型可被同时同地装载。
  • 真正的自动类装载。这包括库、控制器、数据模型以及助手。与 CodeIgniter 不同,Kohana 的自动装载是真正意义上的动态装载,而并非预先装载。
  • 助手为静态类,而非函数。例如,在 CI 中使用的 form_open(),在 Kohana 中为 form::open()。
  • 库驱动以及 API 的一致性。库能够使用不同的驱动来处理不同的外部 API。例如,session 的储存有数据库、cookie 和 native 几种,但它们均使用相同的接口。这使得库可以不断的添加新的驱动,但不会影响到 API 的一致性。
  • 强大的事件处理器。Kohana 的事件可被动态的添加、替换或删除。这使得用户能在 Kohana 执行的过程中动态做更改,而不影响原有的系统代码。


特性


  • 高安全性
  • 轻量级代码
  • 学习周期短
  • MVC 设计模式
  • 100% UTF-8 兼容
  • 松弛耦合架构
  • 易扩展性


技术


  • 严谨的 PHP5 面向对象编程
  • 用 SQL 助手实现简单的数据库抽象层
  • 多 session 驱动(native、数据库、cookie)
  • 动态事件处理器


==============================

最后更新:2007 年 12 月 03 日

http://codeigniter.org.cn/forums/thread-91-1-1.html

标签: , , , , , ,

Notes on Choosing a PHP Framework: A Quick Comparison of CodeIgniter and Kohana

When I was reading through my subscribed feeds I came across this post: Notes on Choosing a PHP Framework: A Comparison of CakePHP and the Zend Framework by Chad Kieffer.

Chad has done a great job comparing the two frameworks that he’s interested in. That inspired me to write something up for the frameworks that I prefer and use. :)

I began hunting for PHP frameworks ever since Ruby on Rails hit the street. Coincidentally one of the first PHP frameworks I played with was CakePHP. At that time CakePHP’s documentation was nearly non-existent so I had to seek for an alternative. I did a lot of searches, and researches, and finally I was happy to see CodeIgniter. Its user guide was what impressed me the most, I am sure many of the fellow CI users would agree with me on this one. Because of the excellent documentation, I was able to start working on projects right after I spent a few hours on the user guide! Developing apps on CI was such a breeze! Today, I develop web applications in CodeIgniter, Kohana and Zend Framework. If you want to find out how to use Zend Framework components with CI or Kohana, please read my previous blog entry: Using Zend Framework with CodeIgniter.

From version 1.2 when I first started coding on CI, to the newly released version 1.6.1 it sure is a long way. CodeIgniter has progressed well and gained many web developers’ trust, despite a few glitches. One of which was the spawn of the fork: Kohana.

CodeIgniter had some low periods where developers were all focused on pushing out new releases of ExpressionEngine, their commercial blogging/cms product. Some of the users on the CI forum got frustrated because their bug reports and feature requests were ignored. As a result of that, BlueFlame was born, and later renamed to Kohana.

Kohana is relatively unknown to the public. In fact, most of the Kohana users are ex-CI users or users that uses both CI and Kohana (like myself). According to the Kohana homepage and Wikipedia, the differences between Kohana and CodeIgniter are:

  1. Strict PHP5 OOP. Offers many benefits: visibility protection, automatic class loading, overloading, interfaces, abstracts, and singletons.
  2. Kohana has joined the GoPHP5 initiative. All releases from 2.2 on will conform with this project.
  3. Continues CodeIgniter design patterns. Anyone who has used CodeIgniter will quickly understand Kohana’s structure and design patterns.
  4. Community, not company, driven. Kohana is driven by community discussion, ideas, and code. Kohana developers are from all around the world, each with their own talents. This allows a rapid and flexible development cycle that can respond to bugs and requests within hours, instead of days or months.
  5. GET, POST, COOKIE, and SESSION arrays all work as expected. Kohana does not limit your access to global data, but offers the same filtering and XSS protection that CodeIgniter does.
  6. Cascading resources, modules, and inheritance. Controllers, models, libraries, helpers, and views can be loaded from any location within your system, application, or module paths. Configuration options are inherited and can by dynamically overwritten by each application.
  7. No namespace conflicts. Class suffixes, like _Controller, are used to prevent namespace conflicts. This allows a User’s controller and Users model to both be loaded at the same time.
  8. True auto-loading of classes. This includes libraries, controllers, models, and helpers. This is not pre-loading, but true dynamic loading of classes, as they are requested.
  9. Helpers are static classes, not functions. For example, instead of using form_open(), you would use form::open().
  10. Library drivers and API consistency. Libraries can use different “drivers” to handle different external APIs transparently. For example, multiple session storage options are available (database, cookie, and native), but the same interface is used for all of them. This allows new drivers to be developed for existing libraries, which keeps the API consistent and transparent.
  11. Powerful event handler. Kohana events can by dynamically added to, replaced, or even removed completely. This allows many changes to Kohana execution process, without modification to existing system code.

As you can see, whilst maintaining a certain level of similarity to CodeIgniter, Kohana does offer some advantages (at the same time, some disadvantages). Let’s take a look at a few quick comparisons. Grading scale: Limited <>

Feature Comparison of CodeIgniter and Kohana
Feature CodeIgniter 1.6.1 Kohana 2.1.1 Notes
License Apache/BSD-style new BSD Licenses are similar, although Kohana uses the new BSD license which is slightly more flexible than CI’s modified BSD license.
PHP compatibility 4.3.2+ and 5 5.1.3+ CodeIgniter supports PHP4 whilst Kohana is a stict PHP5 framework. If you are using PHP5 then Kohana offers more OOP and performance advantages. Start from version 2.2 (yet to be released), Kohana will only support PHP 5.2+.
Supported Databases MySQL (4.1+)
MySQLi
MS SQL
PostgreSQL
SQLite
Oracle
ODBC
MySQL
PostgreSQL
SQLite
CodeIgniter’s longer history ensures us a more widely available database support options than Kohana, although in the future Kohana is likely to support more databases too.
Community Forum
Wiki
Bug Tracker
Forum
Trac
IRC
CodeIgniter obviously has a much larger community and offers a wiki for community members to share tutorials and code snippets. Kohana on the other hand, has a smaller community, however the developers are actively online on the forum and IRC.
Documentation / User Guide Excellent Limited CodeIgniter is known for its excellent user guide. Kohana is in the process of improving its documentation.
Tutorial / Sample Availability Good Fair Tutorials are available on both of their forums. CodeIgniter has the advantage of having a wiki for easier navigation. Kohana on the other hand, has a dedicated tutorial page for some of the tutorials.
MVC Strict Strict Both frameworks use the same MVC approach.
Modular / HMVC Via 3rd party libraries Built in Kohana is built with HMVC in mind whilst CodeIgniter has some 3rd party libraries such as Matchbox and Modular HMVC to accomplish the same effect.
Conventions Flexible Flexible Unlike CakePHP, both of the frameworks offer flexible convensions. There are some defaults but most of them can be overwritten.
Configuration PHP files PHP files In my opinion Kohana is more configurable than CodeIgniter yet it is simpler (less clustered) to do so! Most of the Kohana configuration files are stored in the system folder, you only copy and paste the ones you actually need to modify, and modify them accordingly. CodeIgniter’s config files are all stored in the application folder.
Database Abstraction Modified ActiveRecord Modified ActiveRecord
ORM (optional)
Both frameworks use the modified ActiveRecord pattern. Kohana has an optional ORM module. CodeIgniter has some ORM and Rails-style ActiveRecord implementation avaliable via 3rd party libraries.
ACL Via 3rd party libraries Auth library (optional) Neither of the frameworks forces you to use a specific ACL mechanism. CodeIgniter does not have one built in, and Kohana has one available as an optional module.
Validation Good Good Both frameworks offer a good built in validtion layer. Kohana 2.2 is planned to have some significant improvements for the validation library.
Caching Limited Fair In my opinion both of the caching features are limited. Kohana offers a slightly more useful cache library that supports file, SQLite, APC, eAccelerator, memcache, and Xcache based caching, with tag support.
Session Good Excellent CodeIgniter 1.6 has improved its session library, but it’s still inferior to Kohana’s implementation. Kohana’s session library supports both encryption and storing session data in database.
Logging / Debugging Good Excellent Both frameworks offer very good logging and debugging mechanisms. Kohana is a little bit ahead thanks to PHP5’s native Exception class and its powerful event handlers.
Templating Native PHP Native PHP Templating is *very* easy for both frameworks. If you can skin Wordpress, then you’d have no problems at all skinning CI or Kohana. If you want though, you can still incorporate one of the 3rd party templating solutions such as Smarty.
Helpers Good Good Helpers are usually libraries that used for simple, repetitive tasks. Both frameworks offer a wide range of helpers for handling forms, URLs and dates, etc.
JavaScript / AJAX N/A N/A Both frameworks respect your choice of JavaScript / AJAX frameworks. Unlike CakePHP and Ruby on Rails, they don’t have built-in helpers for any of the JavaScript libraries. This offers more flexibility as well as the use of unobtrusive JavaScript.
Web Services Fair Fair I could be wrong but I don’t think either framework supports (or at least encourages) RESTful design…
Localization Limited Good CodeIgniter has limited i18n support whilst Kohana offers a bit more (timezone / full UTF8 layer, etc).
Unit Testing Limited None * CodeIgniter’s built in unit testing class is very limited. * Kohana as of version 2.1.1 does not have a unit testing class, however it is planned for version 2.2.

The Verdict

I had a hard time deciding which of these two I use. In the end, I chose to use both. Why? Because they each have its advantages and disadvantages.

CodeIgniter is great for small to medium sized projects, especially good for legacy servers which have PHP4 installed. The fantastic user guide made coding in CI very efficient.

Kohana is probably better for larger sized projects as well as projects that need more flexible extensions. PHP5 offers better (proper) OOP support as the foundation, plus Kohana’s several better feature implementation make it a strong competitor to its predecessor.

There is no right or wrong for which framework you use, everyone has its own taste. For me, CodeIgniter’s excellent documentation and Kohana’s strict PHP5 + easy to use are the primary reasons to choose them over say, CakePHP and Symfony. That said, CakePHP, Symfony and other frameworks are all excellent choices depending on your taste and experience. On one hand I envy the Ruby community because they obviously have the de facto framework to work with, on another hand, we have more options hey? :)

Feel free to share your opinion and experiences!

Update log:

[2008-02-23]
- Removed MS SQL support for Kohana (confirmed by Shadowhand)
- Updated cache driver description for Kohana (confirmed by Shadowhand)
- Edited unicode / UTF8 description for Kohana (confirmed by Shadowhand)

These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • DZone
  • Furl
  • Live
  • Reddit
  • Slashdot
  • Spurl
  • StumbleUpon
  • Technorati
  • YahooMyWeb

标签: , , ,

CodeIgnitor: Query String URL Enhancement

Hi everybody,

I had a problem described in my last post:
http://codeigniter.com/forums/viewthread/68197/

This problem forced me to use query strings and the url I had to parse was as follows:
http://www.mysite.com/index.php?c=mycontroller&m=processAuth&auth_token=3c562b119bd387ec194ade6bab9832c4

I enabled query strings in my config file:
$config[’enable_query_strings’] = TRUE;
$config[’controller_trigger’] = ‘c’;
$config[’function_trigger’] = ‘m’;

I still had issues getting to the auth_token value.

In the end I changed some code in the Router.php file and wanted to submit the code here in case anyone else finds it useful. It makes query strings act pretty much the same as the regular CodeIgniter URLs. For example, if you had a controller like:

class myClass extends Controller {
function myFunction ($myValue) {
}
}

Normally, you could call myFunction with a value using a CodeIgniter URL:

www.mySite.com/index.php/myClass/myFunction/123456

With the changes I made to router.php, you can now call it with:

www.mySite.com/index.php?c=myClass&m=myFunction&value=123456

The way the changed code is written now, you only need the “controller_trigger” key in the query string. The other keys do not matter. The values will go into the segment array in the order they show up in the query string.

There are a few improvements that could be made but what’s there now is a good start.

I can’t seem to attach the changed Router.php file (renaming or zipping didn’t seem to matter). But I only changed the _set_route_mapping() function commenting out the following code at the top:

/*
// Are query strings enabled in the config file?
// If so, we're done since segment based URIs are not used with query strings.
if ($this->config->item('enable_query_strings') === TRUE AND isset($_GET[$this->config->item('controller_trigger')]))
{
$this->set_class(trim($this->_filter_uri($_GET[$this->config->item('controller_trigger')])));

if (isset($_GET[$this->config->item('function_trigger')]))
{
$this->set_method(trim($this->_filter_uri($_GET[$this->config->item('function_trigger')])));
}

return;
}
*/

and adding the following code near the end of the function:

// check if query strings enabled
if ($this->config->item('enable_query_strings') === TRUE AND isset($_GET[$this->config->item('controller_trigger')]))
{
// at this point the uri_string is the query string
$keyValues = split('&', $this->uri_string);
foreach(
$keyValues as $keyValue) {
list($key, $value) = split('=', $keyValue, 2);

// just use the value and add in the order they come in
// at some point may want to utilize keys and ignore order

$value = trim($this->_filter_uri($value));

if (
$value != '')
$this->segments[] = $value;
}

}
else {

the code above goes just above:

// Explode the URI Segments. The individual segments will
// be stored in the $this->segments array.
foreach(explode("/", preg_replace("|/*(.+?)/*$|", "\\1", $this->uri_string)) as $val)
{
// Filter segments for security
$val = trim($this->_filter_uri($val));

if (
$val != '')
$this->segments[] = $val;
}

}
// do not forget this bracket

make sure to add the closing bracket

Hope someone finds it useful.

http://codeigniter.com/forums/viewthread/68698/

标签: ,

关于IE下实现min-height跟max-height的方法

comment_edit.pngmin-height最简单的方法是用表格来设计:

favorite.gif











comment_edit.png在此基础上增加 min-width 效果
(测试请改变 id=”wh” 层的 height 和 width 值)
favorite.gif











comment_edit.png而对于max-height的设计就要难多了!下面是采用js的方法达到的!
max-height 在 IE6.0 的实现的具体思想是想办法获得可变层的高,宽,样式中使用expression()得到外层的高,宽。代码如下:(测试请改变 id=”wh” 层的 height 和 width 值)
favorite.gif







comment_edit.png不过上面的这种方法采用js的expression,涉及js的计算,对cpu的有一定的占用,不宜采用!建议采用其它方法!(此地以后添加!)

http://www.evetian.cn/?p=22

标签: ,

星期六, 四月 26, 2008

SUN即将完成JAVA语言全部开源工作

SUN公司正在加紧推动JAVA在Linux平台下的完全开源工作,JAVA平台下的最后一些版权问题将在近期解决。  

  如果JAVA能做到完全开源,那么将更容易在Linux平台下进行包装分发。为配合这项行动,SUN正在与Linux厂商进行商谈,为OpenSUSE,Ubuntu以及Fedora提供一个新版的OpenJDK。  

  OpenJDK基于J2SE,开源工作始于2006年11月,其中的一些组成部分,例如加密库,图形库和一些SNMP管理代码仍然不能提供基于GNU通用许可协议的版本。这些组建占到了总平台的4%左右。  

  据SUN表示,“在过去的一年中,我们已经解决了大部分组件的版权问题,但是JAVA的声音引擎和SNMP代码部分仍然有大量的工作要做”预计全部开源可以在今年年内完成。  

  一旦基于Linux系统的JAVA可以百分百开源,那么Ubuntu及其他Linux系统就可以提供完全开源版的JAVA开发平台。对于Linux的开发者来说,现在正缺少一个开源版的JAVA平台。

http://linux.chinaunix.net/news/2008/04/25/995589.shtml

标签: , , , , , , , ,

我的家乡,红石

Google Earth中tdr拍摄的鸡冠砬子山

http://www.redstonelake.cn/

标签:

太贵了

本来想支持一下开源事业,在shopit上买点东西。预订了2件T-Shirt,1顶帽子,2套光盘,一共是54镑不到的样子,不过一看运费40多镑,UPS,太贵了吧。订单先取消了吧。等我有钱了再去支持一下吧。

标签:

Ubuntu 8.04的活动目录:Likewise

据Canonical公司的最新消息表明,Ubuntu 8.04 LTS的进展非常顺利,正式版将于两天后如期发布。这是长久期待的结束,同时,也是另一个时代的开始。
今天,我向大家介绍Ubuntu 8.04中独有的组件:Likewise。


—–
如果你还有印象的话,你应该还记得Ubuntu 8.04中,将新增一个组件,使得系统有能力与Microsoft活动目录相连接。
这个组件是:Likewise,不过默认情况下它未安装,需要的朋友可以在终端下自行安装,分别有CLI和GUI版本可以安装:
sudo apt-get install likewise-open likewise-open-gui
安装完成后,Ubuntu 8.04会启动Likewise-open的daemon,并加入系统启动daemon中(/etc/rc2.d)。
那么,如何加入一个Microsoft的域呢?也非常简单:
命令行方法
在终端下输入以下指令,其中your.domain替代为域的名称, username则是你的用户名
sudo domainjoin-cli join your.domain username
图形方法
在终端下输入sudo domainjoin-gui,然后就会跳出一个图形对话框,相信你知道怎么使用了:
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://pic.yupoo.com/tualatrix/38317570da08/0r38yvyl.jpg');}" onmousewheel="return imgzoom(this);" alt="" border="0">
由于本人并没有一个Microsoft的域可供测试,所以我只能向大家展示到这个步骤了。
据国外Ubuntu用户反应,通过Likewise,他的Ubuntu不仅得以非常方便地加入Microsoft的域,而且识别出了DFS文件系统。附加SMB的话,还能设定网络打印机。更棒的是,他已经有能力让Evolution使用Exchange邮箱了。参见:
Ubuntu 8.04 Active Directory Integration w/ Likewise Open
如果有朋友能进行更深一步的测试,请让大家知道更详尽的情况。
我们很高兴地见到Ubuntu不仅越来越易用,而且支持度越来越好,无论是软件,还是硬件方面。

http://linux.chinaunix.net/news/2008/04/23/994717.shtml

标签: ,

Ubuntu下安装Avast图形界面杀毒软件图文详解

最近咖啡的洗衣店进入了旺季,开始忙碌起来了,有很多资讯很想与大家分享,但是无耐的是没有时间,今天利用一些仅余的时间将咖啡认为还不错的防毒软件介绍给大家,希望能对大家有些帮助,现在就跟著咖啡一起来安装Avast antivirus for ubuntu。



AVAST 是一个著名防毒软体公司,Avast HomeEdition是家庭与非商业用途的版本,Avast Linux版本跟WINDOWS版本的內核是一样的,如果你是安装了包含windows多系统的使用者来说,这无疑的是个很好的防毒杀毒软件,虽然 Linux不太容易中毒,但是你可以在Linux系统下杀除windows下的每个一个有害的病毒,(如果你看完所有刚上档的电影,也听完一些流行歌曲, 真的闲著找不到事情可做时,不妨将Avast拿出来扫扫看你的电脑),Avast更值得一提的是,它是个免费的软件,你只需要到网站上去注册就 可以得到安装的序号,并可无限期的下载更新病毒码。安装方法:
1.首先你必须先上avast的网站免费注册,Avast会根据你注册时用的email寄发给你安装的序号,速度很快几乎注册完成就收到信件了。
注册的网址 选择中文语言网页
http://www.avast.com/cns/home-registration.php
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://www.ownlinux.cn/wp-content/uploads/2008/04/avast/image001.jpg');}" onmousewheel="return imgzoom(this);" alt="" border="0">
如果是你新注册的用户,选择第一项
接着填写注册所需的相关资讯,特别要注意的是邮箱必须要正确,否则你无法收到安装序号。
如果你完成了注册,那麽便可以开始下载软件,你可以直接到官方网站下载

下载网址:
http://www.avast.com/cns/programs.html
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://www.ownlinux.cn/wp-content/uploads/2008/04/avast/image002.jpg');}" onmousewheel="return imgzoom(this);" alt="" border="0">
安装

sudo dpkg -i avast4workstation_1.0.7-2_i386.deb
在应用程序里显示快捷图示
cd /usr/lib/avast4workstation/share/avast/desktop
sudo ./install-desktop-entries.sh install

screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://www.ownlinux.cn/wp-content/uploads/2008/04/avast/image003.jpg');}" onmousewheel="return imgzoom(this);" alt="" border="0">

第一次执行时,Avast会要求你输入安装序号,去收email 看看你许你的序号已经寄到了

在这里填入你的序号
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://www.ownlinux.cn/wp-content/uploads/2008/04/avast/image004.jpg');}" onmousewheel="return imgzoom(this);" alt="" border="0">

开启之后使用者介面如下图:
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://www.ownlinux.cn/wp-content/uploads/2008/04/avast/image005.jpg');}" onmousewheel="return imgzoom(this);" alt="" border="0">

第一个优先要处理的那就是更新到最新的病毒库
按下 Update Database
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://www.ownlinux.cn/wp-content/uploads/2008/04/avast/image006.jpg');}" onmousewheel="return imgzoom(this);" alt="" border="0">


接着你就可以设置需要扫瞄的区域,如果你是包含windows的双系统,你可以选择第三项Selected Folders ,并加入windows所属的区域,如咖啡会加入 /media:/hda1 (Windows 的C盘)
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://www.ownlinux.cn/wp-content/uploads/2008/04/avast/image007.jpg');}" onmousewheel="return imgzoom(this);" alt="" border="0">

其它的设置那就等着你去发觉了。

http://linux.chinaunix.net/news/2008/04/18/993117.shtml

标签: ,

22项Windows或Mac不能而Linux可以的事

1. Upgrade to the newest version legally and without paying money
1。合法升级到最新版本却不花一分钱
2. Have the latest version of the operating system run faster than the previous version on the same hardware
2。同一个硬件平台上最新的操作系统却比老的更快。

3. Easily install and run different graphical interfaces if I don't like the default setup
3。如果你不喜欢默认的桌面环境,可以非常容易的自行安装其他的界面。
4. Install twenty programs with one command
4。一个命令就可以安装二十个程序。 5. Have the system automatically update all my installed programs for me.
5。让系统自动为我所安装的软件更新。
6. Install the same copy of my OS (Ubuntu) on multiple computers without worrying about license restrictions or activation keys
6。可以在N台机器上安装同一份OS拷贝而无须担心协议限制或激活码。
7. Give away copies of the operating system and other programs that run on it without breaking any laws, governmental or ethical or moral, because it was all intended to be used this way
7。可以自由分发该操作系统及其他运行其上的软件而不会违犯法律,政治或伦理道德,因为他本身就提倡这么做的。
8. Have full control over my computer hardware and know that there are no secret back doors in my software, put there by malicious software companies or governments
8。完全控制我的电脑硬件,并可知晓我的软件中没有什么被政府或者某某公司蓄意安放的秘密后门。
9. Run without using a virus scanner, adware/spyware protection, and not reboot my computer for months, even when I do keep up with all of the latest security updates
9。可以裸奔(无杀毒软件,反广告/间谍防护软件),以及可以数月不用重启机器,我甚至一直在更新着安全补丁。
10. Run my computer without needing to defragment my hard drive, ever
10。从来不用磁盘碎片整理。
11. Try out software, decide I don't like it, uninstall it, and know that it didn't leave little bits of stuff in a registry that can build up and slow down my machine
11。尝试软件,觉得不喜欢,就删掉他,而且知道他不会在什么注册表里留下一些垃圾可能导致把我的系统搞慢。
12. Make a major mistake that requires a complete reinstallation and be able to do it in less than an hour, because I put all of my data on a separate partition from the operating system and program files
12。犯了重大错误而导致全新重装系统,也不过花去了1小时不到的时间,因为我把我的数据放在了独立于操作系统和程序的分区。
13. Boot into a desktop with flash and effects as cool as Windows Vista on a three year old computer...in less than 40 seconds, including the time it takes me to type my username and password to login
13。在一台3岁的老电脑上可以有如vista那样超酷的登录效果...少于40秒,这已经是将我输入用户名和密码并登录计算在内了。
14. Customize anything I want, legally, including my favorite programs. I can even track down the software developers to ask them questions, contribute ideas, and get involved in the actual design/software writing process if I want to
14。合法自定义任何我想要的东西,包括我最喜爱的程序。我甚至可以跟踪软件开发者并向他们问问题,提意见,如果我愿意的话,也可以参与到真正的软件设计和开发进程中去。
15. Have 4+ word processor windows open working on papers, listen to music, play with flashy desktop effects, have contact with a largely happy community and have firefox, instant messaging, and email clients all open at the same time, without ever having had to beg someone for a code to make my os work, and without the system running so slow it is useless
15。超过4个的文字处理窗口,听音乐,玩超酷的桌面效果,联系一个大型的社区,并同时运行着firefox,即时通讯以及email客户端,而不必求爷爷告奶奶的要什么令我的系统可以运作的代码,而不会把系统变慢。
16. Use the command "dpkg --get-selections > pkg.list" to make a full, detailed list of all software I have installed, backup my /etc and /home directories on a separate partition, and you are able to recover your system any time, easily
16。使用"dpkg --get-selections > pkg.list"命令来获得一个完整详尽的已装软件列表,备份我的/etc和/home文件夹到一个独立分区,然后你就可以随时恢复你的系统了,而且超简单。
17. Run multiple desktops simultaneously, or even allow multiple users to log in and use the computer simultaneously
17。同时运行多个桌面,甚至可以让多用户同时登录并使用该机器。
18. Resize a hard disk partition without having to delete it and without losing the data on it
18。无损调整分区大小而不用担心会丢失数据。(译者注:应该是LVM)
19. Use the same hardware for more than 5 years before it really needs to be replaced...I have some hardware that is nearly 10 years old, running Linux, and still useful
19。硬件可以使用超过五年而无须更换...我甚至有一些硬件都超过10年的历史了,还依然健在。
20. Browse the web while the OS is being installed!
20。可以在OS安装的同时浏览网页!
21. Use almost any hardware and have a driver for it included with the operating system...eliminating the need to scour the internet to find the hardware manufacturer's website to locate one
21。使用几乎所有的硬件,因为系统已经自带了驱动...而不必再去硬件供应商的主页上去苦苦搜寻。
22. Get the source code for almost anything, including the OS kernel and most of my applications
22。可以任意获得源代码,包括OS内核以及我的大多数应用程序。

http://linux.chinaunix.net/news/2008/04/25/995585.shtml

标签: , ,

xf86-video-intel 2.3.0正式发布

Intel可能是业界开发驱动最积极的硬件厂商之一了(另外一个是nVIDIA),作为最流行的集成显卡,Intel在Win/Lin两个平台均保持比较好的驱动质量。
Linux驱动方面,据上一个里程碑2.2.0至今已有半年了,Intel不断努力,现在又一个里程碑:2.3.0已经正式发布了。


xf86-video-intel2.3.0相对于2.2版本来说,不仅在稳定性和Bug修正方面有非常大的改善,最为重要的一点是,从这个版本开 始,Intel915/945的集成显示芯片已经支持了XvMC(X-Video Motion Compensation)。
什么是XvMC呢?在Mplayer中,我们就能看到Xv的身影,即X11/Xv视频驱动,现在Intel的显卡也支持了。
另外一点是,xf86-video-intel 2.3.0将正式包含在X.Org 7.4中。
详情可见:[ANNOUNCE] xf86-video-intel 2.3.0

http://linux.chinaunix.net/news/2008/04/24/995199.shtml

标签: , , ,

TD之父李世鹤:TD即将安乐死

被誉为“TD-SCDMA之父”的原大唐移动首席科学家李世鹤近日在一个业内会议上表示,TD-SCDMA(以下简称“TD”)安乐死即将成为现实,他呼吁相关部门尽快制订发展TD的明确计划。在近日举办的一个TD专家座谈会上,李世鹤说,“TD从4月1日起开始试商用放号,可是我一点都高兴不起来,我看到的是TD快死了,有人说要让TD安乐死,这个‘伟大的理想’即将实现。”

screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmousewheel="return imgzoom(this);" alt="" border="0">



  “TD即将安乐死”

  李世鹤说,他得出TD即将安乐死这一结论的原因有二:一是,世界上没有一个国家让一个通信网试验了又试验,如果技术问题解决了,“是骡子是马,到市场 上去检验”,让最终用户去评判,“靠试验网解决问题,世界上没有先例”;二是,到目前为止,相关部门关于TD依然没有明确的计划,“到底用不用(TD), 没有一个人站出来讲,哪一个运营商会用,不知道,(相关部门)跟所有人打哑谜”,这样的后果是,一些支持TD的厂家日子很难过,“有一家TD手机芯片公司 已经到了破产的边缘。

  李世鹤在发言结束时,动情的说,“我是一个罪人,把很多人骗上了3G”,“TD现在很危险,很可能一下子就全垮掉了,我呼吁大家尽快拿出决策出来,谁上、怎么上,拿出发展计划,拿出运营商计划,不应该走一步看一步。”

  除了李世鹤外,也有其他电信专家呼吁加快TD终端的采购。一位来自高校的电信专家建议运营商大规模集采TD手机,因此这样可以弥补目前TD手机终端匮 乏的现状;另外一位来自政府部门的专家则表示,他通过调研后发现,一些手机厂商在没有明确的需求信号时,对TD手机的生产处于观望状态,因此希望运营商加 大采购量。

  “TD目前的网络状况超过我的预想”

  在本次专家座谈会上,很多专家谈到目前TD的网络状况和GSM相差太远,出现了覆盖率低、接通率低、室内无法覆盖等问题,这些也是首批试用者抱怨比较多的一些问题。

  李世鹤说,“现在的网络状况,我有发言权,包括以前的试验网在内,我都不止一次到各地去实地考察,我到过几个城市,他们的网络状况超过了我的预想,目前基本可以用。”

  李世鹤拿GSM进行对比,“中国移动的GSM网络优化了10几年,TD网络优化才不到半年,当然不能要求现在的TD网络状况和GSM一样,GSM网络 刚建成时,接通率也只有20%-30%,当时的GSM不是试验网,已经是正式的商用网,所以目前的TD网络状况是正常的,而且比正常的还要好一些”。

  知名电信专家李进良也搬出了英国刚上3G时的用户反馈情况进行对比,得出的结论是,TD目前遇到的情况并不比英国3G开通时糟糕,因此,按照国际移动网络的运营经验,3年之后TD网络可以优化到相当好的状况。

http://bbs.chinaunix.net/thread-1084541-1-1.html

标签:

Ubuntu新版Linux免费下载血战Novell

Ubuntu Server 8.04将从本周四开始让用户免费下载。这将使Canonical的Ubuntu与Red Hat Enterprise和Novell平Suse Linux Enterprise更激烈地争夺企业市场。

Ubuntu Server 8.04的支持周期为5年。它能够在Sun的服务器上运行,其中包括Sun Fire X2100 M2、X2200 M2、Sun Fire X4150。Sun负责开放源代码软件业务的经理乔治表示,Ubuntu Server 8.04面向企业市场。

Canonical首席执行官马克表示,Ubuntu Server 8.04一直面临稳定性问题困扰,我们通过更多测试提高了其可靠性。他在接受采访时说,我们将每二年推出一个新的版本。

马克表示,Sun的认证包括1、2、4路x86服务器,Ubuntu没有针对4路以上的系统对Ubuntu Server 8.04进行优化。另外,Canonical还在与惠普、IBM、戴尔就认证问题进行接触。

Ubuntu 8.04中包含Windows整合功能。通过使用第三方厂商Likewise的Likewise Enterprise产品,Ubuntu

8.04能够使用微软活动目录用户身份管理系统的服务。马克说,与Windows网络的整合非常重要。

Ubuntu 8.04还整合有Open JDK,这意味着Ubuntu首次整合了Java虚拟机,能够运行Java应用程序。另外,它还包含有开放源代码版Alfresco内容管理软件、 Bacula网络备份软件、Parallels虚拟软件、Tresys安全软件、PHP、Zimbra电子邮件。

http://linux.chinaunix.net/news/2008/04/23/994703.shtml

标签: , , , ,

Ubuntu Linux 8.04 LTS

Ubuntu Linux是一份完整的桌面Linux操作系统,它可免费获得,并带有社团及专业的支持。最新的Ubuntu 8.04 LTS今天已经发布!它已成为为全球第三大Linux发行厂商。随着它的第四个服务器版本、第二个长期技术支持(LTS)版本的发布,Ubuntu有望得到更多企业用户的青睐。"进入ChinaUnix下载频道下载 安装指南
ubuntu-8.04-desktop-i386.iso ubuntu-8.04-server-i386.iso

虽然Ubuntu 8.04 LTS 正式版还没有发布,但现在已经可以预定.Ubuntu不愧是“Linux for Human Beings ”,除了操作系统本身越来越趋方便和人性化,另外自费为全世界Ubuntu用户提供光盘更是体现了这一信念.

申请Ubuntu 8.04 LTS 的地址还是跟以前一样:


访问https://shipit.ubuntu.com/ ,然后注册一下就可以申请了。

方便自己刻录或会硬盘安装的朋友就没有必要去申请了,毕竟Canonical公司每发送一张光盘成本还是蛮高的!大概要几十欧元吧?

标签: ,

a+b=c跟c=a+b为什么不一样? C新新手问题

弹头:我要把a和b相加,然后赋值给c, 为什么我写成a+b=c就编译出错,写c=a+b就没有问题?? 这2个式子不一样么??为啥呢?谢谢

blankyao : 等号是赋值运算,不能把值赋给a+b
只能把a+b赋给c

弹头 : 我写成a+b=c出错阿,我是linux下gcc

lenovo : 哥们,有c语言教科书吗?
没有去买一本。

弹头 :
书上就说c=a+b这种,可是没说为啥?为啥a+b=c这种不行呢?

motalelf :
哥们我看好你哦。

当年我初学C,也这么问过老师,可能老师忙着去泡妞了,也没给我解释明白。

结果我C考试时也就糊里糊涂,最后不及格。


弹头: 难道说就是语法规定,没有什么为什么,必须这么写??

flw : 编程语言中借鉴了很多数学符号/概念,
但是这些符号和数学课本上的符号/概念还是有很大区别的。

就拿 = 这个符号来说,数学上把它叫做“等号”,
但是 C 语言里,它不是“等号”,而是“赋值号”,
C 语言里的“等号”是 ==,也就是两个等号连起来这样子。
== 满足交换律,c == a+b 和 a+b == c 是同一个意思,
但是 = 不满足交换律,它是有方向的,它的方向,代表了赋值的方向,
也就是数据存取的方向。

c=a 的意思是把 a 的值取出来,存入 c,
a=c 的意思是把 c 的值取出来,存入 a,
它们俩的含义显然是不同的。
反应到你的例子中,
c=a+b 就是把 a 和 b 的值取出来,进行加法运算,然后把结果存入 c,但是 a+b=c 是什么意思呢?难道是把 c 的值取出来存入 a+b 吗?
因为 a+b 不是一个变量,因此无法往里面存入值,
因此 a+b=c 是错误的。

等你后来慢慢学的深入了,就知道 a+b 其实是一个右值(right value),不是左值(left value),
因此不能往它里面存入(store)任何数据,但是 c 就是一个左值(left value),可以往里面存入(store)和它的类型相匹配的值。

一言以蔽之,计算机是“工科”,数学是“理科”,学习时要注意区别对待。计算机是实践性很强的一门科学,它不是纯理论,因此学习理论知识时,应该结合电脑硬件的基本工作流程来学习。
http://bbs.chinaunix.net/thread-1085912-1-1.html
最后:>>> 哲学问题。因为在新手眼里看起来这两个都是等式,没有什么分别。

偶要在新语言里设计符号:->和<-。分别用于赋值。 a+b->c;
c<-a+b;
至于C里常用的指针还是用pascal的^.吧。

标签:

星期三, 四月 23, 2008

Yahoo YUI简介

Yahoo!用户界面库(Yahoo! User Interface Library, YUI)提供一些在开发Web胖客户端时常用到的一些工具和UI控件。工具:拖放(Drag and Drop)操作,连接管理器(XMLHttpRequest),页面特效,浏览器事件(例如鼠标点击和键盘按键)管理。UI控件:自动补全 (AutoComple)、日历(Calendar),容器(Container)类控件包括提示(Tooltip)、面板(Panel)、对话框 (Dialog)等、菜单(Menu)、TabView、TreeView,Logger。YUI 还包括了在创建简洁,灵活的布局并能够兼容多种浏览器时所需要的CSS资源。

http://developer.yahoo.com/yui/

标签: ,

怀念海子

从明天起,和每个亲人通信
告诉他们我的幸福
那幸福的闪电告诉我的
我将告诉每个人
——摘自 海子《面朝大海 春暖花开》

星期二, 四月 22, 2008

通过css对文字的第一个字进行处理

报纸或者杂志的排版中经常把第一个字母大小,或者进行一些出来。
通过css的我们也可以在网页中实现这种效果。

CSS2定义了首字首行(first-letter和first-line)的伪类,可以对元素的首字或首行设定不同的样式。
下面看这个例子,我们在段落标记里定义文本首字尺寸为默认大小的3倍:

……


这是一个段落,这个段落的首字被放大了。




我们再定义一个首行样式的例子:

……


这是段落的第一行
这是段落的第二行
这是段落的第三行




(上例中段落的第一行为红色,第二、三行为默认颜色)

注意:首字和首行的伪类需要IE5.5以上的版本支持。
http://www.iconfans.com/thread-357-1-1.html

标签:

AVAST杀毒软件

Avast是捷克一家软件公司(ALWIL Software)的产品。ALWIL软件公司的研发机构在捷克的首都-布拉格,现在他们和世界上许多国家的安全软件机构都有良好的合作关系。早在80年 代末ALWIL公司的安全软件已经获得良好的市场占有率,但当时仅限于捷克地区。
Avast已有17年的历史,它在国外市场一直处于领先地位。Avast!的实时监控功能十分强大,它拥有七大防护模块:网络防火墙防护、标准的本地文件 读取防护、网页防护、即时通讯软件防护、邮件收发防护、P2P软件防护。这么完善的防护系统,定能让你的系统练就一副金刚不坏之身!任意开启各项保护模块 能够查杀流氓软件。

ALMIL公司是擅长于安全软件方面的研发,开发的Avast Antivirus系列是他们的拳头产品,Avast在许多重要的市场和权威评奖中都取得了骄人的成绩,同样在此后进军国际市场上也赢得了良好的增长率。

它的家庭版是免费得,只要在它的网页上填写一下资料,但是邮箱一定要写正确,这样它才能把使用KEY发给你,这你也就可以享用它14个月了,然后再注册再使用。

Avast!的实时监控功能十分强大!它拥有七大防护模块:网络防火墙防护、标准的本地文件读取防护、网页防护、即时通讯软件防护、邮件收发防护、P2P 软件防护。这么完善的防护系统,定能让你的系统练就一副金刚不坏之身!任意开启各项保护模块能够查杀流氓软件,比如3721。升级很人性化。

主要特点:

(1)高侦测的反病毒表现,多次获得过ICSA和Virus Bulletin认证,启发式强大。

(2)较低的内存占用和直观,简洁的使用界面。

(3)支持SKIN更换,完善的程序内存检测

(4)对SMTP/POP3/IMAP邮件收发监控的全面保护。

(5)支持MS OUTLOOK外挂,智能型邮件帐号分析。

(6)支持宏病毒文档修复,修复档案后自动产生病毒还原数据库(VRDB功能)。

(7)支持P2P共享下载软件和即时通讯病毒检测,保护全面。

(8)良好有效的侦测并清除病毒,如虫,广告和木马程序

(9)病毒库更新速度快,对新型病毒和木马有迅捷的反应。

功能特性如下:

*反病毒内核

*自动升级

*简单的使用界面

*病毒隔离区

*实时监控

*系统结合

*P2P和聊天软件监控保护

*病毒清除

*网络防护

*64位系统支持

*网页防护

*多国语言支持(有中文版)

*增强型用户界面

*恶意脚本屏蔽 *DOS下扫描

*扩展病毒库升级 *移除病毒备份

占用内存不到25兆,让你老机器也流畅.

AVAST具有独特的VDRB。意思也就是在文件被感染之后能修复。不管什么软件,不过之前要创建VDRB。

其模块的自定义化可以让各位用户感到十分方便。

http://baike.baidu.com/view/286272.htm

标签: ,

99%互联网地图签生死薄 Google将被重点监管

“想去哪儿,不知道怎么走,上网一查便知!”如今,互联网地图的应用已经越来越广泛,众多互联网巨头都已经在涉足这一行业.然而,随着互联网地图产业的迅猛发展,数据错误、泄漏国家机密等问题地图也时有发生.
2008年3月25日,八部委发文联手整顿互联网地图,对互联网地图管理设立市场准入限制.4月16日,来自新闻出版总署内部独家消息显示,相关整顿文件已经摆上高层案头,具体开始整顿日期定在5月底前,如果不符合市场准入制规定一律叫停.

这意味着,对99%不符合规定的互联网地图来说,5月底将成为“生死抉择”的大限,这其中,包括 Google的互联网地图——Google Earth。

互联网地图异军突起

电子地图是一个庞大而笼统的概念。按照不同应用,可以细分为三个市场:导航市场、行业应用和互联网地图。其中互联网电子地图(以下简称互联网地图)是一个较新的应用。

目前,美国NAVTEQ公司占据了电子地图市场最大的份额。2000年,NAVTEQ通过其电子地图业务成为一家明星企业,它的收入主要来自汽车导航。6年后,以互联网为基础的电子地图业务的发展速度远远超过了汽车导航的速度,并在该公司的收入中占据越来越重要的位置。

国内互联网巨头也从中嗅到了巨大商机。2005年4月12日,搜狐宣布支付930万美元现金用于收购图行天下(Go2Map),随后,百度、新浪等网站也 争先恐后地推出了地图搜索服务。首家获得审图号的互联网地图服务厂商Mapbar还通过资源置换或者部分收费的模式为其它网站提供互联网地图服务,目前 Mapbar地图联盟吸引了包括百度、MSN、雅虎等2000多家网站的加盟。

至此,互联网地图形成了一条完整的产业链。位于产业链前端的是四维图新、高德、灵图等具有测绘资质的图商,它们生产制造出来的地图,可以通过合法途径卖给 那些地图网站及合作商;MapABC、Mapbar、51ditu等专业地图运营商则位于产业链的第二级;再往下的第三级则是一些搜索类网站和行业应用网 站,这些网站通过把位置信息与自己的搜索引擎或者自有内容进行整合后实现赢利。

种种迹象表明,中国的互联网地图行业正以惊人的速度发展。随着用户的不断增加,互联网地图市场也水涨船高。据中国网络经济研究中心发布的报告显示,中国地图信息服务市场规模到2008年将突破5亿元人民币,2010年则能突破15亿元。

99%的互联网地图违规

不过,由于互联网地图具有易复制的特点,导致众多中小网站甚至个人一拥而入利用互联网地图实现盈利,其后果是,不仅造成了市场的混乱,而且造成许多地图本 身的不规范。这些不具备地图制作资质的企业,使用的是免费的“拿来主义”地图,经过自身简单标注或者修改之后,便迅速推向市场,各种形态的地图服务也相继 衍生,但所提供的信息并不准确,由此引发了市场混乱、数据错误、国家机密泄露等严重问题,也给消费者带来很大的不便。

“互联网地图市场正以惊人的速度繁荣,但现行的法规对互联网地图管理没有明确规定,99%的互联网地图都存在违法违规问题。”国家测绘局副局长闵宜仁在今年3月25日的表态可谓“一语惊人”。

2007年,国家测绘局通过采用网上搜索和重点抽查的方式,检查出登载地图的互联网站8962个,互联网地理信息服务网站有595个,99%地图大多没有依法经过国家或省级测绘行政主管部门审核批准,存在违法违规行为。

由此,监管已迫在眉睫。国家对于地图市场的监督,其实早就已经开始。2006年8月1日起施行的《地图审核管理规定》规定,在正式出版、展示、登载、以及生产的地图产品上,必须载明审图号。

《意见》成互联网地图“生死薄”

今年2月25日,一份由国家测绘局、前信息产业部、外交部、公安部和新闻出版总署等八大部门联合发布的《关于加强互联网地图和地理信息服务网站监管的意见》(简称《意见》)出现在了国家测绘局的网站上。

《意见》规定,从事互联网地图编制活动,必须经国务院测绘行政主管部门审批,并取得相应的测绘资质证书。从事互联网地图出版活动,应经国务院新闻出版部门审批,并取得互联网出版许可证。外国的组织或者个人不得在我国境内从事互联网地图编制和出版活动。

《意见》引起了业界的各种激烈反应。“对于我们这样的正规图商来说,《意见》的出台是件好事。”Mapbar市场总监潘琳娜告诉记者,《意见》将成为正规图商的“保护伞”,从而改变市场竞争格局。

“拥有正规数据来源的厂商不超过10家,今后互联网地图必须公示出版号,那么没有资质的公司需要引用地图只能和正规图商合作。”潘琳娜表示,这样一来不仅规范了互联网地图产业,也提供了准入的门槛。目前,已经有11家企业获得了相关资质。

潘琳娜表示,与Mapbar合作的企业也不会受到影响,因为这些合作企业无需自建地图平台,只需从远程调用Mapbar.com,就能获取基础地图、黄页数据、公交换乘、驾车路径等基础地图服务资源。

不过,对于目前只是跟地图运营商通过一定合作模式来提供地图服务的网站来说,它们更多感受到的是“前景难测”。“《意见》中指出要坚决制止涉密地图、高精 度坐标成果及重要地形地物属性等通过网络扩散,但对地图上的兴趣点(PIO)信息审核方面没有做出严格规定。如果将来要审核POI信息,将以怎样的方式操 作,会不会泄露我们收集来的核心资源,这都是我们的忧虑。”一家网页网站负责人忧虑地说。

据记者了解,go2map、51ditu等厂商没有获得审图号,按照规定,他们不能发布电子地图、也不能将电子地图向其合作伙伴提供,他们将面临着“生死抉择”。

一些准备涉水互联网地图的网站,也开始止步不前。“规定将越来越严了,我们还是等等再看吧。”一家有意进军互联网地图的网站负责人表示,《意见》出台后,两家VC(风险投资商)暂停了对他们的投资意向。

Google Earth将受重点监管

根据《意见》,八部委近期将在全国展开专项整治活动。整治内容涉及“严格执行互联网地图和地理信息服务活动的市场准入制度”、“进一步加强对互联网地图和 地理信息服务网站的监管”以及“严肃查处互联网地图和地理信息服务违法违规行为”等6大意见。不过,怎样操作,如何管、如何查等具体实施步骤,仍然有待相 应规章制度的进一步完善。

对于业界的这些反应,国家测绘局成果司的有关人员表示,这都在意料之中,加强互联网地图监管将成为2008年测绘局的重要工作。

4月16日,来自新闻出版总署的内部消息显示,《意见》已经摆上高层案头,具体整治日期定在了5月底。确定这个时间段的原因是,“一是因为现在出于摸查阶段,二是给那些不符合规定的互联网地图一个自行整顿,寻得生存的机会。”

对于互联网用户而言,他们更为关注的却是信息开放最多的网站,比如Google Earth。此前,由于Google Earth在中国地图上犯下的多个严重错误,网民对此声讨激烈。比如在2007年2月初,Google Earth里面沈阳地名变成了日文,Google Earth中国区新闻发言人当时对此的表态是:标识是网友自行标注而来,Google没有审核。

根据记者了解,在Google Earth采用的3D地图定位技术下,用户们不但能够在3D地图上放大或缩小Google Map上的最新卫星图片,而且可以在Google Earth社区注册并发布自己标注的地图,与他人共享。Google Earth主要通过访问2004年收购的卫星图片公司Keyhole的航天和卫星图片扩展数据库来实现这些上述功能。

因此,在国内某知名图商负责人看来,今后像类似Google Earth这样的卫星地图也将受到监管约束。“目前国内对卫星地图是没有放开的,此次监管前与有关部门的沟通会上,我们也建议相关部门能够对卫星地图的监管明确下来。”

Google Earth在中国遭遇怎样的命运呢?“可以肯定的是,Google Earth也在监管之列,并且,是重点监管。”消息人士表示。

此前,Google Earth首席技术官Michael Jones表示,即使地图产品在中国受到严格的监管,Google Earth的地图数据也不会做出太多改动。不过,在“生死抉择”关头, Google Earth也不得不做出改变,来自Google的内部消息显示:Google目前正忙于制作一个针对中国用户的数据库。

电脑报观点:准入制洗牌互联网地图市场

在产业前景日渐清晰的时候,相关部门发牌,影响巨大,意义深远,而很多厂商却将政策看出了自己的生死薄,果真如此吗?

当然,对于哪些靠“拿来主义”的互联网地图运营企业来说,政策就是自己的生死薄,上面明确地写明了自己的死期。这类企业只有从跟本上解决地图的来源问题, 重建自己的运营系统才能起死回生。那些从来没有审图号的地图服务支持网站,其处境将更为糟糕,不得不重建自己的地图运营系统,另外寻找电子地图服务的来 源。

对于获取牌照的企业来说,政策的出台无疑是个利好消息,或许会将那些靠窃取为生的厂商拒之门外。

对于广大用户而言,政策法规制订出来之后,通过对所有网站进行严格监管,规范市场,将会对位置服务以及空间地理服务产业起到巨大的推动作用。

总的来说,互联网地图准入门槛的提高,会促使那些靠“拿来主义”的厂商选择新来源或者与正规厂商合作,给那些正规厂商提供了一个公平竞争的环境,对行业发展将起到很好的促进作用。
http://bbs.chinaunix.net/viewthread.php?tid=1084542

标签: ,

微软为抵御Linux蚕噬被迫延期XP销售

近日,微软再次宣布,针对低价电脑的Windows XP家庭版的销售截止日期推迟到2010年,比主流PC延长至少两年时间。

此举被业界认为是微软一次无奈妥协,由于去年底华硕的Eee PC打开了超低价电脑市场缺口,吸引众多PC厂商争相跟进,微软停止XP销售将令Linux有机可乘。

不过,令微软为难的是,延长XP的服役时间意味着强调推广Vista的计划受阻。

微软强制升级计划受阻

为了加快Vista的普及力度,此前微软曾计划将OEM厂商预装Windows XP系统的期限定为2008年1月31日,但由于Vista配置要求高、兼容性等问题,微软把XP的期限被延长到了2008年6月30日。虽然遭受OEM 厂商以及用户反对,且反对呼声日益高涨,但微软却一直充耳不闻。按照微软的如意算盘,强制OEM厂商采用Vista,将大大增大Vista的市场占有率, 挽回Vista受市场冷遇的尴尬局面。

正当微软意图凭其在桌面操作系统的垄断地再施故伎之际,PC市场却悄然发生了变化。自去年底华硕推出超低价便携式电脑以来,市场掀起一阵“超低价电脑旋风 ”,超低价电脑冻土市场突然被打开,各大厂商开始纷纷扎堆,包括联想、方正、惠普、 DELL、ACER、富士通、三星、技嘉、微星、海尔都抛出了超低价电脑计划。业内预计,未来四年,超低价便携电脑将井喷增长,2008年的发货量将突破 1000万台,而到2009年将达到2000万。

市场的风云突变令微软束手不及。由于面临微软停止XP销售风险,各大进军超低价便携式电脑市场的PC巨头纷纷转向Linux。而为了让数以千万的桌面系操不至于落入Linux手中,微软随即宣布针对超低价电脑的Windows XP家庭版的销售截止日期将推迟。

微软表示,至少在2010年6月前,英特尔的学生笔记本电脑和华硕的Eee PC都可以安装Windows XP家庭版,同时在新一代Windows系统发布之前,XP还将在市场上销售一年时间,这意味着该系统的销售期限可能延长至2011年或者更晚。

PC厂商不买微软帐

尽管微软主动抛出“橄榄枝”,但曾受尽微软Windows升级策略折磨的PC厂商似乎并不卖帐,在微软宣布面向超低价电脑延长家庭版XP后,早已做好放弃XP心理准备的PC厂商依然力推其预装Linux系统的超低价PC产品。

超低价电脑市场“领头羊”华硕就公开表示,Linux版本拥有华硕专为Eee PC制定的独特界面,消费者在Linux版本的易PC上不仅能够得到使用更方便的界面。倾向于Linux系操的还有惠普、微星等厂商,据了解,这些厂商率 系推出的低价电脑都是Linux操作系统。

除了微软摇摆不定的升级策略外,厂商在超低价电脑市场偏爱Linux,微软的 Windows系统软件许可费高昂也是另一重要因素。据透露,PC厂商购买一个家庭版的Windows XP系统需要为微软支付至少200元人民币,这对市场售价不到3000元的超低价电脑来说,显然难以承受。

据悉,即将在5月中上市的第二代Eee PC中,华硕分别推出采用Windows XP和Linux系统的产品,售价均为3499元,配置Linux操作系统的第二代Eee PC有20GB基于闪存的存储空间,但选择Windows XP配置的用户只有12GB固态硬盘存储空间。而此前,华硕最早推出的易PC的价格仅为2999元。

“很明显,选择采用Windows XP使超低价电脑拉高了成本,这将得超低价电脑失去与普通笔记本电脑的价格优势。”一位国产PC厂商产品经理说。

Vista推广再受打击

此次微软决定保留Windows XP,目的是为防止Linux系统侵袭到该平台,然而,这一举措又为微软带来了另一个问题:XP系统的再次延期退市,或会影响Vista的进一步市场拓展。

据了解,尽管在过去一年,微软不遗余力推广Vista,但到目前为止,大部分用户对于Vista的热情并不高,而调查显示,在广州,Vista的市场占有 率在不到20%。记者在一些国内PC厂商售后维修点了解到,用户电脑的软件问题都出自已安装Vista系统的电脑上,相当数量购买预装Vista电脑的用 户,都要求重装回XP。

为了尽快普及Vista系统,微软今年初称将增加营销费用,而从目前微软的强调升级计划受阻情况来看,微软的营销预算可能要增长不少。据悉,自2006年11月发布以来,微软已投入了约5亿美元的营销费用。

“微软的处境有点两难,一方面该公司希望尽快让用户远离XP普及Vista,而另一方面又不愿看到Linux侵占其市场。”一位分析师表示。

-言论

“Vista是半成品”

微软CEO承认上市一年半Vista仍问题多

在OEM厂商与用户的压力下,微软CEO史蒂夫·鲍尔默终于首次承认Windows Vista仍需改进。“Windows Vista仍是一项正在进展中的工作。”上周四,史蒂夫·鲍尔默的言论震惊业界。此前,很多用户在微软的广告宣传吹嘘下购买了Windows Vista。

“这是一个非常重要的产品。我认为,我们做了很多正确的事情,也有很多需要学习的东西。” 鲍尔默表示。目前,Vista存在很大争议性,比如性能提升、兼容性以等,还有用户抱怨Vista比XP占用的空间大得多。鲍尔默承认,Vista占用空 间确实比XP要大,“而我只能保证它不会变得更大”。

鲍尔默这番话无疑等于向已使用Windows Vista的用户泼了一盆冷头,特别是企业用户。对于这些企业用户来说,每一次系操和更新都是一项巨大工程,“如果连微软都说Vista还有很多需要改进 的地方,那基本可以把Vista看成是一枚炸弹,可以想象那是多么可怕”。一位企业信息管理人员说,”对于如此一个存在许多问题的操作系统,我不明白微软 为何要推销给用户。”

鲍尔默说出这番话的时候正值Windows Vista操作系统处于一个关键时刻。目前,微软正力劝企业和个人用户升级使用Vista。微软于2007年1月份推出Vista,并于上个月发布了首个 主要的Vista升级服务包,其中包括大量的漏洞修复和升级程序,用于修复过去一年Windows Vista在接受市场检验中暴露的问题。

Jupiter Research的分析师迈克尔·加腾伯格表示,鲍尔默用的“正在进展中”这一说法会使用户认为这项工作尚未完成,很难想象在微软力劝企业和个人用户升级使用Vista的关键时刻鲍尔默会说出这样的话。

-业界分析

在台式电脑领域

Linux将超过Vista

费雷斯特市场研究公司(Forrester Research)报告预测,在桌面市场领域Linux将对Windows构成更大的威胁,今年随着Linux在企业市场的普及应用,其市场份额将会迅速增长。

费雷斯特市场研究公司分析师本杰明·格雷(Benjamin Gray)称:“桌面管理人员将会使Windows操作系统平台继续标准化,Linux不会成为企业桌面的首选,因此何以动摇Vista在企业操作系统的 地位?然而客户对Linux桌面需求的增长则说明,其作用会更加突出。明年,随着分销商强化对企业市场Linux的销售,其市场份额一定会进一步增长。”

格雷预计,今年Vista系统将会在北美和欧洲四分之一的企业电脑里安装。届时,企业用户会从XP平台转移到Vista上。但目前,XP系统仍是企业桌面的主流选择。

据悉,该预测是基于对北美和欧洲企业的1001名硬件决策者的调查采访而得出。这其中有43%的受访者来自规模为1000人到4999人的大型企业,有 35%的来自规模为5000到19999人的大型企业,有22%的来自规模有2万员工的以上的超大型跨国企业。这其中有近一半的受访企业表示,他们已制定 了明确安装Vista系统的具体计划,有7%则表示将于今年底开始安装Vista。有 32%的企业表示明年年底才安装使用Vista,另有17%的计划于2009年或是更晚一些来安装。

但是该报告也指出,多数人认为Vista在企业的推广非常之缓慢,有数字表明,目前只占市场的2%。自VISTA推出以来,北美和全球2000强企业中只 有不到3%安装了该系统,而欧洲企业尚未开始安装。许多企业都在等待新的SP1版本推出。微软表示,SP1版本将于明年第一季度推出。

同时该报告还指出,现在已近有9成的企业用户正在使用Windows XP,与此同时有9%的用户依然在使用Windows 2000。格雷因此表示道:“Vista的成功在很大程度上取决于XP用户是否会升级到Vista。

http://linux.chinaunix.net/news/2008/04/22/994330.shtml

标签: , , ,

FreeBSD平台上的CrossOver Games

CodeWeavers前不久推出了基于Wine的CrossOver Games模拟器,要让Windows游戏运行在非Windows平台。现在CodeWeavers的CEO Jeremy White宣布发布一个针对PC-BSD用户的CrossOver Games试验版,它应该也能在FreeBSD或DesktopBSD下运行。FreeBSD版的CrossOver Games可在此下载(需要先注册)。要注意的是如果你使用的是FreeBSD 6.x,需要先为系统打上一个补丁,FreeBSD 7.0 或更高版本不需要。
http://linux.chinaunix.net/news/2008/04/22/994329.shtml

标签: ,

How to auto-activate "marker.openInfoWindowHtml(..)" in GEvent.addListener?

Hi there,

I am new here. I just put a bus line on google map with polyline.
Each station on this bus line has a marker. It can popout a info
window if the mouse is moved over with the follow code:

GEvent.addListener(marker, "mouseover", function()
{ marker.openInfoWindowHtml(" I am here! "); });

Instead of "mouseover" mechanism, If I use a moving marker to simulate
a bus moving from a station to another station, I want this
information window popout whenever the moving marker arrives at the
station marker (lantitude, longitude). Of course, the previous
information Window from the previous station should be closed.
http://groups.google.com/group/Google-Maps-API/browse_thread/thread/db3a5ff4bc555778

标签:

星期一, 四月 21, 2008

PHP生成GUID

php下生成guid要用到class .
guid.class.php文件代码如下:

Name = $_ENV["COMPUTERNAME"];
$address->IP = $_SERVER["SERVER_ADDR"];
return $address;
}
function toString()
{
return strtolower($this->Name.'/'.$this->IP);
}
}
class Random
{
function nextLong()
{
$tmp = rand(0,1)?'-':'';
return $tmp.rand(1000, 9999).rand(1000, 9999).rand(1000, 9999).rand(100, 999).rand(100, 999);
}
}
// 三段
// 一段是微秒 一段是地址 一段是随机数
class Guid
{
var $valueBeforeMD5;
var $valueAfterMD5;
function Guid()
{
$this->getGuid();
}
//
function getGuid()
{
$address = NetAddress::getLocalHost();
$this->valueBeforeMD5 = $address->toString().':'.System::currentTimeMillis().':'.Random::nextLong();
$this->valueAfterMD5 = md5($this->valueBeforeMD5);
}
function newGuid()
{
$Guid = new Guid();
return $Guid;
}
function toString()
{
$raw = strtoupper($this->valueAfterMD5);
return substr($raw,0,8).'-'.substr($raw,8,4).'-'.substr($raw,12,4).'-'.substr($raw,16,4).'-'.substr($raw,20);
}
}
?>

guid.php文件
toString();
?>

http://blog.csdn.net/leon_founder/archive/2006/08/01/1006654.aspx

标签:

Google Maps API,中国小城市的显示办法

将http://maps.google.com/maps?.....内的maps做如下替换
http://ditu.google.com/maps?....

不晓得这么简单的东西为什么还要这么转一下。

标签:

星期六, 四月 19, 2008

多年前的TIP,网站1变n

$site_matrix = array(
"$site1" => "$path1",
"$site2" => "$path2"
);

$def_pg = "$def_path";
$server = $_SERVER["HTTP_HOST"];
$pg = $site_matrix[$server];
if($pg == "") $pg = $def_pg;
header("Location: $pg");

这样你在一个虚拟主机上就可以同时使用两个域名了.

现在居然需要搜索。

标签:

七绝招让您成为买车的高手

买车时总喜欢带位老司机帮忙去看看,参谋参谋,提提意见,就怕买回辆有问题的车,那可就是后悔不及了。而如果没有这么一位老师傅当我们的购车军师,那我们就不用买了吗?那也不必急,我现在给各位介绍下《购车宝典》中的九大绝招,保证让你受益非浅,不过购车时带位懂车的老师傅还是明智的,毕竟经验比啥绝招都厉害,呵呵!

第一第一步:看车底盘和电瓶。

各位说了,新车有啥好看?错了,新车也有漏油的!趴下身看车低下有没有机油点,底盘有没有油污;新车电瓶没啥可多看的,只看接头有否腐蚀以及小窗是否绿色就行了。注意电瓶接头一般是松的,开走前一定要拧紧。

第二步:拉出机油尺看机油颜色。

有人又要说,不都是0公里吗?有什么好看?经销商坏着那,有些车跑了许多公里,但是里程表不接,还是十几公里,愣冒充是0公里!看的时候要着车三分钟后熄火,拉出油尺用纸巾擦拭,油黑的淘汰。

第三步:远听发动机声音。

这个只能凭感觉了。操作方法是,打着两辆车,你站在中间位置,离开两车距离相等,你感觉到声音大的淘汰(是明显大于别的车),可以转个身再听,以免你两耳听力不同出错觉。

第四步:细听发动机声音。

什么车只要第一次开都应该打开前盖,用个螺丝刀一端顶在发动机上,另一端顶在耳朵上听声音,算是积累经验吧。你越认真经销商越不敢马虎你。

这里要详细说明一下,这样你才能听见发动机内部的声音是否有杂音,比如环子声、敲缸声、气门的嘀嘀声等等。好发动机只有一种‘呼噜呼噜’声,不会有其他的杂音。不过这种方法要靠平时有意识进行的经验积累,一句两句说不清楚,总之就是多听些车好了。

罗嗦一句:有人能帮忙时,要他踩油门升发动机转速你再听声音。然后要他用块什么破布堵住排气口,假如发动机声音明显变沉并几秒钟就熄火,就是好车!否则就是什么地方漏气。

第五步:检查做工,要看各个线头联接情况,是否有晃动等等,这个各位都会自己看,不多说了。

第六步:看全车外观。

有人会说,你这时候才看外观啊?当然了,这不是挑二手车,外观要是有划痕,这车也不会停那里等你挑了,经销商一早就会处理,我要你看的外观是车门的缝隙是不是均等。另外,看外观时还要注意玻璃是不是原配的,玻璃下脚有标记,以免你精心挑选的结果是辆有过事故的车(这事不是没发生过)。

补充一点,很小的剐蹭J.S基本上能处理的天衣无缝,不非常仔细的观察是看不出来的,但事故中如伤及轮胎,只要J.S不换,就没法修补,所以应该将重点放在轮胎上,如有破损,该车立即不予考虑!

第七步: 这时候才是你进驾驶仓的时候,经销商都说,一看见上来就迫不及待进驾驶舱挑车的就知道是新手!最怕那种围着机器转了半天不进驾驶舱的。这里也没什么说的, 对着说明书检查各种按钮、开关是否都有效。灯光、音响、空调、座椅、安全带、电动窗等等的调整,要不厌其烦的一个一个测试。别听经销商的,他们总告诉你“ 放心吧,都是新车!什么问题没有!

要强调的是离合和刹车的挑选,由于现在许多经销商不允许试车,几乎无法挑选,只能凭感觉了:

1、冷车时:踩住离合挂各个档位,务必要求各档都很顺畅。

2、冷车时:踩住离合挂各档,然后松开离合要求能摘档。有的档位松了离合摘的很费劲,这就是车与车之间要对比的。

3、热车时(许多经销商不允许挑车时发动机热车挂档,不管他,坚持这么做!重复1的程序。

4,热车时不挂档,狠踩刹车,务必细心体会刹车踏板能踩下去的深浅变化!要求次次深浅相同,但是不能踩到触底,否则就是要调整了。

对于转向机,确实没办法了,经销商不让试车也不让原地打方向,我的车后来发现方向打死有皮带声,一保时维修调整过,不过据说奇瑞方向打死没声的极少,也就不在乎了。

好了,假如你真的照着这些步骤做了,基本上能保证你的车没什么大问题。挑车时要注意的就是眼到、耳到、手到!多看多听多摸就好。可别是心到哟,一上来就激动的不得了,总算有自己的车了的感觉,那可就坏了

http://club.auto.sohu.com/forum/thread-1259319-1-1.html

星期五, 四月 18, 2008

闲来没事整个电脑配置(2)


游戏编程2不误

装机配置

配置品牌型号数量以前的价格现在的价格商家
合计金额:10386元

标签:

证严法师静思语录(摘)

1、太阳光大、父母恩大、君子量大、小人气大。
2、口说好话、心想好意、身行好事。
3、原谅别人就是善待自己。
4、成功是优点的这挥,失败是缺点的累积。
5、不要小看自己,因为人有无限的可能。
6、手心向下是助人,手心向上是求人;助人快乐,求人痛苦。
7、多做多得,少做多失。
8、甘愿做,欢喜受。
9、心中常存知足、善解、感恩、包容。
10、做该做的事是智慧,做不该做的事是愚痴
11、脾气、嘴巴不好,心地再好也不能算是好人。
12、知识要用心体会,才能变成自己的智慧。
13、爱不是要求对方,而是要由自身的付出。
14、我们最大的敌人不是别人,可能是自己。
15、要比谁更爱谁,不要比谁更怕谁。
16、每天无所事事,是人生是消费者,积极,有用才是人生的创造者。
17、要用心,不要操心、烦心。
18、为自己找借口的人永远不会进步。
19、看别人不顺眼,是自己修养不够。
20、地上种了菜,就不易长草;心中有善,就不易生恶。
21、尽多少本分,就得多少本事。
22、屋宽不如心宽。
23、生气,就是拿别人的过错来惩罚自己。
24、吃苦了苦,苦尽甘来,享福了福,福尽悲来。
25、身外的环境,要天天整理,心地的风光,要常保清净。
26、真正的快乐,不是拥有的多,而是计较得少。
27、并非有钱就是快乐,问心无愧心最安。
28、要批评别人时,先想想自己是否完美无缺。
29、小事不做,大事难成。
30、人生最大的成就是从失败中站起来。
31、口说一句好话,如口吐莲花;口说一句坏话,如口吐毒蛇。
32、世上有两件事不能等:一、孝顺。二、行善。
33、道德是提升自我的明灯,不该是呵责别人的鞭子。
34、欣赏别人就是庄严自己。
35、时时好心就是时时好日。
36、得理要饶人,理直要气和。
37、受人滴水之恩,当须涌泉以报。
38、对父母要知恩、感恩、报恩。
39、用爱化碍;心中有爱、就不会有碍。
40、滴水成河,粒米成筐,勿轻己灵,勿以善小而不为。
41、唯有尊重自己的人,才更勇于缩小自己。
42、我们要做好社会的环保,也要做好内心的环保。
43、话多不好话少,话少不如话好。
44、一个人不怕错,就怕不改过,改过并不难。
45、人的心地是一畦田,田地没有播下好种子,也长不出好的果实。
46、有智慧才能分辩善恶邪正;能谦虚才能建立美满人生。
47、君子行事为目标,小人为目的。
48、人生不一定球球是好球,但是有经验的强打者,随时都可以挥棒。
49、人事的艰难与琢磨,就是一种考验。
50、做好事不能少我一人,做坏事不能多我一人。
51、真正的爱心,是照顾好自己的这颗心。
52、待人退一步,爱人宽一寸,就会活得很快乐。
53、能付出爱心就是福,能消除烦恼就是慧。
54、是非当教育,赞美作警惕。
55、人的眼睛长在前面,只看到别人的缺点,丝毫看不到自己的缺点。
56、闲人无乐趣,忙人无是非。
57、信心、毅力、勇气三者具备,则天下没有做不成的事。
58、改变自己是自救,影响别人的救人。
59、发脾气是短暂的发疯。
60、忘功不忘过,忘怨不忘恩。
61、有心就有福,有愿就有力,自造福田,自得福缘。
62、自己害自己,莫过于乱发脾气。
63、能善用时间的人,必能掌握自己的努力的方向。
64、犯了错应及时起忏悔心,才能清净无烦恼。
65、有多少力量就做多少事,不要心存等待,等待即会事久落空。
66、所谓“宗教”,“宗”是人生宗旨,“教”是生活的教育。
67、君子如水,随方就圆,无处不自在。
68、稻穗结得越饱满,越会往下垂,一个人越有成就,越要有谦冲的胸襟。
69、站在半路,比走到目标更辛苦。
71、不要随心所欲,要随心教育自己。
72、不好把阴影覆在心里,要散发光和热,生命才有意义。
73、虚空有尽,我愿无穹,发愿容易行愿难。
74、好事要提得起,是非要放得下,成就别人即是成就自己。
75、能干不干,不如苦干实干。
76、人要自爱,才能爱普天下的人。
77、为人处世要小心细心,但不要“小心眼”。
78、不怕事多,只怕多事。
79、人生没有所有权,只有使用权。
80、谎言像一朵盛开的鲜花,外表美丽,生命短暂。
81、一个缺口的杯子,换一个角度来看,它仍是圆的。
82、有愿放在心里,没有身体力行,正如耕田不播种,皆是空过因缘。
83、愿要大、志要坚、气要柔、心要细。
84、慈悲没有敌人,智慧不起烦恼。
85、布施如播种,以欢喜心滋润种子,才会发芽。
87、难行能行,难舍能舍,难为能为,才能升华自我的人格。
88、人要知福、惜福、再造福。
89、忏悔是心灵的告白,也可以说是精神污染的大扫除。
90、“福”要自己去造,不要去求
91、不怕一丈走不到,只怕寸步难移。
92、“福”要自己去造,不要去求人。
93、常常受到挫折,也要感谢天意的磨练。
94、人间的是非,要当作自我的教育。
95、与人相处,应能成人之美,涵养容人之德。
96、要以至诚的热心,去温暖人们心灵上的凄凉。
97、做任何事情都要专心,专心就是定。
98、有健全的家庭,才有好的社会,有好的社会才能有好的国家。
99、以慈悲喜舍之心,起救苦救难之行,与乐拔苦,缔造清新节净之慈济世界。
100、爱不要分种族,也不要分国家,只要是生命,都应该尊重,应该关怀。
101、佛心没有远近,人也愿望也没有大小,只要心诚意正,即可达到弘愿。
102、待人处事诚正信实,问心无愧,就可以皆大欢喜,身心自在。
103、学佛三心:真心、深心、大悲心。
104、以诚待人,以德服人,是最好的管理方式。
105、真正的妙法是由智慧流露出来,真正的慈悲是用智慧力量去推动。
106、有人说“心好就好”,但是徒有好心,如果不去化为行动,就不能成就好事。
107、世间没有一样很容易的事,没有逆境的事,不值得我们做为人生的登塔。
108、古德去:“佛在灵山莫远求,灵山只在汝心头,人人有个灵山塔,好向灵山塔下修”

人们常要求別人要对自己好,順自己的意;否则就埋怨、气愤,拿別人的错误来惩罚自己,这就是烦恼的来源。

常把「苦」挂在口中,终必苦不堪言;常说「幸福」,这股「願力」将带来源源不绝的欢喜心。

人生之美,美在心灵善良,美在用爱付出;用感恩心付出,打开心胸去爱,能帮助人的人最有福。

你不能决定生命的长度,但你可以控制它的宽度;你不能左右天气,但你可以改变心情,你不能改变容貌,但你可以展现笑容;你不能控制他人,但你可以掌握自己;你不能预知明天,但你可以利用今天;你不能样样顺利,但你可以事事尽力。

记住别人对我们的恩惠,洗去我们对别人的怨恨,在人生的旅途上才能自由翱翔。

以责任之心责己,以恕己之心恕人。

静中静非真静,动处静得来,才是性天之真境;乐处乐非真乐,苦中乐得来,才是心体之真机。

以善待人,以诚处世,以信为念,以明月为心,淡泊素雅,宁静致远。

有这样一个人,一想到他,只有笑,唯有乐,享有甜,他就是你可以执手一生给你幸福的人!

一切回归美好的时候却是生命到尽头的时候珍惜当下

打开心门,让阳光透进来,一定可以感受到温暖和光明。

时时与人结好缘,任何时候都要让人起欢喜心。

凡事善解才能欢喜自在,才能从人我是非中跳跃出来。

看淡脸色、看淡声音;耐得住被人磨的,则会象钻石一样发光。

想太多钻入牛角尖,将自我束缚;以简单心知足善解,将领略人间无处不美。

自在功夫,心即是佛;如来真意,明月当天。

知福才懂感恩,感恩才会付出。

要过很可爱的人生,就要自己先去爱人。

如果一个人没有苦难的感受,就不容易对他人给予同情。你要学救苦救难的精神,就得先受苦受难。

往事並非只能回忆,往事也可作为我们未来的龜鑑,尤其伟人的往事如明灯一般,不但见证着不朽的真理,更为我

们带来光明的希望。

人生三宝:腳走好路,手做好事,口说好话。

发上等愿,结中等缘,享下等福;择高处立,就平处坐,向宽处行。荣毅仁喜欢的名言

佛法无多子,长远心难得。学道如初心,作佛也有余,始终总不变,真是大丈夫。

拜佛容易敬心难,意不虔诚总是闲,五体虚悬空费力,骷髅磕破也徒然。

再大的官嫌小,再多的钱嫌少、再大的官没有朋友好,再多的钱没有身体好!

海纳百川,有容乃大,壁立千仞,无欲则刚。

http://shanlinvren2008.blog.sohu.com/78886010.html

标签:

闲来没事整个电脑配置


个人游戏(享受型)

装机配置

配置品牌型号数量以前的价格现在的价格商家
合计金额:10398元
这套电脑如何?

标签:

。。。。

困了,洗洗睡了。。。

标签:

无题

基本上靠声音吃饭的人的嘴都是歪的。。。。

标签:

Google Earth新版出炉 与微软争3D地图龙头(图)

4月17日国际报道 Google Earth有趣地方在于可像超人般的飞越虚拟地球上空,但我们毕竟是居住在地面的地球人,能从街道层次来观看也相当实用,就算是超人有时也得着陆吧。

此时出现了Google Earth 4.3,新版加入Google Maps的街景功能,提供部分地区的街景角度,并有全新的导览方式,这使得该软件变得更像第一人称的电玩游戏。

新版还可让用户观看日出或日落,你可从自己区域的角度,或整个地球角度来看;同时速度也加快了,并有更多逼真的3D图像。

Google目前极力与微软力争3D地图龙头地位。微软现在全力开发自家的Virtual Earth与Live Maps技术,上周也才刚做过重大更新。

  

http://news.csdn.net/n/20080417/115271.html

标签:

Oracle与SQL Server的“相对论”

本文的作者Sean McCown是一位资深的数据库工作者,在数据库行业摸爬滚打15年了。目前的工作是解答数据库相关的评论。以下是Sean McCown在解答评论过程中所感所悟。

  Sean McCown发表在博客中的内容如下:

  我实在对社区里的有些评论不敢苟同(有的评论的水平很差),更多的是希望快速回答,完成工作。

  我首先要说的是一件令我非常烦恼的事情。我已经在数据库行业摸爬滚打15年了。虽说不是对数据库的所有的知识都一清二楚,但是我对某些知识还是 数一数二的。因此,你们不要一而再,再而三的提醒我,“SQL”和“SQL Server”之间是有区别的。你想说的区别我已经略知一二了。诚然在网上post很长的文章的时候,最好还是能够让你的听众清楚的明白你在说什么。当我 谈到Oracle 和 SQL Server的时候,我应该可以将SQL Server简写为SQL,不用每次都写出它的全部拼写。如果有时候让你感到困惑,我对此深表歉意,但是以后你应该记住,很好的理解我所指的对象。很清楚,我不是在谈论SQL语言。甚至有一个家伙说过我应该写Microsoft SQL Server。这样诚然不错……但是,当我说到Oracle的时候,我也没有看到你们有谁感到迷惑。Oracle是一个公司的名字。他们生产了很多的产品。为什么没有人通过Email告诉我我应该称之为Oracle Database 11g呢?

  我想你们已经知道了我缩写所指吧,不用每次都写全称吧。好了,这就是我在进入正题前所要讲的,真是一吐为快啊。

  现在进入正题。你们当中有一些人给出了非常清楚、明晰、深思熟虑的评论。而其他人一些人没有说出实质性的内容,还进行漫骂。这也没有关系,我不会对后者做过多的关注。

  其中非常优秀的评论来自从事Oracle工作的人士。这就不奇怪他们写的评论很有深度。他们是一群非常聪明的群体,他们能够证明自己的观点正确,而不是漫骂。

  下面一幕是我又觉非常有意思的。如果我们在MS(微软公司的简称)平台上布置一项任务,我们就很有可能得到差不多的解决方案,这个现象得到了很 多人的同意,他们也是这么认为的。如果我们在Oracle平台上布置与MS(微软公司的简称)平台相同的任务的话,很难找到答案。并不是说这里没有该任务 的解决方案,只是不像MS平台下那么容易得到而已。

  也许有许多人认为这只是我的一家之言,因为他们在Oracle Database 9i/10g/11g上从来没有遇到寻求帮助的麻烦。也许我们都是对的。这取决于你的经历了。事实上,我身边有一群IT工作者,在自己的blog上post自己所遇到的麻烦,他们中大多数同意我的观点。这些人大多都是一些杂货店的数据库管理员。

  但是,我想要声明的是虽然有许多人不承认Oracle数据库学习资源很难找到,但是事实上就是如此,MS学习资源就是更加容易获得。

  有人或许就要问我,为什么我不去OTN(Oracle 技术网)那里呆着。事实上,我就在那里,但是,伙计,你要知道的是,我已经厌倦了坐在电脑前面,要挑选如此多的网页找到需要回答的问题。如果坐下来观看视 频的话,岂不是一件愉快的事情。我个人觉得视频资源更好。因此我喜欢视频培训。但是问题来了,几乎没有提供商来做Oracle新产品(Oracle Database 9i/10g/11g)的视频培训。事实上,到目前为止,我还不知道有任何的公司在做Oracle培训。

  拿AppDev举例子来说。他们有非常棒的培训,但是他们只是做MS公司的产品。甚至其它做视频培训的提供商对Oracle也择道而行。这是什 么原因了?这就是我一开始讨论的关键所在。难道是没有人用Oracle?我们知道这肯定是不正确的。难道是Oracle数据库管理员天生就知道 Oracle所有的知识?当让也不是。难道是由于Oracle社区的存在使得培训提供商选择离开Oracle这个产品?事实上Oracle也没有生产出比 提供商更好的培训教程。

  难道主要原因是Oracle大多用在Unix/Linux操作系统上, 因此Oracle的技术人员更加喜欢读文档而不是观看视频?这对吗?这些Oracle的技术人员都是用的命令行操作,因此不能忍受使用图形界面的软件,即 使是学习这样的事情?的确,这已经成为一种习惯,或者说是一种氛围。这个发现是从Oracle社区里找到的。另外,你所需要的相关信息在Oracle社区 里并不是没有,而是不容易发现而已。

  就拿这次我安装Data Guard的经历来说,我需要OBE(oracle示例系列)。问题是那些OBE(oracle示例系列)是在Linux环 境下使用的,而我需要的是在Windows下使用的。官方网站上的一些链接并不是跳转的很合理,如果有微小的错误存在,更本就不会有任何提示让你后退到原 来的路径。另外,有一些阅读信息必须严格执行,而一些则就很随便了,OBE(oracle示例系列)并没有给你任何引导,那种OBE(oracle示例系 列)对应哪个平台。最后,我好不容易找到了一个是适合Windows的。但是,并不是很好。因此,你也不要问我如何完成OBE(oracle示例系列)。 回过头来,该想想为什么没有对Oracle培训的一种需求,形式内容更加丰富的需求呢?

  仍然还有一些人说我很愚蠢,因为Oracle比SQL更加容易做技术支持。

  在这里我也不想找更多的例子了。只需要比较如何备份Oracle和备份SQL就知道谁的资料好找。

  另外我还要给出管理表空间(tablespace) 的例子,说到这里,肯定有人说管理表空间(tablespace)太easy了,因为他们一直就是在干这种事情,一条简单的命令就ok了。是的,对这些人 来说很简单,正好证明了我说的观点:孰能生巧。在SQL数据库中,我不用去管理表空间(tablespace)(或者文件组filegroups),因为 它们是自动增长的。唯一一次我需要管理文件组filegroups是由于我设定了增长范围,而后来增长溢出了,或者我磁盘空间不够了。在Oracle中, 如果我将块大小(Block Size)设置错误的话,那么结果就只能变得很大,我必须去管理它,因为那些表格将会比我想象的还要大。现在在11g有一个bigfile参数,最近才有的。

  数据库平台已经很明显在人们心目中形成了各自的印象,不管MS采取什么样的措施,他们不会改变些那些觉得MS是三流产品的人的看法。这已经是一 个事实了。至于说那个更好,就主要取决于你拿他们做什么了。我发现SQL更加容易组织,运行和构建应用程序。对于普通人来说,Oracle太复杂了,不但 是看看一本书,一个CD就能上手的。

  但是,但你看Oracle的 Data Guard时,它就比SQL反射法要先进很多了。

  好了,已经写了足够多了。至少我觉得是很多了。需要声明的是,我并不是说Oracle平台的坏话。但是,对于用户来说,它的确不太容易掌握。

http://news.csdn.net/n/20080417/115263.html

标签: ,

星期四, 四月 17, 2008

今天

今天生日,过得还算开心。

有很多人关心我,我关心很多人。

计划周末出游,放松一下,好好整理整理心情吧。。。。

标签:

SQLSERVER数据库全文索引示例

一个完整的SQL SERVER数据库全文索引示例。(以pubs数据库为例)

一、首先,介绍利用系统存储过程创建全文索引的具体步骤:
1) 启动数据库的全文处理功能 (sp_fulltext_database)
2) 建立全文目录 (sp_fulltext_catalog)
3) 在全文目录中注册需要全文索引的表 (sp_fulltext_table)
4) 指出表中需要全文索引的列名 (sp_fulltext_column)
5) 为表创建全文索引 (sp_fulltext_table)
6) 填充全文目录 (sp_fulltext_catalog)

二、示例,以对pubs数据库的title和notes列建立全文索引,之后使用索引查询title列或notes列中包含有datebase 或computer字符串的图书名称:
在这之前,需要安装Microsoft Search服务,启动SQL server全文搜索服务

user pubs --打开数据库
go
--检查数据库pubs是否支持全文索引,如果不支持则使用sp_fulltext_database 打开该功能
if(select databaseproperty('pubs','isfulltextenabled'))=0
execute sp_fulltext_database 'enable'

--建立全文目录FT_PUBS
execute sp_fulltext_catalog 'FT_pubs','create'

--为title表建立全文索引数据元
execute sp_fulltext_table 'title','create','FT_pubs','UPKCL_titleidind'

--设置全文索引列名
execute sp_fulltext_column 'title','title','add'
execute sp_fulltext_column 'title','notes','add'

--建立全文索引,activate,是激活表的全文检索能力,也就是在全文目录中注册该表
execute sp_fulltext_table 'title','activate'

--填充全文索引目录
execute sp_fulltext_catalog 'FT_pubs','start_full'
go

--检查全文目录填充情况
While fulltextcatalogproperty('FT_pubs','populateStatus') <>0
begin
--如果全文目录正处于填充状态,则等待30秒后再检测一次
waitfor delay '0:0:30'
end

三、全文目录填充完成后,即可使用全文目录检索

select * from title
where CONTAINS(title,'database')
or CONTAINS(title,'computer')
or CONTAINS(notes,'database')
or CONTAINS(notes,'database')


四、以下介绍一下全文操作类的系统存储过程

过程名称:sp_fulltext_service
执行权限:serveradmin或系统管理员
作 用:设置全文搜索属性

过程名称:sp_fulltext_catalog
执行权限:db_owner及更高角色成员
作 用:创建和删除一个全文目录,启动或停止一个全文目录的索引操作

过程名称:sp_fulltext_database
执行权限:db_owner角色成员
作 用:初始化全文索引或删除数据库中所有全文目录

过程名称:sp_fulltext_table
执行权限:db_ddladnmin或db_owner角色成员
作 用:将一个表标识为全文索引表或非全文索引表

过程名称:sp_fulltext_column
执行权限:db_ddladnmin角色成员
作 用:指出一个全文索引表中的那些列假如或退出全文索引

http://blog.chinaunix.net/u/10889/showart.php?id=529099

标签: ,

无题

夏来春去谢黄花
天涯何处是我家
有心欲寻凌荷雨
伴我长醉是清茶

感谢你。。。

标签:

生日

今天老欧35了,已经上了奔4快车了。

用一些证严法师的话提醒一下自己吧:

屋宽不如心宽

生气,就是拿别人的过失惩罚自己

尽多少本份,就得有多少本事

一个人的快乐,不在于他拥有多少,而在于他计较多少

看别人不顺眼,是自己修养不够

~~~~还有很多,有空再补充吧。。。。

标签:

About Project Zero

Project Zero began life as an incubator project to explore a new idea that we believed had promise. That idea was of a development and runtime environment that could revolutionize creation of dynamic web applications -- providing a powerful development and execution platform for modern Web applications while at the same time having the overall experience of being radically simple. We started this incubator because we wanted to address the complexities of modern Web applications without the chains of previous architectures, technologies, or decisions.

http://www.projectzero.org/

标签: ,

Format的用法

Format是一个很常用,却又似乎很烦的方法,本人试图对这个方法的帮助进行一些翻译
,让它有一个完整的概貌,以供大家查询之用:

首先看它的声明:
function Format(const Format: string; const Args: array of const): string; overload;
事实上Format方法有两个种形式,另外一种是三个参数的,主要区别在于它是线程安全的,
但并不多用,所以这里只对第一个介绍:

function Format(const Format: string; const Args: array of const): string; overload;
Format参数是一个格式字符串,用于格式化Args里面的值的。Args又是什么呢,
它是一个变体数组,即它里面可以有多个参数,而且每个参数可以不同。
如以下例子:
Format('my name is %6s',['wind']);
返回后就是
my name is wind

现在来看Format参数的详细情况:
Format里面可以写普通的字符串,比如'my name is'
但有些格式指令字符具有特殊意义,比如"%6s"

格式指令具有以下的形式:
"%" [index ":"] ["-"] [width] ["." prec] type
它是以"%"开始,而以type结束,type表示一个具体的类型。中间是用来
格式化type类型的指令字符,是可选的。

先来看看type,type可以是以下字符:
d 十制数,表示一个整型值
u 和d一样是整型值,但它是无符号的,而如果它对应的值是负的,则返回时
是一个2的32次方减去这个绝对值的数
如:Format('this is %u',[-2]);
返回的是:this is 4294967294
f 对应浮点数
e 科学表示法,对应整型数和浮点数,
比如Format('this is %e',[-2.22]);
返回的是:this is -2.22000000000000E+000
等一下再说明如果将数的精度缩小
g 这个只能对应浮点型,且它会将值中多余的数去掉
比如Format('this is %g',[02.200]);
返回的是:this is 2.2
n 只能对应浮点型,将值转化为号码的形式。看一个例子就明白了
Format('this is %n',[4552.2176]);
返回的是this is 4,552.22
注意有两点,一是只表示到小数后两位,等一下说怎么消除这种情况
二是,即使小数没有被截断,它也不会也像整数部分一样有逗号来分开的
m 钱币类型,但关于货币类型有更好的格式化方法,这里只是简单的格式化
另外它只对应于浮点值
Format('this is %m',[9552.21]);
返回:this is ¥9,552.21
p 对应于指针类型,返回的值是指针的地址,以十六进制的形式来表示
例如:
var X:integer;
p:^integer;
begin
X:=99;
p:=@X;
Edit1.Text:=Format('this is %p',[p]);
end;
Edit1的内容是:this is 0012F548
s 对应字符串类型,不用多说了吧
x 必须是一个整形值,以十六进制的形式返回
Edit1.Text:=Format('this is %X',[15]);
返回是:this is F

类型讲述完毕,下面介绍格式化Type的指令:
[index ":"] 这个要怎么表达呢,看一个例子
Format('this is %d %d',[12,13]);
其中第一个%d的索引是0,第二个%d是1,所以字符显示的时候
是这样 this is 12 13

而如果你这样定义:
Format('this is %1:d %0:d',[12,13]);
那么返回的字符串就变成了
this is 13 12
现在明白了吗,[index ":"] 中的index指示Args中参数显示的
顺序

还有一种情况,如果这样Format('%d %d %d %0:d %d', [1, 2, 3, 4])
将返回1 2 3 1 2。
如果你想返回的是1 2 3 1 4,必须这样定:
Format('%d %d %d %0:d %3:d', [1, 2, 3, 4])
但用的时候要注意,索引不能超出Args中的个数,不然会引起异常
如Format('this is %2:d %0:d',[12,13]);
由于Args中只有12 13 两个数,所以Index只能是0或1,这里为2就错了
[width] 指定将被格式化的值占的宽度,看一个例子就明白了
Format('this is %4d',[12]);
输出是:this is 12
这个是比较容易,不过如果Width的值小于参数的长度,则没有效果。
如:Format('this is %1d',[12]);
输出是:this is 12
["-"] 这个指定参数向左齐,和[width]合在一起最可以看到效果:
Format('this is %-4d,yes',[12]);
输出是:this is 12 ,yes

["." prec] 指定精度,对于浮点数效果最佳:
Format('this is %.2f',['1.1234]);
输出 this is 1.12
Format('this is %.7f',['1.1234]);
输了 this is 1.1234000

而对于整型数,如果prec比如整型的位数小,则没有效果
反之比整形值的位数大,则会在整型值的前面以0补之
Format('this is %.7d',[1234]);
输出是:this is 0001234]

对于字符型,刚好和整型值相反,如果prec比字符串型的长度大
则没有效果,反之比字符串型的长度小,则会截断尾部的字符
Format('this is %.2s',['1234']);
输出是 this is 12

而上面说的这个例子:
Format('this is %e',[-2.22]);
返回的是:this is -2.22000000000000E+000
怎么去掉多余的0呢,这个就行啦
Format('this is %.2e',[-2.22]);

好了,第一个总算讲完了,应该对他的应用很熟悉了吧

///////////////////////////////////////////////////////////////
二 FormatDateTime的用法
他的声明为:
function FormatDateTime(const Format: string; DateTime: TDateTime): string;
overload;
当然和Format一样还有一种,但这里只介绍常用的第一种
Format参数是一个格式化字符串。DateTime是时间类型。返回值是一种格式化后的
字符串

重点来看Format参数中的指令字符
c 以短时间格式显示时间,即全部是数字的表示
FormatdateTime('c',now);
输出为:2004-8-7 9:55:40
d 对应于时间中的日期,日期是一位则显示一位,两位则显示两位
FormatdateTime('d',now);
输出可能为1~31
dd 和d的意义一样,但它始终是以两位来显示的
FormatdateTime('dd',now);
输出可能为01~31
ddd 显示的是星期几
FormatdateTime('ddd',now);
输出为: 星期六
dddd 和ddd显示的是一样的。
但上面两个如果在其他国家可能不一样。
ddddd 以短时间格式显示年月日
FormatdateTime('ddddd',now);
输出为:2004-8-7
dddddd 以长时间格式显示年月日
FormatdateTime('dddddd',now);
输出为:2004年8月7日
e/ee/eee/eeee 以相应的位数显示年
FormatdateTime('ee',now);
输出为:04 (表示04年)
m/mm/mmm/mmmm 表示月
FormatdateTime('m',now);
输出为:8
FormatdateTime('mm',now);
输出为 08
FormatdateTime('mmm',now);
输出为 八月
FormatdateTime('mmmm',now);
输出为 八月
和ddd/dddd 一样,在其他国家可能不同
yy/yyyy 表示年
FormatdateTime('yy',now);
输出为 04
FormatdateTime('yyyy',now);
输出为 2004
h/hh,n/nn,s/ss,z/zzz 分别表示小时,分,秒,毫秒
t 以短时间格式显示时间
FormatdateTime('t',now);
输出为 10:17
tt 以长时间格式显示时间
FormatdateTime('tt',now);
输出为10:18:46
ampm 以长时间格式显示上午还是下午
FormatdateTime('ttampm',now);
输出为:10:22:57上午

大概如此,如果要在Format中加普通的字符串,可以用双引号隔开那些
特定义的字符,这样普通字符串中如果含特殊的字符就不会被显示为
时间格式啦:
FormatdateTime('"today is" c',now);
输出为:today is 2004-8-7 10:26:58
时间中也可以加"-"或"\"来分开日期:
FormatdateTime('"today is" yy-mm-dd',now);
FormatdateTime('"today is" yy\mm\dd',now);
输出为: today is 04-08-07
也可以用":"来分开时间
FormatdateTime('"today is" hh:nn:ss',now);
输出为:today is 10:32:23

/////////////////////////////////////////////////////////////////
三.FormatFloat的用法

常用的声明:
function FormatFloat(const Format: string; Value: Extended): string; overload;
和上面一样Format参数为格式化指令字符,Value为Extended类型
为什么是这个类型,因为它是所有浮点值中表示范围最大的,如果传入该方法的参数
比如Double或者其他,则可以保存不会超出范围。

关键是看Format参数的用法
0 这个指定相应的位数的指令。
比如:FormatFloat('000.000',22.22);
输出的就是022.220
注意一点,如果整数部分的0的个数小于Value参数中整数的位数,则没有效果
如:FormatFloat('0.00',22.22);
输出的是:22.22
但如果小数部分的0小于Value中小数的倍数,则会截去相应的小数和位数
如:FormatFloat('0.0',22.22);
输出的是:22.2

也可以在整数0中指定逗号,这个整数位数必须大于3个,才会有逗号出句
FormatFloat('0,000.0',2222.22);
输出是:2,222.2
如果这样FormatFloat('000,0.0',2222.22);
它的输出还是:2,222.2
注意它的规律

# 和0的用法一样,目前我还没有测出有什么不同。
FormatFloat('##.##',22.22);
输出是:22.00

E 科学表示法,看几个例子大概就明白了
FormatFloat('0.00E+00',2222.22);
输出是 2.22E+03
FormatFloat('0000.00E+00',2222.22);
输出是 2222.22E+00
FormatFloat('00.0E+0',2222.22);
22.2E+2
明白了吗,全靠E右边的0来支配的。

这个方法并不难,大概就是这样子了。

上面三个方法是很常用的,没有什么技巧,只要记得这些规范就行了。
我把它写出来,方便大家参考而已,没有什么特别目的

http://codegear.cn/post/2008/03/13/Formate79a84e794a8e6b395.aspx

标签: ,

关于Delphi的四舍五入

在网上常有人说Delphi的四舍五入有Bug!?
相反,我认为Borland考虑得很全面,这不是Bug!

Delphi帮助里面写得清清楚楚!

SimpleRoundTo :四舍五入(不对称算数做法)
RoundTo:四舍六入,五入单(银行家做法)
RoundTo(1.235, -2) = 1.24
RoundTo(1.245, -2) = 1.24

RoundTo是银行家的 做法,
SimpleRoundTo才是我们平时说的四舍五入!

http://codegear.cn/post/2008/03/13/delphi-roundto.aspx
对4舍5入国家有标准的。但是很多人根本不清楚。

标签:

whatever:hover

Most modern browsers support the :hover selector for any html element. This is cool, because it enables you to, for instance, apply a mouseover effect to table rows using only CSS. IE however, with a market share of > 90%, does not natively support :hover on elements other than links , rendering the entire :hover concept useless. Or does it?

IE allows you to look at the stylesheets and each individual rule with javascript. Normally, IE returns UNKNOWN for anything it does not support. This seems to sound reasonable at first, but it's not. For instance, a p:first-child would change into p:unknown, and a a[href] would altogether be molested to a capital UNKNOWN. Now why can't it just return the true selector text?

Fortunately, even though IE won't actually DO anything with a tr:hover the :hover is recognized and left alone.

http://www.xs4all.nl/~peterned/csshover.html

效果:

http://www.seoconsultants.com/css/menus/tutorial/

CSS这几年的改进真大。不过微软的IE5, IE6算是什么样的产品呢?

标签: ,

Dean Edwards, CSS2 for IE5,6

IE7 loads and parses all style sheets into a form that Explorer can understand. You can then use most CSS2/CSS3 selectors without having to resort to CSS hacks.

The lightweight script is a single-line inclusion in your HTML/XML document. No alteration of your original markup is necessary. Neither do you have to alter your CSS.

IE7 provides Microsoft Internet Explorer with support for W3C standard CSS and HTML:

  • supports the following CSS selectors:
    • namespace|selector
    • parent > child
    • adjacent + sibling
    • adjacent ~ sibling
    • [attr], [attr="value"], [attr~="value"] etc
    • .multiple.classes (fixes bug)
    • :hover, :active, :focus (for all elements)
    • :first-child, :last-child, only-child, nth-child, nth-last-child
    • :check, :disabled, :enabled
    • :root, :empty, :contains(), :not()
    • :before/:after/content:
    • :lang()
  • works with both HTML and XML documents
  • supports imported style sheets
  • preserves the cascade of the style sheet
  • does not alter the document structure
  • does not repeatedly query the DOM tree using JavaScript
  • uses pure CSS to enforce style sheet rules
  • supports the W3C box model in both standards and quirks mode
  • supports fixed positioning (flicker free)
  • supports overflow:visible
  • supports min/max-width/height
  • fixes broken (X)HTML elements (abbr, object)
  • standardies forms behavior
  • supports PNG alpha transparency
  • lightweight script (22K)
  • completely modular (add/remove fixes)
  • works for Microsoft Internet Explorer 5+ (Windows only)
http://dean.edwards.name/IE7/overview/

让Windows版本的IE5, IE6利用所有CSS2的选择器,以及来自尚未完成的CSS 3标准的许多先进器。Edward的IE7脚本让你使用选择器:before, :after, :first-child。。。。

标签: , , ,

星期三, 四月 16, 2008

三个期待````

1. Delphi for AS/400
这个消息是从范路先生这里得知的,CodeGear将发布一个专用于IBM AS/400 服务器开发的Delphi版本
2. Eclipse for Delphi
据说是 IBM 的一个新计划,具体情况不得而知.就以往的Eclipse来看,应该是会方便一下Web应用的开发,并且也不会像原本的Delphi那样拥有很多的组件.这倒底是好事还是坏事呢
3. Delphi2008/RAD Studio2008
终于能上Unicode了,等这一天不知等了多久,还有泛型之类的新特性加入,值得期待

http://hi.baidu.com/rarnu/blog/item/0f48ffed9a58864b78f05597.html

标签:

一點Delphi2008的消息

昨晚和范路先生吃了一頓晚飯,相互間也談起了各自的工作,未來等等。有意無意的也問了一些delphi2008的情況,的確是狠出乎我的意料,也許VCL2的強大程度是我所不能預料的。

delphi2008的新特性:
1. 支持Unicode,這個是眾多delphi程序員期盼已久的了,這次終於要實現了
2. 支持編譯64位的應用程序,它將成為64位系統下,效率最高的開發工具
3. for Win32 版本支持泛型,原本只是在Delphi.NET中有此功能
4. for Win32 版本支持反射,同樣的,原本只在Delphi.NET中有
5. delphi2008應當能直接編譯以前版本的源碼,並且使用FastMM作為內存管理工具

另外,會有一些新的框架面世,范路先生所說的Application Factory實在是狠吸引人
它可以讓開發人員在開發過程中就記錄下自己的知識,在更換人員時,交接將變得異常簡單
並且Application Factory可以跟據以前的程序以及定下的規則,快速的生成新代碼
這對於經常要開發同一種系統,但又需要為不同用戶定製需求時,將非常有用

另外,delphi2008也將會有 for win32和for .NET的版本

最後,也談了下delphi2008的價格,買一個授權的話,大概是在人民幣2萬到3萬元之間,但是可以批量的買
買得越多,價格也會越低,如果買1千個以上授權,也許可以降到每個授權5千以下
如果有1萬個授權批量的買,每個授權100元都是有可能的,現在在CodeGear-CN上也有人提出了此想法
就等著它實現了。

delphi2008的內測就在眼前了,等內測時,我會拿出一個詳細的測試報告,敬請期待。

http://hi.baidu.com/rarnu/blog/item/e335cd17d41fb40dc93d6dbd.html

标签:

配置 Python的wxWidgets可视开发环境

注:转载请注明出处

一、下载 Python 2.5.1
  这一步是必须做的,下载 Python 语言的 SDK
  下载地址(直接复制到迅雷):点击下载

  下载完成后安装 Python 2.5.1,注意安装路径中不要有空格,不然会引起一些问题。

二、下载 wxPython 2.8
  这将下载 Python 的可视化开发库,拥有它就可以进行可视化的开发了。
  下载地址:

    Unicode 版:点击下载
    Ansi 版:点击下载

  建议下载 Unicode 的,用 Ansi 版的话,组件标题不能写 Unicode 字符,代码包含 Unicode 字符也会出错。安装时注意,安装路径中不能有空格。
  到这一步为止,类库就齐全了,下面我们需要一个 IDE

三、下载 Boa Constructor
  Python 拥有非常多的开发环境,也就是 IDE。但是到现在为止,能完全支持可视开发的只有 Boa Constructor。使用它可以像使用 Delphi 那样,直接拖出控件进行快速的开发。
  下载地址:点击下载

  Boa Constructor 还是开源的,如果需要它的源码,可以点击下载
  注意,Boa Constructor 的安装路径也不能有空格。

四、配置 Boa Constructor
  打开 Boa Constructor,如果你是中文的系统,IDE 的语言会变成中文,你必须把它修改成英文的,在 工具->语言设置 菜单中将它换成英文。如果使用中文的 IDE,打开,保存文件时会发生错误(感谢纳米Baby提供这一信息,我自己的系统是英文的,试不出此问题)。
  点击 Tools->Python Interpreter Chooser,设置 Python.exe 的所在目录。
  关闭 Boa Constructor并重新启动它,配置即告完成。

五、一个简单的 Hello World 实例

  在工具栏中点击 wx.App 按钮,创建一个 wx 工程,这个工程将生成 2 个文件,一个是工程文件,另一个是窗体文件。

  然后将两个文件分别保存为 HelloWorld.py(工程文件) 和 Form.py(窗体文件)。在 Form.py 的显示窗口下按 F12,调出可视设计器。

  如上图所示,拖入一个 TextCtrl 和一个 Button。设置 TextCtrl 的 Name 为 txtHello,Value 为空。设置 Button 的 Name 为 btnHello,Label 为 Hello。

  然后我们要让 Button 按下时,TextCtrl 显示出 Hello World 字样。所以需要绑定 Button 的 OnButton 事件。在事件管理器中找到 OnButton,然后双击,点击 Apply 按钮。此时代码编辑器中会生成该事件相关的代码。

  如图所示,添加一行代码即可。然后运行程序,就能看到效果了。

标签: ,

TinyXML与wxWidgets

TinyXML 是一個小巧的 C++ XML parser Library,十分容易就可以整合到你的程式,而且學習曲線十分的短。

TiXmlNode

TinyXML 使用 node 的觀念來看待 XML 文件樹,TiXmlNode 就是代表著一個節點的 class。

Load and Save

TinyXML 使用 TiXmlDocument 這個 class 來載入/儲存 xml file。A document binds together all the XML pieces. It can be saved, loaded, and printed to the screen.

TiXmlDocument doc;doc.Load( "myfile.xml" );

存取的時候,要先取得下一層的 Child Element:

TiXmlElement* element = doc.FirstChildElement();

也可以指定標籤來取得特定的 Element,如同下面的例子:

TiXmlElement* element = doc.FirstChildElement("Node");

TiXmlElement

The element is a container class. It has a value, the element name, and can contain other elements, text, comments, and unknowns. Elements also contain an arbitrary number of attributes.
<foo>This is textfoo>

例如上面的片斷,我們可以使用 GetText() 取得被包起來的文字:
const char* str = fooElement->GetText();

TinyXML and wxWidgets

TinyXML 預設以 UTF-8 編碼,wxWidgets 編譯成 Unicode mode 時,傳入的參數需要轉碼,wxString 可以使用 mb_str() 轉碼,就可以與 TinyXML一起使用。

如果要轉換 UTF-8 char * 字串為 wxString,使用下列的方式:

const char* str = fooElement->GetText();wxString myString(str, wxConvUTF8);
http://www.cppblog.com/tx7do/archive/2006/04/24/6153.html

标签: , ,

星期二, 四月 15, 2008

没有时间

想做的事太多,没有时间。

还是打打游戏,浪费一下。

标签:

每天五分钟的Scrum Meeting能带给企业和个人带来什么?

by Gary Jia 上次修改时间: 2007-11-28 17:37

Scrum属于敏捷开发范畴的一种开发流程,以英式橄榄球争球队形(Scrum)为名,Scrum将软件开发团队比作橄榄球队,有明确的更高目标,具有高度自主权。紧密地沟通合作,以高度弹性解决各种挑战,确保每天、每个阶段都朝向目标有明确的推进。

Scrum的运行方式又很多种,很多公司应用起来也会有些自己的改变,一个简单的Scrum Meeting包含3个要点:

  1. 从上一次Scrum到现在你做了什么
  2. 从现在到下一次Scrum你要做什么
  3. 有什么问题无法解决的

一般如果大家坐在一起,那么每个人都说一下,可能也需要比较长的时间,不适合每天进行,但是如果通过一个多人协同交流系统(比如IRC)来进行,那 么就会迅速很多,多人可以同时发言,发言之后可以查看其他人的发言,效率大幅度提高。一般20人团队,只要没有重大问题,那么3到5分钟的时间就可以进行 完毕,非常适合在每天进行。那么有人会问,这样的几分钟的一个小流程能解决什么问题呢?对于没有亲身经历的人可能不太容易理解。可以这样说,每天的这短短 几分钟时间就能是每天的8小时的工作效率提高一大步的。为什么这样说呢,因为,虽然每个人只有3句发言,但是这3句话要说明,上一个工作周期都作了什么, 下一个工作周期要做什么,因为每天进行,所以大家很容易回忆起来你上次的报告是怎么说得,所以也就很容易的印证,你这次报告的已完成工作跟上次的要进行工 作是否匹配,也很容易知道,你的每个工作周期的工作量是否合适,我想每个人都一样,如果你自己都觉得你的这个工作周期的工作量不太够的话,那么你也一定会 认为别人都这样觉得,这是一个非常强烈的心里暗示,如果你这个工作周期的工作非常繁重,完成的状况非常好,那么你也就会非常的理直气壮了。所以因为每天的 这短短的几分钟处使你在整个工作周期都要集中经历,提高工作效率,这样每天的工作完成情况非常良好,那么也就不会产生无故的加班行为,那样你就有更多的个 人时间来进行你的个人事务,所以大家的工作效率都会非常的高,企业的整个项目进程也会相应的非常高效。这样企业也就可以赚取更多的利润,也就可以回报给员 工更多的利益。

所以我非常的不理解有些老板特别的喜欢看到员工坐在办公桌前超时工作(加班),感觉他好像榨取了更多的员工的价值一样。可是这样带来的必然是正常的 工作时间的效率低下,所以我对某些自以为很了不起的,标榜着自己的加班文化的企业很是不屑,明明可以在短时间之内完成的工作也要拖到下班再加班,可能还不 能完成。这样有什么意义呢。曾经有人跟我说过,在他的公司,如果你工作效率很高,反而得不到老板的赏识,因为老板认为你做的快说明工作没有难度,只有做得 慢了才说明难度大,才会受到重视,真不知道这是什么逻辑。

所以轻量级的迭代流程就显得非常重要了,可以在不浪费大量会议时间的情况下,对过往的流程进行快速的复查,发现问题,找到解决的办法。是提高工作效率的非常有效的手段。

就我个人而言,我是非常的反感加班的,即便有加班费我也宁愿准时回家吃饭、睡觉。

所以每天五分钟的scrum带给你的是什么呢?是高效的工作效率,更多的和家人在一起的时间。对企业来说,就是高效的完成项目进度,员工更快乐的工作,单位时间创造更多的价值。

http://blog.zenmeban.org/gary/archive/2007/11/28/five-minutes-daily-scrum

标签: ,

AgileTimes

Scrum/Agile适用?未试用过,仅引用,等有时间看看吧。

www.agiletime.com.cn

标签: ,

Scrum,敏捷?

Scrum老窝
http://www.scrumalliance.org/

RUP与Scrum的对话


文档选项

未显示需要 JavaScript 的文档选项

将此页作为电子邮件发送

将此页作为电子邮件发送


级别: 初级

Joe Krebs, 高级IT专家

2005 年 4 月 01 日

来自于 Rational Edge:本文介绍了被称为Scrum的灵活软件开发过程。作者阐述了软件开发团队在已有RUP环境中加入Scrum理念的技术。

illustration正 如你所知道的,RUP(Rational Unified Process,Rational 统一过程),是一种被广泛使用的软件过程框架。它可以很好地迎合你的软件开发过程的需要,还可以容纳其他技术。Scrum是一系列有趣的,用来包装灵活软 件项目的项目管理模式。本文介绍了Scrum的一些重要特性,并阐述了可以让你在已有RUP环境中加入Scrum理念的技术。我在工具条内提供了关于 Scrum和“灵活”的术语的词汇表,并且在下文中这些术语首次出现的地方用星号作了标记。

什么是Scrum?

Scrum 是一种灵活的软件管理过程,它可以帮助你驾驭迭代,递增的软件开发过程。Scrum于1995年由Advanced Development Methodologies,Inc提出,并在2001年“敏捷联盟(Agile Alliance)”形成后受到了更多欢迎。这个轻量的过程可以作为包装器,也就是说你可以把Scrum与其它灵活的过程框架组合起来,比如说RUP。

Scrum提供了一种经验方法,它使得团队成员能够独立地,集中地在创造性的环境下工作。它发现了软件工程的社会意义。Scrum一词来源于橄榄球运动,暗指这种情况:“在橄榄球比赛中,双方前锋站在一起紧密相连,当球在他们之间投掷时他们奋力争球。2

这 一过程是迅速,有适应性,自组织的,它代表了从顺序开发过程以来的重大变化。Scrum认为软件的开发不应使用和一般制造业相同的方法,也就是不应采用一 种反复的模式。这种重复使得输入和输出参数更加容易预测和描述,但这并不是当今软件工程的有益目标。现代软件工程的主要挑战包括上市时间,投资回报,以及 影响顾客的需要等。RUP和其他敏捷软件工程过程能够很好地迎接这些挑战。

http://www-128.ibm.com/developerworks/cn/rational/rationaledge/content/apr05/krebs/

敏捷软件开发模型--SCRUM


一 什么是Scrum?

Scrum (英式橄榄球争球队), 软件开发模型是敏捷开发的一种,在最近的一两年内逐渐流行起来。

Scrum的基本假设是:

开 发软件就像开发新产品,无法一开始就能定义软件产品最终的规程,过程中需要研发、创意、尝试错误,所以没有一种固定的流程可以保证专案成功。Scrum 将软件开发团队比拟成橄榄球队,有明确的最高目标,熟悉开发流程中所需具备的最佳典范与技术,具有高度自主权,紧密地沟通合作,以高度弹性解决各种挑战, 确保每天、每个阶段都朝向目标有明确的推进。

Scrum 开发流程通常以 30 天(或者更短的一段时间)为一个阶段,由客户提供新产品的需求规格开始,开发团队与客户于每一个阶段开始时挑选该完成的规格部分,开发团队必须尽力于 30 天后交付成果,团队每天用 15 分钟开会检查每个成员的进度与计划,了解所遭遇的困难并设法排除。


二 Scrum较传统开发模型的优点

Scrum模型的一个显著特点就是响应变化,它能够尽快地响应变化。下面的图片使用传统的软件开发模型(瀑布模型、螺旋模型或迭代模型)。随着系统因素(内部和外部因素)的复杂度增加,项目成功的可能性就迅速降低。


下图是Scrum模型和传统模型的对比:

三 Scrum模型

一) 有关Scrum的几个名词

backlog: 可以预知的所有任务, 包括功能性的和非功能性的所有任务。

sprint:一次跌代开发的时间周期,一般最多以30天为一个周期.在这段时间内,开发团队需要完成一个制定的backlog,并且最终成果是一个增量的,可以交付的产品。

sprint backlog:一个sprint周期内所需要完成的任务。

scrumMaster: 负责监督整个Scrum进程,修订计划的一个团队成员。

time-box: 一个用于开会时间段。比如每个daily scrum meeting的time-box为15分钟。

sprint planning meeting: 在启动每个sprint前召开。一般为一天时间(8小时)。该会议需要制定的任务是:产品Owner和团队成员将backlog分解成小的功能模块, 决定在即将进行的sprint里需要完成多少小功能模块,确定好这个Product Backlog的任务优先级。另外,该会议还需详细地讨论如何能够按照需求完成这些小功能模块。制定的这些模块的工作量以小时计算。

Daily Scrum meeting:开发团队成员召开,一般为15分钟。每个开发成员需要向ScrumMaster汇报三个项目:今天完成了什么? 是否遇到了障碍? 即将要做什么?通过该会议,团队成员可以相互了解项目进度。

Sprint review meeting:在每个Sprint结束后,这个Team将这个Sprint的工作成果演示给Product Owner和其他相关的人员。一般该会议为4小时。

Sprint retrospective meeting:对刚结束的Sprint进行总结。会议的参与人员为团队开发的内部人员。一般该会议为3小时。



二)实施Scrum的过程简单介绍

1) 将整个产品的backlog分解成Sprint Backlog,这个Sprint Backlog是按照目前的人力物力条件可以完成的。
2) 召开sprint planning meeting,划分,确定这个Sprint内需要完成的任务,标注任务的优先级并分配给每个成员。注意这里的任务是以小时计算的,并不是按人天计算。
3) 进入sprint开发周期,在这个周期内,每天需要召开Daily Scrum meeting。
4) 整个sprint周期结束,召开Sprint review meeting,将成果演示给Product Owner.
5) 团队成员最后召开Sprint retrospective meeting,总结问题和经验。
6) 这样周而复始,按照同样的步骤进行下一次Sprint.

整个过程如下图所示:




The diagrams in this article are all from web site: http://www.controlchaos.com. Thanks very much!

参考:
http://www.controlchaos.com/about/
http://www.microsoft.com/Taiwan/msdn/columns/200311softdev.htm

标签: , , ,

Google API地址索引

地图API
http://code.google.com/intl/zh-CN/apis/maps/documentation/index.html

Adsense API
http://code.google.com/intl/zh-CN/apis/adsense/

AJAX API集合
http://code.google.com/intl/zh-CN/apis/ajax/

Search API
http://code.google.com/intl/zh-CN/apis/ajaxsearch/

Open Social API
http://code.google.com/intl/zh-CN/apis/opensocial/docs/

Google Talk API
http://code.google.com/intl/zh-CN/apis/talk/talk_developers_home.html

Google Blog API
http://code.google.com/intl/zh-CN/apis/gdata/basics.html

这些地址留着备用。

标签:

Web开放趋势代表:无所不在的Google API

Web API(Application Interface)简单来说,便是透过开放的因特网传输协议,将提供的服务内 容以标准的界面来定义,以便进行点对点之间的服务整合。由于运行的平台是在Web架构之上,故常见的技术像是HTTP中的GET/POST、SOAP /HTTP, XML/RPC等,都是主要的组成架构,所定义的数据交换大都是属应用层以上。由于HTTP为企业对外及对内均会开放的传输协议,业已发展成熟,故以 HTTP为基础的Web API也降低了应用服务在整合上的门坎。

山「谷」之「歌」, 余音绕梁

Google
致力于网络技术研发及创新服务的提供不遗余力,从Web平台到个人桌面化服务,处处可见Google的踪迹。它在网络世界的布局已经由点(单一个别的 Google服务)展开到线(Google服务之间的彼此整合),未来将逐渐扩展到面(提供网络服务整合平台),可谓将Web 2.0的精神发挥得淋漓尽致。

延续对李开复的挖角事件,以及Google在台如同神秘般的征才流程,不管是「谷歌」还是网络上所戏称的「股沟」,Google对因特网所造成的影响已是 有目共睹,它的一举一动已经成为业界必然注目的焦点,纷纷被同业视为模仿及学习的对象,每次新服务的问世都对业界造成不小的震撼,甚至威胁到相关既有服务 的平台供货商,实在是令人又爱又恨的网络巨人。

条条大路通Google

您 会发觉Google所提供的网络服务到处都可以见到,像是使用率最高的网页搜寻引擎,桌面搜寻机制,实时通讯及电子邮件服务。就因为它友善方便的使用方 式,让使用者的接受度大大提高。加上Google技术领先的优势,提供高质量的产品及服务,更因此让使用者的忠诚度居高不下。

使用者除了 可以直接上Google的网站使用它们提供的服务之外,Google提供了这些网络服务的API配方,让许多厨师们都可以拿它来精心调制出美味的佳肴,随厨师的创意提供千变万化的网络服务,让大家都可以享受Google这个网络服务平台,使得您设计的应用程序内容更加丰富完整。

轻轻松松跟Google打交道

在Google所提出的服务精神,希望每个因特网使用者都能享受它们所提供的任何服务,当然不只是信息人员。所以在与Google服务整合上,也让使用者不会感到有相当高的门坎,也能轻松上手。

过 去大家讨论的API通常会围绕在程序代码上打转,实在太严肃,会让读者们觉得那是要会写程序的人才会用到的东西,事实上在所有Google所提供的众多服 务 中,也提供了不需要撰写程序亦可以使用的整合界面,使用的方式都是相当轻松容易的,而且其强大的功能会让您直呼不可思议呢!

就目前Google所提供的网络服务API,依其功能型态及使用时机大致上分成三大类:
  • 强化网站功能(Enhance Your Web Site)
若您已经有自己的网站或部落格,可以透过这类功能来强化您网站的机制,以及提供完整的网站分析管理功能,让经营您的网站更省事,更简单。
  • 一般使用者功能(Reach Google Users)
主要针对Google所提供的Client软件,适用于一般使用者,提供可以安装在个人计算机桌面中的小工具(Gadget)。这些以XML为主要撰写语言,让您的日常工作可以透过桌面与Google之间的密切结合更有效率。
  • 提供整合界面(Integrate with Google)
这是针对进阶使用者,尤其是具有程序撰写能力的开发人员所提供的程序界面,您可以依您所擅长的程序语言(Java, Perl, Python, PHP, Ruby及.NET等),透过标准的传输协议及开放标准来进行实作。
接下来便针对一些热门的API功能进行介绍。

Google AJAX Search API

在 所有Google的Web服务中,最常被大家使用的便是其强大的搜寻引擎功能。在一个功能完整的网站里,搜寻机制已经是基本配备,在过去这样的功能需要导 入某特定搜寻引擎的软件套件,安装在自己的机器上才能达成的理想,现在仅仅需要在Google网站上申请一组API License Key,便可以享受Google既有的搜寻功能,而不需要在自己家里搞一套搜寻引擎主机。

若您对撰写程序有很大的学习障碍,Google提供了一种懒人机制,以增加HTML及JavaScript程序代码的嵌入方式,就可以将Google的搜寻机制免费安装到你的网站中,而且还结合了最酷炫的AJAX技术,这样的搜寻机制远比自己动手写程序来得容易多了。

从 图中您便可以很清楚看到,透过这样的整合,不只是提供网页内容的搜寻,连视讯、部落格、新闻、地图等内容都可以一并呈现。这些不同性质的内容是透过 Google Gadget组件组合而成,像是Video Gadget、Map Gadget等,模块化的结构让您可以弹性变动搜寻的结果,而在这个内嵌框架的里头所使用的AJAX呈现技术,让操作方式更加友善便利。

Google Web API

当 然,除了简单的嵌入整合方式,手痒的程序开发者也可以透过Google所提供的API来将它的服务整合到自己的应用程序中,Google针对搜寻机制提供 的API十分完整,您可以透过Web Services的业界标准界面让整个操作使用更加流畅,这便需要花点心思写点程序才有办法达到的,可以依照您的需求进行客制化,整合程度更高。

这 个函式库里包括了.NET(C#), VB及Java的范例程序、WSDL描述文件、API参考手册,及Java Doc文件。由于目前的Google Web API是透过Web Services的架构,所以只要依照WSDL描述档的定义,以SOAP的方式呼叫取得搜寻结果即可,所以只要程序语言本身可以撰写出SOAP Client就可以使用。若您是采用Java为主要开发语言,Google Web API提供已经包装好的SOAP Client链接库,只花几行程序即可撰写完成,相当容易。

为了让资源能有效分享给普罗大众,Google针对每个申请者有使用上的限 制。针对每个使用授权每日仅能呼叫1000次,而且每次的查询结果仅回传前1000笔,回传则以最多10笔为一个单位,而搜寻内容则不包括图片、新闻等其 他内容,仅限于网页数据,如此设计均是为及提升执行效能所做的考虑。

当然,这样的函式库是提供研究性质之使用,而未被授权于任何与商业有关之应用。在使用之前您最好还是详读一下授权合约内容。

Google Web Toolkit (GWT)

相 信您使用了一些Google所提供的服务后,会对它在网页上呈现的AJAX动态效果印象深刻,这样的设计对于使用者经验是有正面评价的。但对AJAX这样 的技术也许对许多开发人员仍然是陌生的技术,要能及时熟练上手也许会有困难,加上AJAX本身在开发测试过程中会有一定的困难度,故贴心的Google研 发团队便将其相关的技术以Java方式来呈现,提供更广泛的Java使用者也能开发出AJAX的应用程序。

您可以将GWT视为Java软 体框架,GWT具备了动态可重用的特性,开发者只需要引用GWT提供的链接库即可设出美美的AJAX UI画面,避开了在Javascript程序撰写时不易除错的问题,所有的开发方式可以依循原有的Java开发程序,结合您所熟悉的Java IDE工具(像是Eclipse)进行开发,同时也可以与JUnit整合,将单元测试自动化以提高效率。

GWT提供了Java-to- JavaScript Compiler,可以将您结合GWT所撰写的Java程序代码转译成具备AJAX功能的JavaScript内容。在开发过程中,您可以利用Host Mode对Java程序进行测试,而不需要每次都转成JavaScript才能测试最终产生的结果。而Web Mode则是将所有的Java程序转成JavaScript后实际以Web界面执行的方式。

在GWT里已经帮您解决了AJAX对不同浏览器的支持问题,您只需要针对UI版面配置进行设计即可。GWT提供了数种Panel应用在不同的版面配置,类似AWT中的Layout Manager功能,所以你会发觉程序的写法有点像在写Swing应用程序。

Google Map API

若 您的应用程序中需要提供地理信息,包括地理行政图、地区街道明细、以及路线规划建议等, Google Map服务是个不错的选择。它提供了世界各地的地理信息,同时可以选择地图、卫星鸟瞰图、以及混合显示等呈现方式。进一步它还可以提供您设定起迄点之间的 实际距离,以及最佳路线建议等。

若您只是使用呈现地图的单纯功能,那就太小看Google Map了。为了让地图能更具可读性,在上面加注信息是免不了的。Google Map API提供了Marker(以标识符号突显某特定的地点),InfoWindow(加注说明文字于讯息框中),及Polyline(以画线方式标示路线或 范围)等注记方式。其实在技术上的整合亦十分简单,此API亦是利用HTML与JavaScript内嵌方式来达成。

此服务整合常见的应用如房屋中介(提供查询对象的所在地理信息),求职讯息(提供征才企业的所在位置),旅游情报(提供旅游景点位置及重点地标),交通路况查询(提供两地之间最佳路径)等,让仅仅只是冰冷的地址文字加上更丰富的图像信息。

美 中不足的是,目前Google Map对于台湾地区的地图信息提供仅限于卫星影像,而行政地图的部份仍然未臻完整,对于想要提供区域性网站信息的内容则稍嫌不足。而类似的服务您也可以参 考由国人开发的UrMap你的地图网(www.urmap.com),此网站服务亦提供Web API可供呼叫,使用的组件架构也十分类似Google Map的设计方式,加上其提供的台湾地图街道行政区信息较为完整,比较符合国内网站的应用需求。

Google Toolbar API

对 于Google工具列应该大家都不陌生,其方便强大的功能已经成为浏览器的必备套件。在下载安装Google工具列之后,在工具列上预设的按钮功能也许仍 然无法满足您的需要,所以Google工具列提供了API让有兴趣自行设计工具列按钮的玩家们来使用,您也可以在Google 工具列上设计自订按钮功能,将一些常用的网址连结、RSS信息提供内容放到工具列上,在使用上更为便捷。

只需要撰写简单的XML档案,引用Google工具列特定的卷标语法,就可以制作出您想要的功能按钮。您也可以到Google工具列的按钮集页面中,搜寻别人已经提供的工具列按钮,也可以将您的精心杰作与其它Google工具列的使用者分享。

Google Desktop SDK

Google除了在网络服务上有着卓越的使用率外,对于个人桌面的市场亦野心勃勃,自行推出桌面搜寻工具后,连微软也不得不承认一向占有优势地位的桌面也感受到威胁,也推出类似的桌面搜寻工具,颇有相互较劲的意味。

新 一版的Google Desktop 4除了包含既有的桌面搜寻功能之外,还提供可以与网络服务直接连结的侧栏(Sidebar)功能,让您不需要开启网页浏览器也可以使用Google提供的 网络服务。侧栏可以让您下载安装许多与Google现有网络服务结合的Gadget小工具,像是实时新闻气象服务、Gmail个人邮件浏览、个人相簿、行 事历及待办事项等等。Google已经将Desktop视为网络服务的延伸平台,让它的服务更能深入个人桌面前端,结合得更密切。

当然在 Desktop平台方面,Google也提供了开发Gadget的SDK,让您可以设计出属于个人色彩的桌面小工具,成为侧栏的一部份。SDK支援 JavaScript, C, C++, C#, and/or VB.Net等技术,下载的SDK中也包含一可视化设计工具Gadget Designer。Google也鼓励那些网站内容提供者,利用Google Gadget SDK开发出自己网站专属的Gadget,并公布到Google的目录中供下载使用,进而让更多的使用者认识这些具有特色的网络服务,打响自己的知名度。

其它Google API

Google API种类繁多琳琅满目,以上仅针对较常被使用的部份进行介绍。如果您需要参考关于Google API的技术资料,您可以造访http://code.google.com,这儿包括了所有的API分类及相关说明,函式库也是从这儿下载使用。以下便 列出所有Google API的清单供大家参考:
Google API
说明
Google Account Authentication
针对Client软件(ClientLogin API)Web应用程序(AuthSub API)Google会员的身份认证功能。
AdSense API
提供与Google网络广告的整合,可以在您的网页上置入AdSense网页,利用Google播送平台发送网络广告并进行相关的广告管理功能。
AdWords API
提供广告客户自己的应用程序可直接对Google AdWords Server主机进行广告活动设定及管理。
Google AJAX Search API
提供Web Search功能以AJAX方式呈现,在您的网页上以嵌入方式提供Google搜寻功能。
Google Base Data API
提供对于Google Data的数据存取功能
Blogger Data API
Blogger服务整合,提供从您的网络服务对Blogger.com的内容进行编辑的功能。
Google Calendar Data API
Google Calendar服务整合,可以透过它进行事件更新,
Google Data APIs
提供针对Google Blogger, Google Base, Google Calendar等服务的数据交换功能。
Google Desktop SDK
提供建构在Google Desktop平台上的开发工具,应用程序可以直接利用它来开发出桌面小工具。
Google Earth KML
利用KML定义的地理信息来与Google Earth服务整合。
Google Gadgets API
用来开发Google Gadget小工具,Gadget又分成Universal GadgetDesktop Gadget,依您的需求使用不同的API来进行整合开发。
Gmail Atom Feeds
提供以Atom方式呈现Gmail信收件夹内容,将Gmail内容整合到您的网页中以利快速阅读。
Google Checkout API
Google提供的电子商务在线付款机制整合。
Google Web Toolkit
提供以Java链接库设计Web AJAX界面之功能。
Google Groups Feeds
提供搜寻网上论坛(Groups)并以AtomRSS呈现结果
Google Maps API
提供与Google Map服务整合,在您的网页中提供地图服务,并与网页数据密切结合,提供图文并茂的呈现方式。
Google News Feeds
提供搜寻新闻(News)并以AtomRSS呈现结果。
Google Related Links
取得Google搜寻结果后之类似网页的内容。
Google Search Appliance APIs
提供了Search Protocol, Feeds Protocol, Authorization Protocol三种数据传输协议
Google Search History Feeds
提供个人化搜寻历史记录之查询, 包括网页, 新闻等内容的搜寻记录。
Google Sitemaps
提供让Google搜寻能更精确的方式,提高您的网站在搜寻结果的曝光率。
Google Talk XMPP
提供与Google Talk之间讯息传递的通讯协议。在您的应用程序中需要提供与Google Talk相互联系或状态查询时可使用。
Google Toolbar API
提供Google工具列客制化按钮的功能。
Google SOAP Search API
透过Web Services方式呼叫,将Google的搜寻功能整合到自己的应用程序或网页中。
与开放源码社群的紧密结合

除了Google自己提供的工具套件及程序接口外,您也可以在开放源码社群中找到不少与Google服务有关的项目。为Google如痴如狂的使用者不在少数,这些开放源码提供了Google功能的延伸应用,也是您的不赖的另类选择。

若您是Mozilla FireFox的爱用者,除基本功能已经提供了Google的搜寻功能列之外,您还可以下载安装针对Google量身设计的扩充套件(Extension)来使用,像是CustomizeGoogle等。

结语

在Web 2.0的世界中,Google只是其中一个比较显著且知名的例子,其它像是Amazon, Delicious, Cocomment等许多网络服务平台,也都提供Web API的机制。单纯来自一种数据来源已经无法满足现今网络使用者的需求,未来的服务将是以软件混搭(Mashup)的概念(意即Web应用系统整合多种不 同的信息来源)来发展,信息的整合势必是未来的趋势

http://news.csdn.net/n/20061223/99842.html

书到用时方恨少。2006年的冷饭现在要炒炒了。不是炒新闻,是需求。

标签:

Google Maps API 2 文档

第一个程序:
http://www.codechina.org/doc/google/gmapapi/#The_Hello_World_of_Google_Maps

做好的东东:
http://zmap.org/

标签:

挖掘Google隐藏的超强圆角效果

由. Ken Wong 将文章归档于 G源共享

Google_roundcorners.gif

  在设计网页的时候,要实现圆角效果,有N种方法,随便Google一下就可找到很多。但如果我们不想自己动手写这么多代码,又或者根本不想利用自己服务器上的图片,那该怎么办呢?不怕,因为Google本身就隐藏着一个极强大的圆角效果,我们只需要直接把它挖出来用就行了。

  Zach是个圆角效果爱好者(via Philipp),因此每次看到某个网页上有漂亮的圆角,他都会习惯性地查看一下源代码,看看是怎么做出来的。这一次他发现Google在Groups beta里使用的圆角效果相当不错,于是他在源代码里找了一下,发现原来Google本身就有一个强大的圆角效果,并且它是现成的,你可以直接使用它。

  下面就是Google的圆角图片的地址:

http://google.com/groups/roundedcorners?c=0000FF&bc=white&w=40&h=40&a=tr

  效果如下:

Google_roundcorners.gif


  你可以自定义圆角图片的属性:

1.c表示圆角图片的颜色;
2.bc表示圆角图片的背景颜色;
3.wh分别表示圆角图片的宽和高;
4.a表示圆角产生的方向,tl是左上角,tr是右上角,bl是左下角,br是右下角。

  比如我们可以调整上面的属性参性,做出一个"宽和高均为100px、位于右上角的蓝色圆角图片":

Google_roundcorners.gif

  可见你不需要写额外的代码,也不需要使用自己空间里的图片,你要做的只是在设计网页的时候,直接调用Google现成的圆角图片,并且根据自己的需要定义它。当然,这样做的缺点是当Google服务器无法访问时,圆角图片就显示不出来了。

http://www.gseeker.com/50226711/googleeecee_52285.php

标签:

GSeeker: Google API例子

如果你还记得,去年我们曾经介绍过直接利用Google服务器上的图片生成功能制作圆角图片的方法。但那是一种非官方的应用。今天Google Code里推出了一个名为Google Chart API的API,利用它我们便可制出各种统计图表。这个API是由Google苏黎世分部的员工利用20%时间创造出来的。更重要的是,这是一种官方支持的正式应用。

  同样地,我们可以直接利用Google Chart API的链接参数来实现各种统计图表的制作。当前Google Chart API能自动生成线形图、柱形图、饼形图、散点图、曲线图。比如我要做出下面这样一个饼形图:

gseeker-chart1.png

  只需要直接利用Google Chart API的这个链接即可,因为它的结果就是生成这张图:

chart.apis.google.com/chart?cht=p3&chd=s:hW&chs=450x200&chl=GSeeker|Readers

  我们可以看到这个链接里有好几个参数,这些参数的含义是:

*cht=p3(chart type,图表类型;p3表示这是一个三维立体的饼形图)
*chd=s:hW(chart data,图表数据;h代表33,W代表22)
*chs=450x200(chart size,图表尺寸;450x200像素)
*chl=GSeeker|Readers(chart label,图表标签;内容可自定义,但不支持直接写中文)

  要了解Google Chart API的详尽用法,你可以进入它的Google Code专页

  补充fisker利用该API制作了一个更简易的饼图生成器:

  http://ifisker.com/blog/post/0712/chart-printer.html
http://www.gseeker.com/50226711/cgoogle_chart_apice_130159.php

标签:

旅鼠

旅鼠属于啮齿目仓鼠科,共有四个属:环颈旅鼠属,旅鼠属,林旅鼠属和沼泽旅鼠属。

旅鼠腿短,耳朵小,毛软。除尾巴外,全身长10-18厘米。毛上层为浅灰色或浅红褐色,下层颜色更浅,有的旅鼠在冬天毛色变为全白,有利于保护自己。主要分布于挪威北部和欧亚大陆的高纬度针叶林,以根,嫩枝,青草和其他植物材为食,天敌有贼鸥,雪鹗,北极狐黄鼠狼等。

http://baike.baidu.com/view/18912.htm
陪儿子看电视,发现这小东西长的可真肥。肥?对了,看来现在猪肉价格是有点高了~~~,随时随地起反应。

标签:

无题

相信有一天,所有这东西的受益者必将怀有感激的心情看着我。

标签:

带翅膀的奔驰-江淮宾悦


那天看到这天,第一感就是,谁把奔驰停这了?
从侧面看,因为视觉误差,整个Logo部分与奔驰无疑。
不过当你稍稍变动角度,2只小巧的翅膀进入视线。是谁这么好创意?
如果把这心思用在造车上多好?
如果把这心思用在质量管理上多好?
如果,
如果只是如果,
如果真是这样,相信街上都只有国产车(千万别拿国产大众,国产福特之类说事~~~~)

标签:

ruby on rails为什么暂时无法成为企业应用开发的主流?

作者robbin

今天上午和庄表伟在msn上交流了一些看法,下午和JavaEye2.0的主力开发人员jerry讨论了关于ruby on rails在企业应用开发和团队协作的问题。通过讨论,有了一些初步的想法和观点,虽然还不是很清晰,但是现在总结和记录下来,留待今后的实践来验证。

ozzzzzz在Java将死?中提出了一个衡量未来主流工业语言的标准,其中有一条很有意思:

ozzzzzz 写道

1. 应该能规范书写,而不是像c那样可以造就多种不同的风格。


Java明显是一个编程风格非常容易统一起来的语言,而ruby则很明显是一个难以统一编程风格的语言。JavaEye论坛里面有人曾经说过:

引用

Java语言,高手和低手写出来的代码都差不多,而ruby则不同,高手和低手的代码,高下立判


Java编程语言的语法非常简单,规范比较严密,这样规范化带来的好处就是,一旦程序员具有比较良好的面向对象编程基础和设计模式的掌握,那么编写出来的代码几乎是大同小异的。

为什么优秀的Java开源框架的源代码我们读起来都比较容易呢?为什么Java那么容易写出来无二义性,相似度那么高的代码风格呢?为什么用 Java做同样一件事情,往往只有一种最优的写法呢?为什么Java很难搞出来奇技淫巧呢?为什么Java语言一直被人认为是大巧若拙呢?我们再想想,为 什么JDK5.0引入的技巧颇高的泛型编程到现在也有三年,为什么还是没有被广泛采用?再想想Java语言被设计出来是用在什么场合的呢?

想清楚这些问题,那么我们就会发现Java成为企业应用开发主流的一个内在原因(外因也很多,这里不谈),因为Java语言足够死板!

所以写Java程序没有什么花巧,所以为了弄出来点花巧,逼的Java社区搞出来动态反射,搞出来AOP,抄袭了泛型,其目的都是增加Java语言的灵活性。

那么Java这种死板而简单的语言有什么好处呢?好处就是适合作为工业语言!

那么我们分析一下工业语言在语法上面有着什么样的要求呢?

1、语法足够简单而且强壮
2、语法足够死板、做同样的事情,只有一种最优解
3、足够的语法障碍,抑制你的随意发挥,给我规规矩矩的编码

工业语言为什么有这种内在的要求呢?

1、团队协作的需要
大规模的项目需要几十人以上的协作,甚至是异地协作。这种大规模的团队协作要求程序员的代码风格必须高度一致,并且代码块之间的依赖性降到最低。显然死板而容易解藕的Java非常的合格

2、批量生产的需要
现在的软件外包产业体现的尤为明显!不需要你的创意,不需要你的设计,就需要你的coding,而且coding风格,功能已经规定死了。Java显然又非常合适。


好了,上面分析了从语法特点角度,为什么Java成为了工业语言,那么再分析一下为什么ruby不能成为工业语言:

1、ruby的语法过于灵活,发挥的余地太大,导致每个人的代码风格迥异

我刚开始学习ruby的时候非常不适应,被ruby五花八门的语法糖衣搞晕了,同样的一件事情,你有无数种做法,笨拙的,普通的,聪明的,天才的,各式各样,甚至有本《ruby quiz》的书专门讲解ruby编程的各种奇技淫巧。ruby这种内在语法特性直接造就了ruby on rails奇迹。在ruby on rails框架里面,有无数的ruby magic,好用之极又让你惊喜万分,没有ruby这么多灵活的语法支持,rails变不出来这么多魔术。

但是ruby的语法灵活性恰恰是成为工业语言的一大障碍!Java绝顶高手和Java普通高手的代码在风格上不会有大的差别(我就不觉得Rod Johnson代码比我高明到哪里去),但是ruby绝顶高手和ruby普通高手的代码简直判若云泥!高下立判!绝顶高手如DHH把ruby用的出神入化叹服之余,也让你我之辈根本无法写出来符合DHH风格的ruby代码。

在我们JavaEye2.0网站开发中,也出现了这种问题,两个人写的ruby代码,互相之间理解起来存在困难。而由于做一件事情有很多ruby写法,不同性格的人甚至都会选择不同的实现方法,在一个团队中,要统一编码风格,实在难乎其难!而在Java项目中,基本可以杜绝此类问题。

由于代码风格难以统一,因此在大规模的团队中使用ruby编程,会造成合作上面的障碍!


2、ruby on rails会导致你的代码藕合度非常高,不利于团队协作开发

由于rails规定死你的代码框架,不论是横向的功能解藕,还是纵向的分层解藕,都比较困难。

首先来说纵向的分层解藕,这是Java大规模项目常用的办法,但是在ruby on rails中基本不可能。因为ruby on rails各层之间的隐式约定太多了,你不可能分层开发。目前ruby on rails项目都是建议横向功能解藕,不建议纵向分层解藕的。

再说横向功能解藕:首先每个人必须承担足够大颗粒度的功能模块,不能拆分的太细了。因为rails的一个Controller文件就代表一大块功能了。

例如JavaEye2.0中,整个forum就只有一个controller,整个blog也就只有一个controller。当然你惊叹,整个forum代码就一个文件搞定了啊,代码太少了!但是反过来,你也可以说,论坛这个功能只能交给一个人来做了,没有办法再拆分功能了。这就带来了一个问题,团队协作变的困难了,如果两个人同时做论坛模块,就会出现经常性的该controller文件冲突合并。即使妥协一下,每个人只负责一个大功能块,但是底层的model代码都是互相关联在一起的。又难以避免的并发修改和文件冲突合并。

但是Java不存在这个问题,为什么呢?因为Java把一个Controller分解成为了无数个小Action,把一个Model分解成为了PO,DAO,Service,进行了充分的功能职责的解藕,每个人的工作基本不会互相干扰,那么团队协作的问题就好办了。

在JavaEye2.0开发过程中,就遇到了这个问题,即使是分出来一小部分任务,也经常性导致文件冲突合并,最后只能把大部分的程序任务压到了 jerry一个人身上。可敬的jerry同学几乎以一人之力编写了整个JavaEye2.0的绝大多数代码。在惊叹jerry以一个人月的高效率完成整个 JavaEye2.0编码工作的同时,我们也不得不反思,为什么ruby on rails这样难以团队协作开发呢?

在我最推崇的《Getting Real》这本书里面建议一个开发团队3个人足够了,一个人设计规划产品功能,一个人设计界面,一个人编写代码。我们现在也是这样的:robbin设计产 品功能,ouspec负责界面,jerry编写代码,然后robbin和ouspec负责测试。但并不是所有的项目都可以靠3个人搞定的,大规模应用项目 团队协作进行开发,我们目前还没有答案。

jerry有个观点我非常赞同,他认为目前我们没有找到合适的团队协作方法是因为现在的软件开发方法都不适合ruby on rails开发团队。而真正适合ruby on rails的软件开发方法究竟是什么样子,现在还没有出现,恐怕需要人们的探索了。ruby on rails流行必须伴随着适合ruby on rails的软件开发方法一起出现才行。

因此在人们总结出来这种适合ruby on rails的软件开发方法之前,ruby on rails仍然会被局限在web2.0开发领域,在这个领域,ruby on rails的所有优点将发挥的淋漓尽致,而缺点将会被回避开。不过一旦涉及到企业应用开发领域,我们将面临这些问题。

因此,我的结论就是ruby on rails目前尚且不适合企业应用项目的开发。当然如果有适合ruby on rails的软件开发指导方法的出现,或者企业应用本身的定义已经发生了彻底的改变,那么我的结论也就不复存在了。

用一句话来总结就是:

ruby on rails是武林高手的绝世宝剑,却不是两军对垒中士兵使用的常规作战武器(Java却是这种常规武器)。


BTW:我抛出来这个结论,并不代表我的想法已经很成熟了,事实上这也只是我们第一次尝试使用ruby on rails,在不熟悉不了解的情况下做出结论,未免过于草率,但是我之目的在于抛砖引玉,目前我们在开发中遇到了这些团队协作方面的问题,希望我的抛砖能够引出来好玉,解决这些我们还没有想到很好解决办法的问题,多谢啦,哈哈!


http://www.javaeye.com/topic/24499

标签:

wxWidgets是个好东西

最近一个工具,由于是工具,本来是用SDK编写的,只是功能完成后,对界面不满意,但是苦于手头可用的东东有限。。。

MFC?这玩意儿,我从大三开始研究,把各类宏,消息映射机理,搞得很清楚,看了《深入浅出MFC》不止两次,还搞不出东西,于是又看了 《Programming Windows With MFC》终于好像能搞出一些DEMO, 后来碰到一聊友,说“把MFC扔进垃圾堆,永远不要碰这种东西……”

VCL! 是个好东西,虽然不会Delphi,但C++ Builder也很好用,虽然对C++改了些语法和语意,嘿嘿。 Chuck 和 Anders这两个牛人。

SWT/JFace: 可以说这一年多一直在进行着基于Eclipse的RCP开发,所以对SWT/JFace也很熟悉,而且Java语法优美简洁,比起C++,写起来轻松多了 (不仅是生理上的,而且是心理上的: 这个 new 要不要 delete,不行,应该用RAII, 参数不能是直接是类型,应该改成const引用以避免拷贝…… 哇,不想这些了,自然轻松和愉快)

所以如果对方机子上有JVM,或者允许安装JVM的话, 我会选择SWT/JFace

当然,如果对于大一些的窗口程序,使用 Eclipse RCP 简直酷B了!

偶有一次,在使用Ruby,遇见 wxRuby,这东东的文档中提到了 wxWidgets, 于是就这样结识了它(本人我是古墓派)

于是立马下载,安装,编译,哇噻! 还有许许多多的 samplesssssssssss。除了自带的帮助,我还找到了一本由 Julian Smart(我以后就给我儿子取名叫 "X有钱") 亲自写的《Cross-Platform GUI Programming with wxWidgets》...

然后我把我那个类似于资源管理器的小工具用 wxWidgets 重新写过。 果然不错

我的手头又多了一样武器~~~

http://www.javaeye.com/topic/100094

标签:

星期一, 四月 14, 2008

微软称IE 8将推动网页开发人员技术创新

微软本星期在拉斯维加斯举行的MIX08会议上预展了其下一代网络浏览器.微软首席软件设计师Ray Ozzie称,微软向IE 8的投资将使开发人员和设计师能够为网络应用程序、丰富的客户端软件、移动和其它设备提供广泛的无缝的连接的体验.微软IE团队总经理Dean Hachamovitch表示,IE 8将向网页开发人员提供的功能是他们需要的内置的工具,以帮助减少提供互联网内容的难题和复杂性。

Hachamovitch说,开发人员要做的事情是提供迷人的体验.但是,开发人员要实现这个目的需要花费许多宝贵的时间.当开发人员把更多的时间用于技术创新的时候,网页会变得更好.我们研制IE 8的时候就考虑了这个问题。

微软目前提供的IE 8测试版下载主要是面向开发人员的.开发人员将向微软提供重要的反馈意见.Hachamovitch说,这里的关键是我们现在只完成了部分工作,还有需要工作要做。

Hachamovitch说,IE 8的一个目标是让开发人员迅速制作多种浏览器可以访问的网站.目前浏览器的差别让开发人员浪费了许多时间.微软将采用一些标准以实现互联网兼容性的目标。

IE 8的功能改善了对XML和CSS等标准的支持.IE 8在一个可视化的环境中还提供了快速调试HTML、CSS和JavaScript等程序的工具。

Hachamovitch还披露了IE 8的两项技术创新.这两项技术创新的名称是“Activities”和“Webslices”,能够提高浏览器用户的网络浏览体验。
http://www.onlea.com/blog/article.asp?id=102

标签:

IE8 测试版

IE8

http://www.microsoft.com/downloads/details.aspx?FamilyId=1A2E3DDD-B38B-439D-BBA7-F179A5D3ECAF&displaylang=zh-cn

标签:

星期日, 四月 13, 2008

花神(十二月)

蜡月水仙--花神娥皇与女英(借水开花自一奇,水沉为骨玉为肌。)

  水仙别名金盏银台。水仙开于蜡梅之后、江梅之前,为冬令时花,花如其名,绿裙、青带,亭亭玉立于清波之上,素洁碧玉般的花朵冒雨而开,超尘脱俗,宛如水中仙子。
  水仙的花神相传是娥皇与女英。据说,娥皇、女英是尧帝的女儿,二人同嫁给舜。姊姊为后,妹妹为妃,三人感情甚好,后来,舜在南巡崩驾,娥皇与女即双双殉情于湘江。上天怜悯二人的至情至爱,便将二人的魂魄化为江边水仙,二人也成为蜡月水仙的花神了。
  乐曲由木管吹奏出淡淡的和弦,如湘江粼粼波光。古筝的清雅旋律,形容出水仙犹如凌波仙子的仙姿。高胡柔细的音色,画出水仙的碧叶如带,芳花似杯。雅洁恬静的旋律,散发出沁人心脾的幽香,一如娥皇女英的至情至爱,动人心怀。

标签: ,

花神(十二月)

蜡月水仙--花神娥皇与女英(借水开花自一奇,水沉为骨玉为肌。)

  水仙别名金盏银台。水仙开于蜡梅之后、江梅之前,为冬令时花,花如其名,绿裙、青带,亭亭玉立于清波之上,素洁碧玉般的花朵冒雨而开,超尘脱俗,宛如水中仙子。
  水仙的花神相传是娥皇与女英。据说,娥皇、女英是尧帝的女儿,二人同嫁给舜。姊姊为后,妹妹为妃,三人感情甚好,后来,舜在南巡崩驾,娥皇与女即双双殉情于湘江。上天怜悯二人的至情至爱,便将二人的魂魄化为江边水仙,二人也成为蜡月水仙的花神了。
  乐曲由木管吹奏出淡淡的和弦,如湘江粼粼波光。古筝的清雅旋律,形容出水仙犹如凌波仙子的仙姿。高胡柔细的音色,画出水仙的碧叶如带,芳花似杯。雅洁恬静的旋律,散发出沁人心脾的幽香,一如娥皇女英的至情至爱,动人心怀。

标签: ,

花神(十一月)

十一月山茶--花神白居易(似有浓妆出绛纱,行光一道映朝霞。)

  山茶花开放在寒风细雨的农历十一月,花朵五彩缤纷,有大红,粉红,紫白,纯白等。百的色胜玉,红的如火燃烧淡赤。万紫千红,飘香吐艳,为寒冷的大地增添了几分愉悦的色彩。
  山茶花的花神传说是白居易。白居易是唐代知名的诗人,以“野火烧不尽,春风吹又生。”的诗句,备受称赞而闻名于世。传闻中并没有说明为什么白居易是山茶的花神,或许是诗人不畏强权的性情,如同山茶的不畏寒风细雨吧。
  乐曲在琵琶化成的点点寒风中,进入了云南的山水间。二胡缓缓而出,如微寒的细风轻轻吹拂着山茶绿叶。竹笛明亮的音色,仿佛山茶花自绿叶中吐蕊,朵朵艳丽。

标签: ,

花神(十月)

十月木芙蓉--花神石曼卿(江边谁种木芙蓉,寂寞芳姿照水红。)

  木芙蓉又名木莲,因花“艳如荷花”而得名,另有一种花色朝白暮红的叫做醉芙蓉。木芙蓉属落叶灌木,开在霜降之后,农历十月就可以在江水边,看到她如美人初醉般的花容,与潇洒脱俗的仙姿。
  木芙蓉的花神相传是宋真宗的大学士石曼卿。宋代盛传在虚无缥缈的仙乡,有一个开满红花的芙蓉城。据说在石曼卿死后,仍然有人遇到他,在这场恍然若梦的 相遇中,石曼卿说他已经成为芙蓉城的城主。因为在众多传闻中,以石曼卿的故事流传最广,后人就以石曼卿为十月芙蓉的花神。
  乐曲以笙吹奏出缥缈的乐音,引人进入芙蓉仙乡中。中阮优美的旋律,写出芙蓉城内朵朵湛放的娇面的芙蓉,花光映波,绚丽非常。

标签: ,

花神(九月)

九月菊花--花神陶渊明(飒飒西风满院载,蕊寒香冷蝶难来。)

  农历九月的深秋时分,正是菊花开得最艳的时候,因此又称为菊月。
  在菊花这个璀灿的香国里,有的端雅大方,有的龙飞风舞,有的瑰丽如彩虹,有的洁白赛霜雪,相当迷人。
  菊花的花神相传是陶渊明,菊花的凌霜怒放,性情冷傲高洁,在群芳中备受“不为五斗米折腰”的陶渊明喜爱,更为菊花写下“采菊东篱下,悠然见南山”的千古佳句,菊花的花神自然非他莫属了。
  乐曲改编自古曲,古琴的淡雅之音,写出菊花独立秋霜的傲骨。笙乐飘飘如秋风阵阵,古朴而典雅的旋律,形容出菊花淡泊独立的精神,与陶渊明隐世而清静自得的情怀。

标签: ,

花神(八月)

八月桂花--花神徐惠(暗淡轻黄体性柔,情疏迹远只香留。)

  丹桂花又名木犀,丹桂,好生于岩领间,花族开与叶腋,黄色或黄白色,香气极浓。八月桂花香,因此农历八月又称为桂月。
  桂花的花神相传的唐太宗的妃子徐惠。徐惠生与湖州长城,自小就聪慧过人,五月大就会说话,四岁就能读论语,八岁能写诗文。因为才思不凡,被唐太宗招入宫中,封为才人。太宗死后,徐惠哀伤成疾,二十四岁就以身殉情。后世就封这位才情不凡的女子为桂花的花神。
  乐曲以月夜为背景。箫声在虫卿的中吹奏出朦胧月色,筝音点点宛如一族族的桂花吐香。二胡柔美的弦音,淡淡的道出花神徐惠的款款深情。佳人之情,宛如桂花飘香,动人心肺。

标签: ,

花神(七月)

七月蜀葵--花神李夫人(锦水绕花篮,岷山带叶青。)

  蜀葵,植株修长而挺立,开于夏末秋初,花朵大而娇媚,颜色五彩斑斓,其中,黄蜀葵又称为秋葵,在诗经中就餐曾提及“七月菱葵叔”,葵指的就是黄菱葵。秋葵是一种朝开暮落的花,一般人说的“昨日黄花”,就是以秋葵为写照。
  菱葵花的花神相传是汉武帝的宠妃李夫人。李夫人的兄长李延年曾为他写一极其动人的歌,即:“北方有佳人,绝世而独立,一顾倾人城,再顾倾人国,倾城与倾国,佳人难再得。”由于李夫人极早逝,短暂而又绚丽的生命,宛如秋葵一般,所以人们就以她为七月蜀葵的花神了。
  乐曲在鸟鸣一笙、笛轻柔音乐中,花出蜀地的秀丽山水。排箫绽放出蜀葵娇媚的颜色,宛如李夫人倾城倾国的笑面。葫芦丝演奏出轻歌曼舞的旋律,仿佛蜀葵俏丽的花朵随风尽情起舞,在迷人的夕照中,随风而逝。

标签: ,

花神(六月)

六月莲花--花神西施(年年越溪女,相忆采芙蓉。)

  农历六月俗称荷月,荷花既莲花。莲花生于碧波之中,以“出淤泥而不染”著称,且花大叶丽,清香远溢,因此自古即深受人们喜爱。
  莲花的花神相传是绝代美女西施。传说中。西施在助越灭吴之前,是卖柴人家之女,夏日荷花盛开时,西施常到镜湖采莲,也许因为西施曾是六月时节的采莲女,她美丽的身影无人能比,于是就自然成为莲花的花神了。
乐曲中,排箫绵绵远飘的音韵,画出如碧波般的莲乐,清远的女声,飘送出莲花清香。舒展悠扬的旋律中,令人想见吴越佳人驾一叶清舟,在莲中采莲的动人情景。

标签: ,

花神(五月)

五月石榴--花神锺道(微雨过,小荷翻,榴花开欲燃。)

  俗称农历五月是榴月,五月盛开的石榴花,艳红似火,有着火一般的光辉,因此许多女子都喜欢榴花戴在云鬓上,增添娇艳。
  石榴花的花神传说是锺道,五月是疾病最容易流行的季节。于是,民间传说的“鬼王”锺道,便成为人们信仰的主要对象,生前性情十分暴烈正直的锺道,死后 更誓言除尽天下妖魔鬼怪。其嫉恶如仇的火样性格,恰如石榴迎火而出的刚烈性情,因此,大家就把能驱鬼除恶的锺道视为石榴花的花神。
  乐曲以月夜为背景,在自然鸟鸣,潺潺流水中,轻柔的笙乐如月光般照在火红的石榴上,点点娇艳。月夜看榴花,除却了几分暑热,也对了几分柔情。

标签: ,

花神(四月)

四月牡丹--花神李白(国色朝酣酒,天香夜染衣。)

牡丹,开于农历四月,唐代人以起香浓色艳,有富贵之枝,而对牡丹为“花王”,直到今日,世人仍爱其国色天香。
  牡丹的花神传说众多,或说貂婵,或说丽娟(汉武帝的宠妃),但是以李百最为知名。有一回,唐玄宗偕同杨贵妃在沉香亭赏牡丹,一时兴起,与李白进宫写三章《清平乐》:
“云想衣裳花想容,春风拂槛露华浓。若非群玉山头见,会向瑶台月下逢。”
“一枝红艳露凝香, 云雨巫山枉断肠。借问汉宫谁得似, 可怜飞燕倚新妆。 ”
“名花倾国两相欢, 常得君王带笑看。解释春风无限恨, 沉香亭北倚阑干。”
  乐曲以排萧宽远的曲调,展现牡丹层层绽放的娇颜。柔美的女声,宛如花香弥漫天际,使人深深迷醉。

标签: ,

花神(三月)

三月桃花--花神息夫人(西塞山前白鹭飞,桃花流水鳜鱼肥。)

  同属木本蔷薇科的桃花盛开与农历三月,一般又称为桃月。桃花姿态优美,花朵丰腴,色彩艳丽,长被誉为美人,盛开时明媚如画,犹如仙境,乃有所谓的“世外桃源”。
  桃花的花神最早相传是春秋时代楚国息侯的夫人,息侯在一场政变中,被楚文王所灭。楚文王贪图息夫人的美色,意欲强娶,息夫人不肯,乘机偷偷出宫去找息侯,息侯自杀,息夫人也随之殉情。此时正是桃花盛开的三月,楚人感念息夫人的坚贞,就立伺祭拜,也称她为桃花神。
  乐曲以清脆的鸟鸣与笛音引动明媚的春色,古筝、笛、琵琶演奏出明亮、跃动、色彩缤纷的旋律,如桃花绽放,如美人笑面,写成一幅与世隔绝的桃花源地。

标签: ,

花神(二月)

二月杏花--花神杨贵妃(沾衣不湿杏花雨,吹面不寒杨柳风。)

  杏花属木本蔷薇科落叶树,花朵娇小可爱,而成片的杏花林。景色更是奇丽。农历而月又称杏月,正是杏花初放之时,朵朵美若天仙,柔媚动人。
  杏花的花神相传是杨贵妃。杨贵妃虽然身系唐玄宗的三千宠爱于一身,但是在安史之乱时,马兵变,玄宗不得及应军士之求杀了杨贵妃。当时,众人将杨贵妃的 尸体悬挂在佛堂前的杏树上。平乱之后,玄宗派人取会尸骨移葬时,只见一片雪百的杏花迎风而舞。玄宗回宫后,命道士寻找杨贵妃的魂魄,此时的杨贵妃已在仙山 上。司职二月杏花的花神了。
  乐曲在箫与筝的交替中,隐隐如杏花飘香,浅淡的音乐,如杏花临波而立,花瓣在微风中似雪班缓缓飘落。似雪花瓣,化做杨贵妃倩影随风而逝。

标签: ,

花神

正月梅花--花神寿阳公主(影斜清浅处,香度黄昏时。)

  梅花,关于雪花飘飘的岁寒早春时,一般人为是农历正月的代表花。其冰清玉洁,一身傲骨尤其为世人钟爱。
  梅花的花神相传是宋武帝的女儿寿阳公主。在某一年的正月初七,寿阳公主到宫里梅花林赏梅,一时困倦,就在殿檐下小睡,正巧有朵梅花轻轻飘飘落在她的额 上,留下五瓣淡淡红色的痕迹,寿阳公主醒后,宫女都觉得原本嫵媚动人的她,又因梅花瓣而更添几分美感,于是纷纷效仿,以梅花印在额头上,称为“梅花妆”。 世人便传说公主是梅花的精灵变成的,因此寿阳公主就成了梅花的花神。
  音乐以清淡的古筝,悠扬的曲笛,沉静的洞萧,交织出一片梅花枝影横斜的天地,有如仙境。钢片琴穿梭其间,宛如雪飞,宛如梅香,恍惚中,恰似有寿阳公主翩翩而至。

标签: ,

推荐音乐:花神

最近在听这2张,感觉十分好。
点击查看原图片screen.width-468)this.width=screen.width-468" border="0">

TCD-4505
花神

制作人 :杨秀兰、欧阳谦
制作群 :
作曲:史志有
演出:林文增、戴亚、张强等
发行日期:1996/3/26

傲视世界乐坛、深受各国喜爱的中国新世纪音乐。以一到六月中的花与花神为主题,将音乐纳入花的芳姿与花神的美丽传说中。

掬水月在手,弄花香满衣。
  花是天地灵秀之所钟,美的化身,赏花,在于悦其姿色而知其神骨,如此方能遨游在每一种花的独特韵味中,而深得其中情趣。如古人所言:“梅标清骨,兰挺幽芳,茶呈雅韵,李谢弄妆,杏娇疏丽,菊傲严霜,水仙冰肌玉肤,牡丹国色天香,玉树亭亭皆砌,金莲冉冉池塘,丹桂飘香月窟,芙蓉冷艳寒江。”
  花的独特性情便在这清、幽、雅、丽。。。。。。间,一览无遗,成为赏花者美好的心灵享受。
  花,因季节时节地势的不听而与人不同的气质与美感。所谓“冷艳清香受雪知,雨中谁把蜡为衣”是梅花的美;“锦烂重阳节到时,繁华梦里傲霜枝”,是菊花的美。出谷送香非不远,那能送到俗尘中”,是兰花的美。自古至今,许多骚人墨客都为花写下动人篇章,在这些艺术作品中,花已经成为一种心的向往与绝美的精神境界,深深的美化人们的心。

  古人借以诗画表达花的意境,“花乐”系列的制作,则皆于音乐来描绘花的神韵,希望听者能随旋律的流动,进入花的神妙之中,让花的美深驻心灵,使生命宛如一种开花,成为永恒的喜乐。

作者:史志友
一九七九年毕业于北京中央音乐学院,获作曲、指挥双学位,师承著名作曲家赵行道以及著名指挥家黄立飞教授,现为中国音乐家协会会员、中国歌剧舞剧院交响乐指挥。
史志友先生曾指挥过多部著名作曲家的大型交响乐作品,如施光男的《伤逝》、石夫的《古兰丹姆》、阿隆·阿甫夏洛穆夫的《孟姜女》、鲁德继格·名古斯的《唐吉柯德》等。史先生的曲作形式多样、得奖无数,舞蹈音乐《咏剑》获一九八零年中国大陆优秀作品奖,电影音乐《万里长征》获一九八一年电影百花奖,《万紫千红》获一九八七年全大陆比赛金奖,其名被收录于《中国音乐家名录》、《中国当代艺术名人录》、《中国当代青年名人辞典》中。

十二月令花与花神

一枝淡贮书天下,人与花心各自香
  传说农历二月十二是百花的生日,人们称之为“花朝”,因此民间便有一个“花朝”之庆。而随着季节时令的替换,百花也以各种不同的容颜缤纷了大地。百花的玉容笑貌。为人们的生活平添了无数浪漫情趣。爱花惜花之人,自然也为百花留下许多动人的传说。因此,在中国,百花各有其司花之神,也各拥有一段美丽的故事。
  在百花的传说中,以农历中的十二个月令的代表花,与司十二月令花神的传说最令人神往。花的美原是浑然天成,无可比较,这十二月的令的花与花神,或因地区不同以及个人的喜爱而有些差异,其中最广受人流传的,则分别是正月梅花--寿阳公主,二月杏花--杨贵妃,三月桃花--息夫人,四月牡丹--李白,五月石榴--锺道,六月莲花--西施,七月蜀葵--李夫人、八月桂花--徐惠,九月菊花--陶渊明,十月木芙蓉--石曼卿,十一月山茶--白居易,蜡月水仙 --娥皇与女英。
  花神既是以这十二月令的代表花与花神为主题,音乐中结合了花的动人芳姿,与花神的美丽传说。音乐家运用了自然山水的音声,结合传统乐器古筝,笛,二胡,排萧等,以中国新世纪风格的动人旋律,写下了花与神间所有的美好情缘,也写下了传诵千古的佳话。

上:http://www.yourblog.org/Data/200412/196929.html
下:http://www.yourblog.org/Data/200412/196933.html

标签: , ,

星期六, 四月 12, 2008

utf-8网页在ie下显示空白的解决方法

自己测试的,不一定100%准确,仅供参考。

触发条件:
1. title标签里的内容为中文其他双字节字符
2. 指定网页编码的 meta 信息在 title 标签的下方,即
<title>中文或其他双字节字符title</title>

<meta equiv="Content-Type" content="text/html; charset=utf-8">
3. 另存或转换utf-8编码时没有包括 unicode 签名 (BOM)

满足以上三个条件后网页里的任何内容在IE6下都无法显示出来,解决办法:不要同时满足这三个条件即可...
http://www.cublog.cn/u/20718/showart.php?id=215049

经过测试,我的blog就是这个原因,调整次序之后OK。
本次google搜索条件:IE6 UTF8

标签: ,

星期四, 四月 10, 2008

诗经·国风·召南·摽有梅

想起有个汉服美女叫摽有梅,忘了第一个字读什么了。古典的东西要常温习才好。


摽有梅,其实七兮。求我庶士,迨其吉兮。

摽有梅,其实三兮。求我庶士,迨其今兮。

摽有梅,顷筐塈之。求我庶士,迨其谓之。

  [注释]

  1、摽(biào):坠落。有:助词。

  2、七:十分之七。后文中的三指十分之三。

  3、庶:众。

  4、迨(dài):及,趁着。

  5、塈(jì):取。

  6、谓:通“归”,指女子出嫁。

  [参考译文]

  枝头梅子落纷纷,树上还留有七成!追求我的小伙子,不要错过好时辰!

  枝头梅子落纷纷,树上只留有三成!追求我的小伙子,今天就是好时辰!

  梅子全部落下来,倾尽筐子让他取!追求我的小伙子,趁着时机嫁给他!


http://www.mxms.net/html/6/46/136/2006/5/ga9954181515151560022862-0.htm

标签:

随笔2

有关杨二,我只能说以我的智商感觉她挺二。

标签:

随笔

今天发现访问量好少,因为以前多是搜索wxWidgets,估计今天大家都没学。

标签:

使用 PHP 创建图形的巧妙方法

Jack Herrington (jack_d_herrington@codegeneration.net), 高级软件工程师, "Code Generation Network"

2006 年 1 月 04 日

本文将展示如何使用 PHP 构建面向对象的图形层。使用面向对象的系统可以用来构建复杂的图形,这比使用标准 PHP 库中所提供的基本功能来构建图形简单很多。

我将图形编辑程序分为两类:一类是绘图程序,利用这种程序可以一个像素一个像素地绘制图像;另外一类是制图程序,这种程序提供了一组对象,例如线、 椭圆和矩形,您可以使用这些对象来组合成一幅大图像,例如 JPEG。绘图程序非常适合进行像素级的控制。但是对于业务图形来说,制图程序是比较好的方式,因为大部分图形都是由矩形、线和椭圆组成的。

PHP 内置的制图基本操作与绘图程序非常类似。它们对于绘制图像来说功能非常强大;但是如果您希望自己的图像是一组对象集合时,这就不太适合了。本文将向您展示如何在 PHP 图形库的基础上构建一个面向对象的图形库。您将使用 PHP V5 中提供的面向对象的扩展。

具有面向对象的图形支持之后,您的图形代码就非常容易理解和维护了。您可能还需要从一种单一的图形源将图形合成为多种类型的媒介:Flash 电影、SVG 等等。

More detail: http://www.ibm.com/developerworks/cn/opensource/os-objorient/

标签: ,

星期三, 四月 09, 2008

phpMyVisites

phpMyVisites是一个网站流量统计系统,它能够提供非常详细的统计报告和高级图形报表。phpMyVisites不是一个Apache log分析工具,它建有自己的log。它的特点包括:
  • 安装部署:提供可视化的安装向导,并且使用简单只要把一段简单的Javascript代码添加到你网站的页面中就能够马上开始收集访问者的信息。
  • 一个简洁,友好的界面可用来展示数据和帮助数据分析。
  • 提供简洁,明了的图形分析报表。
  • 安全:phpMyVisites能够最大限度地阻止入侵和外部攻击。
  • 支持多网站统计
  • 多用户:可以添加无限个用户并对每个用户赋予不同的管理权限(针对某一个网站的查看和管理的权限)。
  • 国际化支持:phpMyVisites提供30种语言包。
  • 能够准确统计一段时间内的访问量(天/周/月/年)。
  • 访问者的回头率:新访问者,经常访问者,有规律性的访问者。
  • 提供多种文件格式的统计报告(PDF,Image等)。
  • 对被统计的网页进行分组/分级。
  • 访问者分析:统计访问者是从哪个页面离开网站的和从哪个页面进入网站或通过哪个搜索引擎的关健字进入网站,在网站的停留时间,所访问的页面等。
  • 可通过e-mail或RSS聚合获取网站的流量信息。
http://www.phpmyvisites.net/

标签: ,

ADOConnect时如何根据返回信息判断

try
...
Except
if TADOconnection.Errors.Count>0 then
Case TADOconnection.Errors[0].NativeError of
xx:...
End;
End;
TADOconnection.Errors[0].NativeError中返回的是数据库原始错误编号,根据此编号查数据库帮助就可以得知具体的错误信息。比如Oracle的1005,1017号就是用户名或密码错,12154是服务器不存在。

TADOconnection.Errors[0].Description
TADOconnection.Errors[0].Number

http://topic.csdn.net/t/20011006/23/313923.html

标签: ,

跟我学SQL:(七)从子表里删除数据

在这篇文章里我要描述一下如何从表格里删除列,要删除的这些列同时还要依赖于其他表格的标准。要解决这个问题就需要一个很聪明而且完全遵守SQL92子查询声明的应用程序。
我必须提醒读者的是,尽管查询可能会遵守SQL的标准,但是众多的数据库生产商会以不同的句法支持实现SQL。以下这个解决方案应该适合于大多数数据库; 但是,如果你的结果有出入,就还是应该查看一下文档。同时,由于这个查询要处理DELETE声明,所以你应该在将其应用于真实的生产环境以前在实验数据上 进行测试。

需要更多的背景信息?
查看这些文章就能快速上路:
《SQL基础I查数据查询》涉及到了DELETE查询的使用。
《使用SQL子选项来合并查询》说明子选项查询能够减少对数据库请求的数量,并提供了例子。
《SQL基础:查询多个表》提供了更多关于子选项的信息,还讲到了使用单个查询就能访问多个表格的多种其他方法。

宠物店的例子
要解释如何进行这种类型的列删除,我会使用如下这个数据库的表格,该数据库叫做PetStore,并包含有清单(inventory)信息。在叫做“品种 (breed)”的表A里,我存储有每种动物的信息和宠物店库存的信息。在叫做“清单”的表B里,包含有商店里特定动物的信息。

在这个例子里,我们先假设商店把整窝Shitzu小狗都卖完了。我可以使用breed表格里的breed_id字段来删除Shitzu清单里的所有项目,就像这样:

DELETE FROM inventory WHERE breed_id IN
(SELECT breed_id FROM breed WHERE breed_name = ‘Shitzu’);

首先,我要指定需要删除记录的表格,在这里是清单表格。然后再将识别字段breed_id同子选项子句的结果反复比对。我知道要找的是Shitzus,所以就能直接删掉他们,而不用再在单独的请求里查询breed_id。

我必须要警告你的是,以这种方式使用DELETE声明是危险的,只有在你对数据库的结构很熟悉的情况下才能使用这些声明。DELETE查询会从受影响的表 格里删除掉全部列,你应该知道这对你所管理着的数据意味着什么。有个好办法是使用SELETE *这个短语替代DELETE关键字来对DELETE声明的子查询结果进行测试,这样就能保证结果里含有你要删除的所有东西,就像这样:

SELECT * FROM inventory WHERE breed_id IN
(SELECT breed_id FROM breed WHERE breed_name = ‘Shitzu’);

DELETE和JOIN联用
有人问到了解决这个问题另一个可能的办法:把JOIN子句和DELETE声明联合使用。由于以前没有使用过这种方法,我就研究了一下,发现SQL Server的文档声明支持这个方法,尽管它不符合SQL92。在经过测试和询问各种数据库平台的老手之后,我发现把DELETE和JOIN声明联合使用 在我测试过的任何平台上都行不通。

从多个表格里一次删除
以上的解决方案还没有解释如何使用父表从多个子表里删除信息。但是SQL92规范里没有提供完成这项任务的标准解决方案。

DELETE的声明不能把多个表格作为一个参数接受。作为一个具有破坏性的查询,这能保证在命令要被执行的地方不会出现歧义。此外,这个限制防止了在单个 声明内将AND和多个子查询联用。如果测试SELECT声明的结果用以检查DELETE查询将要影响到的是哪些数据,你会发现SELECT会返回多个表格 的清单,DELETE不会影响到的多个子查询不在其中。

有很多可能的方法能够满足你的需求,例如在表格里创建一个字段,用以指明该项目是否为活动的。或者,你可以使用一些数据库里的预存程序在每个所需的DELETE查询里迭代。

http://bbs.jcwcn.com/thread-7099-1-11.html

标签:

Get text from the control at pos x,y on screen

From Zarko Gajic

This form has 3 labels and a timer component: ~~~~~~~~~~~~~~~~~~~~~~~~~
unit unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure FormCreate(Sender: TObject) ;
procedure Timer1Timer(Sender: TObject) ;
private
procedure ShowHwndAndClassName(CrPos: TPoint) ;
public
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ShowHwndAndClassName(CrPos: TPoint) ;
var
hWnd: THandle;
aName,
Text : array [0..255] of char;
begin
hWnd := WindowFromPoint(CrPos) ;
Label1.Caption := 'Handle : ' + IntToStr(hWnd) ;

if boolean(GetClassName(hWnd, aName, 256)) then
Label2.Caption := 'ClassName : ' + string(aName)
else
Label2.Caption := 'ClassName : not found';
SendMessage(hWnd, WM_GETTEXT,
SizeOf(Text), integer(@Text)) ;
Label3.Caption := 'Text :' + Text;
end;

procedure TForm1.FormCreate(Sender: TObject) ;
begin
Form1.FormStyle := fsStayOnTop;
Timer1.Interval := 50;
end;

procedure TForm1.Timer1Timer(Sender: TObject) ;
var
rPos: TPoint;
begin
if boolean(GetCursorPos(rPos))
then ShowHwndAndClassName(rPos) ;
end;
end.

http://delphi.about.com/cs/adptips2000/a/bltip1200_2.htm

标签:

星期二, 四月 08, 2008

aSSL PHP library for SSL

aSSL is a library distributed under MIT License thats implements a technology similar to SSL without HTTPS.

aSSL enables the client to negotiate a secret random 128-bit key with the server using the RSA algorithm. Once the connection has been established, the data will be sent and received using AES algorithm.

aSSL is composed of some Javascript files and a server side component. Because I have recently changed the negotiation algoritm from RC4 to RSA, only a pure Javascript (ASP) server component is currently available. I will do a porting for the main web languages (PHP, Java, Perl, Python, TKL, etc.) as soon as possible once the library has passed the beta phase.

http://assl.sullof.com/assl/

标签:

Introduction to wxWidgets

Introduction

wxWidgets formerly known as wxWindows is a framework for developing cross-platform GUI applications in C++. Julian Smart started the framework in 1992 at the Artificial Intelligence Applications Institute, University of Edinburgh. In 1995, a port to Xt was released by Markus Holzem. In May 1997, the Windows and the GTK+ ports were merged and put into a CVS repository.

What is wxWidgets

wxWidgets gives you a single, easy-to-use API for writing GUI applications on multiple platforms. Link it with the appropriate library for your platform (Windows/Unix/Mac) and compiler (almost any popular C++ compiler), and your application will adopt the look and feel appropriate to that platform. On top of the great GUI functionality, wxWindows gives you: online help, network programming, streams, clipboard and drag and drop, multithreading, image loading and saving in a variety of popular formats, database support, HTML viewing and printing, and much more.

Who should use wxWidgets

wxWidgets is a framework very much similar to MFC, except for a few negative points of its own. Those MFC programmers who are aware of the growing number of Linux users and who want to write cross platform GUI applications can use wxWidgets. With wxWidgets, it is very easy to use a framework based on C++ and it has a proven record of 13 years. In fact, wxWidgets is very stable and is supported on:

  • Windows 3.1, Windows 95/98, Windows NT, Windows 2000/XP, Windows ME, Windows CE.
  • Linux and other UNIX platforms with GTK+.
  • UNIX with Motif or the free Motif clone Lesstif.
  • Mac OS.
  • Embedded platforms are being investigated. See the wxUniversal project.
  • An OS/2 port is in progress, and you can also compile wxWidgets for GTK+ or Motif on OS/2.
http://www.codeproject.com/KB/library/wxwidgets.aspx

标签: ,

wxWidgets组件

http://wxcode.sourceforge.net/complist.php

标签:

Word: microblogging

microblogging pp. Posting short thoughts and ideas to a personal blog, particularly by using instant messaging software or a cell phone. Also: micro-blogging.
microblog v., n.
microblogger n.

Example Citations:
Twitter, which was created by a 10-person start-up in San Francisco called Obvious, is a heady mixture of messaging; social networking of the sort associated with Web sites like MySpace; the terse, jittery personal revelations of 'microblogging' found on services like Jaiku; and something called 'presence,' shorthand for the idea that people should enjoy an 'always on' virtual omnipresence.
—Jason Pontin, "From Many Tweets, One Loud Voice on the Internet," The New York Times, April 22, 2007

Fotolog, a fast-growing social networking website, has become the latest target of larger internet media players, according to people close to the company. ...

Users can exchange thoughts and feedback around uploaded photos, and a deal with AOL this month added chat, instant messaging and video messaging. It has more than 8m account holders and a broad global reach. It is adding nearly 1m members a month. Fotolog sees itself as part of a new micro-blogging trend where users are opting for simpler and shorter inputs into their own personal home pages.
—Chris Nuttall, "Fotolog in the picture as bid target," Financial Times, May 21, 2007

Earliest Citation:
Only micro-blogging today. It's Sports Day. Oh, can I make a date with you all for about this time in the year 2012? By that time my offspring will be, I trust, all grown up, loaded with achievements and equipped with stratospheric levels of self-esteem. I will then feel free to tell some very funny stories about the egg and spoon race back in 2002.
—Natalie Solent, archive, Natalie Solent (blog), July 17, 2002

Notes:
Here's an even earlier citation, although one that uses microblogging in a different sense (blogging personal throughts and feelings, of any length):

The blogs I like to read are the personal, those individual portraits of the human heart, blogs about lives and losses, realizations, aspirations, fears; bloggers who open their closets, skeletons and all.
—Jeneane Sessum, "Microblogging," Allied, April 12, 2002
http://www.wordspy.com/words/microblogging.asp

标签: ,

wxDb/wxDbTable wxODBC Overview

he wxODBC classes were designed for database independence. Although SQL and ODBC both have standards which define the minimum requirements they must support to be in compliance with specifications, different database vendors may implement things slightly differently. One example of this is that Oracle requires all user names for the datasources to be supplied in uppercase characters. In situations like this, the wxODBC classes have been written to make this transparent to the programmer when using functions that require database-specific syntax.

Currently several major databases, along with other widely used databases, have been tested and supported through the wxODBC classes. The list of supported databases is certain to grow as more users start implementing software with these classes, but at the time of the writing of this document, users have successfully used the classes with the following datasources:

  • DB2
  • DBase (IV, V)**
  • Firebird
  • INFORMIX
  • Interbase
  • MS SQL Server (v7 - minimal testing)
  • MS Access (97, 2000, 2002, and 2003)
  • MySQL (2.x and 3.5 - use the 2.5x drivers though)
  • Oracle (v7, v8, v8i)
  • Pervasive SQL
  • PostgreSQL
  • Sybase (ASA and ASE)
  • XBase Sequiter
  • VIRTUOSO

An up-to-date list can be obtained by looking in the comments of the function wxDb::Dbms in db.cpp, or in the enumerated type wxDBMS in db.h.

**dBase is not truly an ODBC datasource, but there are drivers which can emulate much of the functionality of an ODBC connection to a dBase table. See the wxODBC Known Issues section of this overview for details.

http://docs.wxwidgets.org/2.8.0/wx_odbcoverview.html#wxodbcconfiguringyoursystem

标签: , ,

Runtime class information (aka RTTI) overview

One of the failings of C++ used to be that no run-time information was provided about a class and its position in the inheritance hierarchy. Another, which still persists, is that instances of a class cannot be created just by knowing the name of a class, which makes facilities such as persistent storage hard to implement.

Most C++ GUI frameworks overcome these limitations by means of a set of macros and functions and wxWidgets is no exception. As it originated before the addition of RTTI to the C++ standard and as support for it is still missing from some (albeit old) compilers, wxWidgets doesn't (yet) use it, but provides its own macro-based RTTI system.

In the future, the standard C++ RTTI will be used though and you're encouraged to use whenever possible the wxDynamicCast() macro which, for the implementations that support it, is defined just as dynamic_cast<> and uses wxWidgets RTTI for all the others. This macro is limited to wxWidgets classes only and only works with pointers (unlike the real dynamic_cast<> which also accepts references).

Each class that you wish to be known to the type system should have a macro such as DECLARE_DYNAMIC_CLASS just inside the class declaration. The macro IMPLEMENT_DYNAMIC_CLASS should be in the implementation file. Note that these are entirely optional; use them if you wish to check object types, or create instances of classes using the class name. However, it is good to get into the habit of adding these macros for all classes.

Variations on these macros are used for multiple inheritance, and abstract classes that cannot be instantiated dynamically or otherwise.

DECLARE_DYNAMIC_CLASS inserts a static wxClassInfo declaration into the class, initialized by IMPLEMENT_DYNAMIC_CLASS. When initialized, the wxClassInfo object inserts itself into a linked list (accessed through wxClassInfo::first and wxClassInfo::next pointers). The linked list is fully created by the time all global initialisation is done.

IMPLEMENT_DYNAMIC_CLASS is a macro that not only initialises the static wxClassInfo member, but defines a global function capable of creating a dynamic object of the class in question. A pointer to this function is stored in wxClassInfo, and is used when an object should be created dynamically.

wxObject::IsKindOf uses the linked list of wxClassInfo. It takes a wxClassInfo argument, so use CLASSINFO(className) to return an appropriate wxClassInfo pointer to use in this function.

The function wxCreateDynamicObject can be used to construct a new object of a given type, by supplying a string name. If you have a pointer to the wxClassInfo object instead, then you can simply call wxClassInfo::CreateObject.

http://docs.wxwidgets.org/stable/wx_runtimeclassoverview.html

标签: ,

http://www.xml4wx.org/

XML for wxWidgets is an open source XML parser writen in C++ for use with the wxWidgets cross platform GUI toolkit. This is not the same classes/library included with wxWidgets, but a complete re-write.
  • Designed to be as reasonably standards compliant as possible
  • Includes DOM 1.0, XPath 1.0, XSLT 1.0 and SAX-like implementation
  • Many convienience functions for common functionality makes it easy to use
  • Completely embedable - link your project with the static library
  • Inheritable class structure allows creation of special-use DOM's
  • Easily extendable XPath and XSLT functions so that you can implement the functions you need
  • The open source, relativly simple design makes it easy to solve issues while developing

The biggest feature is that it is a piece of cake to work with an in memory XML Document from your C++ code. Instead of having to write specialized C++ classes/structures to represent your xml, you can simply use the iDOMDocument as-is. You can think of the XML4WX DOM as a giant Hash table that also has a stateless search and reporting engines built in.

Other XML DOMS (xmllib2, Xerces, MS XML) require you to write large ammounts of C++ code to access the data. If your xml changes, you'll have to re-write the container classes and re-compile your application. With XML4WX, if you write your XPath queries carefully, your C++ code will continue to work.

标签: , ,

星期一, 四月 07, 2008

Microblogging

PlayTalk 是又一个 microblogging 平台,类似于 Twitter,可记录生活的点滴,不过单条信息的内容上限达到了 250 字符,具备日语、英语、中文和韩文四国语言界面,还整合了电子地图,可在电子地图上实时显示不同地区更新的情况。

MicroBlogging的几大网站:
www.twitter.com
www.fanfou.com
www.jiwai.de
www.ilaodao.cn
www.taotao.com

看这几个网站都不是我想要的类型。。

标签:

使用wxWidgets的开源项目

http://sourceforge.net/projects/multiget/

标签: ,

Creating Nice Reports with wxWidgets ZIP API

wxWidgets contains a set of classes which handle several archive formats. Most commonly used archive format is ZIP. This tutorial shows how to use wxWidgets API for reading and writing ZIP-files.
As you probably know, Microsoft Office 2007 produces .DOCX files which are ZIP archives which contain several XML files, images and few directories inside. After visiting Microsoft Developer’s Days I decided to add new feature to my current project and create new type of report which is based on .DOCX file format. This tutorial contains some techniques which you can use for generating such reports by yourself.
First of all, we have to open Microsoft Word 2007 and create a stub document. The document which is used in this article contains:
- Heade
- Textual description
- Table with two columns
- Image at the bottom of the table

http://wxwidgets.info/zip_api_create_docx_file_en

标签:

使用wxWidgets的总体框架

下午又尝试了使用wxWidgets做一个稍微完整一点的界面,虽然简单,但都包含了wxWidgets的基本编程"框架"了.说框架夸张了点,吓人用的,^_^
程序里面已经包含了非常详细的注释了,哈哈,突然想起了文学编程!

/////////////////////////

//TextEditorApp.h头文件//

*///////////////////////

#ifndef TEXTEDITORAPP_H
#define TEXTEDITORAPP_H

//每个wxWidgets程序需要定义一个wxApp类的子类
//需要创建并且只能创建一个这个类的实例
//这个实例控制着整个程序的执行!
class TextEditorApp : public wxApp
{
public:
//继承自wxApp的子类至少需要定义OnInit()函数
//这个函数类似于WinMain,wxWidgets准备运行代码时会调用这个函数
virtual bool OnInit();
//这个函数创建至少一个窗口实例,对传入的命令行参数进行解析等
//如果这个函数返回真,wxWidgets将开始时间循环接受/处理用户输入
//如果返回为假,那么wxWidgets将会释放内部分配的资源,然后结束整个的程序的运行
};
//当wxWidgets创建这个TextEditorApp类实例的时候
//会将创建的结果赋值给一个全局变量wxTheApp
//可以直接在程序中使用这个变量,但是需要进行从wxApp到TextEditorApp类型强制转换
//增加了下面一行后,可以调用wxGetApp()函数
//这个函数返回一个到TextEditorApp的实例引用
DECLARE_APP(TextEditorApp)
#endif // TEXTEDITORAPP_H

///////////////////////////

//TextEditorApp.cpp 源文件//

///////////////////////////

// 对支持预编译编译器要包含"wx/wx.h"
#include "wx/wxprec.h"
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif

#include "TextEditorApp.h"
#include "TextFrame.h"
//这里没有创建TextEditorApp的代码!这是在wxWidgets内部实现的!
//你需要告诉wxWidgets创建那个App类实例,就是通过这个宏实现的
IMPLEMENT_APP(TextEditorApp)
//这个宏会检查编译应用程序使用的库文件是否和当前的库文件相匹配

bool TextEditorApp::OnInit()
{
TextFrame *frame = new TextFrame("Simple Text Editor", 100, 100, 400, 300);
frame->Show(TRUE);
SetTopWindow(frame);
return true;
}

上面就是程序的总体框架了,程序就是从这里开始执行的,下面时程序的窗体部分:

///////////////////////////

//TextFrame.h 头文件 //

//////////////////////////

#ifndef _TEXTFRAME_H
#define _TEXTFRAME_H

//一个Frame窗口是一个可以容纳别的窗口的顶层窗口
class TextFrame : public wxFrame
{
public:
//构造函数. 用来创建新的TextFrame
TextFrame(const wxChar *title, int xpos, int ypos, int width, int height);
//析构函数
~TextFrame();

//菜单处理事件
//每个方法都有一个参数用来包含事件的信息
//从菜单获得的事件是一个wxCommandEvent类型的数据
void OnMenuFileOpen(wxCommandEvent &event);
void OnMenuFileSave(wxCommandEvent &event);
void OnMenuFileQuit(wxCommandEvent &event);
void OnMenuInfoAbout(wxCommandEvent &event);
protected:
//要处理事件的每个类都需要声明一个事件表
//宏DECLARE_EVENT_TABLE用来完成这项工作
DECLARE_EVENT_TABLE()
private:
wxTextCtrl *m_pTextCtrl;
wxMenuBar *m_pMenuBar;
wxMenu *m_pFileMenu;
wxMenu *m_pInfoMenu;
enum
{
MENU_FILE_OPEN,
MENU_FILE_SAVE,
MENU_FILE_QUIT,
MENU_INFO_ABOUT
};
};
#endif //_TEXTFRAME_H

///////////////////////

// TextFrame.cpp源文件//

///////////////////////

// 对支持预编译编译器要包含"wx/wx.h"
#include "wx/wxprec.h"
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "TextFrame.h"
TextFrame::TextFrame(const wxChar *title, int xpos, int ypos, int width, int height)
: wxFrame((wxFrame *) NULL, -1, title, wxPoint(xpos, ypos), wxSize(width, height))
{
//假如想给程序加上图标,应该使用下面的语句
//SetIcon(wxIcon(mondrian_xpm));
//此前应该加入一个xpm格式的图片
//#include "modrian.xpm"
//xpm其实是一个ASCII编码的完全符合c++语法的文本文件,所以可以直接用c++的方式包含到代码中
//SetIcon使用mondrian_xpm变量在堆栈上创建了一个图标
//这个mondrian变量是在mondrian.xpm文件中定义的


//编辑框
m_pTextCtrl = new wxTextCtrl(this, -1, wxT(wxString("测试")), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE);

// 菜单条
m_pMenuBar = new wxMenuBar();

// 文件菜单
m_pFileMenu = new wxMenu();

//wxT宏可以让代码兼容Unicode模式,和宏_T的作用一样
//_()将字符串翻译为指定语言的版本
//&符号的前导的字符将成为彩旦的快捷操作符,实际中为一下划线
//t符号则表示一个全局的快捷键
m_pFileMenu->Append(MENU_FILE_OPEN, wxT("O&打开\tF2"), wxT("打开文件"));
m_pFileMenu->Append(MENU_FILE_SAVE, wxT("S&保存\tF3"), wxT("保存文件"));
m_pFileMenu->AppendSeparator();
m_pFileMenu->Append(MENU_FILE_QUIT, wxT("Q&退出\tF4"), wxT("退出系统"));
m_pMenuBar->Append(m_pFileMenu, wxT("F&文件"));

// 关于菜单
m_pInfoMenu = new wxMenu();
m_pInfoMenu->Append(MENU_INFO_ABOUT, wxT("A&关于\tF5"), wxT("关于软件"));
m_pMenuBar->Append(m_pInfoMenu, wxT("I&信息"));

//设置程序菜单条
SetMenuBar(m_pMenuBar);

//创建一个有三个域的状态栏。第一个域包含文本"Ready"
//状态栏用来显示对一个菜单项的描述。
CreateStatusBar(3);
SetStatusText("Ready",0);
}
TextFrame::~TextFrame()
{
}

//事件表是放在实现文件中的
//宏BEGIN_EVENT在事件表声明的开始处使用
BEGIN_EVENT_TABLE(TextFrame, wxFrame)
//将一个方法与事件关联要使用EVT_MENU宏
//这个宏需要菜单ID与事件名
EVT_MENU(MENU_FILE_OPEN, TextFrame::OnMenuFileOpen)
EVT_MENU(MENU_FILE_SAVE, TextFrame::OnMenuFileSave)
EVT_MENU(MENU_FILE_QUIT, TextFrame::OnMenuFileQuit)
EVT_MENU(MENU_INFO_ABOUT, TextFrame::OnMenuInfoAbout)
END_EVENT_TABLE()
//事件表的最后用宏END_EVENT_TABLE作结束标记

void TextFrame::OnMenuFileOpen(wxCommandEvent &event)
{
wxLogMessage(wxT("File Open Menu Selected"));
}

void TextFrame