Thinking in XiaoQiang
          世人皆有悲哀,只有你不明白
          posts - 56,comments - 150,trackbacks - 0
          ????? ?看到這么多人點擊我的博客,?我很欣慰呀.?
          ?????? 大家可能有不認識我的,我是京城IT業的一個小字輩,?混到今天確實很不容易.?我是從打字員做起的,打字,?復印傳真, 業務咨詢...
          ?????? 剛入行的時候,?先是學了一段VB,后來學過JAVA,?現在正在研究ruby.
          ?????? 經歷過十冬臘月大雪紛飛,也經歷過大雨傾盆.?有一年上班天寒地凍大雪鋪路,學院路上連條狗都沒有.?我在雪地里騎著自行車,吭哧吭哧了一個半小時才到公司.?然后想起來今天是周日不上班.? 這么艱苦的日子也有過. 但是我也堅持到了今天.
          posted @ 2006-11-08 23:03 小強 閱讀(1136) | 評論 (6)編輯 收藏

          轉自: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把光盤燒了

          然后你就可以在別人前面耍酷了。最后,王子和公主過著幸福的生活

          posted @ 2006-10-31 15:58 小強 閱讀(369) | 評論 (0)編輯 收藏
          Ubuntu Live CD 個性化定制全程圖解

          轉載,未測試

          個性化定制最為明顯的好處就在于能夠真正適合自己的需要。想要個性化定制 Ubuntu 的 Live CD 嗎?想要體驗 DIY 的樂趣嗎?本文將以圖解的方式全程為你提供指導與幫助。

          選擇工具

          “工預善其事,必先利其器”。選擇一款合適的定制工具,對于普通用戶來說尤其重要。這兒有兩種 Ubuntu Live CD 的定制工具:UCK 和 Reconstructor。前者可以增刪 Live CD 中的語言包和應用程序,后者能夠提供從 GNOME 桌面到應用軟件的多方面定制功能。本文選擇 Reconstructor 作為 Ubuntu Live CD 的定制工具,讀者朋友也可以自行嘗試 UCK。

          前期準備

          在正式定制之前,應該做好這些方面的準備工作:制作或收集需要用到的定制資源,如主題、壁紙、模塊等等;Ubuntu Live CD 的原始 ISO 映像(Reconstructor 支持 6.06 及 6.10);從 Reconstructor 官方網站下載定制程序;安裝 Reconstructor 的使用依賴,如 squashfs-tools、libbogl-dev、mkisofs 等(詳見 readme.txt 文件)。

          定制過程

          執行程序

          tar xvzj reconstructor-2.0.tar.gz
          cd reconstructor-2.0/
          sudo python reconstructor.py

          Reconstructor 在啟動時會檢查使用依賴,并提示用戶安裝未完成的依賴。接著會進入歡迎頁面。




          創建工作目錄
          Reconstructor 默認會將工作目錄創建于 /home/username/reconstructor,另外分別創建 remaster、root、initrd 三個子目錄。工作目錄僅在首次使用時才有必要創建,如果是再次使用,則無需創建。因為我們是初次使用,所以勾選其中的三個選項。然后,在 Live CD ISO Filename 選擇先前下載好的原始 Ubuntu Live CD ISO 映像文件。




          定制引導屏幕
          引導屏幕這部分可以定制 Live CD Splash 圖像、引導選項文字的顏色、以及 Usplash 圖像。需要注意是,Splash 圖像要求是 pcx 格式,而 Usplash 則是編譯好的 so 文件(對于 Ubuntu 6.06,Reconstructor 支持直接生成)。設置后,點擊“Apply”按鈕以便生效。




          GNOME 桌面的定制
          GNOME 桌面包括登錄屏幕、桌面、主題三部分的定制。其中,在登錄屏幕中可以設置 GDM 主題、Splash 屏幕、背景顏色;桌面部分能夠定制壁紙和字體;在主題中可以選擇 GNOME 桌面所用的主題及圖標。對于這些定制,用戶既可以選擇系統自帶的,也可以使用自己的。從 GNOME LOOK 上可以找到這方面的豐富資源。




          定制 Apt 源
          通過定制 Apt 源,就能夠直接在 Live CD 中使用這些擴展的源,以便安裝需要的應用程序。在你需要使用的源前打勾選擇即可。對于其他的源,可以輸入到下面的文本框中。




          優化啟動及關機過程
          在啟動部分,可以選擇在系統啟動時需要運行的守護進程,如 ppp、laptop-mode 等。同時,Reconstructor 也能夠對關機過程進行優化。




          設置用戶及口令
          切換到 Live CD 選項頁,對在 Live CD 中要用到的用戶、口令及主機名進行設置。




          定制應用程序
          Reconstructor 的模塊功能可以讓用戶按需定制應用程序,如安裝程序、刪除程序等。普通用戶可以使用 Reconstructor 提供的現有模塊:包括圖像處理軟件、生產力軟件、多媒體軟件、網絡軟件、服務器軟件、及其他軟件等。如果現有模塊不能滿足你的要求,那么可以通過輸入安裝或刪除命令來實現對于軟件的定制。




          構建選項
          注意以上每一個部分的定制都需要點擊“Apply”按鈕。現在按“Next”進入構建選項頁。在此設置 Ubuntu Live CD ISO 文件的保存路徑、名稱、架構。如果所有的都沒有問題,那么繼續下一步吧。




          定制結束
          此時,需耐心等候一陣,直到看到 Finished 頁面。




          最后測試

          在 Ubuntu Live CD 定制結束后,先不要忙著刻盤,在虛擬機中測試一下,如果確認沒有問題,那么就燒錄并與朋友分享吧
          posted @ 2006-10-31 15:48 小強 閱讀(1009) | 評論 (0)編輯 收藏
          轉自:http://blog.rubypdf.com/2006/10/20/install-ruby-on-rails-lighttpdsqlite3-and-mongrel-under-ubuntu/

          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

          posted @ 2006-10-30 17:09 小強 閱讀(1058) | 評論 (2)編輯 收藏

          轉自: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

          And now you should have a new, shiny, ready to go Ubuntu Dapper Drake server just waiting for your PHP or Ruby on Rails applications!
          posted @ 2006-10-30 17:07 小強 閱讀(398) | 評論 (0)編輯 收藏
               摘要: Capistrano: Automating Application Deployment Application deployment is one of those things that becomes more and more complicated as the scale of your application increases. With just a single box...  閱讀全文
          posted @ 2006-10-30 14:00 小強 閱讀(913) | 評論 (0)編輯 收藏

          前幾天在我的blogjava上和CSDN上發過一個帖子: 說一說編程惡習.
          http://community.csdn.net/Expert/topic/5091/5091887.xml
          http://www.aygfsteel.com/uiiang/archive/2006/10/16/75502.html

          幾天的時間收到了很多網友的回復.
          我發這個帖子時, 并不是想討論技術問題, 也不是為了抱怨, 只是想以另一種方式, 來提醒一下編程的初學者, 和一些所謂"經驗豐富"的老程序員. 因為我發現傳統的寫一篇編程規范的文檔, 似乎并不能引起大家足夠的重視. 垃圾代碼仍然一出再出.

          我在帖子中所說的問題, 也并不需要太多的技術經驗和深厚的專業知識. 都是一些隨手而來的小問題, 解決這些問題的方法只需要工作時認真負責, 多動動腦子就行了.

          在帖子的回復中, 有幾個回復讓我很在意:
          ==================================================================
          錢給的太少,能對付過去就完了
          社會上什么行業不是這樣,能對付就行了 。

          要改變這種情況, 那還要上邊有改變的想法,改善一下工作環境,等等。 。

          老板們吃的是良心,拉的是思想

          我們那么認真干啥
          =====================================================================

          我對這種說法非常的不贊同, 代碼寫的再差, 老板還是要賺他的錢, 該被剝削還是跑不了.
          可如果把這個當成不認真工作的理由, 那就只能永遠自己吃虧了.
          如果總是這么不認真工作, 不養成良好的工作習慣, 自已思考的習慣, 那就永遠不能進步
          只能當一輩子代碼民工, 一輩子給這種垃圾老板打工.

          要明白一點, 好的編程習慣, 思考能力, 都是在平時工作當中, 一點一滴的積累起來的.
          并不是當有人給了你一個好的工作環境后, 想變出來就能立刻變出來的.

          老板對不起咱們是另一回事, 但自己是不是能對得起自己, 那就看你自己的想法了

          態度決定一切

          posted @ 2006-10-30 10:28 小強 閱讀(2033) | 評論 (10)編輯 收藏

          ???????? 最近在做一個汽車銷售系統的改善工作, 這個系統已經運行兩年了, 兩年來, 客戶不斷的提出新需求, 系統也在不斷的改來改去。 這次輪到我來改它了。 ? 想想 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
          ??????? 一些補充:?

          有些人提到用EDITPLUS的效率其實也很高, 這點我也承認. 但我想說明一下, 我所見到的用EDITPLUS那個人, 根本沒有發揮出editplus應有的效率和功能. 在他的手里editplus只是一個多了顏色區分的記事本. 編譯程序還是用javac , 也不會用ANT, 發布程序還是手工拷貝. 號稱四年經驗的程序員, 剛到公司時用了一天時間重裝好電腦后, 寫了一個打印hello world的程序測試環境. 結果不寫static void main方法, 直接就要用java去運行. 運行不成功還說系統配置有問題, 需要再重裝.? 每次幫他調試程序, 想查一個方法的調用, 一個文件一個文件的搜, 看得我這個急...........???? 我的希望是不管用什么工具, 要讓這個工具在自己的手里發揮出最大的作用來, 如果用editplus非常純熟的話, 我也會很佩服那個人的, 而且會虛心的向他學習使用技巧

          可他把時間全耽誤在這上了, 這樣的工作效率, 加班都是活該的
          //20061019 end



          ??? 今天就寫這么多,
          大家還遇到過什么樣的編程惡習,歡迎補充。

          大家不要總是抱怨什么工資太少,工作量太大。工作效率這玩意兒是要經驗來做基礎,這沒錯,經驗少也沒事。咱平時寫程序的時候多上點心,多對自己的代碼思考一下,多動動腦子。自然就能總結出最好的工作經驗了,工作效率自然就提高了。

          也別總是說什么 STRUTS 不好, HIBERNATE 太慢,不屑去用它。人家的程序能在全世界流行,自然有他的過人之處。多讀讀他的代碼,學習一下他到底好在哪里,如何才能把這些優點應用到自己的代碼上。這才是最重要的。

          ?也許咱們寫不出什么高超的代碼技巧,寫不出什么華麗的算法,但如果能在一些習慣,細節上做到精益求精,那也對得起自己的代碼了。


          ??? 寫出上面這些代碼的人,如果你的工資真的很少,那我只能惋惜的說一句:你的工資是可憐了點,但看您寫的這代碼,連這點工資都不應該給你!!

          posted @ 2006-10-16 23:27 小強 閱讀(5652) | 評論 (45)編輯 收藏
          Ruby是何方神圣?

          Ruby是一種功能強大的面向對象的腳本語言,她可以使您方便快捷地進行面向對象編程.Ruby使文本處理和系統管理變得簡單,與Perl非常相似.一句話:簡單明了,擴展性強,移植性好.

          Ruby的幾大亮點:

          • 語法簡單
          • 垃圾回收
          • 可移植性
          • 動態載入
          • 完全免費
          • 正則表達式

          走向世界的Ruby

          松本行弘"Matz"(Matsumoto Yukihiro)是Ruby語言的發明人,他從1993年起便開始著手Ruby的研發工作。他一直想發明一種語言,使你既能進行高效開發又能享受編程的快樂。1993年2月24日Ruby誕生了,1995年12月Matz推出了Ruby的第一個版本Ruby 0.95。不久Ruby便憑借其獨特的魅力橫掃日本,相信在不久的將來,Ruby將走向世界。

          # 下載

          如何取得Ruby

          • 您可以從各個鏡像站點下載穩定版ruby 1.8.1
          • 您還可以下載下一個穩定版本的預覽版ruby 1.8.2 preview1
          • 我們用tar.gz把當前CVS穩定版快照(Fri Jul 30 04:00:51 JST 2004)保存下來。這是在1.8系列穩定版的基礎上打了補丁的版本。若您需要比最終版本還要穩定的版本的話,就請下載使用。
          • 每天晚上,我們都會用tar.gz把當時的CVS最新版快照(Fri Jul 30 04:00:25 JST 2004)保存下來。因為保存快照時沒有作任何修改,所以可能會有一些問題。請您斟酌使用。
          • 我們使用tar.gz把當前的1.6系列快照(Fri Jul 30 04:01:11 JST 2004)保存下來。該最新版本修正了1.6系列最終版本的所有錯誤。若您暫時無法升級到1.8系列,卻又想修正1.6最終版本的錯誤時,就請使用該版本。
          • 請參考CVS指南來了解使用匿名CVS獲得最新源碼的方法。

          可下載項目

          FTP鏡像站點

          HTTP鏡像站點

          Rsync鏡像站點

          • rsync://sunsite.dk/ftp/mirrors/ruby/ (丹麥)
          • rsync://rsync.idaemons.org/ftp/mirror/ftp.ruby-lang.org/ruby/ (日本)
          • rsync://gd.tuwien.ac.at/languages/ruby/ (澳大利亞)
          • rsync://mirror.cs.mun.ca/ruby/ (加拿大)

          # 下載:文檔

          Ruby 1.6 參考手冊(日語版)
          下載發行版
          下載最新版
          Ruby 1.4 參考手冊(英語版)
          下載
          Ruby 1.4 參考手冊(日語版)
          下載
          Ruby教程(日語版)
          下載
          Ruby用戶指南(日語版)
          下載

          # 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」。

          目錄

          按平臺分類的安裝指南

          (字母順序)

          • Alpha Machine
          • Borland C++ (從源代碼開始)
          • BTRON .超漢字
          • Cygwin (binary)
          • Cygwin (從源代碼開始)
          • Debian GNU/Linux
          • EWS4800
          • FreeBSD
          • HP-UX
          • Kondara MNU/Linux
          • MacOS X
          • mingw32 (binary)
          • mingw32 (從源代碼開始)
          • MS-DOS
          • mswin32 (binary)
          • mswin32 (從源代碼開始)
          • NetBSD
          • OS/2
          • Vine Linux
          • RPM系列Linux平臺
          • UNIX平臺
          • 用CVS保持更新

          Windows用戶提示

          開發環境

          • emacs + ruby-mode
          • xyzzy + ruby-mode
          • irb
          • irbsh
          • ReFe
          • Copal
          • RDE
          • RubyWin
          posted @ 2006-07-24 17:39 小強 閱讀(1147) | 評論 (1)編輯 收藏
          Ruby 基礎

          作者:Ralf Wirdemann, Thomas Baustert
          www.b-simple.de
          2006.2.14

          1.1 在線文檔和書籍

          ??? 語言資料上,如果要找核心和標準API的文檔可以去 www.ruby-lang.org,深步進階我們推薦下面的書籍:

          Dave Thomas: Programming Ruby, Second Edition, Pragmatic Bookshelf, 2005
          Ruby書籍中的標準著作,極具推薦價值。
          Hal Fulton: The Ruby Way, Sams, 2001
          這部書不僅僅有Ruby語言的最新狀況,還提供了一百個案例,很有意思。

          1.2 引言

          ??? Ruby 是一個純粹的面向對象的動態型語言。Ruby 程序不是被編譯成二進制格式(如Java),而是直接由一個解釋器來處理。這門語言在1995年由松本行弘(Matsumoto Yukihiro)發布,除了 Smalltalk、Python 等語言以外,Perl 對它的影響是首當其沖的。
          ??? Ruby 里的一切都是對象,它沒有原始類型(如Java)。除了面對對象,Ruby還提供了垃圾回收、異常、正則表達式,為迭代器和方法作參數的“代碼塊”,運行期的類擴展,線程及更多的東西。Ruby 語言易懂易用,原因在于它簡單、語法干凈。

          1.3 Ruby 程序

          ??? Ruby 程序保存在以 .rb 結尾的文件里。程序內容包含類、模塊、或者只是簡單的Ruby代碼。下面是地球人都知道的 Hello World 程序:

          # hello.rb????????????????????????
          puts "Hello World!"???????????????

          ??? 如果這個代碼是以 hello.rb 的文件名保存的,那么可以這樣調用:

          > ruby hello.rb???????????????????
          > Hello World!????????????????????

          ??? 在Windows下允許您以文件關聯的方式在IE中執行;在 Linux/Unix 下您可按照自已的操作系統情況使用 Shebang行:

          #!/usr/local/bin/ruby?????????????
          puts "Hello World!"???????????????
          ??????????????????????????????????
          #!/usr/bin/env ruby???????????????
          puts "Hello World!"???????????????

          ??? 隨后直接執行這個程序:

          > chmod 744 hello.rb??????????????
          > ./hello.rb??????????????????????

          ??? Ruby 的語句可以以分號結尾,但不是必須。 Ruby 是一個面向行的語言,也就是說,一個語句不需要以分號結尾,解釋器能夠明白下一行是進一步的語句。下面前幾個語句的輸出相同,最后一個是錯誤的:

          puts "Hello World!";??????????????

          puts "Hello World!"???????????????
          puts "Hello " \???????????????????
          ?? "World!";??????????????????????
          puts "Hello" +????????????????????
          ?? "World!";??????????????????????
          puts "Hello"?? # 語句至此結束?????
          ?? + "World!"; # 無法被解釋的新語句


          ??? 多個語句可以用分號隔開寫到一行里面,這不是很地道的寫法,因為會影響閱讀的流暢。

          # 可行,但不漂亮:????????????????
          a = 42; b = 15; c = a + b????????

          #這樣比較好:?????????????????????
          a = 42???????????????????????????
          b = 15???????????????????????????
          c = a + b????????????????????????

          ??? Ruby 以兩個空格作為縮進的方式(不用Tab鍵),這是個推薦習慣并且應該盡可能地得到遵循:

          # 非常棒的縮進???????????????????
          while line = file.readline???????
          ? if !comment_line(line)?????????
          ??? lines.add(line)??????????????
          ? end????????????????????????????
          end??????????????????????????????

          # oh~,oh~,您這是和外星人學的吧?
          while line = file.readline???????
          ??? if !comment_line(line)???????
          ??? ??? lines.add(line)??????????
          ??? end??????????????????????????
          end??????????????????????????????

          ??? Ruby 提供了全系列的標準類型,如數字、字符串、正則表達式、數組、哈希(Hash),等等。所有這些元素通過類和模塊的方式以備使用,無需在程序(文件)中綁定,它們來自于核心庫并在整個程序中自動生效。
          ??? 另外一些是以其它類和模塊構成系列的標準庫方式以備使用的,例如 Date、Logger、Test::Unit 等等。一旦要自行開發就必須在每個程序里通過關鍵字 require 來明確綁定。于是在 require 后加上或有或無結尾(.rb)的文件名。

          require "date"? # date.rb 用到 Date類??????????????
          require "my_class" # my_class.rb 用到MyClass類?????
          require "my_module" # my_module.rb 用到 MyModule模塊

          ??? 對此處文件名的處理不是按絕對路徑,Ruby 會在所有的標準目錄下尋找這個文件,它們被包含在全局變量$: 里面,您可以在命令行用 ruby -e "puts $:" 或其它方式得到這些路徑。一個裝載了類和模塊的程序里的所有名字都可以通過全局變量 $" 輸出。

          1.4 注釋

          ??? 在 Ruby 中注釋行是以#號開始的,注釋可出現在句首或句尾。

          # 下面這行是被注釋掉的???????????
          # a = b - c??????????????????????
          a = b + c # 注釋到行尾???????????

          ??? 一個注釋塊開始于 =begin 結束于 =end,這幾個關鍵字必須在行首,不能有空格。

          =begin???????????????????????????
          ? def my_method??????????????????
          ??? ...??????????????????????????
          ? end????????????????????????????
          =end?????????????????????????????

          1.5 數字

          ??? Ruby支持整數和浮點數。Ruby 里面沒有原始類型,都是數字對象。整數從負2的30次冪到正2的30次冪 (在64位機器上從負2的62次冪到正2的62次冪) 被定義成FixNum類型 超出此范圍的整數被定義成BigNum類型,類型的劃歸與轉換是自動完成的,一個數字的長度最終由主存來判定。

          value = 42 # FixNum???????????????????????????????
          big_value = 123456789012345678901234567890 # BigNum

          ??? 數字可以用16進制、8進制或者2進制的數字系統來表示:

          # 42?????????????????????????????
          0x2A?????????????????????????????
          0052?????????????????????????????
          b101010??????????????????????????

          ??? 有相應的數學運算符以供使用,數字的增減用運算符 += 與 -= 來實現, 出自 C 和 Java 的 ++ 與 -- 在 Ruby 里是沒有的。

          a = 2????????????????????????????
          b = 3????????????????????????????
          c = a + b??? # 5?????????????????
          c = a - b??? # -1????????????????
          c = a / b??? # 0?????????????????
          c = 2.0 / b? # 0.666666666666667?
          c = a * b??? # 6?????????????????
          c = a**b???? # 2*2*2 = 8?????????
          a += 1?????? # a = 3?????????????
          a -= 1?????? # a = 2?????????????
          a++????????? # Ruby里非法????????

          ??? FixNum與BigNum 繼承于基類 Integer,以下是可用的函數,是與塊(見1.14節)結合的:

          1.upto(3) { [i] puts i }??? # 1 2 3?????????????
          3.downto(3) { [i] puts i }? # 3 2 1?????????????
          0.step(10,2) { [i] puts i } # 0 2 4 6 8 10??????
          3.times { puts *42* }?????? # 42 42 42??????????

          ??? 浮點數在 Ruby 里是用 Float 類來表示的。像其它語言一樣,Ruby 里的浮點也有卷折誤差。為了計算精確(如 合值),建議使用 Ruby 標準庫里的 BigDecimal 類,相對于 Float,這個類描述了更為豐富的浮點數并且避開了卷折誤差。

          1.6 字符串
          ?
          ??? 在 Ruby 里,字符串被放置在兩個單引號或雙引號之間。引號常會出現在另一個引號里面:
          ?
          str = "Hello"????????? # Hello
          str = "Hello 'Thomas'" # Hello 'Thomas'
          str = 'Hello'????????? # Hello
          str = 'Hello "Thomas"' # Hello "Thomas"
          ?
          ??? 字符串可以通過 %q 和 %Q 產生,這是為了避免當一個字符串內出現過多的引號或其它符號時會出現這樣或那樣的錯誤。%q 產生一個被包含在單引號中的字符串,%Q 產生一個被包含在雙引號中的字符串,文本以分隔符為界來限定,分隔符可以是除字母與數字以外的所有符號。

          %q{a string}
          %q(a string)
          %Q$a string$
          ?
          ??? %Q 可以替換 #{Ausdruck}這樣的表達式,而%q不能:
          ?
          表格1.1 字符串中帶雙引號的逃脫符
          \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


          puts %q{result: #{42.0/3} EUR}???? # result: #{42.0/3} EUR
          puts %Q{result: #{42.0/3} EUR}???? # result: 14.0 EUR
          ?
          ??? 在花括號、圓括號、角括號的情況下字符串是括號括起來的部分,其它則是到那個符號再次出現為止。字符串也可多行顯示,Ruby 在此并不清除起始空格符。
          ?
          s = %Q@ein String über mehrere?
          ?Zeile mit "" und '' und durch
          ? einen Klammeraffen begrenzt@
          puts s
          =>
          ein String über mehrere?
          ?Zeile mit "" und '' und durch
          ? einen Klammeraffen begrenzt
          puts s.inspect
          =>
          "ein String \374ber mehrere\n Zeile mit \"\" und '' ...
          ...und durch \n? einen Klammeraffen begrenzt"
          ?
          ???? 一個表達式的結果可以通過#{Ausdruck}插入到一個字符串中,然而這只有在雙引號之間有效。
          ?
          "Ergebnis #{42*7/100} %" # Ergebnis?????? #{2.94} %
          "Die Anwort ist: #{answer(x)}"??????????? # Die Anwort ist: 42
          ?
          ??? 如C與Java所慣用的,特殊符號由斜杠逃脫,表1.1列舉了所有的特殊符號:
          ?
          "Ein Slash: \\"????????????? # Ein Slash: \
          "Er rief: \"Ralf!\""???????? # Er rief: "Ralf!"
          'War\'s okey?'?????????????? # War\'s okey?
          "Neue\nZeile"??????????????? # Neue
          ???????????????????????????? #Zeile
          'Neue\nZeile'??????????????? # Neue\nZeile
          ?
          ??? 兩個字符串的內容可以用 == 方法來比較,與之相對照的是 equal? ,它用來判斷是否是同一個字符串實例(參看1.15.5節):
          ?
          s1 = "Thomas"
          s2 = "Thomas"
          s3 = "Ralf"
          s1 == s2 # => true
          s1 == s3 # => false
          s1.equal? s1 => true
          s1.equal? s2 => false
          s1.equal? s3 => false
          ?
          ??? 字符串可以用+和<<這兩個方法連接。使用 * 可實現多重累加。
          ?
          "Thomas" + "/Ralf"??? # Thomas/Ralf
          s = "Thomas"?
          s << " und Ralf"????? # Thomas und Ralf
          "Ralf " * 2?????????? # Ralf Ralf
          ?
          ?
          ??? 字符串類提供了大量的方法,讓你隨心所欲,下面是幾個例子;
          ?
          s = "Thomas und Ralf"
          s[3]????????????????? # 109
          s[3].chr????????????? # m
          s[7,3]??????????????? # und
          s[0..6]?????????????? # Thomas
          ?
          "Thomas und Ralf".delete("a")???????? # Thoms und Rlf
          "Thomas und Ralf".delete("aou")?????? # Thms nd Rlf

          "Thomas und Ralf".gsub("und", "oder") # Thomas oder Ralf
          "Thomas und Ralf".gsub(/[aou]/, "$")? # Th$m$s $nd R$lf
          ?
          "Thomas und Ralf".index('a')????????? # 4
          "Thomas und Ralf".index('a',5)??????? # 12
          ?
          "Thomas und Ralf".split?????????????? # ["Thomas", "und", "Ralf"]
          ?
          ??? 為字符串轉換成整數和浮點數提供兩種途徑,安全一些的是使用核心方法 Integer 和 Float, 它們在出錯的時候拋出異常; 另一種是 String 類的方法 to_i 和 to_f,限制較少 。

          "42".to_i??????????? # => 42
          nil.to_i???????????? # => 0
          "42x".to_i?????????? # => 42
          Integer("42")??????? # => 42
          Integer(nil)???????? # => 0
          Integer("42x")?????? # => 參數錯誤
          posted @ 2006-07-24 17:36 小強 閱讀(1780) | 評論 (0)編輯 收藏
          僅列出標題
          共6頁: 上一頁 1 2 3 4 5 6 下一頁 
          主站蜘蛛池模板: 玉溪市| 县级市| 莱西市| 阿勒泰市| 普定县| 南阳市| 鸡泽县| 岳阳市| 万源市| 蒙自县| 油尖旺区| 宽甸| 合水县| 富源县| 江津市| 叙永县| 青神县| 新泰市| 赤壁市| 内乡县| 玉田县| 兴仁县| 茂名市| 横峰县| 昌图县| 静宁县| 荔浦县| 泰顺县| 巨鹿县| 广昌县| 隆子县| 安新县| 仙居县| 八宿县| 河西区| 克什克腾旗| 丰台区| 广平县| 枣强县| 扎兰屯市| 绍兴市|