Call Call Graph

Posted on Tue 09 January 2018 in note • Tagged with cscope, graphviz, dotLeave a comment

為了讀 OAI 的程式碼,一直找一些 call graph 的工具。最後用了 chihchun 好久以前寫的 callgraphviz 來改成 Call Call Graph

叫 Call Call Graph 只是因為我要畫 caller 與 callee。大架構沒有改太多,還是照原本的用 cscope 當後端的資料庫。查詢後生出 dot 的圖再餵給 xdot 來畫圖。花最多時間的就是查 python 3 的語法及 PyGObject 的 api。

我自己加了可以把現在的查詢資料清掉的功能,只要按一下 reload 鈕就可以清掉。不然累積太多查詢會造成節點太多。另外加了可以忽略特定 symbol 的功能,因為我會把 function 的 …

Continue reading

本地 debug GitLab CI

Posted on Sun 17 September 2017 in note • Tagged with gitlab, gitlab-ciLeave a comment

最近在自己的小專案設定 GitLab-CI 發生了很多問題,但是 debug 很麻煩。每次都要修改再 push。於是找了一下發現可以很簡單的本地端 debug。

  • 安裝 docker
  • 安裝 gitlab-ci-multi-runner
  • 執行 gitlab-ci-multi-runner exec docker {test_name}

收工

ref. How to: Debug GitLab CI Builds Locally

Continue reading

pdftk 移除 pdf 的浮水印

Posted on Mon 19 June 2017 in note • Tagged with pdf, linux, pdftk, watermarkLeave a comment

目標:移除 pdf 中的文字浮水印

手上有一些 pdf 有浮水印,突然想要移除看看。找了一下 pdftk 可以做到這件事。Superuser 上的 How to remove watermark from pdf using pdftk? 寫得很清楚又簡單。

做修改之前應該要先備份原檔

做修改之前應該要先備份原檔

做修改之前應該要先備份原檔

步驟

1. 把壓縮過的 pdf 解壓縮

如果你的 pdf 有被壓縮,要先解壓縮

pdftk input.pdf ouput uncompress.pdf uncompress

2. 把浮水印的文字去除

sed -e "s/watermarktextstring/ /g" uncompress.pdf …
Continue reading

Tmux dump buffer to file

Posted on Tue 28 March 2017 in note • Tagged with tmux, linux, utllsLeave a comment

tmux buffer 中的資料寫到檔案中

參考 Unix stackexchange

prefix + :, then type in capture-pane -S -3000

上面這行把 3000 行的資料複製到 buffer 中。

prefix + : again, and type in save-buffer filename.txt

上面這行把 buffer 中的資料寫到 filename.txt

prefix 預設值是 Ctrl+b

Continue reading

Find 排除目錄

Posted on Wed 15 March 2017 in note • Tagged with find, linux, utllsLeave a comment

使用 find 可以很簡單的找出目標檔案來做處理,記錄一下要排除特定目錄怎麼做。

目標是排除 .git 下的所有檔案

find . -path "./.git/*" -prune -o -type f -exec blahblah {} \;

blahblah 就是要對每個檔案做處理的程式。

單元解釋

-path "./.git/*" -prune

除去 (-prune) 路徑符合 ./.git/* 的部分

-o -type f -exec blahblah {} \;

或者是 (-o) 找出類別是檔案 (-type f) 的項目交給程式處理 ( -exec blahblah {} \; )

Continue reading

Tex 數學式

Posted on Wed 02 November 2016 in note • Tagged with tex, mathLeave a comment

render_math 可以把 tex 語法的數學式畫出來。語法參考 MathJax

範例 - inline

$e=mc^2$

這是行內數學式的範例: \(e=mc^2\) 這樣就可以了。

範例 - block

$$e=mc^2$$
$$e=mc^2$$

範例 - block with label

\begin{equation}
    \label{eq}
    X^2
\end{equation}

\begin{equation}
    \label{eq2}
    e=mc^2
\end{equation}

Ref: \ref{eq}

Ref: \ref …
Continue reading

Kernel Support for miscellaneous Binary Formats

Posted on Thu 20 October 2016 in note • Tagged with linux, kernel, binfmtLeave a comment

Linux Kernel 文件 binfmt_misc.txt 提到的功能。主要就是告訴 kernel 如果把特定的檔案當成執行檔來呼叫。判斷的方式分成 extension 及 magic。

第一步掛載 binfmt_misc

mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc 

向 binfmt 註冊你的格式

註冊字串組成

:name:type:offset:magic:mask:interpreter:flags
  • name 是識別用的字串,註冊後會出現在 /proc/sys/fs/binfmt_misc
  • type 有 MEM 就是 magic number …
Continue reading

Lua 處理 UTF-8 字串

Posted on Mon 17 October 2016 in note • Tagged with lua, utf8Leave a comment

最近要用 Lua 處理 UTF-8 字串,但是 Lua 到了 5.3 才開始支援 UTF-8。

UTF-8 字串長度及複製

我的需求很簡單,只要判斷字串長度及類似 strncpy 的字串複製。所以直接利用 Lua 5.3 手冊 提到的 charpattern 來進行字串的操作。

[\0-\x7F\xC2-\xF4][\x80-\xBF]*

utf8len

function utf8len(s)
    _, len = string.gsub(s, '([\0-\x7F\xC2-\xF4][\x80-\xBF]*)', '%1')
    return len …
Continue reading

Pelican 裝 ligquid tags plugin

Posted on Mon 17 October 2016 in note • Tagged with graphviz, pelican, pythonLeave a comment

為了之後要畫圖方便,加裝了 ligquid tags 的 plugin。方法很簡單只要加入 PLUGIN_PATHSPLUGIN 即可。

PLUGIN_PATHS = ['../pelican-plugins']
PLUGINS = ['liquid_tags.graphviz']

之後底下的 dot 語言就可以畫出 graphviz 的圖了。

{% graphviz
    dot {
        digraph graphname {
            a -> b -> c;
            b -> d;
        }
    }
%}

但是

因為我用的是 Python 3 會因為 base64.b64encode 會輸出 byte string。這會導致 inline base64 encodeing 的格式跑掉,所以圖會出不來。改了一下程式碼發了個 PR #798

底下是 …

Continue reading

Lua 中的 ipairs 與 pairs 的差異。

Posted on Fri 07 October 2016 in note • Tagged with luaLeave a comment

PIL 7.3 – Stateless Iterators 中有提到

ipairs, which iterates over all elements in an array, as illustrated next

The pairs function, which iterates over all elements in a table

也就是說 ipairs 是遍歷 array (Lua 中以數字為 index 的 table, 1 為起始),而 pairs 則是遍歷 table 中所有的元素。

當你把 Lua 的 table …

Continue reading