|
轉自:http://mailboxpublic.googlepages.com/ubuntu%E6%98%AF%E6%80%8E%E6%A0%B7%E7%BB%83%E6%88%90%E7%9A%84
這篇文章在互聯網上被廣泛轉載,但是很多都不完整,誤導新手。同時有許多人根本不尊重作者的辛勤勞動,沒有給原文署名。因此,我把它放到googlepages來,作為正式的文章。如果有商業用途,請聯系本人:yulewang \at gmail \dot com
?[轉載請保持原樣,請勿擅自修改,以免誤導新手]
yulewang 翻譯
整理
二十一世紀到了,每個人都強調自己的個性,于是一種叫做DIY的東西悄然興起。
操作系統作為全人類智慧的結晶,自然DIY起來難度極大,因而DIY出一個操作系統成就感絕對比買宜家的東西的成就感大。
為了不至于從頭開始編寫一個操作系統,我們當然把采用現成的操作系統作為一個底線。
當然,我們可以通過LFS讓我們爽到底,但是,能夠做到LFS的人可真的是鳳毛麟角。而且更重要的是LFS簡直在挑戰我的忍耐程度。
我的這篇文章,教大家如何DIY一個自己的ubuntu發行版。在非常節省時間的情況下,達到耍酷的目的。
就好比LFS一樣,我們需要一個創作基地。我們首先建立一個變量。建立這個變量的好處很明顯,即使你不用~/diy_ubuntu這個目錄,一樣可以照著這個文章繼續做下去。
$ export WORK=~/diy_ubuntu
$ mkdir -p $WORK
然后我們把光盤鏡像文件掛到/mnt
$ sudo mount -t iso9660 -o loop dapper-live-i386.iso /mnt
$ cd $WORK
復制文件光盤文件
$ mkdir ubuntu-livecd
$ cp -a /mnt/. ubuntu-livecd
$ chmod -R u+w ubuntu-livecd
$ sudo umount /mnt
由于光盤中包含了很多windows下面的自由軟件,我們來把不必要的文件刪除。當然你可以保留。
$ rm -rf $WORK/ubuntu-livecd/programs
把光盤中的壓縮文件掛起來,這個樣子以后你可以在$WORK/old目錄中看到一個完整的linux操作系統的目錄。
$ mkdir $WORK/old
$ sudo mount -t squashfs -o loop,ro $WORK/ubuntu-livecd/casper/filesystem.squashfs $WORK/old
我們建立一個2GB大小的文件系統,然后把這個文件當作一個設備文件格式化,結果系統給出了一個警告,別理會它,選擇是就是。
$ sudo dd if=/dev/zero of=$WORK/ubuntu-fs.ext2 bs=1M count=2147
$ sudo mke2fs $WORK/ubuntu-fs.ext2
然后我們把這個空文件系統掛起來。
$ mkdir $WORK/new
$ sudo mount -o loop $WORK/ubuntu-fs.ext2 $WORK/new
復制linux操作系統的文件.由于我們事先得到的linux是壓縮的,所以我們把它解壓了。
$ sudo cp -a $WORK/old/. $WORK/new
當然現在$WORK/old就沒有用處了。廢掉它
$ sudo umount $WORK/old
我們首先進入剛才得到的那個操作系統
$ sudo cp /etc/resolv.conf $WORK/new/etc/
$ sudo mount -t proc -o bind /proc $WORK/new/proc
$ sudo chroot $WORK/new /bin/bash
現在你就進入系統了,高喊linux for human beings,大煉ubuntu,想干什么就干什么。
# vi /etc/apt/sources.list #選擇適合你的源
# apt-get update
# apt-get dist-upgrade
# apt-get install 你想裝的軟件
# apt-get clean
.... #更多的配置
最后離開你的那個操作系統
# exit
$ sudo umount $WORK/new/proc
$ sudo rm $WORK/new/etc/resolv.conf
現在你已經回到了你的初始狀態中
把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
重新壓縮系統
$ sudo rm $WORK/ubuntu-livecd/casper/filesystem.squashfs
$ cd $WORK/new
$ sudo mksquashfs . $WORK/ubuntu-livecd/casper/filesystem.squashfs
你的改動都保存了。現在把$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
建立光盤鏡像,命令很長,忍受著點。
$ 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把光盤燒了
然后你就可以在別人前面耍酷了。最后,王子和公主過著幸福的生活
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
轉自: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上發過一個帖子: 說一說編程惡習.
http://community.csdn.net/Expert/topic/5091/5091887.xml
http://www.aygfsteel.com/uiiang/archive/2006/10/16/75502.html
幾天的時間收到了很多網友的回復.
我發這個帖子時, 并不是想討論技術問題, 也不是為了抱怨, 只是想以另一種方式, 來提醒一下編程的初學者, 和一些所謂"經驗豐富"的老程序員. 因為我發現傳統的寫一篇編程規范的文檔, 似乎并不能引起大家足夠的重視. 垃圾代碼仍然一出再出.
我在帖子中所說的問題, 也并不需要太多的技術經驗和深厚的專業知識. 都是一些隨手而來的小問題, 解決這些問題的方法只需要工作時認真負責, 多動動腦子就行了.
在帖子的回復中, 有幾個回復讓我很在意:
==================================================================
錢給的太少,能對付過去就完了
社會上什么行業不是這樣,能對付就行了 。
要改變這種情況, 那還要上邊有改變的想法,改善一下工作環境,等等。 。
老板們吃的是良心,拉的是思想
我們那么認真干啥
=====================================================================
我對這種說法非常的不贊同, 代碼寫的再差, 老板還是要賺他的錢, 該被剝削還是跑不了.
可如果把這個當成不認真工作的理由, 那就只能永遠自己吃虧了.
如果總是這么不認真工作, 不養成良好的工作習慣, 自已思考的習慣, 那就永遠不能進步
只能當一輩子代碼民工, 一輩子給這種垃圾老板打工.
要明白一點, 好的編程習慣, 思考能力, 都是在平時工作當中, 一點一滴的積累起來的.
并不是當有人給了你一個好的工作環境后, 想變出來就能立刻變出來的.
老板對不起咱們是另一回事, 但自己是不是能對得起自己, 那就看你自己的想法了
態度決定一切
????????
最近在做一個汽車銷售系統的改善工作,
這個系統已經運行兩年了,
兩年來,
客戶不斷的提出新需求,
系統也在不斷的改來改去。
這次輪到我來改它了。
?
想想
N
年前初學編程的時候,
書上,
網上,
雜志上不斷的在說,
要養成良好的編程習慣。
然后還給出了
N
長的一大篇文章來介紹一些編程規范。
我這個人是很懶的,
大概的看了一下就過去了。
沒有特意的記什么。
好在我這個人也不是特別的懶,
對自己的工作也是很上心。
編程的時候盡可能做到更好。
性能功能能考慮到的都要做到最好。
?
慢慢的也養成了一些編程的習慣,
?
時間長了,
下意識的就去遵守一些模式,模范之類的東西了。
????????
有了這些習慣,
再看這次修改的系統,
真的是生可忍熟不可忍了。
?
這次我也不說什么編程規范了,
我就說說這些編程惡習
。
????????
一,
?
程序沒有注釋
??????
注釋
!!
注釋
!!!
如果只是打印了一個
HELLO WORLD
,
您不注釋那也就算了,
如果是只有一兩百行的小功能類您不注釋,
那我也忍了,
可是
3000
多行一個類的業務邏輯代碼,
您老人家還不注釋
!!!??
你
TM
讓我怎么去改代碼,
?
一點業務邏輯的說明都沒有,
我改代碼的時候,得一邊用
DEBUG
調試,
一邊替他加注釋。
然后才能進行自己的工作。
幾千行的一個類,
?
一行注釋都沒有,
你
TM
就不覺得顏色單調了點嗎
?
??????
二,
?
不遵守基本的編程約定
??????
變量名大小寫混亂,
明明是變量,
非要完全大寫,
要不就大寫開頭。
要不就是方法名全是大寫,
最牛
B
的一個方法是用中文做方法名,
你丫這時候想起打中文來了,
累不累呀。
?????? 還有人用拼音做變量名方法名,就算您英文不好,稍微查一下金山詞霸行不行,現在百度和 GOOGLE 都有翻譯功能,稍微查一下英文,也當是學英語了行不行? 您實在太忙的話,不查也就算了,拼音就拼音吧,好賴也算是中國話的。 可是您就別用拼音簡寫了,英文簡寫還認不出來呢, 您還用拼音的開頭字母當變量名, 那我 TM 上哪兒猜去呀!
?????? 三, 不明就里的代碼
?????? 系統中經常會出現這樣的代碼,尤其是在 controller 里居多:
?????? // some code
?????? If(flag .equals(“submit”)){
?????? model.getInfo();
}else{
?????? model.getInfo();
}
我沒寫錯, if 和 else 調用的方法完全一樣,大家也放心,我仔細的看過調用的代碼,調用的方法里,也沒有根據其它情況來改變他的運行路線。我就不明白為什么要做這個 if 判斷了。擔心會有什么特殊的業務邏輯, 所以也不趕隨便去改他。 猜了半天,感覺最理想的答案是寫代碼的人,擔心以后會有新的邏輯分支, 所以在這里用 if 預留了一個位置, 以后改的時候方便。
數日之后有幸遇見了當初寫這代碼的老兄,問過之后立刻暈倒,原來是這個代碼是參照別的模塊的樣子寫的,別的模塊在這里都有 N 個程序分支,通過 if 來判斷后決定調用哪個 model 里的方法。但他這個模塊很簡單,沒有什么分支,就是調用那一個方法,但他寫代碼時,看別人的模塊在這里都進行 if 判斷了,所以覺得自己也應該判斷一下,于是就出現了上面這樣的代碼。
四, 面向過程式的編程方法
遇到過好幾次 2000 多行的方法,所有業務邏輯,一氣呵成,就用了一個方法搞定。如果是簡單的邏輯也就算了, 可是幾千行的代碼全放在一個方法里,一個類里有無數的重復代碼。 這回到好,重構那本書沒白看, 現在有了實踐的機會了。
難道您自己調試的時候就不覺得麻煩嗎? 我在這里不想討論什么面向過程還是面向對象,也別和我說什么方法多了也不一定就是面向對象的思想。 平時對自己寫的代碼多上點心, 大家都是在這行干了幾年的人了,把代碼寫的漂亮點有什么不好。
五, 代碼縮進混亂
我們公司有規定,改代碼的時候,不許修改原有代碼的格式。 不管他多亂,也不許改。 我不明白這是為什么,也許是檢查代碼的人,要用文件比較工具吧。
但這下苦壞我了, 代碼的格式那叫一個亂。 有頂著行頭寫的, 有向后空了 N 格的,大概是寫代碼的人, 為了方便自己找到正在調試的那段代碼,所以把代碼的縮進變得和其它代碼與眾不同吧。 那您調試完了到是重新排一下版呀, 這真的不累~~, 現在的 IDE 工具都有自動排版代碼的功能, 一個快捷鍵就搞定了,稍微勤快一點行嗎??
最 BT 的一段代碼是縮進居然出了屏幕!!! 你吃飽了撐的呀, 沒事縮那么遠干嗎, 我根據后臺輸出找了半天也沒找到那段代碼在哪兒, 原來是因為縮進的太遠了,不在屏幕范圍之內, 向右拉了半天滾動條才找到。 你丫是不是寫著代碼睡著了? 臉正好砸在 TAB 鍵上。
六, 多余的后臺輸出
好幾個循環嵌套在一起~~~ 也行, 就算是因為業務邏輯需要,沒別的辦法也將就了。 好幾個循環嵌套在一起查數據庫, 咱們最好還是開動一下腦筋, 看看有什么更好的辦法。如果還是沒別的辦法, 那也湊合了。 可這種情況您就別在后臺輸出 SQL 語句啦, 每次一執行程序,成百上千個 SQL 語句在后臺輸出, 查數據庫才用了一兩秒,結果輸出這些 SQL 就用了半分鐘。 您自己就沒覺出程序慢在哪里嗎? 您調試程序的時候輸出一下也就算了, 提交到正式運行的環境時,就麻煩您,勞您大駕~~ 把那些輸出注釋掉吧,實在不行留幾個重要的輸出就行了。 讓這種代碼影響系統性能~~ 也太冤了吧。
七, 打腫臉充胖子
我也不知道這條算不算惡習,也許不算,在有些人眼里還是好事。但也要看具體情況,經常有些人寫代碼不喜歡用 IDE ,只用 EDITPLUS 這類工具。按常理說,初學者都應該盡量用這些編輯器寫代碼,對加深學習印象有好處。也有人說高手不屑于用那些 IDE ,我少見多怪, 這種絕頂高手我沒見過。
但咱平時工作的時候,要的是效率,您不是那種高手就乖乖的用 IDE 吧。經常見到有些人,為查一個方法的調用,搜來搜去的。真正的高手是工作效率最高的人,不是用最簡單工具的人。
//20061019 start
??????? 一些補充:?
可他把時間全耽誤在這上了, 這樣的工作效率, 加班都是活該的
//20061019 end
??? 今天就寫這么多,
大家還遇到過什么樣的編程惡習,歡迎補充。
大家不要總是抱怨什么工資太少,工作量太大。工作效率這玩意兒是要經驗來做基礎,這沒錯,經驗少也沒事。咱平時寫程序的時候多上點心,多對自己的代碼思考一下,多動動腦子。自然就能總結出最好的工作經驗了,工作效率自然就提高了。
也別總是說什么
STRUTS
不好,
HIBERNATE
太慢,不屑去用它。人家的程序能在全世界流行,自然有他的過人之處。多讀讀他的代碼,學習一下他到底好在哪里,如何才能把這些優點應用到自己的代碼上。這才是最重要的。
?也許咱們寫不出什么高超的代碼技巧,寫不出什么華麗的算法,但如果能在一些習慣,細節上做到精益求精,那也對得起自己的代碼了。
??? 寫出上面這些代碼的人,如果你的工資真的很少,那我只能惋惜的說一句:你的工資是可憐了點,但看您寫的這代碼,連這點工資都不應該給你!!
Ruby是一種功能強大的面向對象的腳本語言,她可以使您方便快捷地進行面向對象編程.Ruby使文本處理和系統管理變得簡單,與Perl非常相似.一句話:簡單明了,擴展性強,移植性好.
松本行弘"Matz"(Matsumoto Yukihiro)是Ruby語言的發明人,他從1993年起便開始著手Ruby的研發工作。他一直想發明一種語言,使你既能進行高效開發又能享受編程的快樂。1993年2月24日Ruby誕生了,1995年12月Matz推出了Ruby的第一個版本Ruby 0.95。不久Ruby便憑借其獨特的魅力橫掃日本,相信在不久的將來,Ruby將走向世界。
大體說來,Ruby的安裝方法可分為兩類。
第一種方法,自己編譯源代碼然后開始安裝。在UNIX系列OS(Linux、NetBSD、FreeBSD、Solaris、HP-UX以及Windows中的Cygwin等等)平臺上采用這種方式安裝時,操作方法大同小異且簡便快捷。在Windows環境中,編譯環境的不同會帶來功能上的差異(請參考「不同的Microsoft Windows編譯環境所引起的差異」)。
另一種方法就是使用針對不同平臺開發的各種便利的安裝工具。若您“不想編譯”或者想使用軟件包來安裝Ruby的相關軟件的話,我們推薦您使用這種方法。Linux環境下可以使用RPM或deb,若是FreeBSD的話則可以使用ports/packages等。但是,您必須擁有root權限才能使用軟件包進行安裝。若您想安裝到自己的主目錄里的話,就必須自己編譯源代碼。
Windows上的安裝方法有點特殊。在cygwin、mswin32或mingw這三種不同的編譯環境下,使用的安裝方法也不一樣。若您并不熟悉UNIX的話,我們建議您使用mingw或mswin32。
此外在您編譯源代碼時,您可以使用CVS以獲得最新版的源代碼。
這里我們只介紹了一些典型的安裝方法,實際上,Ruby還可以支持很多其他的平臺。而且Ruby每天都會得到改進,因此本文件中的某些描述可能已經與實際情況有所不同。若您發現我們的描述有誤或與實際情況不符的話,請您指正。同時若您有其他平臺上的相關信息的話,也請您補足。如您所見,我們采用的是專人維護制度。當您想幫我們補充資料的時候,請參考「RWiki的RD」。
(字母順序)
\a 響鈴 \b 退格 \e 逃脫 \f 換頁 \n 換行 \r 回車 | \s 空格 \t Tab \v 垂直表格跳位 \nnn 八進制 \xnn 十六進制? \cx Control-x | \C-x???? Control-x \M-x???? Meta-x \M-\C-x? Meta-Control-x \x?????? x #{code}? code |