看過來

初來乍到者,請參閱這篇「緣起」。它是總索引!

2017年3月19日 星期日

Rust


超簡單介紹

 Rust 是 Mozilla Research 設計出來的程式語言。(千秋覺得)它最主要的特性是
  • 以安全為主要訴求
    藉著型別系統,實現資料所有權以及借用(Ownership & borrowing)的概念,在編譯的階段便可以確認資源的使用情況,讓開發者不需要介入資源的管理。
  • 強大的靜態型別系統
    利用 trait 達成多型,可以建造 algebraic data type。
    Rust 利用此型別系統達成了資源管理安全,以及並行處理安全
  • 表達力強
    有 functional programming 等高階語言中可見的表達模式
  • 執行效率好
    利用 LLVM 直接編譯到機器碼
  • 可用於嵌入式系統開發
    您甚至可以利用 #[deny(box-pointers)] 來檢查您的程式是否使用了 heap;C語言的話,不要使用 malloc / free 就保證不會用到 heap,但是沒人替您檢查這個...
千秋覺得 Rust 有許多和 Haskell 相似的地方(但是記得它們兩者事實上有非常大的差異)
  • 強大的靜態型別系統(algebraic data type 以及 trait / typeclass)
    帶來了 Option (Rust)以及 Maybe (Haskell),不需要使用 null 了。
  • Pattern matching
  • 資料預設為不可變(immutable)
    在 Rust 您必須明確指出某個資料為可變,方可改變其內容;而在 haskell 裡面,如果沒使用奇怪的招數(像是利用 FFI 來修改資料),那資料都是不可變。
  • Operator overloading
    在 Rust 裡,藉著實作 trait 來賦予資料使用運算子的能力;在 haskell ,運算子被視為函數。此外,使用 haskell 時,您可以定義新的運算子(<_._>, >=> 等稀奇古怪的),也可以把一般函數當成運算子(add a b 等同 a `add` b)
  • 簡易的 FFI (foreign function interface)界面
您可前往其官方網站 https://www.rust-lang.org/ 一探究竟

開發工具

