Aug 8, 2010

好用的bc

最近搞的东西需要算很多偏移量之类的东西, 又多又烦. 还好, 在被Windows自带的计算器逼疯之前, 我改用了bc.

bc实际上是一种无限精度的计算语言, 可以赋值, 可以循环, 可以判断, 可以打印, 可以编写脚本. 不过我没有玩得那么花, 只是用来计算一些简单的式子而已, 例如:

echo '300+(525*5)-900+25^2' | bc
echo 'scale=3;100/(125-68)' | bc
echo 'obase=16;ibase=10;2*1024*1024+512*1024' | bc

都很简单, 只解释两点:
1, scale代表小数位数, 涉及到除法的时候最好加上, 否则会对齐输入数字中最长的小数位数.
2, obase代表输出进位制, ibase代表输入进位制, 默认都是十进制. 建议把obase写在前面, 否则二进制输入十进制输出”obase=10;ibase=2;”就得写成”ibase=2;obase=1010;”了, 呵呵.


Jul 23, 2010

不规矩的Firefox

Firefox, Swiftfox, Iceweasel都太可气了!

相信各位用wm的朋友都会给特定的应用程序制定规则, 例如放到特定的桌面, 不要边框等等, 很简单, 也很有用.

但是我很久之前就发现这些规则对Firefox及其衍生版都不起作用, 它们不会跟着你的特定规则自动出现在某个桌面, 而是坚持出现在当前桌面. 这个问题在我这一直都是悬案, 直到今天在Arch的Wiki中看到这段: Xprop_for_Firefox.

大概意思就是说: 不管实际是什么, Firefox及其衍生版都只认”Firefox*“这个WM_CLASS字符串. 真这么流氓? 用下面的openbox配置试了一下, 果然老老实实的…

<application class="Firefox*">
  <desktop>1</desktop>
</application>

PS: Wiki中说不知道具体原因, 但我猜是因为启动起来以后WM_CLASS这个值变了, 一直都在启动Xulrunner, 最后时刻给套上了个Firefox, Swiftfox或者Iceweasel的外壳. 改天验证下.


Jul 12, 2010

感人的文字

今天等车的时候看了几页罗永浩的<我的奋斗>, 好吧, 我被感动了.

我这辈子做过的绝大多数看起来不错的选择, 都不是完全被一个纯粹而又崇高的动机所驱使的: 当我勤奋读书的时候, 除了喜欢读书, 我也知道这会换来一些现实的好处;  当我择善固执和坚持原则的时候, 除了清楚这是我希望坚持的, 我也知道这会给我带来好的名声和影响力; 当我努力把事情做得漂亮又敞亮的时候, 除了确实想把它做好, 我也知道这会让很多人喜欢上我; 当我对朋友够意思, 对女朋友关心体贴的时候, 除了我愿意这样, 我也知道这会让他们受到感动…很惭愧, 我从来都不是那种浑然天成, 清澈纯净而又全无自知的真人.

再一次, 我觉得年龄不应该成为行事如此糟糕的借口, 在我的同龄小朋友里, 我也见过很多人是不像我那时候那么不堪的.


Jul 12, 2010

艺术足球万岁

感谢世界杯, 感谢西班牙. 艺术足球万岁!

Champion of World


Jul 9, 2010

升级至Ext4

今天终于忍不住把分区格式转到了Ext4.

很简单, 用puppy或者其它livecd引导, 把原来的分区tar到移动硬盘, 格式化为Ext4后再tar回来就是了. 之所以建立新的Ext4分区而不是从Ext3转过去是为了保证原有文件也使用了Ext4新的特性.

下面是根分区的操作, 其它分区类似:

tar cvpf /mnt/mount_point_of_storage/root.tar -C /mnt/mount_point_of_root ./
mkfs.ext4 /dev/partition_of_root
tar xvpf /mnt/mount_point_of_storage/root.tar -C /mnt/mount_point_of_root

PS1: 记得改fstab和grub.

PS2: 从去年的七月初开始想转Ext4, 一直忍到现在才动手. 事实证明, 我是一个多么稳重的人儿啊…


Jul 2, 2010

Vim选项的Toggle

今天想给Vim添加个Toggle行号显示的快捷键, 但自己写出来的函数怎么看怎么丑.

最后试着查了下手册, 结果再一次被Vim的强大震惊:

:se[t] {option}?        Show value of {option}. 显示该选项当前值

:se[t] {option}!   or
:se[t] inv{option}      Toggle option: Invert value. {not in Vi} 反转该选项的值

一行就搞定了…

" Toggle display line number
nnoremap <F10> :set number! number?<CR>

Jul 2, 2010

WordPress中粘贴代码的小技巧

