我的电脑装了vista系统,我想在电脑上看CA(美国化学文摘)光盘版,进去之前要下载并且装一个BASECA.ICA的文件,但是这个文件在xp系统上是可以打开的,但是到了vista就不行了。也不知道去网上找什么来解码。这一步走不通就不能安装并且看CA光盘版了,请问大家有什么可以解决的方法?

打开任务管理器---文件---新建任务-----选择你安装的文件-----确定
这样就可以了
因为没有安装citrix ica client



请问:我在客户端,打开我已经发布的记事本应用程序,结果双击记事本图标后提示说要我下载一个launch.ica文件,除此之外没有其他打开的页面。
我同样打开了另一个发布的应用程序,也是让下载一个launch.ica文件。
请问这是怎么回事呢?为什么打开的不是应用程序的界面呢?


因为没有安装citrix ica client

www.citrix.com/download
下载

终于找到了这个帖子,我是新手,也遇到同样的问题,
在www.citrix.com/download 下载哪个啊???

如果你有安装程序的话,在那个组件盘里面,有一个Client的文件夹,然后里面有一个ICA32文件夹,里面就是32的客户端了,语言可以选择的!或者进入这个页面下载
http://www.citrix.com/English/SS ... 7&productId=186



我的客户端装了也会提示要下载。然后点击下载回来的图标就可以连上去了



后来安装了迅雷,发现一点那个图标居然用迅雷下载了,多点几次还是可以运行点击的应用程序的,但是不方便,查看了一下迅雷的配置,监视设置-》监控浏览器这个取消就点击IE上的应用程序直接会用citrix ica client打开,但是还是不方便,然后再看了下迅雷里面有个设置:Ctrl+鼠标左键打开链接时不监视,我于是勾选了这项后,发现果然可以喔,解决了问题。记住:在点击的时候按住键盘的ctrl在按下鼠标左键即可。ps:迅雷还是蛮关注用户的嘛,否则,我立马卸载它丫的,改用QQ迅风了,呵呵

公司内部安装相关信息:
http://www.jackxiang.com/post/2689/
备注:
以前我司是用的windows2008 server,后来修改为:windows 2003 server.
公司查看有关“网站”的文章">网站使用nginx做为web服务器,nginx做为一个非常优秀的开源的轻量级web服务器,选择nginx让我们体会到Nginx的优秀。

但是在nginx的配置文件修改中,我出过几次失误,一般我会在本地用UltraEdit编辑nginx.conf在上传到服务器,在更新。

经常的修改,难免会会先一些失误,每次都直接替换之前的conf,有几次,没有做nginx.conf的备份,弄服务器中断几分钟。

今天看别分的文章,才发现nginx早就准备了相应的工具处理我出现的问题,之前真是孤陋寡闻。

一、nginx的几个命令参数

Nginx 安装后只有一个程序文件,本身并不提供各种管理程序,它是使用参数和系统信号机制对 Nginx 进程本身进行控制的。 Nginx 的参数包括有如下几个:

    -c <path_to_config>:使用指定的配置文件而不是 conf 目录下的 nginx.conf 。

    -t:测试配置文件是否正确,在运行时需要重新加载配置的时候,此命令非常重要,用来检测所修改的配置文件是否有语法错误。

    -v:显示 nginx 版本号。

    -V:显示 nginx 的版本号以及编译环境信息以及编译时的参数。

二、检测新的conf文件

测试当请目录下nginx.conf文件是否正确,使用命令:

nginx -t -c nginx.conf

2009/04/27 22:17:57 [info] 54240#0: the configuration file nginx.conf syntax is ok
2009/04/27 22:17:57 [info] 54240#0: the configuration file nginx.conf was tested successfully

得到如此结果,说明新conf文件没有错误。

如果有错,他会提示你在哪行出了错,在修改错误就可以了。

nginx0.7竟然出了windows版,让人觉得太惊奇了……

期待更好的Nginx

本文原创,请注明出处集思博客http://www.gisblogs.net ,咨询请联系:gislanmin#gmail点com,QQ:6390514

公司的查看有关“服务器”的文章">服务器需要运行JAVA程序,服务器的操作系统是FREEBSD 7.0。

freebsd7 安装jdk并不容易,因为sun公司自己并没有出freebsd版本的jdk,后来freebsd的一个开源组织,得到了sun公司的授权和查看sun源代码的权利,发布了Diablo Caffe JDK。

从 Diablo Caffe JDK 1.5在2006年发布第一个版本,最新的是Diablo Caffe JDK 1.6.0-7。

官方下载网址:http://www.freebsdfoundation.org/downloads/java.shtml

最近看资料说sun公司已经收回freebsd的授权,后续版本会怎么样,还用回到过去用Linux版本的jdk???下回分解……

经过几次失败,最终成功安装了JDK6了,下面简单介绍一下我成功的方法(失败的方法会加在里面,注明我的失败)

一、要更新ports树,否则你安装会遇到很多麻烦。

更新方法,6.0开始,不再使用cvsup

第一次使用:portsnap fetch extractBSD爱好者乐园;^U qSU U_p8J
以后再用:portsnap fetch update

如果第一更新会比较长时间。

安装麻烦是应为,安装Diablo Caffe JDK 需要很多另外的文件,有些需要从sun哪里下载,如果是版本不新,你从sun下不到对应的文件,这点真麻烦。

本文原创,请注明出处集思博客http://www.gisblogs.net ,咨询请联系:gislanmin#gmail点com,QQ:6390514

二、安装jdk

#cd /usr/port/java/jdk16

#make install clean

很多会问进jdk15会怎么样?

我试验过了,安装出来也是1.6的版本

我想进diablo-jdk16  和diablo-jdk15结果也应该是一样的。

安装过程需要准备几个文件,缺的文件,系统会提示你去哪里下载,安装上面的提示下载就是了,比较麻烦。下载了以后把它们放到/usr/ports/distfiles/里面。

安装完以后

#rehash  #刷新一下

#java -version

java version "1.6.0_07"
Diablo Java(TM) SE Runtime Environment (build 1.6.0_07-b02)
Diablo Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)

本文原创,请注明出处集思博客http://www.gisblogs.net ,咨询请联系:gislanmin#gmail点com,QQ:6390514

三、配置java环境

