Monday, December 18, 2006

一句比较客观的话

一句比较客观的话,来自一博客的评论:

人最不愿意承认的就是以自己短浅的视角作出的成果远不如大自然给于我们的优雅的非凡成就。

Tuesday, October 17, 2006

Ubuntu 下 SourceNavigator 的下载

前几天刚刚换装了 Ubuntu 系统,从 Fedora Core 5 换过来的。

在 FC5 上,我是用 SourceNavigator 来看源代码的。然而换到 Ubuntu 上却再也安装不成功:其编译过程中的各个错误我都排除了,但 sudo make install 时依然安装不上。

怎么办?上网搜啊。可是搜了一堆却也没提在 Ubuntu 上 SourceNavigator 怎么安装,也找不到其 .deb 包。

回想当时在 FC5 上安装它后也找不到其命令的经历:
$ sourcenavigator  -- 不行
$ sourcenav -- 不行
$ snavigator -- 行了!


那就试试在 Ubuntu 在 apt 源中查看有没有它了:
$ apt-cache search snavigator  -- 可怜,没有它
$ apt-cache search sourcenav -- 有!就装它了!


好办,用 sudo apt-get install sourcenav 安装它,成功!

运行它:
$ sourcenav  -- 又不行了?!

再试:
$ snavigator
-- 行了!真想不通 Ubuntu 下做 SourceNavigator 包的牛人们在做什么,把我们折腾得这样!莫非要用 SourceNavigator 还得经历魔鬼般的训练??

Sunday, October 08, 2006

安装 Flash 插件

安装了好几次 firefox 的 flash 插件,可每次都不行。就算手动安装指定路径也没有反应。上网找了很久,终于解决问题了:
http://macromedia.mplug.org/faq.html#fedora

其中有条 FAQ:

13. How do I setup yum to install this package automatically on Fedora?

Fedora yum users, simply save this file in /etc/yum.repos.d/
then type yum install flash-plugin

这里的 this file 文件内容就是:

[macromedia]
name=Macromedia for i386 Linux
baseurl=http://macromedia.rediris.es/rpm/
enabled=1
gpgcheck=1
gpgkey=http://macromedia.mplug.org/FEDORA-GPG-KEY

将其另存到 /etc/yum.repos.d/ 目录下的 macromedia-i386.repo 文件,然后用 sudo yum install flash-plugin 命令在线安装即可。


另一种方法可以下载 flash-plugin*.rpm 来安装。

Sunday, September 10, 2006

mediawiki用户名加密方法

Mediawiki 的用户密码是用 MD5加密算法加密的。但它并不直接采用它对用户的 password 进行加密,而是对所需加密的内容加以处理的。经过以下的步骤处理之后,密码数据就可以直接入库,所以有必要时我们可以对 mediawiki用户批量入库。


由终端进入 ${MEDIAWIKI_HOME}/includes/ 目录,用下列命令查看一下:

$ grep 'md5' *

结果系统列出了很多内容包含有“md5”的文件,如:

...
array( 'html' => $parsed, 'hash' => md5( $notice ) ), 600 );
GlobalFunctions.php: $p = md5( $password);
GlobalFunctions.php: return md5( "{$userid}-{$p}" );
HistoryBlob.php: $hash = md5( $text );
...

可以看到,GlobalFunctions.php 文件中有一条对登录密码的加密代码 $p = md5($password);。打开它,查找这条语句在文件中的位置,发现原来它是这样加密的:

function wfEncryptPassword( $userid, $password ) {
global $wgPasswordSalt;
$p = md5( $password);
if($wgPasswordSalt)
return md5( "{$userid}-{$p}" );
else
return $p;
}

也就是说,系统获取用户在数据库中的 ID 号,将这个 ID 号与加过密的登录密码用“-”号连接,再将这个连接后的字符串作一次加密,将这个加密的结果存入数据库。用这种方法可以避免两个完全相同的密码在数据库中存储也完全相同。


下面简化一下它的步骤:

$var = md5($upwd);
$pwd = md5("{$id}-{$var}");
return $pwd;

Saturday, September 09, 2006

Linux 的 15 年

来自某个网站上的一幅图片,清楚地描绘出 Linux 这 15 年来的发展历程:

Sunday, September 03, 2006

常用端口表

转自:http://my.opera.com/i9t6r4/blog/show.dml/221277

