Windows live writer

没有评论

2012 年 05 月 03 日 at 下午 4:48分类目录:乱七八糟

修改SHELL实现svn必须添加注释后提交

没有评论

2012 年 05 月 03 日 at 上午 11:15分类目录:Linux

最近在公司的项目中,因为很多人都参与开发,于是我们毫不犹豫的使用了svn来管理我们的项目,我们也特别强调,在提交代码的时候必须要添加注释,如果不添加注释,代码版本多了,根本搞不清,哪个版本改了什么东西?所以如果加一些注释的话,我们看起来,也方便很多。但是在真正的实际中,很多人都没有添加相关的注释,这里面的原因很多,因此决定通过脚本来控制这一过程,也就是实现必须要通过添加描述信息才能顺利的提交你的代码!。所以在提交的时候,我会强制要求,写注释。如果对svn的安装配置不怎么了解,请参考:linux svn安装和配置,不结合apache

#cd /home/administrator/www/svntest svntest是一个代码仓库
#cp ./hooks/pre-commit.tmpl ./hooks/pre-commit 将代码仓库根目录下,hooks文件夹中的pre-commit.tmpl文件重命名为pre-commit
#chmod +x ./hooks/pre-commit
#vi ./hooks/pre-commit

修改前的SHELL脚本:

REPOS="$1"
TXN="$2"

# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
 grep "[a-zA-Z0-9]" > /dev/null || exit 1

# Exit on all errors.
set -e

# Check that the author of this commit has the rights to perform
# the commit on the files and directories being modified.
"$REPOS"/hooks/commit-access-control.pl "$REPOS" $TXN \
 "$REPOS"/hooks/commit-access-control.cfg

# All checks passed, so allow the commit.
exit 0

修改后的脚本:

REPOS="$1"
TXN="$2"

# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook

LOGMSG=`$SVNLOOK log -t $TXN $REPOS | wc -m`       //定义个变量,注意这里不是单引号

#$SVNLOOK log -t "$TXN" "$REPOS" | \               //把这一行和下面的一行注释掉
# grep "[a-zA-Z0-9]" > /dev/null || exit 1

echo $LOGMSG > /home/administrator/www/aaa.txt     //为了测试变量用的,查看$LOGMSG有没有值,最后要注释掉
if [ "$LOGMSG" -lt 48 ]                            //这里为什么是48呢,一个汉字对应16个字符
then
 echo "\n至少输入4个汉字" >&2                        //必须填四个汉字
 exit 1
fi

# Exit on all errors.
#set -e

# Check that the author of this commit has the rights to perform
# the commit on the files and directories being modified.
#"$REPOS"/hooks/commit-access-control.pl "$REPOS" $TXN \    //把这一行和下面的一行注释掉。
#  "$REPOS"/hooks/commit-access-control.cfg

# All checks passed, so allow the commit.
exit 0

保存退出后!执行提交操作,效果图如下:

PHP正则表达式之捕获组详解

3 条评论

2012 年 04 月 16 日 at 上午 10:18分类目录:PHP

已命名捕获组(Named Groups)
当在一个表达式内多次用到回调引用时,很容易就把事情搞混淆,要弄清那些数字(1 … 9)都代表哪一个子内容是件很麻烦的事。回调引用的一个替代方法是使用带名字的捕获组(下文简称“有名组”)。有名组使用(?Ppattern)来设定,name代表组名,pattern是配合该有名组的正则结构。请看下面的例子:

/^(?P<year>\d{4})-(?P<month>\d{1,2})-(?P<day>\d{1,2})/

上式中,year/month/day就是组名,组名后面的是改组匹配内容的正则。这个式子的效果和上面的回调引用实例一样,只不过是用了有名组来实现。是不是更加易读易懂了?

有名组也能用于处理已匹配内容之数组的内部数据。赋予特定正则的组名(quote)也能作为所匹配到的内容在数组内部的索引词。

<?php

preg_match( '/^(?P<year>\d{4})-(?P<month>\d{1,2})-(?P<day>\d{1,2})/', "2012-21-12", $matches );

