Day 12630 全屏电池电量显示页面

页面地址:https://battery.win32.app/

因为一些个人需求,希望在全屏显示当前设备的剩余电量并动态更新。

该页面作者为 SilentDepth,并追加了群友 Zero Ny 的改进,使用现代浏览器访问上述页面地址即可。

仅在 Chrome 和 Microsoft Edge 下测试过确认可用,其它浏览器请自行测试。

不禁感慨:以前要是想实现一样的功能,无论如何都得写个 Native APP,而现在只要一个 HTML 页面就可以了,时代变化真快啊。

Day 11531 关于『饭碗儿』的一些说明

由于饭否的页面及API设计,有关『饭碗儿』账号的一些说明写在个人简介中相当局促,在账号开设近5年后的今天,终于还是决定单列一个页面,对一些问题进行说明。

一、『饭碗儿』是什么

『饭碗儿』是一个对饭否『随便看看』栏目的统计账号。由于『随便看看』包含来自全站公开消息中的随机的20条左右的数据,在一定程度上可以作为饭否站内消息概况的一个缩影。

很多对『饭碗儿』的疑问都来源于对上述概念的不完整理解,如果您对『饭碗儿』的数据有疑问,请继续往下看。

二、『饭碗儿』的数据生成过程

『饭碗儿』的统计数据来源于对『随便看看』的数据采集。每个整秒分钟(如:8:00:00,或:13:45:00),『饭碗儿』的后台服务都会对『随便看看』进行一次数据采集,并将全量数据保存在本地备用。

每周一(理论上),『饭碗儿』的管理者(我)会用事先写好的工具将上周七天的数据进行统计,包含如下两类数据:

(一)客户端使用情况:在数据中查找名称『完全不同』的API名称(即『通过____发送』的中间部分,如:网页、御饭 iPhone 等等)进行计数统计。

(二)公共TL话痨50强:在数据中查找发送人、消息内容、发送时间完全不同的饭否消息,统计其所属的发送人出现的次数。

关于第(一)条,一个普通用户不容易注意到的细节是,API 返回中的 API 名称,除饭否官方 API 外(如『网页』,即饭否的PC端网页),原则上所有API都必填一个应用说明页面的URL,采集时,这类API名称会体现为:<a href=”http(s)://应用说明页面网址/”>API名称</a>。对于去掉<a>标签后名称相同的API,统计时会按照两条数据对待。

统计好之后,管理者还会对按要求提交排除申请用户和API名称进行处理,将这些数据进行剔除,最后制成图表,发送到账号上。

三、关于『饭碗儿』的一些疑问

倘若仔细读过了前述说明,仍未能解答您的疑问的话,这里有一些饭否用户对『饭碗儿』的一些问题,可供参考。

如您仍有其它下列未列出的问题,可在本文下方留言提问,确实未予回答的,本人会进行回复。

(〇)星期一了,怎么没发统计数据?

答:平日工作较忙,如未能准时发布,后面会尽量补上,请理解。未制作自动制图流程,因为我懒。此外,由于服务端托管环境的不稳定性(如系统崩溃、机房停电等),部分期数可能无法发布,如有时间,会登录饭碗儿账号进行说明,也可能没有解释。

(一)随便统计别人发过的消息次数,你是不是变态?

答:『随便看看』中的消息,均由饭否官方通过自动的形式公开向登录用户进行展示,『饭碗儿』无法控制饭否『随便看看』功能展示的信息,仅对这些公开数据进行采集,且仅作为统计原始数据使用,没有将这些消息的内容进行转载、修改或任何妨害消息原发布者隐私权的行为,如果您认为『饭碗儿』的行为侵犯了您的个人权益,请参考下述第(二)条的方式,向『饭碗儿』主动提交从统计数据中移除的请求,否则视为同意『饭碗儿』对您出现在『随便看看』中消息的采集行为,『饭碗儿』不对任何人的玻璃心行为负责。如您仍有疑问,请恰饭否官方或法律人士进行咨询,『饭碗儿』保留对不合理的请求进行无视、在『饭碗儿』账号上进行公开发布的权利。