我用的root用户,因此需要修改.cshrc文件。BSD爱好者乐园 NC]BjJA |m
ee ~/.cshrc
hI-W [%@m在set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin $HOME/bin)这一行前面加上:
i%a%J)J yC(jsetenv JAVA_HOME /usr/local/jdk1.5.0BSD爱好者乐园C*\+T|0|
setenv CLASSPATH .:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/jreBSD爱好者乐园r8~ EHa(B b

注意在windows下是分号“;”,在freebsd下冒号“:”,这个问题害死人

然后在set path这一行的那些路径最后面加上jdk的bin路径/usr/local/jdk1.5.0/bin,就是下面这样:BSD爱好者乐园VG1r7l,K1X
set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin $HOME/bin /usr/local/jdk1.5.0/bin)



四、测试安装、配置是否成功
/d%~P,{LD*C;B
0Y M|og Z1Rdwee HelloWorld.javaBSD爱好者乐园n U4{)Q(p_5H u(w!d2DZ

4w;O's:O Adpublic class HelloWorld {BSD爱好者乐园{7X!wa3V:Hy
  public static void main(String args[]) {BSD爱好者乐园$E D[n;f|\'GL
    System.out.println("Hello,World!");BSD爱好者乐园-sX'xV[Y h)P:NH
  }
(A puDgmi}
/B7Q9g\ M@+Qst# javac HelloWorld.java
}"?;^Z5G ^pg# java HelloWorldBSD爱好者乐园I)@ vJ3c.W
Hello,World!BSD爱好者乐园t[b3gy!jE o;y
n G!oM']5M5c@

作为查看有关“linux”的文章">linux世界里最稳定的服务器版本,rhas5一直有很大的应用面,之前一直关注的是freebsd,因为应用的需要,特别在配合mysql和oracle上red hat有着太多优势。

用centos来代替red hat as的使用,因为centos5是利用rhas5的源码,去掉redhat的商标、图标之后编译发行的,是最一个源码编译版本,我用的是centos 5.2

在安装centos 5.2的时候,忘设置swap交换分区,在内存小的情况下,增大swap的作用比较有效的。

第一步 创建文件块

#cd /var   (进入一个文件夹)

#dd if=/dev/zero of=swapfile bs=1024 count=524288    (创建512M的swap ,一般是内存的两倍)

#/sbin/mkswap swapfile   (创建swap文件)

#/sbin/swapon swapfile   (激活swap文件)

#/sbin/swapon -s          (检查swap是否正确)

结果:

Filename                                Type            Size    Used    Priority
/var/swapfile                           file            524016  0       -1
#vi /etc/fstab       (加到fstab文件中让系统引导时自动启动)

在末尾增加以下内容:

/var/swapfile swap swap defaults 0 0

#reboot

重启之后,top命令查看,有swap分区的大小了

今天查看有关“服务器”的文章">服务器的mysql的服务不断的重启,我想先kill掉mysql的root用户的主进程,可是怎么也kill不掉。后来只好上谷歌求助。才知道强制杀掉一个进程,需要加个参数-9

索性把kill和ps命令详细研究一下。

1.作用
kill命令用来中止一个进程。

2.格式
kill [ -s signal | -p ] [ -a ] pid ...
kill -l [ signal ]

3.参数
-s:指定发送的信号。
-p:模拟发送信号。
-l:指定信号的名称列表。
pid:要中止进程的ID号。
Signal:表示信号。

4.说明
进程是Linux系统中一个非常重要的概念。Linux是一个多任务的操作系统,系统上经常同时运行着多个进程。我们不关心这些进程究竟是如何分配的,或者是内核如何管理分配时间片的,所关心的是如何去控制这些进程,让它们能够很好地为用户服务。

Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。交互进程是由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。批处理进程和终端没有联系,是一个进程序列。监控进程(也称系统守护进程)时Linux系统启动时启动的进程,并在后台运行。例如,httpd是著名的Apache服务器的监控进程。

kill命令的工作原理是,向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。比如在top命令中,我们看到系统运行许多进程,有时就需要使用kill中止某些进程来提高系统资源。在讲解安装和登陆命令时,曾提到系统多个虚拟控制台的作用是当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作关闭这个程序。此时使用的命令就是kill,因为kill是大多数Shell内部命令可以直接调用的。

5.应用实例
(1)强行中止(经常使用杀掉)一个进程标识号为324的进程:
#kill -9 324

(2)解除Linux系统的死锁
在Linux中有时会发生这样一种情况:一个程序崩溃,并且处于死锁的状态。此时一般不用重新启动计算机,只需要中止(或者说是关闭)这个有问题的程序即可。当kill处于X-Window界面时,主要的程序(除了崩溃的程序之外)一般都已经正常启动了。此时打开一个终端,在那里中止有问题的程序。比如,如果Mozilla浏览器程序出现了锁死的情况,可以使用kill命令来中止所有包含有Mozolla浏览器的程序。首先用top命令查处该程序的 PID,然后使用kill命令停止这个程序:
#kill -SIGKILL XXX
其中,XXX是包含有Mozolla浏览器的程序的进程标识号。

(3)使用命令回收内存
我们知道内存对于系统是非常重要的,回收内存可以提高系统资源。kill命令可以及时地中止一些“越轨”的程序或很长时间没有相应的程序。例如,使用top命令发现一个无用 (Zombie) 的进程,此时可以使用下面命令:
#kill -9 XXX
其中,XXX是无用的进程标识号。

然后使用下面命令:
#free
此时会发现可用内存容量增加了。

(4)killall命令
Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:
# killall -HUP inetd

*杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志。



首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令:

# kill -pid

注释:标准的kill命令通常都能达到目的。终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保在杀死父进程之前,先杀死其所有的子进程。
--------------------------------------------------------------------------------


*确定要杀死进程的PID或PPID

# ps -ef | grep httpd
--------------------------------------------------------------------------------


*以优雅的方式结束进程

# kill -l PID

-l选项告诉kill命令用好像启动进程的用户已注销的方式结束进程。当使用该选项时,kill命令也试图杀死所留下的子进程。但这个命令也不是总能成功--或许仍然需要先手工杀死子进程,然后再杀死父进程。
--------------------------------------------------------------------------------


*TERM信号

给父进程发送一个TERM信号,试图杀死它和它的子进程。

# kill -TERM PPID
--------------------------------------------------------------------------------


*killall命令

killall命令杀死同一进程组内的所有进程。其允许指定要终止的进程的名称,而非PID。

# killall httpd
--------------------------------------------------------------------------------


*停止和重启进程

有时候只想简单的停止和重启进程。如下:

# kill -HUP PID

该命令让Linux和缓的执行进程关闭,然后立即重启。在配置应用程序的时候,这个命令很方便,在对配置文件修改后需要重启进程时就可以执行此命令。
--------------------------------------------------------------------------------


*绝杀 kill -9 PID

同意的 kill -s SIGKILL

这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。危害是导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。

当使用此命令时,一定要通过ps -ef确认没有剩下任何僵尸进程。只能通过终止父进程来消除僵尸进程。如果僵尸进程被init收养,问题就比较严重了。杀死init进程意味着关闭系统。

如果系统中有僵尸进程,并且其父进程是init,而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表了
本文作者原创,版权归查看有关“集思博客”的文章">集思博客所有,转载请注明链接:http://gisblogs.net/article/09-05/266.html

一直在寻找一款有效的网站压力测试”的文章">网站压力测试工具,今天试用了webbench之后,感觉非常满意,特地于大家分享。

一、webbench简介

Webbench是有名的网站压力测试工具,它是由Lionbridge公司(http://www.lionbridge.com)开发。它的帮助文件和文档请到:www.webbench.com上查看。
Webbech能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。webBech的标准测试可以向我们展示服务器的两项 内容:每秒钟相应请求数和每秒钟传输数据量。webbench不但能具有便准静态页面的测试能力,还能对动态页面(ASP,PHP,JAVA,CGI)进 行测试的能力。还有就是他支持对含有SSL的安全网站例如电子商务网站进行静态或动态的性能测试。

二、webbench安装

(1)在FreeBSD下的用Ports安装方法:

#cd  /usr/ports/benchmarks/webbench

#make install clean

记得安装成功以后运行一下rehash命令,刷新一下系统命令

#rehash

(2)RedHat/CentOS下的编译安装

下载安装包:wget http://gisblogs.net/upload/softs/webbench-1.5.tar.gz

#tar zxf webbench-1.5.tar.gz

#cd webbench-1.5

#make && make install

三、webbench使用

#webbench -?    (查看命令帮助)

常用参数说明,-c 表示客户端数,-t 表示时间

测试实例:

#webbench -c 500  -t  30   http://127.0.0.1/phpionfo.php

测试静态图片

#webbench -c 500  -t  30   http://127.0.0.1/test.jpg

四、webbench测试结果

Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://127.0.0.1/phpionfo.php
500 clients, running 30 sec.

Speed=3230 pages/min, 11614212 bytes/sec.
Requests: 1615 susceed, 0 failed.

6月13日,全球著名的图书连锁巨头贝塔斯曼集团宣布停止中国范围内的36家贝塔斯曼书友会的连锁书店业务,二十一世纪图书连锁在全国18个城市中的36家书店将陆续于7月31日之前关闭。这个1995年就进入中国的世界传媒巨头,曾一度成为国内诸多图书连锁商以及当当网等网络书店的学习榜样,其商业模式也曾经被神化。但是如今却不得不在中国面临败走麦城的尴尬。仔细分析贝塔斯曼的失败原因,可以归结为以下几点:

第一,贝塔斯曼没有明确的品牌定位和诉求。贝塔斯曼尽管在中国算得上图书零售领域的一个知名品牌,但是在品牌上却一直不够清晰,比如新华书店是权威、渠道 网络优势等等,当当和卓越亚马逊是网上书的代名词,贝塔斯曼是什么呢?是让消费者可以博览天下好书,还是让天下爱书者都聚集起来?或者是弘扬文化,传播文 化精神?贝塔斯曼一直没有在消费者的心目中形成一个独特的品牌占位,从而让很多爱书者并不能将这个品牌和书联系到一起,很难形成品牌的依赖度。

第二,贝塔斯曼未能准确把握中国消费者的购书心理和模式。虽然图书算不上什么昂贵的产品,而且中国的图书价格远比国外的图书价格要便宜很多,但是真正落实 到购买图书,中国消费者的心理却是比较复杂的。有免费的绝对不会看收费的,有打折的绝对不会买原价的,有盗版的尽管对正版有着积极的支持,但是很多消费者 依然会购买盗版,这些现象称为中国特色的图书消费模式,尽管很多图书出版商想了很多查看有关“方法”的文章">方法去制止好书的盗版,但是却发现只要正版书进书店,街边小摊绝对就开 始有,以至于很多图书出版商甚至自己盗版。由于图书市场的不成熟以及中国版权问题较为突出,中国消费者长期以来养成了一种较为精明计算的图书消费模式,毕 竟对于很多人来说,图书尽管不高,但是要花钱的时候还是要计算一番的,这和中国人在其他领域的消费有着相似之处,这使得贝塔斯曼所制定的类似一个季度购买 一本书的政策无法行得通,也大大高估了预期的图书消费市场。

第三,贝塔斯曼并不了解中国图书阅读者的偏好。中国人口众多,文化层次、所处的社会阶层、区域等等都影响着读书的偏好,贝塔斯曼的连锁书店的图书种类稀 少、不够热门和主流等原因,直接导致很多读者很难在贝塔斯曼寻找适合自己的图书。这使得贝塔斯曼依靠商业连锁的形式很难形成规模化的经营,加上贝塔斯曼的 门店都相对面积较小,也导致其经营成本较高。而最重要的是,作为旗下拥有多个出版集团的贝塔斯曼在中国却未能发挥其出版的优势,在中国的出版市场中有所作 为,使其直接沦为了下游的图书零售渠道,在国内市场很难与本土化的连锁书店和网络书店竞争。

第四,贝塔斯曼忽视了网络的价值。贝塔斯曼的失败也让我们看到了另外的一个图书零售业态的成功,那就是当当网和卓越亚马逊这样的网络图书销售公司,通过网 络的虚拟经营,减少对于门店经营的成本,依靠在线的预先的订单以及快捷的物流体系来减少库存,并利用渠道的虚拟化规模优势取得和图书批发商的价格谈判优 势,这就是互联网带来的新的商业模式,而网民的增长让网络销售图书迅速崛起,贝塔斯曼却依然在利用其国外的传统模式在经营,这不得不说是对于中国的整个新 经济市场发展的一个失误。事实上,贝塔斯曼的书友会本身是一个非常好的经营模式,这种模式如果被放大到互联网上将可能带来成倍的效应,贝塔斯曼只要将类似 豆瓣网这样的模式和当当模式结合,将可以聚集更多阅读者的聚集,而这些数据库将通过不断的积累放大出更多的价值,遗憾的是这个商机贝塔斯曼显然没有看到。

第五,物流体系的快速反应没有发挥出来。随着网络的兴起以及人们生活节奏的加快,去书店买书对很多喜欢读书的消费者而言已经成为了比较“奢侈”的行为,而 贝塔斯曼的书友会以及地面连锁店显然都不是能够最节省消费者时间的渠道销售模式,其目录营销更是很难得到消费者的认可,原因在于消费者希望能够尽快得到图 书,而不是等待,这需要较高的物流递送的效率,但是在中国这个物流体系的建设相对比较困难,就是类似当当这样的网络图书销售商在物流配送上都是一个问题, 而且图书的单次购买价格较低,导致物流的成本较高,这也制约了贝塔斯曼的发展。

总的来说,贝塔斯曼的失败更多还是对于中国本土市场的了解不够造成的,这也同样说明,国外成熟的商业模式在中国必须进行改良,就好像当当显然看起来做得比 卓越亚马逊出色一样,对于中国本土消费心理和消费文化的深入洞察,并在此基础上修订适合中国本土的商业模式,才是类似贝塔斯曼这样的全球行业领先公司在中 国的明智经营之道。

在各大企业中,查看有关“CTO”的文章">CTO (Chief Technology Officer,首席技术官)有着雄厚的技术实力,掌握着企业核心技术,是软件开发项目中最重要的人物之一。随着中国引入CXO概念的狂潮,CTO也逐渐被人们所知。
作为一名成功的CTO,需要什么样的技术实力?如果才能在CTO这个职位上做出一番成就?围绕这几个问题,CSDN记者特别采访了长期从事软件开发工作的CTO吕建伟,为大家诠释优秀CTO的真正面貌。

CTO的概念之本

CTO直译就是首席技术官,在国际通用做法都是负责前沿技术的研发,主要关注前沿技术和未来商业的结合。因为国内大多数软件公司规模都偏小,不太可能设置专门的项目管理职位,所以CTO还担负着管理研发部门的责任。
吕建伟认为,与国外的CTO相比,国内CTO在国际技术标准的跟踪上明显不足。国内所做的大部分产品技术,其实在国外的研究和产业落地都开展很多年了,几 乎都有了成熟的做法和标准,但是国内的开发人员还在自己摸索着该怎么做,仍然处于土炉炼钢的阶段。但是,国内的CTO在研发跟踪和产品化之间的转换和平衡 做的很好,可以在非常有限的资源条件下做出比较有竞争力的产品。这也说明了国内在引入CTO概念时进行本土化与适用性上的调整的成功。

四项能力走进CTO之位

多年从事软件开发和软件开发管理,吕建伟以他自己的工作经历总结出了做好一名CTO所需要的四个基本能力:商业眼光,技术目光,产品架构,管理才能。
在他看来,商业软件公司的研发目标最终还是要落实到商业盈利上,所以对新应用、新产品、新盈利模式,总是需要不断地跟踪、分析、梳理、引进。
第二就是技术目光,因为一代产品的开发,关系到企业未来7-8年的发展,责任重要,耗资也大。所以要选用符合未来发展趋势的技术,要采用思想更先进的产品框架,踏准时代的潮流。否则,与时代发展的方向偏离,就无法顺势而起。
具体到产品开发上,所要采用的产品架构,需要很多细节技术的支撑。一个好的产品架构,可以使应用开发人员写很少的代码就能很快实现需求,而且稳定性、性 能、定制化、技术支持诊断,部署都非常的好。这正是架构师的魅力所在。当然,CTO无需去亲自调试每个技术细节能不能做到,这个可以由架构师或架构组来 做,但整体框架必须CTO来驾驭,因为这是一个产品的根。
软件开发过程管理能力,直接关系到研发组织结构建设与可持续发展,团队协调异常处理,需求质量、产品进度、产品质量和竞争力的保证,产品理念在营销人员、实施人员、服务人员、客户之间的传递,等等方面。所以,优秀的管理开发过程管理能力,也是CTO必备本领之一。
业界潮流的跟踪与交流是必不可少的,而且自己的不断梳理和总结也是必须的。这也是吕建伟做了这么多年CTO所得出的结论。

CTO之位如何发展

面对新技术新思想不断产生的狂潮,吕建伟一直采取“有利才使用”的原则,只有当新技术明显有利于提高研发生 产力和生产质量的时候,他才会投入人力去收集详细资料、翻译资料、做演示、做研发部门研讨会、做引进项目。在技术上,如果新技术不能产生生产力无法提高工 作效率,那么这就不能被用作实际的开发与生产;在企业发展角度,因为企业总是处于不进则退的残酷商业竞争当中,他们没有闲钱去研究和试验技术,只对最能提 高生产力和利润的技术买单,这样其实最能验证一项技术的有用性。适用性是他决定是否采用新技术的第一原则。
谈到未来的职业发展,吕建伟认为自己很有继续在企业管理软件行业发展的动力与活力。结合到新技术在开发与企业运营之间的关系,他非常喜欢在软件开发这个行 业继续打拼下去,并且乐于和最终客户/用户去交流,并获悉他们目前的挑战、机遇和解决方法。所有这些都让他感到很充实。在以前的工作经历中,有很多机会可 以使他进入到纯技术产品公司工作。但是,如果脱离了具体的企业应用,就无法想像新的技术到底在企业应用中会产生多少种特殊的用法和效果。而只有继续在企业 管理软件行业,他才能感受到技术发展与实际应用完美结合时产生的快乐。

开发者的自我提升

吕建伟与很多朋友有过交流,其中不乏已经从事软件行业多年的技术人员。他们往往会对自己的未来产生过迷惘,走完面前一步就不知道接下来该如何发展。而且IT业每年都会有新的浪潮产生,面对不断推陈出新的IT产业,不少朋友因为追逐潮流而惶惶不安。
在他看来,虽然每年都会出现许多新的技术,但是主流阶段和分支其实不多。从主机/终端时代、C/S时代、B/S时代到RIA时代;从面向过程、面向对象、 面向组件到面向服务;从硬件、操作系统、开发语言、中间件到客户端;从服务器、桌面、移动设备到嵌入设备。大致都是这样的行进阶段和层面视图。开发员根本 无需面面俱到,只要把握好未来趋势和自己所擅长的核心,继续精进,就可以在时代变化中占有一席之地。


1.250定律
  拉德认为:每一位顾客身后,大体有250名亲朋好友。如果您赢得了一位顾客的好感,就意味着赢得了250个人的好感;反之,如果你得罪了一名顾客,也就意 味着得罪了250 名顾客。   在你的查看有关“网站”的文章">网站访客中,一个访客可能可以带来一群访客,任何网站都有起步和发展的过程,这个过程中此定律尤其重要。
2.达维多定律
  达维多认为,一个企业要想在市场上总是占据主导地位,那么就要做到第一个开发出新产品,又第一个淘汰自己的老产品。   国内网站跟风太严重,比如前段时间的格子网,乞讨网,博客网,一个成功了,大家一拥而上。但实际效果是,第一个出名的往往最成功,所以在网站的定位上,要 动自己的脑筋,不是去捡人家剩下的客户。同理,买人家出售的数据来建站效果是很糟糕的。
3.木桶定律
  水桶定律是指,一只水桶能装多少水,完全取决于它最短的那块木板。这就是说任何一个组织都可能面临的一个共同问题,即构成组织的各个部分往往决定了整个组 织的水平。   注意审视自己的网站,是速度最糟糕?美工最糟糕?宣传最糟糕?你首先要做的,不是改进你最强的,而应该是你最薄弱的。
4.马太效应
  《新约》中有这样一个故事,一个国王远行前,交给三个仆人每人一锭银子,吩咐他们:“你们去做生意,等我回来时,再来见我。”国王回来时,第一个仆人说: “主人,你交给我们的一锭银子,我已赚了10锭。”于是国王奖励他10座城邑。第二个仆人报告说:“主人,你给我的一锭银子,我已赚了5锭。” 于是国王例奖励了他5座城邑。第三个仆人报告说:“主人,你给我的一锭银子,我一直包在手巾里存着,我怕丢失,一直没有拿出来。”于是国王命令将第三个仆 人的一锭银子也赏给第一个仆人,并且说:“凡是少的,就连他所有的也要夺过来。凡是多的,还要给他,叫他多多益善。”这就是马太效应。   在同类网站中,马太效应是很明显的。一个出名的社区,比一个新建的社区,更容易吸引到新客户。启示是,如果你无法把网站做大,那么你要做专。作专之后再做 大就更容易。
5.手表定理
  手表定理是指一个人有一只表时,可以知道现在是几点钟,而当他同时拥有两只表时却无法确定。
  一个网站,你只需要关注你特定的用户群需求。不要在意不相干人的看法。
6.不值得定律
  不值得定律:不值得做的事情,就不值得做好   不要过度seo,如果你不是想只做垃圾站。不要把时间浪费在美化再美化页面,优化再优化程序,在你网站能盈利后,这些事情可以交给技术人员完成。
7.彼得原理
  劳伦斯.彼得认为:在各种组织中,由于习惯于对在某个等级上称职的人员进行晋升提拔,因而雇员总是趋向于晋升到其不称职的地位。
  不要轻易改变自己网站的定位。如博客网想变门户,盛大想做娱乐,大家拭目以待吧。
8.零和游戏原理
  当你看到两位对弈者时,你就可以说他们正在玩“零和游戏”。因为在大多数情况下, 总会有一个赢,一个输,如果我们把获胜计算为得1分,而输棋为-1分,那么,这两人得分之和就是:1+(-1)=0   不要把目光一直盯在你的竞争网站上,不要花太多时间抢它的访客。我们把这些时间用来寻找互补的合作网站,挖掘新访客。
9.华盛顿合作规律
  华盛顿合作规律说的是: 一个人敷衍了事,两个人互相推诿, 三个人则永无成事之日。   如果你看准一个方向,你自己干,缺人手就招。不要轻易找同伴一起搞网站,否则你会发现,日子似乎越过越快了,事情越做越慢了。
10.邦尼人力定律
  一个人一分钟可以挖一个洞,六十个人一秒种却挖不了一个洞。合作是一个问题,如何合作也是一个问题。
  你需要有计划。
11.牛蛙效应
  把一只牛蛙放在开水锅里,牛蛙会很快跳出来;但当你把它放在冷水里,它不会跳出来,然后慢慢加热,起初牛蛙出于懒惰,不会有什么动作,当水温高到它无法忍 受的时候,想出来,但已经没有了力气。   如果你是soho,注意关注你的财务。不要等到没钱了再想怎么挣,你会发现那时候挣钱更难。
12.蘑菇管理
  蘑菇管理是许多组织对待初出茅庐者的一种管理方法,初学者被置于阴暗的角落(不受重视的部门,或打杂跑腿的工作),浇上一头大粪(无端的批评、指责、代人受过),任其自生自灭(得不到必要的指导和提携)。
  做网站毕竟要遭遇这样的阶段,搜索引擎不理你,友情链接找不到,访客不上门。这是磨练。
13.奥卡姆剃刀定律
  如无必要,勿增实体。
  把网站做得简单,再简单,简单到非常实用,而不是花俏。google的首页为什么比雅虎好?
14.巴莱多定律(Paredo 也叫二八定律)
  你所完成的工作里80%的成果,来自于你20%的付出;而80%的付出,只换来20%的成果。
  随时衡量你所做的工作,哪些是最有效果的。
1.马蝇效应
  林肯少年时和他的兄弟在肯塔基老家的一个农场里犁玉米地,林肯吆马,他兄弟扶犁,而那匹马很懒,慢慢腾腾,走走停停。可是有一段时间马走得飞快。 林肯感到奇怪,到了地头,他发现有一只很大的马蝇叮在马身上,他就把马蝇打落了。看到马蝇被打落了,他兄弟就抱怨说:"哎呀,你为什么要打掉它,正是那家 伙使马跑起来的嘛!"   在你心满意足的时候,去寻找你的马蝇。没有firefox,不会有ie7,firefox就是微软的马蝇之一。马蝇不可怕,怕的是会一口吃掉你的东西,像 ie当初对网景干的那样。
2.最高气温效应
每天最热总是下午2 时左右,我们总认为这个时候太阳最厉害,其实这时的太阳早已偏西,不再是供给最大热量的时候了。此时气温之所以最高,不过是源于此前的热量积累。
  你今天的网站流量,是你一个星期或更长时间前所做的事带来的。
3.超限效应(溢出效应)
刺激过多、过强和作用时间过久而引起心理极不耐烦或反抗的心理现象,称之为“超限效应”。 别到别人论坛里发太多广告。别在自己网站上放太多广告。别在自己的论坛里太多地太明显地诱导话题。
4.懒蚂蚁效应
生物学家研究发现,成群的蚂蚁中,大部分蚂蚁很勤劳,寻找、搬运食物争先恐后,少数蚂蚁却东张西望不干活。当食物来源断绝或蚁窝被破坏时,那些勤快的蚂 蚁一筹莫展。“懒蚂蚁”则“挺身而出”,带领众伙伴向它早已侦察到的新的食物源转移。   不要把注意力仅仅放在一个网站上,即使这个网站现在为你带来一切。你要给自己一些时间寻找新的可行的方向,以备万一。
5.长尾理论
  ChrisAnderson认为,只要存储和流通的渠道足够大,需求不旺或销量不佳的产品共同占据的市场份额就可以和那些数量不多的热卖品所占据的市场份 额相匹敌甚至更大。   对于搜索引擎,未必你需要一个热门词排在第一位,如果有
一千个冷门词排在第一位,效果不但一样,还会更稳定更长远。
6.破窗理论
  栋建筑上的一块玻璃,又没有及时修好,别人就可能受到某些暗示性的纵容,去打碎更多的玻璃。   管理论坛时,如果你发现第一个垃圾贴,赶紧删掉他吧。想想:落伍现在为什么那么多××贴?现在控制比最初控制难多了。
7.“羊群效应”,又称复制原则(Copy Strategy)
  一个羊群(集体)是一个很散乱的组织,平时大家在一起盲目地左冲右撞。如果一头羊发现了一片肥沃的绿草地,并在那里吃到了新鲜的青草,后来的羊群就会一哄而上,争抢那里的青草,全然不顾旁边虎视眈眈的狼,或者看不到其它地方还有更好的青草。
  不要轻易跟风,保持自己思考的能力。
8.墨菲定律
  如果坏事情有可能发生,不管这种可能性多么小,它总会发生,并引起最大可能的损失。
  除非垃圾站,否则不要作弊,对搜索引擎不要,对广告也不要。
9.光环效应
  人们对人的某种品质或特点有清晰的知觉,印象比较深刻、突出, 这种强烈的知觉, 就像月晕形式的光环一样,向周围弥漫、扩散,掩盖了对这个人的其他品质或特点的认识。
  不要轻易崇拜一个人或者公司、一个概念、一种做法。
10.蝴蝶效应
  一只亚马逊河流域热带雨林中的蝴蝶,偶尔扇动几下翅膀,两周后,可能在美国德克萨斯州引起一场龙卷风。
  不管你做什么,网站或者其他,你都应该关注新闻。机遇或者灾难可能就在那。
11.阿尔巴德定理
  一个企业经营成功与否,全靠对顾客的要求了解到什么程度。   我赞同别人的点评:看到了别人的需要,你就成功了一半;满足了别人的需求,你就成功了全部。
  尤其是做网站。
12.史密斯原则
  如果你不能战胜他们,你就加入到他们之中去。  
  不要试图做孤胆英雄。如果潮流挡不住,至少,你要去思考为什么。

一、IE读取XML

    var xmlDoc;
  
  xmlDoc = new ActiveXObject( "Msxml2.DOMDocument" );
  xmlDoc.loadXML(xml);
//取的节点
var points = xmlDoc.documentElement.getElementsByTagName("point");
//取得节点的内容值
points[i].childNodes[1].text



、firefox读取XML

Firefox中创建一个XML DOM,需要调用document.implementation对象的createDocument()查看有关“方法”的文章">方法。该方法接受三个参数:第一个参数是包含文档所使用的命名空间URI的字符串;第二个参数是包含文档根元素名称的字符串;第三个参数是要创建的文档类型(也称为doctype)。如果要创建空的DOM文档,则代码如下所示:

var oXmlDom = document.implementation.createDocument("", "", null);

前两个参数是空字符串,第三个参数为null,这样可以确保生成一个彻底的空文档。事实上,现在Firefox中并不提供针对文档类型的JavaScript支持,所以第三个参数总是为null。如果要创建包含文档元素的XML DOM,那么可以在第二个参数中指定标签名称:

var oXmlDom = document.implementation.createDocument("", "books", null);

这段代码创建了一个XML DOM,其documentElement是<books/>。如果要创建包含指定命名空间的DOM,可以在第一个参数中指定命名空间URI:

var oXmlDom = document.implementation.createDocument("http://www.site1.com",

       "books", null);

当在createDocument()方法中指定命名空间时, Firefox会自动附上前缀a0以表示命名空间URI:

<a0:books xmlns:a0="http://www.site1.com" />

接着,你可以通过程序来填充XML文档,不过在一般情况下,还需要在空的XML DOM对象中载入现有的XML文档。

1. 在Firefox中载入XML数据

在Firefox中,将XML载入XML DOM的方法和微软采用的方法大致相同,只存在一个显著区别:Firefox只支持load()方法。因此,在这两种浏览器中载入外部XML数据的代码是相同的:

oXmlDom.load("books.xml");

与微软的IE一样,Firefox同样实现了async属性,该属性的行为也与其一致:将async设置为
false,表示以同步模式载入文档;否则,以异步模式载入文档。

Firefox的XML DOM实现和微软的XML DOM实现还存在另一个不同,即Firefox不支持readyState属性及onreadystatechange事件处理函数。在Firefox中,支持load事件和onload事件处理函数。在文档完全载入后将触发load事件:

oXmlDom.load("books.xml");

oXmlDom.onload = function () {

    //文档完全载入后的操作

};

正如前面所说,在Firefox的XML DOM实现中,并没有loadXML()方法,不过通过Firefox中的DOMParser类可以模拟loadXML()的行为。该类有一个名为parseFromString()的方法,用来载入字符串并解析成文档:

var sXml = "<root><person><name>Jeremy McPeak</name></person></root>";

var oParser = new DOMParser();

var oXmlDom = oParser.parseFromString(sXml,"text/xml");

在这段代码中,创建了一个XML字符串,并作为参数传递给DOMParser的parseFromString()方法。parseFromString()方法的两个参数分别是XML字符串和数据的内容类型(一般设置为text/xml)。parseFromString()方法返回XML DOM对象,因此这里得到的oXmlDom与第一个例子相同。

2. 在Firefox中获取XML数据

尽管存在这样那样的不同,但IE和Firefox中用于获取文档中XML数据的大多数属性和方法是一致的。正如在IE中,可以使用documentElement属性来获取文档的根元素,例如:

var oRoot = oXmlDom.documentElement;

Firefox同样支持W3C标准属性,包括childNodes、firstChild、lastChild、nextSibling、nodeName、nodeType、nodeValue、ownerDocument、parentNode和previousSibling。不幸的是,对于微软专有的text和xml属性,Firefox并不支持,不过可以利用其他方法来模拟该属性的行为。

大家应该还记得,text属性返回了当前节点的内容,或者是当前节点及其子节点的内容。这不仅仅返回当前节点的文本,还有所有子节点的文本,因此要模拟该功能实现是十分容易的。下面这个简单的函数就能够完成该功能,该函数唯一的参数是一个节点:

function getText(oNode) {

    var sText = "";

    for (var i = 0; i < oNode.childNodes.length; i++) {

       if (oNode.childNodes[i].hasChildNodes()) {

           sText += getText(oNode.childNodes[i]);

       } else {

           sText += oNode.childNodes[i].nodeValue;

       }

    }

    return sText;

}

在getText()函数中,sText变量用来保存获取的所有文本。接着对oNode的子节点使用for循环进行遍历,检查每个子节点是否包含子节点。如果有子节点,那么就将其childNode传给getText()函数,并进行同样的处理;如果没有子节点,那么将当前节点的nodeValue加到字符串中(对文本节点而言,这只是文本字符串)。处理了所有子节点后,该函数返回变量sText。

IE中的xml属性将存放对当前节点包含的所有XML进行序列化的结果。在Firefox中,提供了一个名为XMLSerializer对象来完成这一功能。该对象提供一个使用JavaScript可访问的serializeToString()方法,使用该方法可以对XML数据进行序列化。

function serializeXml(oNode) {

    var oSerializer = new XMLSerializer();

    return oSerializer.serializeToString(oNode);

}

serializeXml()函数以XML节点作为参数,创建一个XMLSerializer对象,并将该节点传给serializeToString()方法。该方法将向调用者返回XML数据的字符串表示。

对于节点操作的DOM方法,Firefox与IE大致相同。参见“在IE中操作DOM”小节。

3. 在Firefox中处理错误

Firefox与IE的错误处理并不一样
。当IE遇到错误时,它会填充parseError对象;而当Firefox遇到错误时,它会将包含错误信息的XML文档载入到XML DOM文档中。看下面的这个例子:

var sXml = "<root><person><name>Jeremy McPeak</name></root>";

var oParser = new DOMParser();

var oXmlDom = oParser.parseFromString(sXml,"text/xml");



if (oXmlDom.documentElement.tagName != "parsererror") {

    //没有错误发生,进行所需操作

} else {

    alert("An Error Occurred");

}

在突出显示的代码行中,你会发现其中将产生一个错误:XML字符串格式不正确(因为<person>元素不完整,没有相应的</person>元素)。当载入错误的XML时,XML DOM对象将会载入一个documentElement为<parsererror/>的错误文档。我们可以通过检查documentElement的tagName属性来很容易地确定是否发生错误。如果tagName属性不是parsererror,就可以确定没有发生任何错误。

在本例中,可能会生成如下所示的错误文档:

<parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml">XML

Parsing Error: mismatched tag. Expected: </person>.

Location: http://yoda/fooreader/test.htm

Line Number 1, Column 43:<sourcetext><root><person><name>Jeremy

McPeak</name></root>

------------------------------------------^</sourcetext></parsererror>

所有的错误信息都包含在错误文档的文本中。如果要通过程序使用这些错误信息,那么首先就要对其进行解析。最简单的方法是使用一个稍长的正则表达式:

var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column

    (\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/;

该正则表达式将错误文档分为五个部分:错误消息、发生错误的文件名、行号、该行中发生错误的位置,以及发生错误的源代码。使用正则表达式对象的test()方法可以使用这些信息:

if (oXmlDom.firstChild.tagName != "parsererror") {

    //没有错误发生,进行所需操作

} else {

    var oXmlSerializer = new XMLSerializer();

    var sXmlError = oXmlSerializer.serializeToString(oXmlDom);

    var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column

       (\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/;

    reError.test(sXmlError);

正则表达式捕获到的第一部分数据是错误消息,第二部分是文件名,第三部分是行号,第四部分是行内位置,第五部分是源码。你可以使用这些解析后的信息来创建自定义的错误消息:

var str = "An error occurred!!\n" +

    "Description: " + RegExp.$1 + "\n" +

    "File: " + RegExp.$2 + "\n" +

    "Line: " + RegExp.$3 + "\n" +

    "Line Position: " + RegExp.$4 + "\n" +

    "Source Code: " + RegExp.$5;



alert(str);

style="font-family: 宋体;">如果发生错误,那么alert()方法会以易于阅读的格式在警告框中来显示相关的错误信息。
查看有关“网站”的文章">网站怎么做,才会成功呢?从个人的经验和思考,认为有以下几点:

1、做一个为顾客创造价值的网站

网站建设的目标,毫无疑问,是为顾客提供方便和价值。在顾客使用了你的网站后,是否赞好,才是网  
站建设者真正要关注的地方。一个优秀的网站,是一个为顾客提供价值的网站,是不愁推广的,顾客使用了你的网站后,会把网站记住,同时也会把网站传递给他周围的亲朋好友。

2、抓住重点和特色

百度之特色在于搜索,新浪之特色在于资讯,腾讯之特色在于及时通讯,淘宝之特色在于购物。一个网站,必须要有自己的特色。有特色才会有优势,也才会有价值。

3、做好细节,以细取胜

网站是否做好,细节是关键。一个网站,有正确的战略,有正确的方法,有正确的领导人,但未必能成功。关键还要看细节,是否做得到位。信息内的一段文 字失误,一张图片不得体,一个应用流程不能畅通,一个页面布局不够整洁或不协调,一个功能使用不够方便,都会影响顾客的使用,甚至顾客的情绪。所以,细节 是网站制胜的关键。

4、重赢利,轻排名

网站建成后,赢利是重点。大部份的人,做成网站后,就以为大功告成,便不断地做推广,提高Alexa排名,吸引更多的人来浏览。以为如此,便能获得 顾客的青睐,便能从顾客的腰包里掏出钱来。如是操作,恐怕只能赚点可怜的广告费。一个网站,在创业初期,大部分还是明确的赢利点,要抓住赢利点,不放松。 争取先赢利,先生存,再求发展。

5、坚持和专注;

网站的规模赢利非一日之寒,务必还要坚持和专注。坚持是成功之要决,我想,这是大家所共知的。在此,我想多谈一点的是专注。专注于做我们的服务,做我们的特色,做我们的产品。以此,来吸引我们的目标顾客,让他们能在我们的网站上能获得价值和好处。

6、坚持推广

网站的推广工作,是一件系统工程。从网站建立之起,就要引以为重。从网站关键字优化到搜索引擎登录,再到友情链结增加PR值,网站广告、论坛精华贴等等方法,都需要认真研究,仔细分析。才能得到比较好的效果。

在此,特别想提到是搜索引擎优化。时下,搜索引擎是引用人数最多的工具。大多数的网民,是通过搜索引擎来寻找所需信息。所以,搜索引擎优化,是一件非常重要的工作。优化工作,需落实到每个频道、每个栏目,乃至每篇文章页面。都需要仔细斟酌,方可达到比较满意的优化效果。

推广工作是一项长期的工作。各种推广方法,必须持之以恒,不懈努力,才能有望使网站积累更多的人气,留住更多的顾客,才能有望赢利。

最近公司在外面租用一台查看有关“服务器”的文章">服务器,服务器是在河南。服务器租用的猫腻我想地球人都知道,以旧抵新是常有的事。毕竟大家图都是便宜,看的过去就行了。在要求对方安装好FreeBSD7.2(还是要求mini+man+ports,忘了对分盘做出要求,对方没有合理的分盘,遗憾了。)之后,我使用SSH远程查看。最重要看了看CPU和内存、硬盘等信息。

硬盘划分查看:#df -h

内存查看:top  信息里有

CPU
#cat /var/run/dmesg.boot | grep CPU

一、Linux

查看cpu信息:

$ cat /proc/cpuinfo

二、Freebsd

大致下面几个可以显示 参考下:

dmesg 最简单的方法

freebsd# cat /var/run/dmesg.boot |grep CPU 可以查看 cpu信息

sysctl hw.model 看cpuid

sysctl machdep.tsc_freq 看cpu频率

或者直接通过ports

cd /usr/ports/misc/cpuid

make install clean

然后

可以直接通过cpuid来查看

/usr/local/bin/cpuid

查看有关“mysql”的文章">mysql和postgresql都是非常好的开源数据库,在这里我们不讨论谁优谁劣。因为简单粗暴靠几个参数去判断好坏,还是对技术的不负责。不同的生产环境和不同的应用,选择最匹配的数据库才是架构师的责任,而不是一味追求新颖、牛B,更没有必要去追求功能越多越强。

下面是一片07年的文章,尽管现在Mysql已经是5.X了,也多了事务的支持;尽管postgresql8.x了,对windows的支持也今非昔比;但是任何一个软件都有他积累过程和核心优势,我想仍然非常的借鉴意义。 如何结合自己的需求用好每一种数据库的优势,这才是一个架构师明智的选择。

适合的才是最好的。

一、前言

在这篇文章中,我们选用MySQL 4.0.2-alpha与PostgreSQL 7.2进行比较,因为MySQL 4.0.2-alpha开始支持事务的概念,因此这样的比较对于MySQL应该较为有利。

我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切。对于一个成熟的数据库,稳定性肯定会日益提供。而随着硬件性能的飞速提高,速度也不再是什么太大的问题。

二、两者的共同优势

这两个产品都属于开放源码的一员,性能和功能都在高速地提高和增强。MySQL AB的人们和PostgreSQL的开发者们都在尽可能地把各自的数据库改得越来越好,所以对于任何商业数据库使用其中的任何一个都不能算是错误的选择。

三、两者不同的背景

MySQL的背后是一个成熟的商业公司,而PostgreSQL的背后是一个庞大的志愿开发组。这使得MySQL的开发过程更为慎重,而PostgreSQL的反应更为迅速。这样的两种背景直接导致了各自固有的优点和缺点。

四、MySQL的主要优点

1、首先是速度,MySQL通常要比PostgreSQL快得多。MySQL自已也宣称速度是他们追求的主要目标之一,基于这个原因,MySQL在以前的文档中也曾经说过并不准备支持事务和触发器。但是在最新的文档中,我们看到 MySQL 4.0.2-alpha已经开始支持事务,而且在MySQL的TODO中,对触发器、约束这样的注定会降低速度的功能也列入了日程。但是,我们仍然有理由相信,MySQL将有可能一直保持速度的优势。

2、MySQL比PostgreSQL更流行,流行对于一个商业软件来说,也是一个很重要的指标,流行意味着更多的用户,意味着经受了更多的考验,意味着更好的商业支持、意味着更多、更完善的文档资料。

3、与PostgreSQL相比,MySQL更适宜在Windows环境下运行。 MySQL作为一个本地的Windows应用程序运行(在NT/Win2000/WinXP下,是一个服务),而PostgreSQL是运行在 Cygwin模拟环境下。PostgreSQL在Windows下运行没有MySQL稳定,应该是可以想象的。

4、MySQL使用了线程,而PostgreSQL使用的是进程。在不同线程之间的环境转换和访问公用的存储区域显然要比在不同的进程之间要快得多。

5、MySQL可以适应24/7运行。在绝大多数情况下,你不需要为MySQL运行任何清除程序。PostgreSQL目前仍不完全适应24/7运行,这是因为你必须每隔一段时间运行一次VACUUM。

6、MySQL在权限系统上比PostgreSQL某些方面更为完善。 PostgreSQL只支持对于每一个用户在一个数据库上或一个数据表上的INSERT、SELECT和UPDATE/DELETE的授权,而MySQL 允许你定义一整套的不同的数据级、表级和列级的权限。对于列级的权限,PostgreSQL可以通过建立视图,并确定视图的权限来弥补。MySQL还允许你指定基于主机的权限,这对于目前的PostgreSQL是无法实现的,但是在很多时候,这是有用的。

7、由于MySQL 4.0.2-alpha开始支持事务的概念,因此事务对于MySQL不再仅仅成为劣势。相反,因为MySQL保留无事务的表类型。这就为用户提供了更多的选择。

8、MySQL的MERGE表提供了一个独特管理多个表的方法。

9、MySQL的myisampack可以对只读表进行压缩,此后仍然可以直接访问该表中的行。

五、PostgreSQL的主要优点:

1、对事务的支持与MySQL相比,经历了更为彻底的测试。对于一个严肃的商业应用来说,事务的支持是不可或缺的。

2、MySQL对于无事务的MyISAM表。采用表锁定,一个长时间运行的查询很可能会长时间地阻碍对表的更新。而PostgreSQL不存在这样的问题。

3、PostgreSQL支持存储过程,而目前MySQL不支持,对于一个严肃的商业应用来说,作为数据库本身,有众多的商业逻辑的存在,此时使用存储过程可以在较少地增加数据库服务器的负担的前提下,对这样的商业逻辑进行封装,并可以利用数据库服务器本身的内在机制对存储过程的执行进行优化。此外存储过程的存在也避免了在网络上大量的原始的SQL语句的传输,这样的优势是显而易见的。

4、对视图的支持,视图的存在同样可以最大限度地利用数据库服务器内在的优化机制。而且对于视图权限的合理使用,事实上可以提供行级别的权限,这是MySQL的权限系统所无法实现的。

5、对触发器的支持,触发器的存在不可避免的会影响数据库运行的效率,但是与此同时,触发器的存在也有利于对商业逻辑的封装,可以减少应用程序中对同一商业逻辑的重复控制。合理地使用触发器也有利于保证数据的完整性。

6、对约束的支持。约束的作用更多地表现在对数据完整性的保证上,合理地使用约束,也可以减少编程的工作量。

7、对子查询的支持。虽然在很多情况下在SQL语句中使用子查询效率低下,而且绝大多数情况下可以使用带条件的多表连接来替代子查询,但是子查询的存在在很多时候仍然不可避免。而且使用子查询的SQL语句与使用带条件的多表连接相比具有更高的程序可读性。

8、支持R-trees这样可扩展的索引类型,可以更方便地处理一些特殊数据。

9、PostgreSQL可以更方便地使用UDF(用户定义函数)进行扩展。

六、那么我究竟应该使用MySQL还是PostgreSQL

这个问题很难说得清,而且事实上除了MySQL和PostgreSQL外,使用Oracle、Sybase、Informix等也是明智的选择。如何你确定只在MySQL和PostgreSQL中进行选择,以下规则总是有效的。

1、如果你的操作系统是Windows,你应该使用MySQL。

2、如果你对数据库并不了十分了解,甚至不知道事务、存储过程等究竟是什么,你应该使用MySQL。

3、如果你的应用对数据的完整性和严肃性要求不高,但是追求处理的高速度。例如是一个论坛和社区,你应该使用MySQL。

4、你的应用是一个严肃的商业应用,对数据完整性要求很高。而且你希望对一些商业数据逻辑进行很好的封装,例如是一个网上银行,你应该使用PostgreSQL。

5、你的应用处理的是地理数据,由于R-TREES的存在,你应该使用PostgreSQL。

6、你是一个数据库内核的狂热爱好者,你甚至希望拥有你自己版本的数据库,毫无疑问,你必须使用PostgreSQL,没准下一个PostgreSQL版本中某一个模块的作者就是你。
当自己拥有一个查看有关“服务器”的文章">服务器以后,就希望把自己的博客迁到新的服务器上。

新的服务器是Centos5+nginx+php+mysql,不能再跑ASP的程序了,也就无从使用ZBLOG了。

自己不可能再花冤枉钱去买ASP虚拟主机的钱了,同时也想尝试一下PHP+MYSQL的博客程序。

从ASP+ACCESS迁移到PHP+MYSQL,有点麻烦。

之前之所以选择ZBLOG。有两个原因:

一、之前一直害怕mysql的数据的备份、导入、导出不方便,所以不敢选择PHP的博客程序。(现在觉得好笑)

二、受月光博客的影响,也想把自己的博客做成他的样子,每天有那么多的访问量。

使用之后发现ZBLOG确实是ASP博客里最优秀单人博客程序,良好的静态化设计,可以让搜索引擎快速的收录。尽管买的虚拟主机很烂,但竟然很少不能访问,我想静态化的作用不小。

在众多的PHP博客程序面前,我花了眼,网上有说这个好的,有说那个好的。

于是,我都下载下来体验了一把。有wordpress,bo-blog,emblog等等,都还不错。

wordpress是全球下载最多,使用量最多的PHP博客程序,但是我用了之后,不是很习惯,到不是语言的问题,而是整个用户习惯的问题。外国人设计的东西,而国内的用户习惯就是一样,而且写博客的时候加载特别慢,编辑器里,尽然没有CODE,不能加入代码,很是不方便。也需你会告诉wordpress有很多插件可以实现你要的功能,是你不知道用吧了。你说的很对,我就是不喜欢搞那么多杂七杂八的东西,我需要的是简单,能快速方便的书写博客的系统。所以,我不想选择wordpress。

Bo-blog试用之后,感觉还行,毕竟是中国人自己设计的博客系统,虽然比较简单,但是很符合我的用户习惯。再说,张宴的博客就是用的BOBLOG,访问的人挺多的,应该是款不错的博客程序。我很想把博客转到bo-blog上,可以一直在网上没有发现转换程序,找不到zblog to bo-blog的转换程序。不可能从头再来的,所以只能放弃。

emblog没有详细试用,感觉比较普通,没有什么特别吸引我的地方,一个比较普通的Php博客而已。

为了放自己的博客能顺利转到PHP博客上,我好选择了Wordpress因为网上,唯一提供的ZBLOG转PHP的就是WORDPRESS。

最后由ZBLOG顺利转换到WORDPRESS上,开始使用这款很火的程序,但最终我还是受不了了,他的用户习惯让我难以忍受。

于是,我继续寻找更适合我的PHP程序……

我想,我的博客系统,应该是简单方便的,能像ZBLOG生成真的静态页面的(这样方便搜索引擎能快速收录),而不需要太多我不要的复杂功能,也不需要多美化简单就是美……

最后,我找到现在用这个JBLOG,他第一吸引我的地方是可以生成真实的静态博客页面,而不是伪静态,这样对与服务器和搜索引擎都有好处。安装试用后,感觉真的很简单,就是一个发博客和管理评论的功能,也正好符合我的个人需求。

刚好,我又找到了wordpress转到Jblog的转换工具(这个工具不怎么样,需要自己做太多的工作,另外写文说明),于是一并转到了jblog上。

现在比较担心的JBLOG的问题是,他是一个人开发的,而是他发布时间不长,变化会比较大,可能会频繁升级。

我喜欢真实的静态化,所以我选择JBLOG了,尽管它有很多不成熟的地方,他的简单打动了我。

最后,我还打算做一个测试,我之前的博客百度收录210篇左右的静态文本在目录/post/nnn.html,我这次全部删除,生成新的article/2009-05/nnn.html的路径,我看看搜索引擎如何对待我这个网站,我现在PR是3,看搜索引擎需要多久变过来。

之前我用的是www.gisblogs.net ,我现在改成了gisblogs.net ,我设置了一个网站www.gisblogs.net让他跳转到gisblogs.net ,空间做了个错误页面,也是转到gisblogs.net ,看搜索引擎如何对待这次转换。

得出结论后,再发文与大家分享。

偶然间看到一篇云风的CSDN的讲座,让在游戏服务器方面的经验,让我突然眼前一亮:

一。引擎三大部分

基于 freebsd 的服务器
跨平台的客户端
二进制跨平台
支持 Win32 MacOs Linux Freebsd
3d 部分基于 openGL
C 语言编写底层、逻辑部分动态脚本语言
开发用相关工具
跨平台命令行工具
Windows 下的视觉编辑工具

二。服务器的设计
底层全部由 C 语言编写
逻辑层语言无关
类 COM 的模块化设计
多语言混合编程
多进程单线程结构
服务器组内各进程功能有明显的层次划分
数据和逻辑分离

三。服务器群
单一登陆点做进入系统的认证
全局数据库仅保存用户身份信息
不保持常连接
玩家可以在整个大世界中发生联系
物理上玩家分属不同服务器组管理
用户数据库各自独立,无须实时交互
虚拟世界中的距离即物理世界上的距离

四。服务器组间消息传递
避免交互性协议
游戏设计上考虑远程通讯的时间差
允许数据复制,并考虑多个副本相遇时的处理
每组服务器有唯一的数据输入输出点
海关服务
玩家的交互受游戏设计的限制
限制是为了更丰富的可能性
虚拟世界的战争、贸易以及资源分配

五。外部连接处理
多个外部接入点
国情问题:电信网通问题
特别通道:用于管理人员进入
组播
分组管理的问题
心跳控制
流水线作业
时间控制
录象回放调试(监督数据合法性)
聊天信息分离
利用广播服务器减低负载
广义聊天信息

六。时间校对
校对玩家机器和服务器组的时间
防止时间作弊
估算消息发生时刻,更流畅的完成交互动作
精确保证时间的一致性
NTP 协议的问题
Client 的不合作(区分恶意和无意)
服务器组间的时间校对
心跳控制

七。数据服务
唯一的数据储存点
使用本地文件系统
使用简单文本结构
使用简单的交互协议
物品发放服务
虚拟物品的控制
数据监控和备份

八。开发经验和教训
曾经追求大一统的设计
过分信赖 C++
设计模式滥用
数据应当文本化
应将每单个任务足够简化
不为尚不存在的需求做设计

  云风,之前我拜读过他的《我的编程感悟》,牛人一个。看过他的演讲ppt内容,正是我需要的解决的许多问题,一直搜寻这个讲座的视频。



未果,寻一连接:


http://subject.csdn.net/2009video/content-635659.html

以前零零散散的玩过,没有一个系统的理解,正好趁放假研究了一下,主要资料来自handbook。

概念

Jail是chroot机制的一种进化后的机制,可以提高更为高级和灵活的隔离和监管机制,除了文件系统监管外,还实现了设备隔离,用户隔离,系统资源隔离,使其更像是一种虚拟机机制了,与此相似的概念有linux下的openvz,以及Solaris下的Container。在下认为此类的技术会与虚拟化技术逐渐融合并逐渐集成入操作系统本身甚至硬件,最终成为新的操作系统资源分配机制(继多用户,多进程,Virtual Memory架构之后新的隔离机制)。

设计

Jail可以说是一种轻量级的虚拟机制,就我目前所了解到的资料来看,它实现了文件系统隔离,进程隔离,用户隔离,设备隔离。比较起linux下的openvz,差的地方有网络地址分配,共享库控制这两大方面,当然细节会有很大不同了。

部署

写了一大堆废话,下面才是真正开始安装使用了。

构建一个Jail,必备的几个参数有Jail的根目录,用户态程序,主机名以及IP地址,还有一个可选的dev。根据用户态程序的不同考虑可以将Jail做成完整的系统型Jail以及服务型Jail。下面搞的一种,其实个人比较感兴趣的是服务型Jail,但是handbook没有提及,资料也较少。

时至当前6.2的版本,各项脚本以及工具可以说是十分成熟了,因此也就有一个比较统一的部署和管理方式了,基本可以按照handbook来做了,具体如下:

1,构建Jail的根目录,假设建立一个名为test的Jail,放在/jail/test下。很简单,就一句命令:

#mkdir /jail/test

2,构建用户态程序,因为是完整的系统型Jail,自然这些用户态程序也就是FreeBSD的world了,make world实现:

# cd /usr/src
# make world DESTDIR=/jail/test
这里make world=make buildworld + make installworld,因此如果以前做过buildworld的话可以偷懒直接用以前build好的安装,可以节省大量时间,也就是

#make installworld DESTDIR=/jail/test
3,构建jail内系统运行需要的配置文件,也就是jail的etc了,也就一条:

# make distribution DESTDIR=/jail/test
4,修改rc.conf添加jail服务运行的必要参数,必备的有:
jail_enable="YES" # 如果设为 NO 则表示不自动启动 jail
jail_list="test" # 以空格分隔的 jail 名字列表


还需指定单个jail的必备参数:
jail_test_rootdir="/jail/test" # jail 的根目录
jail_test_hostname="jail.dawnh.net" # jail 的主机名
jail_test_ip="192.168.1.81" # jail 的 IP 地址

另外还有可选的devfs,可用于控制jail里面可以使用哪些设备

jail_test_devfs_enable="YES" # 在 jail 中挂接 devfs
jail_test_devfs_ruleset="test_ruleset" # 在 jail 中应用的devfs 规则集


至此Jail基本就建立完成了,可以启动了。

这里注意还有一点是handbook没有提到但必须做的事情,就是设置IP,前面虽然为Jail指定了IP,但这个IP似乎是指定这个Jail可以从宿主系统接受数据报的IP,要其真正起作用,还必须在宿主系统配置上这个IP才可以,一般的做法是在宿主系统的接口上设置alias,命令如下:

#ifconfig re0 inet 192.168.1.81 netmask 255.255.255.0 alias
这样才算真正完成了,然后就是启动这个jail了。

#/etc/rc.d/jail start
如果前面做的都没问题的话可以看到Jail服务正常启动。

使用

然后的问题就是怎么进到这个Jail里面去使用了。因为刚构建好的Jail类似刚安装好的FreeBSD,是一个任何服务都没启用,连root密码都为空的系统,此时只能从控制台登陆进去配置各项服务,然而这里关键的问题就是–Jail是没有控制台的!

当然不会有人傻到对这种问题束手无策,最容易想到的是直接通过宿主系统进到/jail/test/etc里去修改各种配置文件,貌似这也是大部分网上有的资料所写的办法。然而由于我玩openvz的习惯,总以为会有那么一个jailctl enter test的命令可以直接从宿主进入到jail中去,不幸的是–没有。

然而我却找到了jexec这样一个命令可以执行jail里的命令,于是就简单多了,按照安装FreeBSD系统的经验,装好后第一步就是设置root密码并开启ssh,这样才方便下面登陆进去管理嘛,于是这样做:

#jls

此命令列出当前运行的jail,这里的关键是取得这个jail的jid,因为下面要用到。我这里假设id为1

#jexec 1 passwd root

要求输入密码了,和平时该密码一样的效果。

#jexec /etc/rc.d/sshd forcestart

启动ssh

至此这个Jail就可以ssh上去管理了。

参考:http://www.wangchao.net.cn/bbsdetail_61107.html
http://www.ooso.net/archives/436

mysql 5.1支持触发器以及自定义函数接口(UDF)的特性,如果配合libmemcache以及Memcached Functions for MySQL,就能够实现memcache的自动更新。简单记录一下安装测试步骤。

安装步骤
安装memcached,这个步骤很简单,随处可见
安装mysql server 5.1RC,安装办法也很大众,不废话了
编译libmemcached,解压后安装即可./configure; make; make install
编译Memcached Functions for MySQL,在http://download.tangent.org/找一个最新的版本下载就是,./configure --with-mysql=/usr/local/mysql/bin/mysql_config --libdir=/usr/local/mysql/lib/mysql/
make
make install
接下来有两个办法让Memcached Functions for MySQL在mysql中生效
在mysql的shell中执行memcached_functions_mysql源码目录下的sql/install_functions.sql,这会把memcache function作为UDF加入mysql
运行memcached_functions_mysql源码目录下的utils/install.pl,这是一个perl脚本,作用同上一条
测试memcache function
以下测试脚本摘自memcached_functions_mysql的源码目录,有兴趣可以试试

PLAIN TEXTCODE:
drop table if exists urls;
create table urls (
  id int(3) not null,
  url varchar(64) not null default '',
  primary key (id)
  );

select memc_servers_set('localhost:11211');
select memc_set('urls:sequence', 0);

DELIMITER |

DROP TRIGGER IF EXISTS url_mem_insert;
CREATE TRIGGER url_mem_insert
BEFORE INSERT ON urls
FOR EACH ROW BEGIN
    SET NEW.id= memc_increment('urls:sequence');
    SET @mm= memc_set(concat('urls:',NEW.id), NEW.url);
END |

DELIMITER ;

insert into urls (url) values ('http://google.com');
insert into urls (url) values ('http://www.ooso.net/index.php');
insert into urls (url) values ('http://www.ooso.net/');
insert into urls (url) values ('http://slashdot.org');
insert into urls (url) values ('http://mysql.com');
select * from urls;

select memc_get('urls:1');
select memc_get('urls:2');
select memc_get('urls:3');
select memc_get('urls:4');
select memc_get('urls:5');

继续参看:
http://www.jackxiang.com/post/2628/
分页: 186/272 第一页 上页 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 下页 最后页 [ 显示模式: 摘要 | 列表 ]