Categories

Calendar

August 2009
M T W T F S S
« Jul   Sep »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

RabbitMQ: high performance messaging solution

RabbitMQ 是一个由 Erlang 写成的 Advanced Message Queuing Protocol (AMQP) 实现,AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR 的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。反正现在这个世道通常都是小公司拥抱标准,大企业自己搞一套标准,不过公开标准总还是对大众有利的。

_why

昨天晚上心情沮丧无法平静,失眠到很晚,今天早上起来就看到一个非常让人惊讶的消息:_why 突然消失了。而且这件事似乎在社区里造成了轩然大波:

Reddit: Where is _why?
Reddit: This is a sad day: _why disappears.
Hacker News: Eulogy to _why
Hacker News: _why is no more
Ruby Inside: “Why The Lucky Stiff” Is Missing
Ruby Inside: A Cup Full Of Why: 32 Why The Lucky Stiff Links

_why 是 Ruby 社区里神级的人物,很多产,就我自己来说,经常用的他的作品是分析 HTML 的 Hpricot 和那个在线的 Ruby 解释器。他也很会画漫画,写有一本图文并茂的 Ruby 入门书挂在网上,也是非常受欢迎的。另一个神秘的地方是似乎没有谁知道他的真名,最早我在收录文章到 Nextlib 的时候,喜欢把作者的全名找到填上,可是却怎么也找不到 _why 的全名,大概是从这个事情开始对他印象深刻的吧。

SSH tunnel tips

从我两三年前接触 SSH 的时候我就在文档上见过 SSH tunnel 相关的东西,然而当时没有怎么看明白,也就一直没有深究,直到最近需求越来越多了,才终于发现这个东西原来这么有用,于是记录在此。

SSH tunnel 主要有三种,一种是 dynamic application-level port forwarding ,可以用来作为 SOCKS proxy ,通常翻墙就是用的这种端口映射;一种是 Local Forwarding ,主要用于提供常规的加密隧道,例如让 IMAP 协议通过这个加密隧道,避免密码在网络上被人监听到;一种是 Remote Forwarding ,可以用于逆向穿透 NAT 。其实,另外还有一种专门为 X 打造的 X11 Forwarding ,一般不会用到,Linux 下远程登录通常不会需要开启 X 程序,或者有其他更好用的方法,因此我们这里并不打算介绍这个。

Scrapy 轻松定制网络爬虫

网络爬虫(Web Crawler, Spider)就是一个在网络上乱爬的机器人。当然它通常并不是一个实体的机器人,因为网络本身也是虚拟的东西,所以这个“机器人”其实也就是一段程序,并且它也不是乱爬,而是有一定目的的,并且在爬行的时候会搜集一些信息。例如 Google 就有一大堆爬虫会在 Internet 上搜集网页内容以及它们之间的链接等信息;又比如一些别有用心的爬虫会在 Internet 上搜集诸如 foo@bar.com 或者 foo [at] bar [dot] com 之类的东西。除此之外,还有一些定制的爬虫,专门针对某一个网站,例如前一阵子 JavaEye 的 Robbin 就写了几篇专门对付恶意爬虫的 blog (原文链接似乎已经失效了,就不给了),还有诸如小众软件或者 LinuxToy 这样的网站也经常被整个站点 crawl 下来,换个名字挂出来。其实爬虫从基本原理上来讲很简单,只要能访问网络和分析 Web 页面即可,现在大部分语言都有方便的 Http 客户端库可以抓取 Web 页面,而 HTML 的分析最简单的可以直接用正则表达式来做,因此要做一个最简陋的网络爬虫实际上是一件很简单的事情。不过要实现一个高质量的 spider 却是非常难的。

Play Babelize with Google Translate

Have you played such a game when you were young? One person think a sentence and tell another in a whisper (or just use gesture language or anything that might loss some information when transmitting the bits). Then sentence is passed along in that way until the last one. Then he tell us what he […]

漫谈 Language Model (2): 实践篇

本文是“漫谈 Language Model 系列”中的第 2 篇,参见本系列的其他文章。在上一次的原理篇中,我们介绍了 Language Model 的基本原理,并大致讲了一下如何来构造一个 Language Model ,然而,在实践中还是会碰到不少问题的,本文将提出其中一部分问题并给出解决办法。

第一个问题是浮点数精度问题,不止是在 Language Model 中,几乎任何做概率计算的程序都会遇到这个问题:浮点数下溢,也就是需要表示的数字(绝对值)太小了,超出了浮点数所能表示的范围。通常情况下,一个双精度的浮点数在计算机里由 8 个字节来存储,按照 IEEE 754 的浮点数标准(这是目前绝大多数计算机采用的表示方法),一个双精度的浮点数的内存布局如下:

漫谈 Language Model (1): 原理篇

本文是“漫谈 Language Model 系列”中的第 1 篇,参见本系列的其他文章。原本只是想简单地谈一下 Lanugage Model ,而且之前的漫谈 Clustering 系列还没有写完,似乎又起一个系列不太好,但是在脑子里构思了一下,要说的东西好像也不少,放到一起似乎真的有点长了,而且一时半会估计也写不完,所以还是觉得做成一个系列吧。

Language Model 中文就叫做“语言模型”吧,这实际上是一个概率分布模型 ,对于语言里的每一个字符串 给出一个概率 。稍微正式一点的定义可以这样说:假设有一个符号的集合 ,我们不妨把每一个 称作一个“单词”,由零个或多个单词连接起来就组成了一个字符串 ,字符串可长可短,例如实际语言中的句子、段落或者文档都可以看作一个字符串。所有合法(例如,通过一些语法约束)的字符串的集合称作一个语言,而一个语言模型就是这个语言里的字符串的概率分布模型。