‘兴趣所在’ 分类的存档

vim插件的管理和部署一直是让人纠结的事情,前段时间xtao同学推荐我使用spf13-vim项目,让这件事情变得简单可依赖了。 spf13-vim是一个.vimrc+vundle的集合,主流的.vimrc的配置都基本包含在内了,如果还有其他特殊需求,也可以通过.vimrc.local文件对当前的配置文件扩展。我从github上folk了spf13-vim的项目,checkout一个新的branch进行了符合自己习惯的修改。 对于.vimrc文件主要是取消一些不太想用的插件,比如各种snippets插件,有关vim-tab的插件,一些多余的colorschemes,还有就是autoclose(有些时候输入不需要autoclose)。除此之外在我的branch中加入了.vimrc.local 覆盖了原来的一些设置也加入了其他map,具体如下: set wrap “我需要折行 set splitbelow “split在下边 set mouse=”” “不要鼠标选择 “编码设置 set enc=utf-8 set fenc=utf-8 set fencs=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936 set fileencodings=utf-8,gbk,latin-1 “快捷换行 nmap ddkP nmap ddp vmap xkP`[V`] vmap xp`[V`] set foldmethod=marker “folder set t_Co=256 “如果是在模拟终端需要把颜色设置成256色 “cscope 快捷映射 if has(“cscope”) set cscopetag set csto=0 if filereadable(“cscope.out”) cs add cscope.out endif set csverb nmap s […]

2012年5月17日00:31 | 3 条评论
分类: 兴趣所在
标签:

作为新年的礼物,nForum1.1在经过为期一个月的线上测试后,今天终于push到github上去了,相关的文档我也完善了一下,能有助于快速理解nForum1.1的前端结构,新增的文档如下: nForum1.1 Changelog nForum1.1 前端说明 nForum1.1 Ajax说明 由于一次性push了60多个commits,所以相对于nForum1.0版本代码上的修改还是很多的,如果在原来的基础上修改很大的话,merge起来会是一个比较痛苦的过程,不过大家想想fancyrabbit@newsmth,我觉得再困难的merge都是浮云了,哈哈。merge的过程除了仔细核对代码外也需要仔细对比app/config/nforum.php.example的不同,配置文件千万不要写错了。 对于kbs,最好更新的最新版本,目前我测试的nForum1.1是基于kbs r10955。 nForum1.0版本已经终结于这之前的提交,我已经打了一个1.0的tag,需要持续使用老版本的用户可以git checkout 1.0或直接去tags页面下载tar包。 还有就是可能有些小修改在changelog中没有提及到,不过会存在于commit log里面,如果有不清楚的地方可以先查看一下commit log。 web上的文档已经全部更新,欢迎访问http://xw2423.byr.edu.cn/blog/nforum 

2012年1月3日21:02 | 2 条评论
分类: 兴趣所在
标签:

时隔一个月,在经历了从正常人到“矿工”再到正常人的变化后,一个新的nForum就即将折腾出来了。 如果说原来的版本是1.0的话,这个版本为1.1比较合适,最大的改动即是前端,nForum1.1的前端结构发生根本的改变,而促使我改变的原因可能是想再次体验一下 沉醉于代码中的感觉吧。 nForum1.1致力于提供一个完整的前端基础,以实现页面的ajax化并规范一些简单的交互接口。技术路线的灵感来自于某月末日在google reader上看到豆瓣某前端工程师的演讲ppt。所以nForum1.1采用了和豆瓣说同样的javascript框架Backbone.js作为基础来构建前端MVC,在弹出窗口方面继续沿用jquery-ui的dialog组件,不过nForum进行了进一步的封装以实现与应用的紧密结合并屏蔽了jquery-ui的特性。暴露给window的变量有APP,BODY,SESSION,DIALOG,SYS,这些对象足以完成对页面的控制,具体是怎样的,可能还需要一个文档来说明。 此外,nForum1.1在html5的道路上更进一步,整体的标签在往html5上演变,对于支持html5的浏览器,在css和文件上传上都开始使用html5特性,相应的,新版本取消了原来的javascript圆角功能,对老版本的IE做了某些交互特性上的放弃,当然诸如IE6这样的s13浏览器还是可以正常访问的,不过体验会差点。。。 nForum1.1在原来的model层面上修改的很少,主要是整合了文章和邮件的转寄和回复功能;controller主要的修改是满足ajax请求并把请求方式和渲染格式完全分离,在渲染数据时html,json,xml是地位相等的。view融合api插件的思想,把所有渲染的方式统一起来,也就是说api插件和nForum web是用的相同的view。 最后就是要解决新的架构带来的新的问题,比如SEO,nForum1.1的html内的链接呈现和现在的本版一致,系统自动识别不同的spider输出原始页面以便spider能很好的访问。除此之外,IE6下对于hash的不完整识别导致url中的search部分不能很好的解析,最后无奈hacker了backbone.js的代码。 其余的特性以及详细的修改都会出现在changelog的,之后的时间里要review一下代码,在各种浏览器中测试一下关键功能,整合,测试,merge出北邮人论坛的版本,测试,发布到github日子可能还要晚点吧。 其实代码的实现是漫长的,枯燥的,痛苦的,不过当整体结构很清晰时这些也都只是时间问题了;把你对整个系统的理解用代码实现出来,在这个过程中可能会遇到各种结构问题和设计缺陷,但在一次次的迭代中结构会变的更加合理,耦合会变得更加自然,这也许就是根本的乐趣之所在。去年的这个时候nForum1.0开源了,一年过去了,nForum1.1就作为今年的礼物吧。