1 tcpmux TCP Port Service Multiplexer 传输控制协议端口服务多路开关选择器
2 compressnet Management Utility     compressnet 管理实用程序
3 compressnet Compression Process    压缩进程
5 rje Remote Job Entry          远程作业登录
7 echo Echo               回显
9 discard Discard            丢弃
11 systat Active Users          在线用户
13 daytime Daytime            时间
17 qotd Quote of the Day         每日引用
18 msp Message Send Protocol       消息发送协议
19 chargen Character Generator      字符发生器
20 ftp-data File Transfer [Default Data] 文件传输协议(默认数据口) 
21 ftp File Transfer [Control]      文件传输协议(控制)
22 ssh SSH Remote Login Protocol     SSH远程登录协议
23 telnet Telnet             终端仿真协议
24 ? any private mail system       预留给个人用邮件系统
25 smtp Simple Mail Transfer       简单邮件发送协议
27 nsw-fe NSW User System FE       NSW 用户系统现场工程师
29 msg-icp MSG ICP            MSG ICP
31 msg-auth MSG Authentication      MSG验证
33 dsp Display Support Protocol     显示支持协议
35 ? any private printer server     预留给个人打印机服务
37 time Time               时间
38 rap Route Access Protocol       路由访问协议
39 rlp Resource Location Protocol    资源定位协议
41 graphics Graphics           图形
42 nameserver WINS Host Name Server   WINS 主机名服务
43 nicname Who Is            "绰号" who is服务
44 mpm-flags MPM FLAGS Protocol     MPM(消息处理模块)标志协议
45 mpm Message Processing Module [recv] 消息处理模块 
46 mpm-snd MPM [default send]      消息处理模块(默认发送口)
47 ni-ftp NI FTP             NI FTP
48 auditd Digital Audit Daemon      数码音频后台服务 
49 tacacs Login Host Protocol (TACACS)  TACACS登录主机协议
50 re-mail-ck Remote Mail Checking Protocol 远程邮件检查协议
51 la-maint IMP Logical Address Maintenance IMP(接口信息处理机)逻辑地址维护
52 xns-time XNS Time Protocol      施乐网络服务系统时间协议  
53 domain Domain Name Server       域名服务器
54 xns-ch XNS Clearinghouse       施乐网络服务系统票据交换
55 isi-gl ISI Graphics Language     ISI图形语言
56 xns-auth XNS Authentication      施乐网络服务系统验证
57 ? any private terminal access     预留个人用终端访问
58 xns-mail XNS Mail           施乐网络服务系统邮件
59 ? any private file service      预留个人文件服务
60 ? Unassigned             未定义
61 ni-mail NI MAIL            NI邮件?
62 acas ACA Services           异步通讯适配器服务
63 whois+ whois+              WHOIS+
64 covia Communications Integrator (CI) 通讯接口 
65 tacacs-ds TACACS-Database Service   TACACS数据库服务
66 sql*net Oracle SQL*NET        Oracle SQL*NET
67 bootps Bootstrap Protocol Server   引导程序协议服务端
68 bootpc Bootstrap Protocol Client   引导程序协议客户端
69 tftp Trivial File Transfer      小型文件传输协议
70 gopher Gopher             信息检索协议
71 netrjs-1 Remote Job Service      远程作业服务
72 netrjs-2 Remote Job Service      远程作业服务
73 netrjs-3 Remote Job Service      远程作业服务
74 netrjs-4 Remote Job Service      远程作业服务
75 ? any private dial out service    预留给个人拨出服务
76 deos Distributed External Object Store 分布式外部对象存储 
77 ? any private RJE service      预留给个人远程作业输入服务
78 vettcp vettcp             修正TCP?
79 finger Finger             FINGER(查询远程主机在线用户等信息)
80 http World Wide Web HTTP       全球信息网超文本传输协议
81 hosts2-ns HOSTS2 Name Server     HOST2名称服务
82 xfer XFER Utility           传输实用程序
83 mit-ml-dev MIT ML Device       模块化智能终端ML设备
84 ctf Common Trace Facility       公用追踪设备
85 mit-ml-dev MIT ML Device       模块化智能终端ML设备
86 mfcobol Micro Focus Cobol       Micro Focus Cobol编程语言
87 ? any private terminal link      预留给个人终端连接
88 kerberos Kerberos           Kerberros安全认证系统
89 su-mit-tg SU/MIT Telnet Gateway    SU/MIT终端仿真网关
90 dnsix DNSIX Securit Attribute Token Map DNSIX 安全属性标记图 
91 mit-dov MIT Dover Spooler       MIT Dover假脱机
92 npp Network Printing Protocol     网络打印协议
93 dcp Device Control Protocol      设备控制协议
94 objcall Tivoli Object Dispatcher   Tivoli对象调度
95 supdup SUPDUP            
96 dixie DIXIE Protocol Specification  DIXIE协议规范
97 swift-rvf Swift Remote Virtural File Protocol 快速远程虚拟文件协议 
98 tacnews TAC News           TAC(东京大学自动计算机?)新闻协议
99 metagram Metagram Relay       
101/tcp hostname NIC Host Name Server
102/tcp iso-tsap ISO-TSAP Class 0
103/tcp gppitnp Genesis Point-to-Point Trans Net
104/tcp acr-nema ACR-NEMA Digital Imag. & Comm. 300
105/tcp cso CCSO name server protocol
105/tcp csnet-ns Mailbox Name Nameserver
106/tcp 3com-tsmux 3COM-TSMUX
107/tcp rtelnet Remote Telnet Service
108/tcp snagas SNA Gateway Access Server
109/tcp pop2 Post Office Protocol - Version 2
110/tcp pop3 Post Office Protocol - Version 3
111/tcp sunrpc SUN Remote Procedure Call
112/tcp mcidas McIDAS Data Transmission Protocol
113/tcp ident
114/tcp audionews Audio News Multicast
115/tcp sftp Simple File Transfer Protocol [ 相约加拿大:枫下论坛 rolia.net/forum ]
116/tcp ansanotify ANSA REX Notify
117/tcp uucp-path UUCP Path Service
118/tcp sqlserv SQL Services
119/tcp nntp Network News Transfer Protocol
120/tcp cfdptkt CFDPTKT
121/tcp erpc Encore Expedited Remote Pro.Call
122/tcp smakynet SMAKYNET
123/tcp ntp Network Time Protocol
124/tcp ansatrader ANSA REX Trader
125/tcp locus-map Locus PC-Interface Net Map Ser
126/tcp unitary Unisys Unitary Login
127/tcp locus-con Locus PC-Interface Conn Server
128/tcp gss-xlicen GSS X License Verification
129/tcp pwdgen Password Generator Protocol
130/tcp cisco-fna cisco FNATIVE
131/tcp cisco-tna cisco TNATIVE
132/tcp cisco-sys cisco SYSMAINT
133/tcp statsrv Statistics Service
134/tcp ingres-net INGRES-NET Service
135/tcp epmap DCE endpoint resolution
136/tcp profile PROFILE Naming System
137/tcp netbios-ns NETBIOS Name Service
138/tcp netbios-dgm NETBIOS Datagram Service
139/tcp netbios-ssn NETBIOS Session Service
140/tcp emfis-data EMFIS Data Service
141/tcp emfis-cntl EMFIS Control Service
142/tcp bl-idm Britton-Lee IDM
143/tcp imap Internet Message Access Protocol
144/tcp uma Universal Management Architecture
145/tcp uaac UAAC Protocol
146/tcp iso-tp0 ISO-IP0
147/tcp iso-ip ISO-IP
148/tcp jargon Jargon
149/tcp aed-512 AED 512 Emulation Service
150/tcp sql-net SQL-NET
151/tcp hems HEMS
152/tcp bftp Background File Transfer Program
153/tcp sgmp SGMP
154/tcp netsc-prod NETSC
155/tcp netsc-dev NETSC
156/tcp sqlsrv SQL Service
157/tcp knet-cmp KNET/VM Command/Message Protocol
158/tcp pcmail-srv PCMail Server
159/tcp nss-routing NSS-Routing
160/tcp sgmp-traps SGMP-TRAPS
161/tcp snmp SNMP
162/tcp snmptrap SNMPTRAP
163/tcp cmip-man CMIP/TCP Manager
164/tcp cmip-agent CMIP/TCP Agent
165/tcp xns-courier Xerox
166/tcp s-net Sirius Systems
167/tcp namp NAMP
168/tcp rsvd RSVD
169/tcp send SEND
170/tcp print-srv Network PostScript
171/tcp multiplex Network Innovations Multiplex
172/tcp cl/1 Network Innovations CL/1
173/tcp xyplex-mux Xyplex
174/tcp mailq MAILQ
175/tcp vmnet VMNET
176/tcp genrad-mux GENRAD-MUX
177/tcp xdmcp X Display Manager Control Protocol
178/tcp nextstep NextStep Window Server
179/tcp bgp Border Gateway Protocol
180/tcp ris Intergraph
181/tcp unify Unify
182/tcp audit Unisys Audit SITP
183/tcp ocbinder OCBinder
184/tcp ocserver OCServer
185/tcp remote-kis Remote-KIS
186/tcp kis KIS Protocol
187/tcp aci Application Communication Interface
188/tcp mumps Plus Five's MUMPS
189/tcp qft Queued File Transport
190/tcp gacp Gateway Access Control Protocol
191/tcp prospero Prospero Directory Service
192/tcp osu-nms OSU Network Monitoring System
193/tcp srmp Spider Remote Monitoring Protocol
194/tcp irc Internet Relay Chat Protocol
195/tcp dn6-nlm-aud DNSIX Network Level Module Audit
196/tcp dn6-smm-red DNSIX Session Mgt Module Audit Redir
197/tcp dls Directory Location Service
198/tcp dls-mon Directory Location Service Monitor
199/tcp smux SMUX
200/tcp src IBM System Resource Controller
201/tcp at-rtmp AppleTalk Routing Maintenance
202/tcp at-nbp AppleTalk Name Binding
203/tcp at-3 AppleTalk Unused
204/tcp at-echo AppleTalk Echo
205/tcp at-5 AppleTalk Unused
206/tcp at-zis AppleTalk Zone Information
207/tcp at-7 AppleTalk Unused
208/tcp at-8 AppleTalk Unused
209/tcp qmtp The Quick Mail Transfer Protocol
210/tcp z39.50 ANSI Z39.50
211/tcp 914c/g Texas Instruments 914C/G Terminal
212/tcp anet ATEXSSTR
214/tcp vmpwscs VM PWSCS
215/tcp softpc Insignia Solutions
216/tcp CAIlic Computer Associates Int'l License Server < r o l i a. n e t >
217/tcp dbase dBASE Unix
218/tcp mpp Netix Message Posting Protocol
219/tcp uarps Unisys ARPs
220/tcp imap3 Interactive Mail Access Protocol v3
221/tcp fln-spx Berkeley rlogind with SPX auth
222/tcp rsh-spx Berkeley rshd with SPX auth
223/tcp cdc Certificate Distribution Center
242/tcp direct Direct
243/tcp sur-meas Survey Measurement
244/tcp dayna Dayna
245/tcp link LINK
246/tcp dsp3270 Display Systems Protocol
247/tcp subntbcst_tftp SUBNTBCST_TFTP
248/tcp bhfhs bhfhs
256/tcp rap RAP
257/tcp set Secure Electronic Transaction
258/tcp yak-chat Yak Winsock Personal Chat
259/tcp esro-gen Efficient Short Remote Operations
260/tcp openport Openport
263/tcp hdap HDAP
264/tcp bgmp BGMP
280/tcp http-mgmt http-mgmt
309/tcp entrusttime EntrustTime
310/tcp bhmds bhmds
312/tcp vslmp VSLMP
315/tcp dpsi DPSI
316/tcp decauth decAuth
317/tcp zannet Zannet
321/tcp pip PIP
344/tcp pdap Prospero Data Access Protocol
345/tcp pawserv Perf Analysis Workbench
346/tcp zserv Zebra server
347/tcp fatserv Fatmen Server
348/tcp csi-sgwp Cabletron Management Protocol
349/tcp mftp mftp
351/tcp matip-type-b MATIP Type B
351/tcp bhoetty bhoetty (added 5/21/97)
353/tcp ndsauth NDSAUTH
354/tcp bh611 bh611
357/tcp bhevent bhevent
362/tcp srssend SRS Send
365/tcp dtk DTK
366/tcp odmr ODMR
368/tcp qbikgdp QbikGDP
371/tcp clearcase Clearcase
372/tcp ulistproc ListProcessor
373/tcp legent-1 Legent Corporation
374/tcp legent-2

