Archive for the ‘Programming’ Category
星期三, 十二月 21st, 2011
这个操作好像经常要用到,拷贝当前光标连续的一段字符串(除了空白和换行), 写了个小函数来实现。
(defun get-continue-string ()
(interactive)
(skip-chars-backward "^ \n")
(setq low (point))
(skip-chars-forward "^ \n")
(setq high (point))
(copy-region-as-kill low high)
(message (buffer-substring low high)))
(global-set-key (kbd "C-x y") 'get-continue-string)
继续阅读
Posted in Programming | Tags: Emacs | No Comments »
星期四, 十月 20th, 2011
最近闲暇时间用C++写了个小Demo,一个小小的篮球模拟。在学校的时候看过《人工智能编程精粹》,里面有个足球模拟,看起来还比较逼真。我这个篮球模拟是比较类似的,主要好玩的地方是在于状态机。图形方面做得很简单,还是用OpenGL来实现的,另外用了一个库glui,这个东西很好,把GUI方面琐碎的事情就简化了。整个效果图如下,这可是湖人对火箭噢。
调试状态机是个很有趣的过程,每一个球队有自己的状态机,分为进攻状态、防守状态、准备发球状态,每个球员也有自己的状态机,如下图所示。这里使用的是状态模式,把复杂的转移逻辑分散到各个状态节点,这正是状态模式的精华啊。现在这个还只是个粗糙的版本,虽然看得出来有那么点意思,规则都出...........继续阅读
Posted in Programming | Tags: C, Game | 8 Comments »
星期二, 八月 16th, 2011
OO是一种编程范型,而不只是特定语言的特定支持,所以用C来实现也是可行的。最近碰到的一部分代码都是用C实现的面向对象风格,可能是参考了Python里面的实现,Python内部实现的基本对象这块也全是这样的代码。在这里做一个小小的总结。
C语言里面没有语言层面的面向对象支持,那OO中的三个基本要素封装、继承、多态如何实现?C里面最强大的东西是指针,指针中最神奇的是void指针,这是一切的基本。首先来看封装,如何通过实例来调用方法,而对内部数据进行隐藏。完全可以写一些struct,然后写对应的函数来针对这个struct来操作,我们需要更进一步,把数据和方法绑定起来。这样写初看起来并没什么好处,后面会发现,通过函数指针去找对应的函数...........继续阅读
Posted in Backup, Programming | No Comments »
星期五, 七月 22nd, 2011
最近在看一本书《Land OF Lisp》,看了大部分。离前一次看Lisp方面的书刚好三年,用Emacs也有四年了,这期间接触的多是简单的Elisp。总得来说,Lisp的书看起来是比较有趣的,这本也不错,稍微比《Practical Lisp》简单。竟然有个第6.5章,Lambda这么重要,怎么说也要占一章!第八章实现了一个小游戏。Wumpus(Hunt the wumpus)是个古老的游戏,那个年代还没有绚丽画面,只有文字界面。这里游戏的规则是:
1. 地图为一个无向图,玩家控制一个人物在图中行走,目的是寻找潜伏在节点中的一个怪兽。其中要边走边推理,得出怪兽在哪个节点。
2. 还有其他角色,有的节点隐藏着超级蝙蝠,它能把你扔到图的任何位置。节点之间的边可能有警察。
3. 如果你...........继续阅读
Posted in Books, Programming | Tags: Lisp, wumpus | No Comments »
星期二, 六月 7th, 2011
我是豆瓣FM的忠实用户,用这个东西已经有一年多了吧,累计收听了不少歌曲(316首喜欢的,45首不再播放的,7352首播放过)。通过这个东西发现不少符合自己口味的音乐。这316首是我喜欢的类型,所以想把这个列表弄下来,然后把这些歌曲下载到电脑上。
看了一下豆瓣是有自己开放的API的,不过还是够麻烦的。于是折腾了一个Python程序,输入你的豆瓣用户名和密码,模拟登录豆瓣并记录cookie,自动地到FM的页面去取下这个音乐列表。这个程序在处理HTML文件的时候有点笨拙,正则表达式不够强嗄。需要另一个库python-beautifulsoup。
通过歌曲名,自动下载这个应该是已经有人做了的,于是发现这个getsong.py,是通过Baidu音乐自动下载的,使用了一下速度和...........继续阅读
Posted in Programming | Tags: mp3, Python, 豆瓣 | 4 Comments »
星期三, 三月 9th, 2011
cflow
cflow是个比较古老的程序(好像比我老一岁),主要是用来打印C程序的函数调用关系,通过函数调用关系能大概看一下程序的流程。最近看了一下这个程序的代码,主要分为两个小程序组成。首先是prcc.c这个程序,作用是读源文件,提取出函数名称,然后生成一个函数列表。第一列是调用函数,第二列是被调用的函数名称(如果是函数声明则这两列相同)。第二个程序prcg.c是读取函数关系,里面建起一个有向无环图。根据这个图加上缩进打印出函数调用轮廓,这里有一个例子。最后是一个脚本cflow.sh,其核心代码就是。
prcc demo.c | prcg
这是典型的通过管道把小程序组起来的例子。
life is short , use Python
闲着的时候在这个程序上做了些小工作。既...........继续阅读
Posted in Backup, Programming | Tags: C, cflow, Linux, Python, 函数 | 9 Comments »