技术

facebook 的工程师文化

有人发表了How Facebook Ships Code,偶觉得其中关于Facebook的工程师驱动文化的部分特别有意思,于是翻译了一下(刚刚google之,网上也有其他翻译出来了,真是快手啊)..

* as of June 2010, the company has nearly 2000 employees, up from roughly 1100 employees 10 months ago. Nearly doubling staff in under a year!

截止2010年6月,fb有大概2000名员工,比之前的10个月,增加了将近1000名

* the two largest teams are Engineering and Ops, with roughly 400-500 team members each. Between the two they make up about 50% of the company.

最大的两个团队是工程团队,和运维团队,各有400-500名工程师

* product manager to engineer ratio is roughly 1-to-7 or 1-to-10

产品经理和工程师的比例大约是1:7到1:10之间

* all engineers go through 4 to 6 week “Boot Camp” training where they learn the Facebook system by fixing bugs and listening to lectures given by more senior/tenured engineers. estimate 10% of each boot camp’s trainee class don’t make it and are counseled out of the organization.

新入职的工程师大概会进行一个4-6周的BootCamp训练来熟悉fb,修补bug,以及学习来自资深工程师的训练课程;大概10%的新兵无法完成这个过程被劝退

* after boot camp, all engineers get access to live DB (comes with standard lecture about “with great power comes great responsibility” and a clear list of “fire-able offenses”, e.g., sharing private user data)

BootCamp后,所有的工程师就可以去访问生产系统(DB)了——这里有一个文化"给员工越多授权,他们的责任心越高"——以及一系列明确的不能去做的禁令,比如,公开用户私人信息

* [EDIT thx fryfrog] “There are also very good safe guards in place to prevent anyone at the company from doing the horrible sorts of things you can imagine people have the power to do being on the inside. If you have to “become” someone who is asking for support, this is logged along with a reason and closely reviewed. Straying here is not tolerated, period.”

* any engineer can modify any part of FB’s code base and check-in at-will

任何工程师可以修改FB代码库里的任何部分

* very engineering driven culture. ”product managers are essentially useless here.” is a quote from an engineer. engineers can modify specs mid-process, re-order work projects, and inject new feature ideas anytime.

极致的工程师文化——某工程师如此评价:"产品经理完全可以忽视鄙视无视"。流程执行到一半的时候工程师还能去修改规格,工程师有权利调整项目优先级,任何时刻插入自己新的idea

* during monthly cross-team meetings, the engineers are the ones who present progress reports. product marketing and product management attend these meetings, but if they are particularly outspoken, there is actually feedback to the leadership that “product spoke too much at the last meeting.” they really want engineers to publicly own products and be the main point of contact for the things they built.

在月度跨部门会议里,工程师负责做进度报告。产品营销和产品经理也会去参加这些会议,但如果他们particularly outspoken,领导层会得到这样的反馈"产品在上个会议讲的太多了"。这里期望工程师拥有产品并且成为他们项目的主角

* resourcing for projects is purely voluntary.
o a PM lobbies group of engineers, tries to get them excited about their ideas.
o Engineers decide which ones sound interesting to work on.
o Engineer talks to their manager, says “I’d like to work on these 5 things this week.”
o Engineering Manager mostly leaves engineers’ preferences alone, may sometimes ask that certain tasks get done first.
o Engineers handle entire feature themselves — front end javascript, backend database code, and everything in between. If they want help from a Designer (there are a limited staff of dedicated designers available), they need to get a Designer interested enough in their project to take it on. Same for Architect help. But in general, expectation is that engineers will handle everything they need themselves.
项目的资源完全来自工程师的自愿:
  • PM游说工程师们,试图吸引工程师为他们的想法而工作

  • 工程师自己决定去干哪个产品经理的活

  • 工程师然后去给他们的头儿报告:"我本周要干这么5件事情"

  • 工程师的头儿几乎可以说是放任手下各行其是,偶尔给点做事情优先级的忠告

  • 工程师自己处理所有的事情,从js到db的所有逻辑。如果他们期望得到设计师(FB里只有非常少的专职设计师)的帮助,他们需要自己去搞定设计师来加入他们的项目;如果需要架构师同样也得自己来搞定。但通常来说,工程师自己干所有的活