木马的:
15=NETSTAT PORT
21=Blade Runner, Doly Trojan, Fore, FTP trojan, Invisible FTP, Larva, ebEx, WinCrash
22=SSH PORT
23=Tiny Telnet Server
25=Shtrilitz Stealth, Terminator, WinPC, WinSpy, Kuang2 0.17A-0.30, Antigen, Email Password Sender, Haebu Coceda, Kuang2, ProMail trojan, Tapiras
31=Agent 31, Hackers Paradise, Masters Paradise
41=DeepThroat
53=DOMAIN PORT
58=DMSetup
63=WHOIS PORT
79=Firehotcker
80=Executor 110=ProMail trojan
90=DNS PORT
101=HOSTNAME PORT
110=POP3 PORT
121=JammerKillah
137=NETBIOS Name Service PORT
138=NETBIOS Datagram Service PORT
139=NETBIOS Session Service PORT
194=IRC PORT
406=IMSP PORT
421=TCP Wrappers
456=Hackers Paradise
531=Rasmin
555=Ini-Killer, Phase Zero, Stealth Spy
666=Attack FTP, Satanz Backdoor
911=Dark Shadow
999=DeepThroat
1001=Silencer, WebEx
1011=Doly Trojan
1012=Doly Trojan
1024=NetSpy
1045=Rasmin
1090=Xtreme
1095=Rat
1097=Rat
1098=Rat
1099=Rat
1170=Psyber Stream Server
1170=Voice
1234=Ultors Trojan
1243=BackDoor-G, SubSeven
1245=VooDoo Doll
1349=BO DLL
1492=FTP99CMP
1600=Shivka-Burka
1807=SpySender
1080=SOCKS PORT
1981=Shockrave
1999=BackDoor 1.00-1.03 { 枫下论坛 rolia.net/forum }
2001=Trojan Cow
2023=Ripper
2115=Bugs
2140=Deep Throat
2140=The Invasor
2565=Striker
2583=WinCrash
2801=Phineas Phucker
3024=WinCrash
3129=Masters Paradise
3150=Deep Throat, The Invasor
3700=Portal of Doom
4092=WinCrash
4567=File Nail
4590=ICQTrojan
5000=Bubbel, Back Door Setup, Sockets de Troie
5001=Back Door Setup, Sockets de Troie
5321=Firehotcker
5400=Blade Runner
5401=Blade Runner
5402=Blade Runner
5550=JAPAN Trojan-xtcp
5555=ServeMe
5556=BO Facil
5557=BO Facil
5569=Robo-Hack
5742=WinCrash
6400=The Thing
6666=IRC SERVER PORT
6667=IRC CHAT PORT
6670=DeepThroat
6711=SubSeven
6771=DeepThroat
6776=BackDoor-G, SubSeven
6939=Indoctrination
6969=GateCrasher
6969=Priority
7000=Remote Grab
7300=NetMonitor
7301=NetMonitor
7306=NetMonitor
7307=NetMonitor
7308=NetMonitor
7626=G_Client(冰河)
7789=Back Door Setup, ICKiller
9872=Portal of Doom
9873=Portal of Doom
9874=Portal of Doom
9875=Portal of Doom
9989=iNi-Killer
10067=Portal of Doom
10167=Portal of Doom
10520=Acid Shivers
10607=Coma
11000=Senna Spy
11223=Progenic trojan
12223=Hack?9 KeyLogger
12345=GabanBus, NetBus, Pie Bill Gates, X-bill
12346=GabanBus, NetBus, X-bill
12361=Whack-a-mole
12362=Whack-a-mole
12631=WhackJob
13000=Senna Spy
16969=Priority
20001=Millennium
20034=NetBus 2 Pro
21544=GirlFriend
22222=Prosiak
23456=Evil FTP, Ugly FTP
26274=Delta Source
29891=The Unexplained
30029=AOL Trojan 30100=NetSphere 1.27a, NetSphere 1.31
30101=NetSphere 1.31, NetSphere 1.27a
30102=NetSphere 1.27a, NetSphere 1.31
30103=NetSphere 1.31
30303=Sockets de Troie
31337=Baron Night, BO client, BO2, Bo Facil, BackFire, Back Orifice, DeepBO
31338=NetSpy DK 31338=Back Orifice, DeepBO
31339=NetSpy DK
31666=BOWhack
31785=Hack Attack
31787=Hack Attack
31789=Hack Attack
31791=Hack Attack
33333=Prosiak
34324=BigGluck, TN
40412=The Spy
40421=Agent 40421, Masters Paradise
40422=Masters Paradise
40423=Masters Paradise
40426=Masters Paradise
47262=Delta Source
50505=Sockets de Troie
50766=Fore
53001=Remote Windows Shutdown
54321=School Bus .69-1.11
60000=Deep Throat
61466=Telecommando
65000=Devil
69123=ShitHeep

