2006年03月18日

 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千,很多陌生的出版社,很多陌生的作者,很多陌生的译者,书名也是越来越夸张,什
么××天精通××,精通××编程,
××宝典等等,书的印刷质量真的很好,纸张的质量也是今非昔比啊,但书的内容好象却是越来越让人失望,也许是我老了,我的思想我的观念已脱离现实社会,也
许是外面的世界变化得太快,我编程数月,出去一走,路已不是原来的路……回家看着书架上的旧书发呆,听着李克勤的旧欢如梦,才发现自已原来太喜欢怀旧.



笔者从事软件开发多年,其中有两年多的时间一直是与Windows底层打交道,涉及到驱动程序,嵌入式OS,Windows应用程序(如GUI,图形图像
技术,多线程,组件技术等等)等方面的开发,写了很多很的源代码……也许我的阅读面过于狭小,书架里基本上都是Jeffrey
Richter,Charles
Petzold,侯捷老师以及潘爱民老师的书,这些书一直陪伴着我,并给我的编程工作带来了很大的帮助,希望我的推荐对你也有帮助。



Windows编程类



Windows 程序设计(第5版)(上、下册)

原书名: Programming Windows (Fifth Edition)

原出版社:Microsoft Press

作者:(美)Charles Petzold

译者:北京博彦科技发展有限责任公司

出版社:北京大学出版社

出版日期:2001-03

页码:1376

定价:160:00RMB



此书被认为是Windows编程最好的导论性读本。在1994年5月,此书的作者Charles Petzold被《Window
Magazine》和Microsoft公司授予”Windows Pioneer”奖,以表彰他对Microsoft
Windows的成功作出的贡献,可见该书的权威性,以至于“如果对Windows开发有什么问题的话,请翻阅PetZold的著作吧”几乎成了一句至理
名言。

本书覆盖了WINDOWS编程的方方面面,将windows编程的每一个元素(如输入,输出及对话框,图形,多媒体,线程,文档与视图,Internet
等等)讲解得很清晰、简明,采用的大多是具有代表性的示例,代码风格好并且很有实用价值。笔者认为这本书是学习WINDOWS编程的经典入门好书,每一次
的细心阅读都会对WINDOWS编程有更深刻的理解, 不过笔者认为书中讲的内容都较为基础,更深层的东西可以去看《WINDOWS核心编程》。

笔者建议有条件的读者,最好阅读英文原版。



Windows核心编程

原书名: Programming Applications for Microsoft Windows Fourth Editio 

原出版社:Microsoft Press

作者:(美)Jeffrey Richter

译者:王建华等

出版社:机械工业出版社

出版日期:2000-05

页码:689

定价:86:00RMB



Jeffrey Richter 是 Windows System 程序设计的头头,他的每一本书都对 Windows
核心有很精彩的剖析,笔者从《Windows 95 程式设计指南》,《Windows高级编程指南》,《Windows核心编程》到《Applied
Microsoft .NET Framework
Programming(影印版)》一直阅读他写的书,可以说本本经典,阿蒙是他的崇拜者,死心踏地地追随Jeffrey Richter。

本书是讲解Windows
操作系统内部机制的专著,作者从基本概念入手,全面系统地介绍了Windows的各种基本构件,如进程、线程、DLL和内存管理等,并列举了大量应用程
序,精辟地分析了构件的使用方法,为掌握Windows 编程技巧提供了一条有效的捷径。笔者写过两年的windows驱动程序,
本书的内存管理章节给我提供了很大的帮助,可见本书对内存管理讲得非常地透彻。另外本书对进程和线程的讲解也十分地经典,先说明其来龙去脉,然后描述其中
的工作机制,并详细说明windows提供了哪些API函数来进行多进程与多线程的程序设计,如果能结合侯捷老师的《Win32多线程程序设计》一起研究
的话,那你对进程与线程的理解将更有深度。



Win32 多线程程序设计

作者:侯俊杰(侯捷)

出版社:华中科技大学出版社

出版日期:2002-01

页码:480

定价:59 .80RMB

 

使用线程,你可以产生高效率的服务器,建立Internet服务器扩充软件,获得多CPU系统的好处,建立精巧的COM/OLE对象,并改善程序的反应度。

本书的第一篇“上路吧,线程”,为你建立必要的基础,包括线程的启动和结束、核心对象、激发和未激发状态的意义、同步机制及其用途。第二篇“多线程程序设
计的工具与策略”,介绍C
runtime函数库和MFC对线程的支持、如何在USER和GDI的限制之下施行多线程、如何产生一个DLL、如何对多线程程序调试。第三篇“真实世界
中的多线程应用程序”,谈论如何组织一个程序,使它有效支持多线程。本篇示范两个真实世界中的应用软件,第一个是个freethreaded OLE
automation server,第二个是 ISAPI程序,是个IIS(Internet Information
Server)扩充软件,示范如何和JET数据库交谈。

