垃圾评论

10月 1, 2010 2 条评论

最近博客的访问量很大,每天都有好几千,但打开详细的访问记录一看,也就20几个IP,很显然,被刷站了,随之而来的是大量的垃圾评论,看来wordpress的那个垃圾评论过滤插件也不给力啊,无奈之下,只能手动分类垃圾评论了,删啊删啊,直到有一条评论,哥犹豫了,”I love your blog”,毫无疑问,这不是垃圾邮件,他绝对是真心的,囧rz。

分类: 未分类

Google Chrome Extension 4 PRONLINE

08月 11, 2010 2 条评论

用Google Gadgets API为Pattern Recognition Online写了一个iGoogle的小工具, 代码部分很简单就是加载swf文件, 服务器用的还是GAE. 下面给出了添加到iGoogle的链接, 默认窗口比较小, 最大化之后可显示完整界面.

<?xmlversion="1.0" encoding=”UTF-8″ ?>
<Module>
<ModulePrefs title="Pattern Recognition Online" width="407" height="460" scrolling="false">
  <Require feature="flash" />
  </ModulePrefs>
<Content type="html">
<![CDATA[

<div id="flashcontainer" style="text-align: center;"></div>

<script type="text/javascript">
 
  function showFlash() {

    var url = "http://219.223.240.153/lihao/wp-application/pronline/PatternRecognitionOnline.swf";

    // Play .swf file.
    _IG_EmbedFlash(url, "flashcontainer", {
      swf_version: 6,
      id: "flashid",
      width: 407,
      height: 460
    })
  }

  // When gadget first loads, display flash.
  _IG_RegisterOnloadHandler(showFlash);
  </script>
  ]]>
</Content>
</Module>

My gadget is located here. Would like to:

之前使用过迷你人人Chrome插件, 相当于一个轻量级的人人桌面, 很不错的一个应用, 一度挺佩服这个插件的作者的, 但当自己也尝试着写完一个Google Chrome Extension之后, 才发现插件的作者其实什么也没做, 因为他只不过把人人网迷你版的代码嵌入进来了而已, 而这个东西是人人网和Google联合开发的一个iGoogle小工具.

为Pattern Recognition Online系统写的Chrome扩展: ChromeExPro. Chrome扩展的编写也很简单, 就是几个配置文件, 可参见Chrome扩展入门教程HelloWorld. 提交的插件是一个zip压缩文件, 里面的目录结构如下:

icon.png: 19×19像素大小的图标.

manifest.json: Google Chrome Extension配置文件.


{
"name": "Chrome Extension Pro",
"version": "1.0",
"description": "Pattern Recognition Online",
"browser_action": {
"default_icon": "icon.png",
"popup": "popup.html"
}
}

popup.html: iframe里的html, 本扩展使用上文编写的iGoogle小工具提供的网页嵌入代码.


PS0: 当然最重要的任务还是完善Pattern Recognition Online系统的功能和提高识别率的问题, 接着将完成图像连通度计算的部分, 这个日后再说…

PS1: 无论是使用GGE/(Google Gadgets Editor)还是更新Chrome Extension Pro主题页时, 服务器响应都有几分钟的延迟, 想必是Google为缓解服务器压力, 把几分钟之内的写事物(CRUD)合并为一次操作.

PS2: Pattern Recognition Online项目的source code(目前还没上传), flex客户端提供下载. ChromeExPro扩展的下载页在这里.

08月 1, 2010 8 条评论

Google AdSense

在本站投放Google广告也有一个半月左右了, Google Adsense的分析报告如下图. 基本上大部分的点击来源于我自己, 闲的时候就点两下, 也不敢多点, Google对于恶意点击是有惩罚的, 轻则降低点击单价, 重则将站点标记为垃圾站点, 所以有一种黑站方法就是连续的点击一个站点的广告(一天100次或更多). 而每天少量的自点击, 相信Google也是支持的, 毕竟Google得靠广告的点击去向发布商收钱. 除了我自己的点击, 剩余的点击我相信应该来源于光临本站的访客的误操作, 而误操作的原因很有可能是鼠标坏了, 因为一个正常人是绝对不会点击广告的. 在这个广告的世界里, 除了广告还是广告, 无论你是在地铁上、公交车上抑或是在洗手间里, 它都能强奸你的视听, 而如果遇到的是恒源祥之类的极品, 那杀伤力就更大了. 所以大多数人遇到广告, 避之犹不及更何况点击了, 而所谓的提高广告点击的做法无非都是在增加访客误操作的几率而已.


