我叫王战斗

我叫王战斗,男,喵星人,狸花族,现年四个半月,折合成你们两脚兽的年龄算7岁了。

虽然刚降临你星不久,但是我已经能驯服和驾驭两脚兽这种低等生物了。因为我发现这种生物本性里有一个致命弱点:对它很好反而不会珍惜,故作高冷却奴颜婢膝求抱抱!我们喵星管这叫「贱」。

开始的时候,我的驭兽术还不熟练,而且我酷爱往两脚兽的脖子里钻,然后蹭它们的脸。结果它们不干了,在我才两个月零九天的时候就把我交给了现在这头两脚兽。是它们不懂喵星习俗好不好?!而且作为一个刚断奶的小正太,卖个萌怎么啦,怪我咯?

我一直在暗中观察现在这头两脚兽。发现每隔五天,它都会在巢穴里待上两天,然后在接下来的五天里每天都消失一段时间。虽然有点好奇,不过也不是什么大事,只要我有吃有喝、两脚兽按时铲屎,每天给它放个风什么的我也OK,这是我们喵星高等生物的自我修养。

不过还是要测试一下这货的驯服度。所以我命令它伺候我睡个午觉:

这货竟然没有反抗!!!

有一天我发现它竟然在偷看我练习家传绝学「黑虎掏心」,我就瞪它,就瞪它:

有时候两脚兽全神贯注地照镜子,我就想看看它看的啥,然后它就扒拉我,我想一定是我高大威猛的身躯挡住它了:

这老头叫马霸霸,挺能白话的,它的巢穴已经被我军占领了:

那天两脚兽带回来一只老鼠,我一眼就看出来是假的,但是这货一碰就叫啊,然后我就停不下来了,你星管这叫口嫌体正直,看著两脚兽谜之微笑,我觉得中了奸计:

更有甚者,它竟然趁我睡著的时候拍我裸照,还传到网上:

生亦何欢,死亦何惧。趁两脚兽上厕所的时候,叼走了卷纸,然后撕稀碎,有能耐学我们喵星人上完厕所自己舔干净啊?!

没想到报复来得如此突然,两脚兽不知道从哪儿搞了一瓶毒气,走到哪儿揣到哪儿,我一想搞事情就各种喷:

真臭啊,臭到怀疑喵生啊!

话说回来,大部分时间两脚兽还是没那么讨厌。比如这个会喷水的盒子,被我霸占后就成了我最常喝水的东西兼洗脚盆:

两脚兽的厨艺也不赖:

吹嘘自己慷慨的时候,两脚兽就指著这口袋说:「比我吃得都好。」其实就是618的打折货。

两脚兽就是个肥宅兼Nerd,且不说为了给我做饭专门买了台电动切碎机和保鲜盒。铲个屎都装绝命毒师:

某天整了把稀奇古怪的东西在床上、沙发上各种吸,完事非要说是我干的:

我的天啊!不就掉个毛么,全宇宙只有你们两脚兽光著屁股满世界跑!

我来,我见,我征服。我是王战斗,一个普通的驯兽师。

生成PDF的方案调研

结论

倾向于通过wkhtmltopdf+消息队列实现。

工作流程:

  1. 用户保存表单
  2. 推送生成pdf的任务到队列
  3. 同时页面显示「正在生成PDF文档,请稍候」并轮询后端接口
  4. PDF生成后,页面显示下载按钮

后端

dompdf

纯PHP实现。工作原理是把HTML转换成PDF。

优点:

  1. 不需要PHP调用命令行,安全性高。

缺点:

  1. HTML/CSS支持不完全,实测多个网页转换后排版错乱。
  2. 中文网页转换后,中文都是问号(网上说有解决办法12,未测试)。
  3. CPU占用比较高(网上的说法,没有实测具体有多高)。

参考:

mpdf

纯PHP实现。工作原理是把HTML转换成PDF。

优点:

  1. 不需要PHP调用命令行,安全性高。

缺点(未实测):

  1. HTML/CSS支持不完整。
  2. 生成PDF耗时长。

参考:

PDFtk Server

PDFtk Server是个命令行程序。工作原理是利用FDF表单替换PDF模板中的占位符。实现方案有:纯PHP实现FDF + PDFtk、FPDI + PDFtk。

优点:

  1. 直接替换PDF模板,实现成本低,最大程度保证生成的PDF的效果。

缺点:

  1. 需要允许PHP调用命令行,有安全隐患。
  2. 只能实现简单的字符串替换(例如公司名称),不能替换有格式文本。

参考:

wkhtmltopdf

wkhtmltopdf是个命令行程序。工作原理是转换HTML到PDF。实现方案是laravel-snappy。

