2015年5月19日 星期二

Git 使用多個 repository

以建立 GitHub Pages 為例
複製 GitHub 上建立的 repo
$ git clone git@github.com:enhao/enhao.github.io.git cheatsheet
$ cd cheatsheet
增加和更新 Lanyon 的 repository
$ git remote add lanyon git@github.com:poole/lanyon.git
$ git remote update
$ git branch -a
* master
  remotes/lanyon/gh-pages
  remotes/lanyon/master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
合併 Lanyon 的 repo 到 master
$ git checkout master
$ git merge remotes/lanyon/master
上傳到 GitHub Pages 的 repo
$ git push origin master
上傳到增加的 repo
$ git push lanyon master
參考

2015年5月12日 星期二

C/C++ snippet: read_rtc(), with_rtc()

2015年5月6日 星期三

在 Laravel 5 使用 Gmail 寄送郵件

Gmail 的外寄郵件伺服器設定:

server: smtp.gmail.com
TLS port: 587
SSL port: 465

修改專案目錄下的 config/mail.php
 env('MAIL_DRIVER', 'smtp'),
    'host' => env('MAIL_HOST', 'smtp.gmail.com'),
    'port' => env('MAIL_PORT', 587),
    'from' => ['address' => 'xxxxxx@gmail.com', 'name' => 'xxxxxx'],
    'encryption' => 'tls',
    'username' => env('xxxxxx@gmail.com'),
    'password' => env('******'),
    'sendmail' => '/usr/sbin/sendmail -bs',
    'pretend' => false,
];

使用環境變數的話,修改專案目錄下的 .env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=xxxxxx@gmail.com
MAIL_PASSWORD=******
沒有 .env 可以複製預設的環境變數設定
$ cp .env.example .env
使用預設的環境變數設定,寄送郵件會因為沒有設定 from 而發生錯誤,可以修改 config/mail.php
     'from' => ['address' => env('MAIL_FROM'), 'name' => env('MAIL_SENDER_NAME')],
在 .env 再加入 MAIL_FROM 和 MAIL_DISPLAY_NAME 解決問題
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=xxxxxx@gmail.com
MAIL_PASSWORD=******
MAIL_FROM=xxxxxx@gmail.com
MAIL_SENDER_NAME=xxxxxx
有使用兩步驟驗證的話,要到Google 帳戶的應用程式密碼產生專用的密碼

參考

Mac OS terminal 下複製到剪貼簿、從剪貼簿貼上

複製到剪貼簿
$ cat file.txt | pbcopy
從剪接簿貼上
$ pbpaste > file.txt

2015年4月29日 星期三

Minicom 設定

執行
$ minicom -s
或進入 minicom 後按 Alt-a o 開啟選單

選擇 Serial port setup 設定 console
Serial Device : /dev/ttyUSB1
Bps/Par/Bits : 115200 8N1
Hardware Flow Control : No
Software Flow Control : No
選擇 Screen and keyboard 設定自動斷行
Line Wrap : Yes

Confide 登入錯誤

登入出現錯誤訊息 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'username' in 'where clause' (SQL: select * from users where username = ) 的解決方法:

修改 composer.json
...

"require": {
     "laravel/framework": "4.2.*",
     "zizaco/confide": "dev-username-optional",
},
執行
$ composer update

參考

2015年4月28日 星期二

Shell script: mktmp.sh

省去用 mktemp 建立臨時檔要輸入 XXXXXX 的麻煩,保留 -d 參數

指定 Laravel 建立的版本

建立 4.2.0 版的 Laravel
$ composer create-project laravel/laravel=4.2 foo --prefer-dist
建立 Laravel 4 的最後版本
$ composer create-project laravel/laravel foo ~4.0 --prefer-dist

2015年4月23日 星期四

Sphinx 正體中文搜尋的擴充套件

網路搜尋的資料都要修改 Sphinx 的程式碼,對用 pip 作套件管理的系統並不好。 參考 Sphinx 的擴充套件教學後,就基於 bosbyj/sphinx.search.zh_CN 加入了一些例外處理和從設定檔自訂字典檔的功能,做了正體中文的擴充套件 sphinx.ext.search.zh_TW 也提交給 Sphinx,不知道會不會 marge 到未來版本。

