如何写出无法维护的代码

11

对于有下面这些编程习惯的朋友,请大家对号入座。另外,维护程序的朋友们,你们死定了!!

If builders built buildings the way programmers write programs, then the first woodpecker that came along would destroy civilization. (如果建筑师盖房子就像程序员写程序一样,那么,第一只到来的啄木鸟就能毁掉我们的文明)

~Gerald

阅读全文

成长之路——《精益创业》读后感

一、关于新产品设计 对于创业而言,成功地执行一项无意义的计划是导致失败的致命原因。 如果企业费尽心思开发出来的产品没人想要,那么是否按时、按预算完成计划就无关紧要了。 二、关于新产品开发质量 创新型产品在创造初期,如果我们不知道谁是顾客,我们也不知道什么是质量。 此时,“低质量”的快速最小化可行产品也能为开发高质量的产品服务。 yan 12.10.11

汉明距离

在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。 例如:

* 1011101 与 1001001 之间的汉明距离是 2。

* 2143896 与 2233796 之间的汉明距离是 3。

* “toned” 与 “roses” 之间的汉明距离是

阅读全文

相似图片搜索的原理

1

上个月,Google把“相似图片搜索”正式放上了首页。

你可以用一张图片,搜索互联网上所有与它相似的图片。点击搜索框中照相机的图标。

一个对话框会出现。

你输入网片的网址,或者直接上传图片,Google就会找出与其相似的图片。下面这张图片是美国女演员Alyson Hannigan。

阅读全文

centos6.2下lamp开发环境部署过程

centos6.2下lamp开发环境部署过程
yan 2012-08-16
一、部署程序apache
mysql
php
mongodb
ImageMagick
Memcached
epel
ssh
rockmongo
phpmyadmin
memadmin
二、部署过程
1.mysql
yum install mysql mysql-server
chkconfig –levels 235 mysqld on
/etc/init.d/mysqld start
mysqladmin -u root password yourrootsqlpassword
mysqladmin -h server1.example.com -u root password yourrootsqlpassword
2.apache
yum install httpd
chkconfig –levels 235 httpd on
/etc/init.d/httpd start
测试 apache:
在CentOS里Apache的默认文档路径的位置是在/var/www/html,配置文件的路径是/etc/httpd/conf/httpd.conf。其他的配置存储在/etc/httpd/conf.d/ 文件夹里。
3.php
yum install php
/etc/init.d/httpd start
#php extension
yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc
/etc/init.d/httpd restart
4.测试apache和php
vi /var/www/html/info.php
<?php phpinfo(); ?>
5.安装ssh并测试登录其它linux服务器:
yum install ssh
ssh -l root 192.168.1.234
exit
6.安装epel:
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
7.安装php常用扩展:
yum install php-mbstring
yum install php-mcrypt
8.安装mongo
yum install mongodb-server
yum install php-pecl-mongo
配置mongo参数:
vi mongodb.conf
dbpath = /data/db/mongodb #数据文件存放目录
logpath = /data/logs/mongodb.log #日志文件存放目录
port = 27017  #端口
fork = true  #以守护程序的方式启用,即在后台运行
创建db目录并设置权限:
mkdir /data/db/mongodb
chmod 777 -R /data/db/mongodb
启动mongod:
mongod –config /etc/mongodb.conf
联接:
mongo
use topka
db.addUser(“topka”,”topkapassword”);
db.auth(“topka”,”topkapassword”);
9.svn co
mkdir /var/www/html/topka/trunk
cd /var/www/html/topka/trunk
svn -co svn://xxx.xxx.xxx/topka/trunk
修改目录权限:
chmod 777 -R /var/www/html
10.配置apache VirtualHost
vi /etc/httpd/conf/httpd.conf
NameVirtualHost *:80
#配置localhost
<VirtualHost *:80>
    ServerName localhost
    ServerAdmin yan@localhost
    DocumentRoot /var/www/html/
    ErrorLog logs/localhost.log
    CustomLog logs/localhost.log common
</VirtualHost>
#配置www.topka.cn域名
<VirtualHost *:80>
    ServerName www.topka.cn
    ServerAdmin yan.jingang@topka.cn
    DocumentRoot /var/www/html/topka/trunk/web/code/topka_wb/app/
    ErrorLog logs/topka.cn.log
    CustomLog logs/topka.cn.log common
</VirtualHost>
11.配置hosts
#localhost
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
#topka
127.0.0.1 topka.cn www.topka.cn img.topka.cn static.topka.cn admin.topka.cn
#db.conf
127.0.0.1 db_master
127.0.0.1 mongoserver
12.安装imageMagick
yum install ImageMagick
yum install php-pecl-imagick
13.安装memcached
yum install memcached
yum install libmemcached
yum install php-pecl-memcache
yum install php-pecl-memcached
启动memcached:
memcached -d -u root
测试:
yum install telnet
telnet localhost 11211
stats
php扩展状态:
使用memadmin管理:

Linux查看日志命令

1、cat命令:

功能:1)显示整个文件。

示例: $ cat fileName

2)把文件串连接后传到基本输出,如将几个文件合并为一个文件或输出到屏幕。

示例: $ cat file1 file2 > file

说明:把档案串连接后传到基本输出(屏幕或加 > fileName 到另一个档案)      cat参数详解: -n 或 –number 由 1 开始对所有输出的行数编号<br

阅读全文

Linux下chkconfig命令详解

chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。

使用语法:
chkconfig [–add][–del][–list][系统服务] 或 chkconfig [–level <等级代号>][系统服务][on/off/reset]

