关于密码

中秋放假三天。因为在 Windows 下,所以除了写简历之外也没有其他的什么事做,想起还有去年 CSDN 爆库时下载的600多万帐号密码数据,就写了几个 Python 小工具分析了一下。结果大致如下。

阅读剩余部分 -

近况

回来看看,才发现上一次写东西是快一个月之前了。这段时间真是有够忙的,不过真正在忙我自己的事的时间确实少得可怜。

首先,我跟计算机学院的同学和老师合作的一个网站上线了。点这里:录取线 - 往年各院校录取分数线查询,或者这里:录取线后备站点。这个网站其实非常简单,不过数据的收集存储是一件很麻烦的事情,所以从成型到上线花了比较多的时间。

其次就是,我加装了一块硬盘,空了一点空间出来安装了一个 Windows 7 系统,因为暑假有一个项目不得不用万恶的 Windows 。引导的问题,我本来想用 Grub2 自动检测解决,还为此专门在微博上请教了盖子老师,不过最终没有用。因为后来考虑到硬盘其实不会经常拆卸,所以把 Windows 硬盘挂到了主硬盘位置( BIOS 里设置主从顺序无效,不知道原因), Ubuntu 挂到了光驱位。 Windows 引导用的是 EasyBCD ,添加了 Ubuntu 系统; Ubuntu 用的是 Grub2 。

嗯,就是这样,然后我又开始了对 Windows 的狂轰滥炸。安装 Visual Studio 2012 的时候,看到它最先开始的操作是创建系统还原点,嗯,呵呵。一个公司要对自己的系统多么没有信心才能干出这种事来?其他各种问题我就不说了,简直人干事。

使用 selfoss 搭建自己的 RSS 阅读器

突然想要有一个自己的阅读器,其中肯定有受到 Google Reader 关闭的影响;次要的原因则是尝试了一些手机阅读器觉得没有一个合适自己的,而且我手机经常处于离线状态,阅读很不方便。经过一番考察,觉得 selfoss 不论从 UI 还是速度、管理的便利性来说,都是非常不错的;而像 Tiny-RSS 的 UI 就过分老旧了。

虽然这个开源项目很优秀,但我不得不吐槽的就是它的配置文件使用 ini 文本格式,稍不留意就会被搜索引擎抓到配置文件(想想里面可是有数据库的用户名和密码啊啊啊啊啊!!),不过这个通过 Nginx 的配置可以严格控制,拒绝一切访问。

通常的配置请参考这里。我主要记录下遇到的问题。

首先貌似提供的 Nginx 配置文件中的监听端口是 IPv6 端口 ,我的 VPS 没有去折腾这个,所以要把配置里的端口改为 80[::]:80 改为 80 );然后记得依次更改服务器名、文档根文件夹路径等改成自己的;随后关掉 access_log (文件会很大而且一般没什么用);把 upstream 块去掉,修改 location ~ \.php$ 块中的 fastcgi_pass 为 LNMP 默认的 unix:/tmp/php-cgi.sock 。(或者可以直接在 upstream 块中修改 fastcgi_pass )到这里就可以使用 selfoss 了。生成新的密码,使用 /password 提供的密码 Hash 生成器,输入要你想设置的密码明文,复制生成后的 Hash 字符串,登录你的 VPS ,把 Hash 字符串粘贴到 config.ini 里相关位置就修改好了密码。

还有一点就是,貌似 selfoss 默认使用的是 HTTPS 连接,我的 VPS 不支持,所以要将 config.inibaseurl 项使用 HTTP 的完整地址覆盖掉。

安装后会发现无法添加 RSS 源,总是弹窗提示列表加载错误。这是因为默认禁用了 PHP 的 scandir() 函数。修改 /usr/local/php/etc/php.ini 配置文件,搜索 scandir ,将其从 disable_functions 中删除, reload 一下 配置即可。

本来是很简单的一个安装配置过程,却花费了我几乎一天的业余时间。主要是因为不熟悉 Nginx 配置文件的格式,总是忘记语句后加分号(写多了 Python 的缘故?)。收获有:

  • 又一次地认识到了标点符号的重要性;
  • 知道了一个简单的终端文本编辑器 nano ,满足所有编辑配置文件的需求,又不像 Vim 和 vi 一样过于复杂以至于不会用。

在 Ubuntu 下使用 Nero AAC Codec

自从大二那年发现 AAC 格式音乐后就一发不可收拾,现在我的所有音乐文件里 MP3 屈指可数,大部分都是从无损文件转换过来的 AAC 格式。我最喜欢的 Windows 软件是 Foobar 2000 ,转换格式超级方便。转战 Ubuntu 之后我第一件事就是找 Foobar 2000 ,作者坚持只开发 Windows 版本软件我也可以理解,但是这样的话我那一堆还没转格式的音乐就遭殃了啊,我也不能每次增加新歌就去借用别人的 Windows 机器啊。

后来我在翻以前的 Foobar 2000 设置的时候发现音质最好的 AAC 是使用 Nero 编码器的 512kbps 、双通道编码的文件,而且 Nero AAC Codec 是有 Linux 版本的!所以后来我就苦逼地写脚本转换。。。

怨念啊……原来用 Foobar 的时候只要右键转换就帮你搞定了一切,输出临时文件啊、双通道编码、复制音频属性啊什么的。现在要自己动手了才发现根本不知道人家是怎么实现的。

