米米的博客

做了一点微小的工作

通过快捷键,可以方便地在 Linux 命令行下快速移动光标、编辑命令、编辑后执行历史命令、Bang(!) 命令、控制命令等,有效提高工作效率。

说明

  • Ctrl+K:先按住 CTRL 键,然后再按 K
  • Ctrl+KL:先按住 CTRL 键,然后再按 K 键,然后松开 K 键,再按 L
  • Alt+K:先按住 ALT 键,然后再按 K
  • Meta+K:先单击 Meta(Esc)键,然后再按 K

移动光标

  • Ctrl+ 左右键:在单词之间跳转
  • Ctrl+A:移到行首
  • Ctrl+E:移到行尾
  • Ctrl+B:往回(左)移动一个字符
  • Ctrl+F:往后(右)移动一个字符
  • Ctrl+XX:在命令行尾和光标之间移动
  • Alt+B:往回(左)移动一个单词
  • Alt+F:往后(右)移动一个单词
  • Meta+B:往回(左)移动一个单词
  • Meta+F:往后(右)移动一个单词

编辑命令

  • Ctrl+H:删除光标左方位置的字符
  • Ctrl+D:删除光标右方位置的字符(注意:Ctrl+D 也代表 EOF,当前命令行没有任何字符时,会注销系统或结束终端)
  • Ctrl+W:由光标位置开始,往左删除单词(往行首删)
  • Alt+D:由光标位置开始,往右删除单词(往行尾删)
  • Meta+D:由光标位置开始,删除单词,直到该单词结束
  • Ctrl+U:由光标所在位置开始,删除左方所有的字符,直到该行开始
  • Ctrl+K:由光标所在位置开始,删除右方所有的字符,直到该行结束
  • Ctrl+Y:粘贴 Ctrl+U Ctrl+K 剪切的内容到光标后
  • Ctrl+T:交换光标处和之前两个字符的位置
  • Alt+.:使用上一条命令的最后一个参数
  • Ctrl+_:回复之前的状态,撤销操作

另外,Ctrl+AK Ctrl+EU Ctrl+KU 组合可删除整行。

阅读全文 »

____擅于发现美的事物,并从中吸收能量,变得越来越好看。
____笑起来像个孩子,把他带在身边,能带来青春永驻的效果。
请多给予____一点睡眠时间。
____偶尔也有像天使一样温柔的时候。
____喜欢自由,适合经常带出去放养。
肚子饿了就会心情不好,带____一起去吃美味的食物吧!
____常常给身边的人带来好运。
____因为太可爱了,会令人陷入沉迷,属于正常现象。
____遇到香喷喷的东西就会变圆。
可能因为材质特殊,____对外界的攻击有折射能力。
____虽然经过多次更新迭代,但依然有颗纯真的心。
____发光的时候,可能会使对象产生短时眩晕,使用时请注意。
____拥有迷之运气,中乐透的实力异于常人。
只要缘分到了,____自己就会瘦下来。
____拥有高性能大脑,可快速运转,但过度工作(学习)容易发热。
____买买买时会释放出强大气场,胆子也会变大。
____常常因为无法体验人类的乐趣而神伤。
____是能带来元气和灵感的谜之吉祥物。
____心心念念的梦,会在某个不经意的时候实现。
____的光芒太耀眼,但也不至于会刺瞎别人。
____历经严苛质检品控,是市面上难得一遇的珍品。
只要对____倾注感情,他就能成为最可靠的伙伴,遇到危机可无限次召唤。
____的出厂设定就是温暖的守护者,也是周围人快乐和活力的源泉。
____有极为罕见的感官知觉,对他说谎可不是明智之举。
____装备了精准的探测仪,能发觉并把握住人生中真正的机会。
____能通过每次挑战完成升级,获得更高的智慧和运气。
____具备安全与稳定性,是居家、旅行必备的小能手。
____能快速拆卸烦恼,重新制作出充满乐趣和创造力的产物。
变态(萌)是____的常态。
保温杯和泡脚桶,可延长____的使用寿命。
____偶尔会孤单,但也能享受孤单,是一款自由的产品。
____对时间的感知力弱,所以不知不觉又加班了。

阅读全文 »

获取 cid

B 站的每个视频都有 aid(即 AV 号)和 cid 两个参数,而 B 站新的 bvid(BV 号)可以通过 Base58 编码与 aid 互相转换。aidbvid 通过视频的链接就可以获取,而 cid 有以下两种方法查询:

  • 在已知视频 aid 的情况下,可以通过链接 https://api.bilibili.com/x/web-interface/view?aid=10492 获取 cid(将 10492 替换为你要查询的视频的 aid)。
  • 在已知视频 bvid 的情况下,可以通过链接 https://api.bilibili.com/x/web-interface/view?bvid=BV1Lx411a7NQ 获取 cid(将 BV1Lx411a7NQ 替换为你要查询的视频的 bvid)。

对于有许多分 P 的视频,它们的 aid 相同,每个分 P 则对应一个不同的 cid。而在同一个页面下的番剧、影视等内容,每一分集的 cid 也是唯一的。使用上述 API 返回的是 JSON 格式,并且包含了该视频下所有分 P 的 cid,需要进一步处理。
视频的更多信息则可以通过 https://api.bilibili.com/view?type=jsonp&appkey=8e9fc618fbd41e28&id=10492 获取。

