淺談8種程式設計師常用配色方案

電腦軟件的配色方案(Color scheme)對於日以繼夜在螢幕前工作的程式設計師而言是一個重要的課題。一個好的配色方案,除了讓電腦看起來別具風格外,更能讓用家眼晴看得更舒服,在處理文字、程式碼時更容易辨認字裡行間的各種元素,提升工作效率。

雖然市面上的配色方案有成千上萬種,不同軟件應用又會有不同的配色方案可供選擇,但有幾個名字卻老是常出現,當中就有幾我是我較為留意的。

繼續閱讀

My Tiny Vim Configuration v1.0.0

最近又更新了自己的Vim設定檔。這次更新改動較大但不算多:更新了一些插件、修正了一些安裝問題、完善了說明文檔、清理了一些沒有用的檔案。不過最重要是這次改用了另一個相當sexy、針對較多不同語言高亮,還在持續開發的配色方案sonokai。因為這款配色主要支援全彩顏色,在那些古老而只支援256色顯示的terminal emulator上使用體驗會沒有那麼好,所以版本號直接跳上v1.0.0以作區分。

繼續閱讀

Sorting Algorithms in a few Words

This note contains the basic ideas of different sorting algorithms in brief and plain words. It is for my own revision purpose and does not guarantee to be fully accurate.

繼續閱讀

RIME行列輸入法補完方案(功能說明及開發心得)

RIME(中州韻)是一個開源的中文輸入法引擎,支援Windows、Linux、macOS、Android四大平台,並透過一個高自由度的框架提供多種中文輸入法,現時尤其受大陸用家及粵拼輸入法的用家歡迎。

對於自己慣用的行列輸入法,RIME亦有支援,但功能卻殘缺得難以接受。眼見不少行列用家對於在Windows內置的行列輸入法感到不足,對於在其他系統上安裝行列輸入法更是苦惱,自己亦想出一分力改進,所以就嘗試將RIME上的行列輸入法補完,希望透過RIME這個跨平台的輸入法引擎令行列輸入法可以在各平台上暢通無阻。

本文主要分享改進的功能和心得。對行列輸入法未有了解的朋友可以參考以下的資料。行列輸入法是一個背誦量低、易學易用的字型輸入法,值得那些對倉頡速成束手無策,又或者經常執筆忘字的朋友學習使用。

行列小站
行列輸入法的家(社團)
FISH UP行列查碼、教學、打字練習網站

繼續閱讀

My Tiny Vim Configuration v0.3.0

0.3.0-1

This is my vim configuration for my daily programming usage. I configured my vim to be programming-friendly with suitable tweaks to built-in features, interface, formatting, etc. The plugins I choose tend to be simple-to-use and practical. I don’t mean to make a completely different editor or to make a fancy vim so I would keep everything simple and won’t go far from typical vim practices.

My configuration has been published over a year. Here’s my 3rd major update to it. Feel free to clone/fork it if you find my configuration suitable for you.

GitLab (main): https://gitlab.com/archerindigo/vimrc

GitHub (mirror): https://github.com/archerindigo/vimrc

v0.0.3 Release: https://gitlab.com/archerindigo/vimrc/tags/0.3.0

Changelog of v0.3.0:

Added

  • Added the simpler Ctrl-C, Ctrl-X, Ctrl-P, Ctrl-V shortcut keys as system clipboard copy, cut and paste respectively
  • Added gitv v1.3.1 to support more git operations within vim
  • Added optional config for recommended font (Source Code Pro)

Changed

  • Enabled copy-on-select in gvim
  • nerdtree uses v5.0.0 instead of master
  • vim-fugituve uses v2.4 instead of master
  • Other plugins updated to sync with master
  • Updated screenshot

Fixed

  • Fixed plugins not cloned due to missing .gitmodules

這是我日常使用vim時所用的設定和插件。這個設定檔針對日常編程需要而設,對vim內置的功能、介面和格式排版作出了相應的調整,並採用了簡單而實用的插件。這些設定旨在令vim達至更完善、更方便的編程工具,並盡可能不影響vim的一般使用習慣。

設定檔公開至今已超過一年,這次是第三次主要更新。如覺得合用,歡迎取用!

v0.3.0更新內容:

新增

  • 加入Ctrl-C, Ctrl-X, Ctrl-P, Ctrl-V快捷鍵,進行系統剪貼板的複製、剪下和貼上動作
  • 新增gitv v1.3.1插件,方便在vim內進行更多git的操作
  • 新增Source Code Pro字型的相關設定,可選擇性地啟用

