|
轉(zhuǎn)自:http://mailboxpublic.googlepages.com/ubuntu%E6%98%AF%E6%80%8E%E6%A0%B7%E7%BB%83%E6%88%90%E7%9A%84
這篇文章在互聯(lián)網(wǎng)上被廣泛轉(zhuǎn)載,但是很多都不完整,誤導(dǎo)新手。同時(shí)有許多人根本不尊重作者的辛勤勞動(dòng),沒(méi)有給原文署名。因此,我把它放到googlepages來(lái),作為正式的文章。如果有商業(yè)用途,請(qǐng)聯(lián)系本人:yulewang \at gmail \dot com
?[轉(zhuǎn)載請(qǐng)保持原樣,請(qǐng)勿擅自修改,以免誤導(dǎo)新手]
yulewang 翻譯
整理
二十一世紀(jì)到了,每個(gè)人都強(qiáng)調(diào)自己的個(gè)性,于是一種叫做DIY的東西悄然興起。
操作系統(tǒng)作為全人類智慧的結(jié)晶,自然DIY起來(lái)難度極大,因而DIY出一個(gè)操作系統(tǒng)成就感絕對(duì)比買宜家的東西的成就感大。
為了不至于從頭開始編寫一個(gè)操作系統(tǒng),我們當(dāng)然把采用現(xiàn)成的操作系統(tǒng)作為一個(gè)底線。
當(dāng)然,我們可以通過(guò)LFS讓我們爽到底,但是,能夠做到LFS的人可真的是鳳毛麟角。而且更重要的是LFS簡(jiǎn)直在挑戰(zhàn)我的忍耐程度。
我的這篇文章,教大家如何DIY一個(gè)自己的ubuntu發(fā)行版。在非常節(jié)省時(shí)間的情況下,達(dá)到耍酷的目的。
就好比LFS一樣,我們需要一個(gè)創(chuàng)作基地。我們首先建立一個(gè)變量。建立這個(gè)變量的好處很明顯,即使你不用~/diy_ubuntu這個(gè)目錄,一樣可以照著這個(gè)文章繼續(xù)做下去。
$ export WORK=~/diy_ubuntu
$ mkdir -p $WORK
然后我們把光盤鏡像文件掛到/mnt
$ sudo mount -t iso9660 -o loop dapper-live-i386.iso /mnt
$ cd $WORK
復(fù)制文件光盤文件
$ mkdir ubuntu-livecd
$ cp -a /mnt/. ubuntu-livecd
$ chmod -R u+w ubuntu-livecd
$ sudo umount /mnt
由于光盤中包含了很多windows下面的自由軟件,我們來(lái)把不必要的文件刪除。當(dāng)然你可以保留。
$ rm -rf $WORK/ubuntu-livecd/programs
把光盤中的壓縮文件掛起來(lái),這個(gè)樣子以后你可以在$WORK/old目錄中看到一個(gè)完整的linux操作系統(tǒng)的目錄。
$ mkdir $WORK/old
$ sudo mount -t squashfs -o loop,ro $WORK/ubuntu-livecd/casper/filesystem.squashfs $WORK/old
我們建立一個(gè)2GB大小的文件系統(tǒng),然后把這個(gè)文件當(dāng)作一個(gè)設(shè)備文件格式化,結(jié)果系統(tǒng)給出了一個(gè)警告,別理會(huì)它,選擇是就是。
$ sudo dd if=/dev/zero of=$WORK/ubuntu-fs.ext2 bs=1M count=2147
$ sudo mke2fs $WORK/ubuntu-fs.ext2
然后我們把這個(gè)空文件系統(tǒng)掛起來(lái)。
$ mkdir $WORK/new
$ sudo mount -o loop $WORK/ubuntu-fs.ext2 $WORK/new
復(fù)制linux操作系統(tǒng)的文件.由于我們事先得到的linux是壓縮的,所以我們把它解壓了。
$ sudo cp -a $WORK/old/. $WORK/new
當(dāng)然現(xiàn)在$WORK/old就沒(méi)有用處了。廢掉它
$ sudo umount $WORK/old
我們首先進(jìn)入剛才得到的那個(gè)操作系統(tǒng)
$ sudo cp /etc/resolv.conf $WORK/new/etc/
$ sudo mount -t proc -o bind /proc $WORK/new/proc
$ sudo chroot $WORK/new /bin/bash
現(xiàn)在你就進(jìn)入系統(tǒng)了,高喊l(fā)inux for human beings,大煉ubuntu,想干什么就干什么。
# vi /etc/apt/sources.list #選擇適合你的源
# apt-get update
# apt-get dist-upgrade
# apt-get install 你想裝的軟件
# apt-get clean
.... #更多的配置
最后離開你的那個(gè)操作系統(tǒng)
# exit
$ sudo umount $WORK/new/proc
$ sudo rm $WORK/new/etc/resolv.conf
現(xiàn)在你已經(jīng)回到了你的初始狀態(tài)中
把manifest重新整一遍
$ sudo chroot $WORK/new dpkg-query -W --showformat='${Package} ${Version}\n' > $WORK/ubuntu-livecd/casper/filesystem.manifest
然后做一下“磁盤清理”
$ sudo dd if=/dev/zero of=$WORK/new/dummyfile
$ sudo rm $WORK/new/dummyfile
重新壓縮系統(tǒng)
$ sudo rm $WORK/ubuntu-livecd/casper/filesystem.squashfs
$ cd $WORK/new
$ sudo mksquashfs . $WORK/ubuntu-livecd/casper/filesystem.squashfs
你的改動(dòng)都保存了。現(xiàn)在把$WORK/new廢掉
$ cd $WORK
$ sudo umount $WORK/new
把文件的md5重新算一下
$ cd $WORK/ubuntu-livecd
$ sudo find . -type f -print0 |xargs -0 md5sum |sudo tee md5sum.txt
建立光盤鏡像,命令很長(zhǎng),忍受著點(diǎn)。
$ cd $WORK
$ sudo mkisofs -o ubuntu-new.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -r -V "My Cool Ubuntu Live CD" -cache-inodes -J -l ubuntu-livecd
然后你就可以用iso把光盤燒了
然后你就可以在別人前面耍酷了。最后,王子和公主過(guò)著幸福的生活
nothing but the script I used:
#install Mysql
apt-get install mysql-server
#install Ruby and relative
apt-get install irb libdbm-ruby1.8 libgdbm-ruby1.8 libmysql-ruby1.8 libmysqlclient14 libopenssl-ruby1.8 libruby1.8-dbg mysql-common ri ri1.8 ruby1.8-dev
#install rubygems
wget http://rubyforge.org/frs/download.php/11289/rubygems-0.9.0.tgz
tar zxfv rubygems-0.9.0.tgz
cd rubygems-0.9.0
ruby setup.rb
gem update –system
#install Rails and dependencies
gem install rails –include-dependencies
#before install Mongrel,
apt-get install install build-essential #we need it to compile mongrel and Sqlite3
#intall Mongrel
gem install mongrel –include-dependencies
#install Sqlite3
apt-get install sqlite3 swig libsqlite3-ruby libsqlite3-dev
gem install sqlite3-ruby #compile this need libsqlite.h
#install Lighttpd
apt-get install lighttpd
some useful link
http://mongrel.rubyforge.org/docs/lighttpd.html
http://fo64.com/articles/2005/10/20/rails-on-breezy
http://scottstuff.net/blog/articles/2006/07/23/typo-installer
轉(zhuǎn)自:http://www.urbanpuddle.com/articles/2006/06/10/install-ruby-rails-on-ubuntu-dapper-drake
This is a small guide I wrote up to installing Ruby on Rails on Dapper Drake. It covers getting lighttpd running to support both rails and php which will be useful to anyone who likes to use phpmyadmin along with ruby on rails. It's similar to the article I wrote earlier for Arch Linux except modified for Ubuntu's Dapper Drake release.
1. Make sure the universe repository in /etc/apt/sources.list is uncommented:
deb http://us.archive.ubuntu.com/ubuntu dapper universe
deb-src http://us.archive.ubuntu.com/ubuntu dapper universe
2. Make sure you are up to date:
sudo apt-get update
sudo apt-get dist-upgrade
3. Install the ruby base packages:
sudo apt-get install ruby ri rdoc mysql-server libmysql-ruby
4. We need to grab the latest ruby gems from rubyforge. You may need to modify this command if a version after 0.90 is available.
sudo wget http://rubyforge.org/frs/download.php/11289/rubygems-0.9.0.tgz
tar -xvzf rubygems-0.9.0.tgz
cd rubygems-0.9.0
sudo ruby setup.rb
5. Now let's install Ruby on Rails!
sudo gem install rails --include-dependencies
6. We have Rails but we still need lighttpd and mysql. I've thrown in PHP too in case you want to manage your database with phpmyadmin like I do. Let's grab all the packages, shall we?
sudo apt-get install lighttpd php5-cgi php4-cgi php5-mysql php5-mysqli php4-mysql libfcgi-dev libfcgi-ruby1.8
7. Modify your /etc/lighttpd/lighttpd.conf file to set up your domains. Be careful because by default Ubuntu maps all the images so that they are taken from /usr/share/images instead of your/rails/root/public/images so if you're wondering why your rails app is working but your images aren't being displayed this is why. You can take out the offending code in your lighttpd.conf or just put your images in /usr/share/images.
8. Time to enable some modules for lighttpd. There are others that you may need but they should be enabled in your lighttpd.conf. Personally, I'm not a fan of enabling modules two different ways but I'm sure this will get cleaned up eventually.
sudo /usr/sbin/lighty-enable-mod fastcgi
sudo /usr/sbin/lighty-enable-mod proxy
sudo /etc/init.d/lighttpd force-reload
9. Let's make sure that there are no errors by stopping lighttpd and then starting it manually:
sudo /etc/init.d/lighttpd stop
sudo lighttpd -f /etc/lighttpd/lighttpd.conf
If you have errors there make sure you take a look and try to address them! The output you see will be your best bet in getting help from somebody on one of the forums.
10. Install some basic gems you might need to run your rails app:
sudo gem install actionmailer
sudo gem install activesupport
sudo gem install actionpack
sudo gem install actionwebservice
前幾天在我的blogjava上和CSDN上發(fā)過(guò)一個(gè)帖子: 說(shuō)一說(shuō)編程惡習(xí).
http://community.csdn.net/Expert/topic/5091/5091887.xml
http://www.aygfsteel.com/uiiang/archive/2006/10/16/75502.html
幾天的時(shí)間收到了很多網(wǎng)友的回復(fù).
我發(fā)這個(gè)帖子時(shí), 并不是想討論技術(shù)問(wèn)題, 也不是為了抱怨, 只是想以另一種方式, 來(lái)提醒一下編程的初學(xué)者, 和一些所謂"經(jīng)驗(yàn)豐富"的老程序員. 因?yàn)槲野l(fā)現(xiàn)傳統(tǒng)的寫一篇編程規(guī)范的文檔, 似乎并不能引起大家足夠的重視. 垃圾代碼仍然一出再出.
我在帖子中所說(shuō)的問(wèn)題, 也并不需要太多的技術(shù)經(jīng)驗(yàn)和深厚的專業(yè)知識(shí). 都是一些隨手而來(lái)的小問(wèn)題, 解決這些問(wèn)題的方法只需要工作時(shí)認(rèn)真負(fù)責(zé), 多動(dòng)動(dòng)腦子就行了.
在帖子的回復(fù)中, 有幾個(gè)回復(fù)讓我很在意:
==================================================================
錢給的太少,能對(duì)付過(guò)去就完了
社會(huì)上什么行業(yè)不是這樣,能對(duì)付就行了 。
要改變這種情況, 那還要上邊有改變的想法,改善一下工作環(huán)境,等等。 。
老板們吃的是良心,拉的是思想
我們那么認(rèn)真干啥
=====================================================================
我對(duì)這種說(shuō)法非常的不贊同, 代碼寫的再差, 老板還是要賺他的錢, 該被剝削還是跑不了.
可如果把這個(gè)當(dāng)成不認(rèn)真工作的理由, 那就只能永遠(yuǎn)自己吃虧了.
如果總是這么不認(rèn)真工作, 不養(yǎng)成良好的工作習(xí)慣, 自已思考的習(xí)慣, 那就永遠(yuǎn)不能進(jìn)步
只能當(dāng)一輩子代碼民工, 一輩子給這種垃圾老板打工.
要明白一點(diǎn), 好的編程習(xí)慣, 思考能力, 都是在平時(shí)工作當(dāng)中, 一點(diǎn)一滴的積累起來(lái)的.
并不是當(dāng)有人給了你一個(gè)好的工作環(huán)境后, 想變出來(lái)就能立刻變出來(lái)的.
老板對(duì)不起咱們是另一回事, 但自己是不是能對(duì)得起自己, 那就看你自己的想法了
態(tài)度決定一切
????????
最近在做一個(gè)汽車銷售系統(tǒng)的改善工作,
這個(gè)系統(tǒng)已經(jīng)運(yùn)行兩年了,
兩年來(lái),
客戶不斷的提出新需求,
系統(tǒng)也在不斷的改來(lái)改去。
這次輪到我來(lái)改它了。
?
想想
N
年前初學(xué)編程的時(shí)候,
書上,
網(wǎng)上,
雜志上不斷的在說(shuō),
要養(yǎng)成良好的編程習(xí)慣。
然后還給出了
N
長(zhǎng)的一大篇文章來(lái)介紹一些編程規(guī)范。
我這個(gè)人是很懶的,
大概的看了一下就過(guò)去了。
沒(méi)有特意的記什么。
好在我這個(gè)人也不是特別的懶,
對(duì)自己的工作也是很上心。
編程的時(shí)候盡可能做到更好。
性能功能能考慮到的都要做到最好。
?
慢慢的也養(yǎng)成了一些編程的習(xí)慣,
?
時(shí)間長(zhǎng)了,
下意識(shí)的就去遵守一些模式,模范之類的東西了。
????????
有了這些習(xí)慣,
再看這次修改的系統(tǒng),
真的是生可忍熟不可忍了。
?
這次我也不說(shuō)什么編程規(guī)范了,
我就說(shuō)說(shuō)這些編程惡習(xí)
。
????????
一,
?
程序沒(méi)有注釋
??????
注釋
!!
注釋
!!!
如果只是打印了一個(gè)
HELLO WORLD
,
您不注釋那也就算了,
如果是只有一兩百行的小功能類您不注釋,
那我也忍了,
可是
3000
多行一個(gè)類的業(yè)務(wù)邏輯代碼,
您老人家還不注釋
!!!??
你
TM
讓我怎么去改代碼,
?
一點(diǎn)業(yè)務(wù)邏輯的說(shuō)明都沒(méi)有,
我改代碼的時(shí)候,得一邊用
DEBUG
調(diào)試,
一邊替他加注釋。
然后才能進(jìn)行自己的工作。
幾千行的一個(gè)類,
?
一行注釋都沒(méi)有,
你
TM
就不覺(jué)得顏色單調(diào)了點(diǎn)嗎
?
??????
二,
?
不遵守基本的編程約定
??????
變量名大小寫混亂,
明明是變量,
非要完全大寫,
要不就大寫開頭。
要不就是方法名全是大寫,
最牛
B
的一個(gè)方法是用中文做方法名,
你丫這時(shí)候想起打中文來(lái)了,
累不累呀。
?????? 還有人用拼音做變量名方法名,就算您英文不好,稍微查一下金山詞霸行不行,現(xiàn)在百度和 GOOGLE 都有翻譯功能,稍微查一下英文,也當(dāng)是學(xué)英語(yǔ)了行不行? 您實(shí)在太忙的話,不查也就算了,拼音就拼音吧,好賴也算是中國(guó)話的。 可是您就別用拼音簡(jiǎn)寫了,英文簡(jiǎn)寫還認(rèn)不出來(lái)呢, 您還用拼音的開頭字母當(dāng)變量名, 那我 TM 上哪兒猜去呀!
?????? 三, 不明就里的代碼
?????? 系統(tǒng)中經(jīng)常會(huì)出現(xiàn)這樣的代碼,尤其是在 controller 里居多:
?????? // some code
?????? If(flag .equals(“submit”)){
?????? model.getInfo();
}else{
?????? model.getInfo();
}
我沒(méi)寫錯(cuò), if 和 else 調(diào)用的方法完全一樣,大家也放心,我仔細(xì)的看過(guò)調(diào)用的代碼,調(diào)用的方法里,也沒(méi)有根據(jù)其它情況來(lái)改變他的運(yùn)行路線。我就不明白為什么要做這個(gè) if 判斷了。擔(dān)心會(huì)有什么特殊的業(yè)務(wù)邏輯, 所以也不趕隨便去改他。 猜了半天,感覺(jué)最理想的答案是寫代碼的人,擔(dān)心以后會(huì)有新的邏輯分支, 所以在這里用 if 預(yù)留了一個(gè)位置, 以后改的時(shí)候方便。
數(shù)日之后有幸遇見(jiàn)了當(dāng)初寫這代碼的老兄,問(wèn)過(guò)之后立刻暈倒,原來(lái)是這個(gè)代碼是參照別的模塊的樣子寫的,別的模塊在這里都有 N 個(gè)程序分支,通過(guò) if 來(lái)判斷后決定調(diào)用哪個(gè) model 里的方法。但他這個(gè)模塊很簡(jiǎn)單,沒(méi)有什么分支,就是調(diào)用那一個(gè)方法,但他寫代碼時(shí),看別人的模塊在這里都進(jìn)行 if 判斷了,所以覺(jué)得自己也應(yīng)該判斷一下,于是就出現(xiàn)了上面這樣的代碼。
四, 面向過(guò)程式的編程方法
遇到過(guò)好幾次 2000 多行的方法,所有業(yè)務(wù)邏輯,一氣呵成,就用了一個(gè)方法搞定。如果是簡(jiǎn)單的邏輯也就算了, 可是幾千行的代碼全放在一個(gè)方法里,一個(gè)類里有無(wú)數(shù)的重復(fù)代碼。 這回到好,重構(gòu)那本書沒(méi)白看, 現(xiàn)在有了實(shí)踐的機(jī)會(huì)了。
難道您自己調(diào)試的時(shí)候就不覺(jué)得麻煩嗎? 我在這里不想討論什么面向過(guò)程還是面向?qū)ο螅矂e和我說(shuō)什么方法多了也不一定就是面向?qū)ο蟮乃枷搿?/span> 平時(shí)對(duì)自己寫的代碼多上點(diǎn)心, 大家都是在這行干了幾年的人了,把代碼寫的漂亮點(diǎn)有什么不好。
五, 代碼縮進(jìn)混亂
我們公司有規(guī)定,改代碼的時(shí)候,不許修改原有代碼的格式。 不管他多亂,也不許改。 我不明白這是為什么,也許是檢查代碼的人,要用文件比較工具吧。
但這下苦壞我了, 代碼的格式那叫一個(gè)亂。 有頂著行頭寫的, 有向后空了 N 格的,大概是寫代碼的人, 為了方便自己找到正在調(diào)試的那段代碼,所以把代碼的縮進(jìn)變得和其它代碼與眾不同吧。 那您調(diào)試完了到是重新排一下版呀, 這真的不累~~, 現(xiàn)在的 IDE 工具都有自動(dòng)排版代碼的功能, 一個(gè)快捷鍵就搞定了,稍微勤快一點(diǎn)行嗎??
最 BT 的一段代碼是縮進(jìn)居然出了屏幕!!! 你吃飽了撐的呀, 沒(méi)事縮那么遠(yuǎn)干嗎, 我根據(jù)后臺(tái)輸出找了半天也沒(méi)找到那段代碼在哪兒, 原來(lái)是因?yàn)榭s進(jìn)的太遠(yuǎn)了,不在屏幕范圍之內(nèi), 向右拉了半天滾動(dòng)條才找到。 你丫是不是寫著代碼睡著了? 臉正好砸在 TAB 鍵上。
六, 多余的后臺(tái)輸出
好幾個(gè)循環(huán)嵌套在一起~~~ 也行, 就算是因?yàn)闃I(yè)務(wù)邏輯需要,沒(méi)別的辦法也將就了。 好幾個(gè)循環(huán)嵌套在一起查數(shù)據(jù)庫(kù), 咱們最好還是開動(dòng)一下腦筋, 看看有什么更好的辦法。如果還是沒(méi)別的辦法, 那也湊合了。 可這種情況您就別在后臺(tái)輸出 SQL 語(yǔ)句啦, 每次一執(zhí)行程序,成百上千個(gè) SQL 語(yǔ)句在后臺(tái)輸出, 查數(shù)據(jù)庫(kù)才用了一兩秒,結(jié)果輸出這些 SQL 就用了半分鐘。 您自己就沒(méi)覺(jué)出程序慢在哪里嗎? 您調(diào)試程序的時(shí)候輸出一下也就算了, 提交到正式運(yùn)行的環(huán)境時(shí),就麻煩您,勞您大駕~~ 把那些輸出注釋掉吧,實(shí)在不行留幾個(gè)重要的輸出就行了。 讓這種代碼影響系統(tǒng)性能~~ 也太冤了吧。
七, 打腫臉充胖子
我也不知道這條算不算惡習(xí),也許不算,在有些人眼里還是好事。但也要看具體情況,經(jīng)常有些人寫代碼不喜歡用 IDE ,只用 EDITPLUS 這類工具。按常理說(shuō),初學(xué)者都應(yīng)該盡量用這些編輯器寫代碼,對(duì)加深學(xué)習(xí)印象有好處。也有人說(shuō)高手不屑于用那些 IDE ,我少見(jiàn)多怪, 這種絕頂高手我沒(méi)見(jiàn)過(guò)。
但咱平時(shí)工作的時(shí)候,要的是效率,您不是那種高手就乖乖的用 IDE 吧。經(jīng)常見(jiàn)到有些人,為查一個(gè)方法的調(diào)用,搜來(lái)搜去的。真正的高手是工作效率最高的人,不是用最簡(jiǎn)單工具的人。
//20061019 start
??????? 一些補(bǔ)充:?
可他把時(shí)間全耽誤在這上了, 這樣的工作效率, 加班都是活該的
//20061019 end
??? 今天就寫這么多,
大家還遇到過(guò)什么樣的編程惡習(xí),歡迎補(bǔ)充。
大家不要總是抱怨什么工資太少,工作量太大。工作效率這玩意兒是要經(jīng)驗(yàn)來(lái)做基礎(chǔ),這沒(méi)錯(cuò),經(jīng)驗(yàn)少也沒(méi)事。咱平時(shí)寫程序的時(shí)候多上點(diǎn)心,多對(duì)自己的代碼思考一下,多動(dòng)動(dòng)腦子。自然就能總結(jié)出最好的工作經(jīng)驗(yàn)了,工作效率自然就提高了。
也別總是說(shuō)什么
STRUTS
不好,
HIBERNATE
太慢,不屑去用它。人家的程序能在全世界流行,自然有他的過(guò)人之處。多讀讀他的代碼,學(xué)習(xí)一下他到底好在哪里,如何才能把這些優(yōu)點(diǎn)應(yīng)用到自己的代碼上。這才是最重要的。
?也許咱們寫不出什么高超的代碼技巧,寫不出什么華麗的算法,但如果能在一些習(xí)慣,細(xì)節(jié)上做到精益求精,那也對(duì)得起自己的代碼了。
??? 寫出上面這些代碼的人,如果你的工資真的很少,那我只能惋惜的說(shuō)一句:你的工資是可憐了點(diǎn),但看您寫的這代碼,連這點(diǎn)工資都不應(yīng)該給你!!
Ruby是一種功能強(qiáng)大的面向?qū)ο蟮哪_本語(yǔ)言,她可以使您方便快捷地進(jìn)行面向?qū)ο缶幊?Ruby使文本處理和系統(tǒng)管理變得簡(jiǎn)單,與Perl非常相似.一句話:簡(jiǎn)單明了,擴(kuò)展性強(qiáng),移植性好.
松本行弘"Matz"(Matsumoto Yukihiro)是Ruby語(yǔ)言的發(fā)明人,他從1993年起便開始著手Ruby的研發(fā)工作。他一直想發(fā)明一種語(yǔ)言,使你既能進(jìn)行高效開發(fā)又能享受編程的快樂(lè)。1993年2月24日Ruby誕生了,1995年12月Matz推出了Ruby的第一個(gè)版本Ruby 0.95。不久Ruby便憑借其獨(dú)特的魅力橫掃日本,相信在不久的將來(lái),Ruby將走向世界。
大體說(shuō)來(lái),Ruby的安裝方法可分為兩類。
第一種方法,自己編譯源代碼然后開始安裝。在UNIX系列OS(Linux、NetBSD、FreeBSD、Solaris、HP-UX以及Windows中的Cygwin等等)平臺(tái)上采用這種方式安裝時(shí),操作方法大同小異且簡(jiǎn)便快捷。在Windows環(huán)境中,編譯環(huán)境的不同會(huì)帶來(lái)功能上的差異(請(qǐng)參考「不同的Microsoft Windows編譯環(huán)境所引起的差異」)。
另一種方法就是使用針對(duì)不同平臺(tái)開發(fā)的各種便利的安裝工具。若您“不想編譯”或者想使用軟件包來(lái)安裝Ruby的相關(guān)軟件的話,我們推薦您使用這種方法。Linux環(huán)境下可以使用RPM或deb,若是FreeBSD的話則可以使用ports/packages等。但是,您必須擁有root權(quán)限才能使用軟件包進(jìn)行安裝。若您想安裝到自己的主目錄里的話,就必須自己編譯源代碼。
Windows上的安裝方法有點(diǎn)特殊。在cygwin、mswin32或mingw這三種不同的編譯環(huán)境下,使用的安裝方法也不一樣。若您并不熟悉UNIX的話,我們建議您使用mingw或mswin32。
此外在您編譯源代碼時(shí),您可以使用CVS以獲得最新版的源代碼。
這里我們只介紹了一些典型的安裝方法,實(shí)際上,Ruby還可以支持很多其他的平臺(tái)。而且Ruby每天都會(huì)得到改進(jìn),因此本文件中的某些描述可能已經(jīng)與實(shí)際情況有所不同。若您發(fā)現(xiàn)我們的描述有誤或與實(shí)際情況不符的話,請(qǐng)您指正。同時(shí)若您有其他平臺(tái)上的相關(guān)信息的話,也請(qǐng)您補(bǔ)足。如您所見(jiàn),我們采用的是專人維護(hù)制度。當(dāng)您想幫我們補(bǔ)充資料的時(shí)候,請(qǐng)參考「RWiki的RD」。
(字母順序)
\a 響鈴 \b 退格 \e 逃脫 \f 換頁(yè) \n 換行 \r 回車 | \s 空格 \t Tab \v 垂直表格跳位 \nnn 八進(jìn)制 \xnn 十六進(jìn)制? \cx Control-x | \C-x???? Control-x \M-x???? Meta-x \M-\C-x? Meta-Control-x \x?????? x #{code}? code |