早就看到弥缝发起的活动:一个月培养一个好习惯,也练过那么几天字,不过荒废了,不知道怎么最近看着人家写得漂亮的书法作品很是喜欢,终于下定决定要把钢笔字先写好,别二十多岁的人了,写出来的字还像个小学生一样,太丢人了!
记得小时候还写过一段时间的毛笔字,都不记得后来为什么没坚持下去,为了让自己能坚持下去,使用弥缝介绍的“习惯培养清单”。
发在博客里的目的是希望能更好的监督自己,每月总结一次。
早就看到弥缝发起的活动:一个月培养一个好习惯,也练过那么几天字,不过荒废了,不知道怎么最近看着人家写得漂亮的书法作品很是喜欢,终于下定决定要把钢笔字先写好,别二十多岁的人了,写出来的字还像个小学生一样,太丢人了!
记得小时候还写过一段时间的毛笔字,都不记得后来为什么没坚持下去,为了让自己能坚持下去,使用弥缝介绍的“习惯培养清单”。
发在博客里的目的是希望能更好的监督自己,每月总结一次。
|
标签 : habit
分类 : Life
|
Python QQ是好早以前就有的一个项目,不过因为很久没更新过,以前看到的时候不能登录,所以没怎么关注过,最近代码被开发者放在了google code上面,也做了些改动,目前可以登录,发送,接收消息了,不过不是很稳定。最近看了看这个项目的代码,对整个socket-qq分枝有了全面了解。在代码设计上也学到了不了东西:-)
Python QQ是在Windows上面开发的,所以我在Linux下测试的时候还有不少问题,最近改了改,然后做了个挂QQ的工具给草儿同学,很不完善的,也很不稳定,使用wxPython+threading完成,GUI+多线程确实是很折腾人的,在多线程更新GUI上使用了wx.CallAfter函数,可以查看limodou博客的介绍。
截个图上来:

|
分类 : Python
|
首先安装必要的软件:sendmail,dovecot
sendmail只支持SMTP发信,dovecot可以支持POP3,IMAP等。
把自己的机器名改为一个你想使用的域名,例如coco.com(vi /etc/sysconfig/network)。配置sendmail,修改以/etc/mail/sendmail.mc下一行:
-O DaemonPortOptions=Port=smtp,Addr=127.0.0.1 , Name=MTA
+O DaemonPortOptions=Port=smtp,Addr=192.168.1.112 , Name=MTA
同时修改/etc/mail/access,添加:
Connect:192.168.1 RELAY
编辑/etc/mail/local-host-names文件,添加你想在内部使用的一个域名,如:
coco.com
这样局域网内的用户就可以使用你的SMTP了,别人在发邮件时在SMTP服务器地址中填写你的IP地址,或者域名(需要改更hosts中coco.com的指向)。帐户就直接使用Linux系统的用户,因为在一个公司使用,所以安全问题就不需要考虑了。
安装好后先测试sendmail,可以使用 mail -s ‘your subject’ somebody@coco.com命令来发邮件。也可以使用claws-mail等客户端来发邮件。
dovecot安装好后也很简单,启动后就可以使用POP3收邮件了。
|
分类 : Linux
|
公司新拿来几台电脑,头让俺换一台用用,趁这个机会就想装个Archlinux试试,没想到折腾两天了,还是用不起来。
整个硬盘用ghost对拷了一下,Windows分区拷过去都正常,以前用的主Linux分区无法使用,以前这个分区就有问题,使用正常,但从Windows下无法访问,而且引导文件也放在另一个ext3分区上。
用光盘安装的Archlinux,300多M,base很快就安装好了,pacman也用的挺顺手,不过记得要加几个国内速度快一点的源,然后使用rankmirrors来重排一下源的顺序。不过在安装X的时候出问题了(我主板集成HD3200显卡),折腾了好久,手动改了几次xorg.conf文件,最后显卡驱动用xf86-video-ati,在xorg.conf文件里加上了1680×1050这个分辩率。好不容易(openbox+fbpanel+rox)启动后分辩率正常了,也可以自由切换到其它终端,但是安装ibus的时候又出问题了,使用的是yaourt,实在是折腾累了,浏览器里的字体也很不好看,uxvrt不好用,不能粘贴,不能用标签,字体怪怪的也不知道怎么改,问题一大堆啊,有点像刚用Fedora的时候,要真正能使用系统得折腾好久,但现在实在是懒得折腾了,看着人家漂亮的Archlinux桌面,只能叹息了。
俺自己的那台电脑更是郁闷,是Intel GMA 3100的显卡,本来说Linux应该支持挺好的,但在Archlinux里安装xf86-video-intel驱动后,X启动报错,如果使用vesa驱动能进入X,但是切换到终端再切换回X后就花屏了,昨天折腾了一晚上也不搞定,看来只能回到Fedora了。
不过话说回来,Archlinux速度确实挺快的,连启动X估计就10秒多点,Archlinux+openbox这样轻量级的组合确实不错,如果能在细节上完美些的话还真不想换回Fedora了。
切换到Windows下写的这篇文章,一会儿再整整Archlinux,不过俺自己那台机器要能让X在Archlinux上跑起来估计悬!
|
分类 : Linux
|
今天配置一个Bug跟踪的工具,使用Sendmail发邮件时一直出错,先没仔细看,后来仔细看了下,在/var/log/maillog里面有出错提示:
451 DT:SPM mx4, 7lcQrLDL7iJgl6dJktVcJQ–.7531S2, please try again 1235720034 http://mail.163.com/help/help_spam_16.htm?ip=1038939298&hostid=mx4&time=1235720034
在上面的链接中会有详细的提示,这个错误451:
发信人短期内发送了大量信件,超过了网易的限制,该发件人被临时禁止发信。请检查是否有用户发送病毒或者垃圾邮件,并降低该用户发信频率。
郁闷啊,我才手动连着发了几封而已。还有不少地方需要注意。
还有如果直接使用sendmail向gmail发邮件会提示:
http://mail.google.cn/support/bin/answer.py?hl=en&answer=10336
‘The IP you’re using to send email is not authorized…’
In order to prevent spam, Gmail refuses mail when the sending IP address does not match the sending domain. To send mail from your server to Gmail, we suggest using the SMTP relay provided by your ISP. Please note that we are unable to whitelist IP addresses or otherwise make exceptions at this time.
还是gmail考虑的多些,gmail的垃圾邮件过滤确实做的也不错。
|
分类 : 互联网
|
sdcv-0.4.2版本的代码有3480行,而图形界面的星际译王更是有N多的代码,俺也写了一个就十几行的Python代码,速度当然比不上sdcv,能差十倍,不过,请注意,sdcv查一个单词是0.01秒,我这个是0.1秒,我不觉得有人能感觉出来差别。
其实我的核心是C语言写的,之所以在速度上没有sdcv快是没有做那么些优化,俺只写了80多行,而且还有不少代码是用作Python封装的。我以前写文章说过sdcv代码写的很麻烦,用C语言可以很简洁的写出来,现在确实做到了,只是结合了Python。我觉得这种模式挺不错,影响速度的核心使用C语言去写,然后主逻辑框架使用Python写,不仅效率不会受影响,开发的速度也提高了不少。(我这个例子Python并没做什么)
使用C语言对Python进行扩展挺方便的,http://gashero.yeax.com/?p=38#id7这里有个不错的文档。
完了俺整理整理也放在google code上去。
上面的代码中dict文件需要是未gzip压缩过的,如果在压缩过的我使用被注释掉的那段代码在seek的时候速度很慢,又没办法用mmap,所以暂时就先只使用未压缩过的。
老爸昨晚上打电话告诉我的。
我自己居然不记得,会不会有一天我都不记得自己出生年月了呢?
很难受,为什么会这样呢?
造化弄人!
|
标签 : Life
分类 : Life
|
libevent是一个异步事件处理软件函式库,以BSD许可证释出。
libevent提供了一组应用程序编程接口(API),让程式设计师可以设定某些事件发生时所执行的函式,也就是说,libevent可以用来取代网络服务器所使用的循环检查架构。
摘自维基百科
http://blog.gslin.info/2005/11/network-programming-using-libevent-i.html
这里介绍了libevent相关的网络编程背景,需要带套访问哦。
以下分析针对libevent-1.4.3-stable。
我把原来代码中WIN平台相关的去掉了,看起来方便一些,这个例子创建了一个pipe,并且使用libevent来监听是否可读,读有数据可读时调用函数fifo_read。
libevent调用比较简单,首先event_init()对event库进行初始化,然后使用event_set()来对某个fd的操作进行监听,接着使用event_add()把这个event激活,这里可以指定超时的时间,最后一步event_dispatch(),开始进行循环。
event_init()里只是对外的一个接口,这个函数调用了event_base_new(),分配了一个event_base类型的空间,设置了一些全局变量,使用detect_monotonic来检测是否支持CLOCK_MONOTONIC类型的时钟,这里不太理解为什么要使用clock_gettime(CLOCK_MONOTONIC, &ts)来获得当前时间,这个与gettimeofday得到的精度是一样的,只是一个是标准的时间(UNIX元年算起),一个是开机时间算起,有什么差别吗?
结果:
[cocobear@cocobear libevent-1.4.3-stable]$ gcc ftime.c -lrt
[cocobear@cocobear libevent-1.4.3-stable]$ ./a.out
sec=1235372220
sec=4621
接下来就检测可使用的事件检测函数,这里与系统相关的调用被封装成了一个结构eventop:
编译时libevent会通过
来“动态”的确定eventops数组,在定义这个eventops数组时确定了使用这些事件驱动模型的顺序,如果你机子上有多种可用的模式,则可以通过修改改数组来自定义使用的模型。
在event_base_new()的最后调用了event_base_priority_init()初始化了消息的优先级队列。主要就是对activequeues变量进行空间分配。默认是分配了一个event_list给activequeues。
详细的更新请到google code 查看。
以前还有人提到增加隐身登录,我看了下08 PC版的飞信,只能是先登录,然后再设置隐身模式,这样的话增加设置隐身模式就没必要了。
至于登出飞信更是没必要了。
09.02.23 Update:
先给出libev的主页http://software.schmorp.de/pkg/libev.html,libev是一个高性能的事件驱动模型,与libevent类似,不过设计更为小巧,简洁。
libevent有成功的应用--memcached,libev是一个比较新的项目,代码比较少,所以这几天来研究下这个。
首先从CVS中下载最新的代码:
cvs -z3 -d :pserver:anonymous@cvs.schmorp.de/schmorpforge co libev
CVS代码中有autogen.sh文件,执行该文件会生成configure,我机子上出了点问题,需要首先运行
automake --add-missing
然后就是./configure && make && make install 了。
安装好后会有一个提示:
Libraries have been installed in:
/usr/local/libIf you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
需要注意一下,因为默认这个库安装在了/usr/local/lib/里,所以运行程序时有可能会提示找不到libev.so这个动态库。我们需要在编译时加上-LLIBDIR参数,然后设置LD_RUN_PATH这个环境变量。
安装好为了测试libev,可以使用lighttz,其实我是从这里知道的libev,下载C文件,使用下面的命令来编译:
LD_RUN_PATH=/usr/local/lib/
export LD_RUN_PATH
gcc -LLIBDIR -o lighttz lighttz.c -lev