更新

  • 啟用gvim「選取同時複製」功能
  • nerdtree改用v5.0.0而非master
  • vim-fugituve改用v2.4而非master
  • 更新其他插件至master branch的最新版
  • 更新截圖畫面

修正

  • 修正因缺失.gitmodules而無法在git clone同時下載插件的問題

舊日Vim相關文章:

Manjaro初次使用報告—簡約而不簡單

manjaro logo

近幾年在Linux的世界中,除了無人不曉的Ubuntu、Fedora等外,還有一個發行版正急速冒起。它在知名Linux資訊站DistroWatch.com中的瀏覽量排行榜中一直長居三甲位置,它就是Manjaro Linux。

由於青鳥已經受不了Windows 8.1在自己的手提電腦上龜速運行,繼而想嘗試轉用Linux,又想了解Ubuntu以外的Linux版本,所以就選擇了Manjaro並向大家報告一下了!

(Manjaro這個名字,是來自非洲最高的山——乞力馬扎羅山 Kilimanjaro,如果有留意本Blog的朋友,應該會見過本Blog其中一篇文章正是與這座山有關!) 繼續閱讀

我的Vim設定檔分享

vim-config

我的Vim設定檔公開了。誠意推薦給初以Vim工作的人使用。

Github: https://github.com/archer1609/vimrc

眾所周知Vim擁有非常高的可塑性,能按自已需要加入不同的設定,也有不少人製作各種插件為vim提供進階功能,但自己動手設定也是一件頗為繁複的工作,故分享自己的設定檔供各位取用。

因為青鳥也是為日常編程需要才最近開始注重vim的使用技巧,並一步步地為自己擴充Vim的功能和設定,所以這個設定檔現時還是相當簡單容易理解,新增的功能也不多卻非常實用。這讓大家可以慢慢熟習vim的不同插件和設定。

Github內的說明檔會詳細地說明新增的功能,vimrc內亦有附註說明,讓大家輕易了解這個設定檔的特性。因為本人現時工作主要使用C/C++,因此設定上不傾向切合這方面的工作需要。

設定檔會不時更新,歡迎定期瀏覽我的Github追蹤變化。

Happy Coding!

Vim多檔作業操作技

Vim split and tab

Vim作為一個Command line的文件編輯器,功能強大就眾所周知,不少開發者都愛用它來寫程式和操作系統文木檔,而寫程式往往需要編輯大量檔案,也需要開啟不同的檔案文件交互參照,但我們總不能開著一大堆視窗逐個切換吧?所以要用Vim寫程式,就不得不知如何應付多個檔案。

Vim不用另加插件,就支援多檔作業,當中最重要的就是視窗分割(Split Windows)、分頁(Tab Pages)和會話(Session)。學懂它們就能令Vim如IDE或其他圖形介面的進階文字編輯器一樣方便好用,以下就是這些功能的相關常用指令:

(為方便起見以下用英文)

繼續閱讀

[OpenCV]在Windows環境下安裝OpenCV、設定Visual Studio及Python

近期青鳥將要展開Final Year Project,並會用到OpenCV。OpenCV是一個開源(Open Source)、跨平台(Cross Platform)的電腦視覺庫(Computer Vision Library)。這個Library支援能協助處理和開發很多複雜的Computer Vision問題,支援C++, Python, Java等多種程式語言,更支援Windows、Linux甚至是Android、iOS等多個作業系統(OS)。雖然它功能強大,但安裝上也是非常複雜,所以特別寫下此筆記。

範疇:OpenCV, Computer Vision
程度:中
簡述:安裝OpenCV2.4.11到Windows系統,並設定Visual Studio及Python開發環境。
安裝環境及涉及軟件:

  • Windows 8.1
  • Visual Studio 2013 Express for Desktop with Update 4
  • Python 2.7.10
  • numpy-1.9.2+mkl-cp27-none-win_amd64

雖然OpenCV已發展到3.0.0 RC1版,但它似乎仍未正式支援Python 3,也未必足夠穩定,所以本教學基於現時最新的穩定版本OpenCV 2.4.11,並使用它所支援的Python 2.7。 繼續閱讀

[Linux/RPi]用SAMBA在家中共用檔案

範疇:Linux, Raspberry Pi Project
程度:中
簡述:教授掛載外置硬碟的方法;利用SAMBA共用Linux系統的檔案

家中有一部PC和一部Notebook,平常要在兩部電腦之間互傳檔案都會用HomeGroup,亦即是我們從前認識的「網絡上的芳鄰」,相信不少人都用慣了,如果真的不知道是什麼的話請自行Google。用了這個後兩部電腦猶如合為一體,我可以在PC上開啟Notebook上的檔案,又可以將Notebook上的檔案傳回PC,使用方式和一般存取的方式幾乎一模一樣。