chkconfig在没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。如果是,返回true,否则返回false。如果在服务名后面指定了on,off或者reset,那么chkconfi

阅读全文

LVS

LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。

简介 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。章文嵩博士目前工作于阿里集团,主要从事集群技术、操作系统、对象存储与数据库的研究。 宗旨 使用集群技术和Linux操作系统实现一个高性能、高可用的服务器. 很好的可伸缩性(Scalability) 很好的可靠性(Reliability) 很好的可管理性(Manageability)。 特点 可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。 技术 1、技术简介 LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。 2、集群采用三层结构 一般来说,LVS集群采用三层结构,其主要组成部分为: A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。 B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。 C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。 3、调度器 调度器是服务器集群系统的唯一入口点(Single Entry Point),它可以采用IP负载均衡技术、基于内容请求分发技术或者两者相结合。 在IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当客户请求到达时,调度器只根据服务器负载情况和设定的调度算法从服务器池中选出一个服务器,将该请求转发到选出的服务器,并记录这个调度;当这个请求的其他报文到达,也会被转发到前面选出的服务器。在基于内容请求分发技术中,服务器可以提供不同的服务,当客户请求到达时,调度器可根据请求的内容选择服务器执行请求。因为所有的操作都是在Linux操作系统核心空间中完成的,它的调度开销很小,所以它具有很高的吞吐率。服务器池的结点数目是可变的。当整个系统收到的负载超过目前所有结点的处理能力时,可以在服务器池中增加服务器来满足不断增长的请求负载。 对大多数网络服务来说,请求间不存在很强的相关性,请求可以在不同的结点上并行执行,所以整个系统的性能基本上可以随着服务器池的结点数目增加而线性增长。 共享存储通常是数据库、网络文件系统或者分布式文件系统。服务器结点需要动态更新的数据一般存储在数据库系统中,同时数据库会保证并发访问时数据的一致性。静态的数据可以存储在网络文件系统(如NFS/CIFS)中,但网络文件系统的伸缩能力有限,一般来说,NFS/CIFS服务器只能支持3~6个繁忙的服务器结点。对于规模较大的集群系统,可以考虑用分布式文件系统,如AFS、GFS、Coda和Intermezzo等。分布式文件系统可为各服务器提供共享的存储区,它们访问分布式文件系统就像访问本地文件系统一样,同时分布式文件系统可提供良好的伸缩性和可用性。 4、分布式锁管理器 此外,当不同服务器上的应用程序同时读写访问分布式文件系统上同一资源时,应用程序的访问冲突需要消解才能使得资源处于一致状态。这需要一个分布式锁管理器(Distributed Lock Manager),它可能是分布式文件系统内部提供的,也可能是外部的。开发者在写应用程序时,可以使用分布式锁管理器来保证应用程序在不同结点上并发访问的一致性。 负载调度器、服务器池和共享存储系统通过高速网络相连接,如100Mbps交换网络、Myrinet和Gigabit网络等。使用高速的网络,主要为避免当系统规模扩大时互联网络成为整个系统的瓶颈。 5、监视器 Graphic Monitor是为系统管理员提供整个集群系统的监视器,它可以监视系统的状态。Graphic Monitor是基于浏览器的,所以无论管理员在本地还是异地都可以监测系统的状况。为了安全的原因,浏览器要通过HTTPS(Secure HTTP)协议和身份认证后,才能进行系统监测,并进行系统的配置和管理。 优点 1、开源,免费 2、在网上能找到一些相关技术资源 3、具有软件负载均衡的一些优点 缺点 1、最核心的就是没有可靠的支持服务,没有人对其结果负责; 2、功能比较简单,支持复杂应用的负载均衡能力较差,如算法较少等; 3、开启隧道方式需重编译内核。

js 数组函数

concat

将参数列表连接到原数组后面形成一个新的数组并返回,原有数组不受影响。

var arr = [“a”,“b”,“c”]; var arr1 = arr.concat(“d”,“e”); //arr1 = [“a”,”b”,”c”,”d”,”e”]

join

以指定的字符作为分割符,将数组转换为字符串,当指定字符为逗号时,其作用和 toString() 相同。

var str1 = arr.join(“,”); //str1 = “a,b,c”

pop

通俗的讲,就是弹出数组的最后一个元素。结合下面的 push 方法,使得将数组作为栈来使用成为可能。pop 方法返回数组最后一个元素的值,并将

阅读全文

敏捷开发宣言

敏捷开发宣言

我们一直在实践中探寻更好的开发方法,
身体力行的同时也帮助他人。由此我们建立了如下价值观:

个体和互动 高于 流程和工具
工作的软件 高于 详尽的文档
客户合作 高于 合同谈判
响应变化 高于 遵循计划

也就是说,尽管右项有其价值,
我们更重视左项的价值。

Kent Beck
Mike Beedle
Arie van Bennekum
Alistair Cockburn
Ward Cunningham
Martin Fowler
James Grenning
Jim Highsmith
Andrew Hunt
Ron Jeffries
Jon Kern
Brian Marick
Robert C. Martin
Steve Mellor
Ken Schwaber
Jeff Sutherland

Dave Thomas

著作权为上述作者所有

此宣言可以任何形式自由地复制,但其全文必须包含上述申明在内。

敏捷宣言遵循的原则

 

我们遵循以下原则:我们最重要的目标,是通过持续不断地
及早交付有价值的产品使客户满意。

欣然面对需求变化,即使在开发后期也一样。
为了客户的竞争优势,敏捷过程掌控变化。

经常地交付可工作的产品,<br

阅读全文