Blog – 无可替代

记得有人问过我为什么还在写博客, 当时很装X的说, 哥写的不是博客, 哥是在输出文化. (笑) 我承认自己在说出这番话的时候也喷了, 没办法, 研究生教育就是让你学会怎样把一个简单的东西串联上一堆专业名词说得貌似高深的样子, 显然我还不到家. 其实写博客的目的很纯粹, 就是很随意的写自己的东西, 也不在乎有没有人看, 只要有我一个观众就足够了, 而如果有人觉得写得还不错, 分享一下抑或是做个评论, 可能会让我觉得有一丝成就感.

Hit Counter

Total hits: Hits from unique IPs: Total hits, today: Hits from unique IPs, today: Hits, the last 7 days: Unique hits, the last 7 days:
3002 405 54 12 448 63

GFW的是非

“Facebook的原罪是它能让人认识想认识的人. Twitter的原罪是它能让人说出想说的话. Youtube的原罪是它能让人证明需要证明的现实. 而Google的原罪是它能让人知道想知道的东西.” 前几天GFW再次发威, 使刚发布不到5天的Google问答夭折. 不过Google问答被封印, 多少没有出乎大家的意料, 据说刚上线就有人跑去问”GCD什么时候下台”, 也有人揣测此人是ZF的托, 不过我看也未必, 所谓”禁之愈甚, 求之愈切”, 或许只是憋的太久而且又翻墙无门罢了. 这个事情告诉我们在天朝, 你不但不能知道得太多, 也不要问得太多. 不过GFW的存在也有一定的好处, 就是它为中国IT业的复制模式起到了推波助澜的作用, 像贸易壁垒一般阻挡了Facebook, Youtube, Twitter等web应用, 保护了国内的IT市场. 而带来的负面效应似乎更严重, 我们的民族逐渐丧失创新能力, 这不只是在IT领域, 也包括音乐、文学创作等其他方面. 国内IT业的模式就是复制, 黏贴, 本土化, 就如魔兽世界把毒药改成药膏, 刺客换成潜行者差不多, 国内IT企业之间的差距只是在复制的功力上罢了. 不过这也无可厚非, 想起了”硅谷海盗”中Steve Jobs说的话.

PS: 最近咖啡喝多了, 神经衰弱

分类: MyTrueLife 标签:,

Need For Efficiency

07月 22, 2010 2 条评论

很怀念硕士毕业前的我,每天都能很充实地做事情,从一早做到很晚,不知疲倦。现在,虽然也是从一早做到很晚,但效率极其低下,中间总被各种事情打断。有些事情是天上掉下来的,我不得不被打断,但更多的是我自找的,比如周期地check mail,check reader,check bbs,check blog,check cms,check renren,check 241……今天又加上了一个check buzz。天天就在check和reply中度过大半时间,效率当然低下了。 | 转自Sunner’s Blog

最近这段时间做事情的效率真的很低下, 在sunner的博文中找到这么一篇, 发现和现在自己的状态惊人的相似, 每天在check和reply中浪费了很多的时间, 都已经是web2.0向web3.0迈进的时代了, 而我却还在以web1.0的方式check更新, 轮询的效率可想而知. 最近在chrome里添加了一个renren的工具(迷你人人), 导致check renren的次数更频繁了. 看来是时候戒除一下网瘾了, 在工作时间除了GTalk, 屏蔽其他聊天工具和无聊站点.(包括本站)

PS: 前几天安装了人人网开发者的应用, 准备在PROnline所有功能完善后发布到人人上.