不過,現在手上多了一部行Linux的Raspberry Pi,還給它搭上了一個外置硬碟。本來想用這樣的配置來做File Server,方便我做Backup、日常取用和其他用途,可是Linux本身並無法與Windows的HomeGroup相容,如果用WinScp、FileZile等來傳檔案的話又比較不方便,更無法直接開啟檔案,所以要另外想些辦法來解決。

其實解決方案早於90年代已經出現,1991年時有一個名叫 Andrew Tridgell 的博士研究生為解決相同問題,特意探取Windows網絡共用所用的Protocol來進行逆向工程,最終編寫出Server Message Block (SMB),使Linux可以與Windows網絡共用相容。由於美國商標注冊的限制,軟件最終取名SAMBA。這個軟件到今時今日仍受Linux用家愛戴,現在就讓我們一起森巴舞吧!

所需軟件:

  • samba
  • samba-common-bin
  • ntfs-3g

Part 1: 掛載外置硬碟

Raspberry Pi用SD卡來作儲存裝置,空間緊拙,實在不適合作為File Server。所以在開始之前,我會先額外教大家掛載外置硬碟:

1. 連接硬碟

首先,當然是要將硬碟接上電腦。對,就是將USB線插上!

然後使用fdisk查看新加的外置硬碟是在哪個接口(需要sudo)。以我為例,現在我的外置硬碟就在/dev/sda1

# sudo fdisk -l

Disk /dev/sda: 2000.4 GB, 2000365289472 bytes
255 heads, 63 sectors/track, 243197 cylinders, total 3906963456 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0d0af321

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048  3906963455  1953480704    7  HPFS/NTFS/exFAT

2. 掛載硬碟

在掛載之前,我們需要為硬碟劃定一個固定位置,以便共用,現在我會在/media建立一個名為WDMyBook的資料夾,作為外置硬碟的存取點:

# cd /media
# mkdir WDMyBook

接著,就正式將硬碟掛上:

# sudo mount -t ntfs-3g /dev/sda1 /media/WDMyBook

-t後面是指定裝置的格式,因為我的外置硬碟使用NTFS格式,需要ntfs-3g這個driver來進行存取,Raspbian原生沒有這個Driver,需另行安裝:

# sudo apt-get install ntfs-3g

3. 設定開機自動掛載硬碟

現在你只要瀏覽/media/WDMyBook的話應該就可以見到硬碟內的檔案了,不過到你下次重新開機,一切都會打回原型。要每次開機都自動mount上硬碟的話,就要修改/etc/fstab這個開機掛載設定檔:

# sudo vi /etc/fstab

; 請在檔案內加入以下一行:
/dev/sda1       /media/WDMyBook ntfs-3g defaults   0       2

“/dev/sda1″是裝置位置;"/media/WDMyBook"是掛載位置;"ntfs-3g"是儲存格式;"defaults"是掛載時的設定,使用預設已足夠;"0″是dump backup,不用開啟;"2″是fsck 檢驗,優先度設定為2,不用跟主要磁區搶。

現在,你每次開機外置硬碟都會自動掛載好了!

Part 2: 安裝SAMBA

1. 安裝SAMBA

返回正題,我們開始要安裝samba了,我們除了samba主程式外,還需要samba-common-bin來執行需要的功能:

# sudo apt-get update
# sudo apt-get install samba, samba-common-bin

2. 建立帳號

安裝完成後,你需要建立登入的帳號,這裡要注意帳號名稱必須和你在Linux上的帳戶一樣:

# sudo smbpasswd -a USERNAME   ; USERNAME為你的Linux系統上一個用戶的名稱
; 輸入密碼兩次
; smbpasswd是舊式方法,不過亦足夠使用
; 更改密碼也是要用smbpass,但不用輸入-a

; 以下是新式方法
# sudo pdbedit -a USERNAME
; 輸入密碼兩次
; 有關pdedit的其他功能請參考 pdbedit -h

3. 設定smb.conf

現在來到最重要一步,設定你要共用的檔案,設定檔位於/etc/samba/smb.conf,打開後你會發現裡面已經有預設的設定和詳細說明,你可以參考說明自行配置,以下解釋其中一些基本設定。

[global]底下的是系統設定,大多設定都可按預設,但需留意以下參數:

workgroup = WORKGROUP
; 工作群組名稱,WORKGROUP是Windows預設的名稱,所以一般不用更改

security = user
; 設定為user的話就需要使用者登入方可存取檔案,需要設定為user