2011年12月2日09:56 | 4 条评论
分类: 兴趣所在
标签:

现在可以用这个标题了,我是挺高兴的。nForum API终于被我merge进nForum的主干了,这可是今年一年工作目标啊,居然在不到半年的时间里就可以发布一个可用的版本,甚是欣慰。 对于开放API来说,在我写nForum时就是由此想法,在写手机版的时候是此想法甚是强烈,从那时起基本上就开始做相关的知识积累,看过了《Restful Web Services》,或多或少的研究或使用了google,twitter,sina,qq的API后,开始尝试写适合于nForum的api。验证从简单的basic auth开始,输出支持json和xml的格式。在逻辑上api和web没有太大的区别,甚至比web更简单,最值得推敲的就是API的设计,在兼顾性能的同时,考虑开放什么样的数据,这是非常关键的。在写的过程中也碰到许多棘手的问题,比如状态,把API请求变成无状态的着实让我纠结了很久,kbs的web机制必须每次请求都要附加cookie而API确不能这样,当然这些cookie信息也不能放在url里,最后只能让服务器缓存这些信息使得外界看来API是无状态的。最后就是这次充分使用了一下phpunit,API还是挺好写测试用例的。 nForum前段时间更新了地图标记功能,原以为这个功能挺实用的,能在帖子中嵌入自定义地图和位置,对于food,travel这样的版来说应该挺有用的,但是好像没什么人对这个很感兴趣,就纯当熟悉一下google map api的用法吧。 水木终于把上线nforum提上日程了,挺高兴,能有更多的人来使用它就是一件好事,兔总fancyrabbit@newsmth也提了不少修改意见,非常感谢,希望nforum能越来越好。 nForum API的文档:http://xw2423.byr.edu.cn/blog/nforum-api 代码在:http://github.com/xw2423/nForum 还有就是有想使用北邮人论坛API的童鞋请直接找我吧,wei.xiao.bupt#gmail.com

2011年5月26日21:48 | 12 条评论
分类: 兴趣所在
标签:

项目地址:https://github.com/xw2423/nForum 今天总算把一个历史悠久的bug解决了,我也好意思把地址贴出来了。 然后弄了一个页面,把一些文档帖出来了,但是格式还没调好,家里的网络访问blog太扭曲了。 http://xw2423.byr.edu.cn/blog/nforum Life is like a box of chocolates, you never konw what you’re going to get!

2011年1月23日22:44 | 4 条评论
分类: 兴趣所在
标签: ,

概述 urllib2中的核心类: Request :一个具体的url请求,包含了请求的所有信息,不仅仅试用于http协议 OpenerDirector:与BaseHandler组合,通过组合不同得handler处理不同的请求 BaseHandler :参与完成请求处理的类,不同的请求处理都继承这个类 在urllib2中,一次请求被分为三个过程,分别是request,open,response request:目的在于构造本次请求Request对象所需得所有信息,如http协议中的header信息 open:处理具体请求的过程,封装Request对象,调用更底层的类完成请求并返回response response:对返回的Response对象做处理 当然后有一个error处理的过程,但这个不是主动触发的。 OpenerDirector 因为每次请求的具体实现是不同的handler,而且一次请求可能由很多handler组成。所以实现这一耦合机制的类就是OpenerDirector,这个类可以注册(添加)各种不同的handler用来帮助处理一次请求。通常来说handler中的命名规则为 protocol_request|open|response,这分别对应不同协议的三个过程。还是直接上代码,写了一点中文的注释。 class OpenerDirector: def __init__(self): # manage the individual handlers # 所有已注册的handler self.handlers = [] # 已注册的不同过程的方法 self.handle_open = {} self.handle_error = {} self.process_response = {} self.process_request = {} # 添加一个handler # def add_handler(self, handler): # 通过检测BaseHandler中的方法 确保handler继承于BaseHandler if not hasattr(handler, […]

