上上周的某天,我在网上偶然遇到这本书,豆瓣的简介是这样子的:

在这个飞速发展的信息时代,程序员仅仅掌握甚至精通一门语言是远远不够的。了解多门语言蕴涵的思维方式,在编码中互相借鉴,再挑出一两门对自己口味的语言深入学习,这些已经成为在软件行业中安身立命之本。从这个意义上说,每个程序员都应该看看这本《七周七语言》。

想起了王垠大神的 如何掌握所有的程序语言 ,心中还是挺赞同他“不管是初学者还是资深程序员,应该专注于语言特性”的观点的。仔细想想,这应该是一个了解更多的语言特性的不错的方式,所以我在图书馆找到了这本书。

看了第一章,感觉十分合我胃口,就把它带回来了。

然后鸽子了一个星期才开始这本书...

阅读全文 »

上完上午的课,时间尚早,不想去赶人流高峰挤食堂,遂留在教室刷刷网页,读读文章,打算11点半下一波下课高峰之前再去解决午饭问题。

登录许久没有打理过的博客后台,在众多未回复的留言之中,一条指向博客的归档页面的 PingBack 映入眼帘:

PingBack

想到自己写的东西能带来价值,心中还是有些小激动,这大概也是 WordPress 之类的动态 Blog 程序的特色之一吧。

激动之余,回顾过去写的东西。也发现一个问题:过去的我在这里留下了许多高中时期关于学习的探索,大学以后,虽然还在探索着,但关于学习的尝试与折腾,我却没有做一个很好的记录和总结,也没有去回顾,渐渐地开始淡忘。除了一些技术上的折腾记录外,我也很久没有写过像这篇文章一样的日记了。

阅读全文 »

最近在用 Node 的 cheerio 类库整一个抓取课表的小爬虫,其中有部分不需要的信息的 HTML 标签内部只有一个  ,我想利用它作为特征来过滤掉无用的信息。

cheerio 默认会把所有HTML字符都转换为相应的实体(HTML Entity), 所以我设置了一个

cheerio.load(data, { decodeEntities: false });

的选项,把它们都还原为原本的字符。

没想到又打开了一个新坑。。。

阅读全文 »

背景

新学期伊始,年度抢课大戏同步上映,学校的正方教务系统也迎来了前所未有的流量冲击。教务系统这个跑在 Windows 2003 的上古时期的 ASP.NET 程序的服务器自然也承受不住,在选课高峰期频频崩溃,从而也导致了用户登录的账户在选课期间频频掉线的问题。

也不得不吐槽一下这上古时期的网页的交互逻辑:教务系统在每一次掉线以后都需要重新登录。这个过程最致命的是,当登录时输入错误的情况下,用户名、密码、验证码都需要重新填写。尝试多几次,大概也会有想砸电脑的冲动,可以说是十分反人类了。。。

用户名和密码可以通过浏览器自动填充,解决了一个大问题,但验证码仍然需要手动输入,重复去输入那辣眼睛的验证码的过程,还是让人有些心塞,且很容易出错。想想这几秒钟也十分关键,关系到那些喜欢且热门的课程能否到手,所以我也产生了做一个验证码自动填充的程序的想法。

受到 eleflea/neu_filler: 自动填充东北大学教务处验证码脚本 的启发,经过半个月的研究,这个想法也变成了现实。

你可以选择以下任意一种方式使用本脚本:

  1. 油猴脚本:SCNU JWC Captcha filler
  2. 书签栏 javascript: 协议链接脚本:一键登录教务系统脚本生成器 2.0

思路

在东北大学的同学的代码启发下,了解到通过 HTML5 的 Canvas API 的 getImageData 方法可以实现对网页图片像素的读取。这里的思路大致与东北大学教务验证码填充脚本一样,不同的是这里在切割、处理单个字符的过程花了较大的功夫,具体来说可以分为以下5个步骤:

  1. 获取图片信息
  2. 将图片二值化
  3. 把图片中不同的字符分割出来
  4. 将分割的字符通过旋转的方式标准化
  5. 验证码的训练与识别

阅读全文 »

一直以来都想着拯救我的 broken English,好准备接下来的六级考试。前段时间在 V2EX 看到一位大神分享了一份实用的英语学习指导 https://github.com/byoungd/English-level-up-tips-for-Chinese,遂被种草。同时我也认识到了自己单词量的匮乏,想通过背单词的方式把基础的词汇攒起来。恰好教程提供了一份「麦克米伦7000高频词」的 Anki 牌组,便打算从这里开始。

添加了一个 6000+ 卡牌的牌组的后果是,媒体文件同步AnkiWeb的时候巨慢无比,毕竟AnkiWeb的服务器远在德国,这也使我催生了搭建自己的 Anki 同步服务器的想法。

阅读全文 »