Perforce Tip: how to apply my default change to the release branch

Create the patch,

p4 diff -du -db main-branch/... > ~/mywork.patch

Go to the work directory of release branch.

cd dir-release-branch/

`p4 edit’ the files I want to patch under release branch. Please note,

  • `lsdiff’ is from the package `patchutils’.
  • `nosl’ will strip the slashes. It’s written by me.
cat ~/mywork.patch|lsdiff|nosl 5|p4 -x - edit

Patch the files and DONE!

patch -p5 < ~/mywork.patch

Here is the source code of nosl. I put it in my .bashrc

function nosl(){
  if [ -z "$1" ]; then
    echo "Usage: echo /hello/world|nosl num"
    echo "strip num leading slashes"
  else
    perl -pe "$n=$1;while($n>0){ $_=~ s/[^/]*/+//;$n--; }"
  fi
}

BTW, you could save all the trouble of Perforce by switching to Git.

Linux桌面使用之道

我在个人电脑使用Linux桌面已4年(工作中使用Linux的时间要长的多),深深体会到了Linux桌面的好处.

从某种角度来看,Linux桌面要比Windows桌面好用得多.前提条件是,

  1. 使用者有一定的理性思维
  2. 坚持适合自己的原则
  3. 方法和工具

我使用的Linux发行版是Arch Linux,其特点(缺点?)是软件更新快,最新的软件包未必经过长时间的严谨测试.所以Arch Linux绝不是发行版中最不折腾人的,我能和它和谐,和其他发行版就不用说了.

第一原则,不折腾

对我而言,使用软件的目的是工作和娱乐.软件只是帮助我实现目的的手段而已,和实现目的无关的资源消耗越少越好.

坚持该第一原则,日常操作就可以很有效率.

选择软件的标准

选软件就是投资

我的标准是选软件要成本小收益大.收益如前所述,就是工作和娱乐.所以只需考虑削减成本了.

具体措施,就是只用少量软件做尽可能多的事.

Arch Linux的流行作风是一日一更新.我使用的软件数量少,要更新的也少.

那么我是否需要一日一更新呢? Arch Linux有这个选项并不等于我必须这么干.今天我刚升级完1.3版本,明天1.4又出来了,为什么我不多等一天,直接升级到1.4呢?

我的作法就是大多数软件我短期内不升级.最常用的软件我会根据需要理性升级.例如,firefox的安全升级我总是及时跟进,Linux的kernel我一年才升级一次.

依据投资收益的原则,我偏爱命令行软件,因为它们不依赖于图形界面库,升级的压力小很多.同类的命令行软件,我会优先考虑依赖的第三方库比较小的.例如用C写的软件优于用python写的软件.

我有个根据编写软件的语言来判定软件是否轻小的主观标准,c < perl < python, ruby, ….. < c++, java.

以下是我用的主力软件,其中的编辑器,浏览器,Shell,桌面,都是功能强大,定制度高,可编程.

编辑器

我用Emacs,考虑到它可以做任何事,可以认为它是轻量级的.

Vim也用,万不得已用nano,结束了.

浏览器

没多少选择,firefox,如上所述,firefox是我更新频繁的软件.

Shell

我用bash,在我的.bashrc中有如下一行,

export HISTSIZE=200000

确保我输入的所有命令都不会丢失,因为我说过,我偏爱命令行软件,但是要记住常用命令行会消耗我很多脑细胞,这是不符合投资收益原则的.所以我让shell替我记住.我只要记住按Ctrl+R可搜索历史就好了.

桌面

Gnome,KDE是绝对不会考虑的.我安装了Xfce4以给我太太用.我使用更轻量级的musca,安装包大小才100K.

其他

网络管理我用Netcfg(命令行)而不是wicd,因为wicd的依赖多而且曾经折腾过我,播放视频我之用mplayer(命令行),等等.

软件的使用也需维护

安装软件在包管理系统的帮助下很简单.麻烦的是最新软件有时候不稳定,这通常是因为软件的配置文件更新引起的.

将/etc目录下的默认配置文件备份