本书从理论到实际应用讲得很全面及易懂,范例程序也很丰富并且具体生动,而且书里不时地在一些需要注意的地方给出一些总结性的建议,这不仅让读者倍感亲切,而且也加深了对所学内容的理解。

  

MFC编程类



MFC Windows程序设计(第2版)

原书名: Programming Windows with MFC Second Edition 

原出版社:Microsoft Press

作者:(美)Jeff Prosise

译者:北京博彦科技发展有限公司

出版社:清华大学出版社

出版日期:2001-09

页码:1166

定价:128:00RMB



本书不仅扩展了已被认为是权威的关于Microsoft 用于windows
API的功能强大的C++类库的阐述,还新增了有关COM,OLE和ActiveX等内容。本书的作者,Jeff
Prosise,用其无与伦比的技巧向读者讲述了MFC程序设计中的基本概念和主要技术-再次阐释了在32位windows平台上进行快速的面向对象开发
的完美方法。

笔者认为本书讲解细致而且全面,比较适合初学者,









深入浅出MFC(第二版)

作者:侯俊杰(侯捷)

出版社:华中科技大学出版社

出版日期:2001-01

页码:736

定价:80:00RMB



  有关这本书及其作者,不用我多说,大家已非常清楚,网上也是众说纷坛。

  本书分为四大篇。第一篇讲SDK编程,简单明了的概括了SDK程序设计的主要原理,提供进入MFC核心技术以及应用技术之前的所有技术基础,特别是
Windows的消息机制,讲得很清楚。第二篇介绍Visual
C++整合环境开发工具,对整个软体开发环境有全盘以及概观性的介绍,可以让初学者迅速了解手上掌握的工具,以及它们的主要功能。第三篇介绍
application framework的观念,以及MFC骨干程序,所谓骨干程序,是指Visual
C++的工具AppWizard所产生出来的程序码。根据我的了解,太多人使用 MFC 是编写程序只是知其然而不知其所以然,本篇详细解释 MFC
程式之来龙去脉,为初入 MFC 领域的读者奠定扎实的基础。第四篇以微软公司附于Visual
C++光碟片上的一个范例程序Scribble为主轴,一步一步加上新的功能。并在其间深入介绍Runtime Type
Information(RTTI)、Dynamic Creation、Persistence(Serialization)、Message
Mapping、Command Routing等核心技术。这些技术正是其他书籍最缺乏的部分。

“初学者只需掌握它的精髓,而不需深究它的全部内容,否则很有可能你会看不懂,等你在不断学习过程中,返过来重复学习,你将会发现此书的奥秘所在”。



COM编程类



COM原理与应用

作者:潘爱民

出版社:清华大学出版社

出版日期:2001-03

页码:472

定价:39:00RMB



本书不仅介绍了COM的基本原理及其扩展知识,还讲述了MTS及COM+的一些知识。全书分为三部分,第一部分为COM基础,作者在写这部分内容时,参阅
了“Inside
COM”一书,但对内容结构进行了重新调整,并增加了一些关于WINDOWS程序设计和MFC方面的知识;第二部分为COM扩展,第三部分为COM应用与
发展,介绍了组件化程序设计思想以及多层软件结构模型。读者在学习了COM的基本原理之后,结合MTS和COM+所倡导的一些概念,就可以从更高的层次来
理解和使用COM及COM+了。

  对于COM初学者来说这是一本经典的书, 它由浅到深的论述使你对COM的概念及框架有较深的理解。



COM本质论

原书名:Essential COM

作者:(美)Box,D.

译者:潘爱民

出版社:中国电力出版社

出版日期:2001-08

页码:358

定价:49:00RMB



本书由具有鬼才之称的Don Box撰写,在计算机界,“没有人能把COM阐释得比Don Box更清楚”;

本书无疑是COM领域中最负有盛名的一本书。在亚马逊的排行榜上曾盘踞数月之久,很多专家给其以极高的评价。读完这本书之后,COM对于您会“变得再明白
不过了”(这是“Inside OLE”的作者Kraig
Brockschmidt和本书的作者DonBox在顿悟了COM和OLE之后的境界)。期望您会有这样的感受。

本书揭示了COM(组件对象模型)的本质,旨在帮助开发人员真正理解COM的为什么,而不仅限于怎么使用。书中还提供了一个完整的分布式COM应用,演示
了各种编程技术。此外,本书还涉及到许多COM高级特性,例如线程模型(或者套间模型)、名字对象、连接点等,因此,要想从本书获得最大受益,您也需要有
COM的知识作基础,建议读者先阅读《COM原理与应用》之后再阅读本书。


