米米的博客

做了一点微小的工作

在数据传输的时候,并不是所有的字符都可以受到支持,很多时候只能传输可见字符,对于不可见字符的传输需要经过特殊处理,这就是 Base64 产生的原因。Base64 编码是一种基于 64 个可打印字符来表示二进制数据的表示方法。由于,所以每 6 个比特为一个单元,对应某个可打印字符。3 个字节有 24 个比特,对应于 4 个 Base64 单元,即 3 个字节可由 4 个可打印字符来表示。在 Base64 中的可打印字符包括字母 A-Z、a-z、数字 0-9,这样共有 62 个字符,此外两个可打印符号在不同的系统中而不同。一些如 uuencode 的其他编码方法,和之后 BinHex 的版本使用不同的 64 字符集来代表 6 个二进制数字,但是不被称为 Base64。
Base64 常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括 MIME 的电子邮件及 XML 的一些复杂数据。用 Base64 编码图片也是互联网上常见的做法。

Base64 的字符索引如下表所示:

数值字符数值字符数值字符数值字符
0A16Q32g48w
1B17R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/

这是一个根据上表进行编码的例子:

如果要编码的字节数不能被 3 整除,最后会多出 1 个或 2 个字节,那么可以使用下面的方法进行处理:先使用 0 字节值在末尾补足,使其能够被 3 整除,然后再进行 Base64 的编码。在编码后的 Base64 文本后加上一个或两个 = 号,代表补足的字节数。也就是说,当最后剩余两个八位字节(2 个 byte)时,最后一个 6 位的 Base64 字节块有四位是 0 值,最后附加上两个等号;如果最后剩余一个八位字节(1 个 byte)时,最后一个 6 位的 Base 字节块有两位是 0 值,最后附加一个等号。可以参考下面的例子:

阅读全文 »

即将到来的 12 月天宇将先后上演「金星最亮」「双子座流星雨极大」「水星西大距」和「小熊座流星雨极大」等多部天象大片,天文爱好者们千万不要错过。

火星合海王星

2018 年 12 月 7 日入夜后西南方天空将可观赏到火星合海王星的天象,火星将至海王星北面 0.04 度(相当于 2 角分)的近距离通过,位于宝瓶座。火星视亮度 + 0.1 等,海王星 + 7.9 等,需用小型望远镜观测。

火星合海王星

双子座流星雨极大期

每到岁末,双子座流星雨(Geminids,00004 GEM)都会如期而至。作为北半球三大流星雨之一,它的流量非常稳定,并且全球绝大多数地区的公众都有机会观测到它。今年双子座流星雨的观测条件不错,预报的极大值出现在 12 月 14 日晚 20 时 30 分,天顶每时出现率 ZHR 为 120。

辐射点在 12 月 14 日入夜后自东北偏东方升起,即入夜后就有机会见到双子座流星出现。今年月相接近上弦,但对观测影响不大,尤其是后半夜观测条件很好,但要注意防寒保暖。

双子座流星雨

水星西大距

12 月 15 日,今年最后一次水星西大距将上演。如果大气透明度足够高,在此后几天的日出前,用肉眼或借助双筒望远镜均可在黎明前的东方低空寻觅到水星的神秘身影。

水星西大距

水星的视运动是这样的:东大距 → 半轮 → 近日点 → 留 → 下合 → 极长视直径 → 留 → 降交点 → 半轮 → 西大距 → 远日点 → 极短视直径 → 上合 → 升交点 → 东大距,周期是 116 日(水星的会合周期),而水星东大距 → 西大距平均间隔为 41 天。这次水星西大距,日出时位于东南方天空,与太阳的最大角距为 21 度,亮度约 - 0.5 等,是今年观测水星的第四次最佳时机。

小熊座流星雨

小熊座流星雨(Ursids,00015 URS)往往是全年精彩天象的收官之作,该流星雨的活动期为 12 月 17 日至 12 月 26 日。天文预报显示,今年该流星雨极大可能出现在 12 月 22 日 4 时 53 分。

小熊座流星雨

小熊座流星雨在 1949 年和 1986 年曾出现过两次爆发,但今年没有爆发的预期,届时每小时最大天顶流量为 10 颗左右,而且极大正好赶上满月,观测条件不是太好。


部分图片来自维基百科,采用 CC BY-SA 3.0 许可证,作者为 Brocken Inaglory 以及 Brian Murahashi 和 Jim Albers。部分图片来自 Stellarium,该软件为开源软件,采用 GPL3.0 协议。

拓展阅读:Can You Spot December’s Ursid Meteors?