* arguments about whether or not a feature idea is worth doing or not generally get resolved by just spending a week implementing it and then testing it on a sample of users, e.g., 1% of Nevada users.

关于某个特性是否值得去做,基本上不花时间去争执。干一个星期的活,然后放给一小部分用户群(比如1%的内华达州用户)去测试来决定

* engineers generally want to work on infrastructure, scalability and “hard problems” — that’s where all the prestige is. can be hard to get engineers excited about working on front-end projects and user interfaces. this is the opposite of what you find in some consumer businesses where everyone wants to work on stuff that customers touch so you can point to a particular user experience and say “I built that.” At facebook, the back-end stuff like news feed algorithms, ad-targeting algorithms, memcache optimizations, etc. are the juicy projects that engineers want.

工程师一般来说都比较喜欢做做基础架构,高负载高并发,所谓"真正的技术难题"...等等涨声望值的东西。很难让一个工程师对用户界面修修补补而燃烧热情。在某些做consumer business的企业相反:每个人都希望做那些影响用户体验的事情这样他们就可以指着网页某处说:"介四俺做滴"。在FB,后端的工作比如newsfeed算法,广告精准投递算法,memcached优化,就是工程师最希望去做的事情(qyb:这一段不好翻译,谁能告诉我什么是 juicy project??)

* commits that affect certain high-priority features (e.g., news feed) get code reviewed before merge. News Feed is important enough that Zuckerberg reviews any changes to it, but that’s an exceptional case.
对那些高敏感度功能的代码提交,合并之前肯定要做codereview. News Feed 是最重要的部分,Zuckerberg 会亲自审查修改它的所有更改
* [CORRECTION -- thx epriest] “There is mandatory code review for all changes (i.e., by one or more engineers). I think the article is just saying that Zuck doesn’t look at every change personally.”

* [CORRECTION thx fryfrog] “All changes are reviewed by at least one person, and the system is easy for anyone else to look at and review your code even if you don’t invite them to. It would take intentionally malicious behavior to get un-reviewed code in.”

* no QA at all, zero. engineers responsible for testing, bug fixes, and post-launch maintenance of their own work. there are some unit-testing and integration-testing frameworks available, but only sporadically used.
FB没有QA,真的就是零个. 工程师负责测试,修补错误,发布后的维护。确实也有个单元测试集成测试框架,但很少被使用
* [CORRECTION thx fryfrog] “I would also add that we do have QA, just not an official QA group. Every employee at an office or connected via VPN is using a version of the site that includes all the changes that are next in line to go out. This version is updated frequently and is usually 1-12 hours ahead of what the world sees. All employees are strongly encouraged to report any bugs they see and these are very quickly actioned upon.”

"必须说FB是有QA的,只不过没有一个正式的QA团队。每个员工在内网使用系统的测试版本。版本经常升级,通常内部使用1-12个小时后就被发布到生产系统。强烈鼓励每个雇员去报告任何他们碰到的问题,这些问题也都飞快的得到响应"

* re: surprise at lack of QA or automated unit tests — “most engineers are capable of writing bug-free code. it’s just that they don’t have an incentive to do so at most companies. when there’s a QA department, it’s easy to just throw it over to them to find the errors.” [EDIT: please note that this was subjective opinion, I chose to include it in this post because of the stark contrast that this draws with standard development practice at other companies]
* [CORRECTION thx epriest] “We have automated testing, including “push-blocking” tests which must pass before the release goes out. We absolutely do not believe “most engineers are capable of writing bug-free code”, much less that this is a reasonable notion to base a business upon.”

"FB有自动测试,包括一旦出错就无法release的测试集合。我们完全不认同所谓'FB的绝大多数工程师有能力写出无错代码'这类提法",至少从商业风险的角度我们不会这么傲慢

* re: surprise at lack of PM influence/control — product managers have a lot of independence and freedom. The key to being influential is to have really good relationships with engineering managers. Need to be technical enough not to suggest stupid ideas. Aside from that, there’s no need to ask for any permission or pass any reviews when establishing roadmaps/backlogs. ”My product director doesn’t even really know all the things I have on my roadmap.” There are relatively few PMs, but they all feel like they have responsibility for a really important and personally-interesting area of the company.