分类: MyTrueLife

Principal Component Analysis[python版]

07月 20, 2010 2 条评论

前几天在校内上分享了一个”十二星座的编程语言”的帖子, 虽然我不信宿命论和星座论, 也不是语言论者, 不过看到了这种帖子, 还是会把作者的谬论和自己做比对, 不巧的是往往又是那么符合, 哥的世界观崩溃了.

按照SB作者的谬论, 哥被映射到了Matlab(射手座), 不得不说Matlab在做科学计算方面的确很好很强大, 大部分的算法先通过Matlab验证结果, 然后再翻译成其他语言的版本, 不过我对Matlab一直没兴趣, 不知道为什么, 深层次的原因有待进一步发掘. 而Python(天秤座)才是我的…

讲了一堆废话, 发现和题目完全不搭调. 现在开始进入正题, 本篇将使用python的科学计算包NumPy实现主成分分析(PCA)降维方法, 为PROnline系统所使用的特征提取方法之一.(未完成)

分类: 未分类

PROnline version-0.1

07月 17, 2010 4 条评论

Introduction(version-0.1):

PROnline项目是一个在线手写数字识别系统. 开发语言为Python(GAE服务器端)和Flex(客户端). 开发目的只是为了实践人工神经网络(Aritificial Neural Network)和数字图像处理(Digital Image Processing)这两门课程而已. 其实早在去年学习模式识别(Pattern Recognition)课程的时候就想到做这样的一个系统, 因为时间的关系和对GAE、Flex的不熟悉没有尝试, 现在算是兑现了半年前对自己的承诺吧. In one word, just for fun!

客户端为什么选Flex? Flex开发的程序会生成一个Flash, 而Flash可以嵌入到web页面中, 也可以在本地环境中运行, 介于C/S和B/S开发模式之间. 相比一般的客户端程序, Flash不存在移植性的问题, 而且无需在客户端中安装, Flash的下载由浏览器完成. 服务器为什么选GAE? 对系统资源(CPU、内存、磁盘空间)的需求在一定配额以下是免费的, 为什么不用呢? 而且我相信Google肯定会提供很优质的服务, 还有一个很重要的原因是GAE支持python, 这样就可以使用python来开发服务器端程序了.

Readme(version-0.1):

PROnline的UI由两部分组成: 位于顶部的Menubar和中间的Panel. Panel是手写数字的画板, 通过处理鼠标事件来绘制从鼠标按下到释放过程中移动的轨迹. Menubar是系统的菜单栏, 包含如下菜单项:

  1. Panel->Classify: 将面板Panel中的数据28×28 pixels提交到服务器, 并返回分类结果0-9, 通过弹出式对话框显示, 该对话框提供分类正确与否的反馈信息Right or Wrong, 选择任何一项将关闭弹出对话框.
  2. Panel->Clear: 将面板Panel中的数据清空.
  3. Model: 选择服务器端用于分类的模型. 目前仅有朴素贝叶斯分类器naivebayes.
  4. Image: 提供简单的数字图像处理方法. 目前仅支持膨胀Dilation、腐蚀Erosion.
  5. Help: 系统的帮助信息.

Mailto icesorrow@gmail.com if any bug or suggestion

Pattern Recognition Online

07月 3, 2010 发表评论

PROnline将是一个使用Google App Engine + Flex实现的在线模式识别系统, 最初将实现简单的手写数字识别, 以构建和确定系统的框架, 然后可能会扩展到手写汉字和公式的识别上. (to be continued…)

