Skip to Content

Blogs

将字符串escape成html/xml中常用的&#xxxx;形式

方法太多了,这里介绍一个用命令行的办法:
echo -n abc围棋123 | iconv -f utf8 -t utf16le | hexdump '-e /2 "%u\n"' | awk '{ if ($0 < 128) printf("%c",$0); else printf("&#%x;",$0) }'; echo
输出为
abc&#56f4;&#68cb;123
它分为三步:
  1. 把utf8编码转换为utf16编码;
  2. 把utf16字符显示为10进制数;
  3. 如果小于128则直接显示这个字符,否则显示为&#xxxx;形式。

利用wget做网站镜像的bash脚本

wget是一款非常优秀的http/ftp下载工具,它功能强大,而且几乎所有的unix系统上都有。不过用它来dump比较现代的网站会有一个问题:不支持css文件,它不会自动下载、重新链接css中所指定的图片。这个问题导致的最常见的后果是dump下来的网站看不到背景图片。本文所介绍的这个脚本主要就是用来解决这个缺陷的。

这里简要介绍一下这个脚本的细节:
  • 第3行用于设置要下载的网站的地址。
  • 第10行用于将文件名转换为windows兼容的格式。windows对文件名格式的要求比unix更为苛刻一点,这里指定为windows也可以兼容unix系统。总的来说,wget的这个功能稍微弱了一点,面对一些更苛刻的系统就没有办法了。
  • 第13行用于忽略robots.txt。很多网站的css、js文件都是在robots.txt中被定义为spider不可访问的。
  • 第15、16行用于忽略某些目录和文件。因为没有了robots.txt的限制,wget可能会去访问一些不需要的东西。这里可以根据具体情况做限制。
  • 第19~24行下载css中链接的文件。
  • 第26~29行修正css中的链接。

求next permutation的python程序

Next permutation即排列的下一个,比如数字1,2,3的排列有
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
那么2,3,1的next permutation就是3,1,2。

以下这个程序完全是用来晕人的,实现的方法效率并不高。不过既然是晕人用的,我就不具体解释它的原理了,呵呵。
def next(a):
    try:
        i = [k for k in range(-2, -len(a)-1, -1) if a[k]<a[k+1]][0]
        j = [k for k in range(-1, i, -1) if a[i]<a[k]][0]
        return a[:i] + [a[j]] + a[-1:j:-1] + [a[i]] + a[j-1:i:-1]
    except:
        return None
    
a = [1, 2, 3, 4, 5]
while a:
    print a
    a = next(a)

自由软件许可证知识测验

GNU官方网站上有一个有关GPL、LGPL知识的测验,难度相当大。当你回答完毕它会告诉你你错在哪里,并有相关的文献解释。蛮好的,估计不久就人把它译成中文。

*** Spoiler Alert ***
它也纠正了我的几个认识上的错误,比如,我以前一直以为在互联网上提供源代码是必须的,而通过光盘等物理介质提供源码是可选的。实际恰好相反,不过想想GPL诞生的年代,这样的要求也是可以理解的。
******************

后记,看来我的预测很神啊,果然有人将这些题目翻译成了中文

一个简易的sopcast的前端脚本

先去http://download.sopcast.cn/download/sp-auth.tgz下一个sopcast的客户端程序,解开,然后和下面的这个脚本sopcast放在同一个目录即可。为了使sp-sc-auth正常工作还需要安装libstdc++5包。

使用方法很简单,运行./sopcast,在弹出窗口中输入sop://开头的那个地址或者直接输入节目号,比如CCTV5是6002,也可以直接运行./sopcast 6002。静候一会就会弹出一个totem窗口开始播放你想看的节目。想停止sopcast则在那个terminal中按ctrl-c即可。

这个程序很简陋,没有像gsopcast那样节目列表功能,但因为很多时候都是从网上找到一个sop://形式地址,列表的用处也不是特别大。相反这样用地址的反而更方便。

动态监视log变动的脚本

这个脚本的功能是监视log文件(或者任意文本文件)的变化,并在terminal窗口标题栏上显示log文件的行数。其中调用了less +F filename功能,它和tail -f filename类似,不过可以按Ctrl-C后翻看前面的内容,按Shift-F继续监视文件末尾。这个脚本一个比较fancy的功能是当log文件有更新时,任务栏上的terminal窗口会像pidgin来消息时那样闪动。

这里还有一个用这个脚本做的.desktop文件,解开后双击就可以用了。需要注意的是,内嵌在.desktop文件中的脚本中的%要用%%来替代。

另外,从这个程序中也不难看出,在X11下监视、窃取键盘操作是很容易实现的。这也就是为什么在X11下的虚拟终端里运行sudo是有安全隐患的,而应该用gksudo一类程序代替。

让人脑子抽筋的逻辑问题

seeghost from forum.ubuntu.org.cn写道:
某教授给他的三个学生的脑门上各贴了一张纸条,并告诉他们:每个纸条上都写了一个正整数,并且其中两个的和等于第三个!(每个人可以看见另两个数,但看不见自己的)
教授问第一个学生:你能猜出自己的数吗?回答:不能;
问第二个,回答:不能;
问第三个,回答:不能;
再问第一个,仍然回答:不能;
再问第二个,仍然回答:不能;
再问第三个:这次回答:我猜出来了,是144!
下面请问:
第一个学生脑门上的纸条写的是什么数?
这个问题我好像在大学的时候听师兄说过,我把它稍微扩展了一下,写了下面这个python程序,其中变量n用于控制教授问了多少人次。比如就上面这个题目而言,n=6。
同步内容