Linux的软件默认配置文件在/etc/目录下. 我使用分布式版本控制软件git管理/etc目录,分布式版本控制系统好处很多,最大好处就是数据到处有完整备份,非常安全.具体细节请参考wikipedia.

同类软件mercurial,bzr也可,要考虑的因素是第三方服务器是否支持(对分布式版本控制软件来说,第三方服务器不是必需的).

在Arch Linux上每次更新完系统或者安装最新软件包后,可以考虑手动将/etc目录下的文件用git备份(Debian可自动备份).

sudo git add /etc/
sudo git commit -am "backup"

一旦某个软件工作不正常了,可以检查其/etc下默认配置文件的修改纪录,将配置文件恢复到上一个正常工作的版本.

sudo git log /etc/mysql/my.cnf #check history
sudo git checkout commit_ref(version) /etc/mysql/my.cnf #restoren file

/etc/目录下的临时文件不需要备份,以下是我的.gitignore

*~
*.pacnew
*.pacsave
*.swp
*.pacorig
*.swp
mtab

将用户目录下的用户定制配置文件备份

我也是用git,配置文件备份到github的服务器上.这里必须用第三方服务器同步配置,因为我使用多台电脑.

具体操作可写成长篇大论,这里不展开了.

将软件版本降级

最新版本的软件可能不稳定,这时降级是必要的.

请参考Archwiki,实际上很简单,安装名为downgrade的软件,然后让它干所有的体力活就行了.

yaourt downgrade

云备份

电子图书,多媒体文件用专业的云备份服务更好,我推荐Dropbox.

顺便说一下,国内的服务不要用,安全原因,不言自明.

备份操作系统

不用经常作,又有云备份,又有分布式版本控制系统,怕什么.

备份整个硬盘是用Clonezilla,只是备份操作系统的话用以下命令,

