分类目录归档:百姓网内部

开发者的办公环境

一个好的开发者的办公环境是什么样子的呢?

  1. 安静的。安静的要死的那种环境。我不介意要戴上耳机听听音乐,但背景一定要安静下来。
  2. 风水好。所谓风水里面让人心里安静的那些因素都需要有。背后最好有柱子,有屏风可以看不到别人,可以安静的自己呆着。最好的状态是一人有一个办公室,隔离起来,但如果达不到也要有独立的空间。用盆栽的小树把自己围起来是一个好主意。(Amy,我决定用9盆我旁边的那种小树把我的座位围起来。请帮忙)
  3. 一流的网络环境。网速要快,默认翻墙,稳定。
  4. 有饮水机,有沙发,可以发呆,可以睡觉。必须有窗户,但要有完全遮光的帘子,以遮挡外面的光线。同时走路10步以内必须有一个可以向远处眺望的地方,让自己的眼睛可以休息一下。
  5. 不规律的时间。一定要故意做出点不规律出来,不规律不是重点,重点是不要让规律阻挡思考的自发节奏。当自己在努力写一些东西的时候,应该让自己写完,而不管是不是午饭时间。如果自己在一个地方卡住的时候,不要等到下班再休息,就应该在沙发上躺一下。如果需要,晚上晚点走,早上晚点来也是好主意。
  6. 耳机。耳机是一个非常好的表达不要让大家打扰的办法。在工作的时候必须尊重戴耳机的人的选择,并且形成一个惯例。
  7. Herman Miller Aron椅子。这是必须的。必须的,不要试图争辩。
  8. 两个屏幕?这个我还不是很确信。在我变成的年月里面,从来没有用过两个屏幕,但是或许有人需要。硅谷三个屏幕似乎是标配。
  9. 可调节的大桌子。桌子的高度如果可以调节最好。毕竟在全世界那么多的参数中间,这个和自己的关系最为紧密。
  10. 台灯。这个可能会被忽略,但是在晚上非常有用。如果房间的灯光关上,把台灯打开,这是一种非常好的入静的状态。放心,对于正在写东西的developer来说,这个状态决不会睡着。
  11. 无数的插座。没有比临时找不到地方插一个新的充电器更浪费程序员时间的了。

最后,这个办公室必须至少比程序员的家里舒服。必须的。所以按照一个最舒服超越自己在家里办公的规格设计就好了。

Baixing Graph API 0.2 发布

各位Hacker们,

今天乐高时间,我们将要发布一个还没有成型,但是可以初步展示我们要做的东西。大家可以自己先玩一玩。在给大家尝试的地址之前,我先说一下背景。

程序员的工作其实是增加社会财富。

社会财富的增加 = “效率提高” x “杠杆”。

“效率提高”是指是不是有更好的方式解决问题;“杠杆”是指这个提高会被多少人使用。单纯的提高效率如果没有足够长的杠杆,就像自己把自己的自行车洗干净,并没有对社会产生太大的影响;而在百姓网写一段程序,劳动量和洗自己一辆自行车一样,但杠杆长得多。这个杠杆,就是百姓网工程师每一个改动会被成几千万人使用。我们的一个小时劳动会带来几千万人每人节省或者浪费一分钟,这是巨大得社会财富的增加或者浪费。

而还有一个杠杆,就是我们的程序员的工具。工具的每一点提高,就会带来二十几个开发人员的效率的提高,再乘以几千万人,这个杠杆非常的长,产生的影响非常大。这就是工具组的产生的原因。

工具组小排和Hax花了一周的时间,把我们的第一个产品,Graph API的Alpha版本推出。这就是让大家用更加容易的方式访问到百姓网的所有数据和所有功能,且开始尝试建造新的语言,让大家更快的表达要表达的东西。

说到表达,更大家分享一个有趣的例子。前天学会一个新单词:Gape。原文是”I stood there gaping for a few seconds”。 Gape啥意思呢?一查字典,意思是:Stare, with mouth widely open。其实,如果学过编程的话,你会发现这是一个函数定义,

function gape() {

Stare();

Mouth_Widely_Open()

}。

如果你继续查Stare这个函数,定义如下 :

