当前位置

技术

技术

今天给一批新同学培训

最近部门里新进了不少即将毕业的大四学生,未来可能做编辑也可能是产品和运营。为了让这群菜鸟(基本上是文科生)以后可以和技术人员能有一个较好的交流基础,我列了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: 

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: 

关于"运营"

"运营"是一个让人迷惑的概念,在我的环境里,每当有人提起这个词,我都要联系一下上下文,才知道指的到底是啥?

1. 网络和系统运营。其实"运维"是一个挺好的缩写了,运行维护,简单明了。说运营也不是不可以,但是前面最好还是加上 Network or System,否则很容易和下面的概念混淆。

2. 产品运营。大多数情况下,我们说运营就是这个意思。所谓“好产品是运营出来的”。类似的句式比如“新闻最终页是印刷出来的”,从印刷到运营,中间隔着好大一个坑,很多人会倒在里面。

3. 业务运营。Chief Operating Officer,最后从 Wikipedia 上摘点东西出来:...development, design, operation, and improvement of the systems that create and deliver the firm's products/services...ensuring that business operations are efficient and effective and that proper management of resources, distribution of goods and services to customers, and analysis of queue systems is done.

好吧,从上面的概念来看,任何系统性的工作都可以称之为"运营"了,不管称呼是什么,科学&发展是真理。

Topic: 

一个Captcha的思路

Captcha——或者很山寨的说——图形验证码,是一个让人又爱又恨的技术。一方面它给正常用户增加了额外的负担,降低可用性;另一方面没有它,你一定迟早碰到 spam 的问题。

我想大家都在致力于提高 Captcha 的可用性,即设计出"人"可以轻松识别,但是对机器(ANN/SVM)却很困难的技术。每当看到Google那样扭曲到变态的图标,正常用户都会感到愤怒。

我以前看到一个比较有意思的方法是,让用户把一副图片旋转成正确的角度:比如一个凳子的图片,人类很轻松就知道应该四脚朝下,椅背方向朝上;但机器恐怕比较难做到这点。

后来有一天我想到一个主意。人类的眼球有一个特性,就是只要切换速度足够快,那么可以感觉到一幅幅静止的图片动起来;甚至类似隔行扫描(A场、B场)那种技术,人类神经可以自动把一幅幅残缺的图片拼凑成整张。电视正是这么干的:

我的想法是借助动态gif,每一帧都有大量噪点(电视这个例子上是每一帧都有50%的噪点?),但噪点位置帧和帧之间都不一致,组合起来后或许能被人类自动忽略,而关注在我们希望展示的内容上。因此还特意研究了一下动态gif的技术(http://www.dup2.org/node/1250)。但最后没有得到一个好结果,就中止研究了。不过有了这样一个结论:一定要让背景(内容)和前景(噪声)同时运动,否则识别难度没有本质提高。

本来这个属于失败的研究,不打算blog的,可是看到了一个新出来的 Captcha 服务:NuCaptcha,也是同时有动态背景和动态前景。那么这个思路可能还是值得分享一下

Topic: 

关于诺基亚的自问自答

Q: 为什么诺基亚要自己建立平台,从设备生产,到操作系统以及云服务,还有商店?
A: 因为这是价值链的最高端,而且诺基亚有足够的实力去完成目标。想想不仅仅是微软,连三星都要搞 bada;诺基亚还没有潦倒到MOT那样只能靠Android翻身的状态。

Q: 为什么是 MeeGo?
A: 我觉得是这样的,苹果主动扩大战火——把它的 iOS 扩展到 iPad,甚至是 iMac 上来,未来说不定还有 iBook。Symbian 或许在电话上足够优秀,但在新领域肯定不靠谱,还是得 Linux。所以先是 N900/Maemo,然后是和英特尔合作搞个也能通吃 x86 的 MeeGo。(惠普收购 WebOS 也许想的是同样的事)

Q: 为什么搞 MeeGo 和 Symbian 两个平台?
A: 何止是两个,还有 S40/S30。和苹果的目标是生产完美手机不同,诺基亚的目标是为所有人生产手机。现在很明显了,N系/MeeGo 定位是 iPhone/iOS 的竞争者;Symbian 面向 global mass market。另外,微软也同时维持 WP7 和 WM6.5

Q: 为什么 N8 仍然在用 ARM11,而不是 Cortex-A8 处理器?
A: 答案见上,Symbian 的定位如此,接下来会有其他更低端的 Symbian^3 设备问世,其对手包括中兴华为最近的千元Android等;N8现在是树立一个样板,以后的机型开发应该都在N8方案的基础上做,好比5800之于S60v5。2009 年就发布的 N900 反而有一颗 A8 的芯,那个才是旗舰机型的模样。

Q: 为什么是 QT?
A: 这是为了简化开发者在两个平台之间移植应用的难度。QT 和 WRT 是诺基亚双平台战略的基石

总之,诺基亚在下一盘很大的棋(Apple/Google/MS都是如此),同时开发Symbian^3,Symbian^4,MeeGo三个系统。祝它好运

最后再转一个从别处看来的FAQ:

- Will the N8 be able to run all the apps and games that are already made for S60 5th?

YES! Symbian^3 is backwards compatible while also having the new native Qt system integrated into the OS. So, essentially you can say the Symbian^3 is a hybrid since it has both the S60/Avkon system AS WELL AS the new Qt system.

- Will the N8 be able to run all the Java apps written for S60 5th J2ME?

YES! It will run just fine, and probably a lot faster than on S60 5th devices.

- Will apps written in Qt for the N8 / Symbian^3 run on future Symbian^4 devices?

YES! That's one of cardinal ideas behind Qt, the aim is to throw out S60/Avkon in Symbian^4.

- Will Qt apps also run on older S60 5th devices?

YES! With an automatic download of the Qt libraries through a smart installer, this will work also. The user shouldn't notice anything.

- Will developers writing Qt apps for the N8 be able to publish them for Maemo/Meego devices?

YES! The Qt SDK supports building the SAME source-code for both platforms. Qt works in exactly the same way across Maemo/Meego, Symbian^3 and Symbian^4. Even games written in Qt and OpenGL ES can be build and hence work on those platforms.

- Will Symbian^4 be able to run old native S60 apps?

No, it will not. That's why Symbian^3 is first - to bridge the app support going from the old systems to the new unified Qt system.

Topic: 
订阅 RSS - 技术