安裝結巴中文分詞
$ pip install jieba
安裝正體中文的擴充套件
$ git clone https://github.com/enhao/sphinx.ext.search.zh_TW.git _extension
修改專案目錄下的 conf.py
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath('_extension'))

...

# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = ['search-zh_TW']

...

# Language to be used for generating the HTML full-text search index.
# Sphinx supports the following languages:
#   'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
#   'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
html_search_language = 'zh_TW'

# A dictionary with options for the search language support, empty by default.
# Now only 'ja' uses this config value
html_search_options = {'dict': '_extension/dict/zh.dict'}
sphinx.ext.search.zh_TW 的字典檔是用結巴中文分詞的 dict.txt.big ,不設定 html_search_options 的話,會使用結巴中文分詞的預設字典

參考

2015年4月21日 星期二

常用的 SyntaxHighlighter 參數

brush 指定程式語言,first-line 和 highlight 分別是開始和要反白的行號
...
會顯示為
#include <stdio.h>

int main(void)
{
    printf("hello, world\n");
    return 0;
}
如果不要顯示行號
...
常用的程式語言

Brush name Brush aliases
Bash/shell bash, shell
C++ cpp, c
CSS css
Diff diff, patch
JavaScript js, jscript, javascript
Java java
Perl perl, pl
PHP php
Plain Text plain, text
Python py, python
Ruby rails, ror, ruby
Scala scala
SQL sql
XML xml, xhtml, xslt, html, xhtml

參考

2015年4月20日 星期一

C/C++ snippet: between_addr()

#include <errno.h> /* errno */
#include <arpa/inet.h> /* htonl */
#include <netinet/in.h> /* in_addr_t */

/**
 * @param start start IP adress in host byte order
 * @param end end IP address in host byte order
 * @param addr_cb callback
 * @param data callback argument.
 * @return If failed, between_addr() returns -1. Otherwise, retrun a value from callback
 */
int between_addr(uint32_t start, uint32_t end, int (*addr_cb)(in_add_t, const void *), void *data)
{
    int ret = -1;
    uint32_t addr, limit;

    if (!addr_cb) {
        errno = EINVAL;
        return ret;
    }

    addr = start < end ? start : end;
    limit = start > end ? end : start;

    for (; addr < limit; addr++) {
        ret = addr_cb(htonl(addr), data);
        if (!ret)
            break;
    }

    return ret;
}

Sphinx 的中文搜尋

最簡單的方式就是直接用日文分詞演算法

修改專案目錄下的 conf.py
...

# Language to be used for generating the HTML full-text search index.
# Sphinx supports the following languages:
#   'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
#   'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
html_search_language = 'ja'

# A dictionary with options for the search language support, empty by default.
# Now only 'ja' uses this config value
html_search_options = {'type': 'default'}

參考

2015年4月13日 星期一

Sphinx 匯出 HTML 到指定路徑

Sphinx 匯出 HTML 的預設路徑在專案目錄下的 _build/html
  $ make html
  $ ls _build
  doctrees html
而在 _build 下會產生快取的目錄 doctrees

匯出到指定路徑只要在專案目錄下執行
  $ sphinx-build -d _build/doctrees . /usr/local/nginx/html
其中 -d 是指定快取的目錄,/usr/local/nginx/html 是匯出的目錄

Sphinx 匯出中文 PDF

安裝 MacTeX

修改專案目錄下的 conf.py
...

language = 'zh_TW'

...

latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
'papersize': 'a4paper',

# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',

'classoptions': ',english',
'inputenc': '',
'utf8extra': '',

