Potpourri大杂烩

  • Keyboard remapping
  • 守护进程(daemon)
  • FUSE
  • Backups
  • APIs
  • Common command-line flags/patterns
  • 窗口管理器
  • VPN
  • Markdown
  • Hammerspoon (macOS 桌面自动化)
    • 资源
  • 开机引导以及 Live USB
  • Docker, Vagrant, VMs, Cloud, OpenStack
  • 交互式记事本编程
  • GitHub

https://missing-semester-cn.github.io/2020/potpourri/
https://missing.csail.mit.edu/2020/potpourri/

Keyboard remapping

守护进程(daemon)

  大部分计算机都有一系列在后台保持运行,不需要用户手动运行或者交互的进程。这些进程就是守护进程。以守护进程运行的程序名一般以 d 结尾,比如 SSH 服务端 sshd,用来监听传入的 SSH 连接请求并对用户进行鉴权。
  Linux 中的 systemd(the system daemon)是最常用的配置和运行守护进程的方法。运行 systemctl status 命令可以看到正在运行的所有守护进程。这里面有很多可能你没有见过,但是掌管了系统的核心部分的进程:管理网络、DNS解析、显示系统的图形界面等等。用户使用 systemctl 命令和 systemd 交互来enable(启用)、disable(禁用)、start(启动)、stop(停止)、restart(重启)、或者status(检查)配置好的守护进程及系统服务。
  如果你只是想定期运行一些程序,可以直接使用 cron。它是一个系统内置的,用来执行定期任务的守护进程。

FUSE

Backups

APIs

Common command-line flags/patterns

  • 大部分工具支持 --help 或者类似的标志参数(flag)来显示它们的简略用法。
  • 会造成不可撤回操作的工具一般会提供“空运行”(dry run)标志参数,这样用户可以确认工具真实运行时会进行的操作。这些工具通常也会有“交互式”(interactive)-i标志参数,在执行每个不可撤回的操作前提示用户确认。
  • --version 或者 -V 标志参数可以让工具显示它的版本信息(对于提交软件问题报告非常重要)。
  • 基本所有的工具支持使用 --verbose 或者 -v 标志参数来输出详细的运行信息。多次使用这个标志参数,比如 -vvv,可以让工具输出更详细的信息(经常用于调试)。同样,很多工具支持 --quiet 标志参数来抑制除错误提示之外的其他输出。
  • 大多数工具中,使用 - 代替输入或者输出文件名意味着工具将从标准输入(standard input)获取所需内容,或者向标准输出(standard output)输出结果。
  • 会造成破坏性结果的工具一般默认进行非递归的操作,但是支持使用“递归”(recursive)标志函数(通常是 -r)。
  • 有的时候你可能需要向工具传入一个 看上去 像标志参数的普通参数,比如:
    • 使用 rm 删除一个叫 -r 的文件;
    • 在通过一个程序运行另一个程序的时候(ssh machine foo),向内层的程序(foo)传递一个标志参数。
      这时候你可以使用特殊参数 -- 让某个程序 停止处理 -- 后面出现的标志参数以及选项(以 - 开头的内容):
    • rm -- -r 会让 rm-r 当作文件名;
    • ssh machine --for-ssh -- foo --for-foo-- 会让 ssh 知道 --for-foo 不是 ssh 的标志参数。

窗口管理器

大部分人适应了 Windows、macOS、以及 Ubuntu 默认的“拖拽”式窗口管理器。这些窗口管理器的窗口一般就堆在屏幕上,你可以拖拽改变窗口的位置、缩放窗口、以及让窗口堆叠在一起。这种堆叠式(floating/stacking)管理器只是窗口管理器中的一种。特别在 Linux 中,有很多种其他的管理器。

平铺式(tiling)管理器就是一个常见的替代。顾名思义,平铺式管理器会把不同的窗口像贴瓷砖一样平铺在一起而不和其他窗口重叠。这和 tmux 管理终端窗口的方式类似。平铺式管理器按照写好的布局显示打开的窗口。如果只打开一个窗口,它会填满整个屏幕。新开一个窗口的时候,原来的窗口会缩小到比如三分之二或者三分之一的大小来腾出空间。打开更多的窗口会让已有的窗口进一步调整。

就像 tmux 那样,平铺式管理器可以让你在完全不使用鼠标的情况下使用键盘切换、缩放、以及移动窗口。它们值得一试!