var_dump($matches);

?>

输出的结果是:

array
  0 => string '2012-21-12' (length=10)
  'year' => string '2012' (length=4)
  1 => string '2012' (length=4)
  'month' => string '21' (length=2)
  2 => string '21' (length=2)
  'day' => string '12' (length=2)
  3 => string '12' (length=2)

如果不用有名组的话,那么我们匹配出来的结果并没有相应的指定的key而是全是数字形式的key,这样子不方便我们在开发中
使用相关的参数,使用有名组的话,这个问题就很好解决了!
所以,有名组并不只是让写代码更容易,它也能用于组织代码。

利用keepalived构建高可用MySQL-HA

没有评论

2012 年 03 月 29 日 at 下午 8:31分类目录:MySQL | NoSQL

本来是找相关Redis的HA方案的,结果找到这篇文章,发现很不错,记录下,方便下次查找

地址:点击查看

上篇文章说配置Redis的主从问题,但我现在想要配置Redis的master-master模式,然后借用keepalived来实现故障自动转移的功能,
但是配置了Redis的相关参数之后,根本就不能达到我想要的目的,不知道是什么原因,看了网上很多的文章,都出现了类似的情况。估计是
Redis现在还不支持这个功能吧 期待高手。

参考资料:
1、http://blog.csdn.net/doraeimo/article/details/7029832
2、http://baike.baidu.com/view/4175422.htm

redis 分布式,主从同步

一条评论

2012 年 03 月 27 日 at 上午 9:37分类目录:NoSQL

redis和memcache比较像的,memcache可以实现服务器的集群,redis肯定也是可以的。下面在一台机,实现redis主从复制。
1,copy一下redis.conf,生成一个从机的配置

cp /usr/local/redis/redis.conf /usr/local/redis/redis_slave.conf

2,修改主服务器的配置redis.conf

bind 127.0.0.1

3,修改从服务器的配置redis_slave.conf

pidfile /usr/local/redis/var/redis_slave.pid

port 6380

bind 127.0.0.1

logfile /usr/local/redis/var/redis_slave.log

dbfilename dump_slave.rdb

slaveof 127.0.0.1 6379

4,启动主服务器,从服务器

redis-server /usr/local/redis/redis.conf

redis-server /usr/local/redis/redis_slave.conf

查看一下,redis.log文件会有以下内容

[3774] 27 Jun 12:53:32 * The server is now ready to accept connections on port 10002

[3774] 27 Jun 12:53:32 - 0 clients connected (0 slaves), 539568 bytes in use

[3774] 27 Jun 12:53:32 * Connecting to MASTER...

[3772] 27 Jun 12:53:32 - Accepted 127.0.0.1:33237

[3772] 27 Jun 12:53:32 * Slave ask for synchronization

[3772] 27 Jun 12:53:32 * Starting BGSAVE for SYNC

[3772] 27 Jun 12:53:32 * Background saving started by pid 3775

[3774] 27 Jun 12:53:32 * MASTER <-> SLAVE sync started: SYNC sent

[3775] 27 Jun 12:53:32 * DB saved on disk

[3772] 27 Jun 12:53:33 * Background saving terminated with success

[3772] 27 Jun 12:53:33 * Synchronization with slave succeeded

[3774] 27 Jun 12:53:33 * MASTER <-> SLAVE sync: receiving 333 bytes from master

[3774] 27 Jun 12:53:33 * MASTER <-> SLAVE sync: Loading DB in memory

[3774] 27 Jun 12:53:33 * MASTER <-> SLAVE sync: Finished with success

查看一下

root@ubuntu:/usr/local/redis# ps -e|grep redis

3774 ? 00:00:00 redis-server

4148 ? 00:00:00 redis-server

5,测试结果

//连接主服务器
[root@localhost var]# redis-cli -h 127.0.0.1 -p 6379
redis 127.0.0.1:6379> set fbbin binbin
OK
redis 127.0.0.1:6379> get fbbin
"binbin"
redis 127.0.0.1:6379> exit
========================================
//连接从服务器
[root@localhost var]# redis-cli -h 127.0.0.1 -p 6380
redis 127.0.0.1:6380> get fbbin
"binbin"
redis 127.0.0.1:6380> exit

