原来已经出到5.5,备忘下载地址
http://goodboy5264.blog.163.com/blog/static/2538298201151610415777/
原来已经出到5.5,备忘下载地址
http://goodboy5264.blog.163.com/blog/static/2538298201151610415777/
电子计算机技术是从美国开始发展起来的,因为美国使用的文字为英文,美国规定的计算机信息交换用的字符编码集是人们熟知的扩展的ASCII码,它以8bit字节为单位存储,ASCII的0-31及127为控制符,32-126为可见字符,包括所有的英文字母,阿拉伯数字和其他一些常见符号,128-255的ASCII码则没有定义。
ASCII对英语国家是够用了,但对其他西欧国家却不够用,因此,人们将ASCII扩展到0-255的范围,形成了ISO-8859-1字符集。值得一提的是,因为考虑到程序中处理的信息大多是西文信息,因此有些WEB容器(如:Tomcat4.x)在处理所接收到的request字符串时,如果您没指定request的编码方式则系统就缺省地采用ISO-8859-1,明白这一点对理解后面的问题会有帮助。
相比西方的拼音文字,东方的文字(如中文)的字符数要大得多,根本不可能在一个字节内将它们表示出来,因此,它们以两个字节为单位存储,以中文国标字符集GB2312为例,它的第一个字节为128-255。系统可以据此判断,若第一个字节大于127,则把与该字节后紧接着的一个字节结合起来共两个字节组成一个中文字符。这种由多个字节存储一个字符的字符集叫多字节字符集(MultiByte Charsets),对应的象ASCII这种用一个字节存储一个字符的字符集叫单字节字符集(SingleByte Charsets)。在GB2312字符集中,ASCII字符仍然用一个字节存储,换句话说该ASCII是该字符集的子集。
GB2312只包含数千个常用汉字,往往不能满足实际需要,因此,人们对它进行扩展,这就有了我们现在广泛使用的GBK字符集,GBK是现阶段Windows及其他一些中文操作系统的缺省字符集。它包含2万多个字符,除了保持和GB2312兼容外,还包含繁体中文字,日文字符和朝鲜字符。值得注意的是GBK只是一个规范而不是国家标准,新的国家标准是GB18030-2000,它是比GBK包含字符更多的字符集。
我国的台湾地区使用的文字是繁体字,其字符集是BIG5,而日本采用的字符集则是SJIS。它们的编码方法与GB2312类似,它们的ASCII字符部分是兼容的,但扩展部分的编码则是不兼容的,比如这几种字符集中都有”中文”这两个字符,但他们在各自的字符集中的编码并不相同,这就是用GB2312写成的网页用BIG5浏览时,看到的是乱糟糟的信息的原因。
可见,在字符集的世界里,呈现给我们的是一个群雄割据的局面,各字符集拥有一块自己的地盘。这给各国和各地区交换信息带来了很大的困难,同时,也给国际化(本地化)编程造成了很大的麻烦。
常言道:”分久必合”,随着国际标准ISO10646定义的通用字符集(Universal Character Set即UCS)的出现,使这种局面发生了彻底的改观。UCS 是所有其他字符集标准的一个超集. 它保证与其他字符集是双向兼容的. 就是说, 如果你将任何文本字符串翻译到 UCS格式, 然后再翻译回原编码, 你不会丢失任何信息。UCS 包含了用于表达所有已知语言的字符。不仅包括拉丁语、希腊语、 斯拉夫语、希伯来语、阿拉伯语、亚美尼亚语和乔治亚语的描述、还包括中文、日文和韩文这样的象形文字、 以及平假名、片假名、 孟加拉语、 旁遮普语果鲁穆奇字符(Gurmukhi)、泰米尔语、印.埃纳德语(Kannada)、Malayalam、泰国语、 老挝语、 汉语拼音(Bopomofo)、Hangul、 Devangari、Gujarati、Oriya、Telugu 以及其他数也数不清的语。对于还没有加入的语言,由于正在研究怎样在计算机中最好地编码它们, 因而最终它们都将被加入。
ISO 10646 定义了一个 31 位的字符集。然而, 在这巨大的编码空间中, 迄今为止只分配了前 65534 个码位 (0×0000 到 0xFFFD)。 这个 UCS 的 16位子集称为基本多语言面 (Basic Multilingual Plane, BMP)。 将被编码在 16 位 BMP 以外的字符都属于非常特殊的字符(比如象形文字), 且只有专家在历史和科学领域里才会用到它们。
UCS 不仅给每个字符分配一个代码, 而且赋予了一个正式的名字。 表示一个 UCS 值的十六进制数, 通常在前面加上 “U+”, 就象 U+0041 代表字符”拉丁大写字母A”。 UCS 字符 U+0000 到 U+007F 与 US-ASCII(ISO 646) 是一致的, U+0000 到 U+00FF 与 ISO 8859-1(Latin-1) 也是一致的。这里要注意的是它是以16bit为单位存储,即便对字母”A”也是用16bit,这是与前面介绍的所有字符集不同的地方。
历史上,在国际标准化组织研究ISO10646标准的同时,另一个由多语言软件制造商组成的协会也在从事创立单一字符集的工作,这就是现在人们熟知的 Unicode。幸运的是,1991年前后ISO10646和Unicode的参与者都认识到,世界上不需要两个不同的单一字符集。他们合并双方的工作成果,并为创立单一编码表而协同工作。两个项目仍都存在并独立地公布各自的标准,都同意保持ISO10646和Unicode的码表兼容,并紧密地共同调整任何未来的扩展。这与当年在PC机上的操作系统MS-dos与PC-dos的情形有些相象。后面,我们将视ISO10646和Unicode为同一个东西。
有了Unicode,字符集问题接近了完美的解决,但不要高兴得过早。由于历史的原因:一些操作系统如:Unix、Linux等都是基于ASCII设计的。此外,还有一些数据库管理系统软件如:Oracle等也是围绕ASCII来设计的(从其8i的白皮书上介绍的设置系统字符集和字段的字符集中可以间接地看到这一点)。在这些系统中直接用Unicode会导致严重的问题。用这些编码的字符串会包含一些特殊的字符, 比如 ‘\0′ 或 ‘/’, 它们在 文件名和其他 C 库函数参数里都有特别的含义。 另外, 大多数使用 ASCII 文件的 UNIX 下的工具,如果不进行重大修改是无法读取 16 位的字符的。 基于这些原因, 在文件名, 文本文件, 环境变量等地方,直接使用Unicode是不合适的。
在 ISO 10646-1 Annex R 和 RFC 2279 里定义的 UTF-8 (Unicode Transformation Form 8-bit form)编码没有这些问题。
UTF-8 有以下一些特性:
UCS 字符 U+0000 到 U+007F (ASCII) 被编码为字节 0×00 到 0x7F (ASCII 兼容)。 这意味着只包含 7 位 ASCII 字符的文件在 ASCII 和 UTF-8 两种编码方式下是一样的。
所有 >U+007F 的 UCS 字符被编码为一个多个字节的串, 每个字节都有标记位集。 因此,ASCII 字节 (0×00-0x7F) 不可能作为任何其他字符的一部分。
表示非 ASCII 字符的多字节串的第一个字节总是在 0xC0 到 0xFD 的范围里, 并指出这个字符包含多少个字节。 多字节串的其余字节都在 0×80 到 0xBF 范围里。 这使得重新同步非常容易, 并使编码无国界,且很少受丢失字节的影响。
UTF-8 编码字符理论上可以最多到 6 个字节长, 然而 16 位 BMP 字符最多只用到 3 字节长。
字节 0xFE 和 0xFF 在 UTF-8 编码中从未用到。
通过,UTF-8这种形式,Unicode终于可以广泛的在各种情况下使用了.
第二部分: 从Unicode到UTF-8的转换
From: http://hi.baidu.com/winnyang/blog/item/d5fd4f3d7b1cbdc19e3d62aa.html
Unicode是一个字符集,而UTF-8是 Unicode的其中一种,Unicode是定长的都为双字节,而UTF-8是可变的,对于汉字来说Unicode占有的字节比UTF-8占用的字节少1 个字节。Unicode为双字节,而UTF-8中汉字占三个字节。
网魂小兵 http://xdotnet.cnblogs.com
UTF-8编码字符理论上可以最多到6个字节长,然而16位BMP(Basic Multilingual Plane)字符最多只用到3字节长。下面看一下UTF-8编码表:
U-00000000 – U-0000007F: 0xxxxxxx
U-00000080 – U-000007FF: 110xxxxx 10xxxxxx
U-00000800 – U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 – U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 – U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 – U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
xxx 的位置由字符编码数的二进制表示的位填入, 越靠右的 x 具有越少的特殊意义,只用最短的那个足够表达一个字符编码数的多字节串。注意在多字节串中, 第一个字节的开头”1″的数目就是整个串中字节的数目。而第一行中以0开头,是为了兼容ASCII编码,为一个字节,第二行就为双字节字符串,第三行为3 字节,如汉字就属于这种,以此类推。(个人认为:其实我们可以简单的把前面的1的个数看成字节数)
网魂小兵 http://xdotnet.cnblogs.com
为了要将Unicode转换为UTF-8,当然要知道他们的区别到底在什么地方。下面来看一下,在Unicode中的编码是怎样转换成UTF-8的,在UTF-8中,如果一个字符的字节小于0×80(128)则为ASCII字符,占一个字节,可以不用转换,因为UTF-8兼容ASCII编码。假如在Unicode中汉字“你”的编码为“u4F60”,把它转换为二进制为100111101100000,然后按照UTF-8的方法进行转换。可以将Unicode二进制从地位往高位取出二进制数字,每次取6位,如上述的二进制就可以分别取出为如下所示的格式,前面按格式填补,不足8位用0填补。
utf-8: 11100100,10111101,10100000 E4BDA0
从上面就可以很直观的看出Unicode到UTF-8之间的转换,当然知道了UTF-8的格式后,就可以进行逆运算,就是按照格式把它在二进制中的相应位置上取出,然后在转换就是所得到的Unicode字符了(这个运算可以通过“位移”来完成)。
网魂小兵 http://xdotnet.cnblogs.com
如上述的“你”的转换,由于其值大于0×800小于0×10000,因此可以判断为三字节存储,则最高位需要向右移“12”位再根据三字节格式的最高位为 11100000(0xE0)求或(|)就可以得到最高位的值了。同理第二位则是右移“6”位,则还剩下最高位和第二位的二进制值,可以通过与 111111(0x3F)求按位于(&)操作,再和11000000(0×80)求或(|)。第三位就不用移位了,只要直接取最后六位(与 111111(ox3F)取&),在与11000000(0×80)求或(|)。OK了,转换成功!在VC++中的代码如下所示(Unicode到UTF-8的转换)。
当然在UTF-8到Unicode的转换也是通过移位等来完成的,就是把UTF-8那些格式相应的位置的二进制数给揪出来。在上述例子中“你”为三个字节,因此要每个字节进行处理,有高位到低位进行处理。在UTF-8中“你”为11100100,10111101,10100000。从高位起即第一个字节11100100就是把其中的”0100″给取出来,这个很简单只要和11111(0x1F)取与(&),由三字节可以得知最到位肯定位于12位之前,因为每次取六位。所以还要将得到的结果左移12位,最高位也就这样完成了0100,000000,000000。而第二位则是要把“111101”给取出来,则只需将第二字节10111101 和111111(0x3F)取与(&)。在将所得到的结果左移6位与最高字节所得的结果取或(|),第二位就这样完成了,得到的结果为 0100,111101,000000。以此类推最后一位直接与111111(0x3F)取与(&),再与前面所得的结果取或(|)即可得到结果 0100,111101,100000。OK,转换成功!在VC++中的代码如下所示(UTF-8到Unicode的转换)。
当然在UTF-8到Unicode的转换也是通过移位等来完成的,就是把UTF-8那些格式相应的位置的二进制数给揪出来。在上述例子中“你”为三个字节,因此要每个字节进行处理,有高位到低位进行处理。在UTF-8中“你”为11100100,10111101,10100000。从高位起即第一个字节11100100就是把其中的”0100″给取出来,这个很简单只要和11111(0x1F)取与(&),由三字节可以得知最到位肯定位于12位之前,因为每次取六位。所以还要将得到的结果左移12位,最高位也就这样完成了0100,000000,000000。而第二位则是要把“111101”给取出来,则只需将第二字节10111101 和111111(0x3F)取与(&)。在将所得到的结果左移6位与最高字节所得的结果取或(|),第二位就这样完成了,得到的结果为 0100,111101,000000。以此类推最后一位直接与111111(0x3F)取与(&),再与前面所得的结果取或(|)即可得到结果 0100,111101,100000。OK,转换成功!在VC++中的代码如下所示(UTF-8到Unicode的转换)。
网魂小兵 http://xdotnet.cnblogs.com
当然在编程过程中不可能只转换一个字符,这里需要注意的是字符的长度一定要算清楚,不然会带来…以上就是我这几天研究的结果,至于Unicode的转换为GB2312在MFC中Windows有自带的API(WideCharToMultiByte)可以转换。这样也就能够将UTF-8格式转换为GB2312了,这里就不再赘述,如果大家有更好的方法希望指教。
MySQL 为了实现 replication 必须打开 bin-log 项,也是打开二进制的 MySQL 日志记录选项。
MySQL 的 bin log 二进制日志,可以记录所有影响到数据库表中存储记录内容的 sql 操作,如 insert / update / delete 操作,而不记录 select 这样的操作。因此,我们可以通过二进制日志把某一时间段内丢失的数据可以恢复到数据库中(如果二进制日志中记录的日志项,包涵数据库表中所有数据,那么,就可以恢复本地数据库的全部数据了)。 而这个二进制日志,如果用作远程数据库恢复,那就是 replication 了。这就是使用 replication 而不用 sync 的原因。这也是为什么要设置 bin-log = 这个选项的原因。
在同步过程中,最重要的同步参照物,就是同步使用那一个二进制日志文件,从那一条记录开始同步。
下面,我们来讲解最核心的过程:
这里有一些技巧,包括 mysql 的 sql 指令说明下。
技巧: 如果你使用 win2k 的 mysql 那么,你可以下载 mysql.com 出的官方 mysql administrator 实用程序,直接在 mysql administrator 中即可配置 master 与 slave ,同时也可以配置 query-cache 。
在 master 的 my.cnf(如果是 win32 那就是 my.ini)增加
[mysqld] log-bin = server-id=1
注意,上面的 log-bin = 中的 等号 = 是不可少的。
在 slave 的 my.cnf 修改
[mysqld] server-id=2 # 如果有多个 slave 就改为不重复的 id 就好,在mysql 4.1 中,这个已经取消了 master-host=10.10.10.22 master-user=backup #同步用户帐号 master-password=1234 master-port=3306 master-connect-retry=60 #预设重试间隔60秒 replicate-do-db=test # 告诉slave只做 test 数据库的更新 bin-log =
mysql > SHOW MASTER STATUS; +---------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +---------------+----------+--------------+------------------+ | mysql-bin.003 | 73 | test | manual,mysql | +---------------+----------+--------------+------------------+
注意 File 是 mysql-bin.003 而 position 是 73
这个文件是对 test 这个 数据库的二进制日志记录,记录数据变化的当前记录条数是 73
前面我们说过,二进制日志记录着某个数据库所有数据记录变化的 sql 操作语句,如 insert / update / delete 等,正是因为如此,在 slave 同步 mysql 数据库操作时,其实是读取master 中这个 mysql-bin.003 二进制日志中的 sql 操作,同在 slave 中执行这些 sql 操作,所以,同步成功有以下几个条件:
mysql> CHANGE MASTER TO -> MASTER_HOST='master_host_name', -> MASTER_USER='replication_user_name', -> MASTER_PASSWORD='replication_password', -> MASTER_LOG_FILE='recorded_log_file_name', -> MASTER_LOG_POS=recorded_log_position;
这里,把 上面的 redcorded_log_file_name 改为 mysql-bin.003 而 recorded_log_position 改为 73 (特别注意,这是关系关键)。
linux 下的 mysql 与 win2k 下的 MySQL 作 replication 会有什么技巧:
环境配置
操作系统:linux MySQL:5.14 主服务器A IP:192.168.1.2(假设) 从服务器B IP:192.168.1.3(假设) 同步数据库: test(用于测试,两台服务器初始数据一致)
主服务器(master)设置
新建一个用于备份的用户(直接用root用户也可以):
GRANT FILE ON *.* TO backup@192.168.1.3 IDENTIFIED BY ‘123456’;
编辑“/etc/my.cnf”(不同服务器可能路径不同)文件,在该文件添加以下内容:
server-id=1
#设置服务器id,主从服务器要不同
log-bin=mysqllog
#启用二进制变更日志(即把所有对数据进行操作的SQL命令以二进制格式记入日志)
#其中mysqllog是日志文件的名称,日志的文件名是mysqllog.n,其中n是一个6位数字的整数。
binlog-do-db=test
#指定需要启用二进制变更日志的数据库"test"
binlog-ignore-db = mysql
#指定不需要启用二进制变更日志的数据库"mysql"
重启mysqld服务,可以用mysql命令:SHOW MASTER STATUS;查看“启用二进制变更日志”情况
从服务器(slave)设置
编辑“/etc/my.cnf”(不同服务器可能路径不同)文件,在该文件添加以下内容:
server-id=2
#设置服务器id,主从服务器要不同
replicate-do-db=test
#指定需要从master同步过来的数据库"test"
replicate-ignore-db = mysql
#指定不需要从master同步过来的数据库"mysql"
#设置master服务器的IP地址、登陆用户、密码、端口
master-host=192.168.1.2
master-user=backup
master-password=123456
master-port=3306
master-connect-retry=60
#连接master服务器失败后重试的延迟时间
slave-skip-errors=all
#跳过所有错误继续执行同步工作
log-slave-updates
#启用从属服务器上的日志同步功能
注意:如果从服务器上存在master.info文件(如:/var/lib/mysql/master.info),要使以上配置选项生效,在重启mysqld服务前必须删除该文件。
重启mysqld服务,可以用mysql命令:SHOW SLAVE STATUS;查看同步情况
从数据库的相关命令:
slave st; slave start ; 开始停止从数据库。 show slave statusG; 显示从库正读取哪一个主数据库二进制日志
成功完成以上配置后,在主服务器A的test库里添加数据或删除数据,在从服务器B的test库里马上也能看到相应的变更。两台服务器的同步操作可以说是瞬间完成的。
最近在写大型软件,不用branches实在搞不店了,记录到博客以备忘。
SVN分支和合并
文章分类:项目管理尽管svn没有作强制要求,但是一般svn版本库目录建议创建trunk、branches和tags三个目录。在实际操作时,trunk主干版本要时刻保持干净,即随时可以基于这个版本进行修改并将应用部署上线。branches是分支目录,存放并行开发的项目代码,因为分支是主干的廉价拷贝(相当只是提交了一次主干版本,增加了一个版本号, 并没有取出版本库作镜像拷贝),所以你可以放心建立很多分支版本。不过 Subversion不支持跨版本库的拷贝,当使用svn copy时你只能在同一个版本库内操作。tags目录存放trunk某个的快照,比如说release-1.0即trunk处于1.0版本时的快照。使用svn来作团队的代码管理,那么分支和合并将是非常常用的操作。下面是一个简单的示例。
1. 创建分支。这里假设你要负责一个叫theme的项目,分支号1.7.2。
1. #这里的localhost是svn服务器地址
2. svn copy -m “1.7.2 – theme” svn://localhost/www/trunk svn://localhost/www/branches/branch1.7.2-theme
3. svn co svn://localhost/www/branches/branch1.7.2-theme2. 从trunk中merge到分支。忙了一个星期终于开发完了,但是开发期间trunk版本有过改动,部署上线前你需要合并trunk的代码。
1. #branch1.7.2-theme是分支目录,注意不可以进到分支子目录
2. cd branch1.7.2-theme
3. #前面的12972是开分支之前trunk的版本号,后面的12991是merge时trunk的版本号
4. svn merge -r 12972:12991 svn://localhost/www/trunk如果有冲突选择p(postpone),merge完了之后使用svn st|grep ^C查看冲突文件,然后比对修改冲突文件。解决冲突后再check in ,信息写上执行的merge操作。
1. svn ci -m ‘svn merge -r 12972:12991 svn://localhost/www/trunk’
3. 从分支merge到trunk。上线测试完毕,你很幸运,一切都如预期正常,这时就要将分支回归trunk,将trunk更新到最新。
1. #先从trunk checkout一份新鲜的代码,然后cd到该版本目录下
2. svn co svn://localhost/www/trunk
3. cd trunk
4. #12973是分支开始的版本号,13006是分支结束的版本号
5. svn merge -r 12973:13006 svn://localhost/www/branches/branch1.7.2-theme如步骤2一样解决冲突,解决冲突后再check in,信息写上执行的merge操作。
1. svn ci -m “svn merge -r 12973:13006 svn://localhost/www/branches/branch1.7.2-theme”
相关的手册可以参阅svn文档,电子版点这里下载。
一年一度春节,短信满天飞,本人也不能免俗,用短信去慰问一些久未联系平时也很少联系的朋友。
我几乎年年都要为用什么方式去发短信去Google一番,上一年还是Nokia,找到一个MAC下的群发软件,但感觉也是一般。
今年是iPhone,可能很多朋友还在发出“iPhone什么都好,就是群发短信太弱”这种感慨,我不懈地Search了一下,发现一个鬼佬软件,免费的,不错,功能够简单,而且是用iPhone原生的短信功能来发送的,只是帮助我实现了一下把“群组”内的所有人全选的功能,很好,像插件一样,很符合我的思路。
所以不要再责怪iPhone的功能不够强。我认为好的软件就是做好一个架构和平台,而丰富的功能就用第三方的“插件”来实现。像最顶级的世界级软件都是这样的,像Wordpress。
最后贴一下这个软件的地址以备忘(估计之后一段时间都会用iPhone,那往后几年的群发短信不用愁了,呵呵)
软件名称:GroupSMS
itms://itunes.apple.com/us/app/no-nonsense-group-sms-real/id378498798?mt=8
很好玩的一篇文章。转自Apple4.us
http://apple4.us/2011/01/why-is-bill-gates-worth-so-much-more-money-than-steve-jobs.html
昨天想到一个不错的软件产品构思,是基于iPhone平台的,然后我马上上网搜索了一下,发现已经有人在做了。我感概到,真是想得到的东西都有人在iPhone上做,管他这个应用适合不适合放在iPhone呢。这其实得益于apple开拓了一种全新且非常work的软件销售平台,这是过去在微软时代未能解决的问题,让苹果给搞定了。
app store的成功后,苹果打铁趁热,马上推出mac平台上的app store。在windows平台上呢,我相信微软很快就会跟进起来一起搞的。由此看来,软件行业的第二春很快就要来了。草根软件的作者再不需要义务劳动或通过畸态的广告收入来盈利,而是可以光明正大的通过创造有价值的软件来创富。同业们,加油并坚持吧,相信这一天很快就会到来。
发自我的iPhone
如醍醐灌顶的好文章。记下与同行从业人员互勉。
很久以前就发现互联网的畸态发展, 人人都想做平台,人人都不敢收费。但事实上是,可以免费的TVB、广州电台、新浪等都只有一个,他们都是最大、最具影响力的媒体。
2006年,我们一干人提出CoolLittleThings思路,然后SVNCHINA开始坚持走收费路线,我们一路探索过来,也证实了收费其实是可行的,只要你有:足够好的产品;方便的购买方式;合理的定价;有差别的服务;盗版的难以获得。
2011年,我会再去探索B2B市场基于云计算的企业级软件的新模式。
申音:免费的终结
从前,它是一只戴围脖的企鹅管家,一开始您靠它泡妞扯淡,后来它帮您发短信、玩游戏、传文件、看视频、开邮箱、买东西……
从前,他是一位智商250的110警察,先是主动为您挡流氓,后来义务给您修系统、杀病毒、管文件、看网页、选下载……
它们什么都乐意替您干,您是大爷大奶,不是顾客,不用付钱,没有交易,交出钥匙就省心。
直到有一天,两个“活雷锋”互殴起来,要比比谁更有资格看管咱家的保险箱。
用户可以被代表,不代表你我就该被忽悠。中国互联网安装量第一大和第二大的客户端,都誓言永久免费,都口口声声说“用户利益至上”,为什么却造成了互联网有史以来最鸡犬不宁的一战?
因为“免费”。
“免费”(Free),早已是互联网业的常识,自从前两年,《连线》杂志光头总编克里斯•安德森写了一本同名大作,人人都觉得这是数字网络时代的商业成功定律。每个互联网公司的CEO都会煞有其事地告诉你,比特经济笼罩下,一切由信息构成的产品的边际成本都在趋零化,所以我们的定价干脆就是零。
事实看来也的确如此,往前十年,全球互联网的成功案例,几乎全是用免费的产品和服务去吸引海量用户,然后再通过广告,或者增值服务或其他虚拟产品收费来获得成功,雅虎是这么走过来的,GOOGLE是这么走过来的,Facebook也是这么走过来的,至于新浪、盛大、百度、QQ、阿里巴巴淘宝等等也都是这么熬出头的。
而在中国,“免费”经济似乎拥有一个比美国更肥沃的商业土壤。内容的原创与知识产权的保护,从来没有真正帮助从业者赚过大钱。贪婪的抄袭和复制,反而能带来源源不断的收益;消费者喜欢赠品、盗版和山寨,对品质没有奢求;企业不愿意为任何软件和服务付费,不在乎法律风险;支付手段和信用体系一直就没完善过,线下收费都不易。
还有什么是比“免费”更好的遮羞布?它们在遮羞布下干什么,你真的知道吗?“免费”还能否继续gelivable?
危险的免费
当QQ吃肉的时候,360就注定只能和别人一起抢汤了。
免费的第一个阴暗面,是必然带来一家独大。因为网络效应的缘故,只要睡莲布满了池塘,下面的水藻就很难再获得阳光。Google的CEO施密特曾经坦言:免费的问题在于,它排除了市场上所有的价格歧视结构,结果往往会造成赢家通吃。
Google成了用户使用最多的搜索技术公司,其它搜索不管技术多么先进,也很难再动摇它地位。视频分享行业出了一个优酷,烧了1.6亿美金成就一个还没赚钱也有30亿美金市值的公司,因为官司迟迟上不了的土豆价值不低于10亿美金,至于酷六网就只有2亿,还有3-400家钱烧光倒闭的,你认为这是在创造价值还是毁灭价值?
最后你会发现,互联网行业造就的大公司,远远比其他传统行业要少。巨木之下,小树难生。依靠免费形成的寡头经济不是一个正常的商业生态。传统媒体的内容,通过新浪和百度等的免费渠道,获得了最大效果的用户关注,但广告价值却直接被后两者截流了,而且用户也减少购买付费的纸质版本。结果,内容商无力再支付高昂的生产成本,再也提供不了高质量的内容。
免费的第二个阴暗面,是用户迁移成本极低,这又是用户选择成本为零造成的。于是,赢家不得不想尽办法用各种应用圈住用户。
在免费的基础上,构筑自己的竞争壁垒并不轻松。免费并非无成本,先行者为了推广免费,得花费大量的资金,而为了维护壁垒,还得花更多钱,让后来者无法超越。
周鸿祎讲,免费的产品一定要做得比收费的产品还好,这原本是违背经济学常识的,但在互联网行业却一再发生了。反正,羊毛最终还是要出在羊身上。《征途》的暴利,让之前按小时收费的网游同行们,几乎一致地转向游戏免费、道具收费。游戏一定要好玩,情节必须得刺激,只有让玩家沉迷于其中,才能有各种收钱的机会。
在免费模式下,一切人性的弱点,都会成为赚钱的突破口。免费模式下赚取的利润一定会比收费更多。你真好意思让自己的QQ形象就穿条三角裤跟人裸聊吗?
聪明人都知道,堡垒往往不是从正面攻破的。你要光做一个IM软件,QQ肯定不会抄你。但是其它任何客户端,都有可能成为它致命的后门。
所以,别骂QQ抄袭,这完全是一种下意识的“膝跳反应”。它一定会阻止任何企图通过免费客户端夺取它用户的公司。只让用户的注意力流向自己控制的地盘。而那些免费软件的后来者会发现,从商业模式到可持续的盈利模式总是很难走通的。
免费的第三个阴暗面,是它很可能破坏一切商业的基础:信用。
没有谁会永远当雷锋的,你免费获得了多少,你相应地就会失去多少。失去金钱是小事,失去隐私和生活才是大事。
的确,在付费的商业模式下,企业依旧存在着收集客户信息的可能,但这些只能更好地帮它分析用户购买的行为,并非其主要收入的来源。而在免费的模式下,你只是用户,不是顾客,企业根本无需顾忌契约关系带来的风险。它们有着强烈的动力去搜刮一切隐私并将之变现出售。
传播学者魏武挥兄在《隐私的背后》一文中,引用了国内一家知名的sns的隐私条款:“承诺不会在未获得用户许可的情况下擅自将用户的个人资料信息出租或出 售给任何第三方,但以下情况除外:……本站发现您违反了本站服务条款或本站其它使用规定。”换句话说,如果你违犯了站方的一些规定,你的个人资料就有权被出售了。
我们之所以还对Google有所信任。因为它有“不作恶”的公开承诺,而且为了证明这一点,甚至不惜放弃某些国家的市场。
但对于无法有效向用户直接收费的中国互联网业,公司要实现营业收入,一个最现实的办法便是通过扫描和收集用户信息,实现所谓的“精准广告”,或者将信息售予他人。而且,根本不用担心受惩罚。
对于QQ和360安全这样装机量数以亿计的软件来说,其对中国数亿网民电脑信息和用户行为的掌握,已经成为这些软件赖以生存与发展的根基。
隐私的背后就是商业利益,就是广告价值。免费模式对于用户隐私的贪婪,会远远超过收费模式。如果说,下一代互联网是以人为核心的社交网络,那么,肯会有更多虎视眈眈的家伙盯着我们曝露的隐私。
你我并不知道自己有多少价值,但它们知道。别以为免费是我们占了它们便宜,其实,是它们窃取了我们原本可以高价出售的个人信息。
免费,不仅昂贵,而且危险。
付费的互联网
今年夏天,当我看到《连线》杂志的iPad版,毫不脸红地在APP Store里标出了4.99美元一期的价格时,我意识到光头先生又领先咱们一步了。
收费——免费——收费,这其实是一个“再常识”的过程。
移动互联网、实名社交媒体和电子商务,是今后5年互联网发展的三大主旋律。它们共同证明了一件事情。就是虚拟世界越来越跟真实世界融合在一起。而在现实生活里,免费只是试用,收费才是常态。
我们再也不必人格分裂地一半在现实世界里辛苦谋生,一半在Cyber空间里呼风唤雨。在Facebook和新浪微博里,我们越来越多地通过实名认证建立真实关系。个人信用在互联网社区上的累积,使得付费成了可能。
手机里藏着我们几乎所有的生活秘密和个人信息,通过它直达每个人的社会网络,陪伴我们生活的2/3以上时间。而电子商务不仅意味着信息流与资金流、物流的三位一体,更是“Online 2 Offline”(线上与线下的结合)。不收费,你都不放心。
很有可能,“免费互联网”时代的拐点正在到来。
想一想,除了微博,今年最火爆的互联网模式是什么?
是团购。2008年11月才创立的Groupon 仅仅用了两年时间就创造了60亿美元的收购估值。史上最快速度突破5千万美元的月营业额,50%的毛利率,30%的营收增长。在国内,拉手、美团这样的模仿者,也已经达到了每月数千万人民币的营业额,30%的净利润,这样的生意很性感。
这是一个典型的付费商业模式,而且是最爽的“预付费”模式。通过大幅折扣调动消费者的理性购买力,一天一团限时抢购又是最直接的感性刺激,用户必须先交钱后享受服务。它不是在卖广告位,而是直接在卖顾客。
传统的摄影写真工作室就这样被团购改变了。原来是拍一套数千元,一天也就接两三单活。而上一次团购,就能带来上千的客流。就算价格只有原来的1/5,但客流或许是原来的10倍。类似这样的本地生活服务业都可能被团购改变。
以70后和80后为主的新一代消费者更敢在互联网上花钱。在此前十年,中国社会的中坚层对互联网是漠视甚至敌视的。而那些敢于拥抱互联网的年轻人在经济上却并不宽裕。
现在,轮到他们成为社会的中流,财富的创造者,同时也正在成为企业决策者与执行层。他们是数字化的一代,对于互联网没有恐惧。他们见识过硬件产品是如何高台跳水的,也乐意为《哈利波特》、《明朝那些事》、《魔兽世界》这样的NB内容一遍遍掏钱,而且还是正版。
他们所在的企业正在习惯于购买阿里巴巴的诚信通、百度的关键字、淘宝商城的位置,他们理解电子商务才是未来的商务。而随着B2C的互联网释放出巨大的用户需求,反而会对企业的后台IT能力形成倒逼。这时候,与云计算相关的B2B企业级软件该有大发展吧?
有了支付宝、有了网银、有了拉卡拉、有了Q币和点卡,尽管付费仍然有些麻烦,但已经不是那么无法忍受。在手机应用商城、APP Store这样的封闭系统里,所见可以迅速转化为所得。问题仅在于,城市的年轻人多年来被太多的免费产品给惯坏了喂饱了。就算买了一个iPhone4,他们第一想法也是“越狱”。
如果说,传统互联网是从精英到草根,那么,移动互联网的路线就是从草根到精英。“被割裂的互联网”很可能在付费的旗帜下更加碎片化、社群化。这并非坏事,因为免费+广告模式成立的前提是满足尽可能多的用户的最普遍需求,只有5-10%高端用户付钱,大多数人看广告。而用户付费模式是深挖特定用户群市场需求,精耕细作。事实证明,像斯凯这样围绕山寨机和打工仔干起来的移动互联网公司更加可怕。
毫无疑问,苹果和亚马逊是眼下把“付费互联网”发挥到极致的两家公司。围绕着iPad 和Kindle,他们正在重塑内容产业的价值链,核心在于,让用户享受比免费更及时更愉快的体验,让内容生产者拿到他们该拿的钱。
在纳斯达克上,今年的股价比苹果和亚马逊涨得还猛的两家美国互联网公司是Netflix和Opentable。同样,它们也是敢要用户“付费”的互联网公司。
Netflix是北美一家提供视频流媒体点播服务的公司。用户只需要每月支付 8.9 美金,就可以无限制的观赏视频电影电视。而他其实是从一家 DVD租赁商(每次一片,免邮政投递运费)转型而来。现在Netflix 在各个平台上都有客户端,比如电脑,XBox,Wii,PS3,iPhone,iPad,Android,还有支持互联网的Google TV、Apple TV等等。如今Netflix已成为美国最大的视频内容供应商之一,2010年3季度用户总数达1600万人,净利润3800万美元。就连优酷在上市前路演时,也不再说自己是中国的“Youtube+Hulu”,而是以Youtube的规模,走Hulu+Netflix的道路。
OpenTable是美国知名网络订餐网站,同时也是一家Software-as-a-Service(SaaS,软件即服务)的公司。它向餐馆销售一款订餐软件,借助这套软件系统,OpenTable能为餐厅提供的服务包括:把客户订餐的需求具体到时间(1点还是1点15分)、位置(靠窗还是走廊)、价格(是否有打折)等等因素,然后提供便捷和迅速的预订。在OpenTable的总收入中,有54%来自餐厅的月租费,42%来自每一笔订单的佣金,还有4%来自给餐厅装软件的初装费。
想找用户收钱是一回事,真有本事收到钱是另一回事。
用户的选择
过去6个月里,我平均每个月在我的iPad上花费20美金,用双币信用卡支付。
这不是一个惊人的数字。也并没有影响我的生活质量。这大概相当于一对情侣在北京万达影城看场大片的基本花销。
但这区区20美金,让我免除了免费盗版的负罪感。事实上,我会热情地使用我下载的每一个付费软件。并且毫不留情地删掉那些碍眼的免费软件。
现在是一个什么年代?信息过剩,物质丰裕。因为我们的拥有过剩,结果导致无从选择。在心理学上,付一块钱和不付钱就是本质的区别。收费就意味着选择的成本。一旦选择,就意味着利益关系的确立。
我问自己,为什么过去向我收费不成功?产品不够好;购买方式不方便;定价不合理;无差别的服务;盗版的轻松获得。
现在这些问题基本上已不再是问题。关键在于,用户为什么选择?
首先是“稀缺”。马化腾认为,不要被“免费”吓倒,拥有“稀缺性”就拥有了破解免费魔咒的武器。并不是所有有价值的东西都就可以在市场中找到价格,比如空气对所有人都非常重要很有价值。但是没有人去买卖这个空气,为什么呢?太多了。
创造稀缺性的办法?第一得有一个长期的大量品牌投资和口碑传播,比如LV,比如披头士,比如冯小刚。第二要营造一个不可复制的独特体验,就像海关罚款都拦不住的iPad。
数字时代的稀缺性一定是创造出来的,而且是限量的。就像大片《阿凡达》一样,只能在IMAX放映厅里才能看到震撼效果。就算有高清盗版又怎么样?上映一两个月,还处于排队饥渴状态。如果不是某部委喊停,17亿国内票房绝对不是句号。迈克杰克逊已经死了,他留下来的哪些未发表歌曲,卖一首少一首。你是铁杆歌迷,你难道不会收藏纪念吗?
其次,还有“时间成本”。2011年什么最贵?时间成本。乔布斯为了推销他的iTunes,说过一句恶毒的话:你为了不付费听音乐,意味着“你的平均收入比社会的平均工资要低”。这话在中国行不通,中国付费下载音乐的,很多都是富士康代工厂的工人。为什么?因为他们要赚钱就得玩命加班,没有看《非诚勿扰》的时间,没有上百度淘宝的时间。好歹有个手机,下班能放松就抓紧放松。
另一个付费点歌的地方在哪?是婚介交友网站世纪佳缘,为了第一时间表白心意,潜在恋人们把点歌当作虚拟礼物,卖歌成了该网站的重要收入之一。
“想付就付”,不把钱当钱。全球最大的社交网络Facebook ,最近推出了自有的虚拟货币系统(Facebook credits,是不是有点像Q币?),用户需首先使用现金购买这个“信用币”,1美元相当于100个信用币(通货膨胀,钱不值钱呀?)。在购买相应数量的信用币之后,用户就可向好友赠送一些信用币,受赠的Facebook用户既可用来提高自身“威望等级”,也可用来购买Facebook提供的虚拟礼物。使用者还可以此信用币购买Faceboo上数百万家应用程序合作伙伴的虚拟商品。
尽管Facebook要从单笔支付中提成30%,但是“信用币”的小额和便捷,仍将大大提高用户在游戏以及其它应用中支付的次数。调查研究公司Gartner分析师Ray Valdes估计,这种收费模式在Facebook未来营收比重可能达1/3。这意味着Facebook不需重度仰赖网络广告的收入。换句话说,扎克伯格也不用那么着急拿我们的隐私卖钱。
“用户参与劳动”,劳动者消费自己的劳动果实。为什么农家乐的蔬菜水果鱼,比家门口的沃尔玛的还贵。人家还要开车跑到郊区,自己动手采摘自己花钱卖下。因为用户已经不满足于当一个Cosumer(消费者),要当一个Prosumer(生产消费者)。
李宇春是长得最美唱得最好的女明星吗?绝对不是。但她却是最能让粉丝掏钱的女明星。为什么,她就是千万玉米发一元钱短信一票一票投出来的。起点中文网模式下,最牛的作家都会收到粉丝的打赏,以鼓励他们多写快写。这种创造的快感,是冰冷的百度文库解决不了的。粉丝多少不重要,重要的是如何动员这一万粉丝帮明星赚钱。
用户不想在线上付钱,又想玩游戏买宠物怎么办?Facebook上最大的游戏开发商Zynga有狠招。只要你同意帮他的广告商填表格,或者去相应的电商网站买点你需要的东西,就可以挣到用来买游戏商品的“信用币”。这些“信用币”对 Zynga 而言这些是零成本的,但是对玩家而言却有价值。 把这两个套在一起,就出现标准的低买高卖“套利空间 (arbitrage)”。
最后是什么?“个性化”?错,是“私人化”。海量用户的各性化订制,短期内不靠谱,这不仅需要大量的数据挖掘和分析,更需要精准智能的推介能力(ACCESSIBILITY)。这大概属于遥远的“云计算”。豆瓣电台的确体验很好,但你真的会为下一首歌是听王菲还是LADY Gaga付钱吗?我表示怀疑。
其实,根本不必那么复杂。每个人都有一大堆未被满足也不想公开的真实需求。越是私人化的问题,越是“刚需”。一到毕业季,网上论文买卖的生意就火爆。这个时候,就绝对不是按成本定价了,而是按心理预期定价了。
我一直很奇怪,为什么没有人想过把司法、考研、公务员之类的考试培训搬到线上做视频点播。而且不必是冗长的大课,就是10分钟的短视频下载就OK。每个视频老师讲一个考试重点,大家各选萝卜自选筐。边坐地铁边学习。这比视频网站花天价赌首播剧要靠谱吧。
平台时代,创业者必须学会收费
互联网发展到今天,有资格做平台的只剩下寥寥几家。本质上,免费的生意是真正大玩家的生意,小公司越来越玩不起。
免费只适应平台型企业,平台就是运营商,不管人家是开赌场还是开游乐场,规矩都是它定的。山寨机为什么搞暗扣,还不是被中移动的分成政策给逼的。Facebook眼红Zynga挣钱比自己还多,也会要求提成30%的霸王条款。任何基础性的服务,任何有助于提升用户黏度的应用,运营商一定会自己动手。
因此,与其指望平台运营商的肚量,不如依靠自己的能量。如果你没本事从用户那赚到钱,你就没钱分给运营商。它有什么动力跟你合作呢?你的用户越多,你能多平台运作,它越害怕你,一旦你跑了,他找谁收钱去?
对于创业者,一定要学会收费,不收费就代表你对自己的产品不够自信。
(作者系独立商业观察家,社会化媒体创业人,《创业家》杂志前主编)
| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| « Apr | ||||||
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | |||