Archive for 2013
在 Ubuntu 下透過 RVM 安裝 Ruby on Rails
第一步驟 - 使用 RVM 安裝 Ruby
更新完成以後,我們就能開始安裝 RVM ( Ruby Version Manager ),這個程式可以很方便的讓我們在不同的 Ruby 版本間作切換, 以下我們只會安裝最新的版本,如果想要安裝其他的版本,可以參考這個文章 。
我們會需要用到
curl 這個工具來幫助我們安裝 RVM ,所以還沒安裝過curl 的朋友請先安裝curl 。安裝 RVM,請輸入:
當安裝完成以後,載入 RVM。或許你需要將目前所處於的 shell 關閉,並重開一個新的 shell。
RVM 還有一些需要的依賴程式需要安裝,輸入下面這個指令可以自動安裝 RVM 所需的相關程式
你或許需要在安裝這些相依程式的時候需要輸入密碼。
在某些偶然的情況下,有可能 zlib 會回報 miss。RVM 的官方網站提供了此問題的解法 ,如果出現類似的問題的話,請詳閱。
第二步驟 - 安裝 Ruby
我們已經安裝好最新版的 Ruby 了,但是因為我們是透過一個管理不同版本的程式來使用 Ruby 的, 我們需要告訴系統我們現在想要使用哪一個版本的 Ruby 當作預設值。
第三步驟 - 安裝 RubyGems
第四步驟 - 安裝 Rails
Rails 的安裝會需要一段時間,當完成以後,你的電腦上就有完整的 Ruby on Rails 摟。
參考資料
【Ubuntu / Linux】 使用 Chrome 時 Flash 字體出錯問體解決
http://ppt.cc/TMrj
/etc/fonts/config.d,一般是不會去這邊設定的,網路上真有人跑去設定這個orz,不要設定的比較好,萬一出事了,麻煩可就大了。chrome://plugins可以進入插入元件的設定頁面,頁面開啟以後,將右上角的
[+] 詳細資訊開啟找到 Flash Player 的部份,我們可以找到有兩個不同的 Flash Player,分別的路徑為:
/opt/google/chrome/PepperFlash/libpepflashplayer.so
 及 /usr/lib/flashplugin-installer/libflashplayer.so,其中,PepperFlash 為 chrome 內建的 Flash Player 和我們自己所安裝的 Flash Player
              有所不同,這個 Flash Player 在指定字型的時候路徑方面出了點問題,而且透過 Google 搜尋,我們可以發現,這個 Flash Player 對字型的處理比原生的
              Flash Player 還要來的差了一點,在字體寬度、介面處理上,渲染的有些偏差,所以透過停用這個插件,我們就可以使用我們所安裝的原生 Flash Player 了。
              【Ubuntu 13.04】使用 cron 進行批次作業
許多人在使用電腦的時候都會有這樣的想法:這台我花了這麼多錢買來的電腦,能不能讓它在一天 24 小時都全力的工作,將 資源的利用度提高到最高 ,這樣花的錢才值得。所以很多人開始觀察使用者如何使用電腦,嘗試著去從使用者的角度來改善資源利用率, 喔,我們發現,在白天上班時間,電腦會被大多數人所使用,資源的利用度很不錯,電腦很繁忙,但是當下班以後,因為公司的人都回家了, 雖然電腦還是持續在運作,但是實際上他並沒有進行產出,若是我們能讓他做些什麼東西,就可以改善、提高資源的利用度,增加產出, 在以前使用 windows 平台的經驗,許多人可能會使用 bat 批次檔來進行處理,然後寫個小程式讓這個批次檔能在準確的時間運作,而在轉到 Linux 平台以後,有些人也會惜慣性的使用類似的方法使用 shell script 加上一個定時執行的小程式來進行批次作業的處理。 事實上,Unix-like 平台提供了一個更方便的方法,讓我們來管理批次作業,那就是cron。
       因為小弟我是使用 Ubuntu 作為常用的系統,本篇會以 Ubuntu 的角度來討論如何使用 cron 這個服務。
       cron 的使用其實很簡單,只要遵守以下的規則,就能將自己的程式批次處理了。
       cron 的設定檔一般放在/etc 資料夾下,檔名為 crontab,因為是系統相關設定,所以我們需要使用系統管理員身份執行。
       相關格式:
       
        
        #  ——分鍾 (0 - 59) 
        # |  ——小時 (0 - 23) 
        # | |  ——日   (1 - 31) 
        # | | |  ——月   (1 - 12) 
        # | | | |  ——星期 (0 - 7)(星期日=0或7)
        # | | | | | 
        # * * * * * 被執行的命令 
       
       上面是在 crontab 裏面所使用到的時間格式,需要注意的是,使用*表示任何可能的值,如果在小時的區域裡填入,則代表每個小時執行一次。
       特別小心:時間間格需要比程式執行的時間還要長,以免發生資料衝突的問題。
      以下為 Ubuntu 預設的 crontab 設定,會進行一些更新方面的確認,以及系統的問題回報。
      
               
      
      你可以自由的加入自己的程式,只要依照格式撰寫,並注意時間的部份,就可以了,最後在編輯好這個檔案以後,請重開 cron 服務。
      到 /etc/init.d 輸入sudo service cron restart 將服務重開,即可更新你剛剛
      編輯的 crontab 檔案了。
      
     