OVER

windows 安装 mongodb 并添加到服务列表中

没有评论

2012 年 03 月 24 日 at 下午 3:53分类目录:NoSQL

准备工作:
到官方下载合适的版本 http://www.mongodb.org/downloads
这里用的是mongodb windows 32bit(我本机是32的OS) 版
解压mongodb到D:\mongodb\ 目录,同时在mongodb目录中新建目录db(用于存放数据)和目录logs(存放日志),那么mongodb目录中就应该有了这些文件,如图:

在D:\mongodb\logs\ 目录下新建一个mongodb.log 用于记录安装日志,那么都准备好了,开始安装吧~

安装步骤:

1.开始–运行–cmd

2.cd D:\mongodb\bin\

3. D:\mongodb\bin>mongod –logpath D:\mongodb\logs\mongodb.log –logappend –dbpath D:\mongodb\db –directoryperdb –serviceName MongoDB –install

参数不明白的可以使用命令:D:\mongodb\bin>mongod -h

如图:

如果安装成功,则显示下面文字

all output going to: D:\mongodb\logs\MongoDB.log
Creating service MongoDB.
Service creation successful.
Service can be started from the command line via ‘net start “MongoDB”‘.

安装成功后可以到windows服务中找到mongodb服务开启或者在cmd中执行命令net start MongoDB,这样mongodb服务就启动了,mongodb的默认端口是27017

服务启动后可以执行几个简单的命令测试下:

OVER!!

CentOS6.1+Nginx1.1.12+PHP5.3.9+Redis2.4.5+Memcache及相关扩展安装脚本

一条评论

2012 年 03 月 19 日 at 下午 8:16分类目录:WEB开发

#!/bin/sh
#Date:2012-01-12 02:00:00
#Description:版本针对32位系统,操作系统为CentOS6.0
#基本路径设置

BASE_PATH="/usr/local/webserver"

#复制yum更新文件#####################################################################
#rm -rf /var/cache/yum
#cp -R yum /var/cache/
#安装依赖库和开发工具#################################################################
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
#安装Nginx库#########################################################################
yum -y install pcre-devel  zlib-devel
#安装PHP库###########################################################################
yum -y install gd-devel libjpeg-devel libpng-devel freetype-devel libxml2-devel curl-devel freetype-devel
#安装MySQL库#########################################################################
yum -y install bison gcc gcc-c++ autoconf automake zlib* libxml* ncurses-devel libtool-ltdl-devel*
#安装cmake###########################################################################
cd /home/soft
tar -zxvf cmake-2.8.7.tar.gz
cd cmake-2.8.7
./configure
gmake
gmake install
#添加MYSQL用户#######################################################################
/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql
#创建安装目录########################################################################
mkdir -p $BASE_PATH/mysql/data
#设置binlog#########################################################################
mkdir $BASE_PATH/mysql/mysql-bin
chown -R mysql:mysql $BASE_PATH/mysql/mysql-bin
#目录授权############################################################################
chown -R mysql:mysql $BASE_PATH/mysql/data
# 添加MYSQL用户######################################################################
cd /home/soft
MAKE_RUN=$(($(more /proc/cpuinfo | grep processor | wc -l) + 1))
tar -zxvf mysql-5.5.20.tar.gz
cd mysql-5.5.20
cmake \
    -DCMAKE_INSTALL_PREFIX=$BASE_PATH/mysql/\
    -DMYSQL_DATADIR=$BASE_PATH/mysql/data/\
    -DEXTRA_CHARSETS=all\
    -DDEFAULT_CHARSET=utf8\
    -DDEFAULT_COLLATION=utf8_general_ci\
    -DSYSCONFDIR=/etc/\
    -DWITH_DEBUG=0