糟糕的换行和字符替换? 眼花缭乱的代码高亮插件? 各种各样移植性很差的标签? 大家都受够了吧…

废话不多说, 我自己在Wordpress中粘贴代码的方法如下:

先在http://www.elliotswan.com/postable/这里粘贴代码进行HTML字符实体的转义, 然后将转化结果粘贴到HTML编辑器中并加上<pre><code></code></pre>标签, 然后, 完了.

另外, 为了避免代码过长, 编辑主题的CSS文件, 用下面的代码加上个滚动条, 调整下外观什么的.

pre {
width: 98%;
padding: 5px;
overflow: auto;
background: #F0F0F0;
border:#C6C6C6 1px solid;
margin: 10px 20px 20px 0px;
}

贴个脚本给大家看效果: (用来那啥的,嘘…)

#很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长的行
#!/bin/sh

#port=
#user=
#host=
source .hostinfo

name=$(basename "$0")
lock=$(ps -A -F | grep qTfnN | grep $user'@'$host | grep -v grep | awk '{print $2}')

if [[ "$#" = "1" && "$1" = "on" ]]
then
	if [ -n "$lock" ]
	then
		echo Tunnel is already on.
		exit 1
	else
		ssh -qTfnN -D $port $user'@'$host
		exit 0
	fi

elif [[ "$#" = "1" && "$1" = "off" ]]
then
	if [ -n "$lock" ]
	then
		kill $lock
		exit 0
	else
		echo Tunnel is already off.
		exit 1
	fi

else
	echo "Usage: $name on | off"
	exit 1
fi

exit 0
#很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长的行

Jun 18, 2010

制作目标板flash镜像

今天接了个小任务, 写个程序用板子上的整个flash做个镜像, 量产的时候要用. 据说之前用那个专用软件读取超慢, 只有几K每秒.

我第一个念头就是可以用dd或者cat, 但总觉得没这么简单, 试过之后发现, 就是这么简单. 而且只要几秒钟, 整个镜像就做好了.

#!/bin/sh

PARTNUM=11

if [ -z $1 ]
then
	echo ERROR: Please specify the output filename
	exit 1
fi

for i in `seq 0 $[$PARTNUM - 1]`;do
	#dd if=/dev/mtd$i >> $1
	cat /dev/mtd$i >> $1
done

exit 0

PARTNUM是板子上的分区数, 我们这个项目是11个分区, 从0到10.

两点说明:
1, 参数只有一个, 即生成的目标文件路径, 可以写到外接usb设备或者nfs目录里.
4, 用mtd或者mtdblock都可以, 生成的文件是一样的, 但这个可能取决于具体情况.


Jun 18, 2010

nfs挂载之uid映射

开发的时候用nfs把主机目录挂载到板子上是很方便的, 我们就是如此.

nfs的配置文件是/etc/exports, 可以设置具体目录的具体参数, 包括只读或者可写. 一般情况下, 目录挂载为只读就可以, 但这几天有点新需求, 需要往nfs主机目录写文件, 于是问题就来了: 写入的文件的owner是root, 管理起来麻烦得很, 尤其我们的nfs主机是一台服务器, 我在上面只有普通帐户没有root权限.

研究了下exports的写法, 发现有个User ID Mapping的功能, 可以将客户端的操作请求视为主机上的某个用户, 例如:

/home/adam/nfs *(rw,sync,all_squash,anonuid=500,anongid=600)

重点在all_squash,anonuid=500,anongid=600这三个选项, 500和600是我在nfs主机上的用户id和组id. 这样一来, 写入的文件的owner就是我了, 可以任意操作了, 舒服.


Jun 17, 2010

Imagemagick之批量转换

最近朋友在做界面方面的开发, 帮她找了一堆SVG格式的矢量图标.

麻烦的是, 她在Win下没有能方便地查看svg的软件(IrfanView和XnView都得加个需要注册的插件才行), 只能用CroelDRAW或者InkScape一个个打开看. 而且这些图标最后要用的时候得转成分辨率为256x256的PNG, 文件夹又分得很细, Win下的批量转换软件用起来也很麻烦.

所以, 好人做到底, 有请无敌的Imagemagick:

find ./ -name *.svg -exec convert -resize 256x256 {} {}.png \;

只是这样会出现foobar.svg.png这样难看的文件名, 查了下, Imagemagick还有一个工具mogrify:

find ./ -name *.svg -exec mogrify -format png -resize 256x256 {} \;

方便吧? Imagemagick还有很多超强的工具和用法, 大家没事的时候可以研究下.

PS: convert能够处理.svgz这种压缩过的格式, mogrify不能. 所以可以先convert再用rename批量改掉.