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

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

1将文件checkout到本地目录

svn checkout pathpath是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
简写:svn co

2往版本库中添加新的文件

  svn add file
例如:svn add test.php(添加test.php)
svn
add *.php(添加当前目录下所有的php文件)

3将改动的文件提交到版本库

  svn commit -m “LogMessage” [-N] [–no-unlock] PATH (如果选择了保持锁,就使用–no-unlock开关)
例如:svn commit -m “add test file for my test” test.php
简写:svn ci

4加锁/解锁

  svn lock -m “LockMessage” [–force] PATH
例如:svn lock -m “lock test file” test.php
svn unlock PATH

5更新到某个版本

  svn update -r m path
例如:
svn update
如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.php(
将版本库中的文件test.php还原到版本200)
svn update test.php(
更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
简写:svn up

6查看文件或者目录状态

  1svn status path (目录下的文件和子目录的状态,正常状态不显示)
?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
2
svn status -v path (显示文件和子目录状态)
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn statussvn diff svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st

7删除文件

  svn delete path -m “delete test fle”
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种
简写:svn (del, remove, rm)

8查看日志

  svn log path
例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化

9查看文件详细信息

  svn info path
例如:svn info test.php

10比较差异

  svn diff path(将修改的文件与基础版本比较)
例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di

11将两个版本之间的差异合并到当前文件

  svn merge -r m:n path
例如:svn merge -r 200:205 test.php(将版本200205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)

12SVN 帮助

  svn help
svn help ci

——————————————————————————

以上是常用命令,下面写几个不经常用的

——————————————————————————

13版本库下的文件和目录列表

  svn list path
显示path目录下的所有属于版本库的文件和目录
简写:svn ls

14创建纳入版本控制下的新目录

svn mkdir: 创建纳入版本控制下的新目录。
用法: 1mkdir PATH…
2
mkdir URL…
创建版本控制的目录。
1
、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增
调度,以待下一次的提交。
2
、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。

15恢复本地修改

svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)revert:
用法: revert PATH…
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
被删除的目录

16代码库URL变更

svn switch (sw): 更新工作副本至不同的URL
用法: 1switch URL [PATH]
2
switch –relocate FROM TO [PATH…]

1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将
服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的
方法。
2
、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动
(
比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工作副本与仓库的对应关系。

17解决冲突

svn resolved: 移除工作副本的目录或文件的冲突状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,然后让 PATH 可以再次提交。

18输出指定文件或URL的内容。

svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename (PREV
是上一版本,也可以写具体版本号,这样输出结果是可以提交的)

默认不配置svn的时候访问方式为svn+ssh://username@192.168.1.1/srv/svn.repos/project

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

阅读全文