若透過官方的安裝方式來安裝,則已經取得建置系統 cargo 以及開發工具版本管理系統 rustup,加上編譯器 rustc。此時只要挑選順手的編輯器即可
  1. 建置及包裹管理系統
    官方有 cargo (使用官方的安裝方式會一併取得)
  2. 開發工具版本管理
    官方有 rustup (使用官方的安裝方式會一併取得)
  3. 文字編輯器
    1. IntelliJ IDEA + rust plugin
    2. Atom
      language-rust + racer + linter-rust
    3. Visual Studio Code
    4. Emacs
    5. Vim
  4. 除錯器
  5. 測試工具
    cargo test 即應可滿足大多數需求。值得注意的是,cargo test 會一併測試註解說明(//! 以及 ///)內的範例程式碼有沒有錯誤

學習資源

Rust 的學習資源(相對於甚至已有互動式做中學的 JavaScript 以及 Python 來說)似乎不多。您可以參考 https://github.com/ctjhoa/rust-learning 來了解現有的學習資源。

想學習 Rust 的人可以先用 The Rust Programming Language 來:
  • 能夠弄一個 hello world 程式
  • 弄懂大略的語法
    函數宣告、資料結構、方法宣告、trait 的概念、型別系統的概念
    您可以利用位在 https://github.com/carols10cents/rustlings 的小練習來熟悉語法
  • 稍加了解 ownership, borrowing 以及 lifetime 的概念
接著,利用 exercism 來做練習,讓自己更加熟悉 Rust 的語法以及設計哲學。把 exercism 內的練習做個九成之後,就可以考慮看看要不要弄個中小型專案啦!

程式庫

您亦可參考 https://github.com/kud1ing/awesome-rust 來取得更多最新的程式庫資訊
  • 基礎輔助
    • 編譯系統
      • libc
        提供比較適用於 FFI 的型別,以及 C runtime 中的某些服務
      • gcc
    • 數學與計算
      • rand
        產生隨機數
    • 安全
      • ring
        在 Windows 以及 macOS 使用作業系統服務;其他作業系統使用 OpenSSL
    • 資料序列化(serialization)
      • serde
        可以處理 json, xml 等諸多格式
    • 資料格式剖析
    • 日期與時間
      • chrono
    • 剖析器製作
      • nom
    • 其他
      • byteorder
        位元順序轉換、自位元陣列 (&[u8]) 讀取資料
  • 框架
    • 本機遊戲
    • 伺服器以及服務設計
      • hyper
        • reroute
          利用 regular expression 提供 routing 的功能
      • pencil
      • iron
      • nickel
      • rocket
        目前(2017/3/23)需要使用 nightly 的編譯器方可使用 
      • Gotham
  • 網路通訊
    • HTTP
      • hyper
      • reqwest
    • FTP
      • ftp
  • (探索中)

自行撰寫之文章

其他高手的文章

2017年2月22日 星期三

[OpenSUSE] 換用 zsh 了

某天某天,不小心看到了有人使用 oh-my-zsh 的介紹連結,就失心瘋了把使用者 login shell 換成了 zsh。

換裝步驟


身為 OpenSUSE 的使用者,千秋使用 https://zh.opensuse.org/SDB:Zsh#Zsh_.E7.9B.B8.E6.AF.94_Bash_.E7.9A.84.E4.BC.98.E7.82.B9.EF.BC.9F 的教學來替換預設的 shell。

不過,若使用 https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh 的話,一切手續都包辦好了。

install.sh 裡面的操作步驟大綱,僅供參考(2017/02)
  • 檢查有沒有 zsh。
    OpenSUSE 的使用者,如果沒安裝 zsh 的話使用 sudo zypper install zsh 來安裝。
  • 檢查有沒有 git。
    OpenSUSE 的使用者,如果沒安裝 git 的話使用 sudo zypper install git 來安裝。
  • 下載 Oh my zsh 的外掛
  • 使用 chsh -s /bin/zsh 替換預設的 shell。
在 install.sh 完工後,您可以登出系統之後再登入,這樣一來預設的 shell 就會是 zsh 了。

安裝完成後,修改 .zshrc 來更換您 zsh 的佈景主題以及增加外掛。

關於佈景主題,您可以在 https://github.com/robbyrussell/oh-my-zsh/wiki/themes 找到當前 oh-my-zsh 所附送的所有佈景主題以及對應的預覽圖。找到喜歡的佈景主題之後,修改 .zshrc 裡面的 ZSH_THEME 來更換佈景主題。

至於可用的外掛可以在 ~/.oh-my-zsh/plugins 找找看。找到想要用的外掛後,修改 .zshrc 裡面的 plugins 來增減所使用的外掛。

修改 .zshrc 之後,重新啟動 zsh 以見到修改後的效果

zsh 的好處


zsh 的好處,相對於 bash 來說很多,網路上也有不少的討論。

千秋在檢索相關資料的時候,發現這篇不錯的介紹: https://www.slideshare.net/jaguardesignstudio/why-zsh-is-cooler-than-your-shell-16194692 各位可以參考看看

替換後的奇異現象?


不少人擔心在替換 login shell 之後會不會對系統造成毀滅性的影響。其實根據替換過的許多人表示,並沒有發現任何異常。

您可以參考: http://unix.stackexchange.com/questions/38172/switching-to-zsh-are-all-bash-scripts-compatible-with-zsh


2017年1月8日 星期日

Atom 編輯器簡介

官方網站:https://atom.io/

簡介

Atom 是一個社群力相當活潑的編輯器。 剛推出時,便以「使用 web 技術建造而成的編輯器」吸引了不少人的注意。它的設計簡單卻又不土氣,也跟現代的許多編輯器一樣,支援外掛的使用。

優劣

它最大的優點是有社群以及其開發者(GitHub)的大力支援,因此有為數眾多的外掛可供選擇。這些外掛讓 Atom 擁有了某些只有其他編輯器才有的功能(像是 minimap),或者提供了非常方便的工具(像是 pigment, color-picker)等。

Atom 一出世,幾乎馬上就讓人想到 Sublime Text 3(後稱作 ST3),也因此兩者之間常常被拿來比較。有許多在 2014 年的討論裡面指出, atom 的資源消耗量很大(CPU 和記憶體),也相當的慢,若是跟相當精省的 BBEdit 以及 ST3 比起來更是讓許多人無法接受。不過,幾乎沒有 2016 年的文章討論這件事情。

以千秋的個人經驗來說,目前尚未遇到操作瓶頸。

外掛

安裝外掛的時候,若從 atom 的 preference 中的 install 處安裝,搜尋完套件後不要馬上按下 install,而應該先稍等一小段時間,讓編輯器確認版本的相容性後方才安裝。

這裡列出千秋有使用的外掛
  1. Web 相關
    1. color-picker
      在程式碼中的顏色標記(像是 CSS 的 #RRGGBB)上面,按下 Ctrl + Alt + C 的話會彈出色彩選擇輔助對話方塊。
    2. atom-ternjs
      提供 JS 的自動完成服務
  2. 外觀
    1. pigments
      在程式碼中的顏色標記(像是 CSS 的 #RRGGBB)上面直接顯示該標記所代表的顏色
    2. minimap
      在編輯器的右側(預設)會顯示整份程式碼的縮圖
    3. atom-material-syntax 以及 atom-material-ui
      文字套色以及編輯器界面更動。不過預設的就已經挺美的了。
    4. file-icons
      比較漂亮的檔案圖示
  3. 其他工具
    1. todo-show

2017年1月7日 星期六

[OpenSUSE] 硬體故障診斷記

簡單摘要

如果有不明原因的死當(即無法使用軟體手段重新開機),則必須盡快往硬體衰老的方向去考量,並盡快做備份。

現象

電腦開始無預警的死當:畫面凍結時無法使用 Alt + SysRq + REISUB 組合鍵重新啟動。死當的契機和操作時執行的軟體等沒有明顯的關聯性。

把當時剛更新的 Kernel 降級後仍然會有當機的情形,只是變得可以用 SysRq 組合鍵重新啟動了。且,此時在 journalctl 的紀錄上可發現在當機前有 nouveau (開放原始碼的 Nvidia 驅動程式)相關的記載。

開機時進入 BIOS,沒有觀察到電壓落在容許範圍以外的現象。

另,稍後(症狀惡化後)可以明顯的察覺某些時候開機會失敗:即開機時沒有硬碟啟動聲,或者是主機板會自然的再次「重新啟動」(可能跟該主機板所擁有的突波保護有關係:電壓過高或者過低則無法令機器啟動)。

嘗試過的手段

由於一開始的症狀似乎指向顯示卡驅動程式的問題,因此嘗試移除顯示卡。移除之後症狀有改善一段時間。然而之後症狀惡化,才發覺電源供應器似乎有問題,因此移除光碟機,並開始進行備份。

結局

因為當時查詢的某些資料顯示,電源供應器衰敗的話,總有一天可能會燒掉其他零件(如參考 1 之引文所述),因此在確認備份無問題後,便暫時停止使用該電腦。考量到該機器之主機板亦已使用四年以上,遂決定更換新機。

參考

  1. http://ofeyhong.pixnet.net/blog/post/68211558
    引文如下
    但如果是另一種情況:開機「不一定」有畫面呢?這就麻煩了。

    大部份的使用者看到開機沒畫面,通常會關掉,插頭重插,再多開幾次,咦,又可以開了,那就繼續用吧。←這種情形是最麻煩也是最恐佈的。

    麻煩的是:不穩定,時開時不開。恐佈的是:如果真的是因為電源供應器引起的開機沒畫面(不穩定),你還繼續用,改天很有可能不只是換電源供應器而已,說不定會連硬碟、主機版、顯示卡都通通一起帶走。(這是真的,最慘的是電源供應器故障,把硬碟一起帶走)

2016年12月7日 星期三

[OpenSUSE] 找不到解碼器 (h264, aac ...)

現象

雖然已經設定使用 packman 並且從其中安裝了播放程式,使用 mpv 或其衍生程式時,可以在 terminal 的地方,或是發生錯誤時點選 show detail 所出現的視窗中看到類似「找不到 h264 解碼器」之類的訊息。在此同時,某些沒使用到特定解碼器的影音檔案可以順利播放。

解法

更改 ffmpeg 以及其相關之程式庫之提供者為 packman 即可。

參考

  1. https://forums.opensuse.org/showthread.php/517634-mplayr-mpv-smplaer-do-not-play-x264

[OpenSUSE] 自 42.1 升級至 42.2 後沒有聲音

現象

如下列,所有現象均出現時,可以嘗試使用本解法
  1. 播放音樂時發現沒有聲音
  2. 若使用 sudo 來播放的話有聲音
  3. 升級時,利用 DVD (或是自其映像檔衍生的 USB stick)升級,並且在升級過程中選擇了 import user (匯入使用者)

解法

執行如下指令
sudo chown your_user_name /home/your_user_home_directory
假如使用者名稱是 house,家目錄在 /home/house,則
sudo chown house /home/house

參考

  1. http://askubuntu.com/questions/338382/pulseaudio-not-working-home-directory-not-accessible-permission-denied

OpenSUSE 42.2 使用紀錄

使用紀錄
  1. 換用 zsh
維修紀錄(故障排除)
  1. 自 42.1 升級至 42.2 後沒有聲音
  2. 找不到解碼器 (h264, aac ...) 
  3. 硬體故障診斷記