《UNIX编程艺术》摘记

Unix诞生于1969年。

Unix哲学是自下而上的,而不是自上而下的。

unix程序的目标:只做一件事并做好它。编程的核心是数据结构,而不是算法。

unix哲学可以概括为:

  1. 模块原则:使用简洁的接口拼合简单的部件。
  2. 清晰原则:清晰胜于机巧。在写程序时,要想到你不是写给执行代码的计算 机看的,而是给人看的。花哨的代码不利于维护。
  3. 组合原则:设计时考虑拼接组合。在输入输出方面,Unix传统极力提倡采用 简单、文本化、面向流、设备无关的格式。
  4. 分离原则:策略同机制分离,接口同引擎分离。这种模式的经典例子是Emacs 编辑器。它使用内嵌的脚本语言Lisp解释器来控制C编写的编辑原语操作。
  5. 简洁原则:设计要简洁,复杂度能低则低。
  6. 吝啬原则:除非确无它法,不要编写庞大的程序。尽量利用现有的资源。
  7. 透明性原则:设计要可见,以便审查和调试。
  8. 健壮原则:健壮源于透明与简洁。
  9. 表示原则:把知识叠入数据以求逻辑质朴而健壮。 面对复杂数据和复杂代码,宁愿选择前者。 换句话说,使用合适的数据结构,能够简化程序逻辑。
  10. 通俗原则:接口设计避免标新立异
  11. 缄默原则:如果一个程序没什么好说的,就保持沉默
  12. 补救原则:出现异常时,马上退出并给出足量错误信息。
  13. 经济原则:宁花机器一分,不花程序员一秒。
  14. 生成原则:避免手工hack,尽量编写程序去生成程序。
  15. 优化原则:雕琢前先得有原型,跑之前先学会走。 用“极限编程”宗师kent beck的话讲: 先求运行,再求正确,最后求快。
  16. 多样原则:决不相信所谓“不二法门”的断言
  17. 扩展原则:设计着眼未来,未来总比预想快。

unix哲学,一言以蔽之: KISS = Keep It Simple, Stupid!

 
 

Posted by Jolly Wing 2015年11月08日 21:13


cmmusic:小巧而实用的mplayer音乐播放前端

小巧的cmmusic来了,为mplayer提供了一个简单实用的 音乐播放前端。

Posted by Jolly Wing 2015年11月08日 20:59


自制Linux下的番茄钟

习惯使用番茄工作法,在Linux上工作时也需要一个番茄钟。 安装一个Linux下番茄钟工作软件? 其实根本没必要,我们可以用Linux下经典的at命令实现一个简单的番茄钟。

1.1 安装at

一般Linux基本系统里都包含了at这个小巧实用的工具,不需要安装。

不过林子大了,什么鸟都有,比如我最近使用的centOS中居然没有at命令。 于是我安装这个包。

sudo yum install at

你可以用 which at 查看有没有at命令。如果没有,就安装一个。

1.2 at的基本用法

软件准备好了,简单实验一下at的用法。

首先我们要启动atd服务。

# service atd start
如果你没有service命令,你可能需要使用类似下面的命令。
# /etc/init.d/atd start
或许你的系统已经抛弃了initscripts,已经再用systemd了, 你可以用systemd启动服务
# systemctl start atd

服务启动后,我们看看怎么用at添加一个定时任务。

输入 at now+1 minutes 回车, 命令行显示 > ,让你输入要执行的任务。 我们输入 echo "hello world!" 按 control 和 d 结束任务输入。

这样我们就有了一个job. 输入 atq 命令可以查看任务队列。 有任务号和任务将执行的时间。

上面添加的任务表示1分钟后,在终端输出 hello world!

想查看某个任务的详细信息, at -c 任务号.

想删除某个任务, atrm 任务号 或者 at -d 任务号

这个交互式的输入任务的方式比较麻烦,不利于用脚本添加at任务。 怎么办?可以用管道为at指定任务。 上面添加任务的过程可以简化为一行命令

echo "echo 'hello, world!'"|at now+1 minutes

1.3 用at做番茄钟

一个番茄钟是25分钟, 在at命令中使用 now+25 minutes 就能指定25分钟的时间间隔。 当一个番茄钟的时间间隔过去后,用什么方式提醒我们时间到了呢? 我们可以播放一段音乐,显示一个图片,甚至播放一段视频。

好,因为在办公室里使用,播放音乐会干扰别人,我们就采用显示一张图片的方式吧。 显示图片的工具很多。比如 feh,比如 ImageMagick 中的 display。 当然别的还有很多。这里以 feh 为例。

我们可以显示一个美女图片,比如其路径是 ~/pics/girl.png 。 那么我们要执行的任务就是 feh ~/pics/girl.png 。 我们想要25分钟后,显示这个图片,就这样做:

echo 'feh ~/pics/girl.png' | at now+25 minutes

我们可以先把时间间隔设为一分钟,看看效果。

echo 'feh ~/pics/girl.png' | at now+1 minutes

一分钟到了,怎么回事?不显示图片。 atq 查看任务队列,队列也空了,证明任务执行完了。 atq 输出时,告诉我: You have mail in /var/spool/mail/jolly. (其中jolly是我的用户名)。 cat /var/spool/mail/jolly 查看邮件,内容是:

(feh:2632): Gdk-WARNING **: cannot open display: 

display后面是空的,证明feh执行的时候没有指定display。 再加入上述任务:

echo 'feh ~/pics/girl.png' | at now+1 minutes

at -c 任务号 查看它的详细内容。

发现在 'feh' 命令之前,还有很多的环境变量。 但环境变量里不包含 DISPLAY。怪不得找不到display呢。

echo $DISPLAY ,发现DISPLAY的值是 :0.

好,我们在执行feh命令的同时,用 env 指定DISPLAY的值。 再实验一下:

echo 'env DISPLAY=:0 feh ~/pics/girl.png' | at now+1 minutes
一分钟之后,果然开始显示图片了。 成功!

1.4 用脚本包装

为了方便,我们写一个脚本, new-clock

#!/bin/sh
echo "env DISPLAY=:0 feh ~/pics/girl.png" |at now+25 minutes
: chmod +x new-clock

把new-clock放入执行路径,比如放入 ~/bin 目录下。

cp new-clock ~/bin

这样我们敲入 'new-clock' 命令,就启动了一个番茄钟。 25分钟过后,将显示图片提醒我们。

如果你没有X环境,就不能用显示图片的方式了,可以播放声音来提醒。

2014-03-21 Fri

 

Posted by Jolly Wing 2014年3月20日 18:34