Talk is cheap

Show me the code

调试并修复 Vue 2 应用的内存泄漏问题

其实这篇文章 几个月前就该写出来了,甚至在调试问题的过程中就已经在构思文章的结构了。但由于某些原因,一直没有动键盘笔。几天间惊闻 Vue 3 已经 RC Release 了,再不写出来,恐怕就没有人会看了。写得再早也没有人会看的吧

TL;DR

  • 不要用 <keep-alive>
  • 每次 addEventListener 都要记得在适当的时候 removeEventListener
  • 不要以为 delete domElement.onXXX 就可以移除 DOM 元素的 Event Listener ,要用 domElement.onXXX = null
  • 不要在 Vue 的 Custom Directive 的 Hook Function 中引用 vnode (即第三个参数

- MORE -

揭秘“太差了”智障电视

大概 2017 年吧,家里换了一台 TCL 电视,是在本地的家电商场买的。在自带的应用商店里面下载了几个直播与视频软件,“又不是不能用”。可是最近,这台电视突然收到了几个系统更新,变成了一个智障电视。默认桌面也变得像个视频软件一样,一直卡顿,充斥着乱七八糟的推荐内容,还把常用应用隐藏到了二级菜单里面。是时候把它修理一下了。

智障电视的默认桌面

- MORE -

网易云音乐 EAPI 中 cache_key 参数分析

最近又开始填电子云音乐的坑了。虽然新的网易云音乐客户端新的 eapi 已经被扒得差不多了,但有几个 API ('/album/v3/detail''/artist/v3/detail')的 cache_key 参数仍然不知道是从哪里来的。虽然之前也尝试着“逆向”过几次,但每次基本都是 apktool d ncm.apk 之后对着满脸的 smali 就不知道如何下手了。但这次真的太想用这几个 API 了,只能强行面向 Google 逆向,没想到居然真的搞出来了 ... 幸好这部分都是用 Java 写的,如果像请求 body 加密那样是用 native lib 实现的那我肯定又抓瞎了。

这次选用的工具是 bytecode-viewer 。一开始想用 smali2java 来着,不过因为 AUR 没有现成的包,就算了(这到底是有多懒啊)。逆向所用的版本是网易云音乐 Android 4.3.1 ,Google Play 国区最后一个版本,很久以前在 ApkMirror 下载的,现在好像找不到了,但在手机乐园仍然可以下到历史版本。

用 bytecode-viewer 打开 apk 文件后,需要耗费一点时间进行处理。这时候可以设置一下反编译器,在顶部的菜单栏 View -> Pane 1/2/3 中选择。我为 Pane 1 选择了 JADX ,因为它生成的结果看起来可读性更强一些,然后为 Pane 2 选择了JD-GUI 。不过还是建议把这几个选项都试一下。更改设置后,已经打开的文件并不会被重新反编译,只有打开新的文件之后,才会应用新的反编译器设置。

选择反编译器

- MORE -

又一个,四月的尾巴

不得不感叹时间过得好快,这次真的只剩尾巴了。

看到寝室楼里的通知,我对室友说,“过了五一假期,就要开始通宵供电了。”室友回我:“我们还有几个通宵供电呢?”而我一时竟找不出话来搪塞。原来我已经在这里经过了四个寒来暑往,是时候离开了。已经一年没有上过课了,也一年多没去过实验室了。可每次翻起手机相册里的照片,仿佛又回到了那些言笑晏晏,信誓旦旦的日子。

- MORE -

为 Telegram Desktop 生成 Emoji Sprite

Telegram Desktop 在 v1.5.8 版本中新增了自定义 Emoji 样式的功能,但这些样式我都不喜欢。辣鸡咕鸽还我小果冻!

没有一个好看的

稍微翻了一下 Telegram 的数据目录,发现下载的 Emoji 都保存在 ~/.local/share/TelegramDesktop/tdata/emoji 这个目录下,而且都是以 Spirte 图片的形式存储的。于是我们就有丰富的 hack 空间啦!

我知道没有人喜欢看这些罗里巴嗦的步骤,所以把下载链接先放在这里

UPDATE: Telegram Desktop 在 v2.1.3 版本中新增了对 Emoji 12.1 的支持,所以之前的 Sprite 失效了。虽然 Blobmoji 并没有完全覆盖,但总比没有要好 ... 新版(v2)下载连接在这里。(2020/09/27)

- MORE -

在 vue-router 中访问导航栈

vue 提供了 <transition> 组件来为组件的切换添加动画,得益于这个特性, vue-router 中的 router-view 也可以在切换路由组件时播放动画。自然的,就产生了在前进/后退时使用不同动画的需求。在 vue-router 文档的 Route-Based Dynamic Transition 一节中,提供了这样的写法:

// then, in the parent component,
// watch the `$route` to determine the transition to use
watch: {
  '$route' (to, from) {
    const toDepth = to.path.split('/').length
    const fromDepth = from.path.split('/').length
    this.transitionName = toDepth < fromDepth ? 'slide-right' : 'slide-left'
  }
}

根据路径中 / 的个数来判断路由的深度,然后以此决定播放的动画。但事情并不总是那么简单。

- MORE -

在 Arch Linux 中安装 WordPress

现在的博客程序用着挺好的,为什么去折腾 WordPress ?此中有很深刻的原因,而且我也没准备更换博客系统。不过还是踩了一些坑,得记录下来。

- MORE -

使用 GZip Bomb 对抗站点扫描工具

如果你翻看过公网 nginx 服务器的 access.log 的话,一定会发现很多尝试搞你的人。比如:

47.52.119.128 - - [12/Nov/2018:15:47:22 +0800] "POST /wp-admins.php HTTP/1.1" 404 153 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
92.154.49.175 - - [12/Nov/2018:17:37:39 +0800] "GET /mysql/admin/index.php?lang=en HTTP/1.1" 404 555 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"
14.141.146.139 - - [13/Nov/2018:02:25:17 +0800] "POST /qq.php HTTP/1.1" 405 157 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"
63.146.211.234 - - [13/Nov/2018:05:43:50 +0800] "POST / HTTP/1.1" 405 157 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"

诸如此类,懒得给这些 IP 打码了。这些类似的请求一次少说也有上百个,弄得 Nginx 的日志里面红红一片。其实一开始是懒得搭理这些东西的,毕竟对我来说也没什么损失,大不了跑点流量,反正国外辣鸡主机流量跟不要钱似的。

趁着双 11 ,剁手入了一台辣鸡主机, 2C2G 的配置看起来很是豪华。但才刚跑完 vps2arch初始化脚本 ,就发现已经有人摸到我的 IP 开始扫描奇怪的东西了。这怎么能忍?于是我决定搞点防御措施,至少要让那些只会用工具扫描的 Script Boy 们吃点苦头。

- MORE -

September Blue

第一次知道这首歌,应该是在锤科 T2 发布会 1 2 的时候。其实也不太记得到底有没有看过了,但这首歌却一直留在了我的歌单里,与一大票 V 家歌曲混在一起。印象最深的一次,是走在教学区与生活区的路口,耳机里面在放着这首歌。不过那是应该也不会是九月。

雨夜?

- MORE -

使用命令行工具处理图片

用手机拍摄的照片将要在互联网上公开转播的时候,我通常会担心两点。第一,图片的 EXIF 信息会不会泄漏;第二,尺寸太大,传输速度不理想。虽然大部分服务商都会压缩图片,但如果不是自行处理一下的话还是会感觉怪怪的。但如果使用 Krita/GIMP 之类的工具,有些杀鸡焉用牛刀的感觉。所以简简单单的命令行工具就足够了。

- MORE -