人間夜行

一切の有為の法 夢幻泡影の如し

我的.vimrc

| 评论

留个档案,以备不时之需。

syntax on
set cindent
set number
set smartindent
set autoindent
set showmatch
set langmenu=zh_CN.UTF-8
set helplang=cn
set ruler
set shortmess=atI
set fileencodings=utf-8,chinese
colorscheme evening
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim

神奇的Brainf*ck

| 评论

Brainf*ck语言(简称BF)是一种超级神奇的语言。当然与我上一篇文章(Prolog语言一瞥)所介绍的不同,这个语言并不具有很多的实际应用价值,它只是一个图灵机的实现。

八个图灵机状态:

字符 含义
> 指针加一
< 指针减一
+ 指针指向的字节的值加一
- 指针指向的字节的值减一
. 输出指针指向的单元内容(ASCII码)
, 输入内容到指针指向的单元(ASCII码)
[ 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处
] 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处

Prolog语言一瞥

| 评论

曾经有一段时间接触过Prolog,对其有一点点兴趣,但仅仅停留在用“friend(X,Y):-likes(X,Y),likes(Y,X).”耍耍人的层面。现在又无意中看到了它,觉得它真了不起,基于逻辑,还人工智能!于是去维基百科查看它的资料,一看还真傻了眼:

下面简洁的排序范例可以体会到为什么AI领域喜用Prolog:

 

/* sortcsj.pl 原始參考:Computer Science J. Glenn Brookshear */

/* sortcsj()中的第二個引數帶有排序好的結果 */

/* 僅為示範,若為gprolog使用者則用內建sort等較佳 */

/* 在gprolog下之編譯例:gplc --min-size sortcsj.pl */

/* 執行 sortcsj 後會出現排序結果 [2,9,18,18,25,33,66,77] */

q:- L=[33,18,2,77,18,66,9,25], (sortcsj(L,P), write(P), nl).

sortcsj(L,S) :- permutation(L,S), ordered(S). /* L為原list, S為排序好的list, 此為permutation關係(built-in) */

ordered([]). /* 表empty list視為排序好的list */

ordered([_|[]]). /* 只有一元素之list視為排序好的list */

ordered([A|[B|T]]) :- A =< B, ordered([B|T]). /* 此rule約束所謂的排序好是指前項元素小於或等於後一項元素 */

:- initialization(q). /* 啟動q處goals */ 排序居然可以如此简单。还有如下:

俄罗斯方块可以永无止境地玩下去吗?

| 评论

近日,看到一同学玩俄罗斯方块持久不死,便与其讨论,得出只要程序不耍人就可以无限玩下去的结论。现在看来,貌似是被证实了。

原文《俄罗斯方块可以永无止境地玩下去吗?》http://www.cnbeta.com/articles/160207.htm

大家在玩俄罗斯方块的时候有没有想过这样一个问题:如果玩家足够牛B的话,是不是永远也不可能玩死?换句话说,假设你是万恶的游戏机,你打算害死你面前的玩家;你知道任意时刻游戏的状态,并可以有针对性地给出一些明显不合适的方块,尽量迫使玩家面对最坏情况。那么,你有没有一种算法能保证害死玩家,或者玩家无论如何都存在一种必胜策略呢?

Cygwin中上人人

| 评论

由于工作需要,最近要使用Windows机器。但是有割舍不了*nix风格操作方式,于是使用了大名鼎鼎的cygwin,另外还装了w3m。

想想就知道,人人是几乎不可能会有cygwin的客户端的,要用就得自己做!因为我常常是看帖不回的(除了无聊时),所以设想通过开关w3m的方式来实现定时刷新。写出如下bash脚本:

while [ "d" = "d" ]
do
w3m -cookie wap.renren.com&
sleep 60
pkill w3m
done
本人bash属于现学,所以写得不好请见谅(确实不太好= =)。通过这样的方式便能实现人人的自动刷新。

其中sleep定为60秒,你可以自己改。当然如果你想在linux上用这个,理论上应该也可以。

ps:cygwin需要安装非默认的procps软件包。

小小地吐一个

| 评论

我不过是下一个游戏罢了,用得着给这种速度吗?

[caption id="attachment_194" align="aligncenter" width="300" caption="下载0ad时的速度,sf不给力"]下载0ad时的速度,sf不给力[/caption]

Sourceforge每次都自动跳转到那个镜像。慢啊。:-(也许下次该设法配置一下了。

当数值超出范围

| 评论

这两天在学校的Windows机器上捣鼓C语言的程序,无意中编了这样一个程序。要命的是,它的运行结果是出人意料的。

#include <stdio.h>
int main()
{     int a=1;
    for(;;)
    {
           a*=2;
           printf("%d\n",a);
           if(a==0)
           {
                   printf("Top reached.\n");
                   getchar();
           }
    }
    return 0;
}

关于multilib的补充说明

| 评论

我的上一篇文章(《艰难曲折的wine经历》)提到了multilib的问题。当时是以“冲突”的形式出现,现在回放一下:

[koc@koc-desktop wine-1.3.28]$ yaourt gcc-multilib
1 multilib/gcc-multilib 4.6.1-4 (multilib-devel)
The GNU Compiler Collection – C and C++ frontends for multilib
==> Enter n° of packages to be installed (ex: 1 2 3 or 1-3)
==> ——————————————————-
==> 1

密码:
正在解决依赖关系…
正在查找内部冲突…
:: gcc-libs-multilib 与 gcc-libs 有冲突。删除 gcc-libs 吗? [y/N] y
:: binutils-multilib 与 binutils 有冲突。删除 binutils 吗? [y/N] y
:: gcc-multilib 与 gcc 有冲突。删除 gcc 吗? [y/N] y
(后面省略) 最后我的做法是分别使用gcc-libs-multilib,binutils-multilib,gcc-multilib替换gcc-libs,binutils,gcc。确实,我当时犹豫了很久,经过一番臆测之后,得出这样的结论:

艰难曲折的wine经历

| 评论

话说自从使用arch以来就没有用过wine了。不过因为好奇,还是用用看。官方源中用pacman下载的wine是64位版本(我是64位机器),许多软件运行不正常,无奈之下,想到自己编译成32位的。可是一路曲折,困难多多。

从winehq下载最近版本,解压。直接./configure,因为默认会编译成32位的版本。此时遇到错误:

checking whether gcc -m32 works... no
configure: error: Cannot build a 32-bit program, you need to install 32-bit development libraries.

试用openbox

| 评论

一直都比较喜欢简洁快速干净的东西。在使用了一段时间的gnome3之后,渐渐觉得它还是有点臃肿的感觉。听说openbox还不错,于是就试用了一下。

openbox的配置还算简单,但是功能却不简单。我比较懒,不想手工修改配置,于是装了obconf(总体感觉的配置),obmenu(菜单编辑),obtheme(主题编辑)。这三个图形化配置工具非常容易使用,很适合新手。另外还装了tint2和conky,这样就像一个桌面的样子了。

实际上,我在.xinitrc中写exec openbox还是exec openbox-session斟酌了很久,因为我需要在openbox启动时运行一段脚本。我看过网上的autostart.sh的方法,但是这就需要openbox-session。然而,这样就会将gnome的daemon(也许?)运行起来,这不是我想要的。所以目前采用的方法是直接启动openbox,然后将一个快捷键绑定到那个脚本即可。

To be honest,本人也有使用过fvwm和awesome的经历。fvwm的配置太难理解,awesome的瓦片式也不习惯。经过比较,我觉得还是openbox方便,它更适合我。

你找到了适合你的窗口管理器吗?