优点:

  1. 由于内嵌webkit核心,HTML/CSS的支持没有问题。

缺点:

  1. 需要允许PHP调用命令行,有安全隐患。
  2. wkhtmltopdf体积40M,并发较多时影响服务器性能和稳定性(需要考虑用队列辅助实现,异步执行,需要需求变更交互方式)。

参考:

CutyCapt

命令行程序。工作原理和wkhtmtopdf相同。

优缺点同wkhtmltopdf,但是最近的更新在13年。

参考:

Prince

命令行程序。工作原理是转换HTML到PDF。

优点:

  1. HTML/CSS的支持很好。
  2. 文档很全

缺点:

  1. 收费,而且很贵。(免费版会在输出的文档右上角打一个Logo)
  2. 需要允许PHP执行命令行,有安全隐患。
  3. 需要考虑用队列辅助实现,异步执行,需要需求变更交互方式。

参考:

前端

jsPDF

工作原理有两种:编程方式动态生成和转换HTML到PDF。有三个插件支持转换HTML到PDF:fromHTML、addHTML和html2pdf。

fromHTML最老,优点是直接转换HTML到PDF,缺点是对复杂的HTML/CSS支持得不好。实测结果,UTF-8编码的中文网页,转换到PDF都是乱码。

addHTML较新,但目前处于deprecated状态,利用html2canvas/rasterizeHTML创建一个canvas,然后把HTML转换成图片、再转换成PDF。实测结果,对中文网页和CSS支持得都不错,但是对分页支持得不好,指定分页选项后图片被拉伸并强行分割,很难看。

html2pdf是正在开发的功能,还没完成。

参考:

pdfkit