这不是一本供新手学习的书,也不是一本教您如何开发COM组件的书,而是一本在一定的基础上继续提高对COM的理解的书。如果用它来学习COM,您可能会
失望,因为许多内容需要有一定的经验基础才能看得明白;但是如果用它来加深自己对COM的理解,那么这本书再合适不过了。”



差书点评

《MFC开发人员参考手册 》

 本书是一本详细介绍MFC类库的工具书,它对MFC类库4.2版本中所有的类及其成员都做了比较详细的说明.笔者认为MSDN就是最好的工具,没有必要花这个冤枉钱.



学习心得



看了不少的书,也写了不少的代码,简单总结一下我的学习方法,笔者是按以下的顺序来学习的:C/C++ ――> SDK ――>
MFC ――>COM/DCOM/ATL/COM+,当然这个顺序的前提是你已经具备了一定的数学,数据结构及算法,操作系统等基础知识,学好C++是很
关键的,尤其要理解清楚OOP思想,养成以面向对象方法去思考问题解决问题的习惯;学习SDK的目的主要是理解Windows
OS的内部机制比如内存管理,多任务及多线程等,特别要透彻地理解Windows的消息机制;有了前面的知识,学起MFC就容易了,有些网友经常与我聊,
说他看了一年多的书,也写一些程序,但对MFC还是一头雾水,我想主要的原因还是学习不够系统性,很多知识及经验是循序渐进的,千万不要幻想一步登天,要
有持之以恒的学习及实践精神。

                                                        ——Harry Meng

2006年02月23日

一:简介:

Vi命令可以说是Unix/Linux世界里最常用的编辑文件的命令了,很多人不喜欢VI因为它

的众多的命令集,但是我们只需要掌握基本的命令然后灵活地加以运用,相信你会象我一

样喜欢它的。

本文旨在更有条理有归纳性地介绍VI的一些最常用命令和一些高级的应用。

二:基本命令介绍:

1) 光标命令

k,j,h,l—上下左右光标移动命令,虽然你可以在Linux中使用键盘右边的四个光标键,

但是记住这四个命令还有非常有用的,也就是右手在键盘上放置的位置部分

nG —-n为行数,该命令立即使光标跳到指定行。

Ctrl+G—–光标所在位置的行数和列数报告

w,b——使光标向前或向后跳过一个单词

2) 编辑命令

i,a,r ——-在光标的前,后,上方插入字符命令(i=insert,a=append,r=replace)

cw,dw—— 改变(置换)/删除光标所在处的单词的命令 (c=change,d=delete)

x,d$,dd —–删除一个字符,光标所在处到行尾的所有字符,和整行的命令

3) 查找命令

/string, ?string—–从光标所在处向后/向前查找相应的字符串的命令

4)拷贝复制命令

yy,p —–拷贝一行到剪贴板/取出剪贴板中内容的命令

三:常见问题及应用技巧

1) 在一个新文件中读/etc/passwd中的内容,取出用户名部分

vi file

:r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd

:%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分

:3r /etc/passwd 这是在指定的行号后面读入文件内容

另外一种方法删掉文件中所有的空行及以#开始的注释行

#cat squid.conf.default | grep -v ‘^$’ | grep -v ‘^#’



2) 在打开一个文件编辑后才知道登录的用户对该文件没有写权,不能存盘

vi file

:w /tmp/1 既然没法存盘,不想放弃所做的所有修改,先临时存到/tmp/1

:20,59w /tmp/1 或者仅仅把第20到59行之间的内容存盘成文件/tmp/1

3) 用VI编辑一个文件,但需要删除大段大段的内容

vi file

Ctrl+G 把光标移到需要删除的行的处按ctrl+G显示行号,再到结尾处再按Ctrl+G.

:23,1045d 假定两次行号为23和1045,则把这几间的内容全删除

也可以在开始和结束两行中用ma,mb命令标记后用:’a,’bd删除.

4) 在整个文件或某几行中在行首或行尾加一些字符串

vi file

:3,$s/^/some string / 在文件的第一行至最后一行的行首前插入some string

:%s/$/ some string/g 在整个文件每一行的行尾添加 some string

:%s/string1/string2/g 在整个文件中替换string1成string2

:3,7s/string1/string2/ 仅替换文件中的第三到七行中的string1成string2



Note: s为substitute,%表示所有行,g表示global

5) 同时编辑两个文件,在两个文件中拷贝剪贴文本

vi file1 file2

yy 同时打开两个文件,在文件1的光标所在处拷贝所在行

:n 切换到文件2 (n=next)

p 在文件2的光标所在处粘贴所拷贝的行