2010年11月20日16:59 | 6 条评论
分类: 兴趣所在
标签:

小白的我终于发现了这款音乐播放器,很多人推荐使用它代替rhythmbox,所以偶也赶紧尝试了一下。 项目主页:http://www.exaile.org/ 最开始是通过学校的源装的,0.3.1的版本,虽然软件本身没什么问题,但是从网上找的douban电台的插件死活运行不了,遂换了官方的源,https://launchpad.net/~exaile-devel/+archive/ppa,官方的版本是0.3.2.0。 试用了一下exaile,还是挺nice的。在界面和易用性上比rhythmbox要好多了,比如对歌手和专辑的筛选统一放在来一个列面里面而且筛选的结果是按字幕排序。exaile内置的插件比rhythmbox要多了许多,自带了文件浏览器很均衡器。 另外还有一个exaile-cn项目 ,其中为中国用户提供了一些好用的patch,比如修正了mp3 的id3显示乱码,添加了自动下载歌词的功能,里面还包括了最新的豆瓣电台插件,微微麻烦的是这些patch要自己打上去。 随着使用的深入,问题还是存在的,我想把exaile最为gmbox的播放器使用,但是在命令行下调用exaile播放一个uri,如: exaile http://XXX exaile直接报错退出,看异常信息是因为这些uri被自动加上了当前目录的前缀变成了/foo/bar/http://XXX,找到相应的文件,在xl/main.py和xl/xldbus.py发现了: args = [ os.path.abspath(arg) for arg in self.args ] 相当于把 uri变成了绝对路径,我直接改成args=self.args,勉强能过,但是问题又来了,在存在一个exaile实例时运行exaile uri还是会报错,这个错误无论的本地文件还是远程文件都会出。无奈只能去官方的bug tracker寻找,还真有其他人提交了这个bughttps://bugs.launchpad.net/exaile/+bug/601235 而且这个bug已经修复了,不过是在0.3.2.1的版本里面,当时我个内牛满面,然后看了一下这个项目的版本控制系统居然我还没怎么听过,名叫bazzar,而且google这个词第一搜索结果居然是女性时尚杂志。。。最后我还是装了下这个软件,但是7kB/s的连接速度(还不稳定)让我实在没勇气去下载全部的代码了,只能盼着官方的源早点更新。 最后的结果就是,我应该可以把rhythmbox卸载了。。。

2010年10月15日11:07 | 1 条评论
分类: 兴趣所在
标签:

最近发现在WPMU(在MU还没整合进WP之前搭的)中即使在mu-plugins中加了强大的Akismet插件还是不能组织垃圾评论,遂写了一个简单的验证码插件,把原来在论坛上的写的验证码组件弄过来改了改,于是现在博客的回复要输入一个计算等式的验证码了,这样我想垃圾评论会更少了吧。 单击此下载插件 下载后请解压缩至wp-content/plugins目录,再开启即可。 顺带提一下wp的本地化的东西,linux下用xgettext生成po文件,用msgfmt生成mo文件,他们都在gettext包中。操作方法如下 #生成po文件,其中–key的值是wp中的本地化函数 $ xgettext -d auth_img_post –from-code=utf-8 –key=__ auth_img_post.php 修改po文件的注释信息替换掉其中的charset,并翻译 #生成mo文件 $ msgfmt -o auth_img_post.mo auth_img_post.po 在wp插件中用load_plugin_textdomain函数加载mo文件,此函数接受三个参数分别是域标识,mo所在文件夹的绝对路径,mo所在文件件的相对路径。第三个参数覆盖第二个参数,具体文档参看http://codex.wordpress.org/Function_Reference/load_plugin_textdomain

2010年9月7日21:49 | 15 条评论
分类: 兴趣所在
标签: , ,

