Howie's Notes

Machine Learning and Cyber Security

Brainfuck 是在 1993 年创建的一种极小化的计算机语言,由于 fuck 在英语中是脏话,这种语言有时也被称为 Brainf*ck 或 Brainf***,或被简称为 BF。

Brainfuck 中共有 8 种字符,它们及其含义如下所示:

  • >:指针加一
  • <:指针减一
  • +:指针指向的字节的值加一
  • -:指针指向的字节的值减一
  • .:输出指针指向的单元内容(ASCII 码)
  • ,:输入内容到指针指向的单元(ASCII 码)
  • [:如果指针指向的单元值为零,向后跳转到对应的 ] 指令的次一指令处
  • ]:如果指针指向的单元值不为零,向前跳转到对应的 [ 指令的次一指令处

下面是一个用 Brainfuck 在屏幕上打印 Hello World 的程序例子:

1
2
3
++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>+.+++++++..+++.>++.<<+++++++++++++++.
>.+++.------.--------.>+.>.

程序的运行结果如 BrainFuck 所示。

我没有写错,本文所记述的不是 Knuth 的那本举世瞩目的 TAOCP(计算机程序设计艺术),而是 ESR 所写的 TAOUP,即 The Art of UNIX Programming(UNIX 编程艺术)。

哲学

Unix 的设计哲学总体上可以概括为以下几点:

  1. 模块原则:使用简洁的接口拼合简单的部件
  2. 清晰原则:清晰胜于机巧
  3. 组合原则:设计时考虑拼接组合
  4. 分离原则:策略同机制分离,接口同引擎分离
  5. 简洁原则:设计要简洁,复杂度能低则低
  6. 吝啬原则:除非却无它法,不要编写庞大的程序
  7. 透明性原则:设计要可见,以便审查和调试
  8. 健壮原则:健壮源于透明与简洁
  9. 表示原则:把知识叠入数据以求逻辑质朴而健壮
  10. 通俗原则:接口设计避免标新立异
  11. 缄默原则:如果一个程序没什么好说的,就沉默
  12. 补救原则:出现异常时,马上退出并给出足够错误信息
  13. 经济原则:宁花机器一分,不花程序员一秒
  14. 生成原则:避免手工hack,尽量编写程序去生成程序
  15. 优化原则:雕琢前先要有原型,跑之前先学会走
  16. 多样原则:决不相信所谓“不二法门”的断言
  17. 扩展原则:设计着眼未来,未来总比预想来得快
Read more »

正向连接与反向连接

正向连接即黑客主动连接受害者,这种情况下要求受害者有公网IP,常用于对服务器的渗透;反向连接即受害者主动连接黑客,这种情况下要求黑客有公网IP,常用于对个人的渗透。

正向代理与反向代理

在英语中,Proxy表示服务器代理这种动作,而Agent表示代理服务器这种物质,显然,我们这里讨论的是Proxy这种动作,而非代理服务器本身。
不论正向还是反向,代理都是基于这样一个事实:即A与B的通信要经过C的转发,这里的C就是Agent,为了方便讨论,我们将A视为客户端,将B视为服务器端。
正向代理(Forward Proxy):也就是常说的代理,代理服务器偏向于客户端,服务器端只能得到代理服务器的IP地址,隐藏了客户端的IP地址。常用于科学上网工具。
反向代理(Reverse Proxy):代理服务器偏向于服务器端,客户端只能得到代理服务器的IP地址,隐藏了服务器端的IP地址。常用于网站镜像等。

Read more »

XML、JSON 与 YAML 是三种常见的信息标记形式,这三者由于其特有的属性而在不同的领域广为使用。

XML

XML,Extensible Markup Language(可扩展标记语言),倘若我要表示某个人的简要信息,用 XML 可写为:

1
2
3
4
5
6
7
8
9
10
<person>
<firstName>Tian</firstName>
<lastName>Song</lastName>
<address>
<streetAddr>中关村南大街5号</streetAddr>
<city>北京市</city>
<zipcode>100081</zipcode>
</address>
<prof>Computer System</prof><prof>Security</prof>
</person>

JSON

JSON,JavaScript Object Notation(JavaScript 对象表示法),倘若我要表示某个人的简要信息,用 JSON 可写为:

1
2
3
4
5
6
7
8
9
10
{
"firstName" : "Tian",
"lastName" : "Song",
"address" : {
"streetAddr" : "中关村南大街5号",
"city" : "北京市",
"zipcode" : "100081"
},
"prof" : ["Computer System", "Security"]
}

YAML

YAML,在开发这种语言之初,其意为 Yet Another Markup Language(仍是一种标记语言),之后为了强调这种语言以数据作为中心,而不是以标记语言为重点,故解释为 YAML Ain't a Markup Language(YAML 不是一种标记语言),倘若我要表示某个人的简要信息,用 YAML 可写为:

1
2
3
4
5
6
7
8
9
firstName : Tian
lastName : Song
address :
streetAddr : 中关村南大街5号
city : 北京市
zipcode : 100081
prof :
-Computer System
-Security

比较

XML 是最早的通用信息标记语言,可扩展性好,但繁琐,主要用于 Internet 上的信息交互与传递,以及用户界面的编写,比如 Android;JSON 中的信息有类型,适合程序处理(js),较 XML 简洁,主要用于移动应用云端和节点的信息通信,无注释;YAML 信息无类型,文本信息比例最高,可读性好,主要用于各类系统的配置文件,有注释易读。

Markdown 是一种轻量标记语言,其文件后缀名为 .md,它允许人们采用其规定的语法编写文档,而后 Markdown 解析器会将其转化为有效的 HTML 文档,以便在网页中显示,时至今日,有许多 Markdown 解析器增强了 Markdown 的基本语法,这就造成了 Markdown 有多种风格(flavor)。

因为 Markdown 要被转化为 HTML 才能在网页上显示,所以在 Markdown 中仍然可以使用 HTML,如果有 Markdown 无法完成的工作,完全可以再用回 HTML。

基本语法

标题

1
2
# 一级标题
#### 四级标题

对应 HTML,最高 6 级标题。

列表

1
2
3
4
5
6
7
8
9
- 无序列表项
- 这是是嵌套列表项
- 这里也是嵌套列表项
- 无序列表项
- 无序列表项

1. 有序列表项
2. 有序列表项
3. 有序列表项

无序列表项常以 -* 起始,个人习惯使用 -

Read more »

本笔记记录自ud0419-无人驾驶第一课:从Apollo起步

一、无人驾驶概览

无人驾驶车的6个等级:

  • 0级——基本等级:驾驶员是系统的唯一决策者。
  • 1级——驾驶员辅助(Driver Assistance):车辆为驾驶员提供转向或加速支持,驾驶员必须保持充分参与。
  • 2级——部分自动化(Partial Automation):车辆自动控制几项功能,如自动巡航控制和车道保持,但是驾驶员仍然必须执行自治系统处理的任何功能。
  • 3级——有条件的自动化(Conditional Automation):车辆自主驾驶,但驾驶员必须准备在必要的时候随时接管。
  • 4级——高度自动化(No Human Interference):车辆控制驾驶体验的所有面面,并且不期望驾驶员的介入,车辆可能根本没有方向盘或任何驾驶员控制装置,但是车辆可能被限制在某些区域,通常这被称为“地理围栏”,车辆可以在特定的地理围栏内完全自主的运行,但是在地理围栏之外,车辆不能自主操作,或者根本无法操作。
  • 5级——完全自动化(Full Automation):车辆可以在人类可以驾驶的任何地方完全自主地运行,在所有情况下应与人类驾驶员的水平一样高或比其更高。
Read more »

PowerShell 是微软用来取代 CMD 的一个强大的 Shell。

版本

在不同版本的 Windows 中已经内置了不同版本的 PowerShell,常见情况如下:

  • Windows XP SP2 / Server 2003 SP1:PowerShell 1.0
  • Windows 7 / Server 2008:PowerShell 2.0,此版本包含了 PowerShell ISE,即 Integrated Scripting Environment(集成的脚本环境),更方便的编写 PowerShell 脚本。
  • Windows 8 / Server 2012:PowerShell 3.0,从此版本开始,PowerShell 被集成进了 WMF 中,即 Windows Management Framework(Windows 管理框架)。
  • Windows 8.1 / Server 2012 R2:PowerShell 4.0
  • Windows 10:PowerShell 5.0,此版本的 WMF 包含了 PowerShellGet,可用于在线下载、安装模块。
Read more »

为了方便快速的下载Windows更新,微软在Windows10中启用了一种新的更新机制,即传递优化(Delivery Optimization),这本质上是一种P2P架构,换句话来说,倘若开启了传递优化功能,更新时将会额外的从别的已更新的且开启传递优化功能的电脑上下载,同时也会上传已更新的文件到需要更新的电脑上。值得注意的是,传递优化对局域网进行了特殊处理,即当局域网内一台电脑完成更新后,传递优化会使得此局域网内的其他电脑依次完成更新。
开启或关闭传递优化的设置路径为:设置 ——> 更新和安全 ——> Windows更新 ——> 高级选项 ——> 传递优化。传递优化用于上传的文件路径位于:C:\Windows\Logs\dosvc。

在 Linux 中创建用户可以用 useradd 或者 adduser,值得注意的是创建的用户并不一定可以登录,登录的用户肯定要有它的用户主目录、登录 Shell 等相关配置,而这两个命令之间的差异就在于此。

adduser

当使用 adduser howie 命令时,系统除了创建 howie 用户,还会自动创建用户主目录、同名用户组、登录 Shell 等,并提示输入用户密码,这一切操作都将以一个对话的形式完成。

在某些新版本的 RedHat 系 Linux 中,adduseruseradd 的一个软链接,即别名。

useradd

当使用 useradd howie 命令时,系统只会创建 howie 用户,而不会创建用户密码、用户主目录、同名用户组、登录 Shell 等,若要指定密码,可以接着采用 passwd howie 命令。其次,useradd 有众多参数,我们可以通过使用这些参数来达到和 adduser 一样的效果,如 useradd -d /home/howie -m -s /bin/bash howie,不过注意之后还得使用 passwd 命令创建密码,当然也可以使用 -p 参数直接设置密码,但这样会将密码直接显示在终端屏幕上,不安全。

userdel

当使用 userdel howie 命令时,系统只会删除 howie 用户,并不会删除用户主目录以及用户邮箱目录,因此可以使用 -r 参数。

云服务的模式一般有 IaaS、PaaS、SaaS 三种,既然是云服务,也即我们不用购买真实的计算设备,所有的模式都是基于此之上的。

IaaS

IaaS,Infrastructure as a Service(基础设施即服务),云服务的最底层,服务商提供操作系统、存储设施、硬件配置等资源,典型的例子是 VPS,即 Virtual Private Server(虚拟专用服务器),这类服务一般提供必要的 Shell 接口,可使用户连接到操作系统进行相关配置,常见的 VPS 厂商有 Amazon EC2阿里云 ECS 等。

PaaS

PaaS,Platform as a Service(平台即服务),云服务的中间层,服务商提供必要的应用,用户无权访问操作系统及硬件等资源,典型的例子是虚拟空间,这类服务一般会提供必要的 Web 服务器、数据库等,用户可以直接在其上部署 Web 应用,常见的 PaaS 厂商有 Google App Engine(GAE)Heroku 等。

SaaS

SaaS,Software as a Service(软件即服务),云服务的最高层,直接提供现成的应用供用户使用,用户所付出的精力最少,例如本站采用的 Hexo、WordPress 等。

0%