re: 缺乏产品经理来影响/控制项目好像有点奇怪——但是产品经理有非常大的独立性和自由度。PM拥有影响力的关键是和工程经理搞好关系。产品经理需要有足够的技术头脑,别提傻想法,除了这点,产品经理制定其路线图的时候无需任何权限和额外许可。"我的产品主管并不完全了解我想做什么"。只有很少的产品经理,但所有PM们都很有责任心的去做那些真正重要,以及个人最感兴趣的部分。

* by default all code commits get packaged into weekly releases (tuesdays)

缺省所有的代码提交集成在一个周发布里(周二)

* with extra effort, changes can go out same day

通过额外的努力,提交也许可以被当天发布

* tuesday code releases require all engineers who committed code in that week’s release candidate to be on-site

周二的发布要求所有提交到候选版本里工程师都到场待命

* engineers must be present in a specific IRC channel for “roll call” before the release begins or else suffer a public “shaming”

在发布之前,工程师们必须在内部IRC里待命准备点名

* ops team runs code releases by gradually rolling code out
o facebook has around 60,000 servers
o there are 9 concentric levels for rolling out new code
o [CORRECTION thx epriest] “The nine push phases are not concentric. There are three concentric phases (p1 = internal release, p2 = small external release, p3 = full external release). The other six phases are auxiliary tiers like our internal tools, video upload hosts, etc.”
o the smallest level is only 6 servers
o e.g., new tuesday release is rolled out to 6 servers (level 1), ops team then observes those 6 servers and make sure that they are behaving correctly before rolling forward to the next level.
o if a release is causing any issues (e.g., throwing errors, etc.) then push is halted. the engineer who committed the offending changeset is paged to fix the problem. and then the release starts over again at level 1.
o so a release may go thru levels repeatedly: 1-2-3-fix. back to 1. 1-2-3-4-5-fix. back to 1. 1-2-3-4-5-6-7-8-9.
运维团队运行代码,逐步的将代码发布给所有人
  • FB有大概6w台服务器

  • 发布要分3个阶段:p1=内部发布、p2=小规模外部发布,p3=完全外部发布. 关于一些外围系统比如视频上载什么的被划到了另外6个发布阶段。一共是从p1到p9

  • 最小的发布级别只影响到6台服务器(qyb:我猜这意思是FB只要有6台服务器就可以运行所有的服务)

  • 周二发布就是p1,运维团队观察这6台服务器的运行情况,然后开始向下一个级别进行发布

  • 如果某个发布造成了错误. 整个进程就会中止. 提交相关代码的工程师会被叫过来修补代码,然后,再次从p1开始

* ops team is really well-trained, well-respected, and very business-aware. their server metrics go beyond the usual error logs, load & memory utilization stats — also include user behavior. E.g., if a new release changes the percentage of users who engage with Facebook features, the ops team will see that in their metrics and may stop a release for that reason so they can investigate.

运维团队非常。。。牛B闪闪。。。他们的控制面板上不仅仅有错误日志、系统负载、内存占用,他们还计算用户行为。如果某个发布后导致FB用户的某项行为特征的百分比也有所变化,控制面板上就会显示出来,然后他们就会中止发布,然后去寻找原因

* during the release process, ops team uses an IRC-based paging system that can ping individual engineers via Facebook, email, IRC, IM, and SMS if needed to get their attention. not responding to ops team results in public shaming.

在发布过程里,运维团队随时通过IRC去呼叫工程师。没有及时回应运维团队的开发者会被公开批判

* once code has rolled out to level 9 and is stable, then done with weekly push.

一旦发布完成了p9,本周发布就算结束了

* if a feature doesn’t get coded in time for a particular weekly push, it’s not that big a deal (unless there are hard external dependencies) — features will just generally get shipped whenever they’re completed.

