[oeasy]python0041_teletype历史_博多码_shift_capslock_字符数字切换_gear

简介: [oeasy]python0041_teletype历史_博多码_shift_capslock_字符数字切换_gear

teletypewriter 历史

回忆上次内容

  • 上次见到了一个真的机械打字机
  • 感受到了蒸汽朋克的时代背景
  • 上上次区分了一些概念
  • terminal终端,电脑连线最终的端点
  • TeleTYpewriter,电传打印机,终端硬件
  • shell,终端硬件基础上的软件壳子
  • Console 控制台,直接连接主机的控制面板
  • 换行和回车是两回事
  • 换行 对应字节0x0A
  • Line-Feed 的意思是水平不动、垂直向上喂纸
  • 所以是feed
  • 回车 对应字节0x0D
  • Carriage-Return
  • 意思是让上图可移动的打印头
  • 好像可移动的四轮马车 Carriage)
  • 垂直不动、水平 到纸张左侧
  • 所以是Return
  • 对于换行和回车,不同层面的理解
  • 电传打字机:两件事,经常一起干,但也可以分别干
  • 不同操作系统
  • unix-like:大家一起简化这个成\n,就步调一致就都好了
  • mac:为了避免麻烦,我和unix-like一致
  • windows:原来我用户多,定什么规矩我说了算,现在我还是随大流吧
  • python 解释器
  • 首先我觉得unix-like做得对
  • 不管在什么系统、什么架构上
  • 我把这个事统一
  • 光说不练假把式
  • 我能看看电传打字机吗?🤔
  • 那这0x0A0x0D谁规定的
  • 来自于什么呢?

发明人

  • 0x0A0x0D
  • 这两个字符 来自于 一套编码
  • 博多码(Baudot code)

  • 为什么 叫做 博多码(Baudot code)呢?
  • 因为 发明这个的人 叫波多
  • Jean-Maurice-Émile Baudot
  • 从农民
  • 到电报操作员
  • 再到法国电报工程师
  • 他收到Hughes的启发
  • 发明了 用一条线路 传输多个bit位

独特的按键和编码

  • 这是 最早 发报电键 的样子
  • 5-bit
  • 白色的
  • 有用
  • 黑色的
  • 是分隔符

  • 可以传输25种信号
  • 具体怎么 分配编码 呢?

Baudot 编码

  • 博多 设计了 编码的方法
  • 后来 他就 申请了法国专利
  • 再后来 申请了英国专利
  • 今天所用 的 波特 这个单位
  • 就是 来源于他

  • 但是 这种编码 只有字母
  • 没有 数字
  • 怎么发 带数目的电报 呢?

挂档

  • 把字符 分类 成两组
  • Letter
  • 字母
  • Figure
  • 数字和符号

  • 通过标志位 进行选择
  • 落实到 档位
  • 选 打字头
  • 由 哪组字模 进行输出
  • 通过 特定字符
  • 切换 字模档位
  • 按一下 0b01000
  • 切换 档位
  • 这种思想 来自于 机械

档位

  • gear 就是 齿轮
  • 来自 挂档

  • 从 蒸汽火车
  • 到 电动汽车

  • 甚至 计算机
  • 这样 一路下来

换挡键

  • 今天的 caps lock 和 shift
  • 种 换挡方式

  • 5bit 这样 就可以
  • 虚拟出 6bit 的效果
  • 但是 需要 一个字符 来切换状态
  • 还需要约定
  • 最初的状态
  • 以及
  • 状态多长时间之后
  • 重置回默认
  • 这些其实是 最早的session(会话)
  • 这种编码最终形成了ITA1编码

键盘

  • 形成了 qwer键盘 的基本布局
  • 有字符、数字、符号
  • 控制字符
  • BELL
  • LINE FEED
  • CAR RET
  • FIGS
  • LTRS

  • 在当时
  • 回车 和 换行
  • 还是两回事
  • 尤其 机械打字机
  • 打字符 速度快
  • 由于 是 机械装置
  • 换行+回车 速度慢
  • 换行时间 不给足的画
  • 下一个字符
  • 位置不确定
  • 往往
  • 多发一些 空(Null)
  • 延迟时间
  • 注意这个空(Null)
  • 不是空格(Space)
  • 空(Null)延迟时间
  • 却不 打印内容
  • 等 carriage return 回来
  • 继续 打印
  • 电传打字机
  • 有 什么经典机型 么?

ASR-33

  • ASR-33是当时的一代机皇
  • Automatic Send-Receive

  • 可以看到 当时的io设备
  • 纸带 存储
  • 打印纸 标准输出流
  • 打字机键盘 标准输入流
  • 为什么 当初 收发电报的 电传打字机
  • 会和 电子计算机 结合得 这么紧密 呢?

unix时代

  • 昂贵的 主机时代
  • PDP-7 小型机
  • 72000美元
  • GE-45
  • 1000万美元
  • 这就是 开发multics的 时代背景

  • 项目失败后
  • 无所事事的两人
  • Kenneth Thompson
  • Dennis Ritchie
  • 希望能在 PDP 机器上继续玩star travel
  • 于是 制作了 unixc
  • 目标是 分时 多用户系统
  • 分时
  • 意味着 各个进程
  • 可以 分享 硬件资源
  • 多用户
  • 意味着 要给 每个用户
  • 配置 一个 终端
  • 每个 用户 都要有
  • 显示器
  • 键盘