(二)因为个人原因,我不想让我的账号或API名称出现在『饭碗儿』的统计数据中,应该怎么做?

答:请通过饭否的『私信』功能,向『饭碗儿』发送私信,说明您(或您的API名称,此处建议您提供带有对应API名称的示例公开消息,以便准确定位)不想在『饭碗儿』的统计数据中出现即可,无需提供理由,除此之外的方式均视为无效,不予受理。『饭碗儿』将从消息收到之日起(视乎『饭碗儿』所有人登录饭否网查看私信之时间为准,不以消息发出时间为准)永久性地将您或您的API名称从『饭碗儿』的后续统计数据中移除。此外,由于饭否的功能限制,已发送的消息无法进行修改,故若已发送的统计数据中包含您或您提供的API名称,则无法进行移除,望知悉。

(三)为什么我说了那么多的话(为什么我的应用明明那么多人用),却没有上『饭碗儿』的『公共TL话痨50强』(客户端使用情况)的榜单?

答:请注意『饭碗儿』只是对『随便看看』数据的统计,由于饭否的『随便看看』是对全站公开数据的随机抽取,以上两种状况发生的原因有:(1)在每分钟采集时,『随便看看』中没有抽到您(的API)的消息;(2)统计期间您打开了隐私保护(即所谓的『上锁』),使得您的消息不会出现在『随便看看』中。

(四)为什么我(的API)在统计期间明明发了10000条消息,却只给我算了1000条?『饭碗儿』是不是把我拉黑了?

答:请注意『饭碗儿』只是对『随便看看』数据的统计,由于饭否的『随便看看』是对全站公开数据的随机抽取,数据存在一定的随机性,且『饭碗儿』并非针对单个用户(或API)个体进行数据统计,故只能代表您(的API)在『随便看看』中每整分钟采集时的情况,仅供参考,不能代表精确的情况。此外,『饭碗儿』从未也不会主动拉黑任何人或任何API名称,除非用户或API名称的持有人通过上述第(二)条中描述的方式提起请求,此时『饭碗儿』会按要求对相应的数据条目进行移除。

(五)为什么我(的API)发了10000条消息,然后又全删掉了,统计的时候还是给我算了8000条消息?

答:请注意『饭碗儿』只是对『随便看看』数据的统计,数据来自每个整分钟对『随便看看』进行采集,但不会后期再次验证拉取消息的删除情况,故拉取数据时已发送的消息均会列入统计。

(六)我有几个API名称,能不能帮我合成一条统计记录?

答:维护API名称是开发者的责任,不提供此服务。

(七)为什么客户端列表中有两个『网页』?

答:数量较多者为饭否官方的“网页版”,较少者为某系列机器人的API名称(自2021年起,因对应服务停运,仅保留1个Bot运行,消息数量下降,基本已不会再产生混淆)。

四、一点点『饭碗儿』的历史

『饭碗儿』账号建立于2015年10月12日,起初是因对饭否全站的消息词频等数据感兴趣而设立的。

最开始时,『饭碗儿』曾对客户端统计情况、公共TL话痨50强、消息时段分布及词频进行统计。后来经过一段时间的运行,消息时段分布因每次都几乎没有差别,没有太大意义而取消掉了,词频云则由于未能找到物美价廉的分词API而作罢,而余下的两种类型,则一直运行到今天。

『饭碗儿』运行至今,除了一大堆娱乐性图表外,还积累了另一份数据:2015年11月至今的饭否『随便看看』每周1.08万次的采集。尽管该数据因硬件故障、API故障、被意外封停等问题并非全量,但在某种意义上也是见证了饭否多年来公开的欢声笑语。

Day 11477 长颈鹿复制器

  日常工作中,本人遇到一个非常具体的问题:由于日常需要将书籍印刷的文件进行归档处理,而这些文件中,很大一部分是InDesign设计文件的链接图(即印刷文件中调用的图片),而这些链接图的文件名由于编辑和排版人员的习惯问题,常常会遇到文件名超级长的场合,例如:

北京故宫南北长961米,东西宽753米,面积约为725000平方米,四周环以城墙,外围有护城河保护。有四门:正南为午门,东为东华门,西为西华门,北为玄武门(神武门)。现神武门为故宫博物院正门。城墙高9.9米厚8.26米.jpg

  类似这样的文件名,在存在于单层目录中时问题不大,然而归档的时候,由于需要按照日期等建立深层目录,形如:

Z:\排版文件\已定稿印刷\故宫的历史(全12册)\故宫的历史(2020年第1期)\Links

  此时会撞上Windows传统的路径长度260字符限制,以往的处理方式都是将复制时出现这样问题的文件名进行缩短,直至路径长度达到允许值为止,但在某次某本书里有几十个类似情况后,深感崩溃。

  读到这里,急着抬杠的大聪明请先看以下几条,不服的请关掉本窗口,因该工具与您无关:

  1、由于印刷文件后期需要进行导出PDF等操作,必须将排版文件内的图片与实际文件进行链接,故不宜将文件名胡乱修改为1.jpg、2.jpg这样毫无意义的文件名,不然在InDesign中进行重新链接时,就只能根据图像内容人眼识别了(InDesign没有根据图片内容或特征自动重新链接的功能),而这项工作是非常劳累的;

  2、原文件名中可能包含一些排版中没有的信息,如图片的作者姓名等,由于总数据量略多(大约50年左右的数据),实在无暇进行手工数据清洗;

  3、想提通过修改组策略或注册表在Win10下突破260字符路径长度的不必提了:首先目标机器是一台群晖,SMB共享无法突破此限制;其次,即使搞定了我的机器和群晖,还有众多最低使用XP的用户会访问这个资料库,升级系统是不可能的,故最终不要考虑该方式

  4、想让我去跟编辑、排版人员谈谈的可以休矣,我的职权有限,无权干涉别人的工作方式;

  5、想让我换工作的,您给介绍?不给就算了。

  如果到此还没有关掉窗口,请继续阅读。

  本软件的功能很简单,仅仅是调用了C#中最基本的File.Copy进行文件复制,唯对文件名缩短这一流程进行了自动化,即:当遇到文件名过长、导致路径超过260字符限制时,自动将文件名(不含扩展名部分)一个一个字符地进行缩短,直至可以成功复制为止,最大限度保留原文件名。最坏的情况为缩至1个字符仍无法复制,则会复制失败。

  由于该工具只是本人辅助工作的小工具,故可能永远保持目前的单一功能,不会进行更新,但欢迎有相同需要的用户进行试用、并反馈bug。

  本工具不能对长颈鹿进行复制(“长颈鹿”实际是对“长路径”的揶揄)。

  本工具实际与赤蛮奇没有关系(同样只是对“长颈鹿”的揶揄)。

  本工具需要 .Net Framework 4.6.1。

  下载地址

Day 10896 《小鱼三旋》

加班后的夜晚,蓦地想起这个标题。

不知道周鹏程是否是他的真名,也不知用依冉这个名字能否再在网上检索到他,更因为种种缘故,已经忘记为什么我们最后要一拍两散。

感谢Internet Archive Wayback Machine,将易逝而久远的数字记忆定格,让漫无目标的记忆,在茫茫网海中找到导航的明灯。

十几年的时光,以及这期间发生的各种各样的事,使我对这篇文章有了更深层的理解,而不是孩童时代“为赋新词强说愁”的矫情。

寻梦雪后、飘零季的各位,你们还好吗?

Continue reading “Day 10896 《小鱼三旋》”

Day 10766 迟来的https启用

即日起,本站的Blog部分正式启用Let’s Encrypt签发的SSL证书,其它页面如“锟斤拷”域名、霞光之羽饭否机器人等页面,因实际上是静态页面,暂不列入启用范围。

由于本站采用的是非常实惠的虚拟主机(这种情况通常也称为网站主人没钱),且一开始并没有在主机的控制面板中找到相应的证书导入选项(直到现在也没有显示出来,是靠瞎猜误打误撞进去的),就一直将启动SSL搁置起来,没想到一放就是两三年。

