米米的博客

做了一点微小的工作

还记得上一篇文章介绍的使用 Teensy 3.2 将摩尔斯电键变为键盘的方法么?经过研究,笔者决定使用 Arduino Leonardo 实现之。相比 Teensy 3.2,Arduino Leonardo 价格更低(因为在国内更流行),并且实现起来也较为简单。电键则采用全新产品,无需手动走线、打磨底座等,避免了使用二战时期古董带来的种种问题。

Arduino Leonardo

Arduino Leonardo 是基于 ATmega32U4 微控制器的开发板。它有 20 个输入 / 输出引脚(在写入程序时可以定义各个引脚的作用,其中最多有 7 个可用于 PWM 输出、12 个可用于模拟输入),一个 16 MHz 的晶体振荡器,一个 Micro USB 接口,一个 DC 接口,一个 ICSP 接口,一个复位按钮。
Leonardo 不同于之前所有的 Arduino 开发板,它没有单独的 USB 转 UART 芯片,而是直接使用 ATmega32U4 的 USB 通信功能。这使得 Leonardo 不仅可以通过串口与计算机通信,还可以模拟成 USB 鼠标或者键盘 —— 这也正是笔者选择它的原因。更多内容可以参考 Arduino Leonardo 介绍文档,在 DOCUMENTATION 选单中还包含完整电路图。

阅读全文 »

The finished Morse key sitting happily on my laptop. Full project details below.
这是最终完成的摩尔斯键盘与笔记本电脑的合影~整个项目的细节如下。

Background: I can just about remember growing up around beautifully designed analogue devices like rotary dial phones, typewriters, and record players. I've always like the idea of converting these largely defunct objects into digital devices, and my Dad's old Morse key seemed like a simple project to get started on.
背景:打从记事以来,我就生活在设计精美的模拟设备的环境中,比如旋转式拨号电话,打字机和唱片机。我一直有把这些大部分现在不常用的东西转换成数字设备的想法,而这其中,老爸的旧摩尔斯电键看起来像是一个简单的项目。

阅读全文 »

标题来自纪录片《J.K. 罗琳 —— 生命中的一年》。

不知不觉就到了 2017 年的最后一天。由于没有写日记的习惯,总感觉还是需要做些什么,以免一些事情太快被遗忘。于是决定写篇文章,记录一下这一年里的经历(实际上只是些流水账)。

阅读全文 »

北京大学卫星图

上图这张黑白照片显示的是 1972 年 5 月 29 日的北京大学,而它的拍摄者,是美国代号为 KH-4B 的间谍卫星。KH 是 Key Hole 的缩写,意指从锁眼中透窥、刺探情报。在科幻小说《三体》的「红岸之二」章节中有这样的描述:

在未来的实战中,红岸系统可以有效打击敌人的通信和侦察卫星,像美帝目前的主力侦察卫星 KH8,和即将发射的 KH9,苏修那些轨道更低的侦察卫星就更不在话下了。必要的时候,还有能力摧毁苏修的礼炮号空间站和美帝计划于明年发射的天空实验室。

作为冷战时期的敌对国家,美国间谍卫星记录下了当时几乎中国全境的高清卫星照片。到了 90 年代以及 21 世纪初,这些照片被逐步解密、公开出来。今天,我们可以通过互联网,在美国地质调查局(USGS)图片数据库中搜寻和下载这些珍贵的资料。本文将分享具体的操作方法。

阅读全文 »

最近这段时间,笔者沉迷编程,除了课内的作业需要肝 DDL 之外,也做了一些娱乐项目。下面一一道来。

生命游戏

康威生命游戏(Conway's Game of Life)是英国数学家约翰・何顿・康威在 1970 年发明的细胞自动机。它最初于 1970 年 10 月在《科学美国人》杂志上马丁・葛登能的「数学游戏」专栏出现。

概述

生命游戏是一个零玩家游戏。它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。实际中,玩家可以设定周围活细胞的数目怎样时才适宜该细胞的生存。如果这个数目设定过高,世界中的大部分细胞会因为找不到太多的活的邻居而死去,直到整个世界都没有生命;如果这个数目设定过低,世界中又会被生命充满而没有什么变化。
实际中,这个数目一般选取 2 或者 3;这样整个生命世界才不至于太过荒凉或拥挤,而是一种动态的平衡。这样的话,游戏的规则就是:当一个方格周围有 2 或 3 个活细胞时,方格中的活细胞在下一个时刻继续存活;即使这个时刻方格中没有活细胞,在下一个时刻也会「诞生」活细胞。

规则

根据前面的描述,在生命游戏中,对于任意细胞,一种典型的规则如下:

  • 每个细胞有两种状态 —— 存活或死亡,每个细胞与以自身为中心的周围八格细胞产生互动。
  • 当前细胞为存活状态时,当周围低于 2 个存活细胞时,该细胞变成死亡状态。(模拟生命数量稀少)
  • 当前细胞为存活状态时,当周围有 2 个或 3 个存活细胞时,该细胞保持原样。
  • 当前细胞为存活状态时,当周围有 3 个以上的存活细胞时,该细胞变成死亡状态。(模拟生命数量过多)
  • 当前细胞为死亡状态时,当周围有 3 个存活细胞时,该细胞变成存活状态。(模拟繁殖)

实现

可以把最初的细胞结构定义为种子,当所有在种子中的细胞同时被以上规则处理后,可以得到第一代细胞图。按规则继续处理当前的细胞图,可以得到下一代的细胞图,周而复始。
在这个游戏中,还可以设定一些更加复杂的规则,例如当前方格的状况不仅由父一代决定,而且还考虑祖父一代的情况。此外,玩家作为这个世界的「上帝」,能够随意设定某个方格细胞的死活,以观察对世界的影响。
在游戏的进行中,杂乱无序的细胞会逐渐演化出各种精致、有形的结构;这些结构往往有很好的对称性,而且每一代都在变化形状。一些形状已经锁定,不会逐代变化。有时,一些已经成形的结构会因为一些无序细胞的「入侵」而被破坏。但是形状和秩序经常能从杂乱中产生出来。
这个游戏被许多计算机程序实现了。Unix 世界中的许多黑客喜欢玩这个游戏,他们用字符代表一个细胞,在一个计算机屏幕上进行演化。比较著名的例子是,GNU Emacs 编辑器中就包括这样一个小游戏。
查看更多信息:ConwayLife.com
多平台元胞自动机模拟软件 Golly,下载地址:Golly - sourceforge
访问地址:ZSQ.IM > 应用 > 小游戏 > Life

阅读全文 »
0%