VPN

VPN 现在非常火,但我们不清楚这是不是因为一些好的理由。你应该了解 VPN 能提供的功能和它的限制。使用了 VPN 的你对于互联网而言,最好的情况下也就是换了一个网络供应商(ISP)。所有你发出的流量看上去来源于 VPN 供应商的网络而不是你的“真实”地址,而你实际接入的网络只能看到加密的流量。

虽然这听上去非常诱人,但是你应该知道使用 VPN 只是把原本对网络供应商的信任放在了 VPN 供应商那里——网络供应商 能看到的,VPN 供应商 也都能看到。如果相比网络供应商你更信任 VPN 供应商,那当然很好。反之,则连接VPN的价值不明确。机场的不加密公共热点确实不可以信任,但是在家庭网络环境里,这个差异就没有那么明显。

你也应该了解现在大部分包含用户敏感信息的流量已经被 HTTPS 或者 TLS 加密。这种情况下你所处的网络环境是否“安全”不太重要:供应商只能看到你和哪些服务器在交谈,却不能看到你们交谈的内容。

这一切的大前提都是“最好的情况”。曾经发生过 VPN 提供商错误使用弱加密或者直接禁用加密的先例。另外,有些恶意的或者带有投机心态的供应商会记录和你有关的所有流量,并很可能会将这些信息卖给第三方。找错一家 VPN 经常比一开始就不用 VPN 更危险。

MIT 向有访问校内资源需求的成员开放自己运营的 VPN。如果你也想自己配置一个 VPN,可以了解一下 WireGuard 以及 Algo。

Markdown

你在职业生涯中大概率会编写各种各样的文档。在很多情况下这些文档需要使用标记来增加可读性,比如:插入粗体或者斜体内容,增加页眉、超链接、以及代码片段。

在不使用 Word 或者 LaTeX 等复杂工具的情况下,你可以考虑使用 Markdown 这个轻量化的标记语言(markup language)。你可能已经见过 Markdown 或者它的一个变种。很多环境都支持并使用 Markdown 的一些子功能。