* getting svn-blamed, publicly shamed, or slipping projects too often will result in an engineer getting fired. ”it’s a very high performance culture”. people that aren’t productive or aren’t super talented really stick out. Managers will literally take poor performers aside within 6 months of hiring and say “this just isn’t working out, you’re not a good culture fit”. this actually applies at every level of the company, even C-level and VP-level hires have been quickly dismissed if they aren’t super productive.

被svn-blamed(qyb:我猜测svn-blamed的意思是某人提交了一个特别弱智的bug,然后被svn blame命令检出这次提交的作者信息贴在内部邮件组里...也许FB定期公布这些工程师名单,被称之为svn-blamed),被公开批判的,项目常常延期。。。。这些过失都会导致被解雇。"这里有一个高绩效文化",不优秀的生产力不高的会被清除出去。新员工入职半年后如果表现不佳,就会被经理告知"这里不合适你". 甚至对于C级,vp级员工如果没有达到更高的预期也会被立即解雇.(qyb:看起来Mark之下只有4级,A/B/C/VP)

* [CORRECTION, thx epriest] “People do not get called out for introducing bugs. They only get called out if they ask for changes to go out with the release but aren’t around to support them in case something goes wrong (and haven’t found someone to cover for you).”
"如果只是写出了bug,工程师不会被公开点名。但要是发布出问题被要求支持的时候不在现场或者自己也没能找个替班的人,那就会被点名了"
* [CORRECTION, thx epriest] “Getting blamed will NOT get you fired. We are extremely forgiving in this respect, and most of the senior engineers have pushed at least one horrible thing, myself included. As far as I know, no one has ever been fired for making mistakes of this nature.”
"被svn-blamed的并不会被导致解雇。我们还是很宽大的。即使是资深开发工程师,大多数也避免不了被blamed,包括我。据我所知,没有人因为这种情况而被解雇"

* [CORRECTION, thx fryfrog] “I also don’t know of anyone who has been fired for making mistakes like are mentioned in the article. I know of people who have inadvertently taken down the site. They work hard to fix what ever caused the problem and everyone learns from it. The public shaming is far more effective than fear of being fired, in my opinion.”

Topic: 技术

工作状态

入睡前的好心情被老樊破坏了,打电话抱怨了一通技术不给力的现状。直接后果就是我3点多醒了后就没睡着觉,然后打开outlook和gmail把几份简历又看了一遍,想想该怎么去处理。

我有回很自嘲的对MarkWu说我现在就是一行政人员,被深深鄙视... 现在想起来真的是这样,拿军队作例子:

我同时有2-3场战役要打,还有几个局部地区的胶着战斗

手头兵力严重不足,要招募、训练好几十个人。不同军兵种、前线将领的不同性格......某一天能招到什么样的人几乎是随机的,还得一个个的想好把他们投放到那个战场上去,争取获得最大利益,而且别一跳伞就被消耗掉。每天都要把所有细节推演一遍

老樊一直想把几块局部战斗合并一个大的战役。这种思路是没错,就是为了规划和支援这个战役,要准备好多事情

其他几个区域随时有新情况发生,谁也不知道小溃败会不会引发连锁反应。刚刚还把一个同志空投到了福州去..

在总参总政总后总装干文职时间长了后,很难再回去带兵了

Topic: 技术

今天给一批新同学培训

最近部门里新进了不少即将毕业的大四学生,未来可能做编辑也可能是产品和运营。为了让这群菜鸟(基本上是文科生)以后可以和技术人员能有一个较好的交流基础,我列了10个题目来作培训,预计每个题目发展成一个2小时的课程:

  1. 计算机基础
  2. 网络基础和HTTP协议
  3. 网络运维
  4. 项目管理
  5. 软件测试以及SVN/JIRA使用
  6. 互联网存储
  7. WEB前端技术发展
  8. 开放平台和API
  9. 人工智能和个性推荐
  10. 无线互联网

头两个题目是我自己来准备的,今天讲第一节课。围绕着两个核心概念:缓存和并行;最后介绍了一下throughput/latency和concurrency的关系。

除了上课外,还聊了一下如何和程序员群体相处这个话题:

我:你们对程序员是一个什么印象?

答:宅...No Life...