从 OS X Yosemite 系统开始,Safari 浏览器的顶部工具栏加入了类似 iOS 中的半透明毛玻璃效果。Safari 会自动根据页面的颜色来显示工具栏的毛玻璃特效颜色,而通过 CSS 中的 body:before 类,我们可以对其进行定制。具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@media screen and (-webkit-min-device-pixel-ratio: 0) {
body:before {
right: 0;
top: 0;
left: 0;
height: 100px;
z-index: 2147483647;
position: fixed;
content: "";
display: block;
-webkit-transform: translateY(-99.99px);
background: linear-gradient(124deg,
#FF0000,
#FF7F00,
#FFFF00,
#7FFF00,
#00FF00,
#00FF7F,
#00FFFF,
#007FFF,
#0000FF,
#7F00FF,
#FF00FF,
#FF007F,
#FF0000);
animation: rainbow 15s ease infinite;
background-size: 1000% 1000%;
}
}
@keyframes rainbow {
0% {
background-position: 0% 80%;
}
50% {
background-position: 100% 20%;
}
100% {
background-position: 0% 80%;
}
}

将它们添加到页面中的 <style> 标签内,并在 <body> 中加入适当的内容。当使用 Safari 浏览器打开时,略微向下滚动页面,便可以看到顶部栏出现炫酷的彩虹效果。快去试试吧!
注意:一些老旧浏览器不能正确识别 transform,会导致彩色条挡住 <body>-webkit-min-device-pixel-ratio 可以防止这一问题。
GitHub 项目地址:rainbowsafari

本文更新于 2021 年 9 月 22 日:
Safari 15.0 修改了顶栏颜色的显示方式,这一方法不再有效。

前言

国际单位制以一组基本单位为基础,所有其他单位都是用基本单位建立起来的。麦克斯韦最初提出一致单位制的概念时,列出了三个可用的基本单位:质量、长度及时间单位。之后,吉奥尔吉提倡加入电的基本单位。理论上,电流、电势、电阻、电荷等物理量的单位都可以做基本单位,当选定其中一个做基本单位后,其余的电单位都可以通过物理定律从基本单位推导得出;国际单位制最终选择了使用电流。后期又加入了三个分别量度物质的量、温度及发光强度的基本单位。
国际单位制希望其单位定义的基准是源自于对自然的测量。但此单位制于 1799 在法国被引入时,由当时技术上的限制,因此利用了米原器与千克原器做为米与千克的定义。
1960 年,米的定义被改写为由特定光源所发出的光波长(后又改为根据真空光速定义),因此米定义的基准也成为了对自然测量的结果。现今,只留下了千克还是以人造的物品做为定义的基准。
2018 年 11 月 16 日,第 26 届国际计量大会一致通过了新国际单位制基本单位定义的提案。新的定义将于 2019 年 5 月 20 日生效。
国际度量衡局提案,除了光速以外,下列所示的四个自然常数也应被定义为确定的数值:

  • 普朗克常数
  • 基本电荷
  • 玻尔兹曼常数
  • 阿伏伽德罗常量

这些常数在 2006 年版的 SI 指南就已经出现,但在此版本中后三个常数被定义为「由实验所得的常数」,而不是直接的「定义常数」。
国际度量衡局也提案,以下这些自然常数的数值应继续保持不变。

  • 光速
  • 铯 133 原子基态超精细能级分裂频率
  • 频率为辐射的发光效率

这是以上七个定义改写为以基本单位表示的形式:

此外国际度量衡局也要求:

  • 目前千克的定义应废除并使国际千克原器退休
  • 目前安培的定义应废除
  • 目前开尔文的定义应废除
  • 目前摩尔的定义应修改

这些改变会影响到基本单位的定义,但对于导出单位的表达形式则不会有所影响。

阅读全文 »

前言

最近在知乎上看到一个关于 VPS 有趣的用途的问题,其中一个回答提到了可以搭建 Telnet 服务器,成功运行后别人用 Telnet 连接你的主机将会看到 Nyancat 动画。大致效果如图所示:

Nyanyanyanyanyanyanya!

然而,回答中给出的 Demo 已经失效,telnet nyancat.dakko.us 会返回一个 Connection refused 错误。不过值得庆幸的是,这个项目的官方网站 Nyan Cat Telnet ServerGitHub Repo 都还可以正常访问,因此可以尝试重新把它搭起来。不用着急,这个过程并不复杂,请按照以下方法操作即可。

下载编译

在命令行执行:

1
2
3
4
git clone https://github.com/klange/nyancat.git
cd nyancat
make
cp src/nyancat /usr/bin #or make install

这时,通过 nyancatnyancat -t 命令就可以查看效果。接下来把 Telnet 配置好就行了。

配置 Telnet

使用包管理工具安装 xinetd,例如

1
yum install xinetd

然后在 /etc/xinetd.d 目录下新建文件 nyancat,内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
group = root
server = /usr/bin/nyancat
server_args = -t
log_on_failure += USERID
disable = no
instances = 10
per_source = 2
}

其中 instancesper_source 限制了总的连接数和单个 IP 的连接数。
接下来,重启 xinetd 服务:

1
systemctl restart xinetd

这时,你就可以通过 telnet localhost 查看是否能显示出画面。如果没有问题,配置防火墙开放 23 端口,就可以从公网访问了。试试用 Telnet 连接你的主机,效果是不是非常酷炫?
不过,笔者在实践中发现,开放 telnet 的 23 端口可能会产生大量异常流量。解决方法是修改 telnet 的端口号,编辑 /etc/services,找到 telnet,将 23 改为一个你喜欢的数字(比如 8080)。或者,可以在不需要使用时直接关闭这个服务,在 nyancat 中设置 disable: yes 即可。

更多

俗话说,有光的地方就有 Bad Apple!!。很久以前的一篇文章近期完成的数个游戏及应用中,就提到笔者成功使用 HTML 页面播放 Bad Apple!! 字符画。目前,笔者正在尝试搭建一个可以播放 Bad Apple!! 的 Telnet 服务器,敬请期待。


本文更新于 2019 年 2 月 14 日:
笔者通过魔改 Nyancat 的代码,成功地实现了可以播放 Bad Apple!! 的 Telnet 服务器。可以阅读文章用 Telnet 观看 Bad Apple!! 查看。

0%