啟動 Gnome Shell 3.8 應用程式分類
最近因為對Ubuntu 的 Unity 感到有點厭倦了,太多的 bug 、需要大量的資源...種種的問題導致了我產生了想要轉其他的桌面環境的念頭,因為以前的使用習慣的關係,所以目前暫時 轉移到 Gnome 桌面環境,Gnome 相對於 unity 更為輕巧,動畫方面也很優雅,不像是 Unity 有些動畫給人的感覺有點多餘,整體上給我的感覺是很正向的, 有關於 Gnome Shell 的 preview 我會在不久的未來寫一篇新的文章,還請大家多多捧場。
             用了 Gnome 以後,各項方面感受相對於 Unity 都很有蠻正向的回饋,但是一直以來,有個問題困擾著我,那就是在 Gnome Shell 3.8 的簡介裏面,他們新增
             資料夾的功能,讓使用者可以把應用程式做分類,但是真的很悲劇,我怎麼試都試不出來 Orz 
             或許是因為可以自訂資料夾的原因,Gnome 3.8 也預設把應用程式分類關閉,所以在這樣前提下,使用上要找應用程式都要透過搜尋來找,說真的,
             也不是不方便啦,就是有點麻煩就是了。
             
             
                 
             
            
           
             
              Step1:在搜尋框輸入 「dconf」,啟動 dconf editor 來編輯一些相關的設定
            
Step2:在 dconf 中沿著 org > gnome > shell 的順序可以得到如下的畫面
Step3:在右手邊的地方,我們需要修改的欄位是 app-folder-categories,而預設的內容是:['Utilities', 'Sundry'] ,我們將其修改為 ['Utilities', 'Games', 'Sundry', 'Office', 'Network', 'Internet', 'Graphics', 'Multimedia', 'System', 'Development', 'Accessories', 'System Settings', 'Other'],如此一來,幾乎所有的程式都會被分類到這裏面了,以下是分類過後的 Gnome Shell 樣子, 產生許多的資料夾,讓我恍然大悟的了解到,原來介紹上所提到的資料夾是這麼一回事。
以下為 Gnome 3.8 的宣傳影片
網頁程式學習 -- CSS選擇器
上一次我們談到了如何簡單的生成一個網頁文件,但是我們卻只能單調的對這個文件進行打字,以往我們在編輯文件的時候, 常常有許多的格式設定需要我們去煩惱,這些格式的設定在網頁上即是使用 CSS 來進行設定,為了對某個我們已經生成的物件進行設定, 我們需要先了解到如何對物件進行選擇,即是學習 CSS 選擇器。
在學習選擇器之前先聊聊幾個基本概念,如果有學過物件導向程式設計的朋友們應該對於「class」和「id」並不陌生, 「class」和「id」的概念在 CSS 的應用上是非常常見的,若是我們想要對於一群物件進行設定,而這些物件卻是不連續的出現在我們整份文件中, 那麼我們可以對這些我們欲設定的物件使用相同的「class」名稱,我們只要對這個「class」進行設定即可;相對於「class」的多個物件共用屬性, 「id」就是個別的一種屬性設定,我們在使用「id」的時候只能在同一份文件中出現一次,如果出現多次會造成混淆的現象。
舉例來說明 class 和 id 的關係就像是在每個人身上貼上標籤,台灣有 200 多萬個台北人,但是台北人中卻只有一個人的身份證字號跟你一樣,那個人就是你自己。
【註】class 以小數點「.」為開頭; id 以 Hash Tag 「#」為開頭
以下就要來一個一個的講解有關於 CSS 選擇器的內容了,上面廢話有點多orz
      根據 w3c 的  css selector syntex,我們可以知道 CSS 選擇器大約有 10 種 
      
      
Universal Selector 通用選擇器
使用* 作為篩檢對象,代表此網頁下所有的物件都遵守 *{} 裡的規則。
     Type Selector 屬性選擇器
使用 Html Tag 作為篩檢對象的方法,稱作為屬性選擇器,屬性選擇器會把這份 HTML 文件中所有被選擇到的那種標籤都加上所設定的規則。
          h4{
            font-size:20px;
           }
          div{
             background-color:black;
           }
        
     Descendant Selector後代選擇器
