八数码问题,已访问状态采用 factorial number system
表示,未访问的未使用(简化代码) 实现了
Breadth First Search
和 Heuristic Search
两种算法。 带上命令行选项 -g 能输出 Graphviz
的
dot
格式的状态树。
比较满意的地方是把两种搜索算法的共同部分抽象出来了,写成了单独的
search
函数。
我的xmonad配置
缺点
- 依赖的模块较多,升级 ghc 或被 xmonad/xmonad-contrib 依赖的包后需要按照拓扑序更新整个被 xmonad 依赖的树。 如果平时不大升级的就不用在意这一点。
- 没有 systray 等其他 desktop environment 集成的组件,这方面 tiling window manager 世界中的 Awesome 可谓是佼佼者, 其他 wm 都需要手动配置很多组件,Xmonad 也不例外。
优点
- Xmonad 用 Haskell 配置,因为这一点注定了当配置复杂到一定程度后,会远远胜过 那些自定义配置语言的 wm。
- 得到 monad transformer 精髓的 layout transformer 使得复合 layout 变得非常容易, 可以轻易定制出在其他 wm 中不可能实现的 layout。
Haskell实现的Splay树
三周的军训总算挺过去了,这里的网络条件比想象中要糟糕不少。 其实有很多要说,还是等到“十一长假”回家了再慢慢说吧。
废话不多说了,这是一个用 Haskell
实现的
Top-down Splay tree
:
1 | module SplayTree ( |
脱离chroot的枷锁
2015年8月更新
《The Linux Programming Interface》的Chapter 18 Directories and Links提到chroot jail有几个注意点:
chroot()
不改变工作目录。因此通常在调用chroot()
之后会紧跟chdir("/")
,把工作目录设定到新的root;否则仍可使用工作目录访问jail外的文件。只是之后访问jail外的文件不可以用绝对路径了,因为root目录还在jail里。- 可以使用jail外文件的文件描述符脱离jail,使用
fchdir()
即可改变工作目录到jail外。如果是特权进程的话(精确地,指拥有CAP_SYS_CHROOT
权限),还可以在fchdir()
后使用chroot(".")
以把root目录设置到jail外。倘若多chdir("..")
几次,可以回到原先的root目录。 - Unix domain socket提供了进程间传递文件描述符的方法。限定在chroot
jail内的进程可以从外部获取文件描述符,之后即可
fchdir()
使工作目录脱离jail。
下面的例子展示如何使用jail外的文件描述符脱离jail:
1 |
|
用udev自动挂载usb设备
前几天看了 udev
的介绍,今天正好
#ubuntu-cn@freenode
里有人问,就把这个老大难问题解决掉了。
代码如下:
KERNEL!="sd[b-z]?", GOTO="automount_exit"
ACTION=="add", SUBSYSTEM=="block", RUN+="/bin/mkdir /media/%E{ID_FS_LABEL}-%E{ID_FS_UUID}", RUN+="/bin/mount -o uid=1000,user,codepage=936,utf8 $root/%k /media/%E{ID_FS_LABEL}-%E{ID_FS_UUID}"
ACTION=="remove", SUBSYSTEM=="block", RUN+="/bin/umount /media/%E{ID_FS_LABEL}-%E{ID_FS_UUID}", RUN+="/bin/rmdir /media/%E{ID_FS_LABEL}-%E{ID_FS_UUID}"
LABEL="automount_exit"
保存为 /etc/udev/rules.d/
下的某个文件。
自动获取SSH密码并登录
给别人打广告
tusooa 的脚本,主要用 Bash 和 Perl 写的,用了类似 GoboLinux 的组织方式,大家可以去看看。围观地址:[[https://github.com/tusooa/tusooa]] 。
用rss2email阅读feeds
很久没用rss的阅读器了,以前曾用过 emacs 的 newsticker ,不支持HTML。也用过Google Reader,打开速度太慢,而且对Pentadactyl不友好。
把feeds转成邮件来阅读
我的想法是找一款工具,把feeds转换成邮件,由本地的procmail处理(归类),然后再用mutt阅读。
用Makefile搭建博客-2
缘起
前一篇用Makefile搭建博客说到我用inotifywait
监控目录下文件的写操作来更新目录的修改时间,以后只要把make inotify
放到启动脚本中就行了。但当时就发现了一个问题,一直拖到今天才解决掉。