终于这个系统可以告一段落了,进过了这几天的赶工,搁置各种工作,毅然上线了这个系统,链接http://bbs.byr.cn/chat。之所以要做这个类似于omegle的东西,也只是想熟悉一下memcached的使用,下面稍微为阐述一下系统思路: 首先是交互方式的确定,以现在的web技术水平,这种web在线聊天系统还是会选用定期的轮询作为技术的出发点,基于html5的websocket长连接在近期是有些文章但我看过的demo还是没有,另外论坛的访问很大一部分都是ie浏览器,所以不可能用这么新的技术。 其次是数据的存储,当然我最初就是为了用memcached而做这个系统,当然memcached也挺适合这种短时间内高并发的读写。其实在写的过程中还考虑过用传统的关系数据库和NoSql的数据库。其实用数据库也是可行的,但是要多做一些操作,比如过期的检测,由于基于web的聊天系统对于被动断线是不可能捕捉到的,这就意味这系统需要及时踢除没有心跳的用户。使用缓存系统能很好的解决这个问题,而对于数据库则需要自行维护数据的过期。这里提到两种不同的数据库还是有本质的区别,memcached与nosql对于数据的存储本质上是一样的或者也可以把memcached也归为nosql的一种。这种数据库相比于关系数据库来说在条件查询上捉襟见肘,这就需要我们不仅维护数据还要维护数据的索引,这也是我在写的过程中渐渐发现的(原来没有做过nosql的开发)。其实用mysql的内存表来做这个应用,我想也是一种很好的选择。 技术方案确定后就是数据结构,由于是kv系统,必须自行维护数据的索引供搜索使用,每个聊天的用户都有相应一个uid作为UUID,每个用户的数据在memcached中有一条记录,也就是相应的用户对象的序列化值。一个用户的数据包括 uid:唯一确定身份的id id:用户id cuid:陌生人uid lat:last access time status:用户状态 action:用户行为 queue:消息数组 然后整个系统无非就是一个状态机,根据不同的请求跳转到不同的状态。这里说一下消息的传递,用户发送消息先存储存在自己的queue中,陌生人轮询,如果queue中存在消息就取回来并清空queue数组,这样用户消息也不会长时间的积累,系统也不保存任何用户聊天记录。 其余的就没什么好说的了,就是一些js的交互,自己js也写的够寒碜的,有点惨不忍睹的地步了。这个系统暂且就这样吧,也没有太多时间进行维护了,希望以后有人能把他做的更好。下面记录一下memcached的相关安装 memcached直接在官方网站下载源码包即可,也就是其服务器端。地址是:http://memcached.org/解压缩后 #./configure –prefix=/usr/local/memcached #make #sudo make install 值得注意的是memcached需要libevent的支持,没有的话再configure会报错,这个直接可以再源上找到,安装libevent-devel就可以了。 memcached的使用方法很简单直接运行bin下memcached即可,-h选项有详细的参数说明,我的运行参数是: memcached -d -m 128 -u root -p XXXX -c 256 -v 一般来说都是用root用户来运行,而且memcached如果监听了整个网络的话没有ACL的机制,这就意味着如果别人知道机器memcached的端口就可以直接通信了,这俨然是缺乏安全的行为。网上对此也有很多解决方法,比如说用内网的方式,memcached服务器在内网里面,这样外网的用户就不可能访问到了。当然在unix下最直接的方法就是用iptables,指定ip访问指定端口。 对于memcached的客户端,不同语言有不同的实现。在php中有两种客户端供选择memcache和memcached,后者看过去比前者功能稍多。我用的是前者,从http://pecl.php.net/package/memcache下载安装包,解压缩后 #phpize #./configure –enable-memcache #make 把编译出来的so文件在php.ini中加载即可

2010年8月13日11:35 | 2 条评论
分类: 兴趣所在
标签: ,

很少写代码到这个点,为了整那个聊天程序差点把这个论坛都弄崩溃了。 晚上两点调试时突然整个系统报错,还是报一个数据库连接错误,可是我根本就没有用到cake任何model相关东西,真是把我郁闷到了,把测试站的框架文件也导过来了还是报错,最后只有跟踪框架的代码,但是毫无头绪。幸运的是最后居然自动好了,这我才想到可能是核心配置文件的缓存挂了,在没有任何代码改动的情况下只可能是这样了,不过现在还是不知道怎么引起的并且怎么就好了。太纠结了,弄了一个晚上。 还有那个纠结的编码,聊天系统在两个站上的代码完全一样,但是对ajax的编码处理却不一样,最后发现在非调试级别,RequestHandler的startup方法会自动header相应的Content-Type,真tmd的恶心,直接把startup方法屏蔽了。这些还是自己控制为好,特别是ajax这种需要utf-8编码的应用上。 今天被人来去看《唐山大地震》,一句话总结“悲剧中的喜剧” ,四周的人都哭的稀里哗啦的,我居然没哭额,不知道是我的问题还是电影的问题≡(▔﹏▔)≡。

2010年8月12日03:34 | 没有评论
分类: 兴趣所在
标签:
第1页/5页12345