大体就是这么一件小事。

Day 9937 中间人攻击式饭否消息过滤代理

这个东西的最初设计目标是:在不对某些人取消关注(加黑名单也会取消关注)的情况下,通过中间人攻击(不是唬人,其实本质就是篡改返回结果)为不支持消息过滤的饭否客户端(实际上,没有任何一款饭否客户端和官方界面有这个功能,据本人所知的唯一途径是Chrome插件Fanatic,但也只能对饭否网页版起作用)提供相应功能。

由于没有一款客户端支持自定义API地址,所以采取的方式是:在本地用hosts将API所在主机(api.fanfou.com)重定向,然后在目标服务器接受解析,等于欺骗一下客户端,让它以为连接的是官方的API服务器。

此外,既然是中间人攻击,那么其实想对返回结果做什么都可以,本来除了过滤特定人之外还想加入更多功能,可是写完就懒了。

代码写得很面条很烂,请多包涵。

使用方法(以Apache 2.4.4 + PHP 5.3为例):

1、将文件内容另存为UTF-8无BOM格式,文件名为index.php(或任何目标服务器支持的默认文档名)

2、确认PHP开启cURL扩展,Apache开启了Rewrite扩展,修改httpd-vhosts.conf(或Apache虚拟主机配置文件所在处):

<VirtualHost *:80>
    ServerName api.fanfou.com
    DocumentRoot "文件所在路径"
</VirtualHost>
<Directory "文件所在路径">
    Order Allow,Deny
    Allow from All
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    #-f的含意是将请求的路径当作文件来看待,由于-f会检测文件是否真实存在,所以!之
    RewriteRule ^(.*)$ index.php?reqf=$1 [QSA]
    #QSA == Query strings appended,即将原始Query String内容原样转发
</Directory>

3、配置主机,将api.fanfou.com绑定到刚刚配置的Apache服务器上。

4、在要使用该代理的客户端上,配置hosts文件,将api.fanfou.com指向文件所在的主机。 Continue reading “Day 9937 中间人攻击式饭否消息过滤代理”

Day 9847 无痕搬家(2)以及域名重定向

又给博客搬了个家,由于我仍然很穷,加之并没有需求和能力去管理VPS,所以仍然用简单的虚拟主机。

本次搬到衡天主机(hengtian.cc)的香港主机,速度似乎还不错。

前年的时候用的戈戈主机(gegehost.com),一开始用香港主机,结果每个月大概有2-3天是不能顺利联通的,后来又换日本主机,结果每天十次里有5次是不顺畅的。

我的博客上没有违规的东西,也并不怀疑GegeHost的服务质量,只能说镇上的网络环境太复杂,抛开某个很高很宽的东西,我所在的环境就有一个配置得很烂的自动流量切换出口,在同一次登录中会切换IP,结果会被对端判断为IP地址发生变化,要求重新登录,以至于我要上主机的控制面板需要科学上网,ft。

希望这次能用得久一些。


发完一小时后补充:

因为手下还有另一个娱乐性质的域名(kunjinkao.net),原来用GegeHost的时候,主机控制面板是cPanel,直接设置域名重定向就可以了,现在换到衡天这边,控制面板是DirectAdmin,找不到对应的选项,问客服说用控制面板里的「别名指向」,但实际上没有这一项(可能是虚拟主机不支持,VPS才支持?),后来干脆说DA实现不了,我是不太相信的。

最后以手写.htaccess转向成功,但不是很稳定,凑合着吧。

以下方法来自:http://wiki.dreamhost.com/Transparently_redirect_your_root_directory_to_a_subdirectory

RewriteEngine on
RewriteBase /

#以下kunjinkao.net是要跳转的目标目录,不是域名本身
RewriteCond %{REQUEST_URI} !^/kunjinkao.net/

# Rewrites all URLS [Replace "domain" with the actual domain, without the TLD (.com, .net, .biz, etc)]
# 重写所有URL(将domain(已替换为kunjinkao)替换成不带TLD(.com、.net之类的后缀)的域名本体
RewriteCond %{HTTP_HOST} ^(www\.)?kunjinkao\.

