pretty code

2018年2月27日 星期二

debug binary 檔案

有時候在 parsing log 時,可能因為 log 很大,故開啟時需要很久的時間﹝VIM 在開幾百 MB 檔案時的速度還可以﹞。

如果我們有類似底下的工具,在 Windows 下工作起來就會很方便,可以指定要顯示的行數,幫助我們快速看到內容,使用 C 語言開發不到 100 行即可。


2018年2月26日 星期一

grep binary 檔案

使用 grep parse log 時
如果 log 裡面有非 ASCII 字元時,比如說 0x00
此時 grep 會誤認為檔案為 binary 檔案
故無法 line by line 顯示

此時只要簡單加上 --text 選項即可

MongoDB connection URI

如果 MongoDB 有設定 auth 認證
連線字串大概會類似下面這樣
mongodb://username:password@localhost:27017

由於此字串是用 '@' 來分隔帳密設定及伺服器 IP
假設密碼也有用到 '@' 就會造成切割字串的問題

此時只要遵照 URI encode 的規則
將特殊字元 encode 即可

不過不同程式語言 API 的實做可能不同
PHP 只要 encode 特殊字元即可
其他語言也許是用 options array 的方式來設定帳密
這部份就得參考各 API 的說明文件

2018年2月14日 星期三

Init MongoDB database with javascript

MongoDB Version:3.6

Steps:
1. run mongod
2. run mongo
3. load('xxxx.js')
4. run "init()"

the content of xxxx.js

var d_admin = {
    user: 'd_admin',
    pwd: 'xxxx',
    roles: [
        {
            role: 'readWrite',
            db: 'test'
        }
    ]
}

var d_user = {
    user: 'd_user',
    pwd: 'xxxx',
    roles: [
        {
            role: 'read',
            db: 'test'
        }
    ]
}

var admin = {
    user: 'root',
    pwd: 'xxxx',
    roles: [
        {
            role: 'root',
            db: 'admin'
        }
    ]
}

function init() {
    db = connect('localhost:27017');
    db = db.getSiblingDB('admin');
    db.createUser(admin);

    db = db.getSiblingDB('test');
    db.createCollection('collection1');
    db.createCollection('collection2');
    db.createUser(d_admin);
    db.createUser(d_user);
    db.getLastError();
}