2011年7月18日 星期一

MongoDB 快速筆記

Standard
這幾年 Web Service 的龐大需求,對資料庫的要求是快速且吞吐量大,因此業界開始流行 NoSQL,它省略最花時間的資料庫操作和複雜的結構,用最合人類使用需求的方式在儲存資料,其帶來的好處,當然就是能提供極速的反應和龐大的資料吞吐量。目前最廣為人知的就是 BigTable,Google 提供全世界快速搜尋和各種線上服務,靠的就是這 NoSQL Database。

其實 NoSQL Database 的選擇非常多,但本文只是記錄 MongoDB 的操作筆記,因此就不詳述。 有興趣的人,可以去查閱網路上更多的資料。

選擇 Database:
use my_database

利用 root 新增 Database 的管理帳號:
# 切換到 my_database
use my_database
# 先用 root 帳號認證
db.getSisterDB("admin").auth("root", "rootpassword");
# 新增 frankie 帳號
db.addUser("frankie", "fredpassword");

新增 Database 的管理帳號:
# 切換到 my_database
use my_database
# 先用 frankie 帳號認證
db.auth("frankie", "fredpassword");
# 新增 zombie 帳號
db.addUser("zombie", "zombiepassword");

插入新增資料(Insert):
# 插入一筆新資料到 users Collection (相當於傳統 SQL 裡的 Table 角色)
db.users.insert({ username: "fred", password: "12345678" })
# 含當前時間
db.users.insert({ username: "fred", password: "12345678", created: new Timestamp() })

查詢(Query):
# 查詢所有 username 為 fred 的資料
db.users.find({ username: "fred" })
# 查詢單筆
db.users.find_one({ username: "fred" })

修改更新資料(Update):
# 更新 username 為 fred 的 password 欄位
db.users.update({ username: "fred" }, { $set: { password: "87654321" }})
# 完全取代 username 為 fred 的資料(username 和 password 欄位會因此不見,只剩下 email 欄位)
db.users.update({ username: "fred" }, { email: "cfsghost@gmail.com"})

刪除資料(Delete):
db.users.remove({ username: "fred" })

2011年7月12日 星期二

不想用傻逼 GNOME3 !好牛逼的雜牌軍替代方案 E17+GNOME/XFCE/Fluxbox Component!

Standard
好不容易,Linux 桌面經過十多年的演進,GTK+ 和 GNOME 總算進入了 3.0 的時代,向來最愛仗著『使用者之名』做盡任何事的 Ubuntu,也推出了他們的 Unity 介面,試圖重新打造桌面使用者的習慣。可惜的是,這些新的桌面設計雖然帶來了完全不一樣體驗,卻也造成不少使用者操作思維的混亂;更可怕的,這些標新立異的改變,將原本『好不容易』成熟穩定下來的桌面系統,在短時間內,又再次推向重新建立習慣和軟體崩潰的循環地獄。

網路上一篇討論文章『Linux的桌面為什麼這麼傻逼』(這篇文章是有心人翻譯的,內有原文連結),對 Linux 桌面環境有很獨道的見解和體驗,其批判性的強烈言詞,可以感覺到這些年作者的沉痛經歷。

就某方面來說,筆者相當讚同該文的論調,本身就長期使用 Linux 桌面,不時因為各種桌面系統的問題,親自動手去做程式開發或調整,可以說該文道盡筆者心聲。不過最近這一兩年, GNOME 已經可以算是很好用的桌面環境,程式也很穩定,周遭初入 Linux 的朋友們也都可以輕易上手。但高興沒辦法太早, GNOME 3.0 在此時投下了一顆超級炸彈,其更新除了讓許多元件壞東壞西,使用操作和程式開發上完全讓人覺得陌生。

喔不!我不要再經歷一次『桌面環境的黑暗時代』。我只想穩穩定定且不要有意外的使用著我的作業系統,所以我也拒絕 GNOME3 和 Unity。在一切混亂的情況下,Enlightenment(簡稱 E17) 帶來了一線曙光。

我對桌面環境的要求其實不高:
  • 可用性高,穩定度和使用性最好不要與 GNOME 2.0 有太大的差異。
  • 速度快
  • 漂亮又炫麗(最好能夠有 3D 桌面的支援,這讓我覺得我的系統比 Windows 高級)
  • 省系統資源
  • 畫面易客製化(如果能讓我看起來更像個專業宅男 Hacker更好)

經過一些拼裝和調整後,這是用 Enlightenment + GNOME Component + Thunar File Manager(XFCE) 組裝的桌面環境其最後樣貌:


Debian 使用者,可以照下面步驟拼裝出同樣的桌面環境(當然畫面上的元件排版要依各自喜好自行調整):
  1. 去 http://packages.enlightenment.org/ 尋找和系統相對應的 Repository(筆者將以 Debian Sid 為例)
  2. 在 /etc/apt/sources.list 裡加入:
    deb http://packages.enlightenment.org/debian sid main extras
  3. 建立 /etc/apt/preferences.d/e17 空白檔案,然後寫入:
    Package: *
    Pin: origin packages.enlightenment.org
    Pin-Priority: 600
  4. 下載並加入 E17 的 GPG Key:
    wget http://packages.enlightenment.org/repo.key
    sudo apt-key add repo.key
  5. 更新 Apt 套件清單和安裝 E17 + Compiz 相關 modules:
    sudo apt-get update
    sudo apt-get install e17 emodule-ecomorph compiz compiz-fusion-bcop compiz-plugins compiz-fusion-plugins-extra compiz-fusion-plugins-main compiz-fusion-plugins-unsupport compiz-gnome
  6. 安裝必要的 GNOME Components 和系統常駐程式(登入介面、GTK+環境管理、電源管理、網路管理、自動掛載管理):
    sudo apt-get install gdm3 gnome-settings-daemon gnome-power-manager gnome-screensaver gnome-screenshot network-manager-gnome udisks-glue
  7. 安裝 XFCE 的 Thunar 檔案管理程式(因為 E17 的不好用,而 GNOME Nautilus 太慢):
    sudo apt-get install thunar
  8. 安裝 Fluxbox 的 fbautostart(因為 E17 預設不支援 freedesktop.org autostart spec)
    sudo apt-get install fbautostart
  9. 重新啟動進入至 Enlightenment 桌面環境
  10. 設定桌面環境,用滑鼠左鍵點擊桌面空白處,選擇 『Settings』→『Settings Panel』
    • 設定視窗外觀
      1. 開啟『Extensions』『Modules』
      2. 將右方『Loaded Modules』的 Appearance 清空只剩下 Gadgets(如果你的系統沒有 3D 硬體支援不能跑 Compiz ,請保留 Bling 並略過下一步驟)
      3. 從左方『Available Modules』的 System 找到 Ecomorph 載入(啟動 E17 的 Compiz Module)
    • 載入系統小元件
      1. 開啟『Extensions』『Modules』
      2. 這邊有很多桌面小元件像是工具列、時鐘等等,可依個人喜好載入,若不明白,可以將所有可能需要的元件載入,等桌面版面調整好後再回來卸載(不卸載會吃系統資源)。

        註:有需多元件需要先安裝 Package,可去尋找『emodule-*』套件。
    • 設定桌面系統程式
      1. 利用『Apps』『New Application』新增下列系統程式:
        Name: Autostart Daemon
        Executable: /usr/bin/fbautostart
        Name: GNOME Settings Daemon
        Executable: gnome-settings-daemon
        Name: GNOME Screensaver Daemon
        Executable: gnome-screensaver
        Name: GNOME Power Manager
        Executable: gnome-power-manager
        Name: Disk Automount Daemon
        Executable: udisks-glue
      2. 利用『Apps』『Startup Application』將此五項系統程式加到啟動程式清單。
    1. 重新啟動進入至 Enlightenment 桌面環境,桌面程式安裝完成。
    到目前為止,你可能覺得桌面空有特效,但預設介面不是很好用。這時可以移除掉系統正下方難用的 Dock,並利用 Shelf 建立喜好的 Dock 或各式工具列,打造合乎自己使用習慣的介面。以筆者的喜好為例:
    • 視窗清單 Taskbar
    • 快捷圖示 Ibar
    • 系統程式選單 Starter
    • 時鐘 Clock & TClock
    • 系統常駐程式列 Systray(無線網路管理、電源狀態和應用程式常駐)
    • 音量控制 Mixer
    在之前的螢幕截圖可以看到,筆者將這些元件分成四個 Shelf (中上、中下、右上、右下)擺放。如果你沒有其他想法,也可以照這樣擺放,這樣設定和 GNOME 環境的使用上差異不大。當然,和 GNOME 一樣將這些元件放在同個 bar 上也是可行的。

    後記

    身為 LXDE 的開發者,不得不承認 Enlightenment 非常輕量和快速,就算沒有 3D 硬體支援,外觀和速度上仍然遠勝所有的桌面環境。如果開著 Compiz 和許多桌面元件,系統記憶體是 300MB 綽綽有餘,且環境整合度相當好。若是再配合上 GNOME 和各家桌面的元件後,可用性和各桌面應用程式的相容性絕不輸給純 GNOME。

    唯一目前已知問題是 E17 的 Place Gadget 和 File Manager 還是使用舊的 HAL 標準(現在的一般標準是使用 udisks),所以這些元件還沒辦法去 Umount 經由標準 Automount 機制的硬碟。因此筆者在這部份暫時使用 XFCE Thunar 來代替,或許過些時間,E17 的開發團隊會修正此問題。

    2011年7月9日 星期六

    『假新鮮人』獻給『真新鮮人』的話

    Standard
    畢業潮近了,學校又將放出一大群新鮮的人才,而每年這個時候,我總會有許多感觸。過去,是看著年紀相仿的朋友投履歷找工作,近距離觀察新鮮人準備進入職場;現在,則是看著後輩跌跌撞撞,撞出許多可歌可泣的新鮮事。

    一切都很新鮮,我們年少時對未來都有憧憬,畢業後準備進入職場,更是抱有許多夢想。有人想努力內求更上一層樓,有人想賺錢獨立,各有各的目標和想法,人生方向就因此不同。這些美麗的夢,就像小學生寫作文題目『我的座右銘』,開學時人人都可以把自我期許講得頭頭是道,但每當學期末拿模範生或各種獎項的人數來看,便知道起而行的人寥寥可數。

    以年紀來說,我應該算是社會大學的新生,但因為在學時就已經開啟了接案生涯,對社會種種並不陌生,所以嚴格說起,我是『假新鮮人』。這些社會經歷,雖微不足道,卻也讓我開了一些眼界。因此這篇文章,其實是獻給過去十幾歲的自己,也是算一種反省式的認罪,更是對生涯的交代。

    我承認,當年。
    1. 許多案子總讓我提不起興趣,做起來總拖泥帶水。
    2. 能夠最後一天做完,我絕不會提前兩天開始做。
    3. 一旦工作做不完,最好不要讓我抓到別人的把柄,因為我將有藉口全身而退。
    4. 累一天,就好像累一個星期。
    5. 別人會如何我不在乎,我在乎的是自己的信用和利益。
    6. 因為你們講的問題或臭蟲我都看不到,所以我給的成果完全沒問題。
    7. 心裡總是想:『上頭賺很多在口袋裡,應該分我吧。』
    8. 管你再急,只要我現在情緒不好,我就不鳥你。
    9. 我做到這樣就夠了,反正我東西交了差已經丟了出去,剩下是你們家的事。
    10. 不管我做對做錯或做得好不好,只要有做就沒有對不起任何人。
    11. 網路神通廣大,讓我得到一堆人云亦云的知識,所以總是任意亂入別人的話題講些人云亦云的假知識。
    12. 我不管其他人說什麼,我認為該這樣做就這樣做,哪怕造成別人的困擾。
    13. 只要老闆沒發現,就算我在混,時間也算是賣給老闆。
    14. 如果有事情會需要讓我在私人時間做,那就一定是老闆的問題。
    15. 總覺得自己做的事最關鍵也最重要,所以自己做一件事抵別人做十件。
    16. 我只要做完了事,不管過程或結果有沒有造成別人不便或損失,都不是我的責任,所以賠錢也不干我的事。但是,給我的錢是萬萬不能少。
    同時,我總有藉口和說詞。
    1. 無論工作有多少,只要不想做就說:『是你們沒評估好我的能力,工作太多或太難,所以我達不成。』
    2. 『因為我東西有在最後一刻給了出來,所以 Project 有任何延誤也不干我的事。』
    3. 『我已經很努力做了,請不要再亂給我壓力。我需要有休息時間。』
    4. 『我拿的錢又不多,這不是我的責任。』
    5. 碰到質疑時第一時間不論內容先回:『這不是我的問題,是 OOXX 的問題。』
    6. 工作效率差時:『機器太慢,不是我的問題。』
    7. 『這東西太無聊,我不想做。』
    8. 總是抱怨:『上面都給我一些沒意義的工作,又學不到東西,浪費我時間。』

    以上是許多年前的我,問題比較多,但在遭逢各種遽變後,開始時時刻刻提醒自己,不要再犯。在此,也向當時與我共事的人說聲抱歉,並請原諒我的不成熟。

    反觀現在的新鮮人,沒自信的人就不用說了,自然是維維諾諾。若是有些才能,普遍性有我當年同樣的不少惡習。另外,這些年下來,私下觀察其他人後,也發現額外的一些問題不在上列,在這就不討論了。

    這次畢業潮,期望『真新鮮人』們一同努力,避免不良惡習,共勉之。