每一个可以努力的日子,都是一份厚礼。
编程
Code is Poetry.
curl_exec和wget执行太慢,IPv6惹的祸
2012 6月 18th
今天在使用 php 的 curl 函数时,发现需要等待大概 5 秒才能得到结果,实在是太慢了。而同样一个 url 使用浏览器访问,则立刻可以获得页面。后来又发现,即使不用 php,使用 Linux 下的原生命令 wget 去获取网页,也很慢。这真是太奇怪了,看上去不是程序的原因,而是网络设置的问题了。
Microsoft AJAX Translation WordPress Plugin
2012 3月 2nd
The Microsoft AJAX Translation WordPress plugin offers a “Translate” button that allows readers to translate your blog’s posts into a specified language with a quick, light ajax call to the Microsoft Translator API.
Why Microsoft AJAX Translation?
As of December 1, 2011, Google Translate API v1 is no longer available; it was officially deprecated due to the substantial economic burden. Google Translate API v2 is now available as a paid service only, and the number of requests your application can make per day is limited.
This is dramatic news. All of those “free” programs that hitchhiked on Google Translate are history. A lot of wordpress plugins that depended on the free Google Translation Engine also not work any more.
Fortunately, Microsoft still provide a free translation API for programmer. That’s why I decide to develop this plugin, which uses Microsoft Translator API. It is a surprisingly adequate substitute for Google Translate.
MVC之患上肥胖症的Controller
2012 1月 11th
来这边负责做的一个项目,用了一个叫做 Yii Framework 的 MVC 框架,刚开始的时候自以为结构很稳健(当然,是相对于现有的烂系统来讲)。但是随着对业务逻辑理解的深入,我开始意识到问题的严重,我错误地理解了 MVC 中的 Controller,想当然地根据以往的经验,把所有的业务逻辑都放在 Controller 的 action 中去实现,于是,每一个 Controller 的代码都上千行,越来越臃肿。
最终导致我下定决心对这两个月工作进行重构的,是一个对外开放 API 接口的需求。按照现在的架构,代码基本无法复用,我需要把很多功能再重复写一遍,这实在是无法接受的。面向对象编程不仅仅是课本上的名词啊!真正开始实践才发现要有面向对象意识,有全局观,是多么难得的一件事情。
【暴走漫画】坑爹的UTF8和UTF-8网页编码
2012 1月 2nd
一、遇到的问题
曾经被字符集间复杂的转换搞怕了,正好新项目要求国际化,需要能够显示多种语言,于是一开始就规定统统使用 UTF-8 编码。
- 所有代码文件使用 UTF-8 编码存盘
- MySQL数据库所有表,所有字段设置 Collation (中文翻译为“整理”?)属性为 “utf8_general_ci”
- 所有页面输出
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
即便是这样,PHP 从数据库中读取内容,显示到网页上,还是出现了乱码,英文没问题,中文统统都是?问号。这样也行?艰苦卓绝的 debug 开始了……
Python写爬虫——抓取网页并解析HTML
2011 6月 10th
CUHK 上学期有门课叫做 Semantic Web,课程 project 是要搜集整个系里面的教授信息,输入到一个系统里,能够完成诸如“如果选了A教授的课,因时间冲突,B教授的哪些课不能选”、“和A教授实验室相邻的实验室都是哪些教授的”这一类的查询。这就是所谓的“语义网”了啊。。。然而最坑爹的是,所有这些信息,老师并没有给一个文档或者数据库,全要靠自己去系主页上搜集。唯一的想法是写个爬虫,令人悲哀的是,所有做这个 project 的同学,都是纯人肉手工完成,看得我只想扶墙。。。
从网页中抓取特定信息,我觉得这是一个普遍性的问题,以后经常会遇到。幸亏那个 project 只是需要我们系的所有教授的信息,大家人工也就算了。如果需要抓取的信息是海量的,举个栗子,把淘宝上所有的商品目录抓下来,那岂不是要吐血而亡?我决定好好把爬虫研究一下。 更多 >
计算圆周率Approximating Pi – Map Reduce Program
2011 4月 11th
MapReduce主要应用于大规模数据处理,特别是在搜索引擎中各种链接的访问统计,进而影响到页面关键词排名等等。今天这个例子却是讲的利用MapReduce来对圆周率Pi进行近似计算。考虑下面这张图:
我们知道,正方形的面积 As = (2r)2 也就是 4r2. 内嵌圆形的面积 Ac = pi * r2. 于是 更多 >
C/C++反序输出字符串总结
2011 3月 21st
2年前去T公司面试,面试官给了我一张纸一支笔,说写个程序吧,输入一个字符串然后反序输出。我问输入输出是用函数参数呢还是系统I/O,面试官说随你便,写完了说说各有什么优缺点吧。当时我大三,没有参加过ACM没有实验室经历除了课程设计也没写过什么程序,完全小白。当然至今也仍然是菜鸟一只,不堪回首啊。
方法一:据说有库函数strrev()啊 更多 >
学习MapReduce分布式程序设计方法
2011 2月 9th
MapReduce是Google提出的一个编程框架,用于大规模海量数据处理,其主要思想就是分治(divide and conquer)。我们希望程序有并行处理能力,于是就可以使用多台机器同时处理加快速度。
然而,怎样分派任务给不同的计算机?如果任务单元的数量大于可执行任务的计算机的数量怎么办?计算需要使用到一些中间结果怎样处理?如果某些计算机在处理任务时中途死掉了呢?怎样才能知道任务已经处理完毕?问题主要来自于任务处理节点的交流(比如状态信息),以及对共享资源(数据)的访问。要解决这些棘手的问题,我们需要有一套完整的同步机制:同步锁信号量、条件变量(等待、通告、广播)等等。
现有的一些编程模型有共享内存(pthread)、消息传递(MPI)等,架构的设计模式有主从式(Master-Slaves)、生产者消费者流式(Producer-consumer flows)等。Map Reduce结合了函数式编程语言的思想,使用key-value对作为输入和输出。开发者只需要实现map(key, value)和reduce(key, value)两个功能。map()会产生中间结果作为输出,而这正是reduce()的输入。中间结果经过reduce()产生最终结果。类似以下模型:
map (in_key, in_value) ->
(out_key, intermediate_value) listreduce (out_key, intermediate_value list) ->
out_value list
具体的原理可以参看Google发表的关于MapReduce的论文。从应用开发的角度,本站的MapReduce分类下有一些python示例,可以作为初步入门学习。最简单的方法就是利用管道来进行代码测试,例如: 更多 >
反向索引Inverted Index – Map Reduce Program
2011 1月 4th
Inverted Index (反向索引)是搜索引擎需要做的一件经常性工作。在Google提出Map Reduce分布式编程框架中,这是一件很容易完成的事情。下面就是一个python写的示例。 更多 >
单词统计Word Count – Map Reduce Program
2011 1月 4th
在学习Map Reduce方法时,Word Count(单词统计)程序是最基础的入门训练。不同的写法会有不同的执行效率,下面是用python写的一个示例。 更多 >