make -j ${MAKE_RUN}
make install
#初始化权限表#######################################################################
rm -f /etc/my.cnf
cd /home/soft
cp my.cnf /etc/my.cnf
cd $BASE_PATH/mysql
./scripts/mysql_install_db --user=mysql
#开启mysql##########################################################################
$BASE_PATH/mysql/bin/mysqld_safe &
#设置数据库配置######################################################################
rm -f /etc/rc.d/init.d/mysql
cp $BASE_PATH/mysql/support-files/mysql.server  /etc/rc.d/init.d/mysql
chmod 700 /etc/rc.d/init.d/mysql
chkconfig --add mysql
chkconfig --level 345 mysql on
chkconfig --list mysql
#设置环境变量#######################################################################
echo "export PATH=$PATH:$BASE_PATH/mysql/bin">>/etc/profile
source /etc/profile
#更改密码###########################################################################
/etc/init.d/mysql restart
$BASE_PATH/mysql/bin/mysqladmin -uroot password root
mysql -uroot -proot
Grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
exit;

###################################################################################
###################################################################################
#安装libiconv扩展###################################################################
cd /home/soft
tar -zxvf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/usr/local/
make
make install
#安装libmcrypt扩展###################################################################
cd /home/soft
tar -zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make
make install
/sbin/ldconfig
cd libltdl
./configure --enable-ltdl-install
make
make install
#安装mhash扩展######################################################################
cd /home/soft
tar -zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure
make
make install
#加载软连接#########################################################################
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
#安装mcrypt扩展######################################################################
cd /home/soft
tar -zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8
/sbin/ldconfig
./configure
make
make install
#增加软连接 ,防止出现make: *** [ext/phar/phar.php] 错误 127############################
ln -s /usr/local/bin/libiconv.so /usr/bin/libiconv.so
ln -s /usr/local/bin/libiconv.so.2 /usr/bin/libiconv.so.2
ln -s $BASE_PATH/mysql/lib/libmysqlclient.so /usr/lib/libmysqlclient.so
ln -s $BASE_PATH/mysql/lib/libmysqlclient.so.18  /usr/lib/libmysqlclient.so.18
#添加www组和www用户##################################################################
/usr/sbin/groupadd www
/usr/sbin/useradd -g www www
mkdir -p /var/log/nginx
chmod +w /var/log/nginx
chown -R www:www /var/log/nginx
mkdir -p /hotdoc/www
chmod +w /hotdoc/www
chown -R www:www /hotdoc/www
#安装PHP#############################################################################
cd /home/soft
tar -zxvf php-5.3.9.tar.gz
cd php-5.3.9
./configure --prefix=$BASE_PATH/php/\
    --with-config-file-path=$BASE_PATH/php/etc/\
    --with-iconv-dir=/usr/local/\
    --with-freetype-dir\
    --with-mysql=$BASE_PATH/mysql/\
    --with-mysqli=$BASE_PATH/mysql/bin/mysql_config\
    --with-jpeg-dir\
    --with-png-dir\
    --with-zlib\
    --with-mhash\
    --enable-sockets\
    --enable-ftp\
    --with-libxml-dir\
    --enable-xml\
    --disable-rpath\
    --enable-safe-mode\
    --enable-bcmath\
    --enable-shmop\
    --enable-sysvsem\
    --enable-inline-optimization\
    --with-curl\
    --with-curlwrappers\
    --enable-mbregex\
    --enable-mbstring\
    --with-mcrypt\
    --with-gd\
    --enable-gd-native-ttf\
    --with-openssl\
    --with-mhash\
    --enable-pcntl\
    --enable-sockets\
    --with-ldap\
    --with-ldap-sasl\
    --enable-fpm\
    --with-xmlrpc\
    --enable-zip\
    --enable-soap\
    --without-pear

make ZEND_EXTRA_LIBS='-liconv'
make install
cd /home/soft
cp php.ini $BASE_PATH/php/etc/php.ini
echo "export PATH=$PATH:$BASE_PATH/php/bin">>/etc/profile
source /etc/profile
cd /home/soft
rm -f $BASE_PATH/php/etc/php-fpm.conf
cp php-fpm.conf $BASE_PATH/php/etc/php-fpm.conf
#检查语法是否正确
$BASE_PATH/php/sbin/php-fpm -t
#出现NOTICE: configuration file $BASE_PATH/php/etc/php-fpm.conf test is successful 测试成功
$BASE_PATH/php/sbin/php-fpm &
#安装PHP常用扩展#####################################################################
cd /home/soft/php-5.3.9
cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod 700 /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig --level 345 php-fpm on
chkconfig --list php-fpm

