使用AStyle格式化代码

astyle.sourceforge.net 下载安装 astyle。

AStyle.exe -A8 -s4 -k3 -W3 -S -p -xn -xc -xk -xV -xf -xh -H -Y -w -xW -n -c -z2 /path/to/code.c
  • -A8 Linux style
  • -s4 4个空格缩进
  • -k3 指针*靠近变量
  • -W3 引用&靠近变量
  • -S switch下的case添加缩进
  • -p 在操作符两边添加空格
  • -xn 花括号在namespace之后
  • -xc 花括号在class之后
  • -xk 花括号在extern “C"之后
  • -xV do-while语句中,while在关闭花括号之后
  • -xf 函数定义中,返回类型和函数名在同一行
  • -xh 函数声明中,返回类型和函数名在同一行
  • -H 在if,for,while…之后添加空格
  • -Y 缩进注释
  • -w 宏定义换行后缩进
  • -xW 嵌套预处理缩进
  • -n 不生成备份文件
  • -c tab转换为空格
  • -z2 linux(LF)换行

Read More

Emacs 根据时间切换主题

根据时间,自动切换亮色和暗色主题。

(setq day-theme 'light-blue)
(setq dark-theme 'misterioso)
(defun synchronize-theme ()
    (setq hour
        (string-to-number
            (substring (current-time-string) 11 13)))
    (if (member hour (number-sequence 6 18))
        (setq now day-theme)
        (setq now dark-theme))
    (load-theme now)
)
(run-with-timer 0 3600 'synchronize-theme)

自动切换主题的包:circadian.el

Read More

Ubuntu安装Samba

apt-get install samba

修改 /etc/samba/smb.conf 文件:

[share]
  path = /
  available = yes
  valid users = root
  read only = no
  browseable = yes
  public = yes
  writable = yes

修改Samba登陆的密码:

smbpasswd -a root

这里也可以使用非root用户,必须是Linux系统中已存在的用户。

重启Samba服务:

/etc/init.d/smbd restart

Read More

Shell - Here Documents

Here Documents 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。

它的基本的形式如下:

command << delimiter
    document
delimiter

它的作用是将两个 delimiter 之间的内容(document) 作为输入传递给 command。

注意:

  • 结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。
  • 开始的delimiter前后的空格会被忽略掉。

Read More

正则表达式

除非您以前使用过正则表达式,否则您可能不熟悉一些术语。但是,毫无疑问,您已经使用过不涉及脚本的某些正则表达式概念。

例如,您很可能使用 ? 和 * 通配符来查找硬盘上的文件。? 通配符匹配文件名中的 0 个或 1 个字符,而 * 通配符匹配零个或多个字符。像 data(\w)?\.dat 这样的模式将查找下列文件:

data.dat
data1.dat
data2.dat
datax.dat
dataN.dat

使用 * 字符代替 ? 字符扩大了找到的文件的数量。data.*\.dat 匹配下列所有文件:

data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat

尽管这种搜索方法很有用,但它还是有限的。通过理解 * 通配符的工作原理,引入了正则表达式所依赖的概念,但正则表达式功能更强大,而且更加灵活。

Read More

Go语言匿名结构

Go语言也提供了继承,但是采用了组合的文法,所以我们将其称为匿名组合:

type Base struct {
    Name string
}

func (base *Base) Foo() { ... }
func (base *Base) Bar() { ... }

type Foo struct {
    Base
    ...
}

func (foo *Foo) Bar() {
    foo.Base.Bar()
    ...
}

以上代码定义了一个Base类(实现了Foo()和Bar()两个成员方法),然后定义了一个Foo类,该类从Base类“继承”并改写了Bar()方法(该方法实现时先调用了基类的Bar()方法)。

在“派生类”Foo没有改写“基类”Base的成员方法时,相应的方法就被“继承”,例如在上面的例子中,调用foo.Foo()和调用foo.Base.Foo()效果一致。

Read More

Linux系统Shell特殊变量

变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。

例如,$ 表示当前Shell进程的ID,即pid,看下面的代码:

# echo $$
38977
变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数
$* 传递给脚本或函数的所有参数
$@ 传递给脚本或函数的所有参数。被双引号(” “)包含时,与 $* 稍有不同
$? 上个命令的退出状态,或函数的返回值
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID

Read More

KVM

KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hypervisor:

  • 它由 Quramnet 开发,该公司于 2008年被 Red Hat 收购。
  • 它支持 x86 (32 and 64 位), s390, Powerpc 等 CPU。
  • 它从 Linux 2.6.20 起就作为一模块被包含在 Linux 内核中。
  • 它需要支持虚拟化扩展的 CPU。
  • 它是完全开源的。

Read More