获取弹幕

视频的弹幕文件采用 xml 格式存储,地址与其 cid 有关,为 https://comment.bilibili.com/$cid.xml(将 $cid 替换为视频的 cid)。

弹幕内容的存储方式为:

1
<d p="0,1,25,16777215,1312863760,0,eff85771,42759017">前排占位置</d>

这个元素中的各个参数由逗号分割,其意义分别为:

  • 弹幕出现的时间,以秒为单位
  • 弹幕的模式:1~3 滚动弹幕 4 底端弹幕 5 顶端弹幕 6 逆向弹幕 7 精准定位 8 高级弹幕
  • 字号:12 非常小 16 特小 18 小 25 中 36 大 45 很大 64 特别大
  • 字体的颜色:将 HTML 六位十六进制颜色转为十进制表示,例如 #FFFFFF 会被存储为 16777215,因为
  • Unix 时间戳,以毫秒为单位,基准时间为 1970-1-1 08:00:00
  • 弹幕池:0 普通池 1 字幕池 2 特殊池(注:目前特殊池为高级弹幕专用)
  • 发送者的 ID,用于「屏蔽此弹幕的发送者」功能
  • 弹幕在弹幕数据库中 rowID,用于「历史弹幕」功能

将 Bilibili 弹幕的 xml 文件转为 ass 字幕,可以使用以下脚本:
bilibili ASS 弹幕在线转换
us-danmaku

关于 ass 字幕格式可以参考以下文章:ASS 字幕格式规范

拓展阅读:
Bilibili 视频播放页面接口整理(不定期更新) - 知乎
Bilibili 爬取视频信息进行数据分析

本文更新于 2020 年 12 月 29 日:
增加了关于 BV 号的描述。

如果一段程序的代码运行之后,产生的输出和其自身的源码完全相同,那么这段程序就被称为 Quine,以哲学家 Willard van Orman Quine(1908-2000)而命名。
Quine 在任何图灵完备,且能输出任意字符串的语言中都是可行的。在可计算性理论(computability theory)中,图灵等价指的是:对于两个计算机 A 和 B,如果 A 可以模拟 B,B 可以模拟 A,就称他们是图灵等价的。根据「丘奇 - 图灵」理论,图灵机是表达能力最强大的计算系统,对现实世界中的任何计算机,都可以用图灵机来模拟它。而如果一个编程语言可以完全模拟图灵机,那么它就是图灵完备的。
大部分编程语言都是图灵完备的,在这些语言中,构造 Quine 的思路也是类似的。Quine 中往往需要包含数据和程序两部分。数据是程序的表示(例如将程序中的特殊字符编码,存储在一个字符串中),而程序负责解析数据并将其输出。此外,利用一些语言的语法特性也可以构造出比较简单的 Quine。


Bash

1
z=\' a='z=\\$z a=$z$a$z\; eval echo \$a'; eval echo $a

JavaScript

1
!function $(){console.log('!'+$+'()')}()
1
var s = 'var%20s%20%3D%20%27__%27%3B%20console.log%28unescape%28s%29.replace%28%27__%27%2C%20s%29%29'; console.log(unescape(s).replace('__', s))

Python 3

1
2
r='r=%r\nprint(r%%r)'
print(r%r)
1
2
3
x='y="x="+repr(x)+"\\n"\nprint(y+x)'
y="x="+repr(x)+"\n"
print(y+x)

C

1
char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}
1
main(){char s[]="main(){char s[]=%c%s%c;printf(s,34,s,34);return 0;}";printf(s,34,s,34);return 0;}
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
char buff[80];
int main() {
FILE *fp;
fp = fopen(__FILE__, "r");
while (!feof(fp)) {
printf("%s", fgets(buff, 79, fp));
}
fclose(fp);
}

上面这个有些赖皮,直接读取并输出了源代码。有些 Quine 规则会不允许这样做。

阅读全文 »

APK,即 Android 应用程序包(Android application package),是 Android 操作系统中用于分发和安装移动应用及中间件的文件格式。一个 Android 应用程序的代码想要在 Android 设备上运行,必须先进行编译,然后打包成为一个被 Android 系统所能识别的文件,其格式便是 APK。一个 APK 文件内包含被编译的代码文件(.dex 文件,即 Dalvik executables),文件资源(resources), assets,证书(certificates),和清单文件(manifest file)。

APK 文件基于 ZIP 格式进行压缩,它与 JAR 文件的构造方式相似。因而,直接解压 APK 文件可以得到一部分内容,如 classes.dex 等。如果要进行更详尽的分析,就需要用到反编译的工具了。

准备工作

下载 apk 反编译组件

需要下载的程序包括:

一些论坛里会把它们称为「APK 反编译三件套」。

前两个程序可以通过 Homebrew 进行安装:

1
brew install apktool dex2jar

Homebrew 同时也会将 openjdk 作为依赖包装好。

JD-GUI 需要点击上面的官网链接下载,选择 jar 格式的即可。

阅读全文 »
0%