# Additional stuff for the LaTeX preamble.
'preamble': '''
\usepackage{xeCJK}
\setCJKmainfont[BoldFont=Heiti TC, ItalicFont=STKaiti]{Heiti TC}  % 設定中日韓字型
\setCJKmonofont[Scale=0.8]{Courier New}  % 設定中日韓等寬字型
\XeTeXlinebreaklocale "zh"  % 設定斷行演算法為中文
\XeTeXlinebreakskip = 0pt plus 1pt  % 設定中文字距與英文字距
''',

# Latex figure (float) alignment
#'figure_align': 'htbp',
}
字型可以參考網頁中英文字型(font-family)跨平台設定最佳化或檢視系統已安裝的字型
  $fc-list :lang=zh-tw
匯出 PDF
  $ make latex
  $ cd _build/latex
  $ xelatex *.tex

參考

2015年4月9日 星期四

C/C++ snippet: calc_network(), calc_broadcast()

計算網段
#include <netinet/in.h> /* in_addr_t */

in_addr_t calc_network(in_addr_t addr, in_addr_t netmask)
{
        return addr & netmask;
}
計算 broadcast
#include <netinet/in.h> /* in_addr_t */

in_addr_t calc_broadcast(in_addr_t addr, in_addr_t netmask)
{
        return addr | ~netmask;
}

修改 Sphinx 的佈景主題

幾個不錯的佈景主題

Read the Docs Sphinx Theme

安裝
  $ pip install sphinx_rtd_theme
修改專案目錄下的 conf.py
import sphinx_rtd_theme

...

html_theme = "sphinx_rtd_theme"
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]

Sphinx Bootstrap Theme

安裝
  $ pip install sphinx_bootstrap_theme
修改專案目錄下的 conf.py
import sphinx_bootstrap_theme

...

html_theme = "sphinx_bootstrap_theme"
html_theme_path = [sphinx_bootstrap_theme.get_html_theme_path()]

Solar Theme

安裝
  $ pip install solar-theme
修改專案目錄下的 conf.py
import solar

...

html_theme = "solar"
html_theme_path = [solar.get_html_theme_path()]

2015年4月8日 星期三

使用 Sphinx 製作文件

安裝 Sphinx
  $ pip install sphinx
指定專案名稱、作者、版本,使用 EPUB 來建立文件專案
  $ sphinx-quickstart -q -p example -a author -v 1.0.0 --epub docs
或以互動的方式,回答問題來建立
  $ sphinx-quickstart docs
建完會產生一個專案目錄
  $ tree docs
  docs
  ├── Makefile
  ├── _build
  ├── _static
  ├── _templates
  ├── conf.py
  ├── index.rst
  └── make.bat

  3 directories, 4 files
直接編輯 index.rst 就可以開始撰寫文件了,語法可以參考 A ReStructuredText Primer

執行
  $ make html
  $ make singlehtml
  $ make epub
  $ make latexpdf
分別匯出 HTML、EPUB 和 PDF 在 _build 目錄底下,匯出 PDF 要先安裝 MacTeX

參考

2015年4月2日 星期四

Mac OS terminal 下啟動 Sublime Text

$ ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl ~/bin/subl
localhost$ subl

2015年4月1日 星期三

使用 Virtualenv 建立獨立的 Python 環境

安裝 virtualenv
$ pip install virtualenv
建立 Python 虛擬環境
$ virtualenv ENV
可以加 --python 指定版本
$ virtualenv --python=python2.7 ENV
或加 --no-site-packages 不依賴系統已安裝的 Python 套件
$ virtualenv --no-site-packages ENV
其中 ENV 是放虛擬環境的目錄,刪除目錄就可以移除虛擬環境。

啟動虛擬環境
$ source ENV/bin/activate
離開虛擬環境
(ENV)$ deactivate
撰寫 script 也可以指定虛擬環境
#!/path/to/ENV/bin/python

...
參考

2015年3月30日 星期一

動態檢視範本下使用 SyntaxHighlighter

發表文章的 HTML 加入
<script type="text/javascript">
  SyntaxHighlighter.highlight();
</script>
參考

vim modeline

在文件的開頭或結尾加上
// vim: ts=4 sw=4

/* vim: ts=4 sw=4
*/
在 vimrc 加上
set modeline