这个问题是老长时间之前的了,我在repl下边看书边写代码测试一些看书想到的问题,然后把你个内建函数名写错了,sbcl提示我参数不是list,但是群里求救别人都没看出来是函数名写错了,后来我发现是特么的函数名写错。但是我很纳闷,为啥会这么个出错模式。 有人推荐我下了lw,lisp works。然后lisp works提示函数未找到。然后就会轻松知道原因了。 后来妮神给我讲,函数调用是根据名字来确定用哪个函数,而cl标准未规定函数调用的时候,是在参数计算前确定哪个函数还是在后,或者中间。 所以这个问题就导致了,sbcl和lw一样是先执行参数后确定函数的,因为可能参数里边会定义这个函数。(javascript也是这样的)sbcl执行参数发现参数不是list报错了,我测试的那个函数是匹配列表的,可以是cons所以不一定是列表,真是凑巧啊。而lw可能回溯回去 报了函数名不正确的错误。 群里另一个人好像用clisp的实现,是先确定函数然后计算参数的。 当时群里写过一个测试代码,杀叔让我写一个python版本的,我在函数里边用了global,然后python也就替换

Continue

妮神教的,没看过标准的我只能猜测,不过开始猜测的还正确了 我在一个包文件里这么定义了一个常量 (defconstant +levels+ (vector :error :warning :info :debug)) load的时候说重复定义,这显然是不正确的,我其他地方都没定义过,显然后边那个值又计算了。我在群里问就是后边这个值是不是又计算了一次。 不过我不知道原因是load了多次导致的 妮神的讲解就是,加载到repl的时候会load多次,然后 就会定义多次,而常量不允许定义多次,cl的实现就会判断定义的时候后边的值是否eql,eql就通过,不eql就报错。而vector虽然是不变长的,但是还不是一个对象,执行两次不eql,所以会报错。 直接用defparameter定义的,包里边自己别修改一般不会有问题吧。

Continue