:N 切换回文件1



6) 替换文件中的路径

:%s#/usr/bin#/bin#g 把文件中所有路径/usr/bin换成/bin

或者用

:%s//usr/bin//bin/g 在’/'前用符号指出’/'是真的单个字符’/’

鉴于大家在使用VI 的时候有一定的陌生,在这里借花献佛,从兄弟版[SHELL]中整理出以下关于VI编程的高级技巧,希望对大家学习UNIX有所帮助,并希望大家能结合使用HPUX的心得体会对这些经验进行进一步的扩展。

1.交换两个字符位置

xp

2.上下两行调换

ddp

3.把文件内容反转

:g/^/m0/ (未通过)

4.上下两行合并

J

5.删除所有行

dG

6.从当前位置删除到行尾

d$

7.从当前位置复制到行尾

y$ 如果要粘贴到其他地方 p 就可以了



由于vi 是建立在 EX 上的 所以 当键入 : 时就来到了 EX 命令状态

8.

:ab string strings

例如 ":ab usa United States of America" ,

当你在文见里插入 usa 时

United States of America 就蹦出来了

9.

:map keys new_seq

定义你当前 键盘命令

10.

:set [all]

vi or ex 的编辑状态

如 显示每行 :set nu

11.

在命令状态下,nyy表示拷贝从光标行起的下n行内容,p表示paste,可刚复制的内容粘贴在光标处的

下面。

12.

单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S

13.

:%s/old_word/new_word/g

这个指令是于在整个文件中替换特定字符串



14.光标控制

k:上移 nk 上移n行

j:下移 nj 下移n行



将光标移到第n行,按下 mk

将光标移到第m行,按下 "ay’k

即将第n到m的行存到a寄存器,以此类推,b,c……..寄存器等

这样就可以将你常用的需要复用的内容粘贴到不同的寄存器中以备用



想粘贴到某处,直接将光标移到某地,按下 ‘ap 即可,以此类推,b,c……..寄存器等

在当前屏幕中

H 跳到第一行

M 跳到中间一行

L 跳到最后一行

15.

表8-2 删除命令

删除命令操作

d l 删除当前字符(与x命令功能相同)

d 0 删除到某一行的开始位置

d ^ 删除到某一行的第一个字符位置(不包括空格或TA B字符)

d w 删除到某个单词的结尾位置

d 3 w 删除到第三个单词的结尾位置

d b 删除到某个单词的开始位置

d W 删除到某个以空格作为分隔符的单词的结尾位置

d B 删除到某个以空格作为分隔符的单词的开始位置

d 7 B 删除到前面7个以空格作为分隔符的单词的开始位置

d) 删除到某个语句的结尾位置

d 4) 删除到第四个语句的结尾位置

d( 删除到某个语句的开始位置

d } 删除到某个段落的结尾位置

d { 删除到某个段落的开始位置

d 7 { 删除到当前段落起始位置之前的第7个段落位置

d d 删除当前行

d /t e x t 删除从文本中出现“ t e x t”中所指定字样的位置,一直向前直到下一个该字样所出现的

位置(但不包括该字样)之间的内容

d fc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括

该字符)之间的内容

d tc 删除当前行直到下一个字符“ c”所出现位置之间的内容

D 删除到某一行的结尾

d $ 删除到某一行的结尾

5 d d 删除从当前行所开始的5行内容

d L 删除直到屏幕上最后一行的内容

d H 删除直到屏幕上第一行的内容

d G 删除直到工作缓存区结尾的内容

d 1 G 删除直到工作缓存区开始的内容

修改命令操作

c l 更改当前字符

c w 修改到某个单词的结尾位置

c 3 w 修改到第三个单词的结尾位置

c b 修改到某个单词的开始位置

c W 修改到某个以空格作为分隔符的单词的结尾位置

c B 修改到某个以空格作为分隔符的单词的开始位置

c 7 B 修改到前面7个以空格作为分隔符的单词的开始位置

c 0 修改到某行的结尾位置

c) 修改到某个语句的结尾位置

c 4) 修改到第四个语句的结尾位置

c( 修改到某个语句的开始位置

c } 修改到某个段落的结尾位置