tar zcvpf mylinux.tgz --exclude=/proc/* --exclude=/lost+found --exclude='mylinux.tgz' --exclude=/mnt/* --exclude=/home/username/* --exclude=/sys/* /

我建议用前者,因为省事.

阅读官方文档

照着ArchWiki安装软件,一般不会有问题.

加入社区

紧急客户支持还是用IRC比较好,没用过IRC的可以装firefox插件Chatzilla体验一下.

虚拟机的用处

我虚拟机软件使用VirtualBox,虚拟机为Windows XP,该操作系统我会定期更新安全补丁.软件只安装了IE和firefox.该操作系统我只用来操作网络银行.每次操作完毕,我会重置虚拟机状态到操作前的snapshot.

救急工具箱

即使采用了上述做法,一年中也会有一次倒霉.就是我要用的某个版本的某个软件出问题了.没人能帮忙,不能降级,改软件配置也没用,也没有可用的错误信息.

问题看起来很难,事实上5分钟就能搞定.这往往是因为某软件需要的第三方库的版本出问题了.

比如说firefox不能启动,运行如下命令调试,

strace -o err.txt firefox

读一下err.txt就可以知道是哪个库出问题了.相信我,这是不需要任何编程知识的,猜加google就可以了.

你知道哪个库文件出问题了(保险起见,ldd firefox确认一下).比如/usr/lib/libpng.so.14找不到,简单的解决办法是用另一个版本的库文件代替.

如果/usr/lib/libpng.so.15是存在的,我们可以用该库顶替libpng.so.14,

sudo ln -s /usr/lib/libpng.so.15 /usr/lib/libpng.so.14

通常这样就行了.

万一冒名顶替不行,我们就必须根据丢失的库文件查找需要安装的软件包(pacman没用的),

pkgfile libpng

pkgfile属于软件包pkgtools,所以你必须安装pkgtools,

yaourt -S pkgtools-git

坚持使用gnu screen

虽然tmux很优秀,但是目前很难支持cygwin(Nicholas Marriott在2010年12月说的),而我的工作需要使用windows.

最新版的screen的一个重要特性就是已支持垂直分屏,其快捷键为”C-a |”.

要安装最新版的screen,在我的Arch Linux下很简单,

yaourt -S screen-git

在windows的cygwin下安装要多几步.

首先安装软件包libncurse-devel,然后去官方网站下载最新源代码包(目前版本为4.0.3),解压缩,

tar zxf screen-4.0.3.tar.gz

编译安装,

cd screen-4.0.3;configure;make;make install;

如用urxvt作为Terminal Simulator(比如我),直接启动screen会报错,

$ screen
$TERM too long - sorry.

原因为screen的开发者对于环境变量$TERM的最大长度做了不合理的假定.这里是具体讨论,解决办法很简单. 在.Xdefaults中添加一行,

urxvt*termName: rxvt-256color

在.screenrc中添加一行,

term rxvt-256color

使用screen前我将screen的Ctrl-a改为Ctrl-t

因为Ctrl-a在bash和emacs中都是常用快捷键,在.screenrc中添加一行,

escape"^Tt"  #the default of A interferes with emacs keybindings for terminal, and I never use the emacs transpose command

这个修改我是从Balaji S. Srinivasan.screenrc抄来的. 可以参考emacs wiki获得更多兼容emacs的设置.

晒晒我的常用软件清单(和某安全中心推荐清单无交集)

Windows软件清单

工作中我90%的时间用perforce+cygwin+Visual Studio+vi+firefox.下班后基本不碰windows.

名称 说明 频率 性质
perforce 版本控制 收费
cygwin Linux下常用工具集合 开源
7-Zip 压缩解压缩 开源
AviSynth 2.5 视频编辑 开源
BitSpirit BT下载 免费
utorrent BT下载 免费
Brother Brother打印机附赠软件,其ControlCenter3的ocr功能对我有点用.如扫描账单备份到网上 免费
CDBurnerXP 刻录 免费
CDex170b2 cd转mp3,可从网上获得cd信息后自动生成mp3文件名 开源
ditto 剪贴板管理 免费
CMake 2.6 跨平台build工具,相见恨晚 开源
CodeBlocks 跨平台的c++ IDE 开源
ColorPic 4.1 取色 免费
comicsviewe 看漫画 免费
DAEMON Tools 虚拟光驱 免费
Debugging Tools for Windows 如题 免费
Wink 录屏 免费
Dependency Walker 检查dll依赖 免费
eMule p2p下载 开源
FBReader 电子图书阅读 开源
foobar2000 音乐播放 开源
Foxit Reader PDF阅读器 免费
GhostScript pdf解析引擎 开源
GIMP 图像编辑 开源
gnuplot 数据分析,主要用于数据显示 开源
gtalk 即时通信,语音服务佳 免费
Picasa (google) 照片管理 免费
google拼音 输入法,主要特色在于可以在线同步词库,资源消耗高 免费
AVG Free 杀毒 免费
hoekey 热键 免费
ImageMagick-6.3.5 命令行图像处理 开源
InfraRecorder 刻录 开源
Inno Setup 5 打包,开发用 开源
Internet Explorer 系统自带 免费
IPMsg 局域网通信 开源
IrfanView 看图,可与total commander集成 免费
Mercurial 分布式版本控制 开源
Msn Messenger 微软的即时通信软件 免费
Microsoft Platform SDK for Windows Server 2003 R2 和Visual C++ 2005 Express结合开发win32平台软件 免费
Microsoft Visual Studio Express 2005 C++ IDE 免费
Miranda IM 集成了yahoo,icq,qq,msn,gtalk,irc,msn的即时通信 开源
Firefox 网页浏览 开源
Mozilla Thunderbird 读email,在web mail出问题时有用 开源
mtPaint mspaint的替代品,简单画图,界面费解 开源
MWSnap 截图 免费
Notepad++ 文本编辑,我用vi,给别人用 开源
LibreOffice 办公字处理,导出word到pdf.最,画组织结构图,中文教程少 开源
OpenVPN VPN 开源
Opera 网页浏览 免费
Chrome 网页浏览 免费
Pandora Recovery 恢复误删除的文件 免费
Passcape Mozilla套件密码恢复 免费
password-recovery 密码恢复 免费
PPLive 在线电视 免费
reshacker 从可执行文件中提取资源(图标) 免费
ScanSoft 买打印机附送的扫描软件,可以扫描为pdf文件 免费
sitman 复读机 共享
Skype 即时通信,语音通话 免费
SopCast 在线电视,在国外看央视效果不错:) 开源
StarDict 辞典 开源
Subversion 版本控制 开源
SumatraPDF pdf阅读器 开源
VirtualBox 虚拟机,用于模拟开发环境,或是网上银行专用的操作系统 开源
QQ 如题 免费
MiniThunder(迅雷) 下载 免费
PDF-XChange Viewer PDF阅读器(由于工作关系,我装了很多PDF阅读器) 免费
UltraVNC 远程桌面控制 开源
Subtitle Workshop 字幕调整 免费
USBOOT 1.7 使usb能够启动电脑,制作usb自启动盘时用 免费
F…gate 翻墙 开源
Vim/GVim 文本编辑 开源
Total Commander 说是世界第一的文件管理器不算过分,未注册版 共享
bblean windows shell 开源
Bridge Base Online 游戏 免费
ntemacs 文本编辑 开源
openssl 如题 开源
python2.7 一种脚本语言 开源
wtl 微软的c++ gui程序开发库 开源
wxWidgets 跨平台c++ GUI库 开源
mplayer 命令行视频播放软件 开源
autoruns 检查启动时默认启动那些软件,用于手动杀木马 免费
process explorer 检查电脑中有什么程序在运行,用于手动杀木马 免费
Everything 找文件 免费
treewalk 缓存DNS 免费

firefox插件

名称 说明 频率
adblock plus 过滤广告,支持正则表达式
del.icio.us 1.2 网络书签的插件,较老版本
downloadhelper 视频下载
Autoproxy 代理上网
Firefox sync 同步个人数据
Greasemonkey 安装了Greased Lightbox (看图)和Lookitup(资料查找)脚本
pronounce 输入单词发标准美音
firebug 最好的web开发工具
KeySnail 安装了HoK(快捷键设置)脚本代替vimperator
Autopager 自动翻页
ChatZilla IRC
ColorZilla 取色
Vacuum Palaces Improved firefox使用的sqlite数据库加速

total commander插件

名称 说明 频率
CatalogMaker.wcx 创建文件列表
CHMDir.wcx 生成chm文件
7zip.wcx 压缩解压缩7zip格式的压缩文件
UnInstTC.wfx 管理”添加/删除软件”面板
Registry 管理注册表
ex2fs.wfx 访问linux分区(只读)
sftpplug.wfx 支持sftp
imagine.wlx 看图

vim插件

名称 说明 频率
cscopemaps.vim 为vim中使用cscope(看c/c++代码工具)添加快捷键支持
LargeFile.vim 看大文件时自动优化vim
matchit.vim 跳转至匹配的符号,比如在匹配的括号见跳来跳去
NERDcommenter.vim 码(支持很多语言)添加/取消注释
taglist.vim 显示函数列表

emacs插件

我正全面转向emacs中,所使用的插件清单尚未稳定,这里列的只是固定下来的项目.

名称 说明 频率
gnus gmail,新闻组
org-mode 个人项目管理,笔记
w3m 网页浏览
eim 中文输入
elim 即时通信
elpa emacs的app store
erc irc
smart-tab auto complete everything by TAB
org2blog 写博客
rinari ruby IDE
better-registers 使用register更方便

Linux软件清单

操作系统为Arch Linux 使用频率最高的软件为git+emacs+vi+firefox+musca+bash

名称 说明 频率
emacs 任何事
vi 文本编辑
firefox 网页浏览
opera 网页浏览,当跑不动firefox时
pidgin 即时通信
rxvt-unicode Terminal
bash shell
musca 窗口管理(使用musca-mm-git)
qtcreator C++ IDE
wine win32模拟器
gappproxy 翻墙
f…gate 翻墙,需要wine
mplayer 视频播放
audacious 音频播放
amule p2p下载
rtorrent BT下载
virtualbox 虚拟机
gimp 图片编辑
git 版本控制
zathura pdf阅读