在发布version0.1之前, 总结一下现在遇到的各种问题:

  1. 手写数字样本库的存储. 手写数字样本库来自”The Mnist Database of handwritten digits”, 它包含60,000条训练样本和10,000条测试样本, 本打算把所有样本数据存储到GAE的datastore中, 但datastore数据查询有1000条的限制, 多少让人有点蛋疼, 那就直接以文件的形式保存在服务器上吧.

  2. 训练模型的存储. 在GAE服务器上不允许写文件, 所以算法模型的训练过程不能在GAE服务器上进行, 只能先在开发端生成所有算法的训练模型, 然后把整个工程上传到服务器.

  3. 手写数字与样本库的数据粗细度不同(如下图). 在目前使用的naiveBayes识别算法下, 不对输入数据做任何处理的话识别率惨不忍睹, 就像国家统计局公布的数据一样扯淡. 人为将输入数据描粗后, 识别率提高了很多. 所以为了使输入手写数字和数据库中的样本有大致一样的粗细度, 需要做Dilation-Erosion(膨胀-腐蚀)操作, 现在的问题是对输入数据做膨胀操作(Flex)呢, 还是对样本数据做腐蚀操作(Python)?

使用python做简单规则的文本过滤

06月 22, 2010 发表评论

当报文内容很多时为了方便用户选择查看有意义的报文, 可以对报文进行过滤. 支持用户输入需要过滤的字符的关键字. 比如输入要过滤的关键字为”nMcuAdrs=0×10301″. 那么对于nMcuAdrs=0×10301的报文则不显示, 仅显示满足关键字过滤规则的报文. 当需要有多个要过滤的关键字时, 需要支持一下的规则:

  1. 与 key1 and key2, 表示既要满足关键字key1也要满足关键字key2.
  2. 或 key1 or key2, 表示只要满足key1或者kye2任一即可.
  3. 支持与和或的组合, 与的优先级高于或. 比如 key1 and key2 or key3, 表示只要满足key1、key2, 或者key3即可
  4. 括号的优先级高于and. 比如 key1 and (key2 or key3), 表示满足key1并且满足key2、key3中任一即可.

每一个关键字都用双引号括起来, 比如输入过滤的字符为”nMcuAdrs=0×10301″ and “CmdCode = 0x11ab”, 表示既要满足nMcuAdrs=0×10301也要满足CmdCode = 0x11ab.

上述规定的and、or、()语法和python的算术表达式的语法是一样的, 再结合python的eval函数和正则表达式能够很简单的解决上述文本过滤问题.


import re
def multiple_match(text, message):
def match(string):
return str(bool(re.search(string.group(1), message)))
pattern = re.compile("\"([^\"]*)\"")
return pattern.sub(match, text)

  1. text是过滤规则表达式, message是需要过滤的文本(eg. text=”\”hello\” and \”world\”", message=” icesorrow, hello!”)

  2. 先从text中提取被双引号引用的keyword, 然后用keyword去message中匹配, 返回一个布尔值的字符串

  3. 通过这个函数处理之后会得到 “True and False”(是个字符串), 再使用eval函数就可以得到结果了, 包含括号的语法同样也可以处理

再引入异常处理, 对eval的表达式做语法分析, 以纠正用户输入的文本过滤表达式, 最后的版本如下:


import re
def multiple_match(text, message):
def match(string):
return str(bool(re.search(string.group(1), message)))
pattern = re.compile("\"([^\"]*)\"")
return eval(pattern.sub(match, text))

if __name__=="__main__":
text = "\"hello\" and (\"world\" or \"haolee\")"
message = " haolee, hello!"
try:
print multiple_match(text, message)
except SyntaxError:
print "syntax error: check filter expression"

分类: Python 标签:, ,

其实什么也不是

06月 21, 2010 2 条评论

以前让人捧的多了, 渐渐的认为自己是个什么东西

实际上呢? 啥也不是

一向不喜欢依靠别人, 习惯了单枪匹马, 渐渐的完全不会teamwork了

对自己过分的自信, 加上做事拖沓的习惯, 是这次mission failed的主因, 而且身为队长, 没有为全队制定明确的计划, 协调全队的合作更是失责.

——–我在此向两位队友道歉

分类: MyTrueLife 标签:

World Cup 2010 Google Calendar

06月 9, 2010 发表评论

为了加快主页的加载速度, 订阅此日历的用户请从下面的链接进入.

阅读更多…

分类: MyTrueLife 标签:,
加关注

Get every new post delivered to your Inbox.