Markdown 致力于将人们编写纯文本时的一些习惯标准化。比如:

  • *包围的文字表示强调(斜体),或者用**表示特别强调(粗体);

  • #开头的行是标题,#的数量表示标题的级别,比如:##二级标题

  • -开头代表一个无序列表的元素。一个数字加.(比如1.)代表一个有序列表元素;

  • 反引号 `(backtick)包围的文字会以代码字体显示。如果要显示一段代码,可以在每一行前加四个空格缩进,或者使用三个反引号包围整个代码片段:

    就像这样
    
  • 如果要添加超链接,将 需要显示 的文字用方括号包围,并在后面紧接着用圆括号包围链接:[显示文字](指向的链接)

Markdown 不仅容易上手,而且应用非常广泛。实际上本课程的课堂笔记和其他资料都是使用 Markdown 编写的。点击这个链接可以看到本页面的原始 Markdown 内容。

Hammerspoon (macOS 桌面自动化)

Hammerspoon 是面向 macOS 的一个桌面自动化框架。它允许用户编写和操作系统功能挂钩的 Lua 脚本,从而与键盘、鼠标、窗口、文件系统等交互。

下面是 Hammerspoon 的一些示例应用:

  • 绑定移动窗口到的特定位置的快捷键
  • 创建可以自动将窗口整理成特定布局的菜单栏按钮
  • 在你到实验室以后,通过检测所连接的 WiFi 网络自动静音扬声器
  • 在你不小心拿了朋友的充电器时弹出警告

从用户的角度,Hammerspoon 可以运行任意 Lua 代码,绑定菜单栏按钮、按键、或者事件。Hammerspoon 提供了一个全面的用于和系统交互的库,因此它能没有限制地实现任何功能。你可以从头编写自己的 Hammerspoon 配置,也可以结合别人公布的配置来满足自己的需求。

资源

  • Getting Started with Hammerspoon:Hammerspoon 官方教程
  • Sample configurations:Hammerspoon 官方示例配置
  • Anish’s Hammerspoon config:Anish 的 Hammerspoon 配置

开机引导以及 Live USB

在你的计算机启动时,BIOS 或者 UEFI 会在加载操作系统之前对硬件系统进行初始化,这被称为引导(booting)。你可以通过按下计算机提示的键位组合来配置引导,比如 Press F9 to configure BIOS. Press F12 to enter boot menu。在 BIOS 菜单中你可以对硬件相关的设置进行更改,也可以在引导菜单中选择从硬盘以外的其他设备加载操作系统——比如 Live USB。

Live USB 是包含了完整操作系统的闪存盘。Live USB 的用途非常广泛,包括:

  • 作为安装操作系统的启动盘;
  • 在不将操作系统安装到硬盘的情况下,直接运行 Live USB 上的操作系统;
  • 对硬盘上的相同操作系统进行修复;
  • 恢复硬盘上的数据。

Live USB 通过在闪存盘上 写入 操作系统的镜像制作,而写入不是单纯的往闪存盘上复制 .iso 文件。你可以使用 UNetbootin 、Rufus 等 Live USB 写入工具制作。

Docker, Vagrant, VMs, Cloud, OpenStack

虚拟机(Virtual Machine)以及容器化(containerization)等工具可以帮助你模拟一个包括操作系统的完整计算机系统。虚拟机可以用于创建独立的测试或者开发环境,以及用作安全测试的沙盒。

Vagrant 是一个构建和配置虚拟开发环境的工具。它支持用户在配置文件中写入比如操作系统、系统服务、需要安装的软件包等描述,然后使用 vagrant up 命令在各种环境(VirtualBox,KVM,Hyper-V等)中启动一个虚拟机。Docker 是一个使用容器化概念的类似工具。

租用云端虚拟机可以享受以下资源的即时访问:

  • 便宜、常开、且有公共IP地址的虚拟机用来托管网站等服务
  • 有大量 CPU、磁盘、内存、以及 GPU 资源的虚拟机
  • 超出用户可以使用的物理主机数量的虚拟机
    • 相比物理主机的固定开支,虚拟机的开支一般按运行的时间计算。所以如果用户只需要在短时间内使用大量算力,租用1000台虚拟机运行几分钟明显更加划算。

受欢迎的 VPS 服务商有 Amazon AWS,Google Cloud、 Microsoft Azure以及DigitalOcean。

MIT CSAIL 的成员可以使用 CSAIL OpenStack instance
申请免费的虚拟机用于研究。

交互式记事本编程

交互式记事本可以帮助开发者进行与运行结果交互等探索性的编程。现在最受欢迎的交互式记事本环境大概是 Jupyter。它的名字来源于所支持的三种核心语言:Julia、Python、R。Wolfram Mathematica 是另外一个常用于科学计算的优秀环境。

GitHub

GitHub 是最受欢迎的开源软件开发平台之一。我们课程中提到的很多工具,从 vim 到
Hammerspoon,都托管在 Github 上。向你每天使用的开源工具作出贡献其实很简单,下面是两种贡献者们经常使用的方法:

  • 创建一个议题(issue)。
    议题可以用来反映软件运行的问题或者请求新的功能。创建议题并不需要创建者阅读或者编写代码,所以它是一个轻量化的贡献方式。高质量的问题报告对于开发者十分重要。在现有的议题发表评论也可以对项目的开发作出贡献。
  • 使用拉取请求(pull request)提交代码更改。由于涉及到阅读和编写代码,提交拉取请求总的来说比创建议题更加深入。拉取请求是请求别人把你自己的代码拉取(且合并)到他们的仓库里。很多开源项目仅允许认证的管理者管理项目代码,所以一般需要复刻(fork)这些项目的上游仓库(upstream repository),在你的 Github 账号下创建一个内容完全相同但是由你控制的复刻仓库。这样你就可以在这个复刻仓库自由创建新的分支并推送修复问题或者实现新功能的代码。完成修改以后再回到开源项目的 Github 页面创建一个拉取请求。

提交请求后,项目管理者会和你交流拉取请求里的代码并给出反馈。如果没有问题,你的代码会和上游仓库中的代码合并。很多大的开源项目会提供贡献指南,容易上手的议题,甚至专门的指导项目来帮助参与者熟悉这些项目。

Potpourri大杂烩相关推荐

  1. 硬盘知识大杂烩(四)

    硬盘知识大杂烩(四)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&g ...

  2. Foxmail: 错误信息::ssl连接错误, errorCode: 5,各种解决方案的大杂烩。

    Foxmail: 错误信息::ssl连接错误, errorCode: 5,各种解决方案的大杂烩. 参考文章: (1)Foxmail: 错误信息::ssl连接错误, errorCode: 5,各种解决方 ...

  3. 知乎嵌入式大杂烩:学习STM32的一点经验分享

    前言 前两天在群里看到群友们在讨论学习STM32的话题,并且今天也有一位机械专业的准研究生也问了STM32的入门问题.正好我也有一点经验,所以试着分享一下这个话题.我也不是什么大神,只是一名普通的工程 ...

  4. rufus中gpt和mrb磁盘_计算机关于磁盘的大杂烩

    计算机关于磁盘的大杂烩 (一)如何判断电脑到底uefi还是bios模式 许多现代 PC 都支持了 UEFI 模式,而普通用户很难分辨自己的电脑到底使用的是传统 BIOS 还是 UEFI 模式.该文主要 ...

  5. Java面试日常总结大杂烩

    日常总结大杂烩: 一. 取出特定行数的数据 1. select* from 表名 limit m,n; 2. select * from 表名  limit [offset,] rows; 1. m代 ...

  6. 大杂烩 -- 四种生成和解析XML文档的方法详解

    基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...

  7. 线性代数几何意义大杂烩

    线性代数几何意义大杂烩 矩阵等价 定义 几何意义 特点 矩阵相似 定义 几何意义 特点 矩阵合同 定义 几何意义? 特征 矩阵正交相似 定义 几何意义? 其他概念几何意义 矩阵等价 定义 对同型矩阵A ...

  8. ViT 家族的大杂烩(An Image is worth 16×16 Words)

    GitHub - lucidrains/vit-pytorch: Implementation of Vision Transformer, a simple way to achieve SOTA ...

  9. 【前端大杂烩】什么是ajax?ajax的原理?ajax怎么用?

    [前端大杂烩]✨✨一文带你走进ajax的世界✨✨ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 没有谁的生活会一直完美,但无论什么时候,都要一直看着前方,满怀希望就会所向披靡. ...

最新文章

  1. 服务端如何识别是selenium在访问以及解决方案参考二
  2. java Cast Exception
  3. 皮一皮:追忆我那随风逝去的阔腿裤...
  4. 学python可以做什么副业-写代码做副业月入10K的方法都藏在这几个公众号里!
  5. 用友伟库“抢劫”金算盘,调研数据究竟谁说了算?
  6. 索泰显卡超频软件测试要多少时间,显卡超频测试_索泰 GTX 760 2GD5 至尊OC+_显卡评测-中关村在线...
  7. why is the configuration.js being loaded?
  8. Go语言基础之1--标识符、关键字、变量和常量、数据类型、Go的基本程序结构、Golang的特性...
  9. 如何高效率学Web前端 怎么规划前端学习路线
  10. python处理shp和栅格文件的相关库shapefile、gdal等
  11. laravel 数据库操作(表、字段)
  12. 百度、阿里等大厂面试技巧总结,Java工程师必看!
  13. python自学行吗-自学入门Python能学会吗?
  14. 学计算机用16g内存,说出去就是个笑话,两万多电脑内存才16G,我认为这配置不合理!...
  15. 通信原理matlab仿真教程 赵鸿图,通信原理MATLAB仿真教程中国通信学会普通高等教育“十二五”规划教材立项项目课件作者赵鸿图茅艳第8章节.ppt...
  16. linux英特尔蓝牙驱动,IntelBluetoothFirmware 英特尔蓝牙驱动
  17. 专门感染word文件的计算机病毒是什么,计算机病毒分类及详细介绍.doc
  18. 如何利用魔棒工具抠图_ps魔棒工具怎么抠图教程合集
  19. Apollo在基础架构中的实践经验
  20. vue设置浏览器顶部小图标

热门文章

  1. BCrypt加密算法
  2. c语言 复制二维数组,C语言 二维数组复制、清零及打印显示(示例代码)
  3. ajax嵌套ajax下载excel文件之问题解决
  4. crontab的使用方法介绍
  5. 在 ABAP 开发工具运行时错误显示界面里植入思否猫
  6. 索尼IMX582和IMX586 4800万像素感光元器件区别分析
  7. CSS 盒子模型、边框
  8. 软件设计师十二(磁盘管理)
  9. 通用软件版本记录笔记(6/5)
  10. SDL Trados 2021 安装和体验 (体验)