价格

  • 当时 所有的计算机设备
  • 价格 都非常昂贵
  • 显示器 别想了
  • 而且 键盘和主机 是 集成在一起
  • 没有独立的键盘

  • 最后
  • 找到 ASR33电传打字机
  • 电传打字机 的 用途
  • 是 收发电报
  • 但是
  • 也可以 作为
  • 人与计算机 的 接口
  • 而且 价格低廉
  • 编码 也随着
  • 机器 的 进化
  • 不断 进化

编码的进化

  • 在 ITA1 的基础上
  • 编码 进化
  • 类型 还是 三类
  • 字符
  • 符号包括数字
  • 控制字符

  • 特殊字符
  • ascii时代
  • 还有吗?
  • 比如bel?
  • 除了 \n\r 之外
  • 还有 什么控制字符 呢?
  • 黑暗森林 的 神秘面纱
  • 感觉 就要 揭开 了呢!

总结

  • 我们回顾了5bit-Baudot博多码的来历
  • 从 莫尔斯码 到 博多码
  • 原来
  • 人 来 收发电报
  • 现在
  • 机器 来 收发电报
  • 输入方式
  • 从 电键
  • 改成 键盘
  • 输出方式
  • 从 纸带
  • 变成 打印纸张
  • 后来
  • 电传打字机ASR-33
  • 成为 初代 经典终端
  • 除了 \n\r 之外
  • 还有 什么 特殊字符 吗?🤔
  • 蓝桥->https://www.lanqiao.cn/courses/3584
  • github->https://github.com/overmind1980/oeasy-python-tutorial
  • gitee->https://gitee.com/overmind1980/oeasypython
  • 视频->https://www.bilibili.com/video/BV1CU4y1Z7gQ 作者:oeasy
目录
相关文章
|
22天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
106 80
|
29天前
|
人工智能 C语言 Python
[oeasy]python051_什么样的变量名能用_标识符_identifier
本文介绍了Python中变量名的命名规则,强调标识符(identifier)必须以字母或下划线开始,后续可包含字母、下划线及数字。通过`isidentifier()`函数可验证字符串是否为合法标识符。文中还探讨了为何数字不能作为标识符的开头,并提供了相关练习与解答,最后提及这些规则源自C语言的影响。
114 69
|
1月前
|
Python
[oeasy]python050_如何删除变量_del_delete_variable
本文介绍了Python中如何删除变量,通过`del`关键字实现。首先回顾了变量的声明与赋值,说明变量在声明前是不存在的,通过声明赋予其生命和初始值。使用`locals()`函数可查看当前作用域内的所有本地变量。进一步探讨了变量的生命周期,包括自然死亡(程序结束时自动释放)和手动删除(使用`del`关键字)。最后指出,删除后的变量将无法在当前作用域中被访问,并提供了相关示例代码及图像辅助理解。
114 68
|
11天前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
33 14
|
3天前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
18 3
|
6天前
|
存储 Python
[oeasy]python056_python中下划线是什么意思_underscore_理解_声明与赋值_改名字
在Python中,下划线有多种用途。单下划线(_)常用于避免命名冲突,如将`max`改为`max_`以保留内置函数功能。双下划线(__var__)通常用于特殊方法和属性,如`__name__`、`__doc__`等。此外,单下划线(_)在交互式解释器中表示上一次表达式的值,但不建议作为普通变量名使用。总结:下划线用于避免命名冲突及特殊标识。
13 1
|
20天前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
30 9
|
28天前
|
Unix 编译器 C语言
[oeasy]python052_[系统开发语言为什么默认是c语言
本文介绍了C语言为何成为系统开发的首选语言,从其诞生背景、发展历史及特点进行阐述。C语言源于贝尔实验室,与Unix操作系统相互促进,因其简洁、高效、跨平台等特性,逐渐成为主流。文章还提及了C语言的学习资料及其对编程文化的影响。
26 5
|
1月前
|
Shell Python
[oeasy]python049_[词根溯源]locals_现在都定义了哪些变量
本文介绍了Python中`locals()`函数的使用方法及其在调试中的作用。通过回顾变量赋值、连等赋值、解包赋值等内容,文章详细解释了如何利用`locals()`函数查看当前作用域内的本地变量,并探讨了变量声明前后以及导入模块对本地变量的影响。最后,文章还涉及了一些与“local”相关的英语词汇,如`locate`、`allocate`等,帮助读者更好地理解“本地”概念在编程及日常生活中的应用。
36 9
|
1月前
|
Python 容器
[oeasy]python048_用变量赋值_连等赋值_解包赋值_unpack_assignment _
本文介绍了Python中变量赋值的不同方式,包括使用字面量和另一个变量进行赋值。通过`id()`函数展示了变量在内存中的唯一地址,并探讨了变量、模块、函数及类类型的地址特性。文章还讲解了连等赋值和解包赋值的概念,以及如何查看已声明的变量。最后总结了所有对象(如变量、模块、函数、类)都有其类型且在内存中有唯一的引用地址,构成了Python系统的基石。
30 5
下一篇
开通oss服务