Friday, August 25, 2006

Emacs Lisp 学习(二) -- 基本函数

引用自《GNU Emacs Lisp 编程入门》(中译版,2001年5月,P21。以下简称《Elisp》):
“除了一些基本函数是用 C 语言编写的之外,其他所有函数都是用别的函数来定义的。”
“当你在 Emacs Lisp 中编写代码时,你无法分清在 C 语言中编写的函数和在 Emacs Lisp 中编写的函数。它们之间的区别是不相关的。之所以提到它们的区别是因为知道这一点很有趣。实际上,除非你深入研究,否则你将不知道已经编写好的函数是用 Emacs Lisp 编写的还是用 C 语言编写的。”

以下的基本上也引用《Elisp》,因为它总结的太好了,不想破坏它。但个别地方会加以更改:

  • eval-last-sexp

  • 对光标所处的位点前的最后一个符号表达式求值。如果这个函数被激活时没有带参量,返回值输出在回显区中。如果这个函数被激活时带有参量,其输出打印在当前缓冲区中。这个命令一般被绑定到 C-x C-e.


  • defun

  • 定义函数。这个特殊表最多可以有五个部分:函数名,传送给函数的参量的模板、文档、一个可选的交互函数声明以及函数体。
     (defun function-name (arguments ...)
    "optional-documentation ..."
    (interactive argument-passing-info)
    body ...)
  • interactive

  • 设定函数可被交互使用。这个特殊表可以用一个字符串,分成一个部分或者几个部分,依次传送信息到这个函数的参数。这些部分也可以告诉 Lisp 解释器提示这些信息。字符串的每一个部分用换行符 "\n" 分开。(这里字符串即上面所显示的“argument-passing-info”)
    其中常用到的控制字符是:
    b 一个已经存在的缓冲区的名字。
    f 一个已经存在的文件的名字。
    p 数字前缀参量。(注意,这个字符是小写 "p"。)
    r 位点和标记,作为两个数字参量,小的在前面。这是唯一定义两个连续参量而不是一个参量的控制符。


  • let

  • 声明在 let 表达式主体中使用的变量列表并给它们赋初始值,初始值要么是 nil,要么是一个指定的值;然后对 let 表达式主体的其他表达式求值并返回最后一个表达式的值。在 let 表达式主体中,Lisp 解释器看不到被绑定在 let 表达式之外的同名变量的值。
    例如,
    (let ((foo (buffer-name))
    (bar (buffer-size)))
    (message "This buffer is %s and has %d characters."
    foo bar))
  • save-excursion

  • 在对这个特殊表主体求值前,记录位点和标记的值以及当前缓冲区。求值之后恢复原来位点和标记的值以及缓冲区。
    例如,
    (message "We are %d characters into this buffer.
    (- (point)
    (save-excursion
    (goto-char (point-min)) (point))))
  • if

  • 对函数的第一个参量求值;如果这个值是“真”,则对第二个参量求值;否则,如果有第三个参量的话就对第三个参量求值。
    if 特殊表被称作一个条件表达式。在 Emace Lisp 中还有其他条件表达式,但是 if 条件表达式可能是其中最经常使用的。
    例如,
    (if (string= (int-to-string 19)
    (substring (emacs-version) 10 12))
    (message "This is version 19 Emacs")
    (message "This is not version 19 Emacs"))
  • equal、eq

  • 测试两个对象是否相同。如果两个对象有相似的结构和内容,equal 则返回“真”。如果两个参量确实是完全相同的对象,则另一个函数 eq 返回“真”。


  • < 、> 、<= 、>=

  • < 函数测试其第一个参量是否小于第二个参量。与之对应的 > 函数则测试其第一个参量是否大于第二个参量。同样地,<= 函数测试其第一个函数是否小于或者等于第二个参量,>= 函数则测试第一个参量是否大于或者等于第二个参量。所有这些函数使用的参量都是数字。


  • message

  • 这个函数往回显区中打印一条消息。打印的消息只可以有一行。这个函数的第一个参量是一个字符串,这个字符串中能够包含“%s”、“%d”或者“%c”,以打印字符串后面的参量的值。用来替代“%s”的参量必须是一个字符串或者一个符号;用来替代“%d”的参量必须是一个数字。而用来替代“%c”的参量必须是一个数字,它将打印出具有相应数值的 ASCII 字符。


  • setq 、set

  • setq 函数将其第一个参量的值设置为第二个参量的值。第一个参量由这个 setq 函数自动地加上引号。这个函数对后续的成对参量执行同样的赋值操作。另外一个 set 函数只能接受两个参量,并在将其第一个参量返回的值设置为其第二个参量返回的值之前对它们求值。


  • buffer-name

  • 这个函数不需要参量,它将缓冲区的名字以一个字符串的形式返回。


  • buffer-file-name

  • 这个函数不需要参量,它返回缓冲区正在访问的文件的名字。


  • current-buffer

  • 返回 Emacs 中当前缓冲区的名字,这个当前缓冲区可能并不是屏幕上看到的缓冲区。


  • other-buffer

  • 返回最近选择过的缓冲区(既不是作为参量传送给 other-buffer 函数的缓冲区,也不是当前缓冲区。


  • switch-to-buffer

  • 这个函数为 Emacs 选择一个活动的缓冲区,并将它显示在当前的窗口,以使用户能够看到它。这个函数经常被绑定到 C-x b 键序列。


  • set-buffer

  • 将 Emacs 的注意力切换到另一个运行程序的缓冲区。不要改变当前窗口正在显示的内容。


  • buffer-size

  • 返回当前缓冲区中的字符数。


  • point

  • 返回当前光标位置对应的值,这个值是从缓冲区的开始处直到光标所在位置所占的总的字符数。


  • point-min

  • 返回当前缓冲区中位点的最小可能值。如果变窄没有开启,这个值就是1。


  • point-max

  • 返回当前缓冲区中位点的最大可能值。如果变窄没有开启,这个值就是缓冲区末尾对应的值。

Thursday, August 24, 2006

Emacs Lisp 学习(一)

对于 Emacs Lisp 的语法来说,它的解释方式相当于我们在数据结构中所说的“前缀表达式”,因为它的所有操作都是放在一个列表的第一项的。而如果在一列表的左括号前放了一个"'"号,那么这个列表相当于被认作为一数组,其第一个元素不会再被认作是函数,而是数据。

但由于 Lisp 的语法特性 -- 如果一种语言的语法看上去像是数据表,那么它的程序清单就可以被其它程序当作数据使用。 -- 因此,即便你没有在一列表的左括号前放置"'"号,你的列表头项也可以看作数据。

几个有用的 Elisp 函数:
1. (message "Strings %d %s" AInteger AString) -- 在回显区显示信息
2. (set 'variable value) -- 赋值,一般用 setq 来代替
3. (setq variable1 value1 variable2 value2 ...) -- 赋值,
相对 set 函数来说要简单,而且可同时为多变量赋值

4. (buffer-name) -- 获得缓冲区名
5. (buffer-file-name) -- 获得缓冲区文件名
6. (switch-to-buffer (other-buffer)) -- 切换缓冲区
7. (buffer-size) -- 缓冲区大小,也即对这个缓冲区中的字符数计数
8. (point) -- 当前光标所在的缓冲区的位置(用字符数计数)

Wednesday, August 23, 2006

Linux Runlevel -- Linux 运行级别

在 Ubuntu 中,系统的运行级别 Runlevel 设置与普通的其它 Linux 的设置不一样,当你修改 /etc/inittab 文件中的 runlevel 为 3 时,Unbuntu 并不是将你带入多用户的虚拟终端,而是同 runlevel=2 时一样地进入到图形界面。这是怎么一回事呢?

原来,在看过 /etc/rc.d 文件后才晓得,系统是通过一系列的脚本来启动进入 Linux 的。当在 /etc/inittab 文件中将 runlevel 设置为 3 时,系统将执行所有在 /etc/rc3.d 目录下的脚本;当设置为 2 时,系统将执行所有在 /etc/rc2.d 目录下的脚本…

/etc/rc<运行级别>.d 目录中的文件一般都是符号连接,指向 /etc/init.d 目录中服务型程序,如 apache, sendmail。而且它们都是以 S 或 K 开头,后面跟上两位数字,再跟上程序名。这里的 S 是 Start,即运行某项服务,而 K 是 Kill,即杀死某项服务。因此当系统转入某个运行级别时,它将运行相应的服务程序,遇到 S 开头的服务时启动它,遇到 K 开头的服务时则杀死它。而数字则表示这些程序的运行优先级,数字小的先执行,数字大的后执行。(这是显然的,当文件首字母一致时,文件又以升序排列,那么数字小的自然排在了前头。)

在终端中,我们可以键入
init <运行级别>
来切换运行级别来达到某种目的,如输入 init 0 使系统关机,输入 init 6 使系统重启。

Ubuntu 默认的 /etc/rc3.d 中有个名为 S20gdm 的符号链接文件,所以当我们把 /etc/inittab 中的 runlevel 设置为 3 时,系统依然会运行图形登录界面 GDM 。因此如果我们将 S20gdm 文件删除掉,再重启,会发现我们进入的不再是图形界面了。

依样画葫芦,如果想在启动系统的时候即启动 apache,我们只需在需要的 rc?.d 目录中加入首字母为 S 的符号链接,使其指向 /etc/init.d/apache 就可以了。

彻底杜绝warning: Cannot add header information - headers already sent in......

标题:彻底杜绝warning: Cannot add header information - headers already sent in......
作者:esayr
出自:www.phpv.net

只要你写过PHP代码,相信都遇上过这个大多时候都令人莫明其妙的warning吧..今天我们就来搞定它...............

看了PHP手册,回答如下:

6. 我得到消息“Warning: Cannot send session cookie - headers already sent...”或者“Cannot add header information - headers already sent...”。

函 数 header(),setcookie() 和 session 函数需要在输出流中增加头信息。但是头信息只能在其它任何输出内容之前发送。在使用这些函数前不能有任何(如 HTML)的输出。函数 headers_sent() 能够检查您的脚本是否已经发送了头信息。请参阅“输出控制函数”。

意思是:不要在使用上面的函数前有任何文字,空行,回车,空格等.但...问题是,这答案并不令人满意.



首先:这错误是怎么产生的呢?让我们来看看PHP是如何处理HTTP header输出和主体输出的。

PHP 脚本开始执行时,它可以同时发送header(标题)信息和主体信息. Header信息(来自 header() 或 SetCookie() 函数)并不会立即发送,相反,它被保存到一个列表中. 这样就可以允许你修改标题信息,包括缺省的标题(例如 Content-Type 标题).但是,一旦脚本发送了任何非标题的输出(例如,使用 HTML 或 print() 调用),那么PHP就必须先发送完所有的Header,然后终止 HTTP header.而后继续发送主体数据.从这时开始,任何添加或修改Header信息的试图都是不允许的,并会发送上述的错误消息之一.

好!那我们来解决它:

笨方法:把错误警告全不显示!
掩耳盗铃之计,具体方法就不说了 ^_^#

解决方案:

1)适用于有权限编辑PHP.INI的人

打开php.ini文件(你应试比我清楚你的php.ini在哪里),找到

output_buffering =改为on或者任何数字.如果是IIS6,请一定改为ON,不然你的PHP效率会奇慢.

2)使用虚拟主机,不能编辑PHP.INI,怎么办?

简单:

在你的空间根目录下建立一个.htaccess文件,内容如下:

AllowOverride All
PHP_FLAG output_buffering On

不幸的情况是:还是不行?全部网页都不能显示啦?

那么,你可以打电话骂一通空间商,然后让他给你把apache的.htaccess AllowOverride打开

3)在PHP文件里解决

ob_start()
启用output buffering机制。 Output buffering支持多层次 -- 例如,可以多次调用 ob_start() 函数。

ob_end_flush()
发送output buffer(输出缓冲)并禁用output buffering机制。

ob_end_clean()
清除output buffer但不发送,并禁用output buffering。

ob_get_contents()
将当前的output buffer返回成一个字符串。允许你处理脚本发出的任何输出。

原理:

output_buffering 被启用时,在脚本发送输出时,PHP并不发送HTTP header。相反,它将此输出通过管道(pipe)输入到动态增加的缓存中(只能在PHP 4.0中使用,它具有中央化的输出机制)。你仍然可以修改/添加header,或者设置cookie,因为header实际上并没有发送。当全部脚本终止 时,PHP将自动发送HTTP header到浏览器,然后再发送输出缓冲中的内容。

在 Linux 中手动设置 IP

在 Linux 中手动设置 IP 可用:

1. 系统自带的可视化工具
2. /sbin/ifconfig
3. 修改 /etc/network/interfaces

