米米的博客

做了一点微小的工作

前言

最近在知乎上看到一个关于 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!! 查看。

Heavens Above 是一个天文数据库网站,可以查询到诸如卫星过境的很多信息。虽然数据很全面,但是检索方式非常繁琐,在网站上需要依次打开多个链接进行比对,难以迅速地获取需要的信息。故笔者决定写一个爬虫,以直观地展现所有数据。由于 Heavens Above 采取了大量的反爬虫措施,例如校验 Cookie、限制单个 IP 的访问次数等,因此必须严格地模拟浏览器请求,才能正确爬取数据。

Heavens Above数据收集

笔者也参考了大量 GitHub 上已有的 Heavens Above 爬虫项目,不过它们大部分失去维护,停留在数年前,已经不再适用。具体的逻辑还是要自行测试。

项目地址:heavens-above

It's kind of painful to re-live this one. As a programmer, you learn to blame your code first, second, and third... and somewhere around 10,000th you blame the compiler. Well down the list after that, you blame the hardware.
回想起这个 bug,仍然让我感觉有些痛苦。作为一个程序员,在发现 bug 时,你学会了首先在自己代码中找问题,一次、两次、三次…… 或许在测试一万次之后,你会把问题归咎于编译器。只有在这所有的都不起作用之后,你才会把问题归咎于硬件。

This is my hardware bug story.
这是我遭遇硬件 bug 的故事。

Among other things, I wrote the memory card (load/save) code for Crash Bandicoot. For a swaggering game coder, this is like a walk in the park; I expected it would take a few days. I ended up debugging that code for six weeks. I did other stuff during that time, but I kept coming back to this bug -- a few hours every few days. It was agonizing.
抛开别的不说,我曾为古惑狼(Crash Bandicoot,PS1 游戏)写存储卡(读写)代码。对于一个自大的游戏程序员,这就像是在公园里散步一样轻松愉快;我预计只要几天就可以写完。我最终用了六个礼拜把那些代码调试完毕。在此期间我也做过一些其他的事情,但却一直绕不开这个 bug—— 每几天内就要花上好几个小时来处理。这个 bug 实在烦人。

The symptom was that you'd go to save your progress and it would access the memory card, and almost all the time, it worked normally... But every once in a while the write or read would time out... for no obvious reason. A short write would often corrupt the memory card. The player would go to save, and not only would we not save, we'd wipe their memory card. D'Oh.
这个 bug 的症状是,当你需要保存你的进度时,代码会访问存储卡,而大部分情况下没有什么问题… 但是偶尔读写会超时… 没有任何明显的原因。一个简短的写入经常毁掉存储卡。玩家要保存进度,我们不仅不保存,还擦除他们存储卡上的全部东西。天哪。

After a while, our producer at Sony, Connie Booth, began to panic. We obviously couldn't ship the game with that bug, and after six weeks I still had no clue what the problem was. Via Connie we put the word out to other PlayStation 1 developers -- had anybody seen anything like this? Nope. Absolutely nobody had any problems with the memory card system.
过了一段时间,我们在 Sony 的制作人 Connie Booth 慌了。我们显然不能发布带有这个 bug 游戏,而六个星期之后我对于问题出在哪一点线索都没有。通过 Connie 我们向其他 PS1 开发者求助:有没有人出现过像我们这样的情况?没有。绝对没有任何人在存储卡系统上出现任何问题。

About the only thing you can do when you run out of ideas debugging is divide and conquer: keep removing more and more of the errant program's code until you're left with something relatively small that still exhibits the problem. You keep carving parts away until the only stuff left is where the bug is.
在你绞尽脑汁之后,你能做的唯一一个调试方法就是分而治之:一点点去除错误程序中的代码,直到留下的代码相对很少,但仍然表现出问题。像雕刻一样去除没有问题的代码,留下的就是你的 bug 所在。

阅读全文 »

月下独酌
李白
花间一壶酒,独酌无相亲。
举杯邀明月,对影成三人。
月既不解饮,影徒随我身。
暂伴月将影,行乐须及春。
我歌月徘徊,我舞影零乱。
醒时同交欢,醉后各分散。
永结无情游,相期邈云汉。

八月十五夜月
杜甫
满月飞明镜,归心折大刀。
转蓬行地远,攀桂仰天高。
水路疑霜雪,林栖见羽毛。
此时瞻白兔,直欲数秋毫。

十五夜望月
王建
中庭地白树栖鸦,冷露无声湿桂花。
今夜月明人尽望,不知秋思落谁家!

南斋玩月
王昌龄
高卧南斋时,开帷月初吐。
清辉澹水木,演漾在窗户。
荏苒几盈虚,澄澄变今古。
美人清江畔,是夜越吟苦。
千里共如何,微风吹兰杜。

中秋月
苏轼
暮云收尽溢清寒,银汉无声转玉盘。
此生此夜不长好,明月明年何处看。

中秋月
齐已
空碧无云露湿衣,众星光外涌清规。
东林莫碍渐高势,四海正看当路时。
还许分明吟皓魄,肯教幽暗取丹枝。
可怜关夜婵娟影,正对五候残酒卮。

阅读全文 »
0%