计算字符串md5的几个方法
很多时候我们都需要计算md5用来做校验或者什么的,比如下了个iso,要做个校验看下到的文件是否没有损坏,从而刻盘啊什么的。
这样的需求很好办,直接使用linux提供的工具即可:
md5sum filename
但是有时候我们只需要计算一个字符串的md5,这时可能很自然的想把这个字符串放进一个文件中,再计算这个文件的md5不就行了么。其实这种方法有个问题,就是在文件中这个字符串的末尾有不可见字符,比如换行,这样算出来的就不是原来的字符串的md5了,而是加上这个换行后的,所以这种方法不可取。
数学之美
1 x 8 + 1 = 9
12 x 8 + 2 = 98
123 x 8 + 3 = 987
1234 x 8 + 4 = 9876
12345 x 8 + 5 = 98765
123456 x 8 + 6 = 987654
1234567 x 8 + 7 = 9876543
12345678 x 8 + 8 = 98765432
123456789 x 8 + 9 = 987654321
测试堆的最大申请数量
看到说linux下的虚拟地址空间分给进程本身的是3GB(高址的1GB是内核空间,也就是0xc000000以上地址),所以有这样一个程序来测试用malloc最多能申请多少内存?
#include<stdio.h> #include unsigned max=0; int main(void) { int i,count; unsigned size[]={1024*1024,1024,1}; for(i=0;i<3;i++){ for(count=1;;count++){ void *p=malloc(max+count*size[i]); if(p){ max+=count*size[i]; free(p); } else{ break; } } } printf("The max memory i can alloc is %u\n",max); return 0; }
在我的linux机器上跑了后发现只有1.1G左右的空间,想一下应该是内存768M+swap400多M,所以到不了那么大吧!
使用wget做网站镜像
记得以前在网上看到一个好网站的时候,因为那时上网时间少,就想着把它整个抓下来,存到自己硬盘上,想什么时候看就什么时候看,那多爽。记忆中那时用的软件就是webzip了,但是这家伙是个共享版,如果你用的不是什么什么特殊版本的话,那么这个家伙是会有限制的,功能上的限制忘了,记得的是好像它会插广告在网页内容里面,这实在是极不爽的一件事。
现在虽然上网的时候多了,要查资料的话也能随时上网查,看到好的站也能随时打个书签收藏(比如好用的用tag管理书签的delicious,书签再多也不怕),免得以后要再来看。但是又发现了这样的问题,比如说我非常喜欢某个家伙的博客,但这个家伙的博客访问比较慢,每开个页面都要等好长时间,我就想把它全部弄到本地来;或者说遇到了这样的情况,看到这样一个网站(地址),就是一本书的html版。于是想把它整个保存到本地来,这样看起来就方便了,不用每次看书都跑到人家网站去,而且这个世界,没准今天网上还找得到的资源下一分钟就没了,所以想把看到的好东西就保存起来。
其实不用webzip这些看起来很强大的软件,我们有一个命令行下的软件,短小精悍,功能强大,工作稳定,它就是wget(一个linux下的软件,不过windows下装cygwin包的话也能使用),放心,不要以为它是命令行的就很挫,它还断点续传呢,这次跑了一半关机了,没关系下次还能接着干活,只要给它个 -c 参数就行了。
要做网站镜像用wget只要3个参数就搞定了,所以就只需要打这样一条命令:
wget -mkL $URL
其中参数意义:
m --mirror 做镜像的意思
k --convert-links 把链接变成适合本地阅读的形式
L --relative只抓取与本网站相关的链接,不会因为出现别的网站的链接而一直追踪抓下去。$URL 要抓取的网站的地址
这三个都是必要的参数,当然还有其它的参数可以实现相关功能,比如使用 -O 指定输出文件名字(默认是网站url命名),网络状况不好的话可以使用 -t NUMBER 或完整形式 --tries=NUMBER,其中NUMBER表示重试次数,0表示无限,这样就不怕网络不好异常中断了。
敲好命令,一回车,就看到wget在努力的干活了,默认是输出详细信息,可以看到每个文件的下载进度。
强大的VimIM
什么是VimIM呢,全名就是Vim Input Method,即Vim下的输入法,也许你已经习惯了Vim的插件能提供很多难以想像的功能,但却从来没有想到可以提供一个输入法,但是你不用怀疑,这是真的,并且这是一个强大的插件,只要你的Vim能显示中文,那么使用这个输入法就没有任何问题。
号外:要是vim不能显示中文怎么办呢,提供一个方法,重新编译vim,加上--multi_byte --iconv选项就行了,当然这个前提是你的系统支持中文,系统中文没有配好请参阅相关发行版的wiki。要是系统能显示,请加入下列行到vim配置文件($HOME/.vimrc)
set enc=utf-8
set tenc=utf-8
set fenc=utf-8
set fencs=utf-8,usc-bom
这个插件继承了Unix的哲学,Keep it simple。使用非常简单,只要把两个文本文件拷到插件目录下就可用了(一般是$HOME/.vim/plugin),这就安装好了,就是一个vim的script,天生跨平台(Windows, Mac, Linux),一个词库文件,词库文件就是自己的输入法(拼音,五笔,四角,音形,DIY),所以只要有vim的地方都能用,两个文本文件构成了一个输入法,简单又强大。
输入法主脚本下载:http://vim.sourceforge.net/scripts/script.php?script_id=2506
词库下载:http://code.google.com/p/vimim/downloads/list
无图无真相,看图
这是我使用五笔打出的效果,好了,下来说说怎么用。
它有两个模式,一个叫vim点石成金,英文字母是石,中文是金,一个快捷键,一下就点石成金。
比如要用拼音输入“我们”,就这样输入:women然后使用点石成金快捷键,CTRL+\,一下就变中文。
上面这个适用于英文输入中偶然插入中文,它还有一个中文输入模式,就可以源源不断输入中文了,这个模式的快捷键是CTRL+6,上面那个图就是在中文输入模式下截的。
这些就是基本的用法,当然由于它是和vim结合的,所以你可以自由的配置它,一切随心所欲。
想改变快捷键,可以啊!自己在vim的配置文件搞定 VimIM Mapping
想同时用好几个词库一起用,拼音五笔一起用,好吧!想法奇特,不过,在vim里奇迹总是可以发生的,下面就是见证奇迹的时刻:
vi 你的码表文件
:r 想要合并的码表文件1
:r 想要合并的码表文件2
……
:sort u
:wq
好了,r就是插入一个文件的内容到当前文件,因为码表文件本身就是文本,可以随意编辑,所以你插入几个都没问题,最后排一下序就行了(如果发现排序不对:VimIM 会自动帮忙排序,省您一份操心。),利用了一下vim的编辑功能,就可以把你的输入法打造的更强大。
对于一般用户来说,上面的功能足够了,但是总有愿意折腾的人,他们的需求也不可预料,不过vimIM还提供了N多的功能,像内码直接输入,比如Unicode内码输入,GBK内码输入,BIG5内码输入,四角数字输入(还有人记得这个不,当年我还有一个有这个索引的字典),还有造词,拼音智能匹配(像微软拼音那种)等,更有人工造词(这个也可以直接改码表文件,反正是文本,这就是unix设计思想的牛B之处,文本是通用的数据交流格式。)
算了,其实这些还只是冰山一角,更多功能参见主页:http://maxiangjiang.googlepages.com/vimim.html