我:首先,程序员的世界是0和1的世界,特别有规则,1+1一定等于2;程序员就是自己这个世界的主宰,创建一切。其次,程序员独立性很强,无需太多的紧密协作就可以创造出价值,在今天优秀的程序员养活自己弄份体面的工作是很轻松的,不用特意去讨好谁。和他们打交道的时候你们一定要记住这两点

问:程序员在哪些方面最容易和产品冲突

我:关于进度工期。程序员通常不愿意预估工期,主要是由于项目中未知的因素太多,使得准确预估特别困难;而且项目启动后,也有可能会变更需求,从而造成更多的不确定性。基本上那个deadline最后会成为一个政治目标,而非产品技术目标;在这种情况下意见不统一而产生的bug,会更容易引发冲突。

我:早期程序都是由程序员来决定用户界面的,程序员按照自己的思维方式来进行设计。你们必须要让程序员确认,你们有一套很完备的思路和模式,去研究分析用户的真正所需所想。要让程序员确认你们代表着用户利益来指出这里有问题,那个是bug。否则一定会冲突,估摸着怎么也得半年你们才能一起磨合出来。

问:程序是不是都有bug

我:hoho,看来你们不知道高爷爷和TeX的故事...(此处略去1000字)...总之,好程序员比一般人生产力高100倍是肯定的

问:怎么样识别好程序员呢?

我:你让两个人分别去盖个平房,刚刚盖好看起来都差不多;然后你让他们在这个房子基础上加盖三层,同时往下打个地下室和车库,分别立刻就出来了。

问:女生能做程序员吗?

我:当然能。主要的问题是从事这个行业的女性太少,在搜狐大概是1:5-1:7的样子,所以出类拔萃的女程序员也少。就我过去的经历,每遇到5-7个靠谱的男程序员,也能碰到1个靠谱的女程序员。要作一个优秀的程序员,肯定要克服很多很多困难,无论男女

Topic: 技术

关于垃圾账号注册

淘宝一位同学在博客里提到他们是如何用贝叶斯和垃圾小号斗争的,里面点了 sogou 邮箱的名。那好,我这里也谈谈邮箱的工作情况。

对于我们邮箱服务商来说,垃圾账号带来的主要危害是利用免费邮箱的资源(包括 smtp服务)向外界发送垃圾邮件,最后导致我们的外发IP被加入黑名单,从而影响正常用户的信件往来。

而淘宝的情况则是用户注册邮箱后,并没有利用邮箱去发送垃圾邮件,而是用它在淘宝或者什么地方去 spam。。。这种情况对我们邮箱用户的信件往来不会产生危害,在研发资源有限的情况下,我们更关注怎么去对付滥发的行为。。。

今年3月19日,我们在检查垃圾账号的时候,发现有一组注册账号就是什么都没有做,但是收到了来自支付宝(或者就是淘宝吧)的激活信件,当时我们判断可能要做钓鱼,于是就通知了支付宝。但是对方的响应不是很热烈,回信的大致意思是这种情况很常见,搜狐自己处理好了。。。我们感觉对方并没有想和我们邮件服务商一起来解决问题的意愿,于是那我们还是继续关注邮件滥发吧...

最后还是要说明一下我们的立场:我们非常非常在意垃圾账号注册这件事,不仅仅是邮件滥发,也尽力避免我们的邮件账号不会被用来做其它不好的用途;如果上下游能一起来做这个事情,效果我想会更好

另外,保罗.格拉汉姆的a plan for spam和better bayesian filtering是我2003年夏天找人把它翻译成的中文发布的.

Topic: 技术

O'RELILY Velocity 2010 纪要 a-z

Velocity 的资料下载在:http://velocity.oreilly.com.cn/index.php?func=slidesvideos

受了非人培训的感染,这次 velocity 会议,我给每个参会的同志都安排了作业——学习体会、行动计划等等;然后几份作业我主观打分,落后者和我一起AA请优胜者大餐