#安装libevent-2.0.16-stable.tar.gz###################################################
cd /home/soft
tar -zxvf libevent-2.0.16-stable.tar.gz
cd libevent-2.0.16-stable
./configure --prefix=/usr/
make
make install
#安装Memcached#######################################################################
cd /home/soft
tar -zxvf memcached-1.4.10.tar.gz
cd memcached-1.4.10
./configure --with-libevent=/usr
make
make install
ln -s /usr/lib/libevent* /usr/lib/
/usr/local/bin/memcached -d -l 127.0.0.1 -p 11211 -u nobody -m 200 -c 1024 -P /tmp/memcached.pid
#设置自动启动#########################################################################
rm -f /etc/init.d/memcached
cd /home/soft
cp memcached /etc/init.d/memcached
chmod 711 /etc/init.d/memcached
chkconfig --add memcached
chkconfig --level  345  memcached  on
chkconfig --list memcached
#安装MemcahePHP的扩展#################################################################
cd /home/soft
tar -zxvf memcache-3.0.6.tgz
cd memcache-3.0.6
$BASE_PATH/php/bin/phpize
./configure --with-php-config=$BASE_PATH/php/bin/php-config --with-zlib-dir --enable-memcache
make
make install
# 安装ZEND扩展
cd /home/soft
tar -zxvf ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz
cd ZendGuardLoader-php-5.3-linux-glibc23-i386
mkdir -p $BASE_PATH/php/lib/php/extensions/Zend
cp -R php-5.3.x $BASE_PATH/php/lib/php/extensions/Zend/
#安装Xcache
cd /home/soft
tar -zxvf xcache-1.3.2.tar.gz
cd xcache-1.3.2
$BASE_PATH/php/bin/phpize
./configure --with-php-config=$BASE_PATH/php/bin/php-config --enable-xcache --enable-xcache-assembler
make
make install
# 安装Redis服务端
cd /home/soft
tar -zxvf redis-2.4.5.tar.gz
cd redis-2.4.5
make
make PREFIX=$BASE_PATH/redis install
# 设置Redis服务端
cd /home/soft
rm -f /etc/redis/redis.conf
rm -rf /etc/redis/
mkdir /etc/redis
mkdir -p /var/lib/redis
cp redis.conf /etc/redis/redis.conf
# 防止Redis脚本在重启或停止报错
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl -p
# 设置自动启动
cd /home/soft
rm -f /etc/init.d/redis
cp redis /etc/init.d/redis

# 启动Redis
chmod 755 /etc/init.d/redis
chkconfig --add redis
chkconfig --level 345 redis on
chkconfig --list redis
# 安装PHPRedis扩展
cd /home/soft
tar -zxvf phpredis-2.1.3.tar.gz
cd phpredis
#根据PHP实际安装路径进行设置
$BASE_PATH/php/bin/phpize
./configure -with-php-config=$BASE_PATH/php/bin/php-config
make
make install

mkdir -p /var/local/webserver/nginx/logs
chmod +w /var/local/webserver/nginx/logs
chown -R www:www /var/local/webserver/nginx/logs

# 安装pcre-8.21
cd /home/soft
tar zxf pcre-8.21.tar.gz
cd pcre-8.21
./configure
make
make install

# 安装Nginx
cd /home/soft
tar zxf nginx-1.1.12.tar.gz
cd nginx-1.1.12
./configure \
    --user=www\
    --group=www\
    --prefix=$BASE_PATH/nginx\
    --sbin-path=$BASE_PATH/nginx/sbin/nginx\
    --conf-path=$BASE_PATH/nginx/conf/nginx.conf\
    --with-http_stub_status_module\
    --with-http_ssl_module\
    --with-pcre\
    --lock-path=/var/run/nginx.lock\
    --pid-path=/var/run/nginx.pid
