工作环境推荐

笔者的工作环境是Ubuntu-16.04.1 + Neovim + zsh + oh-my-zsh + tmux + oh-my-tmux,使用到图形界面的时候主要是阅读 pdf 文档以及浏览网页。

身为一个重度 Vim 使用者,我交换了 ESC 键和 Caps Lock 键,使用 zsh 的 Vi 模式,并尝试在一切可能的地方使用Vim-like的方式来操控机器。

  • 网页浏览:Chrome + cVim(Chrome 插件)
  • PDF 阅读: Evince(测试过所有 Vim-like 的阅读器之后,发现或多或少存在问题,Evince 只能算是差强人意的选择) (2018.12.09 更新:配置好 Zathura 后挺好用的)
  • PDF 制作: Neovim + Typora
  • PPT 制作: Neovim + nodePPT
  • Overwall: VPS + Shadowsocks
  • 文件管理: VPS + Git(这里强烈批评坚果云,居然能 24 小时吃掉我 100% 的 CPU 资源,对富文本格式文件解析能力非常差)
  • 文件共享: VPS + Git
  • 下载: VPS + aria2c
  • 终端模拟器: Tilix
  • 键鼠 + 剪贴板共享: Synergy

折腾过很久的 Vim 插件,所走的这些路,应该是大多数被 Vim 哲学所吸引的人都走过的。
在这里分享 dotfile,以飨后来人。希望或多或少能帮到你。

Read more »

Synergy 是一款用于在不同电脑之间共享键盘、鼠标、剪贴板的开源商业软件,支持包括 Linux、Windows、Mac OS 在内的多种主流操作系统,其 Pro 版本甚至支持直接在不同桌面上面拖动文件。

笔者使用的 Linux 系统有免费的基础版可以使用,但想要使用共享剪贴板功能,则需付费购买 Pro 版。这篇文章简单描述了从源代码逆向其付费序列号的过程。由于实在太败人品了……不会放出序列号,读者可以自行尝试编译笔者提供的代码。

Read more »

摘要

出现于工业革命期间的印象主义与出现于 20 世纪下半叶的蒸汽朋克文化,在审美旨趣的角度有着非常多的相似之处,这些相似之处包括:表现对象的相同,对工业和科技的赞美,对社会传统的反叛,对现实社会的乐观精神。除此之外,这两种截然不同的艺术形式在受众人群上存在着极大的重合,大都是受过高等教育,有一定的艺术修养,对未来充满美好憧憬的群体,他们所持有的往往是一种根植于新维多利亚主义的大众审美。抛开这些纷繁复杂的特征表象,我们会惊讶地发现,无论是印象派还是蒸汽朋克都存在着一个相同的精神内核 —— 一种机械唯物主义的积极乐观的进取精神,对科学的崇拜,相信技术的进步终将解决一切问题。

关键词:印象派、蒸汽朋克、科学崇拜、工业革命、机械唯物主义、机械美学

序言

蒸汽朋克(Steampunk)是一种流行于 20 世纪 80 年代至 90 年代初的科幻题材,显著特征为故事都设定于一个蒸气科技树攀升到巅峰的架空世界。这类故事对距今已较遥远的工业革命时代的科技进行了极大的夸张,创建出一个与当今科技文明不同的、依赖于蒸汽动力装置的机械科技世界。从广义上讲,只要是将某种科技置于图腾地位,并将其力量无限扩大的文化,都可算作蒸汽朋克。[1]

蒸汽朋克通常以英国的维多利亚时代为背景,威廉·吉布森(William Gibson)的小说《差分机》,就是这个领域的第一本小说。虽然“蒸汽朋克”一词出现于 20 世纪下半叶,但从今天的观点来看,工业革命时代所产生的许多科幻小说其实都可以归入该类别。只不过当年人们的创作多是推崇科技的力量。而今天人们创作这类故事则多以对早期科技文化的怀旧与复古为目的。蒸汽朋克的怀旧风格与现今社会崇尚未来感设计的风尚形成鲜明对比。[1]

Read more »

使用 tmux 时经常开启关闭临时面板(panel),每次关闭时 tmux 都会让你确认是否真的要关闭,有些繁琐。
将如下配置加入你的.tmux.conf文件来避免繁琐的确认步骤:

1
2
bind-key & kill-window
bind-key x kill-pane

重启 tmux 服务,或者重新加载 tmux 配置文件(.tmux.conf)后生效。

参考链接:
https://unix.stackexchange.com/questions/30270/tmux-disable-confirmation-prompt-on-kill-window

Read more »

Basic Information

Why you are applying

There are two reasons for participating in QEMU-GSoC:

First, I’m an virtualization technology enthusiast. During my junior year at college, I’ve designed and implemented a C programming language based compiler, allowing users to directly convert native C code into a my own designed Stack-Based Instruction Set. Internally, a virtual machine to support byte-code execution is integrated into this compiler. Although this simple virtual machine prototype cannot support the full stack of virtualization technology, it’s actually the starting point for my interest in virtualization. Now, I’m pursuing my PH.D degree in University of Chinese Academy of Sciences. And I focus on low-level system software design,including virtualization technologies and AI operating systems, e.g., QEMU, Docker, etc. Thus, I want to utilize QEMU to implement the emulation of Intelligence Chip after I am familiar enough with QEMU.

Read more »

原文地址:http://blog.vmsplice.net/2011/03/qemu-internals-overall-architecture-and.html
Author:Stefan Hajnoczi
Translator:Su Hang
本文经原作者Stefan Hajnoczi授权翻译

这是针对开发人员的 QEMU 内部原理探析系列中的第一篇文章。它旨在分享 QEMU 工作原理的知识,并使新贡献者更容易了解 QEMU 代码。

执行 guest 代码涉及到如下任务:处理定时器、处理 I/O 请求、响应虚拟机监视器的命令,等等。要想设计一个良好的、能够解决这些问题的架构,需要安全地一次性地解决所有这些资源的分发问题。尤其是当某些请求,譬如 I/O 请求、来自用户的命令,需要大量的时间去执行的话。

一个 guest 的运行包括执行 guest 代码,处理定时器,处理 I / O 以及响应监视器命令。要想一次性地安排好所有这些事情需要一个能够以安全的方式调解资源的体系结构,而且最好不会暂停 guest 代码的执行。如果磁盘 I / O 或监视器命令需要很长时间才能完成,对于需要响应来自多个来源的事件的程序,有两种流行体系结构:

  1. 并行体系架构,将工作分解为可同时执行的进程或线程。我将称之为线程架构。
  2. 事件驱动架构,通过在一个主循环分派各个事件到与之对应的事件处理函数。这通常使用select(2)poll(2)系列调用系列来实现,以等待多个文件描述符。

但 QEMU 实际上使用了一种将事件驱动编程与多线程相结合的混合架构。这样做是有道理的,因为事件循环不能利用多个 CPU 内核的特性,因为它只有一个执行线程。另外,有时编写专用线程来处理一个特定的任务,而不是将其集成到事件驱动的体系结构,在编程实现中更为简单。尽管如此,QEMU 的核心还是事件驱动的,大多数代码在这种环境中执行。

QEMU 的事件驱动核心

事件驱动的架构以事件循环为中心,该事件循环将事件分派给处理函数。QEMU 的主要事件循环是main_loop_wait(),它执行以下任务:

  • 等待文件描述符变为可读或可写。文件描述符起着至关重要的作用,因为无论是文件、套接字、管道还是各种其他资源都是通过文件描述符来控制的。文件描述符可以使用qemu_set_fd_handler()来添加。
  • 运行会定时过期的定时器。定时器可以使用qemu_mod_timer()添加。
  • 运行下半部机制 (BHs)(译者注:所谓 bottom-halves 机制,是指在允许中断的情况下,将中断处理程序延迟执行),就像立即过期的定时器一样。BH(译者注:原文中 BH 是 bottom halves 的缩写,下同)用于避免重入和溢出调用堆栈。使用qemu_bh_schedule()添加 BHs。
Read more »

原文地址:https://www.qemu.org/2018/02/09/understanding-qemu-devices/
Author:Eric Blake
Translator:Su Hang

以下是一些可帮助新手了解 QEMU 设备实际原理的笔记:

在使用 QEMU 时,需要记住的一件事就是:以操作系统的视角来说,当其运行于我们试图模拟的裸机硬件之上时,操作系统在裸机硬件上会看到什么。大多数裸机的模拟实现仅仅是简单的内存映射,在特定地址上的软件戳(software poking) 会产生特定的边际效应(side effect)(最常见的边际效应当然是访问内存;但是内存中的其他常见区域还包括用于控制寄存器组特定的硬件,如硬盘或网卡,甚至 CPU 本身)。模拟的最终目标是允许只使用普通 ring3 内存访问(译者注:这里的普通内存访问与操作系统的 ring0 特权访问相对应)的用户空间程序来管理 guest 操作系统所期望的所有边际效应。

从实现细节上来说,一些硬件(如 x86)实际上有两个内存空间,其中 I / O 空间使用与普通内存访问(译者注:例如 mov a, b) 不同的汇编代码(译者注:这里指 in a,out a 等等 x86 架构特有汇编指令); QEMU 必须模拟这些特殊访问。同样,许多现代 CPU 在内存地址映射范围中,也为提供了一组 CPU 本地寄存器,例如中断控制寄存器。

对于在某些特定硬件,我们通过虚拟化挂钩技术(virtualization hooks),使得 CPU 本身可以很容易地捕获非正常存储器访问的汇编指令(那些访问 I / O 空间或 CPU 内部寄存器的指令,因此需要不同于正常存储器访问的边际效应),所以 guest 机只是执行与裸机相同的汇编指令序列,但是执行之后会导致陷入到 trap 中,让运行于用户空间的 QEMU 在对控制权返回 guest 代码之前使用普通的用户空间内存访问对指令作出反应。QEMU 通过“加速器”实现了这个功能。

虚拟化加速器(如 KVM)可以使 guest 代码运行在 QEMU 虚拟机中的速度几乎与裸机一样快。其中速度减慢的部分是由来自 guest 代码的每个 trap 都会返回至 QEMU(vmexit)执行,以处理非正常的汇编指令或内存地址引起的。除此之外,QEMU 还支持其他虚拟化加速器(例如 HAXM 或 macOS 的 Hypervisor.framework)。

Read more »

广州,一个微热的下午,一个人躲在楼顶的凉棚下,穿着舅舅的旧汗衫,学着 c++,背着 gre,看着闲书,淡金色的阳光融化在天际,杂乱的花坛和菜地,清凉积水下青苔密布,真的有一种忽而盛夏的错觉。


读书时,时常因为某些字句触动回忆,竟至情难自已,无法呼吸,不能再阅读下去。

新干线,光是名字就能勾起我美好得令人窒息的回忆……
名字,是最短的咒语。


暴雨欲来,空气中飘着雨腥味,那种雨水混合着尘土,然后在空气中肆意弥漫的气息,大自然好闲适惬意啊,she just can do whatever she want,not like me。庄子所说的那种自由。很是羡慕啊。

风雨已来,心中躁动难耐。幼稚的灵魂无法找到可以希冀的未来。

我希望我的回忆纯洁、温润如玉。年少的无知、冲动,现在想想就黯然。

Read more »

这其实是一种还原,根据大自然中的几条简单法则,还原出一个诡谲复杂的世界。根据一个人的性格,推测出他经历过的事件,他会怎么想。这便是所谓的看穿一个人。但这仍然只是一种猜测,既然是猜测,便不免带上主观色彩。众人往往习惯用自己的经历去推测别人的,可正如世界上没有两片相同的树叶,所以往往失之偏颇。

所以我突然诞生了一个想法,这世界之大,远比小说电影精彩,总会有一两个人会有与你于某一事上相同的经历,那么集全人类的英灵之力,别说还原一个人,还原一个时代也非难事。可这样也有局限,应为全人类仍是人类社会,虽尚未知是否有外星生命的存在,可很容易想象,他们的一切简直是人类无法想象的:因为只需几条简单规则的稍微改变,这宇宙,面目全非。

一切都有其局限性,规则之外的规则无限逼近于真理,却永远无法穷尽,小圆被大圆所环,环环都趋向无穷,象征无知的周长却愈加扩大。

从牛顿经典力学到量子力学再到胚胎中的弦理论,都是人类对宇宙还原的进化,这进化生生不息,永无所止,在可预见的未来里,还将不断进化下去。

Read more »
0%