所以现在在写一个图形界面的转换器,设定就是只能使用 Nero 编解码器的。项目地址在此:PyAACGUI

2014.07.19 更新本段内容

PyAACGUI 这个项目已经停止更新,推荐使用重新设计实现的 PyAACGUI2
新项目可以使用多进程(多 CPU 核心)加快队列文件的转换,并且可以指定 Nero AAC Codec 的位置,对系统有洁癖的人士也可以放心使用。
目前实现的功能有:批量队列转换,就是可以选择很多文件排队转;自动清理临时文件,要是转换完留下一大堆临时文件会气死人的;转换进度提示;转换后删除源文件(可选);可指定临时文件存放位置(可以存放到 /dev/shm 加快速度);UI 的多语言支持(现在支简体中文和英文)。

然后说下怎么安装 Nero AAC Codec 。这个套件其实包含三个程序: neroAacEnc 是 AAC 编码器;neroAacDec 是解码器(可以从 AAC 文件解码出来 WAV 文件);neroAacTag 是标签读写程序,用于读写 AAC 文件的音频标签。

要安装这个的话有两种方法。一个是我自己用 Debreate 制作的 DEB 软件包,下载地址。用这个的话比较方便,我自己测试过,没有权限不对无法运行的问题,因为软件包在安装后会参照 sudo 程序修改 Nero 套件里程序的权限。

还有一种就是自己去 http://www.nero.com/eng/company/about-nero/nero-aac-codec.php下载压缩包。下载之后解压,进到 linux 文件夹下,把三个程序复制到 /usr/bin 下,然后参考 /usr/bin 下的其他二进制程序设置权限。

要注意的是,必须要修改权限,否则你自己在终端里用起来是没有问题,但是 root 用户就没法运行这些程序了,在其他程序里对它们的调用也会失败。

某次元的超地图炮:洋葱及杀人事件

如果有一天我死在东华理工,一定是被一食堂左边那个炒面的大叔咸死的。—— Mes Mo

如果有一天我死在哈尔滨,百分之九十是被毒死的,而且案件百分之百会不了了之。(顺便提一句,剩下百分之十的可能性是地面塌陷、大桥(因为车辆超载而)倒塌、游荡在大学城的杀手。)

阅读剩余部分 -

Notes for Reinstalling Ubuntu Precise Pangolin

今天重装了 Ubuntu ,因为一些很奇妙的原因。记录一下重装系统之后要做的事。需要特别注意的是,使用 dpkg --get-selections 导出列表供重装之后自动安装软件这种方法,我一次都没有成功过。每次失败的原因出奇地一致:这种方法会导出原来系统安装的所有软件,重装之后的系统使用这个列表进行安装,会把列表里的软件先卸载一遍才进行安装,但是卸载这些软件之后也就无法安装软件了。重启之后内核都找不到,因为这个我重装了两次。

阅读剩余部分 -

Python 切片操作及其它

写东西的时候掉了一个大坑,懒了一下,随口问了一些别人切片操作,结果调了半天才发现别人回答有误。自力更生,记一下一些东西吧。

切片操作是指对序列(字符串、列表、元组等等)的复制操作。

a = [1,2,3,4,5,6,7,8]
a[0:]
[1, 2, 3, 4, 5, 6, 7, 8]
i = 4; a[i:]
[5, 6, 7, 8]
a[:i]
[1, 2, 3, 4]
a[0:i]
[1, 2, 3, 4]
a[i:-1]
[5, 6, 7]
a[:]
[1, 2, 3, 4, 5, 6, 7, 8]

我之前就是被误导,试图使用 a[i:-1] 取得序列的后一段。
还有一些 Python 的提示,速记一下。

  • 元组内容不可改变,但是元组内如果有可变元素(列表、字典),这些元素是可变的。
  • 魔法字符串建议使用 #!/usr/bin/env python 或类似的。
  • 建议使用 with open() as file_instance 来处理文件,尤其是读取文件。
  • 使用魔法字符串并赋予文件可执行权限,直接运行时不会在路径下编译 pyc 文件。

HTML5 canvas 彩色时钟

2014年4月18日更新本节。

演示中修改代码,使画布时刻保持页面允许的最大正方形,并能同步调整画布中各元素的大小(包括字体)。


最近想法比较多,大多是对以前写的一些半死不活的 demo 的一些改进,其中大部分都是 HTML5 的,再其中大部分又是 canvas 的。canvas 这个东西有时候让人迷惑有时候又非常吸引人,因为比较接近底层的缘故吧,但又是在可视化的同时接近底层。

昨天晚上开始动手到现在,做好了这个彩色时钟。去年我就写过一个类似的、也许代码优化得更好的例子,作为一个 Chrome 插件的一部分存在,本来是要发布到应用市场的,因为一些原因(Chrome 应用市场收取开发者注册费必须使用国外信用卡; Chrome 扩展的新版 manifest 规范严格限制了 inline-script 的运行,而我当时非常喜欢用 inline-script )未能如愿。几经辗转,很多代码都丢失了。所以这次是重新写的。基本延续了我一年前那种配色白痴的配色风格。(==。)

代码都是加过注释的,况且是很简单的功能,就不贴在这了。

这里面最主要的一点就是,使用 context.beginPath() 开始路径之后用 context.arc() 画弧,画玩之后不要闭合路径,而是直接用 context.stroke() 描边,才能达到需要的效果。当然如果有兴趣的话你也可以试试闭合路径再描边。

最后,演示效果: