第一塊鋼板的故事是運(yùn)輸機(jī)飛行員講的。在飛越駝峰航線支援中國(guó)抗戰(zhàn)時(shí),美軍的運(yùn)輸機(jī)隊(duì)常常遭到日軍戰(zhàn)斗機(jī)的偷襲。C-47運(yùn)輸機(jī)只有一層鋁 皮,日軍的零式戰(zhàn)斗機(jī)在屁股后面緊追,一通機(jī)槍掃射,飛機(jī)上就是一串透明窟窿,有時(shí)子彈甚至能穿透飛行座椅,奪去飛行員的生命。情急之下,一些美軍飛行員 在座椅背后焊上一塊鋼板。實(shí)際上,在與日本飛機(jī)激戰(zhàn)時(shí),中國(guó)空軍的飛行員早就用過(guò)這個(gè)辦法。就是靠著這塊鋼板,他們從日本飛機(jī)的火舌下奪回了自己的性命。
第二塊鋼板的故事來(lái)自一位將軍。看過(guò)好萊塢大片《拯救大兵瑞恩》的觀眾也許還記得,片中出現(xiàn)過(guò)一個(gè)死在滑翔機(jī)里的美國(guó)將軍。這是一段真實(shí)的 故事。諾曼底登陸中,美軍第101空降師副師長(zhǎng)唐.普拉特準(zhǔn)將乘坐滑翔機(jī)實(shí)施空降作戰(zhàn)。起飛前,有些人自作聰明,在機(jī)頭位置副師長(zhǎng)的座位下裝上厚厚的鋼 板,用來(lái)防彈。但他們沒(méi)有想到,由于滑翔機(jī)自身沒(méi)有動(dòng)力,與牽引的運(yùn)輸機(jī)脫鉤后,必須保持平衡滑翔降落,而沉重的鋼板讓滑翔機(jī)頭重腳輕,一頭扎向地面,普 拉特準(zhǔn)將也摔斷了脖子,成為美軍在D日陣亡的唯一將領(lǐng)。
第三塊鋼板的故事來(lái)自一位數(shù)學(xué)家。二戰(zhàn)后期,美軍對(duì)德國(guó)和日本法西斯展開了大規(guī)模戰(zhàn)略轟炸,每天都有成千架轟炸機(jī)呼嘯而去,返回時(shí)往往損失 慘重。美國(guó)空軍對(duì)此十分頭疼:如果要降低損失,就要往飛機(jī)上焊防彈鋼板;但如果整個(gè)飛機(jī)都焊上鋼板,速度航程載彈量什么都要受影響。
怎么辦?空軍請(qǐng)來(lái)數(shù)學(xué)家亞伯拉罕.沃爾德。沃爾德的方法十分簡(jiǎn)單。他把統(tǒng)計(jì)表發(fā)給地勤技師,讓他們把飛機(jī)上彈洞的位置報(bào)上來(lái),然后自己鋪開 一張大白紙,畫出飛機(jī)的輪廓,再把那些小窟窿一個(gè)個(gè)添上去。畫完之后大家一看,飛機(jī)渾身上下都是窟窿,只有飛行員座艙和尾翼兩個(gè)地方幾乎是空白。
沃爾德告訴大家:從數(shù)學(xué)家的眼光來(lái)看,這張圖明顯不符合概率分布的規(guī)律,而明顯違反規(guī)律的地方往往就是問(wèn)題的關(guān)鍵。飛行員們一看就明白了: 如果座艙中彈,飛行員就完了;尾翼中彈,飛機(jī)失去平衡就要墜落——這兩處中彈,轟炸機(jī)多半就回不來(lái)了,難怪統(tǒng)計(jì)數(shù)據(jù)是一片空白。因此,結(jié)論很簡(jiǎn)單:只需要 給這兩個(gè)部位焊上鋼板就行了。
第一塊鋼板是傳奇,機(jī)智的飛行員用它挽救了自己的生命,戰(zhàn)場(chǎng)上曾有過(guò)許多這樣的傳奇故事,但這種傳奇往往像火花一閃即逝;第二塊鋼板則是教 訓(xùn),是用寶貴的生命換回來(lái)的教訓(xùn),誰(shuí)都知道焊鋼板的人也是好心,但結(jié)果卻完全相反;而第三塊鋼板是升華,它用科學(xué)的方法,從實(shí)戰(zhàn)經(jīng)驗(yàn)中提煉出規(guī)律,你可能 想像不到,這塊講科學(xué)的鋼板挽救了數(shù)以萬(wàn)計(jì)的飛行員的生命。
小小的鋼板背后,凝聚著多少智慧和鮮血,值得每一位軍人去用心體會(huì)。一旦戰(zhàn)爭(zhēng)和你正面相對(duì)的時(shí)候,你準(zhǔn)備把鋼板放在哪里?
trivial- rewrite(8) |
||||||
Network | -> | smtpd(8) | |
|
||
|
\ | |||||
Network | -> | qmqpd(8) | -> | cleanup(8) | -> | incoming |
|
/ | |||||
|
pickup(8) | <- | maildrop | |||
|
^ | |
|||||
Local | -> | sendmail(1) | -> | postdrop(1) |
trivial- rewrite(8) |
|
smtp(8) | -> | Network | ||||||
/ | ||||||||||
|
|
- | lmtp(8) | -> | Network | |||||
/ | ||||||||||
incoming | -> | active | -> | qmgr(8) | --- | local(8) | -> | File, command | ||
|
|
|
\ | |||||||
- | virtual(8) | -> | File | |||||||
|
deferred | |
\ | |||||||
|
pipe(8) | -> | Command |
public class TestThreadDaemonMethod {
/**
* @param args
*/
public static void main(String[] args) {
TestThread t = new TestThread("test thread");
//如果設(shè)置為false,那么在執(zhí)行完后面的start方法后,jvm不會(huì)退出
t.setDaemon(false);
//如果設(shè)置為true,則執(zhí)行完后面的start方法后,jvm會(huì)退出
t.setDaemon(true);
t.start();
//在start之后設(shè)置daemon會(huì)拋出異常
//t.setDaemon(true);
if (t.isDaemon()) {
System.out.println("test thread is a daemon.");
}
}
}
class TestThread extends Thread {
private String name;
public TestThread(String name) {
this.name = name;
}
/* (non-Javadoc)
* @see java.lang.Thread#run()
*/
public void run() {
while(true) {
System.out.println("running " + name);
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Jetty具備以下特點(diǎn):
。Jetty是最快的Servlet服務(wù)器之一
應(yīng)用廣泛
。商業(yè)項(xiàng)目有IBM Tivoli, Sonic MQ and Cisco SESM等
可到Jetty網(wǎng)站 http://jetty.mortbay.org/jetty/ 查看最新信息
Jetty按照功能可以分為四個(gè)主個(gè)主要的部分,HttpServer, HttpContext,HttpHandler,HttpListener,詳見如下類圖:
<圖 1-1>
<圖 1-7 >
上圖展示了一個(gè)request的處理過(guò)程,首先HttpListener監(jiān)聽到客戶端發(fā)來(lái)的請(qǐng)求創(chuàng)建一個(gè)HttpConnection實(shí)例(封裝了連接細(xì)節(jié),比如從Socket連接中獲取的輸入流和輸出流), HttpConnection對(duì)象構(gòu)建過(guò)程中會(huì)創(chuàng)建Jetty內(nèi)部自定義的HttpRequest和HttpResponse對(duì)象,接著 HttpListener會(huì)調(diào)用這個(gè)HttpConnection實(shí)例的handle方法, HttpConnection實(shí)例就調(diào)用HttpRequest對(duì)象的read()方法讀取信息,調(diào)用HttpServer的service方法以 HttpRequest,HttpResponse為參數(shù)傳給HttpServer,HttpServer又將HttpRequest和 HttpResponse分發(fā)給相應(yīng)的HttpCotext,HttpContext最后將HttpRequest和HttpResponse交給自身的 HttpHandler 處理,在這里HttpRequest,HttpResponse被再次封裝為ServletHttpRequest和 ServletHttpResponse,其實(shí)這兩個(gè)類實(shí)現(xiàn)了我們所熟知的HttpServletRequest和 HttpServletResponse接口。
1.HttpHandler:
SecurityHandler:提供基本的安全驗(yàn)證
ForwardHandler:轉(zhuǎn)發(fā)一個(gè)request到另一個(gè)url
HttpListener & HttpServer:
HttpListener是所有監(jiān)聽器類的接口,如圖中的SocketListener (基于傳統(tǒng)的Socket技術(shù))就實(shí)現(xiàn)了該接口,Jetty還有其它的實(shí)現(xiàn)該接口類,如SocketChannelListener(基于NIO技術(shù))類等,HttpListener職責(zé)主要是在服務(wù)器啟動(dòng)后監(jiān)聽相應(yīng)端口的來(lái)自客戶端請(qǐng)求并建立連接(圖 1-1 中所示用HttpConnection封裝連接細(xì)節(jié)),監(jiān)聽器可在同個(gè)IP上開啟多個(gè)端口為同一個(gè)HttpServer 進(jìn)行監(jiān)聽,所以HttpListener和HttpServer是多對(duì)一的關(guān)系,如下圖:
<圖 1-3 >
HttpContext & HttpHandler:
HttpContext相當(dāng)于對(duì)應(yīng)客戶端請(qǐng)求的URL或某個(gè)虛擬機(jī), 其子類中包含若干個(gè)HttpHandler, 當(dāng)接受到request(請(qǐng)求)時(shí),HttpContext會(huì)依次(按某個(gè)預(yù)定的次序)把request交給這些HttpHandler處理,直到這個(gè) request被標(biāo)示處理過(guò)為止, 需要注意的是這個(gè)request可能被多個(gè)HttpHandler處理,但只能有一個(gè)HttpHandler能標(biāo)示這個(gè)request已被處理過(guò).
<圖 1-5 >
另外Jetty對(duì)多網(wǎng)卡(多個(gè)IP地址,不同的主機(jī)名)的服務(wù)器也提供了很好的支持,每個(gè) HttpContext都有自身的HttpServer:
<圖 1-6 >
listener1.setHost(“www.app1.com”);//orListener1.setHost(“www.app2.com”)
listener2.setPort(80);
HttpContext context1 = new HttpContext();
context1.setContextPath(“/”);
server1.addContext(context1);
本文通過(guò)圖示簡(jiǎn)要介紹了Jetty整個(gè)體系架構(gòu)和主要的組件類及服務(wù)器的啟動(dòng)執(zhí)行過(guò)程,其實(shí)Jetty 通常被用來(lái)做為內(nèi)嵌的Web Server來(lái)使用,一些常見的服務(wù)器軟件,如Apache Cocoon、JBoss ,JOnAs等都會(huì)采用Jetty作為Web解決方案;另外由于Jetty在性能及穩(wěn)定性要優(yōu)于同類HTTP Server的原因,Jetty已在國(guó)外已很流行,鑒于這一點(diǎn),本文作者可以預(yù)測(cè)在不久的將來(lái)Jetty同樣也會(huì)在國(guó)內(nèi)流行開來(lái)。
If you have not already, please read the README.
Important links on this page:
Short version for experts: Apply our kernel patch. Enable the new match option in Netfilter.
Check our kernel compatibility list to see if the Linux version you want to use has been tested.
Use the appropriate kernel patch from the "Layer 7 patches" package to patch[1] the kernel (read the README in the package to determine which patch to use). Set up your kernel as you would otherwise. Now enable the following options (these are correct for Linux 2.6.21.1, but they tend to move around a lot, so you may have to go hunting if you have a different kernel version):
Warning: Some users have reported kernel crashes when they using SMP with l7-filter. (Some have also reported that their SMP systems run fine.) If you have a multi-CPU machine, test carefully before putting it into production with l7-filter.
Compile and install the kernel as usual. (Our code may generate warnings about "initialization from incompatible pointer type", ignore them.) Reboot.
First read the README in the package "Layer 7 patches". Depending on your version of iptables, the instructions are different.
Use the appropriate iptables patch to to patch[1] iptables. Compile iptables, pointing it at your patched kernel source:
chmod +x extensions/.layer7-test
" (information about file permissions can't be contained in the patch)
make KERNEL_DIR=/path/to/patched/kernel_source
" (you must have configured your kernel source before this step)
make install KERNEL_DIR=/path/to/patched/kernel_source
" Don't use this version. There's no reason to and it's difficult to compile.
Copy libxt_layer7.c
and libxt_layer7.man
(from the subdirectory of the "Layer 7 patches" package that the README points you to) to the extensions/
directory of your iptables source. Then:
./configure --with-ksource=/path/to/patched/kernel_source
" (use the full path)
make
"
make install
" These files tell iptables and the kernel how protocol names correspond to regular expressions, e.g. "ftp" means "^220[\x09-\x0d -~]*ftp
".
Uncompress the "Protocol Definitions" package and make the resulting directory /etc/l7-protocols
.[2]
You should now be ready to actually do stuff.
There are three things you may be interested in doing: (1) blocking certain protocols (2) controlling bandwidth use (3) accounting. We cover each of these cases below.
First, a reminder: Just because you're using l7-filter, you don't need to do all of your packet classification using it. It's likely that what you want to accomplish can be at least partially done with less demanding classifiers, such as port matching. For instance, you can probably assume that traffic on TCP port 80 that isn't matched by any P2P patterns is HTTP; you don't need to actually use the HTTP pattern.
l7-filter uses the standard iptables extension syntax. (If you are not familiar with this, it's time to read the documentation at netfilter.org or at least "man iptables".)
iptables
[specify table & chain] -m layer7 --l7proto
[protocol name] -j
[action]
(Or, if you're just interested in accounting, omit "-j
[action]".)
For a list of valid protocol names, see the protocols page. You can also add your own protocols.
The only trick is that, in order to do its classification, l7-filter must be able to see all of the relevant traffic. It only sees packets if they go through an l7-filter rule. One way of ensuring this is to use the POSTROUTING
chain of the mangle
table:
iptables -t mangle -A POSTROUTING -m layer7 --l7proto
[etc.]
See this packet flow diagram for details. In some cases, l7-filter can sucessfully match even if it can only see one side of the connection, but in general, this won't work.
If you are using a version of l7-filter earlier than 2.7, you must manually load the ip_conntrack module kernel for l7-filter to work. Newer versions do this automatically.
Don't. Here's why:
Instead of dropping packets you don't like, we recommend using Linux QoS to restrict their bandwidth usage. If you insist on using l7-filter to drop packets, make sure you have investigated other options first, such as the features of your HTTP proxy (useful for worms).
To control the bandwidth that a protocol uses, you can use Netfilter to "mark" the packets and QoS to filter on that mark. To mark:
iptables -t mangle -A POSTROUTING -m layer7 --l7proto imap -j MARK --set-mark 3
The number "3" is arbitrary. It can be any integer. Then use tc
to filter on that mark (tc
is "traffic control", the userspace tool for Linux QoS, part of the iproute2 package):
tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 3 fw flowid 1:3
Did you understand that last command? You can try reading The Linux Advanced Routing and Traffic Control HOWTO for enlightenment. You should do this so that you have some idea what you're doing, but unfortunately, tc
is incredibly obtuse and you're likely to wish you just had a canned script. Well, we can help:
These may need to be modified if your setup is significantly different than mine, but it should provide a much better starting point than most other things you are likely to find.
Be prudent when choosing the amount of bandwidth you allow each protocol. Restricting a protocol to an unusably low bandwidth can have similar consequences to blocking it.
If you just want to keep track of what's in use on your network, simply use the above command without any -j
option. For example:
iptables -t mangle -A POSTROUTING -m layer7 --l7proto imap
You can then get statistics by using iptables -L
. (See "man iptables" for details.)
Some protocols open child connections to transfer data. FTP is the most familiar example. If you have loaded the ip_conntrack_ftp
or nf_conntrack_ftp
kernel module, l7-filter will classify FTP and all its child connections as FTP. The same goes for IRC/IRC-DCC, etc.
If you wish to classify the children differently, use the standard iptables "helper" match. You can use "-m --helper ftp
" to match ftp child connections. Of course, once you've done this, it's silly to involve l7-filter, at least for the children.
l7-filter marks unmatched connections that it is still trying to match as "unset". The first few packets of all TCP connections as well as those of some UDP connections will match this. Similarly, l7-filter marks connections that it has given up trying to match as "unknown". These are matched just like normal protocols:
iptables -A FORWARD -m layer7 --l7proto unset
iptables -A FORWARD -m layer7 --l7proto unknown
The "unset" match is only supported by l7-filter 2.9 and up.
The protocol definitions are simple text files with a format described in the Pattern-HOWTO. They can be updated as a package or individually.
If you update the protocol definitions, you need to clear the relevant iptables rules and re-enter them. This is because the pattern files are only read by iptables, not directly by the kernel.
/proc/net/layer7_numpackets
. (i.e. "echo 16 > /proc/net/layer7_numpackets
".)
modprobe xt_layer7 maxdatalen=N
" (ipt_layer7
in old versions), where N
is in bytes. This should be used cautiously, since performance may decrease drastically with larger data sizes. To prevent you from accidentally bringing down your network, there is an artificial limit of 65536 imposed. If you're sure you know what you're doing, you can remove this limit by editing ipt_layer7.c or xt_layer7.c in the kernel source. tc
generates. A useful command is "tail -f /var/log/messages
". Please see the FAQ for more information.
After receiving a Ph.D. in computer science from MIT in 1979, Jeff joined IBM's Thomas J. Watson Research Center. During his tenure at IBM, he held a wide variety of technical and management positions, including vice president, Systems and Software Research, corporate vice president of technology, and general manager of IBM's SecureWay business unit, where he was responsible for IBM's security, directory, and networking software business.
Jeff then served as president of Bell Labs Research and Advanced Technologies, where he established new facilities in Ireland and India, and served as chairman of the board of the New Jersey Nanotechnology Consortium.
Most recently, Jeff served as the Executive Vice President and Chief Technology Officer for Novell. He was responsible for Novell's technology direction, as well as leading Novell's product business units.
Jeff was appointed by President Bill Clinton to serve on the Advisory Committee for the Presidential Commission for Critical Infrastructure Protection. He has also chaired the Chief Technology Officer group of the Computer Systems Policy Project, and has served on the National Research Council's Computer Science and Telecommunications Board. He is a Fellow of ACM and the IEEE.
Dr. Jaffe holds a BS in Mathematics and an MS in Electrical Engineering and Computer Science in addition to his Doctorate from the Massachusetts Institute of Technology.
在HTML中,form元素用
W3C的HTML 4.01 specification說(shuō),form元素的method屬性用來(lái)指定發(fā)送form的HTTP方法。 這可以簡(jiǎn)單地理解為,get僅僅是拼接一個(gè)URI,然后直接向服務(wù)器請(qǐng)求數(shù)據(jù)(需要提交給服務(wù)器的數(shù)據(jù)集包含在URI中)。比如: 這個(gè)form在提交的時(shí)候,會(huì)產(chǎn)生這樣能夠一個(gè)get請(qǐng)求:FormGet.aspx?ProductID=1。 而post會(huì)把form的數(shù)據(jù)集,即ProductID=1這個(gè)鍵值對(duì)包裝在請(qǐng)求的body中,發(fā)送給服務(wù)器,然后向服務(wù)器請(qǐng)求數(shù)據(jù)。對(duì)于: 這樣一個(gè)form在提交時(shí),我們將看到一個(gè)干凈的URI:FormPost.aspx。因?yàn)閿?shù)據(jù)不是拼接在URI中。 如果用get提交一個(gè)驗(yàn)證用戶名和密碼的form,一般認(rèn)為是不安全的。因?yàn)橛脩裘兔艽a將出現(xiàn)在URL上,進(jìn)而出現(xiàn)在瀏覽器的歷史記錄中。顯然,在對(duì)安全性有要求的情況下,應(yīng)該使用post。 HTML 4.01 specification指出,get只能向服務(wù)器發(fā)送ASCII字符,而post則可以發(fā)送整個(gè)ISO10646中的字符(如果同時(shí)指定
注意get和post對(duì)應(yīng)的enctype屬性有區(qū)別。enctype有兩個(gè)值,默認(rèn)值為application/x-www-form-urlencoded,而另一個(gè)值multipart/form-data只能用于post。 HTTP specification并沒(méi)有對(duì)URL長(zhǎng)度進(jìn)行限制,但是IE將請(qǐng)求的URL長(zhǎng)度限制為2083個(gè)字符,從而限制了get提交的數(shù)據(jù)長(zhǎng)度。測(cè)試表明如果URL超出這個(gè)限制,提交form時(shí)IE不會(huì)有任何響應(yīng)。其它瀏覽器則沒(méi)有URL的長(zhǎng)度限制,因此其它瀏覽器能通過(guò)get提交的數(shù)據(jù)長(zhǎng)度僅受限于服務(wù)器的設(shè)置。 而對(duì)于post,因?yàn)樘峤坏臄?shù)據(jù)不在url中,所以通常可以簡(jiǎn)單地認(rèn)為數(shù)據(jù)長(zhǎng)度限制僅受限于服務(wù)器的設(shè)置。 由于一個(gè)get得到的結(jié)果直接對(duì)應(yīng)到一個(gè)URI,所以get的結(jié)果頁(yè)面有可能被瀏覽器緩存。而post一般則不能,參考5。 出于和上面相同的原因,我們可以用一個(gè)URI引用一個(gè)get的結(jié)果頁(yè)面,而post的結(jié)果則不能,所以必然不能被搜索引擎搜到。 在服務(wù)端的ASP.NET程序中,對(duì)于get,我們用Request.QueryString[control-name]來(lái)取得對(duì)應(yīng)的=current-value;對(duì)于post,我們用Request.Form[control-name]。 我們也可以籠統(tǒng)地使用Request[control-name]。但這樣做的效率不如前者。我們可以用下面的程序比較Request.QueryString和Request的效率: 同樣的辦法我們可以比較Request.Form和Request。 最后得到的結(jié)果(Request.QueryString[control-name] / Request[control-name]和Request.Form[control-name] / Request[control-name])大多數(shù)時(shí)候是小于1的。因此,我們因該盡量用Request.QueryString或Request.Form來(lái)代替Request。 W3C的官方建議是:當(dāng)且僅當(dāng)form是冪等(idempotent)的時(shí)候,使用get。冪等是一個(gè)數(shù)學(xué)上的術(shù)語(yǔ),其定義是:對(duì)于一個(gè)函數(shù)f : D -> D,如果D中的所有x滿足f (f x) = f x,那么這個(gè)函數(shù)是冪等的。HTTP specification(比如RFC 2616)中,將冪等解釋為:多次相同請(qǐng)求產(chǎn)生的副作用,和一次請(qǐng)求的副作用相同。 打個(gè)比方,如果你提交一個(gè)form會(huì)從Google上查詢一個(gè)關(guān)鍵詞,那么我們可以認(rèn)為這個(gè)form是冪等的,因?yàn)?次提交和10次提交的副作用是差不多的(10次查詢可能會(huì)多消耗一些電能);如果你提交一個(gè)form是訂購(gòu)一個(gè)終極大黃蜂(Utimate bumblebee),那么這就不是冪等的:要是你不小心多提交了1次form的話,你可能會(huì)被老婆亂罵,你不小心又提交了10次的話,你可能就破產(chǎn)了——一次提交和多次提交的副作用明顯不同,所以這不是冪等的。 所以,一般來(lái)說(shuō),如果提交這個(gè)請(qǐng)求純粹只是從服務(wù)端獲取數(shù)據(jù)而不進(jìn)行其他操作,并且多次提交不會(huì)有明顯的副作用,應(yīng)該使用get。比如: 如果提交這個(gè)請(qǐng)求會(huì)產(chǎn)生其它操作和影響,就應(yīng)該使用post。比如: 另一個(gè)要考慮的因素是安全性。見2.1。1. get和post的定義
<input type="text" name="ProductID" value="1" />
<input type="submit" value="Get" />
</form>
<input type="text" name="ProductID" value="1" />
<input type="submit" value="Get" />
</form>
2. get和post的區(qū)別
2.1 安全性
2.2 編碼
2.3 提交的數(shù)據(jù)的長(zhǎng)度
2.4 緩存
2.5 引用和SEO
3. 服務(wù)端的處理
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_PreInit(object sender, EventArgs e)
{
if(Request["InputString"] != null)
{
int count = 1000000;
DateTime start;
DateTime end;
string value = "";
start = DateTime.Now;
for(int i = 0;i < count;i++)
{
value = Request.QueryString["InputString"];
}
end = DateTime.Now;
double requestGet = (end - start).TotalSeconds;
start = DateTime.Now;
for(int i = 0;i < count;i++)
{
value = Request["InputString"];
}
end = DateTime.Now;
double request = (end - start).TotalSeconds;
compare.InnerHtml = requestGet.ToString() + " / " + request.ToString() + " = " + (requestGet / request).ToString();
get.InnerHtml = value;
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Request.QueryString / Request</title>
</head>
<body>
<form method="get" action="FormGet.aspx">
<div>
<input type="text" name="InputString" /><input type="submit" value="Post" /><br />
Get: <span runat="server" id="get"></span><br />
Request.QueryString / Request: <span runat="server" id="compare"></span>
</div>
</form>
</body>
</html>
4. 正確地使用get和post
5. 瀏覽器差異
并且,在后退的過(guò)程中有可能出現(xiàn)“Page has Expired”(通常是向自己post,然后后退時(shí)):
微軟的技術(shù)支持人員號(hào)稱“this is not a bug or problem specified to the ASP.NET but a security feature of the IE Browser”,并且說(shuō)“You can also inform your users of this”,實(shí)在是荒唐。另外,IE 7:和IE 6相同;
6. 參考
但是事情如果再?gòu)?fù)雜一點(diǎn),就會(huì)有新鮮的現(xiàn)象了。如果船上的人算計(jì)一下,在這條船沉沒(méi)前,他們有足夠的時(shí)間安全抵達(dá)港口,危險(xiǎn)屬于下一船乘客時(shí),有很多人就會(huì)停下來(lái)安靜地欣賞海景了。
哪怕這條船在抵達(dá)港口前的確會(huì)沉沒(méi)一部分,比如灌滿一個(gè)叫“馬爾代夫”的船艙,其他艙室的人,基本上都會(huì)無(wú)動(dòng)于衷。
更復(fù)雜的是,如果這艘船超重,需要乘客們把身上的金銀細(xì)軟拋下船的話,扯蛋就來(lái)了。窮人們說(shuō),富人錢多經(jīng)得起糟蹋你先扔,至少得再扔40%;富人則說(shuō)窮鬼你那堆破爛兒又沉又不值錢你先扔;窮人說(shuō)我扔也可以但你富人得拿出年收入的0.5%-1%,即3000塊補(bǔ)償給我,還得教會(huì)我發(fā)財(cái)致富的秘訣,富人說(shuō)你丫做白日夢(mèng)吧老子已經(jīng)一年白給你100塊了,多了別想,你救的不是我是你自己。
窮人說(shuō)老子才剛坐這船沒(méi)兩天,你狗日富人坐好幾年了,生生把新船坐成了破船,現(xiàn)在多出點(diǎn)血是天經(jīng)地義的;富人說(shuō)以前天殺的知道這船是會(huì)坐破的,再說(shuō)如果不是我們富人天天搗鼓這船,你這幫農(nóng)民今天還在刨地球,能懂航海術(shù)、看西洋景?今天這船要沉了也是我們發(fā)現(xiàn)的,要不你們這幫賤人淹死了都不知道咋回事。
蛋還沒(méi)扯完,眼見船越來(lái)越漏的厲害。于是船客們聚到“日本房間”,窮人們靠著人多強(qiáng)行通過(guò)了一份《京都協(xié)議書》,要求富人趕緊扔?xùn)|西,窮人卻可以不扔。最富的富人米利堅(jiān)說(shuō),這是明顯的仇富嘛,天下哪有這道理,俺不玩了。窮人說(shuō)你B一家最重,負(fù)擔(dān)就占了全船的近1/5,你不扔誰(shuí)扔?米利堅(jiān)說(shuō)我的東西是最重,但也最值錢。俺以全船1/4的值錢物件才占了1/5的重量,憑啥我扔?你們看看那叫拆哪的窮鬼,以不到3%的價(jià)值也占了近1/5的負(fù)擔(dān),為啥不讓他多扔?
黑眼睛黑頭發(fā)黃皮膚的拆哪一聽急了:窮兄弟們別聽他的,俺們可都是窮苦人家出身,你們要是把我推出來(lái),以后你們中有人小偷小摸耍流氓誰(shuí)罩著啊?好歹這船是大家的,你米利堅(jiān)就是東西最多最重,這船也屬你坐的時(shí)間最長(zhǎng)次數(shù)最多,看我干啥?憑啥?你憑啥?這最怕船沉的不是咱窮棒子是富人,他們經(jīng)不起大規(guī)模人員傷亡。
為了盡快把蛋扯完,船客們最近又在一間叫“丹麥”的房間開了一個(gè)會(huì)。據(jù)最新消息,把蛋扯完的機(jī)會(huì)已經(jīng)很渺茫。最重大的成果將是形成一份《哥本哈根共識(shí)》,這份有所有船客簽名的共識(shí)說(shuō):“我們都發(fā)現(xiàn)并且承認(rèn),這船在漏水,而且是會(huì)沉的。”
這份共識(shí)發(fā)表后,船客們紛紛接到恭喜電話,表?yè)P(yáng)他們表現(xiàn)出了高超的政治智慧,并且堅(jiān)定地捍衛(wèi)了國(guó)家利益。
FWD:轉(zhuǎn)發(fā): 鬧騰的哥本哈根氣候會(huì)議-娛樂(lè)版昨天QQ的馬化騰到我們這邊來(lái)聊天,談到了創(chuàng)始人重視產(chǎn)品在企業(yè)成功的重要性。即使在QQ已經(jīng)這么成功,市值近百億美金的今天,他還花很多時(shí)間在產(chǎn)品上。聽上去很簡(jiǎn)單也很自然,但是我看到很多創(chuàng)始人做不到。
創(chuàng)業(yè)者要管的太多了,產(chǎn)品,市場(chǎng),銷售,財(cái)務(wù),技術(shù),找人,炒人,公關(guān)。不可能每件事情都事必躬親,一定有些需要交給手下領(lǐng)頭。哪兩件最重要?我覺(jué)得是找人和產(chǎn)品。別的事都可能找到好的人代勞,但產(chǎn)品和找人不行。
找到一個(gè)好的人太關(guān)鍵了。我從前寫了很多:海龜還是土鱉?,招不到稱心的人怎么辦?,招怎么樣的人,今天就不多說(shuō)了。只加一句:找什么樣的人,決定公司的文化,所以創(chuàng)業(yè)者是一定要自己做的。
找到好的人,可以一手代包市場(chǎng),銷售,財(cái)務(wù),技術(shù),公關(guān)(找到好的人,能放心的把我的一個(gè)部門讓他管,知道他會(huì)管的比我更好時(shí),感覺(jué)太好了!),但產(chǎn)品是一個(gè)公司的靈魂。它需要融會(huì)貫通:從市場(chǎng)這邊了解目標(biāo)用戶是誰(shuí)和他們的需求,平衡銷售那邊經(jīng)常和市場(chǎng)部不同的意見,與技術(shù)討論什么能做,什么不能做。其中有很多取舍,很多推動(dòng),不是創(chuàng)始人CEO,很難做好這個(gè)工作。另外,創(chuàng)始人應(yīng)該是最了解用戶的需求的人,因?yàn)樗麆?chuàng)業(yè)的激情就來(lái)自于為用戶解決一個(gè)問(wèn)題,增添一個(gè)價(jià)值。
做易趣時(shí)我產(chǎn)品放權(quán)太多。雖然我們那時(shí)的產(chǎn)品部很不錯(cuò),但沒(méi)有創(chuàng)始人每天的介入,他們的任務(wù)是不可能完成的。我給我們那時(shí)候2002年的產(chǎn)品打75分。2003年走了后,平臺(tái)遷移到eBay后,分?jǐn)?shù)就慘不忍睹了。網(wǎng)站改個(gè)字需要九個(gè)禮拜,改個(gè)功能需要在總部排隊(duì)九個(gè)月。(這里的故事很長(zhǎng)了,產(chǎn)品只是一部分,文化的變化更致命。以后有空和易趣那些老員工們應(yīng)該一起寫本書。)
放眼世界上翹楚的產(chǎn)品,AMAZON,APPLE,NINTENDO,他們的CEO或創(chuàng)始人都是注重產(chǎn)品,不放權(quán)的瘋子。
上一篇創(chuàng)業(yè),管哪個(gè)事情最重要?引起了一些有趣的爭(zhēng)議,關(guān)于產(chǎn)品還是市場(chǎng)重要。我覺(jué)得這個(gè)問(wèn)題對(duì)創(chuàng)業(yè)者很關(guān)鍵,所以再來(lái)寫一篇。ha,這個(gè)月寫了兩篇,為前幾個(gè)月補(bǔ)過(guò)。
首先,問(wèn)題不是說(shuō)企業(yè)里哪個(gè)部門重要。一個(gè)企業(yè)的成功,是很多因素的乘法。乘法和加法不同:后者如有一個(gè)因素是零,對(duì)整體不一定有大影響,但前者里如果有個(gè)因素是零,結(jié)果是零 - 產(chǎn)品,市場(chǎng)做得再好,財(cái)務(wù)出問(wèn)題,公司照樣死。當(dāng)企業(yè)成功是乘法時(shí),討論哪個(gè)部門重要,沒(méi)什么意義。比較有意義的問(wèn)題是:創(chuàng)業(yè)者哪個(gè)比較可以放權(quán),哪個(gè)需要自己抓。(謝謝keso幫我澄清too。)這個(gè)問(wèn)題太重要了,因?yàn)槲覉?jiān)信一個(gè)初創(chuàng)的企業(yè),最重要的資源是創(chuàng)始人的時(shí)間和精力。我們現(xiàn)在談的,是這個(gè)資源的分配問(wèn)題。
第二,做產(chǎn)品,從來(lái)不是(或不應(yīng)該是)空想的。我覺(jué)得產(chǎn)品部是公司最難的工作。它需要綜合權(quán)衡各個(gè)部門的要求。
a)市場(chǎng):我們的現(xiàn)有用戶是這么樣的人?他們的需求是什么?我們的潛在用戶是誰(shuí)?他們的需求是什么?很多時(shí)候,人(尤其是經(jīng)理人)會(huì)太注重現(xiàn)有顧客,忽視潛在客戶。人也會(huì)太注重用戶能表達(dá)的需求(市場(chǎng)調(diào)查拿得到得),忽略用戶不知道怎么表達(dá)的需求(需要靠創(chuàng)業(yè)的自覺(jué)來(lái)發(fā)掘的)。
b)銷售:什么樣的產(chǎn)品賣得掉,容易銷售?在有些公司,市場(chǎng)和銷售的目標(biāo)用戶是一樣的。在有些公司,用戶(主要用產(chǎn)品的人)和顧客(付錢的人)是不一樣的。如何滿足和權(quán)衡他們不同的需求?在易趣那時(shí),用戶是買家,顧客是賣家,他們的需求往往不同,甚至相反。
c)技術(shù):那些產(chǎn)品容易做,那些難做?如何取舍時(shí)間vs功能?技術(shù)部會(huì)經(jīng)常說(shuō):市場(chǎng)部要的功能不可能做,或需要太久。有時(shí)技術(shù)部有個(gè)好點(diǎn)子,能做個(gè)眩的新功能,市場(chǎng)部不要。相信誰(shuí)的判斷?
d)客服:用戶很多的反饋和問(wèn)題,需要多重視?什么是1%的不重要的用戶提出來(lái)的,什么是我們的核心用戶的要求,或是潛在的核心用戶的問(wèn)題(解決了這個(gè)問(wèn)題,他就成了核心用戶)?
還有很多例子可舉。我的感覺(jué)是產(chǎn)品最最需要一個(gè)創(chuàng)始者以一個(gè)公司總體和長(zhǎng)遠(yuǎn)的發(fā)展為目標(biāo),權(quán)衡各個(gè)部門的利益和偏見(甚至慣性或惰性),最終以創(chuàng)始者的直覺(jué)做決定。
我觀察人的適應(yīng)能力發(fā)現(xiàn),越是在意別人的觀感,越會(huì)對(duì)自己沒(méi)有信心;越在意別人怎么想,越容易使自己的缺點(diǎn)變成嚴(yán)重負(fù)擔(dān)。我知道,人必須了解別人會(huì)怎么想,那是人際互動(dòng),彼此同理,交流情誼的基本心理過(guò)程,缺乏它,人會(huì)變得剛愎自用,少一點(diǎn)知人的靈嗅。但如果你太介意別人的想法,就會(huì)失去伸展自我的機(jī)會(huì),那么這個(gè)心結(jié)將成為壓抑創(chuàng)意和破壞健康的元兇。
美國(guó)已逝的科學(xué)奇才費(fèi)曼曾經(jīng)說(shuō)過(guò)一段自己的故事。他的妻子(他昵稱她貓咪)一向很開朗,總有玩不完的花招,增添生活中不少情趣,在朋友中傳為佳話。費(fèi)曼在普林斯頓時(shí),有一天接到一盒妻子寄來(lái)的鉛筆,上面接著金色的字:“理查親親!我愛(ài)你。貓咪。”
費(fèi)曼覺(jué)得這禮物是很好,但是按上一句親昵的話,如果跟教授朋友討論問(wèn)題,忘在別人桌子上,別人會(huì)怎么想呢?他不好意思用這些筆。可是當(dāng)時(shí)物質(zhì)缺乏,舍不得浪費(fèi),所以刮掉一枝鉛筆上的字來(lái)用。
第二天上午,費(fèi)曼又收到一封妻子寄來(lái)的信,一開頭就寫著:“想把鉛筆上的名字刮掉嗎?這算什么?你難道不以擁有我的愛(ài)為榮嗎?”然后是大寫字體寫著:“你管別人怎么想。”這段話大大感動(dòng)了費(fèi)曼,后來(lái)他寫了一本書,記述著他們的感情、生活軼事和他自己在科學(xué)上的重大突破,就用“你管別人怎么想”當(dāng)書名。
作為一位咨詢工作者,我很早就注意到:在意別人的評(píng)價(jià),往往會(huì)在別人的逢迎夸獎(jiǎng)中作出錯(cuò)誤的決定,也會(huì)在別人的口誅筆伐中潰不成軍。這樣的人無(wú)法堅(jiān)持自己的卓見和判斷。不過(guò),更嚴(yán)重的是,太在意別人怎么想的人,心理壓力總是很大。他每天面對(duì)著十目所視、十手所指的壓力,總覺(jué)得別人時(shí)時(shí)刻刻都在注意自己的缺點(diǎn)或疏失。這使得一個(gè)人覺(jué)得退縮,失去積極主動(dòng)的活力,當(dāng)然連他的創(chuàng)意和主動(dòng)性都會(huì)喪失。
這種畏縮是學(xué)習(xí)得來(lái)的,許多師長(zhǎng)和父母經(jīng)常對(duì)孩子說(shuō):“羞羞臉!你看別人會(huì)怎么想!”次數(shù)多了,就會(huì)養(yǎng)成孩子畏首畏尾的習(xí)慣。尤其在日常言行上,稍不恰當(dāng),就以別人會(huì)笑話來(lái)壓抑孩子、批判孩子,部會(huì)造成嚴(yán)重的心理困擾。你只能就事實(shí)去告知孩了不當(dāng)之點(diǎn),要求他改進(jìn),或幫助他建立新行為,但不能拿別人來(lái)批判他,而造成屈辱。
有一位兒童,他經(jīng)常張著大嘴巴。父母親覺(jué)得不好看,就常常指責(zé)他:“你這模樣,別人都會(huì)笑話你的!”這孩子來(lái)作咨詢時(shí),不留神還是張著日,但卻因?yàn)殚L(zhǎng)期被批評(píng)壓抑而造成交友困難和懼學(xué)癥來(lái)尋求協(xié)助。另外有一個(gè)孩子,因?yàn)楦改赣H常指責(zé)他功課不好,在親戚朋友面前毫不留情地?cái)?shù)落他,以致不敢會(huì)見親友。
有一次,一位年輕人來(lái)找我咨詢:他患有口吃,尤其在眾人面前說(shuō)話,舌頭更是打結(jié)。他回憶說(shuō),“我在初中時(shí)說(shuō)話稍有口吃,老師要我多練習(xí),所以常要我上臺(tái)講話。我越是在意口吃,口吃就越嚴(yán)重。現(xiàn)在我在一家公司擔(dān)任行銷工作,常常為口吃而憂惱。上個(gè)星期,我向老板作演示文稿,簡(jiǎn)直說(shuō)不出話來(lái),羞死了。”經(jīng)過(guò)仔細(xì)了解,確定他不是生理因素,于是我說(shuō):
“你這個(gè)毛病我也沒(méi)辦法,除非你各實(shí)當(dāng)位口吃的推銷員。”我接著仔細(xì)為他說(shuō)明:
“要接受自己口吃的現(xiàn)實(shí),毫無(wú)畏懼地表現(xiàn)自己是一位口吃的推銷員,然后培養(yǎng)一些你在業(yè)務(wù)工作上的優(yōu)點(diǎn),例如熱忱、信用、關(guān)懷等,把它結(jié)合成你的特殊性和個(gè)體。讓許多人知道你,在商界里反而能引起別人對(duì)你的矚目,化缺點(diǎn)為助力”我為他仔細(xì)解釋,目的是要構(gòu)建一個(gè)全新的態(tài)度:他不再介意別人對(duì)他的看法。
他開始學(xué)習(xí)接納自己;坦然表現(xiàn)自己是一位有價(jià)值的口吃推銷員。他不再為口吃而煩心,口吃這件事就再也不構(gòu)成障礙。經(jīng)過(guò)幾個(gè)月,口吃的狀況真的紓緩下來(lái)。
人有一種矛盾意向,你越怕的事它就越成為困擾。反之你處之泰然,把它表現(xiàn)出來(lái)給別人去看看它有多厲害,卻反而減輕對(duì)癥狀。由此可知,越怕陽(yáng)痿的人,越是勃不起來(lái);越是處之泰然的,也就越不會(huì)產(chǎn)生毛病。越想隱藏自己的弱點(diǎn),就越會(huì)構(gòu)成焦慮和緊張,而強(qiáng)化了癥狀和困擾。
我們要有正確的教育理念:父母和師長(zhǎng)當(dāng)然要指正孩子的過(guò)錯(cuò),但不能因錯(cuò)誤而羞辱他。我們應(yīng)多發(fā)現(xiàn)孩子的優(yōu)點(diǎn),從而建立他的信心,不要處處挑剔其缺點(diǎn),令其懼怕畏縮,更而造成心理上的困擾。請(qǐng)注意!了解別人會(huì)怎么想是正確的,但如果太在意別人怎么想,就會(huì)產(chǎn)生麻煩。
摘自張亞勤勞的新書《變革中的思索》,P231
1)洞察力 -- 對(duì)這個(gè)產(chǎn)業(yè)的洞察力。
之所以放在首位,我覺(jué)得這是方向性的,它決定了生產(chǎn)效率。
2)簡(jiǎn)化問(wèn)題的能力 -- 把一個(gè)很難的、大家看起來(lái)很復(fù)雜的概念,用簡(jiǎn)單的語(yǔ)言表達(dá)出來(lái)。
技術(shù)出身的人,其實(shí)有一定優(yōu)勢(shì),因?yàn)樗麄冇兄媹D的豐富經(jīng)歷;而那些優(yōu)秀的領(lǐng)導(dǎo)者,我發(fā)現(xiàn)了另一個(gè)共同的優(yōu)點(diǎn):經(jīng)常使用生活中的比喻。
我多次接觸馬云、衛(wèi)哲、陳天橋等人,他們很少使用晦澀的詞語(yǔ)、概念、術(shù)語(yǔ)來(lái)闡述自己的想法,相反倒是大量使用生活中的比喻,即便在公開演講中也比比皆是。
隨便舉幾個(gè)例子
- 用撒尿到江中來(lái)比喻精力分散;
- 用流行病的輸入性、原生性來(lái)解釋新、老員工對(duì)企業(yè)文化的影響;
- 用菜市場(chǎng)來(lái)比喻平臺(tái),殺雞來(lái)類比平臺(tái)上的服務(wù),很好地解釋‘產(chǎn)業(yè)生態(tài)圈’的種種現(xiàn)象;
PS:我也常用‘將錢存入銀行’來(lái)類比‘數(shù)據(jù)集中存貯’,從而打消客戶對(duì)SaaS數(shù)據(jù)安全性的擔(dān)憂
如果說(shuō)第一種能力還有些天賦的因素的話,那這第二種能力我覺(jué)得完全是可以鍛煉出來(lái)的。
3)判斷能力 -- 大家都有不同的意見,這個(gè)能力考察你到底會(huì)選擇哪個(gè)。缺的不是辦法,缺的是選哪一個(gè)人的辦法。
這個(gè)能力其實(shí)還需要2個(gè)前提能力:團(tuán)隊(duì)建設(shè)能力;勇于承擔(dān)。
- 選擇的前提是有多個(gè)辦法,由團(tuán)隊(duì)/下屬來(lái)提供;要讓團(tuán)隊(duì)中的人勇于提好建議、出好方法,自然需要很強(qiáng)的團(tuán)隊(duì)建設(shè)。至今為止,我依然認(rèn)為ALIBABA在這方面是最強(qiáng)的。
- 判斷的結(jié)果并不一定是十拿九穩(wěn)、一本萬(wàn)利(事實(shí)上這種好運(yùn)很少,大部分情況是模棱兩可、讓人糾結(jié)),這時(shí)候挑戰(zhàn)領(lǐng)導(dǎo)者的其實(shí)是‘責(zé)任承擔(dān)、為結(jié)果負(fù)責(zé)’的勇氣。
作為領(lǐng)導(dǎo)者,與其說(shuō)需要‘判斷能力’,不如說(shuō)需要‘承擔(dān)與果敢’。
暴強(qiáng)回復(fù):大嬸,即使你能把男人當(dāng)狗使,但你敢把狗當(dāng)男人使不?
2.變態(tài)樓主:男人你要李宇春還是章子怡?
暴強(qiáng)回復(fù):一個(gè)公雞,一個(gè)野雞,都不選
3.變態(tài)樓主:通過(guò)海南礦泉水喝死人事件,
暴強(qiáng)回復(fù):弱弱的問(wèn)一下,QS是不是去死的意思?
4.變態(tài)樓主:一學(xué)生,成績(jī)年年倒數(shù)第一,常與人打架,
暴強(qiáng)回復(fù):該生成績(jī)穩(wěn)定,動(dòng)手能力強(qiáng)。
5.說(shuō)說(shuō)中國(guó)的30分鐘新聞聯(lián)播。
暴強(qiáng)回復(fù):有什么說(shuō)的:前十分鐘,領(lǐng)導(dǎo)們很忙。中十分鐘,
6.變態(tài)樓主:都40多了還有許多事不明白該問(wèn)誰(shuí)?
暴強(qiáng)回復(fù):外事問(wèn)谷歌,內(nèi)事問(wèn)百度,房事問(wèn)天涯!
7.變態(tài)樓主:奧運(yùn)口號(hào)“同一個(gè)世界,同一個(gè)夢(mèng)想!”
暴強(qiáng)回復(fù):乖乖,麻將國(guó)粹無(wú)處不在,倒過(guò)來(lái)看居然是“
8.天*涯樓主:從來(lái)都覺(jué)得蝎子精是整部《西游記》
刻,可惡的悟空出現(xiàn)了……
天*涯回復(fù)12:唉,要是換好色的八戒出現(xiàn)就好了!
天*涯回復(fù)13:嗯,八戒出現(xiàn)了,這次改蝎子精不從了……
9.天*涯樓主:懷疑老婆紅杏出墻,但苦于沒(méi)證據(jù)……
天*涯回復(fù):如果你沒(méi)本事做陳冠希,那就做謝霆峰吧
10.天*涯樓主:我們的GJ到底是法制還是人治?
天*涯沙發(fā):不是法治,也不是人治,而是治人,
11.論壇樓主:該死的理發(fā)店把我頭剪壞了!大家出點(diǎn)損招,
論壇地下室:半夜三更,月黑風(fēng)高,靜靜地、輕輕地,
12.論壇樓主:為什么生下的孩子要跟父親一個(gè)姓?
論壇沙發(fā):因?yàn)槿】顧C(jī)里吐出的錢歸插卡人所有。
13.王小丫跟陳章良結(jié)婚,請(qǐng)用四個(gè)字評(píng)論。
論壇回復(fù):丫從良了!
14.論壇樓主:聽到一特好聽的歌,歌詞只記得是“一個(gè)芝麻糕,
論壇回復(fù):你可知Macau,不是我真姓……-_-
15.天*涯樓主:請(qǐng)用一句話形容中國(guó)國(guó)家地震臺(tái)。
天*涯回復(fù):事后諸葛亮,事前豬一樣!
16.樓主:我已經(jīng)一年滴食未進(jìn)了,還是活的好好的!MOP的網(wǎng)
回復(fù):植物都會(huì)打字.汗!!!
17.天*涯樓主:
天*涯沙發(fā):不是請(qǐng)謝霆鋒來(lái)唱歌了嗎?
18.中日韓三國(guó)難道非要采取敵視行為對(duì)待彼此,
沙發(fā):不能!因?yàn)槿?/font> 本人和中國(guó)人談得投機(jī)的時(shí)候,只有當(dāng)話題是關(guān)于韓國(guó)人時(shí);日 本人和韓國(guó)人談得投機(jī)的時(shí)候,只有當(dāng)話題是關(guān)于中國(guó)人時(shí);
19..LZ:你看我的頭像牛B么?
沙發(fā):像。
20..樓主:想問(wèn)問(wèn)各位姐妹,BF和前女友一起買的東西,
沙發(fā):庸人自擾!她的前男友你不也在用嗎?
21.天*涯樓主:據(jù)我考證,
的,然后就離開了。
天*涯回復(fù):哦,謝謝樓主的解釋,
After Gentoo and Slackware, now is the time for Ubuntu removing XMMS packages from their repo. How SAD! And for those who still want XMMS installed in their Ubuntu, here is the tip.
This this is originally written by Sartek and modified by me
Update your packages list
sudo apt-get update
Now install build-essential
sudo apt-get install build-essential
Alright, now we need to install the XMMS’s dependencies
sudo apt-get install autotools-dev automake1.9 libtool gettext libasound2-dev libaudiofile-dev libgl1-mesa-dev libglib1.2-dev libgtk1.2-dev libesd0-dev libice-dev libmikmod2-dev libogg-dev libsm-dev libvorbis-dev libxxf86vm-dev libxml-dev libssl-dev
Now create a working directory and change into that directory
mkdir ~/build
cd ~/build
Download XMMS sources:
wget http://xmms.org/files/1.2.x/xmms-1.2.11.tar.gz
Extract the file and enter the extracted directory
tar xvf xmms-1.2.11.tar.gz
cd xmms-1.2.11/
Run configure with –prefix=/usr
./configure --prefix=/usr
In my case (Intel Pentium Core Duo), I’ve enable CFLAGS options for processor optimization
CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer" ./configure --prefix=/usr --enable-gnutls=yes
You can simply use the command without the CFLAGS above, or if you want to optimize the pidgin to suit your processor, you can refer to Safe_Cflags page (Gentoo.. uhukk..)
Now compile it and install it
make
sudo make install
Now lets create the shortcut in your Gnome Menu
Right click on your Gnome Menu, and click on Edit Menu and follow these pictures:
Finish! now just simply remove your build (working) directory
一、基于于NAT的LVS的安裝與配置。 1. 硬件需求和網(wǎng)絡(luò)拓?fù)? ________ | | | 客戶端 | (互連網(wǎng)) |________| | (router) 202.99.59.1(director GW) | | (202.99.59.110)Virtual IP ____|_____ | | (控制器有兩塊網(wǎng)卡) | director | |__________| (192.168.10.254)DIP | -----------------+---------------- | | | RIP1 RIP2 RIPx ____________ ____________ ____________ |192.168.10.1| |192.168.10.2| |192.168.10.x| |realserver1 | |realserver2 | |realserverx | |____________| |____________| |____________|
2.下載軟件:
(1)、內(nèi)核源代碼:需要下載2.4.23以后版本的內(nèi)核源代碼。下載地址為http://www.kerner.org。本文中下載的內(nèi)核源代為:linux-2.4.30.tar.bz2。
(2)、用戶配置工具ipvsadm,下載地址:http://www.linuxvirtualserver.org/software/ipvs.html。本文下載的是:http://www.linuxvirtualserver.org/software/kernel-2.4/ipvsadm-1.21-11.tar.gz
3.安裝軟件:
在director(控制器,202.99.59.110)上安裝支持LVS的內(nèi)核和配置工具ipvsadm。
(1)、在內(nèi)核配置時(shí)以下選項(xiàng)必須選:
Networking options ---> <*> Packet socket <*> Netlink device emulation [*] TCP/IP networking [*] IP: advanced router [*] Network packet filtering (replaces ipchains) IP: Netfilter Configuration ---> <*> Connection tracking (required for masq/NAT) <*> IP tables support (required for filtering/masq/NAT) <*> Full NAT <*> MASQUERADE target support IP: Virtual Server Configuration ---> <*> virtual server support (EXPERIMENTAL) (12) IPVS connection table size (the Nth power of 2) --- IPVS scheduler <M> round-robin scheduling <M> weighted round-robin scheduling <M> least-connection scheduling <M> weighted least-connection scheduling <M> locality-based least-connection scheduling <M> locality-based least-connection with replication scheduling <M> destination hashing scheduling <M> shortest expected delay scheduling <M> never queue scheduling
(2)、編譯和安裝內(nèi)核
分別執(zhí)行: make bzImage;make modules;make modules_install;然后編輯啟動(dòng)配置文件,重新啟動(dòng)系統(tǒng),在啟動(dòng)時(shí)選擇新的內(nèi)核。
系統(tǒng)啟動(dòng)后要確認(rèn)內(nèi)核是否支持ipvs,只需要執(zhí)行下面的命令即可:grep ip_vs_init /boot/System.map
(3)、編譯和安裝ipvsadm
ln -s /usr/src/linux-2.4.30 /usr/src/linux tar -zxvf ipvsadm-1.21-11.tar.gz
cd ipvsadm-1.21-11
make all
make install
然后運(yùn)行:ipvsadm --version命令,應(yīng)該有下面的內(nèi)容輸出:
ipvsadm v1.21 2004/02/23 (compiled with popt and IPVS v1.0.12)
4. 配置LVS
(1)、在202.99.59.110上:
echo "1" >/proc/sys/net/ipv4/ip_forward
echo "0" >/proc/sys/net/ipv4/conf/all/send_redirects
echo "0" >/proc/sys/net/ipv4/conf/default/send_redirects
echo "0" >/proc/sys/net/ipv4/conf/eth0/send_redirects
echo "0" >/proc/sys/net/ipv4/conf/eth1/send_redirects
清除ipvsadm表:
/sbin/ipvsadm -C
使用ipvsadm安裝LVS服務(wù)
#add http to VIP with rr sheduling
/sbin/ipvsadm -A -t 202.99.59.110:80 -s rr
增加第一臺(tái)realserver:
#forward http to realserver 192.168.10.1 using LVS-NAT (-m), with weight=1
/sbin/ipvsadm -a -t 202.99.59.110:80 -r 192.168.10.1:80 -m -w 1
增加第二臺(tái)realserver:
#forward http to realserver 192.168.10.2 using LVS-NAT (-m), with weight=1
/sbin/ipvsadm -a -t 202.99.59.110:80 -r 192.168.10.2:80 -m -w 1
(2)、realserver配置
在192.168.10.1(realserver1)和192.168.10.2(realserver2)上分別將其網(wǎng)關(guān)設(shè)置為192.168.10.254,并分別啟動(dòng)apache服務(wù)。
在客戶端使用瀏覽器多次訪問(wèn):http://202.99.59.110/,然后再202.99.59.110上運(yùn)行ipvsadm命令,應(yīng)該有類似下面的輸出:
IP Virtual Server version 1.0.12 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 202.99.59.110:http rr -> 192.168.10.1:http Masq 1 0 33 -> 192.168.10.2:http Masq 1 0 33
從上面的結(jié)果可以看出,我們的LVS服務(wù)器已經(jīng)成功運(yùn)行。
二、基于直接路由(DR)的LVS的配置
1.硬件需求和網(wǎng)絡(luò)拓?fù)洌? ________ | | | 客戶端 | (互連網(wǎng)) |________| | (router) 202.99.59.1(director GW) | __________ | | | | (VIP=202.99.59.110, eth0:110) | director |---| (控制器有一塊網(wǎng)卡,且與realserver1和realserver2在同一網(wǎng)段) |__________| | DIP=202.99.59.109 (eth0) | ----------------------------------- | | RIP=202.99.59.108(eth0) RIP=202.99.59.107(eth0) (VIP=202.99.59.110, lo:0) (VIP=202.99.59.110, lo:0) ____________ ____________ | | | | |realserver1 | |realserver2 | |____________| |____________|
2.安裝軟件:
在director(202.99.59.109)上安裝上面的方法安裝內(nèi)核和管理軟件。
3. 配置LVS
(1)、在202.99.59.109上:
修改內(nèi)核運(yùn)行參數(shù),即修改/etc/sysctl.conf文件的內(nèi)容如下: net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 1 net.ipv4.conf.default.send_redirects = 1 net.ipv4.conf.eth0.send_redirects = 1 然后執(zhí)行下面的命令是對(duì)內(nèi)核修改的參數(shù)立即生效: sysctl -p 配置VIP地址: /sbin/ifconfig eth0:0 202.99.59.110 broadcast 202.99.59.110 netmask 255.255.255.255 up /sbin/route add -host 202.99.59.110 dev eth0:0 清除ipvsadm表: /sbin/ipvsadm -C 使用ipvsadm安裝LVS服務(wù): /sbin/ipvsadm -A -t 192.168.1.110:http -s rr 增加realserver: #forward http to realserver using direct routing with weight 1 /sbin/ipvsadm -a -t 192.168.1.110:http -r 192.168.1.12 -g -w 1 /sbin/ipvsadm -a -t 192.168.1.110:http -r 192.168.1.12 -g -w 1
(2)在realserver1(202.99.59.108)和realserver2(202.99.59.107)上做下面的設(shè)置。
修改內(nèi)核運(yùn)行參數(shù),即修改/etc/sysctl.conf文件的內(nèi)容如下: net.ipv4.ip_forward = 0 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 然后執(zhí)行下面的命令是對(duì)內(nèi)核修改的參數(shù)立即生效: sysctl -p 配置VIP地址: /sbin/ifconfig lo:0 202.99.59.110 broadcast 202.99.59.110 netmask 255.255.255.255 up /sbin/route add -host 202.99.59.110 dev lo:0p>在客戶端使用瀏覽器多次訪問(wèn):http://202.99.59.110/,然后再202.99.59.110上運(yùn)行ipvsadm命令,應(yīng)該有類似下面的輸出:
IP Virtual Server version 1.0.12 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.100.254:http rr -> 192.168.100.3:http Route 1 0 28 -> 192.168.100.2:http Route 1 0 29
從上面的結(jié)果可以看出,我們的LVS服務(wù)器已經(jīng)成功運(yùn)行。
在面的實(shí)例中ipvsadm用到的幾個(gè)參數(shù)含義如下:
-A 增加一個(gè)虛擬服務(wù),該服務(wù)由協(xié)議、IP地址和端口號(hào)組成,例如:
-A -t 202.99.59.110:80 (增加一格虛擬服務(wù),其協(xié)議(-t表示tcp,-u表示udp)為TCP、IP為202.99.59.110、端口號(hào)為80。
-s 指定服務(wù)采用的算法,常用的算法參數(shù)如下:
/sbin/ipvsadm -a -t 192.168.1.110:http -r 192.168.1.12 -g -w 1
-a 表示往一個(gè)服務(wù)內(nèi)增加一個(gè)real server
-r 指定real server的IP地址
-w 表示權(quán)重
-g 表示使用DR方式,-m表示NAT方式,-i表示tunneling方式。