在妮神帮助下,学习了很多cl的知识,后边都总结一下。 本想晚上洗袜子,跑步。写代码写的上火,写了一晚上写了40行cl代码,四个宏,并且功能还没做完。想给框架先写个log模块的,用宏可以编译前判断log打印等级决定生成是否打印,现在整的完全不想写cl代码了[泪流满面] 洗洗睡,袜子明天起的早再洗 今天早上思路清晰多了,代码精简到34行.修复了一个bug。问题是修复了这个bug,展开式变成4行,没修复之前展开式只有一行,不爽 ,,四行的话和写个函数没啥区别了 昨晚上和今天早晨的微博,然后就不记录前后原因了。 说说怎么编译包。 首先要load 依赖包,不然会编译的时候找不到。 (ql:quickload "cl-async") 编译包的顺序,要先编译package.lisp并且load。不然编译别的文件会找不到你自己定义的包. (load (compile-file "package.lisp")) 之后按顺序编译其他文件 (load (compile-file "logging.lisp")) (load (compile-file "se

Continue

今天本来想写点web框架代码,早早睡觉的,框架代码写了一点。发现测试时候load 然后执行,想文件多了没法搞了。先看看cl打包吧。 然后就查看过的书,找讲包的内容,发现很少。就一个defpackage,实用cl编程里边讲的多一点,注意事项很多,然并卵,写完发现一样不好用。 去群里求救,需要asdf这么个东西,起了个蛋疼名。之前用过但是不知道干嘛的,文档 https://www.common-lisp.net/project/asdf/asdf.html 首页有个有意思的地方Examples Download any of the many packages available through Quicklisp to see as many examples. 哈哈,不过文档里有。 看文档sbcl里边好像自带asdf,我装过quicklisp,并且启动repl的时候自动加载。可以直接使用(asdf:asdf-version)看到asdf的版本3.0.2 duang.asd <pre>(in-package :asdf-user) (asdf:defs

Continue

说说研究这个的起因: 妹子这几天心情不好,频发状态,为了随时了解她的动态,觉得写个接口时刻关注她是否发送新状态。mac下的通知中心是最好的消息提醒了,比ubuntu下的好多了,非常容易看到而且不烦人,所以想看看能不能调这个通知中心的接口。 系统编程肯定是可以了,但是我想用python写脚本,于是google一下,没有。改成英文找到了。。 几个关键的知识点: osascript https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/osascript.1.html https://developer.apple.com/library/mac/documentation/AppleScript/Conceptual/AppleScriptX/AppleScriptX.html#//apple_ref/doc/uid/10000156-BCICHGIE 这应该是osx的系统级脚本语言,类似之前windows的vbscript吧。最早就用VBscript就能写

Continue

额 前段时间和同学接毕业生的毕业设计,有一个中科大的就想用c#做,没办法就只能用c#了,然后装的win虚拟机,下载的vs2013免费版,期间试用时间过了,注册个账户登录就好了。大学的时候开过课,还做过大作业,基本都忘干净了。从官网看的文档,直接用的mvc5 ,ide的好处就是可以智能提示。 然后我也不懂继承关系,看教程,把继承的类给写错了,爆了一个看不懂的错误,根本找不到原因。没法,找个了asp.net的群,问了一下,大部分人都没用过mvc模式,不过其中有个人说你看一下你的model,然后我就把我的代码和官网教程对比,发现继承类写错了。。第一个问题算过去了 总之都是不了解的原因,我也想过找本书看一遍,但是就想做完毕业设计也不再碰了,就想看看官方文档做出来就行了。之后又碰到链接数据库model都对应一个数据库链接操作不会写,查了点资料,加了一个类文件,搞定了。后来还碰到外键定义的方法不会,搜索外键还不是这么叫的应该,文档上有但是看的时候过掉了,看目录有些词根本不知道是讲这个的,英文也不行。最后找到文档写出来了。 总的来说使用mvc方式开发这样的任务还是很方便很快,大多数问题都是

Continue

&nbsp;资源多一点了,现在不到150万。种子搜索的速度不是太快,这一版和我之前用python写的不一样,之前用python写的再没做优化,内存占用还是高,不过速度快一点。 <a title="DHT爬虫" href="http://bajiaoxiyu.com/" target="_blank">芭蕉细雨</a> 使用sphinx做分词搜索种子信息,数据库使用postgresql,使用了redis。开始的时候使用postgresql自带的搜索进行搜索,速度已经非常好了,不过还是慢,换成专业搞搜索的就快了好多。 开始 长的要一两秒,到后来资源多了,需要十秒,我就从逻辑上进行优化,从开始就没有使用offset,我用id进行查询的分割,这种对于资源多的种子检索很好用,但是对于资源少的还是没办法。 换成sphinx,postgresql不需要单独使用一个表存储搜索字段,硬盘占用会少一点。python程序也不需要分词包,一下子占用内存少了很多。sphinx资源占用也少,并且速度就需要几十毫秒。

Continue

Freebsd下查看进程打开了那些文件 procstat -f PID FreeBSD 下的rc.conf 不重启立即生效 # sh /etc/rc vmstat结果内容的解释 最好使用vmstat t [n]命令,例如 vmstat 5 5,表示在T(5)秒时间内进行N(5)次采样。如果只使用vmstat,无法反映真正的系统情况。 procs: r–>在运行的进程数 b–>在等待io的进程数(等待i/o,paging等等) w–>可以进入运行队列但被替换的进程 memoy(以k为单位,包括虚拟内核和真实内存,正在运行或最近20秒在运行的进程所用的虚拟内存将被视为active) avm–>活动的虚拟内存 free–>空闲的内存 pages(统计错误页和活动页,每5秒平均一下,以秒为单位给出数值) flt–>错误页总数 re–>回收的页面 pi–>进入页面数 po–>出页面数 fr–>空余的页面数 sr–>每秒通过时钟算法扫描的页面 disk 显示每秒的磁盘操作(磁盘名字的前两个字母加数字,默认只显示两个磁盘,如果有多的

Continue

新创建一个表保存最大id,区分主索引和增量索引 # 搜索索引相关 CREATE TABLE index_delta ( id SERIAL PRIMARY KEY, max_id integer ); INSERT INTO index_delta (id, max_id) VALUES (1, 0); 我这里直接插入数据,后边配置的时候直接使用update就行了,不然太麻烦。 配置文件;先大体测试了一下,应该没什么问题了,安装的3.2版本的coreseek,好多功能没有,不过够用了,先布置到线上看看效果 <pre>source main { type = pgsql sql_host = localhost sql_user = pgsql sql_pass = sql_db = bt

Continue

基本都是coreseek官网提供的命令安装,但是在freebsd上出现很多问题,都是查找解决的。 sh buildconf.sh最后没有生成configure脚本,且提示automake: warnings are treated as errors 在 csft-4.1/buildconf.sh 文件中,查找 && aclocal \ 后加上 && automake --add-missing \ 在 csft-4.1/configure.ac 文件中,查找: AM_INIT_AUTOMAKE([-Wall -Werror foreign]) 改为: AM_INIT_AUTOMAKE([-Wall foreign]) 这里支持pgsql接口 ./configure --prefix=/usr/local/coreseek --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/loc

Continue