米米的博客

做了一点微小的工作

通过快捷键,可以方便地在 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%