只能通过编程(//调用接口指定内容、分页等相关属性//)生成PDF,不支持从HTML转换到PDF。

pdfmake

据说扩展自pdfkit。只能通过编程(//调用接口指定内容、分页等相关属性//)生成PDF,不支持从HTML转换到PDF。而且需要引用字体文件转换成的js文件,不适合中文内容。

变通方案

利用浏览器打印PDF

Chrome、Firefox、Safari的最新版都支持打印网页到PDF,Edge未测试。

优点:

  1. 实现成本低。

缺点:

  1. 用户体验差。

导出word文档

优点:

  1. 实现成本低。(未证实)

缺点:

  1. 用户可更改文档。

参考

少不读村上

读完了《刺杀骑士团长》。

开始一直以为是类似《禁闭岛》那样的表达手法,觉得当个悬疑的故事看也不错,结果直到最后一页,才发现连装神弄鬼都不是,顿时觉得六十块钱花得有点冤。单从表达手法上说,不喜欢神神叨叨的东西。凭著炒魔幻现实主义的冷饭得诺奖怕是不大可能。

故事的大致情节是:生活平淡的画家,突遇婚变,逃避现实的过程中经历一系列魔幻和现实交错的事,最后解开心结,回到现实,找到救赎。

这本书要表达的东西很多,出现的每一个主体都存在于多条叙事线中,只粗略读过一遍,大概也就理解了个皮毛。最主要的,是两个概念和五幅画。

两个概念,分别是「理念」和「隐喻」。

理念是人在自我审视下出现的另一个「我」,包括善的和恶的。象征善的理念的是「骑士团长」,一个时隐时现、身高60厘米的古代日本武士形象。象征恶的理念的是「白色斯巴鲁男子」,随时提醒「我」:你的恶,我都知道。

隐喻是人生各种经历的具象化的形象。

五幅画,分别是《刺杀骑士团长》、《免色肖像画》、《白色斯巴鲁男子》、《杂木林中的洞穴》和《真理惠肖像画》。

《刺杀骑士团长》的作用很多。首先,从这幅画引出被遗忘的二战中的往事,包括雨田具彦在奥地利和雨田继彦在南京的遭遇。其次,骑士团长于「我」,是善的理念的象征,于雨田具彦,是隐藏数十年挥之不去的心结。第三,最终「我」刺杀了骑士团长,一方面解了雨田具彦的心结,使其安详地离世,另一方面,这是「我」进入隐喻世界的前提,也是解救真理惠的必要条件。

《白色斯巴鲁男子》象征「我」的恶的理念,也是所有人的恶的理念。

《免色肖像画》引出免色这个重要角色。免色是个从世俗的各方面看都臻于完美的男人,然而这幅画真正打动他的,恰恰是表现出了那些深藏的、消极的、恶的不完美的东西。

《杂木林中的洞穴》既是魔幻的开端,也是魔幻的终点。一切魔幻的开始,源于深夜中听到的铃声。而「我」穿过隐喻世界,逃回现实世界,也发生在这个洞里。

《真理惠肖像画》。真理惠既是「我」的妹妹「路」的替身,也是免色的心结。「我」通过刺杀骑士团长、穿过隐喻世界「解救」了真理惠,实际上解开了对「路」早逝的心结。

很多年前读过《挪威的森林》,沮丧得要命,那时就认为少不读村上春树,至今如故。

鼠须管的美化

效果如下:
Ulysses_2018-04-21 20-43-42@2x

尽管鼠须管的Github仓库一直在更新,但释出版已经很久没有更新了,所以下面的美化基于网络上个人编译的版本。这篇文章里有该版本和「花园明朝」字体的下载链接,按照文中的说明替换鼠须管的程序。(注意:官方当前释出版本鼠须管不支持下文通过patch自定义配置的方式,会造成原配置信息丢失。也不支持图示的样式。

然后参考这篇文章,把新的颜色方案移植到用户配置中。

图示样式使用「dust」方案。原色彩方案的字体设置的有点小,需要把font_point和label_font_point分别从14和10修改成18和14。原方案的第一顺序字体是「HYQiHei-55S Book」,要使用图示的花园明朝字体,可以不安装或者从配置信息中去掉该字体。由于原方案中已存在的配置项不能通过patch的方式覆盖,所以只能直接修改squirrel.yaml文件。

我在用的Safari扩展

和Chrome相比,Safari更省电、需要更少的系统资源,而且Chrome还有一些莫名其妙的问题,比如在没有运行的时候,从Alfred执行搜索会启动两个窗口,一个是之前的会话,另一个是当前的搜索页面。并且,启用了一些扩展之后Safari的体验可以改进很多。所以平时用Safari更多一些。

sVim

作为注重效率的Vim党和键盘党,这种扩展是使用任何浏览器必备的东西。最常用的就是用标记打开链接的功能。

Tampermonkey

油猴脚本管理器,应该是任何浏览器必备的东西。

AutoPagerize

用Google搜索时自动滚动到下一页。

RSS Menu

当发现当前页面有可订阅的RSS链接时,在工具栏图标上显示提示。

Instapaper

稍后读工具。

Turn Off the Lights

看视频时降低网页其余部分亮度。

Scroll To Top Button

在页面右下角显示一个浮动的跳转到页首按钮。

Push for Kindle

FiveFilters.org的发送到Kindle按钮。

octotree

GitHub侧边栏。

Translate

翻译当前页。

WikiWand

优化维基百科阅读体验。

Xdebug Helper

PHP单步调试辅助工具。

AdBlock

广告过滤器。

Sessions

网页会话管理器。如果打开的页面太多,又可能在将来再用到,可以保存会话后清理掉,用到的时候再打开保存过的会话。虽然没有Chrome下的Session Buddy和Tab Snooze好用,但是解决关键问题也够了。

广告过滤工具AdBlock、Adblock Plus和uBlock的简单对比

Adblock Plus作者的那篇博客可能会影响很多人。我并不关心那些情怀的东西,只看疗效。

简单地对比了下AdBlock、Adblock Plus、uBlock在Safari for Mac上的效果,所有样本和环境均为当前最新版本。AdBlock开启Safari内容过滤后是最好的,成功地过滤掉了我常访问的一个BT下载网站上的所有广告,而不开启Safari内容过滤时,会出现部分广告先显示后隐藏的情况。uBlock漏掉了个别不容易屏蔽的。而Adblock Plus最差,缺省设置下一条都没过滤掉,在选择更多的过滤规则后才过滤掉一部分。由于样本很单一,本结论不具有普适性。

说句题外话,我觉得Adblock Plus这名字起得动机就挺不纯的,没有详细考证过,印象中这个东西是比AdBlock后出现的,而且这名字很容易让人理解成AdBlock的加强版。

变形金刚真人电影系列被重置

根据这条消息,变形金刚真人电影系列将会被新团队重置,原定在明年的第6部被取消。也就是说,看完今年大黄蜂的电影后,2021年前都不会有变形金刚主题的新片了。

这种壮士断腕的做法多少算是个好消息吧,经历了变5的失败,再让麦克尔贝这么折腾下去,变形金刚这个IP就完蛋了。

我对这件事是无可无不可的。作为一个八零后,我对变形金刚的情怀来自G1动画,所以我的关注点主要是还原G1动画风格的Master Piece系列。在MPM-3出来之前,我对电影系的玩具没多大兴趣。

当年变1上映的时候,我很难认同电影系的风格。但是后来从变1到变3,也逐渐地开始接受它,毕竟随著技术的进步,审美风格也会发生变化,没必要固守二、三十年前的东西。我对电影系最大的意见是剧情太烂,有句话很对,说一部戏好不好关键看反派角色,《蝙蝠侠之黑暗骑士崛起》之所以口碑不错,主要是大反派小丑这个角色很立体。回头说当年的G1动画最成功的一点也是霸天虎尤其威震天这个角色塑造得比较成功。反观电影系,相对于汽车人华丽的人形态和隐藏形态,霸天虎阵营就是一群猥琐的低级生物,而且人物性格的塑造极其脸谱化。

直到后来变4的时候,风格进一步变化,加入大量骑士元素,机械元素的减少导致科技感进一步下降。最要命的是变4的玩具做得实在是一塌糊涂。至于变5,那真是电影做得和玩具一样烂。

真是成也麦克尔贝,败也麦克尔贝。

iQunix F60使用感受

fullsizeoutput_392

我不喜欢冗余的东西。如果桌子足够大,我能接受的极限是87键。然而我的Filco 87圣手二代黑茶已经吃灰很久了,之前的主力是Poker II白青。所以目前主要的关注点还是在60键上。

我对Poker整体上还是比较满意的,尤其是按键编程的功能很方便。但是有两点让我很不满意。一是做工一般,键帽的活动幅度较大,远远没有Filco的扎实感。二是不支持蓝牙,无线化是一个用了就回不去的东西。

iQunix F60就是这么个东西,符合我对键盘所有的核心需求:支持蓝牙、做工好、60%布局、Cherry轴、PBT键帽。用了一段时间,整体是满意的。

买的银白色,收到的是侧刻,算是个小惊喜吧,虽然不如无刻骚气,至少不像正刻那么平庸。铝合金外框加白色PBT键帽的颜值很高,整体很有质感。

做工比Poker好很多,找回了Filco的扎实感。PBT的键帽不打油,这一点超过了Filco。

续航一般,轻度使用可以持续一周。信号强度也很一般,一米的距离,已能感受到明显的延迟。不过这些在实际的使用中不是什么大问题。

功能上,不支持键盘编程,这点不如Poker。但是可以用组合键交换左侧WIN键和ALT键,对Mac很友好。代替方向键的组合键位也比Poker合理。此外,可以用组合键切换有线和无线模式,支持在3台设备之间切换。

异地补卡下的北京中年

我妈的老SIM卡不能用在iPhone里。因为我的卡就是从大卡剪过来的,所以骑车转了一大圈,临近年关,大部分修手机的店、合作营业厅都关了,最后一个卖手机的店里的老板说这种老卡不能剪,只能换卡。

之前听附近移动营业厅里的大堂经理说,换卡需要机主本人、身份证和服务密码,而且异地补卡只能去部分较大的营业厅。这个可以在网上营业厅里查到。

事先在网上营业厅重置了服务密码。第二天一早,去了最近的可以异地补卡的营业厅。工作人员给了张纸条,让写下手机号、服务密码,他们查了一下,说是鉴权失败,让第二天再去。留了营业厅的电话,事先让他们查一下,确认可以办了再去。

第三天早上十点,打电话过去,说是办异地补卡的人还没来。十一点再打过去,查了一下,说是可以办了。去之前差点没带手机,因为感觉就是办张卡,回来装也一样。事实证明,不带会后悔。

补卡也需要用手写板签字和人脸识别,因为是2d图像识别,所以很傻,需要摇头、点头、眨眼、张嘴,在张嘴这一步重试了很多次都失败……

补的第一张卡插到手机里不能识别,第二张才成功。

总结以上,异地补卡需要注意这些点:

  • 本人、身份证、服务密码(服务密码可以去网上营业厅重置,前提是卡还在,还能接到短信)
  • 去能办理异地补卡的营业厅(可以在网上营业厅查询,或者打客服电话)
  • 不要去太早,最好事先打电话让他们查一下,确认可以办了再去
  • 一定要带手机和开卡槽的工具,现场装卡测试
飞利浦电动牙刷HX9903/42使用感受

效果虽说没别人说的夸张,也的确刷得很干净,再就是缓解了胳膊的疲劳感。

有个问题。刚开始的几天,虽然电池已经充满,但是震动强度很一般,而且手柄底部的压力警示灯一直闪,试过拔掉刷头,问题还在,说明是手柄的问题。直到提示电量紧张后第二次充电,之后才恢复正常。

App、多种刷头、多种模式、压力警示和三级震动强度都是噱头,刷个牙而已,HX6730足够了,多交的几百块钱除了智商税,也就颜值和无线充电有点价值了。

电动牙刷不是个用了就回不去的东西,不过体验确实很好,刷牙不再是例行公事和负担,而是件挺有意思的事。