除了安排别人写作业,我也写写我自己的作业吧:

  • 网站速度是搜索引擎的 rank 指标

  • 淘宝采用了一台haproxy带两个squid的做法。。。当然这许多组(3x)服务器之前还有两个 lvs

  • 淘宝把系统分成了4个层次来优化:软件系统、服务器(web server、mysql、jvm)、kernel、hardware

  • 个人最喜欢 Java without OS 的想法

  • 北京电信访问北京联通比上海电信快

  • TTI 概念是 Facebook 提出来的么?Yahoo 的讲演里也用这个缩写:Time-to-Interact

  • BigPipe 概念其实挺简单的,我蛮想利用它对狐首做做优化

  • Pagecache 我觉得最难应用,对前后台工程的要求极高。(增量式更新、自动记录并回放、跨页面的服务器更新)

  • 前端工程师驱动Web平台技术更新是一个趋势,不过这对前端工程师提出了很高的要求。人人网的邵军辉今天在回答我的提问的时候自嘲其JavaScript比C++要强,我觉得这不是笑话,而是某种程度的真实。

  • YahooMail 也在用一个类 Bigpipe 技术,名叫 AjaxPipe,通道是 iframe,来生成首页的 Dashboard

  • Yahoo 提到 Pipeline-mode 有一个问题就是 SEO,针对爬虫必须有一个 single flush 的机制

  • Yahoo 更进一步发展出并行化的想法(single-flush -> pipeline -> parallel),当然现在还在襁褓阶段

  • 两个TFS看起来都很强大,我们要不要搞SFS呢?

  • 百姓网的虞冰不错,除了在上海,应该比淘宝和腾讯的人好挖

  • 把web性能和奖金挂钩,是一个好主意

  • 多个不同的讲演者多次强调,speed is a feature!!!

  • 要扩大 UED 团队规模,让工程师更专注在程序上——这条最佳实践来自YahooMail

  • Node.js + YUI3 + jsdom 开发服务器端应用。Yahoo这种思路某种程度上比 erlang 要靠谱,我现在真觉得这个工程上可行

  • Facebook的Web性能团队叫Pref SWAT,cool! 这个Web性能组应该是属于平台团队的,对应的是产品团队

  • passport module很适合做cookie monster。。。好吧,facebook需要这个是因为它只有一个产品www.facebook.com。。。但server-side cookie是好想法,server-side cookie is not session!!!

  • 产品团队用了多少平台团队提供的组件——这是衡量其代码质量的指标之一,Yeah!

  • Facebook有500名工程师;任何新人(真的是任何吗)都要进Bootcamp干6个星期的脏活。。。我也非常喜欢这个新兵营

  • 盛大的许世伟在阐述HTTP的stateless本质(虽然他一直在说存储层,或者说状态保持层),以及产品设计中API层的重要性

  • 把模板和碎片也应用版本管理(wiki的版本管理功能就足够)是个好想法;另外动态语言来写CMS貌似还是很有一定优越性的,尤其是PHP天生就是一个模板系统

  • 人人网用2台FastCGI顶替了40台Resin严重伤害了不少Java开发人员的感情,好多人质疑。。。我则关心人人网的C++程序员:Java程序员的比例是啥,邵军辉估算是1:5。。。其实蛮合理的,俺们需要下决心在C++程序员headcount上投资

  • 淘宝说它的基础监控除了cpu/mem之外还包括spinlock,这个真的把我震惊了;应用监控和业务监控不能仅仅指望TechNO,我们必须做得更多
Topic: 技术

NFS 不支持 O_APPEND

最近出了一系列故障,是 NFS 不支持 O_APPEND 而引起的,见 http://linux.die.net/man/2/open

即使是本地文件系统的append原子性,也有人提到还存在一个 PIPE_BUF 上限的问题 http://stackoverflow.com/questions/1154446/is-file-append-atomic-in-unix

随便一搜关于 NFS 就有好多抱怨:但看到约一年前的一个见解是:A perfect NFSv4 implemenation, configured properly, provides a very useful set of guarantees. However, the quality of NFSv4 implementations has been an issue. Especially, Linux's NFSv4 server implementation has historically had many flaws. Plus, people often mount NFS using the NFSv3 protocol instead of NFSv4, and/or reduce the safety guarantees with the goal of improving performance.