# Rewrite all those to insert /folder
# 将所有URL重写到/
RewriteRule ^(.*)$ /kunjinkao.net/$1 [L]

Day 9740 用Arduino制作RFID钥匙链

rfid_keychain

很多人对管理密码感到由衷的麻烦,在生物特征验证尚未完全普及的今天(好像迄今为止做的最好、最为人所知的就是专属于iPhone 5S起的Touch ID),假设服务商没有(被迫)采取明文存储密码的2B做法,那么密码太短可能很容易被猜解出来,而密码太长又很容易记不住,而且在输入时也很麻烦。

因此有许多基于软件的密码管理器出现了(如1Password),只要记住一个主密码,剩下的密码都由其负责管理,并且很多优秀的产品已经出了很多平台的版本,可以跨平台进行使用,然而这种方式仍然有一点局限性:

  1. 在程序无法运行的环境下无法使用,例如:使用TrueCrypt加密的系统分区,在开机时要求输入密码;
  2. 主密码是拥有一切的前提,换句话说,如果忘记了主密码又没有备份,那么所有的密码可能都要丢失掉;
  3. 很多人有对商业软件与生俱来的不信任,在米国的棱镜项目被揭露后尤其如此。

我一直觉得很奇怪,为什么没有一种硬件,将密码离线存储在诸如IC卡之类的外部存储设备上,在需要的时候只要读卡,就能能模拟真实的键盘将密码输入。经过一番搜索,发现这种东西可能早就有了,只是没有供个人使用的商业化产品出现,其中的一个例子就是Mooltipass。

Mooltipass是一款设计精良的硬件密码管理器,除了实现以上所述的功能外,还能在适合的环境下与插件配合进行自动登录、帮助用户生成强密码(并存储下来供下次使用)。当时看到这款产品时,它还处在早期研发阶段,后来上了Indiegogo众筹。我没有双币卡,而且看到众筹也晚了些,$80的价格对我来说也有点贵(虽然说真的,值这个价钱),并且关于International Shipping说得好像也不是很清楚,所以就这么错过去了。

后来我听说了Arduino这个电子积木,其使用一种近似C的语言进行编程,并且通过一些方式可以模拟USB键盘。虽然我不会写C,但懂一点C#,两者有共通之处,所以二话没说就买了一堆零件开始尝试。

在拖延症和急功近利心理的共同作用下,一共走了以下几个弯路:

  1. 买错型号:设计上我想让成品既能读卡,又能写卡,但买了一圈之后我才知道能同时模拟USB键盘并与SPI总线上的RFID读卡模块RC-522通讯的型号是Arduino Leonardo,等我终于意识到时,已经额外买了Uno和Nano了。
  2. 多买了许多零件:跟以上理由相同,一开始以为需要用V-USB去模拟USB键盘,所以电阻、稳压二极管等等买了一大堆,最后才买到真正需要的东西。

虽然造成了许多不必要的支出,但最终这个东西还是做出来了,只有两个基本功能:

  1. 读卡,并将解密后的数据模拟键盘输入。
  2. 写卡,将加密后的明文(最长16位)存储到RFID标签中。

真正用到的元器件成本如下:

  1. Arduino Leonardo R3(¥30)
  2. 3×4矩阵键盘(¥5)
  3. RFID读卡模块RC522(含2张S50卡)(¥18)
  4. 无源蜂鸣器1枚(¥4)
  5. 公对母杜邦线一堆(¥5)
  6. 10K单联电位器(¥0.5)
  7. 8.5×5.5cm面包板(¥4)
  8. 1602 蓝色背光LCD(¥8)

合计¥74.50元——这么一算好像也不便宜,但是如果从一开始就核算成本,以自己的惰性怕是永远也做不出来。

不过以后输入16位长的密码简单些了。

源码和接线方式就算了,写的太烂。

2015-08-16更新:由于我手太笨,一直学不会焊接,所以这东西的最终形态是:

封装形式为PBC,即Paper Box Container