; 下面是有關共用Printer的設定,在第182行附近,如不用share printer建議這樣設定:
load printers = no
printing = bsd
printcap name = /dev/null
disable spoolss = yes

; uncomment下面這句或有助連線速度,這句在207行左右:
socket options = TCP_NODELAY

接著到下面會有[homes]的一項,這是一個特殊項目,會指向使用者的home目錄,設定解說如下:

[homes]
   comment = Home Directories   ; 純粹是目錄描述
   browseable = no   ; 設定此目錄可否被所有人看見,注意這只是看見,並不代表可以進入存取
   read only = yes   ; 設定檔案是否為唯讀,
   ;writable = yes  ; 與read only相反,這兩句只需選擇一個,所以comment out
   create mask = 0700   ; 設定新增檔案的預設權限
   directory mask = 0700   ; 設定新增目錄的預設權限
   valid users = %S    ; 允許存取的使用者,對於homes一般使用%s,這樣就限定使用者只能進入自己的home

以上的設定已經可以讓你進入到自己的home目錄。因為home是使用者的根目錄,等同可以存取使用者的所有個人檔案,因安全性問題所以建議只作唯讀(read only = yes),然後另外設置其他共用資料夾作讀寫。

要設立共用資料夾,做法和上面基本一樣,只是將[homes]改為其他名稱,其他可用的設定基本一樣,你可根據自己需要調節,另外要加上一句"path = xxx"來指定共用資料夾的所指位置。

以下的例子是共用我的外置硬碟,讓使用者"Archer", “King"可以進入並享有正常讀寫權限:

[MyBook]
   comment = External Hard disk on RaspberryPi
   brwoseable = yes   ; 讓任何人都可以看到此目錄
   writable = yes   ; 讓使用者可以修改檔案
   create mask = 0700
   directory mask = 0700
   valid users = Archer, King
   path = /media/WDMyBook   ; 當使用者從網絡進入MyBook後,實際會連到/media/WDMyBook這個位置

你會發現檔案下面還有例如[profiles]、[printers]之類的共用資料夾,但這些我們暫時都不會用到,而且預設也是停用的,所以不用理會。

4. 檢查設定

好了,現在你已經設定好兩個共用資料夾,分別是你自己的home和外置硬碟的空間,接下來你可以用以下指令檢查你的設定是否有誤:

# testparm

假如出現"Loaded services file OK."這句,代表設定基本沒有問題,否則請按錯誤描述進行修正。

當出現"Press enter to see a dump of your service definitions"後,按下enter便會產生一份設定報告供你參考。

5. 重啟服務

最後,只要重新啟動samba的service,samba這一邊就完成啦!

# sudo /init.d/samba restart
[ ok ] Stopping Samba deamons: nmdb smdb.
[ ok ] Starting Samba deamons: nmdb smdb.

Part 3: Windows端連線

辛辛苦苦來到這一步,最重要當然是要讓Windows可以存取Raspberry Pi上的資料啦,接下來的工作就簡單得多了,不過還是有些地方要留心。

1. 透過家用網路連線

當你打開「電腦」後,你應該已經可以在左邊欄的「網絡」內看到新的成員了!

Pi0

當你點選你的新成員(ARCHER-PI),即可輸入使用者名稱和密碼登入,必須注意如果要切換使用者的話會比較麻煩,所以請儘量使用單一使用者存取共用檔案。

登入後你可以看到對登入的使用者共用的資料夾:

Pi1

你可以右擊一個資資夾,將它設定為網絡磁碟機,方便進入:

pi2

然後你可以在「電腦」中看到你的共用資料夾變成了一個網絡磁碟:

pi4

你亦可以在「電腦」上方選擇「連線網絡磁碟機」來手動建立。

2. 切換使用者

要切換到另一個使用者存取只有該使用者方可存取的共用文件,你必須登出,因為一部電腦只能同時使用一個使用者登入到其他電腦。但Windows似乎沒有方便的方法讓你直接登出SAMBA上的使用者,如果要登出,只好透過command將現有所有連線砍掉。

另外,你還要在「電腦」中將所有已連接的網絡磁碟機中斷:

pi6

pi5

然後,在網址列輸入:\\IP or NetName\Username,例如\\Archer-Pi\King,Windows即會嘗試登入另一使用者,輸入使用者名稱和密碼後應該就可以切換了。不過這個方法有時都會失敗,或許需要重新開機方能完全斷開連線。

教學就此完結,有空再教建立VPN的方法,使你可以在戶外安全地經Raspberry Pi連到家用網絡存取資料。


下面來個bouns:Raspberry Pi File Server + 小型影院

DSC_2655