make
make install
cd /home/soft
mv $BASE_PATH/nginx/conf/nginx.conf $BASE_PATH/nginx/conf/nginx.conf.old
cp nginx.conf $BASE_PATH/nginx/conf/
cp -R vhosts $BASE_PATH/nginx/conf/
rm -f $BASE_PATH/nginx/conf/fastcgi_params
cp fastcgi_params $BASE_PATH/nginx/conf/fastcgi_params
#自动启动
cd /home/soft
rm -f /etc/init.d/nginx
cp nginx /etc/init.d/
chmod 711 /etc/init.d/nginx
chkconfig --add nginx
chkconfig  --level  345  nginx  on
#开启防火墙
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 433 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/init.d/iptables restart

#重启所有服务器
/etc/init.d/nginx restart
/etc/init.d/php-fpm restart
/etc/init.d/mysql restart
/etc/init.d/memcached restart
/etc/init.d/redis restart

原文地址:http://www.cnblogs.com/wk0423/archive/2012/01/17/2325050.html

影响项目进度的几大因素

2 条评论

2012 年 02 月 18 日 at 下午 10:25分类目录:乱七八糟

从事互联网行业已有几年了,每家互联网公司都有自己的团队,每个公司都有很多部门,各部门协调不好的话,进度慢,并且大家还累的要死,说一下我脑子里印象比较深的几个。

1,需求变动

这一点是最要命的,需求如果没有书面的形势确定下来的话,就比较容易变动。人的思想都是不断改变的,今天一个想法,明天一个想法这谁都受不了。想法的不同可能会导致程序要重开发,或者数据库要重新设计。这样的情况,做程序的肯定都遇到过,有的情况是这样的,跟别人有合作,假如有100合作伙伴,这100家可能会提出100种可能性,并且这100个需求并不是一次给你的,可能开始的时候只有10种需求,后来需求越来越多,最终的结果是,如果不进行数据库重新设计或者代码重构根本满足不了这种需求。或者是做了很多个小系统,来满足不同用户的需求,这样后期维护就是悲催了。

需求变动有的时候是避免不了的,随着时间的推移,需求肯定会有所变化的,但是要以书面或者是电子档的形势来确定下来,这里确定只是一个阶段,确定下来就有了依据,至少提需求的人会认真的思考,会尽量把需求提得更清楚,更全面,对于他来说也是一种责任。如果真的有需求变动,要在原来的基础上有所改进,也要等到一期做完。因为改进是永无止静的,没有最好,只有更好,所以这种改进要一步一步完成,不能一口吃个胖子出来。

2,不要为了赶进度,而忽视质量

当进度表,安排下去了以后,人手不够,任务重,所以大家都重进度,轻质量。这个必须自己把好关,测试人员把好关,一块一块完成,而不能把小问题全部放到后期来改,这样的话,后期的压力比较大。

举个例子:套模板,模板基本都是死的,套上程序后(比如做了一些特效),样式上会跟静态的模块有可能会不同,这样的问题积累多了的话,到后来在跟前端配合改,会很累,做前端的还不能统畴考虑。所以遇到这样的问题,一开始就和前端配合,这样前端也能了解到,套过后样式的不同等。这样后期bug会少很多。

3,责任心要强

责任心很重要,如果我手头上有很多工作,没有完成,我什么时候都会想着它,做公交车都会做过站。但是也有一些人,可以说根本没有责任心。

就以改bug为例吧,把一个bug交给别人,过一段时间问他,改好了没有,他说改好了,我一看根本没有改好不说,还又改出来一些bug,像这种人尽快的让他离开。到后来基本上团队里面的对他都不信认了。对别人负责任,就是对自己负责任。

4,学会勾通,善于勾通

怎么样把自己的想法很清楚的告诉别人,怎么样很快的了解别人是怎么想的。这不是件容易的事。个人认为最好还是要学会站在别人的立场上考虑问题。做程序,还是做其他的都要有自己的思想,不能别人说什么就是什么。别人说的就一定是对的,一定是最好的吗?多种想法的碰撞后,才会有精华出来。

