2014年7月28日 星期一

[Linux][script] gif 回放 script

因為每次看 gif 圖片,都會看到像這樣的東西:
覺得好像最後跳躍的感覺很不自然,所以心裡想說,用回放的機制就可以讓 gif 看起來比較自然了不是?
所以就用 imagick tool 寫了一個 script ,然後產生下面的結果:
這兩個結果,應該看得出來,下面那個比較自然一點了。(有嗎?

好啦,反正就是一個工具而已,試試看

2014年7月1日 星期二

[Linux] Gnome-Shell Extension 推薦

Gnome-Shell 是這兩年 Linux 發行版上比較常見的視窗介面。它的特點除了漂亮之外,就是它的延伸套件(extension)相當容易撰寫。因此官方特別為了延伸套件的功能提供了一個安裝網站,你可以在 https://extensions.gnome.org/ 很簡單的找到最新公開的延伸套件,也可以在 https://extensions.gnome.org/local 管理自已已經安裝的延伸套件。

但是怕大家不知道要裝什麼延伸套件,所以今天才來推薦幾個簡單又必安裝的延伸套件 :

頭一個就是天氣功能(Open Weather):


特點就是有台灣的地標。(但是可惜不是每一個縣市都有測點,所以反正它是開源軟體,或許之後可以修改這個延伸套件成為適合台灣的版本)

第二個是輸入法指示區(Input Method Panel):


特點就是因為大家都不喜歡 ibus ,所以 gnome-shell 上面還是需要一個不是 ibus 的輸入法指示區來說明現在輸入法的狀態。

第三個就是處理 alt + tab 的問題(Alternate Tab):

其實在官網上面還有好幾個延伸套件也不錯,不過我選了一個比較陽春簡單的,但是不論是哪一個都還是很不習慣預設的操作方式,還好我們還有別的選擇。

最後一個要推薦延伸套件是 gpaste integration

Gpaste 是 gnome 上面類似 xclip 可以把 command line 的 i/o 丟到 X 的剪貼簿的工具。但跟Clipboard indicator 不同的是,這個延伸套件需要 gpaste 的支援,所以你還需要安裝 gpaste,如果不想裝,可以只裝 Clipboard indicator 就好,但是 gpaste 這個功能真的蠻好用的,不但可以保留剪貼簿過去的歷史,還可以按個滑鼠右鍵就刪除跟調整,避免某些不想要留在歷史裡的東西被看到。

2014年6月15日 星期日

[Linux][Fedora] Fedora 20 上面安裝 fcitx

其實 Fedora 20 發布一段時間了,但是 ibus 的使用一直都覺得很不趁手,所以也難怪常常都看到人家把 ibus 移除然後裝 gcin 或 fcitx 的情況。這邊要記錄一下 Fedora 20 安裝 fcitx 輸入法的流程:

1. 移除 ibus
2. 安裝 fcitx
3. 指定輸入法
4. 設定 fcitx

1. 移除 ibus 的動作:
sudo yum remove ibus 

2. 安裝 fcitx: (這邊需要安裝最起碼是 fcitx fcitx-table-chinese fcitx-configtool fcitx-qt4,但是我偷懶,所以我就直接下 fcitx*)
sudo yum install fcitx* 

3. 指定輸入法,這邊也需要解除 gnome 對 ibus 的依賴,所以要先下:
gsettings set org.gnome.settings-daemon.plugins.keyboard active false 
然後查看一下你的輸入法目前的狀態,應該要下面這樣:
$ imsettings-info 
Xinput file: /etc/X11/xinit/xinput.d/fcitx.conf
GTK+ immodule: fcitx
Qt immodule: fcitx
XMODIFIERS: @im=fcitx
XIM server: /usr/bin/fcitx -D
Preferences: /usr/bin/fcitx-configtool 
Auxiliary:  
Short Description: FCITX
Long Description: 
Icon file: /usr/share/pixmaps/fcitx.png
Is system default: TRUE
Is user default: TRUE
Is XIM server: FALSE

所以我們需要修改 bash 環境,加入這三樣:
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx" 

可以直接用 vim 加到 /etc/profile 最下面,或著加入自已的 $HOME/.bashrc 就好。

這邊因為 ibus 移除了,所以理論上應該 imsettings-info 出來就只有 fcitx 可以選,它應該會自已跳成 default ,
如果沒有的話,就乾脆安裝 im-chooser 來選擇 fcitx 。

4. 設定 fcitx:這邊不想講輸入法表格的部份,想講的是 gnome3 的 panel ,可以開 firefox 安裝 input method panel。有輸入法的 status 的話,使用才會方便。如果要設定輸入法的話,可以再按裡面的 "IM Settings"


------
參考資料:
* http://shliyae.blogspot.tw/2013/07/fedora-19-fcitx.html
* http://yanue.net/post-140.html
* http://forum.ubuntu.org.cn/viewtopic.php?f=35&t=454042

2014年2月10日 星期一

[tiny] firefox 跟 google-chrome 跳過擋 port 的限制

Google 跟 firefox 都會針對某些安全上的考量,所以不允許用某些 port 來瀏覽網路。所以像 http://URL:110/ 或 http://URL:21/ 這樣的 URL 都會被擋下來,避免非法的使用。

但是這樣的使用方式,其實在某些 MIS 管的很嚴雞婆的時候,就會造成妨礙。

所以這篇要簡短註記一下, firefox 跟 google-chrome 怎麼跳過這種限制:

firefox 是在 pref.js 底下加入:
user_pref("network.security.ports.banned.override", "110,21"); 

google-chrome 是在 command line 底下加入:
--explicitly-allowed-ports=601

--
2014-02-20 更新:
google-chrome 在 linux 底下啟動 script 的修正有點麻煩,改在 google-chrome.desktop 底下基本上是沒辦法用到 xdg-open 上面的,所以要更新到 /usr/bin/google-chrome 的啟動的 script 裡面去:
--- /usr/bin/google-chrome.old      2014-02-20 10:21:54.072225459 +0800
+++ /usr/bin/google-chrome   2014-02-20 10:21:03.460228563 +0800
@@ -48,5 +48,6 @@
   fi
 fi
 
+EXTRA_OPT="--explicitly-allowed-ports=110,21"
 # Note: exec -a below is a bashism.
-exec -a "$0" "$HERE/chrome" --user-data-dir="${XDG_CONFIG_HOME:-${HOME}/.config}/google-chrome-unstable" "$@"
+exec -a "$0" "$HERE/chrome" --user-data-dir="${XDG_CONFIG_HOME:-${HOME}/.config}/google-chrome-unstable" "$@" $EXTRA_OPT

--
參考資料:
* http://www-archive.mozilla.org/projects/netlib/PortBanning.html
* https://productforums.google.com/forum/#!topic/chrome/wVmm0ZPexbA

2013年12月10日 星期二

[HACK] IP-CAMERA ID002A firmware backup [2]

之前寫過這篇 Hack ID002A Camera 的記錄,成功的更新 WebCam 的 script。

後來在 chrome 上面找到 tampermonkey 可以直接修改 script ,就寫了下面 script 出來,現在可以直接使用方向鍵上、下、左、右來控制 webcam 的方向了。

// ==UserScript==
// @name My Fancy New Userscript
// @namespace http://use.i.E.your.homepage/
// @version 0.1
// @description enter something useful
// @match http://YOUR_WEBCAM_URL:PORT/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js
// @copyright 2012+, You
// ==/UserScript==
document.body.onkeydown = function(e){
var lbl, cmd;
switch (e.which) {
case 38: /* Up */
lbl = "Up";
break;
case 40: /* Down */
lbl = "Down";
break;
case 37: /* Left */
lbl = "Left";
break;
case 39: /* Right */
lbl = "Right";
break;
}
cmd = "/cmd.xml?cmd=moveptz&tick=100&dir=btnPtz" + lbl + "&nPtzTimes=0";
$.ajax({url: cmd, success:function(event){
var cmd = "/cmd.xml?cmd=moveptz&tick=100&dir=none&nPtzTimes=0";
$.ajax({url: cmd });
}});
};


--
參考資料:
[HACK] IP-CAMERA ID002A firmware backup

2013年11月13日 星期三

[Linux][Kernel] MAC_FMT 跟 NIPQUAD_FMT

在寫 kernel module 的時候,我們常常會需要寫到 ip format 的的資料印出來 debug,但是每次都
printfk("%d.%d.%d.%d") 寫到累,後來發現原來這樣寫就可以:
printk(KERN_INFO "br0 ip:"NIPQUAD_FMT"\n", NIPQUAD(br0_in_dev->ifa_list->ifa_address));
然後接著又發現了,原來常用的 ip 有這種簡單的 macro 定義,當然 mac address 也會有:
#define MAC_ARG(x) ((u8*)(x))[0],((u8*)(x))[1],((u8*)(x))[2],((u8*)(x))[3],((u8*)(x))[4],((u8*)(x))[5]
printk("sa = '"MAC_FMT"' \n", MAC_ARG(mach->h_source));

這是早就發明好的輪子,如果不會用的話,是不是很可惜呢?

2013年11月11日 星期一

[Linux][FUSE] 在 Linux 上面使用 google drive 的方法

由於 Google 官方並不提供 google drive 的工具,所以在 Linux 上面只能使用 web 介面來存取 Google Drive 上的檔案。這點對 Linux 上面 Google Drive 的使用者而言實在是一大遺憾。還好有人找出了可以使用 Google Drive 的方法,就是使用 Linux 上面已經很常見的 fuse 的 solution。

(總共四個步驟)
第一步:
你需要先安裝 google-drive-ocamlfuse ,所以在 debian 上面你可以這樣下: $ sudo apt-get install ocaml camlp4-extra
$ git clone https://github.com/OCamlPro/opam.git
$ cd opam
$ ./configure
$ make
$ sudo make install
$ sudo apt-get install m4 libcurl4-gnutls-dev libfuse-dev libsqlite3-dev
$ opam init
$ opam update
$ opam install google-drive-ocamlfuse

在 fedora 上面可以這樣下:
$ sudo yum install ocaml ocaml-camlp4-devel ocaml-ocamldoc
$ git clone https://github.com/OCamlPro/opam.git
$ cd opam
$ ./configure
$ make
$ sudo make install
$ sudo yum install m4 fuse fuse-devel libcurl-devel libsqlite3x-devel zlib-devel
$ opam init
$ opam update
$ opam install google-drive-ocamlfuse

裝完之後需要在你的 PATH 裡面加入 $HOME/.opam/system/bin
原文是建議在 .bashrc 裡面加入。

第二步 你需要把自已的 id 加入 fuse 的群組
$ sudo usermod -a -G fuse
$ exec su -l $USER


第三步 獲得 Google 的授權,在 console 底下執行
google-drive-ocamlfuse
它會呼叫瀏覽器,然後給予你的 application 一份授權認證。

第四步,也是最後 執行 google-drive-ocamlfuse ~/googledrive
如果是 gnome 的使用者的話,可以在 .config/autostart 裡面加入一個 local_start.desktop 的檔案內容會像是:
[Desktop Entry]
Name=Local Start
GenericName=File Synchronizer
Comment=Sync your files across computers and to the web
Exec=/home/xxxxx/.local/bin/autostart
Terminal=false
Type=Application
Icon=dropbox
Categories=Network;FileTransfer;
StartupNotify=false
Name[zh_TW]=local_start.desktop
GenericName[zh_TW.utf8]=local start
Comment[zh_TW.utf8]=local my start script

然後再在這個 .local/bin/autostart 的 script 裡面加入上面提到的 google-drive-ocamlfuse ~/googledrive 執令就可以。

2013-12-03 更新:忘了附上 原文出處