Ragel状态机生成器
Ragel可以把正则表达式翻译成有限状态机(FA)的各种语言表示,包括C、C++、Objective-C、D、Java和Ruby。Regular Expression和FA的用途很广,可以用于协议分析、数据解析、词法分析、用户数据校验等。在Ragel的帮助下,写一个atoi的函数非常容易,而且比标准库提供的atoi函数性能要高。
/*
* Convert a string to an integer.
*/
#include
#include
#include
%%{
machine atoi;
write data;
}%%
long long atoi( char *str )
{
char *p = str, *pe = str + strlen( str );
int cs;
long long val = 0;
bool neg = false;
%%{
action see_neg {
neg = true;
}
action add_digit {
val = val * 10 + (fc - '0');
}
main :=
( '-'@see_neg | '+' )? ( digit @add_digit )+
'n';
# Initialize and execute.
write init;
write exec;
}%%
if ( neg )
val = -1 * val;
if ( cs < atoi_first_final )
fprintf( stderr, "atoi: there was an errorn" );
return val;
};
#define BUFSIZE 1024
int main()
{
char buf[BUFSIZE];
while ( fgets( buf, sizeof(buf), stdin ) != 0 ) {
long long value = atoi( buf );
printf( "%lldn", value );
}
return 0;
}
Geek的一天
回想一下自己的每个工作日,果然挺geek的。BTW,谁看到了我的blog的,有兴趣写写自己的每一个工作日怎么过的么?
7:00am 起床,洗漱,看一下中国当日的财经新闻
7:45am 上班
8:00am 到办公室
12:00pm 午餐
12:30pm 继续
4:00pm 下班,偶尔到超市买菜
5:00pm 看研究的题目,paper
6:00pm 晚餐,看当天的世界财经新闻
7:30pm 开始研究工作
10:30pm 中国股市开市
11:30pm 研究工作结束
12:30pm 中国股市上午收市,睡觉。
attend or not?
There is a very promising program. Being accepted into the program means money in the future. But the current situation is lack of money. To do, or not to do?
多伦多
两次无梦的睡眠以后,到了多伦多,飞机从香港到多伦多,航程15小时,晚点了8小时。多伦多天气很好,暴风雪过后是很漂亮的晴天,尽管天很黑——这是维度的威力。
因为航班晚点的原因,而且也要把所有的行李一同清关,所以行李不能直接转到下一班航班上。在check-in的柜台,办理check-in手续的姐姐很无奈的望着我,说:你要把超重的行李都转移到一个箱子,然后给手续费噢。我很无辜的说:我第一次来啊,行李很多,对不起哦,下次不会啦。于是argue成功。感谢这个check-in柜台的大姐姐。
办boarding pass是自助的,一开始不太习惯,后来还好,按了一会屏幕,还是一样嘛。
机场里到处是上网的地方,只是要钱。为了skype回家,所以给钱也没办法啦,充分利用吧。可惜这里没有赤立角机场那里的好,香港机场到处是电源插座,这里的座位旁边基本没有,有插座的地方全是很诡异的,例如厕所旁边……所以laptop不能充电了。
逐渐开始天亮了,马上要到远方的小岛去了。
出发,新起点
每年的12月29日,都有所不同。初中的12月29日,是在上网聊天打P中度过的;高中的12月29日,是在题目和书海中度过的;到了南京的12月29日,则是开始体会银色圣诞——之所以不是白色的原因,完全是因为南京的冬天温度不低,下雪经常只是下了几瓣雪花就停了。
当我还是一个初中小屁孩的时候,大家唯一能想到的好玩的事情是吃喝玩乐,我却喜欢坐在书堆里;到了所有人在准备高考的时候,我做了高考的逃兵,混比赛成绩求取保送;再长大一些以后,大学里,大伙都想混一个好成绩,我却想着公司,生意,恋爱。现在同龄人工作的工作,考研的考研,我又想,我应该有心思静下来想想学习的事情。这好像总是显得我很奇怪。
其实这挺彷徨的,一个人,没有陪同,也不知道在新的国度里能不能立住脚,找到一份好工作,做一个突出的学生。不过我知道一件事情,就是从此我需要独立,需要付出120%以上的努力,需要和其它肤色的人讲不同的语言。谁知道呢,能不能立脚,也是一种值得珍惜的经历,弥足珍贵。
我还挺幸运的,至少在出发之前,就找到了地方居住,不需要凄凄惨惨孤孤单单的找一个落脚的屋子。至少房间是光洁明亮的,而不是著名的留学生公寓——地下室。12月窗外的景色,自然就是白色的,不过尚且气候温和,而夏季天气更是宜人。
坐在机场里,有机会静默的想一些事情。机场里来来往往的人,匆匆的来,匆匆的去,匆匆的分别,匆匆的相聚;这一切的匆匆,构成了夜的背景。我心不知道堵住了什么,空空的,又好像满满的。
可能很多重新出发的人,也会跟我想的相似。此刻脚下是新的起点,要对自己说:站稳了,别趴下。
Linux 安全系列:用 grsecurity 保护 Linux
作为系统管理员,我们首先要担心的问题是一个系统的安全性和稳定性,其次才是它的效能和效率。
一个系统是否安全,一般来说取决于以下几点:
- 系统对外接口的多寡,及其安全性
- 系统内部向外的接触能力
- 进入系统内部后,接触系统信息的可能性
对于必须开放访问的系统来说,成熟而可靠的系统保护措施是十分重要的。而对作为各种程序运行平台的操作系统而言,系统中的各种列表,例如目录、文件、进程等,都可以成为怀有恶意的用户甚至是骇客的窥探的窗口。例如一个已经侵入系统获得普通用户权限的骇客,可以通过观察系统中的各种服务器进程和相关的配置文件,探测系统的保护机制和各种漏洞。譬如一个普通用户,如果具有执行 Apache 的权限,那他就很有可能可以通过 Apache 的编译参数、版本查找服务器的漏洞。一个很重要的原则是:把服务器上的所有用户都看成是怀有恶意的使用者,所以系统必须限制普通使用者的权限。这是一个无关道德的问题,而是一个技术问题。
对于 Windows 来说,系统的权限控制可以通过 Active Directory 来实现。但这只是对文件访问的控制,而并没有涉及系统的进程、网络接口。当然,复杂的 AD 规则当然包括对网络服务的访问,可是这只是限制的系统的接口部分,并没有从根本上解决上述问题。Linux 本身也并没有复杂的系统安全机制,一如传统的 Unix 一样,Linux 是通过普通的文件权限来保护系统,而这并不足够。
为了解决上述问题,Linux 内核有几个相关的 patch,包括由 NSA 开发的 SELinux、Brad Spengler 开发的 GRSecurity 和 RSBAC Team 开发的 RSBAC。由于效能和简便性方面的原因,这里选择使用 GRSecurity。相关的比较可以看这里、这里、这里和这里。
GRSecurity (grsec) 内核的安装和配置
在 kernel 网站和 grsecurity 网站分别下载内核源代码和对应版本的 grsec patch。这里以目前的最新版,kernel 2.6.17.11 以及 grsec-2.1.9为例。
解开 linux-2.6.17.11.tar.bz2 压缩包之后,就可以进行 patch 了。以下是关键命令:
然后找到你的原来的内核配置文件,并配置之。
在 make oldconfig 的时候,请根据你的需要回答Y/N。后面将会继续 make menuconfig。
这里要选择 Security Level。可以根据你的需求选择 Low/Medium/High/Custom。不过一般来说,我在这里是选择 Medium 的。其它选项可以根据需求配置。下面是配置 Address Space Protection:
这里可以选择这样配置,但是 Disable privileged I/O 最好取消。因为很有可能某些服务器进程要用到 ioperm/iopl 这样的系统调用。然后是 RBAC 的配置:
这里可以把 Hide kernel processes 勾上,这样当开启 RBAC 时,内核进程都会被隐藏起来。Then, 文件系统保护:
这里可以全部勾上。Then, Kernel Auditing,也可以全部勾上。图片就不提供了。
下面是可执行文件保护:
如果系统是属于开放系统的话,可以把 Invert GID option 勾上,这样下面规定的 GID 就是 Trusted Users 的 ID,将不会收到 TPE 的限制。Network Protections,里面的内容也可以全部勾上。Sysctl support,sysctl 功能一定要打开,但是 Turn on by default 最好关闭,否则的话启动的时候设置的余地就不大了。
而至于 PaX 的设置,按照默认配置就可以了。
内核的编译和安装可以按照正常的步骤进行。不过值得一提的是,在 Ubuntu 6.06 LTS 中,需要更新 initrd 的时候,只需要使用 update-initramfs 命令就可以了。
重启后 grsec 的配置
比起 SELinux 来说,配置 grsec 并不困难。由于之前在配置内核时,已经打开了 sysctl 选项,所以我们接下来的配置只需要使用 sysctl 就可以了。我们可以打开相关需要的选项,下面是一个很简单的例子,可以写入 /etc/rc.local 中。
运行之后,就可以发现,世界一切都不同了:
这是 grsec 的效果之一,可以保护进程信息,用户只能查看到自己的进程,也不能用 netstat 查看网络连接情况。
RBAC 的配置和应用
RBAC (Role-based Access Control) 是 grsec 其中一项很强大的功能,它可以限制系统进程的各种访问权限,包括对文件、资源、网络以及系统调用、系统的capability的访问限制。例如,可以限制系统的 web 服务器 /usr/sbin/httpd,只允许它访问 /etc/httpd,/var/www,/var/log/httpd 以及 /var/run/httpd,/tmp 这几个目录,而其它目录,可以仅对它隐藏起来以限制它的访问。更可以限制这个进程,只允许其接受入站的信息,而不允许其 connect 到其它网络服务器。这种访问策略,更有利于建立安全的系统。
RBAC 功能由两部分来实现:内核的 grsec 接口 (/dev/grsec 设备) 和用户端的 gradm 程序界面。
gradm 程序源代码,可以在 grsecurity 网站下载。必须下载与 patch 对应版本的 gradm 程序。下载之后直接 make install 就可以安装了。
以下以 /usr/sbin/sshd 为例子说明 grsec 的策略设置:
subject /usr/sbin/sshd dp {
/ h
/bin/bash x
/dev h
/dev/log rw
/dev/random r
/dev/urandom r
/dev/null rw
/dev/ptmx rw
/dev/pts rw
/dev/tty rw
/dev/tty? rw
/etc r
/etc/grsec h
/home
/lib rx
/root
/proc r
/proc/kcore h
/proc/sys h
/usr/lib rx
/usr/share/zoneinfo r
/var/log
/var/mail
/var/log/lastlog rw
/var/log/wtmp w
/var/run/sshd
/var/run/utmp rw-CAP_ALL
+CAP_CHOWN
+CAP_SETGID
+CAP_SETUID
+CAP_SYS_CHROOT
+CAP_SYS_RESOURCE
+CAP_SYS_TTY_CONFIG
}
在这里,/ 作为默认的路径,是被完全隐藏的。这就是说,ssh server 进程只能看到标记为 r 的文件和目录。下面 CAP_* 系列的设置,可以参看 /usr/include/linux/capability.h 中的说明。
参考:RBAC 配置说明,以及 gradm 的 policy 文件。
[tags]linux, grsecurity, security[/tags]
翻译:如何集中精力写作
原址:Bad Language: How to concentrate on writing
作者:Matthew Stibbe
当我要面对截止时间、一定要进行工作的时候,我会用一些方法来迫使自己集中精力。
- 关掉Email。我不会打开 Outlook (或者如果打开的话,我会关掉所有会告诉我有新邮件的提醒)。
- 隔离自己。戴上一个 Bose 的静音耳机,你会发现寂静是如此的珍贵。
- 贪婪与罪。我会提醒自己这份作品会为我赚了多少钱,如果我没有完成这份工作的话,我会感到如何羞愧。这有时候会有用。
- 停止 Blog 。时间紧迫的时候,像 blog 和吸尘这些会分散注意力的事情令人感到更逼迫。知道这一点会令你更容易抵抗注意力涣散。
- 早起。对于写作来说,早上6点是最有创作力的时间,而且不会有事情来分散你的注意力。比起工作得更晚,这会令你精神更愉悦。
- 给自己一点小奖励。我会对自己说:“Matthew,如果你能再写500词,你就能喝杯茶,吃点小饼干。”
- 把时间分段。在15、20、30、50分钟后设定闹钟,除了写作以外,不要做别的事情,直到写完为止。这看起来像是一个保持进度的好方法。
- 全屏工作。把 Word 调到全屏模式 (在视图菜单),摒除所有令你不能集中精神的事情。
- 打草稿。分成写作、修改几个步骤,把工作分成简单的部分来完成可以减轻压力。
- 转换环境。有的时候,如果我真的在挣扎着不知如何开始,会拿上笔记本(电脑)到咖啡厅去,随便潦一点东西出来。新的环境,是灵感的开始。
[tags]writing, work[/tags]
A reference rate for major choosing
You scored as Engineering. You should be an Engineering major!
What is your Perfect Major? (PLEASE RATE ME!!<3) |
Useful Phrases
- 表示原因(because, since)
attribute … to …
ascribe … to …
for the sake of sth
result from - 大量的、程度高 many, much
significantly
immensely
magificently
tremendously
dramatically
drastically
considerablyj
substantially
noticeably - 不可避免
inevitably
unavoidably
absolutely
definitely
undoubtedly
inextrically - 表示否定(not)
fail to
no
never
nothing
no one
be far from
little
few - 认为 think ->
contend
maintain
claim
state
regard sth as
view sth as
deem sth as - 忽略
overlook
ignore
neglect
disregard
fail to take … into account
be unaware of
be unconcious of - field (领域) ->
domain
realm
sphere
territory - 建立(build)
establish - 引起、导致(cause)
give rise to sth.
bring about sth.
trigger
contribute to
result in - 影响(affect)
influence
impact upon
exert an influence/impact upon - 提供(provide, supply)
provide sb. with sth.
offer sb. sth.
endow sb. with sth. - 使某件事成立
enable sb to do sth./enable sth. - 抱怨、投诉:
lodge a complaint
express/exhibit/manifest a high level of disatisfaction/revulsion/replusion - 更多的(more)
additional
excessive - 过多(over)
exceeding - 需要:
make a request for
demand
desire - 有关系:
be bound up with
be subject to
in connection with
correlated to (correlate)
in accord with - 阻止(stop .. from)
prevent … from
preclude … from
hamper sth
make it difficult for sb to do sth - 吸引兴趣(interest)
appeal to
arouse one’s interest
attract/draw/capture one’s attention
stimulate - 程度小
insignificant
trivial
petty
fiddling - 习惯(get used to)
be accustom to sth.
adapt oneself to sth
condition himself to sth - 分布
scatter
disperse
distribute - 增加困难(make sth difficult)
compound the difficulty of - 改变(change)
alter
adjust
deviate from - 不满、厌恶(dislike, hate)
discontent
revulsion
repulsion
complaint
disatisfaction