PHP在循环内外实例化类在占用内存上有很大的区别

9 条评论

2012 年 01 月 16 日 at 下午 3:14分类目录:PHP

关于php类的实例化和内存的关系,可以这么说:只要有一个new 关键字就是创建一个对象,创建一个对象就是在内存中分配了一个空间 ,那么OK,看代码。

<?php
class ABC{
    public $numBox = array();
    public function ddd(){
            for($i=1; $i<=600; $i++){
                    $this->numBox[] = mt_rand(1,1000000);
           }
                echo 'Now memory_get_usage: '.memory_get_usage().'<br />';
        }

}
$instance = new ABC();
for($i =0; $i< 50 ; $i++){
     $instance->ddd();
}
?>

这是上面的代码在我的机器上面运行的结果:
Now memory_get_usage: 424312
Now memory_get_usage: 476408
Now memory_get_usage: 524408
Now memory_get_usage: 580608
Now memory_get_usage: 628608
Now memory_get_usage: 676608
Now memory_get_usage: 740992
Now memory_get_usage: 789000
Now memory_get_usage: 837000
Now memory_get_usage: 885000
Now memory_get_usage: 933000
Now memory_get_usage: 981000
Now memory_get_usage: 1029000
Now memory_get_usage: 1109768
Now memory_get_usage: 1157768
Now memory_get_usage: 1205768
Now memory_get_usage: 1253768
Now memory_get_usage: 1301768
Now memory_get_usage: 1349768
Now memory_get_usage: 1397768
Now memory_get_usage: 1445768
Now memory_get_usage: 1493768

<?php
class ABC{
    public $numBox = array();
    public function ddd(){
            for($i=1; $i<=600; $i++){
                    $this->numBox[] = mt_rand(1,1000000);
           }
                echo 'Now memory_get_usage: '.memory_get_usage().'<br />';
        }

}

for($i =0; $i< 50 ; $i++){
     $instance = new ABC();
     $instance->ddd();
}
?>

这个是上面的代码运行的结果:
Now memory_get_usage: 424552
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536
Now memory_get_usage: 424536

OK,其实,只要有一个new 关键字就是创建一个对象,创建一个对象就是在内存中分配了一个空间,每次重新分配内存一定是要占用更多的内存的,所以,我们要对的类的实例化要注意,这样也就是为什么要使用单实例设计模式,因为这样可以节约内存。
看到这个结果我也感到很意外,每次实例化的去执行时,反而占用内存少,而只实例化一次反而使用内存多,不知道是为什么,有待高手解答。

原文:http://yi1.com.cn/posts/587

关于vm虚拟机安装好之后,没有IP的问题解决

2 条评论

2012 年 01 月 05 日 at 上午 11:25分类目录:Linux

这个时候就需要去修改这个问题了:
/etc/sysconfig/network-scripts/ifcfg-etho这个文件了
简单的话,加上如下内容:

IPADDR='192.168.214.133'
BOOTPROTO='dhcp'
ONBOOT='yes'

然后重启下network就行了

# /etc/rc.d/init.d/network restart

完整的ifcfg-eth0文件的内容如下:

DEVICE=name,这里name是物理设备的名字(动态分配的PPP设备应当除外,它的名字是“逻辑名”。
IPADDR=addr, 这里addr是IP地址。
NETMASK=mask, 这里mask是网络掩码。
NETWORK=addr, 这里addr是网络地址。
BROADCAST=addr, 这里addr是广播地址。
GATEWAY=addr, 这里addr是网关地址。
ONBOOT=answer, 这里answer取下列值之一:yes -- 该设备将在boot时被激活。no -- 该设备不在boot时激活。
USERCTL=answer, 这里answer取下列值之一: yes --非root用户可以控制该设备. no -- 非root用户不允许控制该设备。
BOOTPROTO=proto, 这里proto取下列值之一:none -- 不使用boot时协议。bootp -- 使用bootp协议。dhcp --使用dhcp协议。