战舰世界 自动签到

其实这个坑已经挖了很久了…

最早挖坑的时候主要是为了这个活动的自动签到,然而现在这个所谓永久活动也结束了…

最早用 Go 实现了验证码的自动识别,这回跟着 dalao 用 python 重写了一遍,然后修改了下验证码的学习算法,让获得的样本更准确(现在验证码识别率居然近似到 100% 了)

因为 python 的脚本改起来比较容易,如果有新活动的话加个配置就可以实现,目前主要签到的是陆海双雄的活动,等新活动出来加就是了

研究了下傻逼空中网的接口,现在签到的时候会自动检测是否已签到

用到了 PIL 来读取图片像素,然后用 requests 包发请求

动手生产一个超级精简版的手机 QQ(Android 限定)

手机 QQ 越来越慢怎么办?
轻聊版、国际版功能不全怎么办?

通过这个脚本,可以轻松精简 Android QQ,仅保留基础的聊天相关功能。

使用方法:

  • 传输到手机中
  • 用 root 权限执行

PS:详细步骤请见注释
PSS:脚本需要 Root 权限
PSSS:不用 Root 权限也能进行部分精简(无法操作 data 分区),如有需要自行修改脚本执行即可

Read more

当 贴吧签到助手 遇上 Go 语言

在贴吧签到助手正式出炉的 3 年后的这个夏天
在开发停止 2 年后的今天
终于有了一次重大更新

花了 2 天的时间,重写了相关代码
主要是针对 PHP 7.0 的兼容处理,使代码能在 PHP 7.0 下运行

其次,把签到部分改用 Go 语言实现,多线程签到实测高峰期 CPU 占用率约 0.3%,内存占用 4MB
可以大大减少签到对服务器资源的消耗,可以与其他服务同时部署

由于 3 年间百度登录接口变化,原有登录接口已被废弃无法使用,故本次重写了 BDUSS 的 Chrome 获取扩展
可以通过 https://api.ikk.me/reborn/proxy.htm 页面向扩展请求获取 Cookie

另外由于签到部分(Go)已经实现和主程序的分离,现在可以实现签到端与网页端分开部署。
个人建议将数据库放在签到端保障系统稳定,网页端通过远程连接到数据库进行管理操作。

目前新版正在进行封闭测试,两位数的用户可以在 2 分钟内完成所有用户签到
现在正在考虑进行更多用户的测试,如果我认识你,相信你已经收到邀请码了,如果没有,可以私下找我联系

New:加入 Telegram 群,不定期发送邀请

解决 Audio 元素 currentTime 属性不准确的问题

之前的 KK Player 有一个问题,就是在 Internet Explorer / Microsoft Edge 下如果拖动进度条播放时间会很诡异。
日前又发现 Firefox 下也有问题,点击跳转到 2 分钟,虽然显示是到了,但是实际上只有 1 分 50 秒多的样子

这个问题其实很早就知道了,只是当时以为是微软的 bug,然后加上 IE 用户不算多,就暂时放置了。

这个问题怎么看怎么像浏览器的问题,于是准备到 stackoverflow 提问的,偶然看到系统推荐的一条类似问题

大致解释下,MP3 是有损压缩格式,浏览器没办法根据时间找到对应的文件流位置(然而并不知道 Chrome 是怎么做到的),所以会出现如此鬼畜的时间。
解决办法只有换用 OGG 格式的无损音频

然而这下问题更大了,IE / Edge 压根不支持这格式… 可以点击这里查看 OGG 的浏览器兼容情况

根据浏览器兼容性报告,似乎只有 MP3 格式兼容性最好…
直到后来找到了 AAC 格式,兼容性报告在这里
而且 ACC 格式的 currentTime 也没有问题

于是目前就先用 ACC 格式存放歌曲,待浏览器兼容性改善再考虑用 OGG

同步本地 / 服务器代码 - Git 篇

已经习惯用 Git 进行开发了,不得不说 Git 的确是个很好用的开发工具

有的时候经常会需要一边维护一个 Git 库,一边将代码部署到服务器上
例如团队共同进行开发,希望 commit 后自动部署到团队的测试服务器上,就可以采用下面的办法

首先先在服务器上创建一个 Git 库

1
git init --bare

然后打开 .git 文件夹,找到 hooks 文件夹,创建一个 post-receive 文件

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".

#exec git update-server-info

cd /var/www/buildbot.ikk.me/snapshot/KanColleTranslation/

env -i git pull

然后给这个文件赋予执行权限即可

由于我提前在网站上 git clone 过,于是直接 Pull 就行了
由于这是开放的库,就没有限制 .git 文件夹,如果需要限制可以在上面加 rm 命令,或是 nginx 屏蔽
当然想简单的话个人推荐把 git pull 换成 cp 简单粗暴

给 Typecho 添加双因素认证支持

不得不说双因素认证的确是一种保护账号安全的有效方法,Google、GitHub和众多网站纷纷支持双因素认证保护账号,这次我把双因素认证移植到了 typecho 上

首先不得不说下,typecho 并没有给登录预留插件接口,只有登录成功和登录失败的处理接口,登陆界面也没有可以插入的地方,所以这回直接对 Typecho 源代码下手了

首先下载修改后的 Typecho 分支:
https://github.com/kookxiang/typecho

然后执行 SQL:

1
ALTER TABLE `typecho_users` ADD COLUMN `twoFactorAuthKey` varchar(18) NOT NULL;

(本来可以放到 Typecho 更新程序中自动执行的,考虑到日后升级问题,就没有放过去)

登录到后台,点击控制台 个人设置,最下方可以看到“双因素认证”,有随机生成的一组 Key,手动添加到 Google Authenticator 或者 Authy 中就可以使用了。当然也可以通过二维码方式添加,不过考虑到 Google API 在国内的可用率还是建议开着梯子访问。

添加到手机之后将当前验证码填写到确认框中点击启用即可启用。此后每次登录后台不论密码是否正确都将要求输入动态密码(增加暴力破解难度)

如需取消,可以登录后台输入动态密码取消。
如果无法登录后台,可以到数据库中清空对应用户的 twoFactorAuthKey 字段

就是这样~

让 Discuz 支持 MariaDB

昨晚把博客和论坛搬回国内了;博客在搬的过程中倒还挺轻松,只是 Discuz 搬迁后出现水土不服,提示

Illegal mix of collations (gbk chinese ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='

搜索后大概意思是说数据库编码不对。
我就郁闷了,数据库是 GBK 的,字段是 GBK 的,程序也是 GBK 的,怎么会编码有问题呢?
绕过计划任务进入论坛,发现论坛中文全部乱码了。
难道是我导入数据的时候有问题?于是乎我又重新用 GB2312 导出一份,上传到服务器,依然不行。
反反复复折腾一个小时之后,一个偶然的机会下发现 Discuz 下数据库被设置为 lantin 编码,这和 phpmyadmin 看到的不一样啊!
然后又研究了许久 Discuz 的数据库类,明明有设置为 GBK 的,难道没设置成功?
在程序中加入 DB::query() 设置编码,发现居然可以了,这是什么道理??表示不服
难道用 mysql_query() 就不行么?可是 DB::query() 又是调用 mysql_query() 的啊
偶然调节代码顺序的时候,发现移动到 if($this->version() > ‘4.1’) 外侧竟然执行成功了
尼玛原来你才是罪魁祸首
可是这句话有问题么?输出下

10.0.9-MariaDB

尼玛我瞬间就明白了,这是一个字符串,“4.1”也是一个字符串,字符串比较是逐一比较各字符,先判断 1 < 4,然后得出 10.0.9-MariaDB < 4.1
我 QNMLGB,害我倒腾两个小时……

解决办法:
修改 version 方法,return ‘9.9.9’;

让 Discuz! 帖子列表支持倒序排序

Discuz! 虽然能够在后台修改帖子的排序方式,但却不能选择是倒序还是顺序排序。

为解决这个问题,可采用以下修改办法:
修改文件 source/module/forum/forum_forumdisplay.php,找到 457 行:

1
$_GET['ascdesc'] = isset($_G['cache']['forums'][$_G['fid']]['ascdesc']) ? $_G['cache']['forums'][$_G['fid']]['ascdesc'] : 'DESC';

在下方加入:

1
2
3
4
// Modified by kookxiang @ 2014-4-8 13:05:07
if($_GET['forceasc']) $_GET['ascdesc'] = 'ASC';
if($_GET['forcedesc']) $_GET['ascdesc'] = 'DESC';
// Ending of modification

这样便能通过 URL 参数 forceasc 和 forcedesc 控制排序了

离开 WiFi 范围自动禁用 WiFi

学生党表示宿舍长期开着WiFi,出去上课的时候总是不记得关。

本着能省一点是一点的精神,希望离开WiFi范围的时候能自动关掉,于是自己动手写了个。

程序本身不占用任何资源,没有后台进程。自动注册一个网络状态监听器,当WiFi断开一段时间之后关闭WiFi。

值得注意的是,由于 Android 4.0 以上版本的限制,要注册监听器必须至少启动过一次程序,所以装好后需要手动点一下图标
启动后程序自动隐藏程序图标(因为你点进去也没用 →_→)

之后可能会考虑加个连接充电器的时候自动扫描WiFi,放在无线充电板上爽歪歪(笑

下载在这里:KK Auto Wifi.apk

将 QoS“限制可保留带宽”设置为 0% 真的能为网络提速吗?

很多关于系统优化的文章都提到过 QoS “限制可保留带宽”这个设置项。
系统的默认值是 20%,很多人将它修改为 0%,认为这能起到提升带宽的作用,可是这种修改方法真的有效吗?

我们可以在微软的这篇文章中找到关于这项功能的说明:

像在 Windows 2000 中一样,程序可以通过 Windows XP 中的 QoS API 利用 QoS。所有程序可以共享百分之百的网络带宽,除非有某一程序特别要求带宽优先权。其他程序也可以使用此“保留”的带宽,但请求此带宽的程序正在发送数据时除外。默认情况下,程序在终端计算机的每一个接口上可以预留基本链接速度的 20% 的聚合带宽。如果保留带宽的程序发送的数据量没有完全用完带宽,则保留带宽的未用部分可用于同一主机上的其他数据流。

显然,修改此设定完全不可能实现网络加速,反倒会使某些程序无法获得较高的网络优先级。

所以在这里建议大家不要将这个数值修改为 0%,可以设置为 10% 或是 5%(具体根据你的网络带宽而定),或是直接使用默认的 20%。这个选项对提高网络带宽真的没啥用……