function stare() {

return directly(fixedly(look());

}。

也就是说,语言本来就是不断的定义,产生新的语言。如果小学生,会说look,或者会说“look fixedly and directly”, 如果啰嗦一点的小学生或许会精确的描述为: “look fixedly and directly, with mouth widely open”。但会用gape这个已经定义好的语言,就比啰哩啰嗦的说一大堆是更高级的语言,更加高效的表达了意思(风险是语言版本比较低的人会在脑子里蹦出来undefined function错误)。你会发现当一个人开始用成语和典故的时候,他的表达能力在加强。刚才的例子,gape是比stare更高级的语言,stare高于look,而look高于更底层的,大家没有听说过的语言,叫gaze。

而我们现在的语言,每一个函数,之所以那么长,那么恶心,那么读不懂,就是因为我们只会用php给的那些语言,那些语言不足以让我们表达。我们需要不断的定义class,就像miniChaoge一样,而且要让其他人使用这些class,功能,工具,我们的效率才会提高,才会往高级语言方向前进。

工具组要做的事情就是造语言,造函数,造工具,让大家能用一个词表达,就不要用那么多的词。

好,下面开始讲Graph API.

造语言,一定从最简单却最常用,且最麻烦的地方开始。这就是我选择了数据。如果有统一的方法访问到百姓网所有数据,以及他们之间的联系,大家说话一定会简洁很多。Graph API的一个绰号叫“百姓网数据解放运动”。

在Graph的世界里面,任何对象都是平等的,有一个唯一的ID,叫做gid (Global ID),只要知道gid,就可以用如下两种方式访问:

PHP里面,用graph($gid);

在外面,用http://graph.baixing.com/gid (返回JSON格式)

返回的对象包括所有的属性,并且描述了这个对象的所有属性(包括程序定义的,和Meta里面定义的),以及这个属性的所有的连接(比如Ad就有user,category这样的指向另外一个对象的连接,也有comment,log这样的返回一个数组的连接)。

为了更好的理解Graph,你可以想像百姓网的任何一个对象都是一个八爪鱼,向四面八方伸出触角。这些触角写在connections里面。通过在id后面添加触角的名字,你就访问到了另外一个对象(或者一组对象),从那里又是一个起点,可以继续访问。。。

举一个例子,我们从一个广告开始,227812140。

graph(227812140)

返回这个广告所有的属性。它还有如下的edge:

user -> 连到一个用户对象。

category -> 连到category对象

area -> 连到area对象

ip -> 连到一个关于这个ip信息的对象上。

user, category, area, ip等大多数对象有一个ad连接,可以返回一个数组,包含所有的ad

category,area等树状结构有parent,children等连接,还有一个特殊的path,返回从根到自己的所有对象的一个数组,用户拼面包屑用。

未来,会支持百姓网所有的信息,比如

mobile会支持call,就是呼入call centre 的所有log,通化时长,以及接线员工号等。

ad会支持付费的log

user会支持过去7天内,14天内,一年内的pv,pv在各个类目的分布等等飞哥那里有的所有信息,甚至每一行的访问log

这些只需要一些配置和数据准备工作。

大家应该可以看到这个graph的潜力。我们要让所有百姓网有的数据,和互联网上的数据,用统一的方式访问。比如刚才的ip对象,数据是来自于淘宝的,不是我们自己的数据库。比如:wiki:上海,就指wikipedia上面的上海的文章。通过统一了数据,我们让百姓网的开发速度大幅增快。

好了, 现在大家就可以测试了,请从这里开始,随便点击任何的可以点击的连接,并且注意URL的变化。

http://graph.baixing.com

建议大家用Chrome的Json View来看。Graph API Explorer Has正在写。同时很快大家就可以在chaoge代码里面开始使用

来访问数据了。graph的数据比JSON的数据完整很多。

未来:

在这里一定要强调一下,就是这一层仅仅是整个技术架构中间最最底层的一层,叫做数据层。它仅仅代表数据,但是不代表业务逻辑,不代表前端的展示。还有很多这一层之上的东西。我们需要在这一层之上不断的建设新的层,供上层来用。

工具组会在接下来的一周把这个Alpha变成production级别,可以在线上使用。写操作设计数据一致性,会跟随业务重构一个对象一个对象的支持。

jianshuo

百姓网Graph API 9月6日全国公测

工具组做了一个决定,在9月6日公开发布一系列产品和计划。

  1. Baixing Graph API
  2. Graph数据访问工具集的开源代码
  3. Jedi模版语言以及开源代码
  4. 手机客户端天使投资计划

我们会根据成熟程度在9月1日决定是否邀请媒体。

挨个解释如下:

1. Graph API和工具集

百姓网会公开Graph.baixing.com给外部访问。这仅仅是一个preview,会简单的根据IP限制每天千次请求,提供有限度的数据。这是让百姓网数据公开化的第一步。

同时,支持graph.baixing.com的所有源代码都将开源。我相信我们遇到的问题:大量数据无法用统一的办法访问,是一个中国互联网界比较普遍的问题,我们希望提供一些工具让大家可以每个人都很容易的搭起来自己的Graph,如果使用的人可以用类似的方式互通信息(在百姓网的Graph设计中,节点是不限于graph.baixing.com域名下的)。比如每个人可以简单的把自己的blog变成一个Entry/Category/User的graph。

2. Jedi模版语言。

解决以最快的方式书写前段,并且在服务器和浏览器都可以访问生成的HTML的问题。这也是一个业界的问题,我们把我们的成果开源,供所有人使用。同时我们那时候也应该在自己的环境中开始生成了自己的编程环境,供我们的Developer/PM写出更好的View Ad。

问题:为什么要开源?

一个公司要解决一个问题,百姓网解决的问题是“找工作,找房子,买卖二手”的问题。而技术人员解决的问题要具体的多,就是刚才提供的数据无法简单访问和连接,前端代码过乱等问题。技术人员的解决方案如果让更多的技术人员使用,会产生大得多得社会财富。Hacker的精神是在于让社会更高效,产生更多的社会财富,而不是挣钱(虽然对社会财富的增加的贡献,必定转化为自己的回报的信心)。我们愿意无偿给大家使用,因为捂在自己手里也是浪费。

另外一个目的,我们希望工具会变的更好。开源就有了不断变得更好的可能性,就会有外部的人参与维护(我是说长期,我是说有可能,不是必然)。这也敦促我们写更好的代码。

问题:百姓网为什么要开放数据?

其实对于Graph.baixing.com的对外开放,它仅仅是一个技术上的决定,并不会影响业务。真正的API,需要解决的不仅仅是技术上的“可以访问”,还要解决经济上的“愿意访问”。仅仅开放数据本身,几乎可以断定,没有人会有兴趣使用的。

历史上有一个很近的例子。Facebook曾经把自己的所有数据开放,就像现在的graph.facebook.com的样子,结果几乎没有developer理它,因为这个互联网上到处都是数据,拿到Facebook的数据本身不是一件让人有动力的事情。他们试了很多办法,直到做了一件事情:他们更改了逻辑,开始用Like按钮,用户按了以后,这个网站的地址将出现在News Feed里面。这也就意味着加了这个东西,网站的流量就会长。结果用疯了。不会有人会为了数据做事情,但有人会为了流量做事情。

在互联网上只有两种硬通货,一个是流量,一个是钱。百姓网只有有了很强的散布钱或者流量的能力,才有人会用我们的API.

先说钱。其实百姓网的所有的API的对象,一定是mobile developer。钱又有两种。一种是用户的钱,一种是百姓网的钱。用户的钱很有可能是让用户在移动应用里面购买该应用中的置顶,或者百姓网全系统的置顶,获取收益。这个稍微有些远。另外百姓网的钱,就是为了鼓励开发者,我们可以给出10万元的激励资金,占1%的股份的天使投资方式,在早期促进应用的开发。这就是我们说的天使投资计划。

第二部分,就是流量。如何通过用户发帖, 能够在百姓网上带流量给开发者,这是另外一个需要探讨的问题,很有可能使用发布信息加脚注的办法(类似于现在“使用iPhone客户端发布”那样的,但是更结构化,可点)。这样也是一种经济的促进方法。

这是一个以时间为限制的项目,工具组在看在这个时间前能够高质量的发布哪些东西。

百姓网Mobile的定位

在伟力展示手机组的数据的时候,我在想一个问题:如果这是家独立的移动互联网公司,他的估值是多少?

这个问题在整个review期间持续的萦绕在脑子里。我问的问题是:百姓网手机组到底在解决什么问题?

有两个可能的答案。

答案一:百姓网手机访问不方便的问题。
答案二:百姓找工作找房子买卖二手不方便的问题

这是两种完全不同的思路。

如果把手机组当做一个公司的话,解决第一个问题的公司是一家软件外包公司,是为了一个客户(比如说百姓网)而做手机客户端,WAP产品的一家软件公司,这家公司的最终客户是百姓网,这家公司的业绩是功能的完整度,软件质量等等指标。

但解决第二个问题,视野完全不同了。比如如果手机要解决的找工作的问题,这个问题的三个重要的子问题都需要解决:1)可以发可以看而且很顺畅 2)有足够多的人在这个市场里 3) 内容使用户要的,包括质量和信息组织(就是类目)。

我坚定的认为手机组不是一个软件开发公司,是一个解决用户需求的公司。从这个角度上说,手机组的使命和百姓网一样。

百姓网提供了一个基础的数据,但手机需要站在这个数据的巨人的肩膀上再进一步。手机必须解决类目结构不合理,名字不好的问题;手机也要解决质量问题。手机完全可以自主的更改类目名的mapping,可以率先把中介信息不显示,可以做数据的任何处理,只要这是围绕着通过连接生活需求帮用户解决问题的主线就可以。我不仅同意,且支持手机组拿到数据后大跨步的往前走,在现在的百姓网的高度上,无论从功能,还是数据上有一个大的提升。

Mobile团队可能会因为百姓网好的地方而成功(比如大的数据量),也会因为现在的差的地方而失败(比如类目,质量等),我希望手机组可以拿出创业家精神,继续使用好的地方,剪断和坏的地方的联系,象黑客和海盗一样,不遵循规则,做自己需要做的事情。

对于和其他团队的合作,我希望把手机组和网站,质量等各组之间的关系看作几个开源项目之间的关系,互相依赖。如果可以方便的开一个bug,并且很快可以被修复,就让另外一个开源项目的人修复(最好的状态)。但如果不是另外一个项目的重心,但极大的影响了自己的使用,请按照开源项目的规矩办:把代码拿过来,自己改掉。自己动手丰衣足食是hacker文化的核心,在此基础上的协作才叫interdependant,而不是independent。

很快百姓网的数据就会开放,会有一些软件开发公司涌现,而Mobile团队不是软件开发公司。你们是一家为用户解决问题的公司,使用百姓网优秀的地方,大胆的反抗百姓网不好的地方。手机不仅应该,而且必须有不同的功能,更好的数据(mobile团队自己的数据),更好的用户体验。

我理出来一些付费需求

  1. Ding(类目,Tag,全省,全国)
  2. 价格(置顶竞价,配置配置)
  3. 端口(发帖限制,刷新次数,显示不同)(名字有房,车,招聘,服务)
  4. 刷新(5元一次)
  5. 跨城市发布(10元一条)
  6. 要按天的责权发生制记帐
  7. 送天数
  8. 退款
  9. 自动发票/合同
经销商系统需求
  1. 可以代付款
  2. 可以设指标
  3. 可以算业绩
  4. 可以自动分成

真的那么难吗?

百姓网Mobile的定位

在伟力展示手机组的数据的时候,我在想一个问题:如果这是家独立的移动互联网公司,他的估值是多少?

这个问题在整个review期间持续的萦绕在脑子里。我问的问题是:百姓网手机组到底在解决什么问题?

有两个可能的答案。

答案一:百姓网手机访问不方便的问题。
答案二:百姓找工作找房子买卖二手不方便的问题

这是两种完全不同的思路。

如果把手机组当做一个公司的话,解决第一个问题的公司是一家软件外包公司,是为了一个客户(比如说百姓网)而做手机客户端,WAP产品的一家软件公司,这家公司的最终客户是百姓网,这家公司的业绩是功能的完整度,软件质量等等指标。

但解决第二个问题,视野完全不同了。比如如果手机要解决的找工作的问题,这个问题的三个重要的子问题都需要解决:1)可以发可以看而且很顺畅 2)有足够多的人在这个市场里 3) 内容使用户要的,包括质量和信息组织(就是类目)。

我坚定的认为手机组不是一个软件开发公司,是一个解决用户需求的公司。从这个角度上说,手机组的使命和百姓网一样。

百姓网提供了一个基础的数据,但手机需要站在这个数据的巨人的肩膀上再进一步。手机必须解决类目结构不合理,名字不好的问题;手机也要解决质量问题。手机完全可以自主的更改类目名的mapping,可以率先把中介信息不显示,可以做数据的任何处理,只要这是围绕着通过连接生活需求帮用户解决问题的主线就可以。我不仅同意,且支持手机组拿到数据后大跨步的往前走,在现在的百姓网的高度上,无论从功能,还是数据上有一个大的提升。

Mobile团队可能会因为百姓网好的地方而成功(比如大的数据量),也会因为现在的差的地方而失败(比如类目,质量等),我希望手机组可以拿出创业家精神,继续使用好的地方,剪断和坏的地方的联系,象黑客和海盗一样,不遵循规则,做自己需要做的事情。

对于和其他团队的合作,我希望把手机组和网站,质量等各组之间的关系看作几个开源项目之间的关系,互相依赖。如果可以方便的开一个bug,并且很快可以被修复,就让另外一个开源项目的人修复(最好的状态)。但如果不是另外一个项目的重心,但极大的影响了自己的使用,请按照开源项目的规矩办:把代码拿过来,自己改掉。自己动手丰衣足食是hacker文化的核心,在此基础上的协作才叫interdependant,而不是independant。

很快百姓网的数据就会开放,会有一些软件开发公司涌现,而Mobile团队不是软件开发公司。你们是一家为用户解决问题的公司,使用百姓网优秀的地方,大胆的反抗百姓网不好的地方。手机不仅应该,而且必须有不同的功能,更好的数据(mobile团队自己的数据),更好的用户体验。