c { 修改到某个段落的开始位置

c 7 { 修改到当前段落起始位置之前的第7个段落位置

c tc 修改当前行直到下一个字符c所出现位置之间的内容

C 修改到某一行的结尾

c c 修改当前行

5 c c 修改从当前行所开始的5行内容



.重复上一次修改!

表8-4 替换命令

替换命令操作

s 将当前字符替换为一个或多个字符

S 将当前行替换为一个或多个字符

5 s 将从当前字符开始的5个字符替换为一个或多个字符



vi替换使用规则:

:g/s1/s/s2/s3/g

第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换

s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串



16.

fx

往右移动到 x 字符上

Fx

往左移动到 x 字符上

tx

往右移动到 x 字符前

Tx

往左移动到 x 字符后

(注意:以上四个命令中,其中x是键入的字符)

;

分号,配合 f 和 t 使用,重复一次

,

逗号,配合 f 和 t 使用,反方向重复一次

17. vi 环境选项 Solaris ksh

noautoindent nomodelines noshowmode

autoprint nonumber noslowopen

noautowrite nonovice tabstop=8

nobeautify nooptimize taglength=0

directory=/var/tmp paragraphs=IPLPPPQPP LIpplpipnpbtags=tags /usr/lib/tags

noedcompatible prompt tagstack

noerrorbells noreadonly term=vt100

noexrc redraw noterse

flash remap timeout

hardtabs=8 report=5 ttytype=vt100

noignorecase scroll=11 warn

nolisp sections=NHSHH HUuhsh+c window=23

nolist shell=/bin/ksh wrapscan

magic shiftwidth=8 wrapmargin=0

mesg noshowmatch nowriteany

For C-Shell:

setenv EXINIT "set nu"

For Bourne or Korn Shell:

EXINIT="set nu"; export EXINIT

For Korn Shell Only (alternate method):

typeset -x EXINIT="set nu"

在 .profile 里设置 vi 的环境选项 , 以上均测试过



18.标记文本

  mchar   用字母char标记当前光标的位置

  `char   移至char所标记处

  ’char   移至char标记所在行的开头处

  "     移至当前行上一次所在位置(在光标移动之后)――一个双引号

  ”    移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号



19.

同时vi多个文件时,CTRL-SHIFT-6回到上一个文件,在本次vi的文件和上次vi的文件之间切换。

但是我发现一个BUG:在用CTRL-SHIFT-6切换到上一个文件后,用:args查看多文件vi状态时,

屏幕底部仍然显示目前vi的是刚才的文件。

(在HP-UX,Solaris,AIX上通过)

也可以使用:

:e#

进行切换

20.

sco 下VI 要在文本前同样的字符加用

%s/^/要加的内容/g 要在文本后同样的字符加

%s/$/要加的内容/g

21.

如何去掉文本中的 ^M 硬回车?不必用binary传回去再ascii传回来的方式,用shell或者unix语句实现。

cat filename |tr -d ‘15′ >newfile

不同的unix系统还存在一些其他不同的命令,如:doscp

sed 也可以实现这个功能.

dos2unix filename filename2

反之

unix2dos filename filename2

在vi 中用:$s/^M//g

^是crtl-V crtl-M



22.如何在“unix命令行”下将一个文件的某字符串用另一个串换掉

sed ’s/string1/string2/gp’ file1 > file2





23.将/etc/hosts下所有的地址都ping 2次

1 #/usr/bin/sh

2 #grad /etc/hosts and ping each address

3 cat /etc/hosts|grep -v ‘^#’ | while read LINE

4 do

5 ADDR=`awk ‘{print $1}’`

6 for MACHINE in $ADDR

7 do

8 ping $MACHINE -n 2

9 done

10 done

2006年01月13日

最近又发现了JSPWiki(v2.3.65)中的一个Bug。

当我们更改某页面的名称的时侯,希望其它引用了该页面里的引用也会自动的作相应的更改。JSPWiki的开发人员也已经考虑到了,Rename Page Patch 里有讨论,在Page Info页面上的Rename按钮上面有"Update referrers?"选项,可见已经是有实现了。但实际使用中发现,它并不奏效。明显是个Bug。

晚上花了些时间追踪了JSPWiki的关于该部分的原代码,最后可疑落在了PageRenamer.java文件的renamePage函数上:
    public String renamePage(String oldName, String newName, boolean changeReferrers)
        throws WikiException
    {
         … …
        m_wikiEngine.getReferenceManager().clearPageEntries(oldName); //这句是文件的1.2版本才增加的
               

        // Get the collection of pages that the refered to the old name (the From name)…
        Collection referrers = getReferrersCollection( oldName );

        // If there were pages refering to the old name, update them to point to the new name…
        if( referrers != null )
        {
            updateReferrersOnRename( oldName, newName, changeReferrers, newNameCleaned, referrers );
        }
        else
        {
            // XXX: Questionable behaviour!
            m_wikiEngine.initReferenceManager();
        }
            
       … …
    } 

从函数的名称判断, "Collection referrers = getReferrersCollection( oldName ); "应该放在"m_wikiEngine.getReferenceManager().clearPageEntries(oldName);"之前。由于还没有打建起JSPWiki的编译环境,所以现在还无法证实我的估计是否正确。等过些天把编译环境搭起来就有结果了。

2006年01月11日

最近为公司搭建了Wiki,目的是为了实现项目的文档管理和知识的积累(知识库)。经多方比较,Wiki服务器选择了JSPWiki,因为她对中文支持的比较好,容易安装,还有程序框架清晰简单——在工作中有学习和借鉴的价值。但是,在安装和使用中也遇到了一些奇怪的问题。(JSPWiki 2.3.65, JDK 1.4.2)


版本不同的Tomcat,不同的问题
第一次安装使用的是Tomcat 4.1.31,页面的文字可以正常显示,但是logo、附件等图片(JSPWiki/images目录下)却没法显示,甚至在JSPWiki/images下新建的txt文件也没法访问。后来,换了Tomcat 5.0.28试试,虽然图片能够正常显示出来了,但是中文名称的页面却出现乱码了。无奈之下,只好重新换会Tomcat 4.1.31,并且在Tomcat/conf/server.xml文件中增加<Context path="/JSPWiki/images" docBase="E:/JSPWiki/images" debug="0" reloadable="true" crossContext="true">,致使整个images文件夹都可以访问。

IE显示难看
不知道JSPWiki开发人员是否都是从不使用IE的。用IE显示default模板的JSPWiki页面,两条粉红的actions条横贯整个页面,极难看。虽然我是使用Firefox浏览器的,但考虑到一些习惯使用IE的同事,所以打算换用其它的模板。开始觉得SmallpieceTemplate2对IE支持好象还行,布局和色彩也漂亮。换用之后才发现,在该模板上竟然找不到login和logout的地方,并且Add Comment也不存在——真是郁闷。考虑到第三方模板未必能跟的上版本的不断更新,最后还是打算修改default模板来改善IE的显示结果。修改的地方有:

Header.jsp
  // old <div style="clear:both; height:0;" > </div>
  <div style="clear:both;" > </div> // new

jspwiki.css的内容完全拷贝到jspwiki_ie.css中,再修改jspwiki_ie.css
/* old
#actionsTop              { text-align: right; width: auto;
                           border: 1px solid silver; border-bottom: 0px;
                           background: #fff0ff;
                           padding: 0 0.25em; }
#actionsBottom           { text-align: right; width: auto;
                           border: 1px solid silver; border-top: 0px;
                           background: #fff0ff;
                           padding: 0 0.25em; }
*/

// new
#actionsTop              { text-align: right; width: auto;
                           border: 0px solid silver; border-bottom: 0px;
                           background: transparent;
                           padding: 0 0.25em; }
#actionsBottom           { text-align: right; width: auto;
                           border: 0px solid silver; border-top: 0px;
                           background: transparent;
                           padding: 0 0.25em; }

2005年12月27日

Wikipedia Extension 是Firefox上用来方便编辑Wikipedia页面的插件。但可惜现在只能支持到Firefox 0.9.3 to 1.0.1和Mozilla 1.7.x to 1.8b1。





2005年12月20日

有线局域网是整天都接触,不管是在公司还是在寝室。无线局域网虽早有耳闻,直到昨天才算有机会感受了一把用手提电脑连接无线局域网。
住楼下的一个同事一直都想搞个无线局域网,这样他在床上也可以用手提电脑上网了。需要的设备很简单——一个无线路由器,他的IBM手提电脑已经自带了无线网卡。终于昨天他下定决心买这个无线路由器了。
在电脑城逛了几间店,比较几种型号和了解了一下价格。最终以330元的价格买下TP-Link TL WR641G路由器,不带无线网卡。
回到寝室后,迫不及待地尝试使用这个路由器架设无线局域网。经过简单的连接和配置后,IBM手提电脑很快就连接上了无线局域网。其实我们更关心的是无线局域网的速度,穿透墙壁的能力和可以达到的范围。我们端着电脑,从同事的寝室上楼到我的寝室,都没出现网络断开的情况,并且PPStream点播的《机器猫》也播放的还算流畅。当我们走出我的寝室,经过一个更大的房间准备上天台的时侯,网络中断了。


2005年12月18日

0. 怎样在同一个vim窗口中快速切换多个文件?
刚一开始我可以想到的方法,是通过vim file1.txt file2.txt file3.txt同时打开多个文件,用:previous和:next命令前后切打开的这几个文件。但是,如果需要在这个打开的文件列表中再增加一个文件好象没法做到。往往我们在开始的时候是不能确定需要打开哪一些文件,所以这种方法不是很实用。[具体描述见vim帮助: |usr_07.txt|  编辑多个文件]
后来,了解到vim有buffer(缓冲列表)的功能,可以很好的解决在曾经打开过的文件之间进行切换。:buffers(或者:ls)命令可以列出曾经打开过的文件列表,我们再用:buffer #number(或者:buffer filename)选择需要重新打开的的文件。用:edit newfile.txt又可以新的文件,buffer(缓冲列表)的文件列表自动添加新的文件。[具体描述见vim的帮助: |usr_22.txt|  寻找要编辑的文件]

1. 打开和关闭自动换行
vi的自动换行默认打开的,:set nowrap可以关闭自动换行,:set wrap又可以重新打开自动换行。

2. 在指定的buffer之间复制和粘贴
"ayy可将一行数据放在buffer a,"ap则粘贴buffer a中的数据。

2005年12月10日



该搜索网站把Google的和百度搜索结果分成左右两屏显示。

2005年11月02日

Web1.0 VS Web 2.0

1, Web1.0网站PV为王,在宣传自己的影响力时,他们会说:我们每天的PV,UV有多少多少,到我们这里投广告将会被多少人关注到,同时,PV,UV也是给VC看的最明显的数据。所以中国的互联网一路走来,为了提高PV,只有走娱乐化这么一条路,因为只有娱乐,只有性,只有色情,才能够吸引最大多数人群来阅读。有很多有深度和价值的文章,其读者群往往也是小众的,在PV为王的情况下,很难得到门户的推广。门户最需要的是PV,影响力也需要,但是得让位于 PV。这种PV有一个很大的特点是,无组织,无用户,随机,不可以统计分析。你无法知道刚刚到来的这一个PV究竟是非洲的原始土著,还是南极洲北极的爱斯基摩人带来的。所以你没法提供信息使得他们都得到满足。有趣的一个现象会是:向非洲土著推销保暖内衣,向爱斯基摩人推销海尔冰箱。所以Web1.0时代单个PV是没有意义的,PV整体才有意义。至少可以用来卖广告。

2, Web2.0时代,是不是PV就没有必要了呢?错,不要怀疑PV得力量,没有PV,基本上很多东西都是扯淡。但是Web2.0时代,更加重要的一个特点会是:每一个PV对我们都是重要的,每一个访问都是可记录可分析的,因为这种访问应该是带有用户机制的访问。你可以准确地知道到来的这一个PV是来自非洲还是南极周北极,可以准确地把冰箱卖给非洲土著,把保暖内衣卖给南极北极客人。

3,为什么一份发行5万份地杂志就可以轻松实现盈利,并且每一个插页的广告就可以卖到8万,而对于一个几百万的PV的网站其广告只能卖得很廉价?一方面固然由于网络广告市场竞争激烈程度太高,另一方面由于我们网站得用户对我们并不忠诚。对很大一部分人来讲看搜狐新闻和新浪新闻是一样的。所以即便你 5000万的 PV,但是忠诚的用户只有10%-更少。

4,Web2.0的用户往往是忠诚的。所以keso如果有1万个用户订阅了他的Blog,那么这一万个用户对其的忠诚度不会低于一个长期订阅《财经》杂志的用户对《财经》的忠诚度。所以这一万个用户的价值可以和《财经》杂志忠实用户的价值媲美。给 keso支招:从下周起,每周出售其中一天日志的广告,比如周二的日志,会换成一篇完整的广告。必须保证的是:不要放性病防治的广告,放内容相关的广告,并且保证形式足够好。

5,Web2.0最大的特点是,每一个用户身上都会带有许多的标签,以前我们面对的是一个一个帖子,一条一条的信息,以后我们可能更多要面对和服务的是这些带有标签的ID,针对带有标签的ID提供个性服务。这些标签可能来自:写作Blog时记录的tag,阅读时的每一次点击。

6,其实世上本没有Web1.0,Web2.0,说得人多了,也就大家都认可了。世上有的只有Web2.0精神,这种精神是更加符合互联网开放,共享,民主的本性的,是符合用户渴望分享,渴望开放的本性的,所以,Web2.0是必然的,只是一个时间问题,途径问题。

文章来自: 大墙漫画

定义Web 2.0是困难的,所以就产生了很多混乱。有人从“Web”的角度质疑,有人从“2.0”的角度争论。最终这个问题变得像“什么是blog”一样,鸡一嘴鸭一嘴,公说公有理,婆说婆有理,越争越乱。所以Chris Anderson说,blog圈子的第一原则就是不要去概括blog圈子。他认为,Web 2.0缺乏清晰的定义正好是它的一个特性,而不是一个bug

Tim O’Reilly仍然试图解释,什么是Web 2.0(What is Web 2.0)。
不过他换了一种方式,用例子来解释,而不是用定义,并通过具体的例子,引申出某些Web 2.0原则。关键问题在于,Web
2.0不是一种技术升级,而是一种观念升级。下面是Tim绘制的一张图,就像太阳系一样,Web
2.0有着核心的原则,也有一些离核心或远或近的具体实践。

Web 2.0 Meme Map

在Tim
看来,Web
2.0最核心的观念就是,“Web作为平台”。我想,其意义大概就像1980年代操作系统作为平台一样。与操作系统平台不同的是,任何人不拥有这个平台,
Web平台是通过分享或参与体系搭建起来的,是对“集体智慧”的充分理解和利用,而不再是大企业的资源垄断。

Web 1.0   Web 2.0
DoubleClick –> Google AdSense
Ofoto –> Flickr
Akamai –> BitTorrent
mp3.com –> Napster
不列颠百科全书在线 –> Wikipedia
个人网站 –> blogging
evite –> upcoming.org and EVDB
域名投机 –> 搜索引擎优化
页面浏览量 –> 每点击成本
screen scraping –> web services
出版 –> 参与
内容管理系统(CMS) –> wikis
目录(分类法) –> tagging ("民间分类")
粘性 –> 内容聚合

Tim
分别对Web 1.0和Web
2.0时代的代表性企业进行了对比,如Netscape和Google、DoubleClick和Overture与AdSense、Akamai和
BitTorrent等。他总结的Web 2.0的七大特性包括:Web作为平台、借力集体智慧、数据成为下一个Intel
Inside、软件发行周期的终结、轻量级编程模式、超越单一设备层次的软件、富用户体验。他进而提出了八项Web
2.0设计范式:长尾、数据成为下一个Intel
Inside、用户增添价值、网络作用作为默认值、保留部分权利、永远的beta、合作而不是控制、软件超越单一设备层次。

如果说互联网是
通过大幅度降低信息获取的门槛,发掘出传统经济中被忽视的价值的话,那么Web
2.0则是借助用户参与体系,将上一代网络公司忽视的长尾的价值发掘出来。Tim说,借助消费者自服务和基于算法的数据管理,服务延伸至整个web——抵
达边缘而不仅仅是中心,抵达长尾而不仅仅是头部。

Tangos也列出了他所理解的Web 2.0的四个核心特性:可重用的微内容、以用户(人)为中心,而不是以物为中心、社会性、用户参与的架构。实际上后三个特性应该算是一个特性,即开放的参与架构。归根结底,这是一种观念。观念的改变,有时候要远远难于技术的升级。

Undersound认为:“其
实Web2.0在某种程度上不依赖于技术,而是一种态度:用户体验,资源共享,集体思维,平台开放。这些不是你做不到,而是你没有想到而已。”其实不完全
如此,因为Web
2.0对用户、对整个互联网产业是好消息,但对某些互联网公司,却是坏消息。比如不列颠百科全书在线就一定不喜欢Wikipedia,收费的在线广告也一
定不喜欢免费的Craigslist。O’Reilly Media的编辑Nathan Torkington就说过,Web 2.0在某种程度上很像日本的合气道,即用对手的力量战胜他们。因此,对有些人来说,Web 2.0确实是个坏消息。

Web
2.0的原则之一就是,与其相信自己的所谓优势,不如相信你的用户。本质上,这也是自由软件运动的原则之一。我常常觉得,Web
2.0的实践者们一定是从自由软件运动中得到了某种启示和灵感。相信集体智慧,相信开放的开发模式,相信参与者越多质量越好等等,这些Web
2.0的原则,恰好也都是自由软件所崇尚的。因此我想,Web 2.0如果也算是一股潮流的话,那么它应该是自由Web潮流,或者叫Web的开放源代码。微软无法接受自由软件,是因为Windows、Office至今仍是它的核心竞争力和命脉所在。

因此可以说,Web 2.0是互联网原有商业规则的破坏者。贴着Web 2.0的标签,干着Web 1.0的事儿,这是投机。商业可以投机,但观念无法投机。看看他是想垄断还是想开放,想控制还是想合作,一切就一清二白了。

Tim的文章列出了七条他认为的Web 2.0公司的核心能力:

  • 服务,而非软件包,具有高效低成本的可扩展性(Services, not packaged software, with cost-effective scalability);
  • 控制独有的、难以再造的数据源,这些数据源使用的人越多就越丰富(Control over unique, hard-to-recreate data sources that get richer as more people use them);
  • 把用户当成合作开发者一般信任(Trusting users as co-developers);
  • 借力于集体智慧(Harnessing collective intelligence);
  • 从消费者自服务中产生长尾优势(Leveraging the long tail through customer self-service);
  • 超越单一设备层次的软件(Software above the level of a single device);
  • 轻量级的用户界面、开发模式和商业模式(Lightweight user interfaces, development models, AND business models)。

文章来自: 对牛弹琴