介紹一下還不錯的網站叫做 About me

個人覺得這個網域申請的意義就是在介紹自己唷~推薦推薦
歡迎大家去註冊看看~


連結網址如下:
http://about.me/


這是我個人低唷~
Check out my about.me profile!

How to program MySQL C API and XCode for OSX

1. Download "MySQL Community Server"
    http://www.mysql.com/downloads/mysql/
2. Install mysql-5.1.53-osx10.6-x86_64.pkg and MySQLStartupItem.pkg
3. After the installation, you can start up MySQL by running the following
    commands in a terminal window. You must have administrator privileges
    to perform this task.

  • If you have installed the Startup Item, use this command:
    shell> sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
    (ENTER YOUR PASSWORD, IF NECESSARY)
    (PRESS CONTROL-D OR ENTER "EXIT" TO EXIT THE SHELL)

  • If you don't use the Startup Item, enter the following command sequence:
      shell> cd /usr/local/mysql
      shell> sudo ./bin/mysqld_safe
      (ENTER YOUR PASSWORD, IF NECESSARY)
      (PRESS CONTROL-Z)
      shell> bg
      (PRESS CONTROL-D OR ENTER "EXIT" TO EXIT THE SHELL)

4. You should be able to connect to the MySQL server, for example, by
    running `/usr/local/mysql/bin/mysql'.

 
 






iDefrag | Mac OS X用的磁碟重整與最佳化工具。

iDefrag | Mac OS X用的磁碟重整與最佳化工具。

Coriolis Systems | US$29.95
Mac OS X用的磁碟重整工具,能消除檔案與磁碟碎裂的情形,並對磁碟最佳化,以增進系統安定性與效能。


❏ Download iDefrag

運用基因演算美化聲音


嫌自己的聲音不夠美妙?說起話來沒有男子氣概?還是害怕自己演講時不夠威嚴或感性?現在科學家發明出一種新的音訊處理程式,讓您可以隨心所欲的改變自己發出的聲音。
當人對著麥克風說話時,這套系統會把輸入的聲音轉換為設定的語調。然而這套系統的語調並不是事先在出廠時設定好,而是透過基因演算法來訓練。
首先,系統會隨機產生一些"聲音基因",每一個的語調、音量和速度各有不同,使用者可以在聆聽修改的結果後,對每一個基因體作評分,然後再經由基因交換、突變等過程產生下一代的基因。
這套由東京 Hosei 大學 Yuji Sato 所發表的系統,目前還不能將輸入的聲音即時作轉換,Sato 表示他將會在這方面繼續努力。

基因演化看SARS病毒走向


SARS 已經在全球引起大家的密切重視,在缺乏有效治療方法、疫苗的狀況下,引起 SARS 的冠狀病毒究竟會往哪個方向發展,關係到民眾對於未來的信心,當然,也衝擊到整個社會的人際關係網絡。
適逢看到中山醫院董事長寫的社論,其中提到「站在生物有尋求生命延續的基本法則,我們可以相信SARS病毒並無殺死其宿主的本意」,也因此,可以合理的推論 SARS 在經過一段時間的演化之後,毒性勢必會大大的降低,朝向不殺死宿主的方向來發展。
只是這樣的假設建立在突變率、複製頻率以及環境選擇三個前題下。我們可以從基因演算法的經驗來推論這三個變因,各自扮演什麼樣的角色,以及人類的對策會造成什麼樣的影響。

首先是突變率。突變在基因演化之中是一個無特定偏好的改變,它並不代表會朝向某個表現型改變,而只是基因型的變化。舉例來說,假如基因型原本是「1000」,而突變時會將其中任何一個 bit 由 0 變 1 或是由 1 變 0,那在這四個 bits 上面發生突變的機會是一模一樣的。至於突變之後的個體是否更適合生存,則要由環境來決定。突變率越高,個體越有機會快速找到更適合生存的組合;但過高的突變率也會造成已經穩定的個體再陷入不穩定或不適合生存的基因組合。
複製頻率則關係到新一代的個體會多快產生,理論上複製頻率越高,就越有機會產生突變,因為每一次複製的過程中都有同樣的突變機率;當然,若是對於有交配行為的個體,因為交配產生的基因互換也會更為頻繁。因此,複製頻率越高,就可以減少達到平衡所需要的時間。這也是用電腦來進行基因演算法最重要的想法。
而環境選擇決定個體的走向;究竟新一代的毒性要強一點,來抵抗免疫系統,還是傳播性高一點,但毒性弱一點,都取決於環境。如果我們不斷提高大家的免疫系統能力,那也有可能會造成病毒朝向更強的方向走,形成「生物軍備競賽」;同時間,若是能夠製造不利於毒性高個體發展的環境,那麼新一代的弱毒性病毒就比較有可能會取得優勢地位。
只不過,在考慮到努力救活每一個患者的狀況下,似乎不太可能任由病毒自行演化,其實這也是實務上的困難之處。只是不知道,將來的生物資訊發展更為進步之時,有沒有可能在實驗室之中加速進行這樣的病毒演化,而把最後的弱毒性病毒發展出來,再放到人類身上,以排擠較毒的病毒發展空間?或許這也是一種走向。
註一:所謂的「生物軍備競賽」(Biological Arms Race),意指兩種物種由於在演化環境中具有對立關係,造成兩種物種都越演化越強;例如,羚羊跑得越快,就越不容易被獵豹吃掉,因此羚羊朝向跑得快演化,同一時間獵豹也會有差不多程度的演化,因為不能跟上新品種的羚羊的有較高機會會餓死;而第二代的獵豹又造成羚羊必須再演化,留下跑得更快的品種。如此一來一往之間,就如同人類世界的軍備競賽一樣,你有彈道飛彈,我就發展反彈道飛彈;然後你又發展反反彈道飛彈,我就發展反反反彈道飛彈….長此以往,兩國在飛彈的競爭雖然仍維持均勢,卻會形成大幅度的成長。

基因演算法概論


基因演算法(一)
如果說上帝鉅細彌遺的創造了這個世界,那麼當這個上帝還真的得無所不能。幸好達爾文為我們指出了演化的力量,靠著演化,即使沒有上帝,這個世界還是有可能發展出來的; 如果真的有上帝,那麼我相信祂是寫下『基因演算法』的傑出程式設計師。
在這個網站上已經談過許多基因演算法的應用,但卻還沒為它寫一篇詳細的介紹。究竟基因演算法是什麼呢?
基因演算法(Genetic Algorithm)其實是取法大自然的一種演算法,藉著對於演化現象的觀察,John H. Holland 認為可以透過把問題轉為基因型(Genotype),利用競爭-生存以及基因交換-突變,尋求出問題的正確解答。
透過競爭-生存,擁有好基因的品種會有較高的機會生存到下一代,而與生存較無關的基因則會隨著時間逐漸被淘汰,。在理想的狀態下,競爭-生存會迫使不具優勢的品種逐漸消失。
然而單單擁有一種好基因是不夠的;透過基因的交配,不同的個體可以把它們的好基因組合起來,變成更具優勢的下一代;而若是組合出來的後代不理想,也只會加速被淘汰。
但交換基因也不能改變現有的基因狀態,還要再配合突變,才能夠產生革命性的改變,進而對族群進步有突破性的發展。
因此,"生存-競爭"、"交配"、"突變"就是整個基因演算法,也可以說是演化的中心思想。
下一篇將介紹基因演算法的例子,利用基因演算法來演化出符合要求的字串。

基因演算法(二)
距離上次介紹基因演算法的第一篇已經好久了,重新回顧才發現並沒有在技巧上面說明得很清楚,所以打算再繼續這個主題,把基因演算法做一個完整的介紹…
如果您不知道基因演算法是什麼,建議您可以先參考上面說明
先前提到基因演算法的基本概念,但是要怎麼寫程式呢?首先我們先來探討基因演算法的幾個基本元素。
第一個是基因;沒有基因來當作媒介,我們沒有辦法進行基因演算法,但是要怎麼表現基因呢?以電腦世界而言,最常見的就是 0 和 1 的組合形成的"Bit String",例如:0010 就是一個四個位元的 bit string。用四個位元就可以表現出十六種基因組合,而不同的基因組合又可以對照到不同的"表現型"上,例如第一個 bit 表示顏色、第二個 bit 表示長度,第三個 bit 表示色調等等。
除了固定長度的基因之外,也可以採用不定長度的基因;例如,假如要用英文字測試是否能夠演化出一本莎士比亞全集,就可以採用不定長度的基因,讓莎士比亞全集由最早的英文單字逐漸長到厚厚數本書這麼大。
利用適合的基因表達方式,才能夠讓問題更容易利用演化的方式找到解答。如果問題本身不適合用固定長度來表達,就可以考慮用不定長度的基因;相對的,如果問題本身不需要不定長度就可以解決,用不定長度基因型反而會造成程式更慢找到解答。
第二個是適應函式(fitness function);適應函式是用來測試個體在現在的環境中的適應程度,一般而言,適應得越好得分越高,也就會給它更高的機會傳遞它的基因給下一代。舉例來說,如果要程式要找出基因中全都是 1 沒有 0 的個體,那麼適應函式就可以計算現在個體的基因中有幾個 1。
適應函式其實就是所謂的"環境";適應函式不但要考慮個體相對於整體的表現,還要考慮在不同時期給予個體不同的壓力。例如,程式不太可能在一開始就亂數產生出英文中合文法的句子,這時候就要比較寬容一點給分給鬆一點;等到後期程式已經抓到語法的訣竅,那麼有一個拼字錯誤,或許就會被扣不少分數。
第三個是選擇函式(selection function);一般來說,選擇函式都會依照適應函式的分數來作為判斷依據,但選擇有很多方式,最簡單的就是前面一半就晉級,另外也有依照得分多寡加權計算機率的,甚至於保送到下一代的方式。選擇函式做的就是"天擇"的動作。不同的選擇函式各有優缺點,也有其道理所在,請容以後再詳述。
第四個是交配方式(crossover);由選擇函式中選出的兩個個體的基因要如何重組?在固定的點切開一人一份,還是可以在任意點切開來組合?對不定長度的基因,是用模組/區塊的方式重組交配還是同樣在固定點切開?這都要依照目標的不同而調整。
最後是突變方式(mutation);個體在什麼樣的狀況下會突變?突變的地方又是在哪裡?突變之後會變成什麼值?這些都是可以考慮的。
以上五個是基因演算法程式設計中,最重要的幾個架構,至於每個架構有什麼樣的考量,之後再專文說明。


基因演算法-資料庫搜尋最佳化


今天在看 PostgreSQL 的文件時,發現有個章節在講運用基因演算法(Genetic Algorithms) 來最佳化資料庫的查詢方法(Query Plan),就來介紹一下 PostgreSQL 是如何應用的。
所謂的 Query Plan(查詢方法),是指資料庫管理程式如何由現存的 Table 中,做出使用者想要的資料。Query Plan中最難以處理的是 Join 這個動作。Join 這個動作,簡而言之就是把兩個相關的 Table 合成一張大的 Table;例如我們有一個 Table 記錄 "人名-居住城市",另一個"人名-喜好",今天如果我們要找出"住台北、又喜歡寫 Blog"的人,就可以利用 Join 這個指令,以人名當作索引值,合成一張同時具有我們所需要資料的 Table。
Join 有很多種方法可以做到,最差的狀況就是把所有的可能性都列出來,再刪掉不正確的。舉例來說,住址 Table 有一千筆,喜好資料也有一千筆,那麼就先產生一百萬筆的表格,再一一刪去;相對的,如果我們知道人名都沒有重覆、居住城市表格中,同一個人也只會有一筆資料、每個人也只有一個喜好,那麼甚至可能幾千筆就做出來了。
但並不是每一個 Query Plan 都是如此的顯而易見,當需要比對的 Table 越來越多,到底是先 Join 哪一個 Table、先 Join 哪兩個 Join 完的結果,會變成一個需要把全部的可能性都列出來,才知道哪個最好的問題,我們稱這種解法叫做"窮盡搜"(Exhaustiive Search),意思就是得把所有的組合都找出來才行。
更慘的是 Query Plan 的數量又隨著 Table 的增加而大幅增加,當需要 Join 的 Table 由兩個變三個、四個甚至到十幾個時, Query Plan 的總量就像 1*2*3*4 這樣呈指數成長,到最後要找出所有的可能解答本身所花的時間,搞不好都比資料庫查詢時間來得長了。
在德國的 University of Mining and Technology 自動控制學院設計了一個電力控制系統,用 PostgreSQL 來當作決策系統的資料庫,但是因為決策系統需要運用大量的 Join 來進行推理的運算,為了兼顧效率,他們把基因演算法引入資料庫的設計之中,用來快速產生有效率的 Query Plan。
關於基因演算法的基本概念在此略過,請參考本站相關文章
Query Plan 最佳化的作法和著名的 Traveling Salesman Problem(TSP) 問題很類似,先將可能的解法變成數字的字串,例如 4-1-3-2 就表示先讓 Table 4 和 Table 1 做 Join,再和 Table 3、2 做 Join。
演化時採用穩態演化,也就是每次只把表現最差的一個 Plan 淘汰掉;而子代的產生則是運用 "edge recombination crossover[註二]",而突變的機制在這裡並不使用。
運用基因演算法,資料庫可以在合理的時間中找出有效的 Query Plan來進行 Join 的動作,然而除了找出最好的 Query Plan 之外,電腦的的Computation Time也是一個很重要的因素,不同的參數對於系統也會有不同的影響。
從這個例子可以看到基因演算法所運用的場合,還是脫離不開"在合理的時間"、"複雜度高的狀況下"、"找到合理可接受的解法"的特色。
註一:PostgreSQL 是一個 GPL 的資料庫,最早是由 Berkeley 所發展的,如今和 MySQL 同為網路上最受歡迎的 GPL 資料庫軟體,官方網站在 http://www.postgresql.org

註二:關於 edge recombination crossover 的說明,請參考這裡

基因演算法-教電腦走路


現今充斥於電影或是電玩中的人物或角色,大多都無法避免要走得"像人";當傳統的方法繁瑣而缺乏彈性,基因演算法再一次為動畫製片指出一條簡單易用的路…。

傳統上,要做出動畫中的人物走路的畫面,通常都需要仔細描述每個畫面怎麼走、或是把真人的動作拍攝下來再輸入進去。然而這種做法太繁瑣也缺乏彈性,所以 Torsten Reil 決定運用基因演算法,來教導他的人物走路。
首先必須建立環境;把重力和人物的肌肉結構都做好關連之後,每一個角色有七百組參數可以調整。他透過類神經網路來控制肌肉的運動,但是由於系統實在太複雜而不可能透過人來調整,所以這時就可以導入基因演算法來訓練。
由於系統中有重力等條件,所以系統評分的方法就採用人物走的步數來評分;走越多步的就越好,直到它跌倒為止。剛開始系統中的人物大都走不了一步,但至少有些會比其他晚一些倒下,這些表現比較好的個體會被複製二十份,再做一些細微的突變放到下一代。同時系統也會再產生八十個新的個體加入賽局。
但是由於評分標準是採用走的步數,所以有些角色就會發展出奇怪的走法,例如仆伏前進或是翻筋斗之類的,所以他再進一步把遊戲規則加入一條,就是重心不能低於某個高度。
經過二十回合,系統已經能夠產生走得非常順暢的角色了;我們不需要知道它內部的類神經網路怎麼排列,但可以確定的是演化的力量再一次的快速替我們找到一個解答。
《本文摘譯自:Darwin in a Box》
相關網站:
Active Character Technology (有 Demo 短片)
Endorphin, 可以自動產生出動畫人物動作的軟體 (Demo)

[轉貼] arg & arg max 差異

最近在讀paper時看到了這個數學式子 y* = argmax f(t),想當初數學這麼爛的我一定不懂argmax是什麼,找了好一會兒才找到,記錄一下避免忘記 :)

  • y = f(t) 是一般常見的函式,代表給定一個t值,丟到f函式中會回傳一個值給y。
  • y = max f(t) 代表:y 是f(t)函式所有的值中最大的output。
  • y = arg max f(t) 代表:y 是f(t)函式中,會產生最大output的那個參數t。

看起來很模糊,舉個例子應該比較好理解:

假設有一個函式 f(t),t 的可能範圍是 {0,1,2},f(t=0) = 10 ; f(t=1) = 20 ; f(t=2) = 7,那分別對應的y如下:

  • y = max f(t)  = 20
  • y* = arg max f(t) = 1

[轉載] How to come up with new research ideas?


如何找研究題目?
(How to come up with new research ideas?)

Jia-Bin Huang 
jbhuang0604@gmail.com

Latest update: March 31, 2010






  If I have seen farther than others, it is because I was standing on the shoulders of giants - Isaac Newton




  一年前曾想過要整理一些自己在剛接觸研究時的心得,剛好無意間看到Prof. Ramesh Raskar的演講稿How to come up with new Ideas,就藉由這個機會分享一下找研究題目的心得,內容主要來自此演講稿和自己的一些經驗,由於我比較熟悉的領域在於電腦視覺/影像處理/機器學習這些領域,所以列舉的例子也許會比較偏頗,不過我想其他相關領域應該也可以從中得到一些想法,若因此而得到碩士或博士論文的靈感,那麼也算是功德一件。
  的確,研究(Research=Re-search)就是一個不斷再尋找的過程,不論是那個領域,前人的努力都是非常值得參考的,偷一個人的點子便是抄襲,而同時偷很多人的點子就變成研究了。不過問題是Google Scholar打開關鍵字一輸入,便出現一大堆看也看不完的論文,要從何參考起呢?在研究的過程中,最重要也是最困難的一環就是找到適當的研究題目,通常了解我們必須處理的問題之後,儘管已經花了很多時間整理過去文獻在相同問題上的努力,有時仍然會不曉得如何下手,我們要問的問題即是


" After X, what is neXt?" 




根據經驗,大致上有六類不同的新題目的可能:














一、尋找不一樣的維度         neXt = X^d
二、結合兩種以上不同的主題      neXt = X + Y
三、重新思考問題方向         neXt = ~X
四、使用有效的工具,尋找適合的問題  neXt = T(X), T: X->Y
五、尋找有效的工具,解決眼前的問題  neXt = M(Y), M: Y->X
六、加上適合的形容詞         neXt = Adj + X

相信看到這邊一定會覺得一頭霧水,接下來就分別一一介紹這六類新的研究題目,並且用電腦視覺/影像處理這個領域中許多例子來解釋。


接下來所列舉的例子絕大部分都是發表在電腦視覺/圖學/機器學習的重要會議和期刊上,這裡先列舉其縮寫


ICCV        IEEE International Conference on Computer Vision
ECCV      European Conference on Computer Vision
CVPR         IEEE Conference on Computer Vision and Pattern Recognition
PAMI        IEEE Transactions on Pattern Analysis and Machine Intelligence
IJCV      International Journal of Computer Vision
NIPS         Advances in Neural Information Processing Systems
SIGGRAPH   ACM SIGGRAPH




P.S. 如果對於文中有任何建議(e.g., 舉例不當或是有適合的研究案例),歡迎來信或是在部落格中討論。當然有專家願意提供其他領域如何找研究題目的方法就更好了 =)

攝影武功秘訣

觀景去雜物,拍前撿垃圾
人物增趣味,畫龍要點睛
前景位關鍵,三分九宮格
有雲天要多,無雲地為主
長曝避車燈,岩石要潑濕
反差如過大,黑卡效果佳
偏光去反光,漸變平反差
對焦對主題,水平要抓平
見山尋側光,見水拍倒影
溪流宜長曝,綿綿又密密
拍花側逆光,慢門顯動感
小光圈景深,全開糊背景
廣角重主題,長焦壓縮景
負片宜稍加,正片可略減
長曝勤測光,上下包幾張
風景測中灰,白加黑要減
腳架要鎖緊,預鎖反光鏡
取下保護鏡,裝上遮光罩
變焦易耀光,盡量用定焦
大底加慢片,腳架快門線
天雨帶相機,傍晚等放晴
奇景重氣氛,雨霧不放過
正午沒好光,好光在晨昏
大景靠勤跑,睡前看氣象

~~~~~~~~~~~~~~~~~~~~~~
大景靠勤跑,睡前看氣象。
---拍攝宏偉的風景只能靠多跑幾次才有機會拍到好照片,拍照前一晚記得看氣象

正午沒好光,好光在晨昏。
---由於正中午的光向是頂光,對於傳統的攝影愛好者而言是不受喜好的光線角度;較好的光線角度通常出現在早晨或黃昏

奇景重氣氛,雨霧不放過。
---拍攝奇特的風景最重要的就是氣氛,就算是下大雨起大霧也照拍就對了

天雨帶相機,傍晚等放晴。
---下雨的時候也別忘了帶相機,傍晚如果放晴的話就會出大景囉

大底加慢片,腳架快門線。
---片幅有多大用多大,ISO要多低有多低,腳架要多粗就多粗,快門線記得帶

變焦易耀光,儘量用定焦。
---當年光學技術還不夠進步,用變焦鏡比較容易產生耀光,因此當時習慣使用較不易產生耀光的定焦鏡

取下保護鏡,裝上遮光罩。
---鏡頭前那片B+W保護鏡拍照前記得拿下來,然後要裝遮光罩

腳架要鎖緊,預鎖反光鏡。
---腳架的關節還有雲台記得鎖緊,還有開啟反光鏡預鎖功能

風景測中灰,白加黑要減。
---拍攝風景時要測量中灰18%亮度的地方,畫面中白色面積較多的話要增加EV值,黑色面積較多則要減少EV值

長曝勤測光,上下包幾張。
---長時間曝光時多側幾次光計算出平均值後,再根據這個平均值的上下做包圍曝光,較不易失敗

負片宜稍加,正片可略減。
---使用負片拍攝時可測光稍微增加EV值,正片則相反

廣角重主題,長焦壓縮景。
---使用廣角鏡時要注意主題是否顯眼,使用長焦段鏡頭時背景的透視效果會受到壓縮

小光圈景深,全開糊背景。
---光圈小景深深,光圈大景深淺

拍花側逆光,慢門顯動感。
---拍攝花卉時光源位置如果是側光或是逆光或是以上皆是能夠勾勒出花的邊緣輪廓,使用慢速快門拍攝則能夠增加影像的動感

溪流宜長曝,綿綿又密密。
---拍攝溪流時的曝光如果較長的話能夠拍攝出讓溪流有如絲絹一樣有綿密感

見山尋側光,見水拍倒影。
拍攝山岳時光線環境側光最佳,看到水的話不要管其他東西拍倒影就對了

對焦對主題,水平要抓平。
對焦要對在主題上,按下快門前要注意水平透視

偏光去反光,漸變平反差。
CPL可以去除物體或是反光面的反光,漸層減光鏡可以降低亮部與暗部的反差

反差如過大,黑卡效果佳。
如果反差太大的話就搖黑卡吧

長曝避車燈,岩石要潑濕。
長時間曝光時要避免鏡頭被車燈照到影響曝光,拍攝岩石時老一輩的老師前輩比較喜歡把石頭潑溼

有雲天要多,無雲地為主。
拍攝風景時如果有雲的話天空可以佔較大的面積,如果沒有雲的話則是以地面為主

前景位關鍵,三分九宮格。
構圖時前景的位置很關鍵,死守著井字構圖法就對啦

人物增趣味,畫龍要點睛。
在風景中如果有人物能夠增加影像的趣味,並且達到畫龍點睛的效果

觀景去雜物,拍前撿垃圾。
在觀察景物時要把不必要的東西去除,例如雜枝雜葉要剪掉,橋出一個好景色就對啦。
然後拍照之前要把垃圾撿起來以免垃圾入鏡

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
觀景入雜物,拍出堆垃圾
拍人我專業,對焦在乳溝
錢井是關鍵,三疊換四盒
多雲不出門,無雲會中暑
長曝開閃燈,閣下手犯賤
反差如過大,黑卡隨便刷
偏光去反光,看起來沒差
拍照沒主題,上網被砲轟
拍山買廣角,拍水購腳架
溪流玩長曝,晃到都模糊
拍花開微距,錄影更方便
大光圈傷財,沒錢糊背景
廣角放旁邊,長焦背不起
負片望記加,正片隨便減
長曝沒測光,成功沒半張
風景大光圈,背景看不見
腳架不看緊,小偷會光臨
取下 鏡 ,PO上DCV
變焦不耀光,錢包噴光光
全幅開箱見,半年吃泡麵
天雨帶相機,潑濕淚沾襟
外拍重氣氛,辣妹旅館見
正午大太陽,太亮看不見
大景懶得跑,上網抓照片


我的第一支Facebook應用程式

1. 首先架設自己 LAMP (Linux+Apache+MySQL+PHP),可以參考如下連結:
How to build LAMP ( Linux+Apache 2.2+MySQL 5.1+PHP 5.3) on Ubuntu 910


2. 連到 Facebook 開發者論壇

在好用的Mac下,好用的終端機 iTerm
Download

ubuntu SSH遠端安全連線安裝及設定

在安裝ubuntu時有安裝openssh嗎
接下來我們可以來看看怎麼設定ssh的部份

安裝openssh-server
如果你沒有安裝ubuntu時沒有安裝openssh,請用以下熟悉的指令來做安裝

sudo apt-get install openssh-server

好,當我們安裝好,基本上就可以用putty來用遠端登入了,當然是有帳密的人就可以登入啦,但是我們都瞭解,這樣子是不安全的,基本上我們要限定連入IP還有改變PORT,如此才會比較安全。

接下來我們一樣可以來檢查是否有執行這個ssh-server,輸入以下指令

ps aux | grep ssh

設定ssh_config內容
我們若在主機上,就會有二條訊息,一是root,一是你登入的名稱。若是用遠端登入,就會有遠端登入的名稱,訊息就會多出2~3條,那是正常的,接下來我們進入ssh的config檔案。

sudo vim /etc/ssh/sshd_config

找一下,看到這行,可以做更改,但事實上,ubuntu本身就有限制root的登入,因此是沒有特別的意義,但還是可以修改,以防萬一

#PermitRootLogin Yes 
改成
PermitRootLogin no

再來找到
# What ports, IPs and protocols we listen for (約第4、5行)
Port 22

可將預設的port改成系統未在使用的port,因為系統預設都會有一些連接port,例如:ftp是port21、web是port80、smtp是port25、ssh是port22、telnet是port23等等,那你要怎麼知道哪些被使用呢?鍵入下列的指令吧。
(port的內容相當多,在一個區段內找一個數字,只要在services當中沒出現的即可)

sudo less /etc/services

例如:91這個port系統沒有使用,那你就將22改成91,那這樣在連ssh時就必須將port改成91,若維持22是連不進去的。

限制IP登入
再來,我們要修改可以登入這台主機的ip,否則任可一個ip都可以利用帳號登入,這是基本的防護。

sudo vim /etc/hosts.allow

在最下方加入
sshd:xxx.xxx.xxx.xxx :allow

xxx就是指你的ip位置,包含你遠端要登入的ip(一般ADSL浮動ip則不適用,此方法只適用固定IP)。若你是ADSL,但又想要登入主機上工作修改,那可以到中華電信的固定IP申請頁面,線上申請後可以馬上使用,雖然不是真的固定IP,但是可以讓你工作方便才是最重要的。

拒絕所有IP登入
當你允許了你指定的IP可以登入,那其他的浮動IP就不讓他們登入了,避免不必要的麻煩和攻擊

sudo vim /etc/hosts.deny

加入 sshd:all:deny

如此一來,除了你允許的IP之外,其他的浮動IP就連不進來

sudo /etc/init.d/ssh stop
sudo /etc/init.d/ssh start

一樣修改完成後,要重新啟動喔!

說明:但是不同於apache2一樣可以restart,在網路上的資料是寫restart,我試過不行,後來我看過config檔案,ssh這裡只能stop跟start,無論你所使用的程式是否支援restart,stop跟start是一定會有的。

How to build LAMP ( Linux+Apache 2.2+MySQL 5.1+PHP 5.3) on Ubuntu 910

安裝 SSH Server 和 VIM :
> sudo aptitude install openssh-server vim

安裝 Apache 2.2 相關套件

輸入以下指令就可以自動安裝好 Apache 2.2 了:
> sudo aptitude install apache2 apache2-mpm-prefork apache2-prefork-dev \
apache2-utils apache2.2-common
安裝完成後, Apache 的設定檔位置會在 /etc/apache2/ 底下,不過它不再是以往的 httpd.conf 了,而是 apache2.conf 。
如果需要 mod_rewrite 的話,就輸入以下指令:
> sudo cd /etc/apache2/mods-enabled/
> sudo ln -s ../mods-available/rewrite.load rewrite.load

安裝 MySQL 5.1 相關套件

安裝 MySQL 也很簡單,輸入以下指令即可:
> sudo aptitude install mysql-server-5.1 mysql-common mysql-client-5.1
安裝好後, MySQL 設定檔會放在 /etc/mysql/my.cnf ;而資料庫檔案則是放在 /var/lib/mysql/ 底下。

安裝 PHP 5.3

因為 Ubuntu 9.10 如果直接安裝 PHP 5 的話,會是採用 PHP 5.2.x 的版本,因此我們需要透過一些方法來讓它改為安裝 PHP 5.3 。
首先,我們要安裝一些必要套件:
> sudo aptitude install libtidy-dev curl libcurl4-openssl-dev \
libcurl3 libcurl3-gnutls zlib1g zlib1g-dev libxslt1-dev libzip-dev libzip1 \
libxml2 libsnmp-base libsnmp15 libxml2-dev libsnmp-dev libjpeg62 libjpeg62-dev \
libpng12-0 libpng12-dev zlib1g zlib1g-dev libfreetype6 libfreetype6-dev \
libbz2-dev libxpm4-dev libmcrypt-dev libmcrypt4
接下來直接透過以下的方法來改變預設 PHP 版本的安裝:
> cd /tmp
> sudo mkdir php53 && cd php53
> sudo wget http://us.archive.ubuntu.com/ubuntu/pool/main/k/krb5/libkrb53_1.6.dfsg.4~beta1-5ubuntu2_i386.deb
> sudo wget http://us.archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu38_3.8-6ubuntu0.2_i386.deb
> sudo dpkg -i *.deb
> sudo echo "deb http://php53.dotdeb.org stable all" >> /etc/apt/sources.list
> sudo aptitude update

安裝 PHP5 的 Apache 模組

現在我們就可以把 Apache 2.2 的 PHP5 模組裝上去了,注意這裡安裝的是 PHP 5.3.2 的版本:
> sudo aptitude install libapache2-mod-php5=5.3.2 apache2
安裝好後, Apache 模組會用到的 PHP 設定檔是 /etc/php5/apache2/php.ini 。

安裝 PHP CLI 、 PEAR 套件及其他需要的 extensions

另外我還會用 CLI 模式來使用 PHP ,而且也會用 PEAR 來管理 PHP 模組;不過因為我是用套件來安裝 PHP5 ,所以沒辦法用傳統的方式來使用 CLI 及 PEAR 。
還有 GD 和 cURL 在預設的狀況下也沒有安裝,我們也將它一併安裝進來:
> sudo aptitude install php5-gd php5-curl php5-cli php-pear
安裝好後, CLI 模式的 PHP 設定檔為 /etc/php5/cli/php.ini ;而這裡所安裝的 PHP 版本也都會是 PHP 5.3.2 相關版本,要特別注意。

安裝 Xdebug

安裝 Xdebug 時,會使用到 pecl 指令,而 PECL 編譯時則需要以下套件:
> sudo aptitude install autoconf automake automake1.4 autotools-dev m4 shtool libtool
然後我們才可以安裝含有 phpize 指令的套件:
> sudo aptitude install php5-dev
安裝完 php5-dev 後就可以再安裝 Xdebug 了:
> sudo pecl install xdebug
然後我們要找出 xdebug.so 安裝在哪裡:
> sudo find / -name 'xdebug.so' 2> /dev/null
/usr/lib/php5/20060613+lfs/xdebug.so
取得路徑後,就修改 /etc/php5/apache2/php.ini 及 /etc/php5/cli/php.ini ,在檔案的最後加上:
[xdebug]
zend_extension="/usr/lib/php5/20060613+lfs/xdebug.so"
最後別忘了重新啟動 Apache :
> sudo /etc/init.d/apache2 restart
來測試一下吧!
1. Test Apache
> http://localhost/ 
Note: Check Apache is working !
2. Test MySQL
 $sudo netstat -tap | grep mysql
Check the strings as follows:
tcp 0 0 localhost.localdomain:mysql *:* LISTEN -
Note: If the service can't work, you'd be restart it with this command, such as "$sudo /etc/init.d/mysql restart" 
3. Test PHP 5.3
$vim /var/www/test.php
           The test.php content as follows: 
          
           phpinfo();
          ?> 
You can keyin "http://localhost/test.php" to test PHP function. 
 
 
 
 

參考文章

虹光大成就-密教灌頂(一)