This is why almost everybody recommends NOT to use NFS to store anything critical. For example, SQLite's documentation states very clearly that you shouldn't store SQLite databases on NFS. And, this is why Oracle supports NFS (a) only with a list of specific NFS server implementations (mostly NetApp), and (b) using its own built in NFS client implementation (not the operating system's transparent NFS client).

Topic: 技术

研究了一下山寨Android平板的芯片

1. VIA的WM8505方案,就是国美那个999元平板,现在淘宝上卖500元左右。芯片是ARM9,WonderMedia 8505,宣传都是什么安卓 1.9.88 版,其实是 1.6 版的修改。另外都号称是 533MHz 的芯片,但很值得怀疑

2. 瑞芯微的RK2808方案。也是ARM9,但好像这个方案的DSP芯片可以做720P的视频播放,所以要比WM8505贵那么100-200。不过可能就因为贵,而且系统是 1.5 的,所以淘宝上这类寨机远不如WM8505的多

3. Telechips的TCC8902方案,淘宝上卖1000元左右。芯片是ARM11,800MHz,韩国公司。能跑Android 2.1,我觉得这玩意要是等明年降到500左右的价位,再升级到2.2 or 3.0,可用性就很高了.

一边写一边查资料,最后发现这么一个链接:Overview of Android Tablets on the Market, Classified by Chipsets,适合按图索骥的去google.

Topic: 技术

搜狐API之IP地址查询

因为要做天气预报这件事,发现搜狐好像没有一个实时的判断浏览器所在城市的方法——已有的都是把判断结果放在某定期失效的cookie里,这样可以减少服务器压力。

仔细一想就觉得这玩意其实对资源消耗没有那么大,于是就要求整一个实时的。。。。。然后就觉得该接口也可以给外部开发者调用:http://pv.sohu.com/cityjson

这个接口是给浏览器JS来调用的,缺省返回 gbk 编码的数据;如果你的应用是 UTF-8,加一个参数 http://pv.sohu.com/cityjson?ie=utf-8

目前这个接口只是搜狐在用,所以参数很简单,返回的那个 cid 还很魔幻;如果觉得这个接口确实有帮助,可以把需求发给俺们来继续改进之

未来也许搜狐会提供给互联网开发者更多的接口和服务。

BTW:写这篇blog之前突然想到,中国互联网应该有类似的接口了吧,一查之下果然 QQ 有一个 http://fw.qq.com/ipaddress,但好像不是官方支持,而且它只有 gbk,哇咔咔

Topic: 技术

被空降了...以及本周一些零星想法

上周三刚刚通过气,本周三,就被 KCN 正式空投到一个50多人的团队里去,然后在黑暗迷茫疑惑惶恐摸索中试探了三天的路...

记得去年第一次听到这个大部门名字的时候,我就暗乐:"媒体产品与媒体技术中心,据某法则说部门名字的长度和其官僚程度成正比,哈哈哈。。。" 看来人心不能太恶毒,这报应来得太快了

====================================

培养接班人是经理工作内容之一,越是高级的经理越应该这么作,应该列入 PM 考核里

搜狐技术人才的1-4级别 Title 是这样:
1级:助理工程师
2级:工程师
3级:高级工程师/助理主管
4级:资深工程师/主管

所谓"主管"已经是往管理路线上靠了,其实就是一线研发经理

如果有技术升迁路线,偶觉得分"工程"和"技术"接下来可以叫:
5级:专家/助理研究员
6级:高级专家/研究员
7级:架构师/高级研究员
8级:高级架构师/资深研究员
9级:大神

如果没有技术升迁路线,技术同志最终肯定会升到一个无法胜任的管理位置上;然后苟且偷生或背着骂声离开。成专家易,当经理难。

当然,高级别技术要能被低级经理,甚至非技术型经理指挥动才成,这个就看其职业精神了

深刻体会到矩阵管理和项目经理的必要性,不过很长时期内都无法这么动,连想都不能想

媒体技术,MT,好悲剧的缩写

频道垂直化/编辑运营化

团队的总体技术参照目标是Yahoo,hoho

总之这个坑好大,爬出来的难度我觉得和登珠峰差不多了;或许没那么难,但也得有7000多米吧。

Topic: 商业 技术
订阅 RSS - 技术 | BT的花