楔子
· 从标题也能看出,这是在读<<编码-隐匿在计算机软硬件背后的语言>>时做的学习笔记;
· 按照文章的每一章节的内容来做的笔记,我总结了每一章大概的内容、写下来自己的认知并记录下了我在每一章中感兴趣的内容;
第一章、 至亲密友
· 如果一种编码可以用在其他编码无法取代的地方,那么它就是一种有用的编码
· 这一章作者用了一个两个10岁小孩子(就住在对面,两人的房间之间就隔着一条街)如何在关灯之后继续聊天交流
的例子来诠释了何为编码,结合莫尔斯编码表示了只要有两个不同事物,经过不同的排列组合之后,就可以表示所有类型的信息
(莫尔斯编码就是使用短闪和长闪这两种闪烁来表达各种字符)
· ps:出于兴趣,下面列举一下部分莫尔斯编码
A | ·- | J | ·--- | S | ··· |
B | -··· | K | -·- | T | - |
C | -·-· | L | ·-·· | U | ··- |
D | -·· | M | -- | V | ···- |
E | · | N | -· | W | ·-- |
F | ··-· | O | --- | X | -··- |
G | --· | P | ·--· | Y | -·-- |
H | ···· | Q | --·- | Z | --·· |
I | ·· | R | ·-· |
第二章、 编码与组合
· 这一章中,继续通过莫尔斯码找出了点与划的数目与码字的数目之间的关系,即:
$${码字的数目} = {2}^{“点”和”划”的数目} $$
· 为了更方便理解莫尔斯码的解码过程,可以构建下图的树形图:
ps: 当我们对一串码字进行解码时,只需按照箭头顺序从左到右进行查找,例如现在有个序列为”-·-“,首先先选择划分支,之后继续沿着箭头,选择点分支,最后沿着箭头,选择划分支,就能找到你要的字符是K
· 最后,莫尔斯码也被称为二进制码,因为这种编码的组成元素只有两个—–”点”和”划”,莫尔斯码和二元对象都常常使用2的乘方来进行描述;由此,我们引出了二进制编码
第三章、 布莱叶盲文与二进制码
· 顾明思义,这一章是通过介绍布莱叶盲文来更好的理解二进制码
1. 何为布莱叶盲文
·· 路易斯·布莱叶应该算是第一个将书面语言的字母成功编码的人,虽然他比莫尔斯晚出生18年,但他很早就创建了自己的编码规范,下面先简单介绍下他的生平:
·· 布莱叶3岁时在父亲的工作间弄伤了眼睛,但他并没有自暴自弃,而是对世间的事物有种强烈的求知欲,10岁时在小镇的牧师和一名学校老师的帮助下,被送往巴黎皇家盲人学校学习,而布莱叶在12岁时就很熟悉了一种文字系统(法国一位军官查尔斯·巴比尔发明的一种文字系统,本质为利用凸起的点和划的组合来表示文字),在3年后他创建了自己的系统,而该系统中的一些基本规范直到今天仍在被人们所使用,虽然很长一段时间,这种文字系统只在他们学校为人熟知,但最终渐渐的传向了全世界,1835年,布莱叶患上了肺结核,1852年,在布莱叶43岁生日刚过不久,病魔就夺走了他的生命。 R.I.P
·· 何为布莱叶盲文?
即在书写文字中用到的符号(字母、数字和标点符号等)都被编码成2×3的点码单元中的一个或者多个凸起的点,这些点码单元包含的点通常使用1~6的数字来编号,如下图:
而我们可知这些点码都是二进制的(因为一个点不是平的就是凸的)所以如果按照之前我们了解过的,总共6个点,那么能够表示$$2^6=64$$种不同的码字
·· 接下来开始真正分析_布莱叶盲文_:
①:首先先看基本的小写字母表,如下图:
由上图,如果我们要写”you and me”的话,用布莱叶盲文会表示成如下组合:
从其中我们可以看出,一个单词中每个字母所对应的点码单元之间都用一小块空白分开,而单词之间则是用一个大空格(即一个全是平的点码单元)所分隔开。
这就是布莱叶制定的基本规范,这里注意没有出现”w”这个字母的编码,这是因为在传统的法语中不会用到它,不要慌,这个字母最后还会出现的;至此,64个码字中只使用了25了;
Ps: 这里注意下这个小写字母表,如果分别将第一行与第二行比较、第一行与第三行比较,你将会发现其规律:
a. 第一行(字母a~j)只用到了点码单元中最上面的四个点—–第1、2、4和5点;
b. 第二行(字母k~t)则是在复用了第一行的编码的基础上,把第3个点改为了凸点;
c. 第三行也是如此,只是将第3和第6个点改为了凸点;
②: 接下来我们看下二级布莱叶盲文(是在英文出版物中最常用的盲文系统),其使用了很多的缩写,例如:如果字母的码字单独出现,它就表示一个普通的单词
,如下图所示:
如此的话,前面的短语”you and me”使用二级布莱叶盲文就可以表示为:
③:至此的话,我们已经描述了31个码字—–单词间的大空格(即_没有凸点的点码单元_)以及总共3行每行10个的字母和单词码字;
④:虽然距离64个好像还相差甚多,但是别慌,我们慢慢往下看;首先我们可以使用字母a~j的码字加6号凸点的组合,这种新码字通常用来表示单词中字符串的缩写,还有前面我们所担心的w字母(ps:这里w字母的编码在单独出现的时候也表示一个单词),如下图:
这样的话,单词”about”使用二级布莱叶盲文可以记为:
⑤:之后,我们还可以取从a到j的码字,”降低”他们使用的点位,即从1、2、4、5点降到2、3、5、6点,这样就得到了新的码字;这些码字根据上下文环境,它们常常被用来表示一些标点符号或字符串缩写,如下图:
这里需要主要的是,上图中虽然左右括号使用的是相同的码字,但是开闭引号使用的确是不同的码字。
⑥:至此,我们已经使用了_51个码字_了。而其中”占用3、4、5和6号点”的码字还有很多组没有定义,例如下面这六组:
我们也用它们来表示一些字符串缩写和其他的标点符号。
Ps: 注意,上图中表示字符缩写的“ble”的码字很重要,当它不是用来作为单词的一部分时,它的出现就意味着:之后的码字应该被译为数字
,表示数字的码字与表示字母的a到j的码字是相同的,如下图:
因此,下面这组编码,表示的就是数字256。
⑦:此时,我们已经使用了 57个码字 了,而若要继续下去,我们还需定义7个码字才能用满原有的64个码字,这7个码字如下:
第一个码字:表示音调符号;
其他码字则表示缩写的前缀或者其他功能:
a. 上表的第五个码字,根据上下文表示小数点或者强调符号
b. 第六个码字表示与”数字标识符”相对应的”字母标识符”
⑧:最后,目前我们的64个码字已经全部使用了,那么,如何写大写字母来?答案很简单,我们有6号凸点(即大写标识符),它表示:它之后的字母将译为大写
,例如,我们可以将这套文字系统的原创者的名字(布莱叶嘛)记为:
这串编码分别表示了:一个大写字母标识符、字母i、缩写字符串ou、字母i和s,以及一个空格,再加一个大写字母标识符,还有字母b、r、a、i、l、l、e。(实际应用中,可能会将名字末尾不发音的两个字母省略掉)
2. 总结:
·· 综上所述:我们将6位二进制码(实际上是6个点)所能表示的64种可能的编码都罗列了一遍;而且,其中的很大一部分,根据上下文的不同将有双重身份。
·· “优先码”(或“换挡码”):它们用于改变作用域内编码的含义,直到作用域结束;例如:数字标识符和取消”数字标识状态”的字母标识符
·· “逃逸码”:让你”逃离”对编码串单调的、一成不变的解析,而转入到一种新的解析方式中;例如:大写字母标识符表示紧随它的字母(而且仅仅是紧随它的字母)应该译为大写
·· 在使用二进制码对书面语言进行编码时,换挡码和逃逸码是很常见的。
第四章、 手电筒的剖析
·· 这一章让我感觉到了这位作者的学识,不止在计算机方面,在’电学’方面也有不少了解,果然知识是无穷尽的,学习的越多,你才能更好的了解这个世界,这也是我最近的感受,学就完了。
·· 回归正题,这一章就是通过手电筒来介绍电流的工作原理,由此介绍出了原子(质子+中子+电子组成),是电子的移动产生的电流,由此阐释了手电筒中使电子流动起来的是电池(ps:感觉回到了高中,对着个电路图写欧姆定律的时候了),当电路连接时,电子会从电池的﹣级转移到﹢级
,如下图:
·· 电池为电路提供了电能,反过来也可以理解为电路为电池内的化学反应提供了条件;
·· 同时还介绍了下导体(即如果原子在最外电子层中只含有1个电子,那么这个电子就很容易逃逸,这就是易导电物质的特性)和绝缘体(即具有阻抗性的物质),但这并不是绝对的,在足够高的电压下,任何物质都是可以导电的;
·· 导线越长,阻抗越高;导线越粗,阻抗越低。
·· emmmm,开始怀疑这本书到底是个啥,啥知识都有,各种历史人物,不过很有趣~
·· 后面真的开始讲电流、电压、欧姆定律了,不过关于电流电压的比喻我觉得很不错,用‘水和水管’来类比电流电压:电流可以看成是水管中流水的量,电压可以看成是水压,阻抗则有些类似水管的宽度,水管越细,阻抗越大
·· 白炽灯发光原理:如果导线电阻较低的话,他将会变热并发光;
总结:
通过对手电筒的’简单剖析’,其实目前这章提出的关联,也只是简单的手电筒要么开、要么关,没有别的状态,这一特点类似于二进制码。但后面我们会看到更多的 二进制码与电气电路之间的相似性
第五章、 绕过拐角的通信
· 这一章作者又用了一个好玩的例子来继续阐释编码,这个例子中你搬家了,你最好的朋友这次住在了隔壁,你们的卧室的窗户朝着相同的方向,这样就不好直接用手电筒来进行’夜间交流’,但是现在你已经学会了一些电路知识,于是你利用上一章的知识,相当于在你和你朋友家装了个手电装置(emmmm,脑洞大开的作者,不过我喜欢~),如下图:
但是这样是两个相互独立又完全相同的系统,你可以对此进行改进,如下图,这样你就可以节省25%的导线了:
现在这两个电池的负极被连在一起,但是这两个回路依然是相互独立的,虽然看起来有点’连体婴儿’的意思;这种连接方式被称为公用连接,这个电池的公用部分,从最左端的灯泡与电池的连接点开始,到最右端的灯泡与电池的连接处结束,上图中我们用两个小圆点给标示了出来。
· 接下来会有个问题,如果你们这个整个系统要实现的话必须铺设很长的线路的话,那该怎么办来?思路可以是这样子的:我们不必用导线来完成电路的公共部分,你可以用其它的东西来代替导线,例如:地球,即接地
· 那么如何使地球充当导体?这里有一个比较实际又不错的方案:即使用一个至少8英尺长、1/2英寸粗的铜柱电极;
,你可以使用一个大锤把这个电极锤进地里,然后上面接根导线即可
· 由此,在一对铜柱电极的帮助下我们只用了两根导线,就冲破了你与你朋友家高墙之间的阻隔,构建了一个双向的莫尔斯码发送系统;如下图:
上面这条电路在功能上与之前的那个电路是完全一样的,而之前那个电路我们需要三根导线,到这里我们只需要2根导线就可完成~
· 总结: 本章中,我们在通信的演变中卖出了很重要的一步,本来使用莫尔斯码交流时,需要在视线直视的范围内,而随着导线的使用,我们可以构建出一个可以绕过拐角、在视线之外发报的系统,而且我们自己再也无需受距离的限制,理论上我们已经可以在任何距离进行通信,只要有足够长的线路即可;
最后,其实这里还是有个问题,就是随着导线的增长电阻会不断增加的问题,这个其实在高中物理中也有设计,解决方法有两种:①使用电阻小、粗一点的导线 ②增加电压
,但是第一种比较贵,第二种则需要解决高压电带来的影响问题
第六章、 电报机与继电器
· 写在前头,这一章让我对萨缪尔·莫尔斯(电报机的发明者)这个人有了更加多的敬意,这才是天才的人生,除了发明了电报机这一伟大创举外,还曾在伦敦学习艺术,在耶鲁大学深造,后来成为了一名成功的画家;1836年以独立候选人的身份参与竞选纽约市市长,获得了5.7%的选票;还是学习了银板照相术等等等等(虽然最广为人知的是他的电报机和莫尔斯码),让人羡慕的一生,希望我以后的人生也会精彩些。
· 这一章是通过介绍莫尔斯的电报机,来表达了远距离通信的实现,同时引出了继电器(由电流控制做到信号传输的稳定吧算是)
1. 电报机出现背景:
· 在19世纪早期,你可以进行即时通信或远距离通信,但二者兼备是无法做到的;
· 即时通讯受到声音传播距离的限制或受视野的限制;
· 使用信件可以进行更远距离的通信,但耗费时间长;
2. 电报机原理:
· 理论上来说,电报机的原理是很简单的:在线路的这一端采取一些措施,使得线路另一端发生某种变化
· 只是此时莫尔斯先生不会用灯泡作为它的信号发生装置,因为最早的灯泡在1879年才被发明出来;因此,作为替代手段,莫尔斯先生选择的是利用电磁现象
· 电磁铁是电报机的基础,在线路的一端闭合或者断开开关,可以使线路另一端的电磁铁有所动作
· 莫尔斯的第一个电报机比后面演化出来的版本要复杂,因为他认为:作为发报系统,应该能确实的在纸上写出什么东西才对,最终莫尔斯在1836年通知专利局,成功发明了电报机,但是直到1843年,他才说服国会,为其创立了一个公共基金;
· 1844年5月24号,第一条电报机线路架设完成,第一条信息被成功传递:’What hath God wrought!'
· 传统电报机中用来发消息的电建,如下图:
· 若需要长时间使用电键,最舒适的方法是:用拇指、食指和中指握住手柄,轻击它使其上下移动。保持电键按下状态的一小段时间,就会产生一个"点"的莫尔斯码,按下状态保持时间更长一些就会产生一个"划"的莫尔斯码
· 线路另一端是一个接收器,它主要是由一块电磁铁拉动一根金属杆构成的;最初,电磁铁控制的是一支钢笔,有一个装置通过使用一个压紧的弹簧来拉动一卷纸经过设备,与电磁铁连接的钢笔就会弹起或落下,在纸上画出点或划;
· 而后来电报操作员发现,他们可以很轻易的通过听钢笔弹起和落下的声音来翻译电码,因此在传统电报机的”发生器”的帮助下,钢笔最终被废弃,接收端看起来如下图:
· 如上图:当电报机的电键按下时,发生器中的电磁铁拉动上面的活动横杠下降,它会发出”滴”的声音,当松开电键时,横杠会回到原来的位置,发出”嗒”的声音,其中,一次快速的”滴-嗒”声代表点,一次慢速的”滴—嗒”声则代表划
· 当将电键、发生器、电池以及一些导线连接到一起,电报机的电路示意图与前面的手电筒的电路图就很像了:
而且和之前一样,我们可以通过接地来减少导线,因此,完整的单向系统如下:
双向系统则仅仅需要再增加一个电键和发报人即可
3. 电报机的问题
· 和前面相同,电报机最大的问题仍然是长导线所带来的电阻
· 设置一个中继系统是解决该问题的一个方案,例如每隔一段距离。为工作人员设置好发生器和电键,将接受到的信息转发出去
· 如果你是在中继站进行这种工作,在每天的工作中你突然发现,发生器的那个上蹿下跳的横杆和你在电键上上下翻飞的手指的节奏好像是一致的,于是~你有了个歪心思(找了个小木棍…..):
· 这个设备就是“继电器”,示意图如下:
· 如上图所示,当输入的电流触发了电磁铁,电磁铁把一个弹性金属条吸附下来,就如同闭合开关一样,使电流可以从接口输出:
通过这种方法,就实现了输入的比较弱的电流就”放大”成了较强的输出电流
因此,完整的加入继电器的电报机,如下图所示:
第七章、 我们的十个数字
· 看这本书是真的可以增长知识,这一章又介绍许多有趣好玩的知识,同时让我对以前相当于死记硬背、没有真正考虑过含义的阿拉伯数字有了一个更宏观清醒的认知;
1. 罗马数字
· 沿用到今天的罗马数字有:I V X L C D M
,其中I代表1,V代表5,两个V则是一个X,代表10,C是来自单词centum,表示100,D是500,而最后一个M来自于拉丁文mille,意为1000。
· 在很长的一段时间内,人们认为罗马数字是易于加减的,这也是为什么罗马数字在欧洲做记账之用一直沿用至今天;但其进行加法或乘法缺很难
2. 阿拉伯数字
· 阿拉伯数字的整体结构可以以我们读数字的方式来展现。例如:以4825为例,我们读做”四千八百二十五”,意思即为:
或者我们也可以将此结构写成下面这样:
$$4825 = 4000 + 800 + 20 + 5$$
或者进一步分解,可以将数字写为:
$$
\begin{align}
4825 = &4×1000 + \\
&8×100 + \\
&2×10 + \\
&5×1
\end{align}
$$
或者以10的整数次幂的形式来表示:
$$
\begin{align}
4825 = &4×10^3 + \\
&8×10^2 + \\
&2×10^1 + \\
&5×10^0 + \\
\end{align}
$$
十进制数字系统可用下图说明:
Ps: 位置计数系统的好处并不在于它多么好用,而在于它即使对非十进制的系统而言,它仍是易于实现计数的。
第八章、 十的替代品
· 生活中很多时候并不是以10为基数就是好的,例如:卡通人物的每只手(脚)只有4根手指,那它就需要一个以8为基数的计数系统。
· 八进制数字系统的计数方式是:0 1 2 3 4 5 6 7,至此我们已经将符号用完了,这后面的有意义的符号就只剩下10了,八进制中,7之后的数字是10,这里读作“一零”比较好
· 在结构上,八进制数字系统与十进制系统并没有什么不同,只是基数不同,如下图:
1 | def main(): |
$$
\left\{
\begin{array}{c}
a_1x+b_1y+c_1z=d_1 \\
a_2x+b_2y+c_2z=d_2 \\
a_3x+b_3y+c_3z=d_3
\end{array}
\right.
$$
$$x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}$$
$$\left( \right)$$
$$
\begin{cases}
a_1x+b_1y+c_1z=d_1 \\
a_2x+b_2y+c_2z=d_2 \\
a_3x+b_3y+c_3z=d_3
\end{cases}
$$
$$\left\{\right.$$
$$\times \\
111$$
$$
11 \\
22 \\
$$