配置好的 interfaces 文件内容形如:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address
netmask <子网掩码>
gateway <网关>

auto eth1
iface eth1 inet dhcp

auto eth2
iface eth2 inet dhcp

更改终端的字符

安装好 Linux 后,终端的字体可能默认为中文字体,如果在全字符终端下工作有些将会显示不正常。解决方法是:

先用 export 查看当前用户的环境变量设置,可以看到一堆环境变量及它在当前用户下的值。我们可以在命令行下输入:

export LC_ALL="en"

将该变量临时改变。也可以在 $HOME/.bash_profile 中加入上面的命令,这样可以永久改变。

让别人远程使用你的系统

使用 vnc 可以远程登录和使用桌面。我们可以配置 vncserver 或运行 vino-preferences 来供他人远程登录,也可通过 vnc 客户端工具远程登录他人的桌面。

我们还可以使用 ssh 远程登录其它系统,如:

$ ssh username@hostname.hostdomain

或者使用公钥系统 RSA 分发生成的公钥到须远程登录的系统中同名用户的主目录下的 .ssh 目录中,将生成的公钥放在自己的主目录下的 .ssh 目录中,这样使用 ssh 登录到那台系统中时就不需要密码了。

Ubuntu 的 sudo 揭密

今天第一次安装了 Ubuntu (6.0 Desktop) ,发现与其它 Linux 有非常大的差别。最让人发慌的莫过于 sudo ── 我还没给它发任何指令它就能够做所有 root 级的操作!它让我感觉到一丝的不安~

于是我做了个实验,再用 useradd 加了个用户,结果证明了我的孤陋寡闻 ── 新加的这个用户甚至连与它同名的组名、/home 下的同名目录都没有!而它不能用 sudo 来做 root 的事!

Ubuntu 比我预先想的还要安全。它将 root 用户的密码置为空,这就意味着本地用户和远程用户无法登录到 root 用户下为所欲为。而所有超级指令则完全由第一个用户 ── 也就是安装时设置的用户 ── 来做。这就在一定程度上避免了悲剧的发生(总有人会在 root 用户下使用 "rm -rf /" 命令),因为我们习惯上是不加 sudo 在命令前的。经过进一步和研究发现,这种机制的实现是很简单的,实际上就是将一个普通用户的用户名加在 /etc/group 的某个组名之后(在 Ubuntu 中就是 admin:x:70:myname,其中 70 是组号,myname 是用户名),再将这个组名加入到 /etc/sudoers 中,形如:

%admin ALL=(ALL) ALL

这样就可以在其它 Linux 下也实现同样的功能了。

Blogger 终于又可用了

好久的等待,Blogger 终于又可用了!之前用我的帐户可以登入,发表文章后却无法查看,真是气死我了。现在好了,我又可以重新拾起这个博客了!