最近有折腾小程序的意向,但微信的开发者工具只提供了 Windows 和 Mac 两个版本,对于我这样的 Linux 用户来说不是那么地友好。

经过观察发现,那个开发者工具实际上是基于nw.js开发的,天然地具有跨平台的属性,搜索Github的时候刚好发现这个项目:
cytle/wechat_web_devtools: 微信开发者工具(微信小程序)linux完美支持

于是我按照README的教程装好 Wine,运行脚本配置安装。装好后发现功能基本正常,唯独不能正常编译小程序代码,提示

run-detectors: unable to find an interpreter xxxxxxx

文档给出的解决办法是,安装一个 wine-binfmt 包,当我敲下 sudo apt install 之后尴尬的发现, Ubuntu 16.04 LTS 缺失了这个包,想到配置各种下载源,也是挺让人绝望的。


阅读全文 »

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

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

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

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

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

阅读全文 »

上完上午的课,时间尚早,不想去赶人流高峰挤食堂,遂留在教室刷刷网页,读读文章,打算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. 验证码的训练与识别

阅读全文 »