-
七28No Comments
Thrift简介:
Thrift 是apache旗下一个跨语言调用的库,并包含了一些代码生成的工具,是由facebook开源而来。在facebook,其被用来开发实现一些高效、可扩展的后端服务。
它的主要目标是通过抽象各个语言的不同,形成一个公共库,以支持高效可靠的跨语言通信。特别是,Thrift支持开发者通过一个和具体实现无关的中立语法定义新的数据类型和服务接口,并自动生成构建RPC客户端和服务的所需的代码。
以下是centos5.4上的安装过程:
- 安装依赖包:yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel
- 升级autoconf: http://ftp.gnu.org/gnu/autoconf/autoconf-2.66.tar.bz2
- 升级libtool: http://ftp.gnu.org/gnu/libtool/libtool-2.2.8.tar.gz
- wget http://www.apache.org/dyn/closer.cgi?path=/incubator/thrift/0.2.0-incubating/thrift-0.2.0-incubating.tar.gz 并安装之
我自己开始安装的时候,configure总提示失败,后来据Google是因为autoconf和libtool版本过低引起,升级(以上2、3步)后,问题解决。
编码:
- 编写数据类型和接口定义文件: user.thrift
- 生成c++ server和python client对应的代码:
- thrift –gen cpp ./user.thrift
- thrift –gen py ./user.thrift
- 以上的生成结果里,已经各自带了一个简单的server/client,可直接测试
测试:
1. 编译c++ server:
cp UserStorage_server.skeleton.cpp UserStorageTest.cpp
编辑此文件,修改UserStorageHandler类的实现方法,这是实现自己的业务逻辑的地方
编译时,除了给g++ cpp文件,还要加上参数 -lthrift -I /usr/local/include/thrift/
编译完成,执行:./a.out,进程会在9090 tcp端口进行监听
2.python client
直接执行 ./user/UserStorage-remote retrieve 1
正常的话,会返回一个UserProfile对象
附user.thrift文件:
struct UserProfile {
1: i32 uid,
2: string name,
3: string blurb
}
service UserStorage {
void store(1: UserProfile user),
UserProfile retrieve(1: i32 uid)
}
参考:
Thrift文档:http://wiki.apache.org/thrift/
Google到的configure错误说明:http://mail-archives.apache.org/mod_mbox/incubator-thrift-user/200907.mbox/%3C4A673E6F.5020205@facebook.com%3Ethrift c++ 指南:http://wiki.apache.org/thrift/ThriftUsageC%2B%2B
白皮书:http://incubator.apache.org/thrift/static/thrift-20070401.pdf
-
七20
被人为割裂的中国互联网
Filed under: internet;No Comments我有两个朋友。L的公司在上海,大半时间跑广东。他是华南某所不太知名的大学毕业的,小眼睛质朴男,多年以前还是个文学青年。哥们做手机网游的,我见他使过好 几款手机,但最贵的一个也不过1千多块钱。比起什么Web2.0、移动互联网的概念,他更关心珠三角的几千万农民工和城市边缘的大学生“蚁族”,怎么关 心?在东莞的夜宵摊上跟他们拼啤酒,在富士康厂区外网吧里刷夜,跟靠做他们生意开上宝马的便利店老板扯淡……W猫在北京中关村。他从小就是个脑袋很大眼睛发亮的天才少年,数理化成绩很好,逻辑思维超强,英文和中文一般流利。在首都某著名大学毕业后,W 直接去美国名校拿了硕士,接着回国创业。我一直觉得,他是硅谷Geek们的中国版。诸如iPad之类的新技术玩意,我总能第一时间从他那儿找到。他也是国 内把玩Facebook、Twitter、Groupon、Foursqure的人。啥叫互联网的未来,W做的网站就代表互联网的未来。W比L拥有更多的掌声和名声。但遗憾的是,他做了好几个连投资人都觉得很酷的网站,却始终没有挣到大钱。原因不外如下:要么是起个大早,却被一 大堆抄近道的同行给围追堵截;要么因为资金接济不上,只能让一个更有资源实力的大公司直接吃掉,还有的不知道触了哪根高压线被主管部门直接暂停。L的生意是实实在在每天都能数着钱的,他都已经可以打高尔夫了,但他并不想告诉无关人他挣到钱了。说了也没人信,几十万月薪不到2000的打工 仔拿着300块钱买的山寨机玩L公司做的游戏,每月给他贡献过百元的ARPU值,换句话说,他们收入的十来分之一都心甘情愿地送给L了。我有时也想不 通,W针对的客户明明是北京、上海这些大城市中最有消费能力的精英。为什么他们舍得花钱买最贵的手机,换最新的笔记本电脑,下最好的馆子,在网上却什么都 要免费。圈里公认,只要是W做的事情必定引来围观。同行也好,媒体人、营销人也罢,口口相传,网站流量和用户量几乎是一条直线往上蹿。但奇怪的是,过了 没多久就停止上升势头,开始跟中老年同志的心脏一样来回震荡。我也问过L,他的这些草根用户没几个有自己的电脑,更谈不上3G,究竟是怎么发掘的?L笑笑 说,网吧都不是最有效的渠道。厂区周边有很多便利店,工人一下班就聚到哪儿。老板提供一台电脑,里面装了各种手机用的游戏、MP3、电影,再备一本类似早 年K歌房里的“点歌簿”。不用上网,拿根USB数据线,想要什么下什么。还有更方便的,用手推车直接送到宿舍门口。有次跟L吃饭,他提问我:如果一款游戏要打入45万富士康工人的市场,该请哪位代言人合适?我先猜周杰伦,摇头,丫目标受众是城市,又猜春哥也 不对,她只杀伤学生和少妇,怒了,决定猜当红的凤娇,还是被鄙视!正确答案是凤凰传奇,有百度歌手榜单为证。备选是慕容晓晓。完全超出我知识范围,还好我 没猜韩寒。过去W单纯地以为凭技术就能改变社会,现在他知道你可以不过问政治,但政治会来过问你。不过,要让一个海归精英学会怎么跑门子疏通关系确实有点 臊。L曾经愤青过,但如今很务实,好的商人都是知道怎么看《新闻联播》的。他挺关心运营商的人事变动和扫黄整顿,还搞过几次工友联谊会,虽然目的是为了推 广他的游戏。前一段富士康工人“12连跳”,他很严肃地跟我说,这事他们有责任。我吓一跳。L讲,那些一想不开就跳楼的年轻人正是他的衣食父母。一部手机 通常就是这些工人唯一的娱乐设备,与厂外世界交流的唯一媒介。他们有责任让工人们更快乐。我所认识的投资人都对W评价很高,但却更爽快给L投钱。因为他们的心里也明镜似的:在中国,做精英的只能赚吆喝,做草根的才能赚着钱。腾讯、百 度不就是最好的例子嘛。上海那位梳分头打摩丝的笑星说过一句经典:我是喝咖啡的,北方那两位是吃大蒜的。咖啡是舶来品,感觉很洋气,吃大蒜却有益身心。今年炒大蒜的都 挣了很多钱,没听说谁倒腾咖啡挣了钱。中国的互联网好像也是一样?我曾经突发奇想,如果把W和L对调位置,情况会不一样吗?他们会更理解各自商业的长短吗?后来想想觉得这事不太可能。W所追求的互联网,其实是一个“美式的互联网”。在美国,信息革命是从上个世纪60年代开始的,从1950后到1990后都是“数字化的一 代”。他们之间并没有太大的“数字鸿沟”,他们的生意与生活,工作与娱乐都与互联网分不开。这也是为什么80后的扎克伯格能够和50后的乔布斯、60后的 贝索斯、70后的佩奇同台竞技的原因。同时,美国的社会结构是一颗“橄榄”,没有那么大的贫富差距、地区差异、城乡之别,所以,美国的互联网可以说是“全民的互联网”。但当下中国的社会结构,原本我们以为它会是一座“金字塔”,但越来越变成一颗“图钉”。W和L一个站在削尖的头上,一个站在遥远的钉帽上。中国 没有一个所谓“全民的互联网”,中国的互联网是人为割裂的。它既存在于精英的Think笔记本上,也存在于草根的MTK山寨机中。我们的精英也许和美国同 步,草根却与越南同步。事实上,中国的“数字化一代”只存在于北上广等一些大城市,20-40岁之间的几千万中产阶级。剩下的几亿中国互联网用户归根结底都只是QQ用 户。互联网改变不了这个现状,能改变它的也许需要更宏大的社会变革和经济变革?我相信,L看穿了所谓“中国的互联网”的本质。哪些精英们的欲望从来不缺乏满足的渠道,太多的企业在追逐宠坏其实有限的一群客户。相反,有一大 批“数字化贫民”却没有办法利用互联网改变自己的命运,没有条件通过网络让自己的生活质量飞升,只能沉醉于廉价的虚拟娱乐中。L的商业很符合本土国情,很 和谐社会,但他能够走出国门吗?我一直相信,终有一天,W能做点“代表先进互联网”的事情,让美国人也能跟着咱们屁股后面学。可现实的磨难会不会打消他的意志呢?按照哲学家柏拉图的“洞穴”理论,每个人从出生开始就呆在自己挖的一个洞穴里,我们所见的世界只不过是被阳光抛到洞穴墙壁上的影像,而我们这些 洞穴的居民却把它当作是真实的世界,因为我们没有见到过其他的东西。而真实的世界却是在洞穴之外,在有太阳的地方。不管看这个BLOG的各位精英们是否承认,我们和某些人——一群数量比我们大得多的人(中国的农民工、刚毕业的大学生等等,大概3亿人),完全 生活在两个不同的世界。如果能关注那一群人,还会有很多机会。但很有可能,我们永远都走不出自己呆的洞穴。我有两个朋友。
L的公司在上海,大半时间跑广东。他是华南某所不太知名的大学毕业的,小眼睛质朴男,多年以前还是个文学青年。哥们做手机网游的,我见他使过好 几款手机,但最贵的一个也不过1千多块钱。比起什么Web2.0、移动互联网的概念,他更关心珠三角的几千万农民工和城市边缘的大学生“蚁族”,怎么关 心?在东莞的夜宵摊上跟他们拼啤酒,在富士康厂区外网吧里刷夜,跟靠做他们生意开上宝马的便利店老板扯淡……
W猫在北京中关村。他从小就是个脑袋很大眼睛发亮的天才少年,数理化成绩很好,逻辑思维超强,英文和中文一般流利。在首都某著名大学毕业后,W 直接去美国名校拿了硕士,接着回国创业。我一直觉得,他是硅谷Geek们的中国版。诸如iPad之类的新技术玩意,我总能第一时间从他那儿找到。他也是国 内把玩Facebook、Twitter、Groupon、Foursqure的人。啥叫互联网的未来,W做的网站就代表互联网的未来。
W比L拥有更多的掌声和名声。但遗憾的是,他做了好几个连投资人都觉得很酷的网站,却始终没有挣到大钱。原因不外如下:要么是起个大早,却被一 大堆抄近道的同行给围追堵截;要么因为资金接济不上,只能让一个更有资源实力的大公司直接吃掉,还有的不知道触了哪根高压线被主管部门直接暂停。
L的生意是实实在在每天都能数着钱的,他都已经可以打高尔夫了,但他并不想告诉无关人他挣到钱了。说了也没人信,几十万月薪不到2000的打工 仔拿着300块钱买的山寨机玩L公司做的游戏,每月给他贡献过百元的ARPU值,换句话说,他们收入的十来分之一都心甘情愿地送给L了。我有时也想不 通,W针对的客户明明是北京、上海这些大城市中最有消费能力的精英。为什么他们舍得花钱买最贵的手机,换最新的笔记本电脑,下最好的馆子,在网上却什么都 要免费。
圈里公认,只要是W做的事情必定引来围观。同行也好,媒体人、营销人也罢,口口相传,网站流量和用户量几乎是一条直线往上蹿。但奇怪的是,过了 没多久就停止上升势头,开始跟中老年同志的心脏一样来回震荡。我也问过L,他的这些草根用户没几个有自己的电脑,更谈不上3G,究竟是怎么发掘的?L笑笑 说,网吧都不是最有效的渠道。厂区周边有很多便利店,工人一下班就聚到哪儿。老板提供一台电脑,里面装了各种手机用的游戏、MP3、电影,再备一本类似早 年K歌房里的“点歌簿”。不用上网,拿根USB数据线,想要什么下什么。还有更方便的,用手推车直接送到宿舍门口。
有次跟L吃饭,他提问我:如果一款游戏要打入45万富士康工人的市场,该请哪位代言人合适?我先猜周杰伦,摇头,丫目标受众是城市,又猜春哥也 不对,她只杀伤学生和少妇,怒了,决定猜当红的凤娇,还是被鄙视!正确答案是凤凰传奇,有百度歌手榜单为证。备选是慕容晓晓。完全超出我知识范围,还好我 没猜韩寒。
过去W单纯地以为凭技术就能改变社会,现在他知道你可以不过问政治,但政治会来过问你。不过,要让一个海归精英学会怎么跑门子疏通关系确实有点 臊。L曾经愤青过,但如今很务实,好的商人都是知道怎么看《新闻联播》的。他挺关心运营商的人事变动和扫黄整顿,还搞过几次工友联谊会,虽然目的是为了推 广他的游戏。前一段富士康工人“12连跳”,他很严肃地跟我说,这事他们有责任。我吓一跳。L讲,那些一想不开就跳楼的年轻人正是他的衣食父母。一部手机 通常就是这些工人唯一的娱乐设备,与厂外世界交流的唯一媒介。他们有责任让工人们更快乐。
我所认识的投资人都对W评价很高,但却更爽快给L投钱。因为他们的心里也明镜似的:在中国,做精英的只能赚吆喝,做草根的才能赚着钱。腾讯、百 度不就是最好的例子嘛。
上海那位梳分头打摩丝的笑星说过一句经典:我是喝咖啡的,北方那两位是吃大蒜的。咖啡是舶来品,感觉很洋气,吃大蒜却有益身心。今年炒大蒜的都 挣了很多钱,没听说谁倒腾咖啡挣了钱。中国的互联网好像也是一样?
我曾经突发奇想,如果把W和L对调位置,情况会不一样吗?他们会更理解各自商业的长短吗?后来想想觉得这事不太可能。
W所追求的互联网,其实是一个“美式的互联网”。在美国,信息革命是从上个世纪60年代开始的,从1950后到1990后都是“数字化的一 代”。他们之间并没有太大的“数字鸿沟”,他们的生意与生活,工作与娱乐都与互联网分不开。这也是为什么80后的扎克伯格能够和50后的乔布斯、60后的 贝索斯、70后的佩奇同台竞技的原因。
同时,美国的社会结构是一颗“橄榄”,没有那么大的贫富差距、地区差异、城乡之别,所以,美国的互联网可以说是“全民的互联网”。
但当下中国的社会结构,原本我们以为它会是一座“金字塔”,但越来越变成一颗“图钉”。W和L一个站在削尖的头上,一个站在遥远的钉帽上。中国 没有一个所谓“全民的互联网”,中国的互联网是人为割裂的。它既存在于精英的Think笔记本上,也存在于草根的MTK山寨机中。我们的精英也许和美国同 步,草根却与越南同步。
事实上,中国的“数字化一代”只存在于北上广等一些大城市,20-40岁之间的几千万中产阶级。剩下的几亿中国互联网用户归根结底都只是QQ用 户。互联网改变不了这个现状,能改变它的也许需要更宏大的社会变革和经济变革?
我相信,L看穿了所谓“中国的互联网”的本质。哪些精英们的欲望从来不缺乏满足的渠道,太多的企业在追逐宠坏其实有限的一群客户。相反,有一大 批“数字化贫民”却没有办法利用互联网改变自己的命运,没有条件通过网络让自己的生活质量飞升,只能沉醉于廉价的虚拟娱乐中。L的商业很符合本土国情,很 和谐社会,但他能够走出国门吗?
我一直相信,终有一天,W能做点“代表先进互联网”的事情,让美国人也能跟着咱们屁股后面学。可现实的磨难会不会打消他的意志呢?
按照哲学家柏拉图的“洞穴”理论,每个人从出生开始就呆在自己挖的一个洞穴里,我们所见的世界只不过是被阳光抛到洞穴墙壁上的影像,而我们这些 洞穴的居民却把它当作是真实的世界,因为我们没有见到过其他的东西。而真实的世界却是在洞穴之外,在有太阳的地方。
不管看这个BLOG的各位精英们是否承认,我们和某些人——一群数量比我们大得多的人(中国的农民工、刚毕业的大学生等等,大概3亿人),完全 生活在两个不同的世界。如果能关注那一群人,还会有很多机会。但很有可能,我们永远都走不出自己呆的洞穴。 -
七14No Comments
以前写的一段小脚本,今天有同事想复用之,但是有一个小改动:
之前是当前窗口跳转到某个URL,新需求是要保持当前窗口内容,在新窗口打开这个URL。
事实上在click的处理方法里,即使调用window.open,浏览器也不会阻拦窗口,但总觉得用window.open模拟新窗口打开不是最佳方案;而且,但还有一种更直观的方法,来完成这个需求:
HTML:
<a href=”#” onclick=”return handle_click(this);” >click me</a>
<script type=”text/javascript”>
function handle_click(obj)
{
// do something
if (要在新窗口打开某个URL)
{
obj.href = URL地址;
obj.target = “_blank”;
return true;
}
return false; // 不会触发a的默认事件处理
}
</script>
实验ok,记录之。
-
七1No Comments
memory engine的几个特点:
- 数据存在heap中(不同于mysql内部的memory临时表,memory engine表不会被自动转成disk表) ,数据不会被持久化保持,每次重启mysqld,表数据丢失(表定义仍然存在,保存在.frm文件)
- 定长的行存储大小,不支持Text和Blob,支持auto_increment
- 支持INSERT DEDLAY
- 索引限制:
- MEMORY tables can have up to 32 indexes per table, 16 columns per index and a maximum key length of 500 bytes.
- 默认使用的index方式为hash(支持hash和btree两种)
- 表的最大容量受限制max_heap_table_size ,默认16M,可以为每个表单独设定此限制
- Replication:每次开始使用Memory Engine的Table,其会向Binlog中写入一条DELETE语句,这样会清空slave的内容,以保持主从一致
mysqld选项–init-file:
Read SQL statements from this file at startup. Each statement must be on a single line and should not include comments.
每次mysql启动时,可以先执行一个sql文件,但里面的sql不能跨行,也不能含有注释。
通过–inti-file恢复memory engine Table:
- 以下以一个例子说明:
- abc是一个memory engine表,abc_bak是innodb表,其结构同abc,如下:
CREATE TABLE `abc` (
`v` int(11) NOT NULL,
`created_time` timestamp NOT NULL default CURRENT_TIMESTAMP
) ENGINE=MEMORY DEFAULT CHARSET=utf8; - 在/data/my3307/my.cnf里加入:(或者使用mysqld的命令行参数,也可以)
init-file=/data/my3307/init.sql
- 编辑/data/my3307/init.sql,内容如下:
insert into test.abc(v) select v from test.abc_bak;
- over,每次重新启动mysql,都会自动根据abc_bak的数据恢复abc表。
- abc是一个memory engine表,abc_bak是innodb表,其结构同abc,如下:
通过内存加速另外有比较通用的做法,即使用内存文件系统,比如tmpfs、ramfs等,这个可以过几天再总结下。
参考:
http://stackoverflow.com/questions/716079/mysql-memory-engine-init-file 关于init-file和memory engine的讨论
http://blog.sina.com.cn/s/blog_51294ca50100g44u.html 几个memory fs的介绍
-
七1No Comments
玛丽莲问题:
你参加电视台的一个抽奖节目。台上有三个门,一个后边有汽车,其余后边是山羊。主持人让你任意选择其一。然后他打开其余两个门中的一个,你看到是山羊。这 时,他给你机会让你可以重选,也就是你可以换选另一个剩下的门。那么,你换不换?
答案:
这道题目的标准答案是换选二号门。
(一)条件概率:全概率和贝叶斯公式解
游戏开始,设P(X)为A、B、C三道门后面有车的概率,则P(A)=P(B)=P(C)=1/3
假定:游戏者任选了一道门A,而主持人(HOST)打开一道后面是羊的门,事实上有两种情
况。1. 主持人了解所有门后面的东东,他一定要打开一扇“羊”门
如果车在A门后面,主持人有B、C两种选择,打开C门(“羊”门)的概率为
P(Host opens C|A) = 1/2
如果车在B门后面,主持人没有选择,只能打开C门
P(Host opens C|B) = 1
如果车在C门后面,主持人一样没得选择,绝对不能开C门
P(Host opens C|C) = 0所以,主持人打开C门的概率为
P(Host opens C) = P(A)*P(H.o. C|A) + P(B)*P(H.o. C|B) + P(C)*P(H.o. C|C)
= 1/6 + 1/3+ 0 = 1/2根据贝叶斯公式,在主持人打开C门的条件下,A、B两门后面是车的概率分别为
P(A|Host opens C) = P(A)*P(Host opens C|A) / P(Host opens C)
= (1/6) / (1/2)
= 1/3
P(B|Host opens C) = P(B)*P(Host opens C|B) / P(Host opens C)
= (1/3) / (1/2)
= 2/3
这就是为什么要换二号门的原因。2. 主持人和游戏者一样蒙在鼓里,他是碰巧打开一扇“羊”门,那么
如果车在A门后面,主持人有B、C两种选择,打开C门的概率为
P(Host opens C|A) = 1/2
如果车在B门后面,主持人一样有B、C两种选择,打开C门的概率还是
P(Host opens C|B) = 1/2
如果车在C门后面,主持人还是有B、C两种选择,只是打开C门不可能看到羊
P(Host opens C|C) = 0所以,主持人打开C门见到羊的概率为
P(Host opens C) = P(A)*P(H.o. C|A) + P(B)*P(H.o. C|B) + P(C)*P(H.o. C|C)
= 1/6 + 1/6+ 0 = 1/3根据贝叶斯公式,在主持人打开C门见到羊的条件下,A、B两门后面是车的概率分别为
P(A|Host opens C) = P(A)*P(Host opens C|A) / P(Host opens C)
= (1/6) / (1/3)
= 1/2
P(B|Host opens C) = P(B)*P(Host opens C|B) / P(Host opens C)
= (1/6) / (1/3)
= 1/2
在这种情况下,用一个简单的条件概率式P(A|C.sheep)一样可以得出1/2的结果。这就是“
不换”的原因。遗憾的是,从游戏的设置来看,主持人不知情的可能性很小。(二) 另一种思路,玛丽莲问题的拓展
在三道门的玛丽莲问题中,对游戏者的策略进行观察,他要赢得汽车,可以通过如下途径
:
1.第一次选错,主持人打开一道门之后换选
第一次选错的概率为2/3,然后,换选选对的概率为100%,就是说,第一次选择之后再换选
,得奖得概率为2/3*100%=2/3
2.第一次选对,主持人打开一道门之后不换。
第一次选对的概率为1/3,不换则得奖率100%。1/3*100%=1/3就是“不换”策略的胜算。这个方法可以推广到三道门以上的玛丽莲问题拓展,譬如,在四道门的游戏里,主持人依
次打开两扇“羊门”,每一次游戏者都有权选择“换”或者“不换”。游戏共有三个步骤
,步骤一是“初选”,在步骤二和步骤三,分别有“不换——不换”、“不换——换”、
“换——不换”和“换——换”四种策略组合,中奖可能分别为:
1/4
3/4
(3/4)*(1/2)=3/8
1/4(换两次之后换回初选的得奖率)+(3/4)*(1/2)(换两次之后不换回初选)=5/8
可见,选择“不换——换”得策略最有利。
由此可以推广到N道门的游戏中,游戏者最有利的对策是一直坚持不换,直到只剩两扇门还
没有打开时再换。上述证明参考自芝加哥大学(UCHICAGO)网页上的解法。
wiki: http://en.wikipedia.org/wiki/Monty_Hall_problem
http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763105c87315f0797634b8c8c4122c9cc15cf2210564710b9e8797c0704a5873c3a51f11e03fdf04128715c34f2c688de459cf8cc3f2ff93045030bf23705a51ab8b84332c050872b98b86ee7&p=8b2a950ecd8c04ff57ee923b5c47&user=baidu

最近评论