IT技术博客大学习 共学习 共进步

技术文章

精选技术长文、实践记录与系统化阅读

技术文章精选

低噪声、高可扫读;标题、摘要、来源、标签一目了然。

最新文章

采集自各技术站点的近期文章。

IT 系统架构/ 2012-01-29 20:20:37 / 累计浏览 2,891

漫谈DevOps

云和DevOps是最近非常火的两个名词,很多人都会思考它们到底是什么。“云”这个名词,相对比较模糊,也引发了不少疑问,诸如“云到底是什么?”、“如果云真的意味着在云中,那为什么又会有私有云的概念?”。而“DevOps”,则更让人迷惑,对于这个名词,不同的人会有不同的理解和认识。针对DevOps,至少有三种不同的定义,我会一一列举出来,以便大家重新完善自己的理解。为了达到这

IT 源码分析/ 2012-01-29 20:20:00 / 累计浏览 3,549

libevent源码浅析: 定时器和信号

这篇文章将讲讲libevent对定时器和信号事件的处理. Timer事件 反应堆event_base包含了一个最小堆min_heap结构体的实例,以此维护注册到这个反应堆实例的定时器事件: struct event_base { //其他成员 struct min_heap timeheap; }; 回顾一下最小堆min_heap: typedef struct min_heap { //p指向一个动态分配的数组,数组元素是event指针. struct event** p; unsigned n, a; // n表示目前保存了多少元素,a表示p指向的内存能够存储event指针的个数 } min_heap_t; 可以看到,它包含一个连续的内存块用于存储定时器事件.针对min_heap的操作主要有: static inline int mi

IT 奋斗/ 2012-01-29 20:19:09 / 累计浏览 3,408

我的大学

这是一篇很诚实很man show但却毫无营养的自述文,慎入. 也许很少有高中同学知道,尽管成绩一向不错,但实际上我对数学充满了厌恶.高中3年机械式的训练,让我实在无法忍受,于是高考填报志愿时选了一个文科的方向,自以为从此天高云厚,憧憬着大学生活的我完全没有意识到此后的命运弄人带来的打击会有多大. 一分之差被选择了计算机专业,大学的傻逼生涯就此埋下了伏笔.整个大一都是在迷茫中度过,对于在大学第一学期,本应是最有干劲的新生来说,高等代数62分和数学分析60分已经足以说明了我的自暴自弃,虽然如此,此后的我居然一直没在数学之上挂科,这是很难想象的,唯一可能的答案也许是尚有一点点不甘吧.维系着成绩上的苟延残喘之余,所有的郁闷都被我发泄在读书上,我阅读了各种名人的传记,从曹操到希特勒,从艾森豪威尔到巴顿,从切格瓦拉到卡斯特罗,原来,所有人都在自己的方向一步步的努力,这个发现便是大一最大的收获了. 让人

IT 网络系统/ 2012-01-29 20:18:37 / 累计浏览 3,530

初探Linux网络协议栈

译者注: 原文写于2003年,文中描述的不少内容已经发生了改变,在不影响愿意的情况下,我擅自增删了一些内容. 翻译过程中找到的好资料: How SKBs Work Evaluation of TCP retransmission delays Congestion Control in Linux TCP Anatomy of the Linux networking stack — From sockets to device drivers Guide to IP Layer Network Administration with Linux Linux内核源码剖析 —TCP/IP实现 Understand Linu

IT 算法/ 2012-01-29 20:18:00 / 累计浏览 3,931

Fibonacci数列性质的组合证明

    数列 1, 1, 2, 3, 5, 8, 13, 21, 34, … 叫做 Fibonacci 数列。这个数列有很多神奇的性质,其中一个性质是,每一个 Fibonacci 数的平方与它前后两个 Fibonacci 数的乘积相比一定正好相差 1 。具体地说,如果把第 n 个 Fibonacci 数记做 Fn ,那么有:       Fn+1 · Fn+1 - Fn · Fn+2 = (-1)n     今天看到了这个定理的一个组合数学证明,觉得非常有意思,在这里和大家分享。     Fibonacci 数有很多组合数学上的意义。比如说,用 1 × 1 和 1 × 2 的积木覆盖一个 1 × n 的棋盘,总

IT Linux/ 2012-01-29 20:12:40 / 累计浏览 10,638

vim入门,进阶与折腾

作为编辑器之神,vim一直是我编辑文本的不二选择,哪怕其坎坷的学习曲线让人头疼不已.末学总结一下经验教训,以作备忘.

IT 其他/ 2012-01-27 19:01:53 / 累计浏览 5,611

chrome扩展应用开发教程之开发chrome应用基础

不得不说chrome做的真的不错,听了貘大大关于chrome插件机制的讲座,就有亲手做个chrome应用的冲动,这个周末终于抽时间做了一个简单的天气预报插件,原理还是很简单的,采用了weather.com.cn的数据,因为比较熟悉这个weather.com.cn的接口,所以很快就搞定一个简单的chrome天气预报应用了。废话不多说了,开始正文。本教程会step by step的讲解我周末的做天气预报插件,教程包括三篇文章《开发chrome应用基础》《应用开发》《调试和打包上线》,通过实例讲解,希望对大家开发chrome插件有所帮助。本文只是介绍了chrome应用开发的冰山一角,更多的chrome应用开发技巧还是要自己动手查看下google的文档。 chrome应用开发基础知识 chrome扩展应用是由html、css和javascript组成的,所以chrome应用的门槛比较低,对于一个

IT 算法/ 2012-01-27 19:00:17 / 累计浏览 2,309

游戏数值策划

这篇很淡疼的文章来源于我在微博上的争论。需要列数据,字数限制不合适,所以单列一篇了。 昨天翻出了元帅同学的一篇旧文,游戏数值设计(1):定义与目标 , 转发到微博上。我一向是喜欢看他吐槽的,这篇吐国内的 MMORPG 游戏策划分工的文章,深得我心。 我一直对国内 MMORPG 制作把设计人员分为 文案策划、系统策划、数值策划不以为然。文案拆分出去做倒还说得过去,这所谓系统策划和数值策划的拆分简直就是莫名其妙了。现代电子游戏从桌面游戏一路发展过来,怎样让玩家享受规则,一直是一个整体。如果一个人来设计一个游戏,那么脑子里必然要逐步形成这个游戏做出来是什么样子的,然后细化里面的细节,玩家在他设计的规则下怎么进行游戏。所谓数值设计,是这些细节里重要的一部分。 很难想像,一个设计人员来想游戏的玩法,然后说细节我不管了,有另一个人来负责就好了。然后再有一个人专心于填写 excel 表格,用加加减

IT JavaScript/ 2012-01-27 18:59:47 / 累计浏览 11,192

JSONP与POST方式请求

JSONP是一种非官方协议,可以解决AJAX跨域提交数据情况。 安全部门的同事测试发现,都是GET的请求,相比较而言不如POST安全,还是尽量改了吧。 拖啊拖,终于还有别的业务要这个接口,想了想还是改了吧,反正听人劝吃饱饭嘛 。但是,JSONP真的支持POST提交吗? 先是一天夜里加班无聊,做了一下POST,发现请求发送过去的METHOD为OPTIONS,而不是POST,同时没有得到返回结果。 今天下午抽时间,特意处理一下这个事情。事实证明OPTIONS的状态可能是我拼错东西了,反正今天没有重现。不过当我把数据改为POST后,我发现COOKIE已经生成了,证明我数据提交过去了。但是content里没有返回值,Firebug看不到,但是Fiddler可以看到。 POST提交,firebug之所以看不到的原因是,我的执行跨域了。我执行的域名为localhost,而提交请求的域

IT PHP/ 2012-01-27 18:58:44 / 累计浏览 4,677

深入PHP使用技巧之变量

众所周知,PHP与其他脚本语言一样,属于弱变量类型的语言。同时PHP本身也是通过C语言来实现。本文主要介绍PHP内部是如何实现弱变量类型的,并且据此分析在PHP开发中需要注意的一些使用技术。其中会重点分析PHP中的copy on write机制和引用相关方面的话题。 本章节属于《深入PHP使用技巧》的第一部分。 如何实现弱变量在了解PHP实现弱变量类型之前,可以先思考下:如何通过C/C++来实现弱变量类型的效果呢?

IT 信息和交互/ 2012-01-27 18:57:53 / 累计浏览 2,813

如何设计“找回用户帐号”功能

因为《腾讯帐号申诉的用户体验》一文中好多人觉得腾讯申诉是世界级先进的,并让我拿出一个找回用户的帐号的功能来。本来不想写的,因为大家看看其它系统的就行的,但是,很明显有些人就是很懒,也不会思考,而且不会观察,所以,我就只好写下这篇科普性常识性的文章。 在行文之前,我得先感谢腾讯公司的至少30名员工在《腾讯帐号申诉的用户体验》一文后的回帖(我STFG(Search The Fucking Google)看到了你们使用的那个固定IP在各个大学论坛上的腾讯的招聘广告),我感谢你们主要有两点: 你们有半数以上的人留下的是gmail而不是QQMail/Foxmail的电子邮件,这点让我感到很欣慰。 你们在加班到晚上11点的时候都能在本站回复,的确如你们的Andy Pan所说,你们的核心竞争力很强,包括水军方面。 好了,让我正式谈谈这个设计。

IT 用户研究/ 2012-01-27 18:56:36 / 累计浏览 2,191

腾讯帐号申诉的用户体验

前面写过一篇“腾讯,竞争力 和 用户体验”批评了腾讯,于是在我的微博上和博客上收到了一些反对意见,基本上是说腾讯产品的用户体验做得很好,很方便,等等,还列举了N多的例子,以及说过什么用户数量为王的言论,让我感到我应该写一篇博客。当然,如果我们只看某个技术层面的东西的话,我同意,QQ的一些产品还是很易用的。但是我们还是要看得更深一些。Effective C++的作者Scott Meyers 在《More Effective C++》中说过――“美丽的是肤浅的表现”。 我借用一下这句话,认为QQ是好的产品的观点是肤浅的认识。 网上有大量的文章说QQ扫描硬盘啊,说QQ收集用户信息啊,你可能忘了这些。前段时间的3Q大战的那个“艰难的决定”,你好像也忘了。还有狗日的腾讯,你也忘了。包括QQ可以预防犯罪的新闻,你可能也忘(这本就是一个容易忘事的民族)。你已经被QQ的用户体验迷住你的双眼,觉得QQ无

IT 算法/ 2012-01-27 18:55:32 / 累计浏览 3,592

Protocol Buffers for C

我一直不太满意 google protocol buffers 的默认设计。为每个 message type 生成一大坨 C++ 代码让我很难受。而且官方没有提供 C 版本,第三方的 C 版本 也不让我满意。 这种设计很难让人做动态语言的 binding ,而大多数动态语言往往又没有强类型检查,采用生成代码的方式并没有特别的好处,反而有很大的性能损失(和通常做一个 bingding 库的方式比较)。比如官方的 Python 库,完全可以在运行时,根据协议,把那些函数生成出来,而不必用离线的工具生成代码。 去年的时候我曾经写过一个 lua 版本的库 。为了独立于官方版本,我甚至还用 lpeg 写了一个 .proto 文件的解析器。用了大约不到 100 行 lua 代码就可以解析出 .proto 文件内的协议内容。可以让 lua 库直接加载文本的协议描述文件。(这个东西这次帮了我大忙)

IT 系统架构/ 2012-01-27 18:55:04 / 累计浏览 2,610

我的一些“偏见”

在豆瓣发了一些牢骚,索性多说一些我个人对人对事的偏见,既然是偏见,就不会让人舒服,事先声明是扯淡,不想浪费时间的人略过。1.我们要远离新浪微博,新浪微博跟twitter不一样,twitter是为了让每个人的信息的更好更快地传播而设计的,而新浪微博是为了让权威的声音更好更快地传播而设计的。迷恋上新浪微博,你要么是权威,要么是跟随权威。成为权威的,免不了沾沾自喜,真以为自己成了“权威”。更可怕的是你不可避免地要生活在相互吹捧和喧嚣中。2.在编写代码之外,我们可能需要更多的手艺傍身,例如木匠或者厨师,以免在乱世的时候因为不需要程序员而饿死。ps.计算弹道轨迹的程序员除外。3.据说真正的牛人从不跳槽,作为大多数不是牛人,以及已经远离牛人行列的我们(跳槽超过3次以上),跳槽仍然是你提升自己的有效途径,无论是薪水还是技术。4.写简历的技巧,我慢慢领悟到了,少点技术术语,多点

IT 算法/ 2012-01-27 18:52:51 / 累计浏览 2,470

2011年度最变态的迷宫难题

    下面大家将会看到的是一个极其简单而又极其复杂的“迷宫”,这无疑是我在本年度见到的最变态的谜题:从左边入口处的 2011 进去,在迷宫里转悠,最后变成 2012 从右边出来。你可以在迷宫里转圈,可以重复之前走过的路,但不能往回退着走。            你能成功走出来吗?

IT 其他/ 2012-01-27 18:52:22 / 累计浏览 2,185

使用Python来检查统计代码是否布置到位

在给网站布置统计代码后,往往需要检查开发人员布置的代码是否到位,采用人力的方式去检查很费时间,于是自己整了一个Python自动检查代码的小程序,现拿出来分享下。: pa

IT JavaScript/ 2012-01-27 18:51:38 / 累计浏览 2,390

像php一样奔跑的js代码

模块化开发的过程中,有时会遇到频繁改动footer.html或者频繁打包的操作。 具体场景如下: footer.html引入了一个all.js文件 all.js是很多个模块的js文件打包后生成的结果,打包之前它没有内容 每次预览,需要进行一次打包,生成all.js,或者修改footer.html更改引入的js文件 解决方案除了修改打包工具之外,还可以在本地环境中进行设置,让自己的all.js文件支持php的代码,从而方便的遍历文件目录,直接引入所有的js进来。

IT 系统架构/ 2012-01-27 18:50:14 / 累计浏览 3,195

Redis高可用性之Failover过渡方案

从Redis官方路线图来看,估计会在Redis3.0左右正式支持Cluster。不过即便是乐观的估计,至少也得等上个把月的时间,为了让我的应用在这段时间内能保持高可用性,我以主从服务器为基础实现了一个Failover过渡方案。 从理论上解释,一旦主服务器下线,可以在从服务器里挑选出新的主服务器,同时重新设置主从关系,并且当下线服务器重新上线后能自动加入到主从关系中去,内容如下:

IT 系统架构/ 2012-01-27 18:49:29 / 累计浏览 6,622

使用nginx记日志

使用nginx记日志 做web服务和应用的时候,很多场景下需要记录日志。 如 访问日志,性能分析日志,打点日志,数据统计日志等。

IT 算法/ 2012-01-27 18:48:06 / 累计浏览 1,707

基于主特征空间相似度计算的切分算法及切分框架

摘要: 本文从切分的需求、作用、难点等方面谈起,介绍分析了目前主流的各种切分方法以及其优缺点,并介绍了一个新型的无监督切分方法,并在此基础上对切分在工程需求上进行了相应的分析和讨论,在最后在此算法基础上给出一个融合各种优点的切分框架。关键词: 中文分词, Query Segmentation,无监督技术领域: 自然语言处理 我们为什么要切分?说到切分(segmentation),大多数人最容易想到的就是中文分词。作为没有天然空格区分的语言,切词可以帮助计算机去索引文章,从而便于信息检索等方面。该部分主要用到了分词的一个方面:降低搜索引擎的性能消耗。我们常用的汉字有5000多个,常用词组是几十万个。在倒排索引中,如果用每个字做索引的话,那么会造成每个字对应的拉链非常长。所以我们一般会用词组来代替单个汉字建立索引。除此,切词更重要的一个功能是帮助计算机理解文字,在这个层次上,切词是不分