當兩個選擇器並排呈現的時候,瀏覽器會從外面往裏面選擇,可以當作是被限制範圍的其他選擇器,相同的只要符合選擇器所篩選的內容都會被套用這些規則。例如:
住在台北市的人 男生
這兩個篩選條件下的交集,會有很多的結果,這些結果都會套用我們所下的規則。
          div a{
            color:yellow;
          }
          nav li{
            color:red;
          }
       
     Child Selector 子選擇器
子選擇器的意味和後代選擇器很類似,但是後代選擇器是對每個後代都作用,但是子選擇器只對緊緊跟在前一個選擇器後面那個作用,若是中間有其他的物件在中間, 那麼就不會套用選擇器的屬性,所以範圍更小了。例如:
坐在我附近的人 > 男生
在這個條件下,坐在我附近的人中可能有很多個男生,但是坐在我旁邊的男生可能只有兩個人,那麼 這個選擇器的條件就是選擇到這兩個男生,並對他們進行屬性上的設定。
           div > a{
              color:yellow;
           }
        
     Adjacent sibling selectors 相鄰選擇器
相鄰選擇器,應該是目前很少用到的一種選擇器,因為尚有部份瀏覽器不支援,我們都知道 HTML 的具有巢狀結構,而前面所提到的後代選擇器和子代選擇器, 都是針對巢狀結構的內層作用,而相鄰選擇器,則是針對同一層的其他元素進行作用,其中使用+ 來進行連接。
            h1+h1{
             color:red;
            }
            /*同層的的第二個 h1 會顯示紅色*/
            h1+h1+h1{
             color:blue;
            }
            /*同層的第三個 h1 會顯示藍色*/
          
     Attribute selectors 屬性選擇器
屬性選擇器,是針對標籤裡頭的屬性做更進一步的修改。這個比較難解釋,直接看 code。
            h1[class]{
                color:red;
            }
           /*所有含有 class 屬性的 h1 都會受到影響*/
            h1[class=title]{
               color:red;
            }
           /*所有 class 屬性為 title 這個 class 者都會受到影響*/
           h1[class~=title]{
               color:red;
           }
           /*所有 class 屬性有 title 者都會受到影響*/
           h1[class|=title]{
               color:red;
           }
           /*class 的第一個為 title 者會受到影響*/
         
     Class Selector
顧名思義,針對某個 class 進行定義屬性的方式,以. 為開頭進行定義。
            .box{
               background-color:black;
            }
         
     ID Selector
和 Class 選擇器類似,但是指針對某個特定的 ID 進行定義,使用# 為開頭進行定義。
            #key{
              color:white;
            }
         
     Pseudo-classes 偽類
這個東西嘛,其實就是常見的:hover :active :visited :link  除了常見的這些之外,還有其他三個 :first-child :focus :lang
          p:first-child{
            color:red
          }
         /*first-child 是第一個使用 p 這個標籤者會被設定屬性*/
         p:lang(fr){
           color:red;
         }
        /*符合屬性為 lang(fr) 的標籤才會被套用這個屬性*/
       
     Pseudo-elements 偽元素
偽元素的使用和偽類的使用方法類似,皆是使用冒號接上元素名稱。目前偽元素有兩個:first-letter :first-line。
          p:first-line{
            color:red;
          }
          /*第1行 p 會成為紅色*/
          p:first-letter{
            color:red;
          }
          /*只有第一個字母會變成紅色*/
       
     網頁程式學習 - HTML 基本上手
- 頭(head)
- 身體(body)
讓我們從「頭」開始討論吧,在瀏覽器開始載入一份文件之前,我們可以在文件的內容之前先宣告一些這份文件的初始資料,例如:
- 文件編碼
- 網頁資訊
- 網頁標題
- 層疊樣式表(CSS)
- 網頁程式(script)
【教學】從 C 語言的角度入門 PHP
[閒聊] WebConf 2013 心得
如何幫 ubuntu 的 LibreOffice 升級
LibreOffice 改朝換代,又加入了新的功能
喔喔!這讓我才熊熊的發現,原來我的 LibreOffice 並沒有隨著每次的軟體更新而更新,搜尋了一下資料發現,原來 Ubuntu 並沒有把 LibreOffice 的 PPA 加入到其更新表中,那麼事情就簡單啦:
- 找到 LibreOffice 的 PPA
- 加入 PPA 至更新列表
- 更新軟體列表
- 重新更新軟體
打開終端機,插入 LibreOffice 的 PPA:
  sudo add-apt-repository ppa:libreoffice/ppa插入完成以後,重新更新軟體列表:
sudo apt-get update這時候更新管理員就會出現有新的更新,執行更新即可
雖然還不是最新的版本,但是總算是擺脫掉 LibreOffice 不會更新的問題了 ( wave )


 
 