【Ubuntu/Linux】文字檔編碼轉換
偵測編碼
一般我們可以使用 "file" 這個程式來檢查目標檔案的編碼為何,但是當目標對象是中文的時候,問題就便得很複雜了。我們得到了 "Non-ISO extended-ASCII text, with CRLF line terminators" ,意思為:非 ISO 規範的延伸 ASCII 文字,我們可以如此翻譯「這個文字的編碼超過 8 位元,其他的我不知道,不認識。」 那這樣怎麼辦,此路不通,只好換條路來走。
推薦大家使用另一個可以偵測編碼的程式 "enca" 這個程式在 Ubuntu 中預設是沒有安裝的,請輸入
sudo apt-get install enca
進行安裝。在 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
,因為是系統相關設定,所以我們需要使用系統管理員身份執行。
相關格式:
上面是在 crontab 裏面所使用到的時間格式,需要注意的是,使用
# ——分鍾 (0 - 59)
# | ——小時 (0 - 23)
# | | ——日 (1 - 31)
# | | | ——月 (1 - 12)
# | | | | ——星期 (0 - 7)(星期日=0或7)
# | | | | |
# * * * * * 被執行的命令
*
表示任何可能的值,如果在小時的區域裡填入,則代表每個小時執行一次。
特別小心:時間間格需要比程式執行的時間還要長,以免發生資料衝突的問題。
以下為 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 )