2007年5月22日星期二

Nothing Finished

太多的事情要做,却没有一件能够完成,至少没有一件能够稍微完美一些,如果完美也可以比较的话。
如此长的时间,我一直沉侵在一种沮丧的感觉中,无力感包围着我,眼看时间就那么轻易的从我的身边溜走,我像在做梦。意识清醒,清楚地知道身边的每一件事,你却无力去做些什么,哪怕一点改变?仿佛我已经是生活的观众,也许更像是服下了慢性毒药,一点点地却又不可阻挡的滑向深渊。
,----
| #include
| int STRLEN(char* p);
| int main()
| {
| char *str="Hello";
| int len=STRLEN(str);
| printf("%d\n",len);
| return 0;
| }
| int STRLEN(char *a)
| {
| return (*a)?STRLEN(a+1)+1:0;
| }
`----
这样的trick有什么意义?

2007年5月7日星期一

SF中collect和format主要cpu耗费

我使用oprofile分别生成了bin/collect.exe和bin/format.exe的opreport
对于 collect.exe的日志分析,我发现主要在于
12105 17.7277 collect.exe SFC::SFCommunicationSocket::GetLine(std::string&)
11837 17.3352
collect.exe SFC::SFCommunicationSocket::Recv(void*, int) 这两个方法上, 总共占用了35%的cpu时间,也是耗费最多的两个方法。我想这是值得我们关注的东西,应该这是程序自己封装的,也许更有改变的可能。。。
继续看collect.exe 的日志文件
9908 14.5102 anon (tgid:9213 range:0xb7fbc000-0xb7fbd000) (no symbols)
9605 14.0665 anon (tgid:8943 range:0xb7f79000-0xb7f7a000) (no symbols)
5506 8.0635 collect.exe HandleUnixAndWindowsStyleList(char const*, struct_file_info&)
3167 4.6381 collect.exe
GetDir(struct_site_info&, std::string const&, SiteFile&, SFC::SFFTPClient*, unsigned short, bool)
这是耗费排在3-6位的四个函数,可以看到前六个函数的耗费在总耗费的3/4左右,所以我们也应该把主要精力放在这些函数上。其中两个anon我不是太清楚怎么回事,从网上的一些资料看到,好像表 示的是一块连续内存的操作,我猜测是mmap,xyb提到过他使用了mmap,我猜也许是 这里,我没有看源码,纯粹的猜测。。
再看format.exe的日志文件
18229 10.0997 format.exe MergeIndex(File&amp;, File&, std::vector<unsigned int, std::allocator<unsigned int> >&, int)
这就是format.exe中cpu时间最长的函 数,format.exe有一个特点,就是cpu占用在0.01和0.1之间的函数特别多,不像 collect.exe那样有两个显著的寡头,这样有个不好的地方就是重点比较分散。我结合了valgrind的callgrind产生的日志看了一下,大概是IndexDB和FileDB两个类中的CreateIndex Update比较耗费时间,应该引起注意上边是我对日志文件的一些 分析,基本没有接触源代码,现在我想说我看到的一个和源码有关的问题 ,


1 #include <stdio.h>
2 #include <ctype.h>
3
4 int alpha1(char c);
5 int alpha2(char c);
6 int main()
7 {
8 char c='M';
9 long int i;
10 for(i=0;i<6553500;i++)
11 {
12 alpha1(c);
13 alpha2(c);
14 }
15
16 return 0;
17 }
18 int alpha1(char c)
19 {
20 if(c >= 'A' && c <='Z')
21 printf("OK\n");
22 return 0;
23 }
24 int alpha2(char c)
25 {
26 if(isupper(c))
27 printf("OK\n");
28 return 0;
29 }

在sf的代码中,采用了alpha1的方法,而更有可移植性的方法显然是alpha2,不过在效率优先的原则下,我们还是有必要考虑效率。在实际测试之前,我原来以为是alpha2更快,迷信库函数。。。
我首先看了两者的汇编代码,看不出明显的结论:alpha2汇编指令少,但是多一次函数调用。我只好测试,实际运行,测试结果:在分别调用6553500次的情况下,alpha1耗费时间19.7,alpha2耗费时间45.3,两倍的差距。。。我想说两点:1,不要迷信库函数;2,在同一种算法甚至写法有多种实现的时候,如何抉择?不要想当然,测试才是最可靠的。
-- email:kevinmiter@gmail.com
No gnus is bad news~
_______________________________________________

2007年4月28日星期六

Emacs配置文件


;; For my language code setting (UTF-8)
(setq current-language-environment "UTF-8")
(setq default-input-method "chinese-py")
(setq locale-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(prefer-coding-system 'utf-8)

;;(set-language-environment 'Chinese-GB)
;; (set-keyboard-coding-system 'utf-8)
(set-clipboard-coding-system 'utf-8)
;; (set-terminal-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
;; (set-selection-coding-system 'utf-8)
(modify-coding-system-alist 'process "*" 'utf-8)
(setq default-process-coding-system '(utf-8 . utf-8))
(setq-default pathname-coding-system 'utf-8)
(set-file-name-coding-system 'utf-8)
(setq ansi-color-for-comint-mode t)


;; get around the Ctrl+SPACE key binding for inputing method
(global-set-key "\C-cm" 'set-mark-command)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(global-set-key [(meta left)] 'backward-sexp)
(global-set-key [(meta right)] 'forward-sexp)
(global-set-key [(meta g)] 'goto-line)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; highlight marked region
(transient-mark-mode t)

;; enable syntax highlight
(global-font-lock-mode t)

;; show column number on status bar
(setq column-number-mode t)

;; close toolbar
(tool-bar-mode)

;; enable mouse wheel support
(mouse-wheel-mode)
(put 'upcase-region 'disabled nil)
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(column-number-mode t)
'(current-language-environment "Chinese-GB")
'(ecb-options-version "2.32")
'(show-paren-mode t)
'(tab-width 4)
'(transient-mark-mode t))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)

(setq default-major-mode 'text-mode);
(fset 'yes-or-no-p 'y-or-n-p);
(scroll-bar-mode nil);
(mouse-avoidance-mode 'animate);
(setq x-select-enable-clipboard t);
(setq make-backup-files nil);
(load-file "/home/lizhi/myEmacs/color-theme.el")
;;(color-theme-dark-blue)
(color-theme-pok-wob)
;;(color-theme-blue-sea)

(setq inhibit-splash-screen t);
(setq default-process-coding-system '(utf-8-unix . utf-8-unix));

;;install speedbar
(add-to-list 'load-path "~/myEmacs/cedet-1.0pre3/speedbar/")
;;(autoload 'speedbar-frame-mode "speedbar" "Popup a speedbar frame" t)
;;(autoload 'speedbar-get-focus "speedbar" "Jump to speedbar frame" t)
(define-key-after (lookup-key global-map [menu-bar tools])
[speedbar] '("Speedbar" . speedbar-frame-mode) [calendar])
(global-set-key [(f4)] 'speedbar-get-focus)
;; Texinfo fancy chapter tags
;; (add-hook 'texinfo-mode-hook (lambda () (require 'sb-texinfo)))
;; HTML fancy chapter tags
;; (add-hook 'html-mode-hook (lambda () (require 'sb-html)))

;;install eieio
(add-to-list 'load-path "~/myEmacs/cedet-1.0pre3/eieio/")
;;install ede
(add-to-list 'load-path "~/myEmacs/cedet-1.0pre3/ede/")
;;install cogre
(add-to-list 'load-path "~/myEmacs/cedet-1.0pre3/cogre/")

;;install semantic
(add-to-list 'load-path "~/myEmacs/cedet-1.0pre3/semantic/")
;;(require 'semantic-load)
(setq semantic-load-turn-everything-on t)
(setq semantic-idle-scheduler-idle-time 432000)
;;(setq semantic-load-turn-useful-things-on t)
(load-file "~/myEmacs/cedet-1.0pre3/common/cedet.el")
(setq semanticdb-project-roots
(list "~/Desktop/compiler/"))

;;install cedet
(load-file "~/myEmacs/cedet-1.0pre3/common/cedet.el")

;;install ecb
(add-to-list 'load-path "~/myEmacs/ecb-2.32/")
(require 'ecb)

;;emacs server
(server-start)

;;image view
(require 'thumbs)
(auto-image-file-mode t)

(show-paren-mode t)

(global-set-key [f5] 'gnus) ; 启动新闻组客户端 gnus
(global-set-key [f6] 'eshell) ; 一个 elisp 写的 shell
(global-set-key [f11] 'compile) ; 在 Emacs 中编译
(global-set-key [f12] 'gdb) ; 在 Emacs 中调试

(global-set-key "\C-xk" 'kill-this-buffer)
(global-set-key "\M-/" 'hippie-expand)

;;mini buffer
(setq rezize-mini-windows nil)

;;cc-mode
(add-hook 'c-mode-hook
'(lambda()
(c-set-style "linux")
(c-toggle-auto-state)))
(setq comment-multi-line t)
;;(define-key c-mode-base-map "\M-/" 'semantic-ia-complete-symbol-menu)

;;emacs-w3m
(require 'w3m-load)

;;dired
(setq dired-recursive-copies t)
(setq dired-recursive-deletes t)
;;(add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode)

;;display-time
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(setq dispaly-time-use-mail-icon t)
(setq display-time-interval 10)
(display-time-mode 1)

;;calendar
(setq calendar-latitude +45.75)
(setq calendar-longitude +126.63)
(setq calendar-location-name "Harbin")

;; hippie-expand
(setq hippie-expand-try-functions-list
'(try-expand-line
try-expand-line-all-buffers
try-expand-list
try-expand-list-all-buffers
try-expand-dabbrev
try-expand-dabbrev-visible
try-expand-dabbrev-all-buffers
try-expand-dabbrev-from-kill
try-complete-file-name
try-complete-file-name-partially
try-complete-lisp-symbol
try-complete-lisp-symbol-partially
try-expand-whole-kill))

;;(require 'uniquify)
(require 'flyspell)

(add-to-list 'load-path "/home/lizhi/myEmacs/lisp/")
;;boxquote
;;(require 'boxquote)
(load-file "/home/lizhi/myEmacs/boxquote.elc")
;;svn
(require 'psvn)

2007年4月15日星期日

Blogger七大行为准则

Blog并非永久的净土,最近Blog上的过激言论也越来越频繁,甚至有人遭受到了死亡威胁,于是Web2.0先驱蒂姆·奥莱利(Tim O’Reilly)和维基百科创始人吉米·威尔斯(Jimmy Wales)联手起草了“Blog行为准则”,台湾的龜趣來嘻已经做了翻译,我就不再重复劳动了,转过来给大家看看(将部落客替换为Blog):


BLOGGER行为守则


我们褒扬Blog圈,因为Blog圈有着直率与公开的对话,但是直率不代表不文明。我们提出这份部落客行为守则,就是希望这份守则能协助创造一个鼓励个人思想传达以及具建设性对话的文化。你可以不同意某个人的看法,但不需要闹得不愉快。


1. 我们为我们说过的话(打过的字)负责,同时保留权利来限制我们Blog上那些不遵守基本文明标准的回响内容。


我们遵循‘励行文明’标准:我们竭力于发表高品质、可为人接受的内容,而且我们会删除那些无法为人接受的回响。


我们以下面这些来判断何谓无法为人接受的回响:


回响被用来咒骂、骚扰、跟踪、或威胁其他人
毁谤、明知有误、诉诸情感、错误呈现他人
侵犯作者权或商标
违反保密义务或责任
侵害他人隐私


我们以个别案例来判断何者为‘无法为人接受的内容’,我们的定义不受限于此列表。如果我们删除某则回响或炼结,我们会说清楚、解释明白。[我们保留权利在任何时候更动这些标准而不需要提醒]


2. 我们不会在网路上说那些我们无法面对面说出口的东西。


3. 如果情势渐趋紧张,我们会在公开回应之前先私下联络。


如果我们在Blog上遇到冲突与错误呈现,在我们发布任何相关文章跟回响之前,我们会尽一切力量在私底下直接与相关人士沟通–或是找一位中间人来帮忙。对于尚未解决的争议,Blogger应该进行线上调停。Mediate.com将会提供调停人。


4. 当我们相信有人正不公平地攻击他人,我们会采取行动。


如果有人发表了攻击性的回响或Blog文章,我们会告诉他(尽量在私底下),然后请他公开修正他的言论。如果那些已经发表的回响可被视为威胁,犯者也不愿意撤回回响或是道歉,我们将会与诉诸法律来保护当事者不受威胁。


5. 我们不容许匿名回响。


我们要求回响者在回响之前必须提供有效的电子邮件,不过我们容许回响者不用真名,而以化名来回响。


6. 我们不理会戳乐。


我们不回应关于我们或我们Blog的那些污秽且令人不愉快的回响,只要内容不流于咒骂或毁谤。我们相信喂食这些戳乐只会助长他们的气焰–‘别跟猪打架。你们都会弄得满身脏污,但猪就是喜欢脏污’。别管那些公开的攻击通常是制止他们的最好方法。


7. 我们鼓励Blog服务提供商确切落实他们的服务声明。


当Blogger做了这种过份滥行,像是创建假的个人Blog来骚扰其他Blogger,Blog服务提供者应该为他们用户的举措负起责任。

2007年4月13日星期五

无奈

找不到答案并不悲哀,悲哀的是答案在你眼前,你却是视而不见。。。
一直在折腾gnus+leafnode的news reader,在网上找了很多资料,主要参考了"gnus伴侣之leafnode篇"一文,参照着作下来,没有遇到什么大问题,本来也比较简单。。。
直到最后一步,设置gnus之后,发现怎么也连不上nttp://localhost。我找不到问题所在,出www.newsmth.net问,没有理, 555555。我只好自己来,上网一顿google,还是没有线索。
我没有办法,只好重新做一遍,希望奇迹发生。奇迹没有出现,问题让我发现了,呵呵。leafnode don't support rlinetd's version of updating inet。虽然这是一个warning,但是这是唯一的线索了,我别无选择,再次来到google,找到leafnode的FAQ,找到了相关的问题。
Leafnode itself expects incoming connections on stdin and responds on stdout. Therefore, you cannot run it as a standalone server but have to use other programs which do the work for you. The most common one is inetd; some alternatives are xinetd and tcpserver. One of these programs must be running; check for inetd with
ps axu | grep inetd
If your distributions uses a different program, change the grep expression accordingly. Any of these programs should be running once.
OK,原来这样,rlinetd不能转发leafnode的包,我换xinetd!!!
小心地换了xinetd,根据提示,配置/etc/xinetd.conf

# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/

defaults
{

# Please note that you need a log_type line to be able to use log_on_success
# and log_on_failure. The default is the following :
# log_type = SYSLOG daemon info

}

service nntp
{
socket_type = stream
protocol = tcp
wait = no
user = news
server = /usr/bin/leafnode
}
includedir /etc/xinetd.d

重启服务,一切OK,万岁!!

2007年4月7日星期六

逃课

我是一个考研人,一千遍地提醒自己。。。
这是我在HIT的第三年,大三下学期。这是一个不平常的学期,因为我要考
研。虽然仅仅是要,而不是"是";但是谁能否认这是一个完美的理由,一个逃课的
完美的理由。
这一学期,我逃了一节有一节的课,甚至于我上过的课还没有逃的课多。
我一点儿也不是在炫耀,我甚至有些悲哀:我都这样了,为什么我还要考研呢?
今天是星期六,我有逃了半天的课,回来折腾mail,好在终于完成了,些
许安慰。

2007年4月3日星期二

Bufbomb可爱的缓冲区溢出

我现在在HITCS读大三,两年多了,写了很多小程序,真正的小程序。在两年 多的时间里,我经常遇到每一个前辈都犯过的错误--缓冲区溢出。每一次溢出都 是不同的,调试也是苦难的,数不清的BUG潜伏在我的程序里,我无能为力。。。
可是今天,缓冲区溢出成了我的任务@_@。CS:APP Chapter3习题3.38,给了我一个机会,第一次去 尝试有意的缓冲区溢出,全新的挑战啊!

getbuf的代码摘要如下:

int getbuf()

{

char buf[12];

getxs(buf);

return 1;

}

:-) objdump -d a.out

080484ae getbuf
80484ae: 55 push %ebp
80484af: 89 e5 mov %esp,%ebp
80484b1: 83 ec 18 sub $0x18,%esp

80484b4: 8d 45 f4 lea 0xfffffff4(%ebp),%eax
80484b7: 89 04 24 mov %eax,(%esp)
80484ba: e8 25 ff ff ff call 80483e4 <getxs>
80484bf: b8 01 00 00 00 mov $0x1,%eax
80484c4: c9 leave
80484c5: c3 ret
分析getbuf的栈帧结构:

返回地址.1

%ebp.1


%eax ;buf首地址

返回地址.2
%ebp.2

可以看到,我们的输入必须在%eax往上(地址增加)的栈上,我们的功能代码应该是

*mov $0xdeadbeef, %eax*

*push $ip(返回地址1)*

* ret
最后为了保护%ebp.1和跳转到%eax执行代码
我们的输入应该是这样的形式
功能代码的机器码 00(填充12字节的剩余部分) %ebp %eax的地址
*

2007年3月31日星期六

本欲乘风归去

国内的网络条件一直都不是很好,我在教育网,很难顺畅地访问blogger。有个同学,不是熟识,不过他的系统还是很不错,我身边有好多的同学都在使用;我寒假前注册了一个帐号,发了一个短文,在网站里里外外逛了一大圈,确实不错:功能很多,给我们用户的权限也很大,使着确实挺爽。唯一的难处,太难折腾了,有些麻烦。说来很奇怪,我不怕折腾,但是偏偏不喜欢网络上的折腾:我是个急性子,懒得等。。。放假回来以后,就没有怎么去看;今天突然想起来了,一去看,OMG,居然有19个回复,我高兴坏了,心想这人气真NB啊!一点击,我崩溃了,基本都是广告,多数还是国外的,郁闷。。。
我不想折腾密码啥的,还是回来用blogger吧,慢点儿我也忍了。另外一个blog不打算用了,
id实在是难听,我自己怎 么能想这么个名字呢?纳闷儿。。。

2007年3月30日星期五

四月是收获的季节?

    在我的印象了,四月绝对不是一个收获的季节。然而,2007年的四月,却实实在在的是一个收获的季节。在这个四月里,开源社区将会迎来很多喜讯,我们相信 可以收获很多:KDE4fedora7ubuntu还有我最最关心的Debian etch都会在这个四月和我们 见面。每一个软件都会有许多令人兴奋的新特性,我有些迫不及待了。。。
    This April,I will go back to my study after three years ago I left .I will do my best so that the next April will be a harvest season for me!I believe...
    God bless me!
Amen 阿弥陀佛 安拉赞美我
@_@...

2007年3月29日星期四

何去何从?

转眼之间,我就大三下学期了;考研还是工作,这个现实的问题残酷地摆在我眼前。Go on studying Or go to work?It's a question!!!
从我的本意来讲,我是不想考研的。实在不想再上学了,现在我逃课已经远远超过我上过的课了,既然这样,我何苦还要在学校里边受煎熬呢?我自己都不明白。。。
我想去找工作,最近有一些很好的公司招实习生,我有些心动了。但是我有些胆怯,看着那一个个的"Must",思考着自己是不是有所要求的"Plus",我又觉得,我知道的东西太少了,没有十足的底气。
我记得以前不是这样的,难道平淡的大学生活让我的心气更高,却没有足够的实力?也许现实就是这样的。
我哭

2007年3月28日星期三

本欲乘风归去

国内的网络条件一直都不是很好,我在教育网,很难顺畅地访问blogger。有个同学,不是熟识,不过他的系统还是很不错,我身边有好多的同学都在使用;我寒假前注册了一个帐号,发了一个短文,在网站里里外外逛了一大圈,确实不错:功能很多,给我们用户的权限也很大,使着确实挺爽。唯一的难处,太难折腾了,有些麻烦。说来很奇怪,我不怕折腾,但是偏偏不喜欢网络上的折腾:我是个急性子,懒得等。。。放假回来以后,就没有怎么去看;今天突然想起来了,一去看,OMG,居然有19个回复,我高兴坏了,心想这人气真NB啊!一点击,我崩溃了,基本都是广告,多数还是国外的,郁闷。。。
我不想折腾密码啥的,还是回来用blogger吧,慢点儿我也忍了。另外一个blog不打算用了,id实在是难听,我自己怎 么能想这么个名字呢?纳闷儿。。。