Yupoo(又拍网)的系统架构
Yupoo的服务器端开发语言主要是PHP和Python,其中PHP用于编写Web逻辑(通过HTTP和用户直接打交道), 而Python则主要用于开发内部服务和后台任务。在客户端则使用了大量基于MooTools框架的Javascript。 另外,Yupoo把图片处理过程从PHP进程里独立出来变成一个服务。这个服务基于nginx,作为nginx的一个模块开放REST API。
精选技术长文、实践记录与系统化阅读
低噪声、高可扫读;标题、摘要、来源、标签一目了然。
采集自各技术站点的近期文章。
Yupoo的服务器端开发语言主要是PHP和Python,其中PHP用于编写Web逻辑(通过HTTP和用户直接打交道), 而Python则主要用于开发内部服务和后台任务。在客户端则使用了大量基于MooTools框架的Javascript。 另外,Yupoo把图片处理过程从PHP进程里独立出来变成一个服务。这个服务基于nginx,作为nginx的一个模块开放REST API。
Java的易于上手,并不表明新手们就能把它用得很好。例如,对于与数据库打交道,没有对数据库的基础知识那也是不行的,对于Java来说,很大一部分就在于如何使用JDBC开发出高性能的数据库Java应用程序。这里当然可以推而广之,对于其它的编程语言,这一问题也广泛存在,如如何使用OCI开发高性能的数据库C应用程序,Pro*C应用程序,PHP应用程序。
在设计产品的过程中,产品经理和设计师的职责之一,是有效的向用户传递信息。在互联网产品中,操作引导、结果反馈、界面呈现的元素、大小、颜色等,都可以看作是信息的传递。 高效准确的信息传递,是良好用户体验的基础。本文总结了几种简单的进行有效信息传递的原则。
上一节我们介绍了一些背景知识以及gensim , 相信很多同学已经尝试过了。这一节将从gensim最基本的安装讲起,然后举一个非常简单的例子用以说明如何使用gensim,下一节再介绍其在课程图谱上的应用。
通过一些调研和之前的一些工作经验,最终考虑采用Topic model来解决这个问题,其实方案很简单,就是将两个公开课的文本内容映射到topic的维度,然后再计算其相似度。然后的然后就通过google发现了gensim这个强大的Python工具包,它的简介只有一句话:topic modelling for humans, 用过之后,只能由衷的说一句:感谢上帝,感谢Google,感谢开源!
我见到很多人有一些需求。就是想给自己的程序加密。比如商业程序和一些记录着关键信息的程序。这样让自己的源代码不可读,但又不想对程序的性能靠成什么大的影响。 当然在 Perl 中也有一堆的方法来实现这个功能。因为我写的跳板程序直接给 Key 写到程序本身,所以我不希望别人能见到我的 SSH 的 Key 。所以我对整个程序进行一定程度上的加密是很有必要的。在 PHP 中有一个很出名的东西叫 Zend,给整个程序加密成不可见的,我们现在自己来实现一个简化的 Zend。在 Perl 中我们有各种好用的模块帮我们实现这种功能。我现在给大家来介绍一个使用 Filter 模块来实现的这个源代码加密功能。
一个想当老的话题,一般不是用户主动触发的弹窗和新窗口打开页面,现代浏览器就会将他们拦截。 但是在我们产品设计和开发的时候总是会碰到这些状况,比如和第三方网站合作的时候,需要新窗口打开页面,传递一些相关的数据,用户数据还要在这里验证,用户在第三方网站任务完成后,还要在我们的产品上继续用户的任务流程,所有似乎弹窗和新窗口打开第三方网站似乎是一个很好的选择,但是在我们产品,用户流程和程序设计不合理的时候,弹窗被拦截了。
有些网站主会模拟用户的行为触发click事件? 如果这个事件是jQuery模拟的,那么可以通过检测event.originalEvent是否存在来实现。 但是网站主完全可以通过createEvent()模拟一个Event,使它更像是真实的。 到这里我们发现,通过我们自己的Javascript已经不可能检测事件的真实性了,只有等浏览器出手。查了stackOverflow之后发现,浏览器还真的出手了。
业务流程图重要的是描述谁在什么条件下做了什么事。 而页面流程图是具体到了网站、系统、产品功能设计的时候,表现页面之前的流转关系——用户通过什么操作进了什么页面及后续的操作及页面。 从需求到到解决方案无疑要经过很多阶段。需求的分析——用户是谁?用户的问题或需求是什么?用什么功能去满足需求或解决问题?这些功能的优先级是什么?这些问题都需要逐步得以明确,与此同时,你需要用一些线框图、原型或者DEMO(这些在我认为都是一个东西)去帮助自己精细化这些功能,想透彻那些需求。
就我的个人习惯来说,不管开发什么项目,即使是一个很简单的demo,我做的第一件事就是引入jQuery,这样做主要是想使用它提供的DOM选择器功能。对于一些像IE6/IE7这样的老式浏览器,这种做法是显而易见的,但是,如今现代浏览器里已经内置了完整的DOM选择器功能,能让你使用原生的浏览器提供的方法来实现jQuery的功能。
javascript中,变量和对象属性关系非常微妙,甚至可以很多时候会被等同起来,因为 javascript 在执行脚本之前会创建一个Global对象,在浏览器中就是window对象,所有的全局变量都是这个Global对象的属性,执行函数时也会创建一个Activation对象,所有的局部变量都是这个Activation对象的属性。这些可以大家可以去了解一下javascript作用域和闭包。
使用手指大小的可触目标在平板电脑上的应用比移动设备要容易得多,因为平板有更大的屏幕空间。你可以自由地使用这些尺寸,而不必恐惧这些尺寸是否占据了太多空间。然而,移动设备屏幕的局限性,手指大小能触及的目标目标是最需要去考虑的。设计师面临的挑战就是如何定义出最常用的适用于移动设备的可触面积大小。或许,较少的可触目标是一个合理的解决方案,但这个方案的前提一定是需要设计师精简导航内容。
关系数据库的不足: a. 不能很好的为Web 2.0的业务做建模(搜索与社交图谱), b. 无法在数据库层面很好的与JSON等做数据交换, c. SQL语言与编程语言的差异带来的开发学习使用成本, d.是否开源,代码能否改动, f. 关系数据库的优化器、解析器代价太大,影响响应时间、吞吐量, g.不能很好的满足业务对Scalability以及低成本服务器的需求, h.在Scale out的情况下的管理复杂度, i. 不能方便的调整业务的ACID需求,主要为Relax Consistency与Relax Durability的需求。
原谅我以一个这样的题目吸引你来读这篇严肃的文章,这事确实与宽衣解带相关,但更是与我们最关心的人相关,而且他们的需要我们天天在喊却仍然落空。暂且把这群我们关心的人称为老友记。
fatcache是twitter开源的缓存服务, 可以认为是SSD版的memcache(索引还是在内存). 本文简单分析下, 做个备忘。代码虽然很短, 还是能学到一点知识, 尤其是随机写转为顺序写的思路. 最牛逼的是对删除请求, 只删索引不改数据的机制真是简单高效.
我们知道,在html的页面中,所有空格和换行符其实都会占据一定的空间,即使使用了gzip压缩,在传输过程中依然会浪费用户的流量和我们自己服务器的带宽,此脚本就是为了解决这个问题而诞生的。
从存储的角度来说, 拉模式一定会节省资源, 因为消息都是一个源, 而接收者可能有多个, 如果收件箱和发件箱同时存在, 则所有的收件箱大小应该等于发件箱乘上单条消息的平均接受人数, 按一般理论上 SNS 平均好友数量是 150~200 的规模算, 拉模式比推模式节省 150~200 倍的存储空间, 另外考虑到好友更多的用户活跃度更高, 因而这个数字会更大, 再者人人网存在公共主页和小站小组等超大规模接收者的实体, 微博只限制单个用户收听其他人的数量而不限制单个用户被多少人收听, 所以这个差异还会更大。
项目经理也是公司的稀缺资源。由于公司的项目技术性比较强,需要既懂得IT技术又具备项目管理技能的人才,因此鼓励技术人员转型做项目经理。小M觉得自己符合项目经理的要求,但是,做一名项目经理是个严肃的职业选择,在进入亮丽的光环之前,首先需要弄清楚,项目经理是干什么的?
Objective-C 和 C++ 同样从兼容 C 语言开始,以给 C 语言增加面向对象为初衷,他们的出现的时间都很类似(1983 年左右)。但面向对象编程的源头却不同:C++ 受 Simula 和 Ada 的影响比较多,而 Objective-C 的相关思想源至 Smalltalk ,最终的结果是他们在对象模型上有不小的差异。
因为递推式求解的重要性,许多算法书籍对其有专门介绍。Donald Knuth在Concrete Mathematics一书中多个章节都涉及递推式求解方法。算法导论也在第四章中专门论述的这个主题。 在这些相关论述中,主要介绍了一些启发式方法,这些方法往往需要一些特殊的技巧和灵感才能完成。 而本文将论述一种纯代数式的方法,这种方法将求解递推式转化为求解一个多项式的根和求解一组线性方程组,这样就使得整个求解过程不依赖于太多技巧,因此具有更好的易用性。