mat的聚會手記
penguin.png

Hihi, 我是 Mat. 我用 gentoo ~


2014-06-19

來源: 2014-06-19
如何正確的取得使用者 IP?
http://devco.re/blog/2014/06/19/client-ip-detection/

2014-04-24

來源: 2014-04-24
https://wiki.openstack.org/wiki/UnifiedInstrumentationMetering
http://imansson.wordpress.com/2012/10/05/graphite-and-sensu/
http://www.postplanner.com/6-facebook-reporting-tools-in-depth-analysis-fan-pages/

2014-04-17

來源: 2014-04-17
Ganglia Monitoring System
http://ganglia.sourceforge.net/

2014-03-27

來源: 2014-03-27
http://michael.mulqueen.me.uk/projects/zimcapture/

wmii => qtile

zim —plugin quicknote input=clipboard &
http://zim-wiki.org/manual/Plugins/Quick_Note.html

BTSync

每週都記一點

+Daniel
btsync 好用,但是要小心使用,我之前沒有備份就玩他了,結果好像有些檔案被自動刪除了,好像沒有SYNC好
含有 FOLDER 如果太大,建議切小,之前我的哪個問題folder 有 300G,後來小心一點用,但是心理還是怕怕的。

2014-03-13

來源: 2014-03-13

#!/usr/bin/env bash

cmd_list=$( docker 2>&1 | grep -e "^Commands:" -A 9999 | grep -e '^    \w\+' | awk '{print $1}' )

for cmd in "" $cmd_list                                                                                                 
do
        opts=$( docker $cmd --help 2>&1 | grep -e '^  \-' | cut -d: -f1 | sed -e 's/^  //g' -e 's/, /\n/g' )
        for opt in $opts
        do
                printf "[ %15s , %s ]\n" "$cmd" "$opt"
        done
done

讀 docker.io 源碼心得:

之前無法執行成功的原因是 aufs fs 裡的目錄,不能再被 mount 成 aufs fs
( 因為我的系統是特製的,整個 / 目錄本身就是 aufs )
也基於相同的理由,若選用 aufs driver, 則要在 docker.io 裡再執行 docker.io daemon,也會有問題
( 選其他機制或許通以,但目前其他的 overlay 機制可能還沒辦法像 aufs 這麼好用 )
更改 / 的 mount 設定後,現在仍有部份問題,主要是在 umount 之前的 auplink 動作,有 warning
(應該無大礙,但 docker 原程式會作整個中斷,所以這部份要修改掉某些部份才行 )
另外, 在 i386 上執行的話,也要選擇 for i386 的 image ( 目前只有找到 3 個 )
就目前接觸的感覺,我覺得 docker.io 像是更進階好用的 chroot (LXC)
更好的是 docker.io 提出了一套 layers 的操作/管理/線上repos 機制,同時降低 images 製作的門檻。
這對想作 clean build / clean test 的人來說,有大大的幫助
舉例來說,若今天我想把某個程式 porting 到 debian 的 stable/testing/unstable , ubuntu 13.04/13.10, fedora, archlinux, suse,… 時,原本我可能要用 qemu, virtualbox, vmware, … 去作8個不同的image,
除了要弄 disk image, boot, install, config,.. 很久之外,在 build/test 的過程中,還要一直不斷的"手動"作 VM 的開/關/save/restore 的操作。
若今天用 docker.io 來作的話,只要到 https://index.docker.io/official 下載就可以用了,像是

for distro in debian ubuntu centos fedora
do 
  docker pull $distro
  docker run $distro "git clone PROJ_URL proj_dir; cd proj_dir; ./build.sh"
done

golang 如果 import 一個套件,就必須在程式裡用到。如果沒有用到,就會 compile error
這樣的好處是,強迫程式淘汰冗餘的部份,有助於 refactor & 程式收斂
壞處,就是很容易遇到 compile error, 就算不經意註解某行程式也會 error
docker 的 runtime 主要分 cilent/server 的架構來運作
client 端的呼叫主要是透過 /api/client.go 裡的函式來呼叫
可以在 CmdHelp() 找到 CLI 對應的指令列表
CLI 透過 runconfig.ParseSubcommand() 來處理 options
透過 ParseCommands() 跟 getMethod() 來對應 CLI 的指令跟處理函式
指令跟處理函式的對應關係是靠函式命名,
例如: "run" -> CmdRun(), "inspect" -> CmdInspect()
client 端的處理函式裡,再呼叫 cli.call() 跟 server 端的 API 互動
例如: cli.call("POST", "/containers/create?"+containerValues.Encode(), config, false)
server 端主要是 /api/server.go (舊名稱是 api.go) 裡的函式來呼叫
在 createRouter() 可以找到 API 對應的主表,
例如 /containers/create 會對應到 postContainersCreate() 的處理函式
server端裡的處理函式,會常看到 Job, Engine 這兩個資料物件的操作
docker 實際執行系統層的指令, 如 "/bin/echo", mount filesystem, 其實都是透過 Job 這個物件來包裝
大致上像是 var job = Engine.Job( 指令 + 參數 ) ,然後 job.Run() 執行
核心流程:
request -> /api/server.go -> 產生 Engine -> 執行 Engine -> 輸出/回傳 Engine 的結果
API 在 server 端的 invoke/response HTTP 的部份, 可以看 engine/http.go 的動作就可知道
其中 "執行 Engine" 的動作 => 會再轉成 "產生 Job -> 執行 Job -> 輸入/回傳 Job 的結果" 的底層動作
最底層是產生並,操作 Job 物件完成任務
amd64/386 的 check 其實是在 Engine 這一層.
Engine 是整個 docker 運作的核心物件。

Engine 裡的 handlers 有多個,而 handler 的來源可能是內建定義的預設函式,也可能來自 Job 物件
目前還無法確認 Engine ↔ Job 的關係是 1-1 還是 1 ↔ N

docker 的函式實作,主要是走 No exception 的風格,也就是說,整個函式有 10 個步驟,只要其中一步有 err, 就馬上叫這個函式收拾東西打包回家,並中斷整個 thread。
程式裡,用了不少 golang 裡的 defer() 語法,這個語法方便用作 fail handling

一些內建的 engine handle 可以在 builtins/builtins.go 裡找到
server 的啟動過程

docker/docker.go 裡的 main() 裡的 if *flDaemon 那一段
eng.Job("initserver") …. and Run()
eng.Job("acceptconnections").Run()
eng.Job("serveapi", flHosts.GetAll()…) … and Run()
api/server.go 裡的 ServerApi()
執行 ListenAndServe()
createRouter() 也就是建立 server 端的 API 指令與 handler 的對應表
httpSrv.Serve()
當 server 接到 request 時
查找 createRouter() 所建立的指令對應表 -> 找到對應的處理函式
執行該處理函式
有的直接執行,不用回傳
需要回傳 HTTP 的,執行完,結果用 Engine.ServHTTP() 來回傳結果
trace 過程中,需要一一去了解相關的物件結構,而要個別了解該物件的特性跟用法時,這時候可以去看該物件的 unit test 範例,就比較快能掌握住。
而最上面會有個 integration 的目錄,那裡面的 unit test 則可以看到不同的物件的合作方式
docker 的程式裡,有物件導向的設計,有 event/handler 的設計,加上中間聯動的關係是動態 register 的。
( docker 採用這樣設計的好處是,程式的功能方便作"水平擴充", 要新增功能,只要 copy-n-paste 對應的 cmd/handler 來新都就可以了 )
在不了解程式結構下,不容易像一般程式那樣用 gdb/strace/… 快速直接找到對應的 function call chain
這也是目前 docker 在 debug 上最麻煩的地方。
( 感謝 "果凍"建議的 runtime/debug, debug.PrintStack() 跟 fmt.Println() 的語法,發揮了很大的作用 )
這個 debug 上的問題,其實在底層多放一些丟出 debug 訊息程式片段就可以了。
不過雖然這道理大家都知道,但就以往經驗,大多數的程式還是不會這麼作。
why? 因為 "開發者都希望底層的函式越簡單、越乾淨越好,3行就可以簡潔搞定的程式,有誰會想在上面寫個 5 行註解說明,再弄個醜不拉幾,且重複又沒人看的 debug訊息呢?!"

https://bitbucket.org/matlinuxer2/mat-portage-overlay/src/7c6bf776c6e0a9f03c6c681dfbc5ed563a95a406/app-emulation/docker/docker-9999.ebuild?at=master
https://bitbucket.org/matlinuxer2/mat-portage-overlay/src/7c6bf776c6e0a9f03c6c681dfbc5ed563a95a406/app-emulation/docker/files/docker-for-i386.patch?at=master

2014-03-06

來源: 2014-03-06
http://pearlcrescent.com/products/pagesaver/
firefox 快照擷圖外掛

http://golang.org/pkg/go/build/
go 在 build 時,會看 // +build 的 directive 的參數

http://www.janoszen.com/2013/01/22/lxc-vs-openvz/

./api/api.go => server 端的,有 api entry commands 跟對應的 handler function
./api/client.go => client 端用的,有使用 cli.call( POST, ### ) 來呼叫 server 端作事

$ gpg --keyserver subkeys.pgp.net --recv-keys $_KEY; gpg -a --export $_KEY | sudo apt-key add -
apt-get build-dep docker.io
debuild -S -uc -us

[debug] api.go:972 Calling POST /containers/create
2014/03/06 20:38:22 POST /v1.9/containers/create
[/var/lib/docker|79a7489d] +job create()
invalid argument[/var/lib/docker|79a7489d] -job create() = ERR (1)
[error] api.go:998 Error: create: invalid argument
[error] api.go:105 HTTP Error: statusCode=500 create: invalid argument

[debug] api.go:975 Calling POST /containers/create
2014/03/06 21:44:04 POST /v1.9/containers/create
[/var/lib/docker|a45f950a] +job create()
[error] mount.go:11 [warning]: couldn't run auplink before unmount: exit status 22
invalid argument[/var/lib/docker|a45f950a] -job create() = ERR (1)
[error] api.go:1001 Error: create: invalid argument
/var/tmp/portage/app-emulation/docker-9999/work/docker-9999/.gopath/src/github.com/dotcloud/docker/api/api.go:105 (0x80ccfa0)
/var/tmp/portage/app-emulation/docker-9999/work/docker-9999/.gopath/src/github.com/dotcloud/docker/api/api.go:1002 (0x80f3be5)
/usr/lib/go/src/pkg/net/http/server.go:1220 (0x81f267b)
HandlerFunc.ServeHTTP: f(w, r)
/var/tmp/portage/app-emulation/docker-9999/work/docker-9999/vcd/gorilla/mux/mux.go:86 (0x8221334)
/usr/lib/go/src/pkg/net/http/server.go:1597 (0x81f3d60)
serverHandler.ServeHTTP: handler.ServeHTTP(rw, req)
/usr/lib/go/src/pkg/net/http/server.go:1167 (0x81f236e)
(*conn).serve: serverHandler{c.server}.ServeHTTP(w, w.req)
/usr/lib/go/src/pkg/runtime/proc.c:1394 (0x8061d00)
goexit: runtime·goexit(void)
[error] api.go:108 HTTP Error: statusCode=500 create: invalid argument

413 func postImagesCreate ( 這個 function 可能沒執行到 )

更新, 新找到的斷點在 engine/job.go 中的 job.Run() 函式
49 func (job *Job) Run()

2014-02-20

來源: 2014-02-20
fcitx 的 ctrl + ; 的熱鍵,好用!!!

2013-12-12

來源: 2013-12-12
這兩天 build kernel & setup wireless 發現無線網路的架構在變革中
原本的 wext => mac80211 + cfg80211 + nl80211
一些無線網路的應用程式還沒有全面支援 cfg80211,所以 kernel config要加上 CONFIG_CFG80211_WEXT 來作舊的相容性
另外,發現有網路的命令列也有有另一個整合的趨勢 ifconfig + route + iwconfig => ip + iw
http://www.crifan.com/files/doc/docbook/linux_wireless/release/htmls/ch05_linux_wireless_lan_80211.html
http://wireless.kernel.org/en/developers/Documentation/mac80211
http://wireless.kernel.org/en/developers/Documentation/cfg80211
http://wireless.kernel.org/en/developers/Documentation/nl80211
https://blueprints.launchpad.net/wicd/+spec/support-ip-iw

iw dev wlan0 scan
wpa_supplicant -Dnl80211 -c/etc/wpa_supplicant/wpa_supplicant.conf -iwlan0
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="Your SSID Here"
    proto=RSN
    key_mgmt=WPA-PSK
    pairwise=CCMP TKIP
    group=CCMP TKIP
    psk="YourPresharedKeyHere"
}
dhcpcd wlan0

2013-11-28

來源: 2013-11-28
郵件行銷大師 - 大量郵件寄送、追蹤、報表
http://www.welldevelop.com/cht/Email_Marketer.php

Social Plugins - Facebook Developers
https://developers.facebook.com/docs/plugins/

2013-08-08

來源: 2013-08-08

Dropbox 容量不夠用? 最近看到分散式的 btsync ( BT 作者最新力作~ )
有支援手機, 桌機, Linux

http://labs.bittorrent.com/experiments/sync.html

2013-07-25

來源: 2013-07-25

VIM 快速切換註解的方式

function! CommentToggle()
    execute ':silent! s/\([^ ]\)/\/\/ \1/'
    execute ':silent! s/^\( *\)\/\/ \/\/ /\1/'
endfunction
map <F7> :call CommentToggle()<CR>

2013-07-18

來源: 2013-07-18

TabNavigator

快速將 git mergetool with vimdiff 的 3-way 改成 left-right 比對的熱鍵組合

:% diffget 2
:w
:wincmd q
:wincmd q
:b1
:wincmd =
:wincmd k
:wincmd q
:wincmd w
zR
:wincmd l
zR
:wincmd h
zR
:wincmd l
:set wrap
:wincmd h
:set wrap

感謝asil提示: 可以用 vim cmdalias

"給 mergetool 用的熱鍵
map <F7> :% diffget 2 <CR> :w <CR> :wincmd q <CR> :wincmd q <CR> :b1 <CR> :wincmd = <CR> :wincmd k <CR> :wincmd q <CR> :wincmd w <CR> zR <CR> :wincmd l <CR> zR <CR> :wincmd h <CR> zR <CR>
map <F8> :% diffget 1 <CR> :w <CR> :wincmd h <CR> :wincmd q <CR> :wincmd = <CR> :wincmd k <CR> :wincmd q <CR> :wincmd w <CR> zR <CR> :wincmd l <CR> zR <CR> :wincmd h <CR> zR <CR>
map <F9> :wincmd l <CR> :set wrap <CR> :wincmd h <CR> :set wrap <CR>

2013-05-23

來源: 2013-05-23

http://fafeng.blogbus.com/logs/154969025.html

2013-04-11

來源: 2013-04-11

http://www.commandlinefu.com/commands/browse

git diffall + beyond compare
git ls-files —exclude-standard —ignored

http://codicesoftware.blogspot.com/2011/09/merge-recursive-strategy.html

2013-03-28

來源: 2013-03-28

http://blog.longwin.com.tw/2012/02/vim-align-text-plugin-tabular-2012/

如何讓你程式生產力倍增
http://www.proginosko.com/leechblock.html

2013-03-14

來源: 2013-03-14
gif89a
http://qtile.org/
tree tab https://addons.mozilla.org/zh-tw/firefox/addon/tree-style-tab/
keefox => 支援 keepass <—> firefox

2012-12-06

來源: 2012-12-06

CSS 3D
http://www.paulrhayes.com/2010-09/3d-css-cube-ii-touch-gestures-click-and-drag/

2012-11-29

來源: 2012-11-29
https://github.com/AgoristRadio/bmosh/blob/master/bmosh

2012-10-25

來源: 2012-10-25
自製 AWS Image. ( from scratch )
http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/creating-loopback-s3-linux.html

py2exe, cxfreeze

2012-10-11

來源: 2012-10-11
http://www.slideshare.net/toomore/ksdg-python-and-mongodb-for-web-14584791
投影片對 mongodb 的介紹很不錯~

2012-10-04

來源: 2012-10-04

我的 PyQt 啟蒙教材:
http://gumuz.nl/weblog/pyqt-designer-video-tutorial/

2012-09-20

來源: 2012-09-20
to ben6: zim , a desktop wiki,我的筆記軟體,好用!!
Zim 也有像 evernote一樣,可以從網頁快抓資料記在筆記的功能
Launchpad project page: https://launchpad.net/zimcapture
Source: http://zim-wiki.org/extras.html

2012-09-13

來源: 2012-09-13
http://www.thewebhostinghero.com/articles/simple-apache-optimization-tip.html

2012-09-06

來源: 2012-09-06
to amos: 感謝介紹 cherrytree 這個軟體。這裡有一個跟 zim 的討論比較
https://lists.launchpad.net/zim-wiki/msg00701.html

2012-08-23

來源: 2012-08-23
目前已收集的照片
https://www.dropbox.com/sh/ffup9zc89i4k9jl/72WObHprib
https://www.dropbox.com/sh/ffup9zc89i4k9jl/E5dJ-j-cVr/H4%20Album

這幾天偶然逛到這個網頁 http://ethercalc.tw/
唯一一頁就將該交待的交待完,該有的都有,不該有的都沒有,同時兼顧一般用戶跟開發者,實在是太精典了!

2012-08-02

來源: 2012-08-02
https://addons.mozilla.org/en-us/firefox/addon/its-all-text/
設定一個執行檔 $HOME/__script/xvim

#!/usr/bin/env bash
evilvte -e vim "$@"

然後將 $HOME/__script/xvim 設成 its-all-text 的執行程式

2012-07-19

來源: 2012-07-19
http://www.redmine.org/projects/redmine/wiki/Rest_api_with_php

2012-06-28

來源: 2012-06-28
http://www.phoronix.com/scan.php?page=news_item&px=MTEyNDY
http://jsunpack.jeek.org/
http://lwn.net/Articles/105375/

2012-06-21

來源: 2012-06-21
這週裝了 Redmine 來用 ( 好難裝啊 … )

#!/usr/bin/env bash
ROOT=$( dirname $( readlink -f $0 ) )
REDMINE_DIR="$ROOT/redmine-2.0"
aptitude install -y ruby rubygems
aptitude install -y ruby-dev # fixed: mkmf LoadError bug
aptitude install -y sqlite3 libsqlite3-dev
aptitude install -y sqlite3 mercurial
aptitude install -y make gcc
aptitude install -y libfcgi-dev
gem install --no-rdoc --no-ri rails -y
gem install --no-rdoc --no-ri bundler
gem install --no-rdoc --no-ri sqlite3-ruby
gem install --no-rdoc --no-ri ruby-fcgi 
if [ ! -d  "$REDMINE_DIR" ]; then
        hg clone --updaterev 2.0-stable https://bitbucket.org/redmine/redmine-all $REDMINE_DIR
fi
pushd . ; cd $REDMINE_DIR
        export RAILS_ENV=production
        bundle install --without development test mysql postgresql rmagick
        rake generate_secret_token
        rake db:migrate
        rake redmine:load_default_data
        chown -R www-data:www-data files log tmp
popd

/etc/apache2/sites-available/redmine:
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName localhost
        DocumentRoot /home/redmine/redmine-2.0/public/
        RailsEnv production
        <Directory /home/redmine/redmine/redmine-2.0/public/>
                Options Indexes ExecCGI FollowSymLinks 
                Order allow,deny
                allow from all
                AllowOverride all
        </Directory>
</VirtualHost>

記得要裝 libapache2-mod-passenger,不然網站會跑超慢,記憶體被吃光光~
grub2用 iso開機的選單範例
set default=0
insmod tga
background_image ($root)/boot/grub/xbmc.tga
set color_normal=cyan/blue
set color_highlight=white/blue
search --no-floppy --label --set=root live-boot-usb
menuentry "TinyCore-current.iso" {
        loopback loop /boot/iso/TinyCore-current.iso
        linux (loop)/boot/vmlinuz quiet cde
        initrd (loop)/boot/core.gz
}

另一個看到的方法是:
menuentry "Fedora-15-i686-Live-Desktop ISO" {
  loopback loop /Fedora-15-i686-Live-Desktop.iso
  set root=(loop)
  chainloader +1
  boot
}

但沒有試成功,不知道有沒有人有成功過?
另外也看到另一個用法是:
map (hdX,Y)/your.iso (hdZ)
map --rehook
chainloader (hdZ)+1
rootnoverify (hdZ)
boot

一樣沒有試成功.

2012-06-14

來源: 2012-06-14

#!/usr/bin/env bash

function pipe_in_python() {

python -c "$(cat <<EOPY
import sys
for line in sys.stdin:
        print line.replace( 'asdf', 'ASDF' ),
EOPY
)"

}

echo "asdf.asdf.asdf.e" | pipe_in_python | cut -c5-15

p.s. Thanks to Thinker, hychen, and LCamel's feedback

2012-05-31

來源: 2012-05-31
數控板: ramps 1.2
arduino板: mega1280
Arduino 的 "WProgram.h" 在 1.0 版之後,改成了 "Arduino.h", 記得將

  #include "WProgram.h"

換成
  #include "Arduino.h"

https://github.com/adafruit/DHT-sensor-library/issues/1https://github.com/adafruit/DHT-sensor-library/issues/1

2012-05-24

來源: 2012-05-24
想問的問題:
xdg 是什麼? 如何變更設定?

xdg-mime query filetype /tmp/zim-live/print-to-browser.html
xdg-open http://www.google.com
xdg-open /tmp/zim-live/print-to-browser.html

yan : xdg 應該是像 windows 設定預設開啟檔案的程式

// 查詢此檔案的 mime type
$ xdg-mime query filetype index.html
text/html

// 設定此檔案類型的開啟程式, 
// 如下設定 firefox 為預設開啟 html 的程式, firefox.desktop 不用指定完整檔案路徑, 他會依序在以下資料夾找尋是否有此檔案
    /home/yan/.local/share/applications/firefox.desktop
    /usr/local/share/applications/firefox.desktop
    /usr/share/applications/firefox.desktop
// 可以 trace /usr/bin/xdg-open 的 open_generic_xdg_mime()
$ xdg-mime default firefox.desktop text/html  

$ cat ~/.local/share/applications/defaults.list

$ xdg-open index.html

2012-05-17

來源: 2012-05-17
http://www.ps158.com/blog/archives/1946
剛剛試用了一下,Linux 版的表單沒辦法打字,要用滑鼠 copy-n-paste 才行

2012-05-10

來源: 2012-05-10
http://paddy.pixnet.net/blog/post/154480-%E8%87%AA%E8%A3%BDusb%E5%85%85%E9%9B%BB%E7%9B%92%E5%8F%AA%E8%A6%81-37-%E5%85%83

我的 window manager 是 wmii

盒子裡裝的是 pandaboard,目前是裝 pre-built 的 ubuntu image (裝在 sd 卡)。
kanru 上週搞定開機啟動 window manager
同時也設好自動連 wireless network,現在開機就可以直接使用。

目前借的投影機是 Optoma pk201,流明約 15-20 之間。
目前看起來 Acer K11 還不錯
http://chinese.engadget.com/2010/05/26/computex-2010-acer-k11-micro-projector/

手動設定 wpa_supplicant

ctrl_interface=/var/run/wpa_supplicant
#ap_scan=2

network={
       ssid="your_ssid"
       scan_ssid=1
       proto=WPA RSN
       key_mgmt=WPA-PSK
       pairwise=CCMP TKIP
       group=CCMP TKIP
       psk=your_psk
}

其中, psk= 的值,是用下列指令產生的:

$ wpa_passphrase "ESSID" "PASSWORD"

嘸蝦米有支援 Linux 的官方版, scim/gcin/ibus 都有, http://boshiamy.com/member_download.php

2012-05-03

來源: 2012-05-03
設定 /etc/network/interfaces 支援 wpa-psk 自動連線

auto wlan0
iface wlan0 inet dhcp
wpa-ssid "MarketPlace"
wpa-psk "abcdefghij"

新玩具的設定需求:

$ firefox http://pad.hackingthursday.org/

2012-04-26

來源: 2012-04-26
主機板元件圖
http://zh.wikipedia.org/wiki/File:PandaBoard_described.png

一則 blog 安裝經驗分享
http://changyy.pixnet.net/blog/post/30361339-pandaboard-%E6%95%99%E5%AD%B8%E7%AD%86%E8%A8%98---%E5%AE%89%E8%A3%9D-android-4.0-ics-via-virtual

使用預先編好的 ubuntu image 作 SD 卡開機
http://omappedia.org/wiki/PandaBoard_Ubuntu_Pre-built_Binaries_Guide

用 validation 版本來檢查是否能正確運作
http://omappedia.org/wiki/PandaBoard_minimal-FS_Download

SD 卡的分割方式會影響開機,要用進階分割模式才行
http://processors.wiki.ti.com/index.php/MMC_Boot_Format

週邊裝置規格
http://www.omappedia.org/wiki/PandaBoard_Accessories_%26_Peripherals#Power_supply
電源線可以用 5V-2A 的

用 screen 來取代 minicom 讀取 RS-232 I/O 訊息

screen /dev/ttyACM0 115200

2012-04-05

來源: 2012-04-05
http://rickey-nctu.blogspot.com/2011/06/zim-plugins.html
各類小抄
http://www.cheat-sheets.org/

2012-03-29

來源: 2012-03-29
fail2ban好用
http://www.fail2ban.org/wiki/index.php/Main_Page
http://www.oreilly.com.tw/product2_web.php?id=a244

2012-03-08

來源: 2012-03-08
sshfs

2012-03-01

來源: 2012-03-01
如何把 dmesg 的秒數時間換成日期時間顯示
http://linuxaria.com/article/how-to-make-dmesg-timestamp-human-readable?lang=en

#!/usr/bin/perl
 use strict;use warnings;
 my @dmesg_new = ();my $dmesg = "/bin/dmesg";my @dmesg_old = `$dmesg`;my $now = time();my $uptime = `cat /proc/uptime | cut -d"." -f1`;my $t_now = $now - $uptime;
 sub format_time {
 my @time = localtime $_[0];
 $time[4]+=1;    # Adjust Month
 $time[5]+=1900;    # Adjust Year
 return sprintf '%4i-%02i-%02i %02i:%02i:%02i', @time[reverse 0..5];}
 foreach my $line ( @dmesg_old ){
 chomp( $line );
 if( $line =~ m/\[\s*(\d+)\.(\d+)\](.*)/i )
 {
 # now - uptime + sekunden
 my $t_time = format_time( $t_now + $1 );
 push( @dmesg_new , "[$t_time] $3" );
 }}
 print join( "\n", @dmesg_new );print "\n";

2012-02-23

來源: 2012-02-23
wayling: 最近嘗試幫 BeagleBOM 移稙一個 real-time os

static void prvSetupHardware( void )
{
    /* Initialize GPIOs */
    /* GPIO5: 31,30,29,28,22,21,15,14,13,12
     * GPIO6: 23,10,08,02,01 */
    (*(REG32(GPIO1_BASE+GPIO_OE))) = ~(PIN31|PIN30|PIN29|PIN28|PIN22|PIN21|PIN15|PIN14|PIN13|PIN12);
    //(*(REG32(GPIO6_BASE+GPIO_OE))) = ~(PIN23|PIN10|PIN8|PIN2|PIN1);
    /* Switch off the leds */
    (*(REG32(GPIO1_BASE+GPIO_CLEARDATAOUT))) = PIN22|PIN21;
}
void prvToggleOnBoardLED( void )
{
    /* Toggle LED0 */
    unsigned long ulState;
    unsigned volatile int * gpio;
    ulState = (*(REG32 (GPIO1_BASE + GPIO_DATAIN)));
    if( ulState & mainON_BOARD_LED_BIT )
    {
        gpio = (unsigned int *)(GPIO1_BASE + GPIO_SETDATAOUT);
        *gpio = mainON_BOARD_LED_BIT;
    }
    else
    {
        gpio = (unsigned int *)(GPIO1_BASE + GPIO_CLEARDATAOUT);
        *gpio = mainON_BOARD_LED_BIT;
    }
}

http://cs.usfca.edu/~cruse/cs635/cmosram.c

2012-02-23

來源: 2012-02-23
用 screen + expect 作 uboot batch script.
可以用 screen 直接連接 COM 埠.

screen /dev/ttyUSB0 115200

2012-02-09

來源: 2012-02-09
Mat 問有沒有辦法把python args/kwargs 對應到 command line tools的args/options
Mat 覺得ucltip不太物件導向
Hychen說: 這玩意本來就是以我用得順手來開發的 XD
import ucltip
ls = ucltip.Cmd('ls')
ls.opts(a=True)
ls.execute('/tmp')
ls2 = ucltip.Cmd('ls')
ls2.opts(l=True)
ls2.execute('/tmp')

2012-02-02

來源: 2012-02-02
Software Informer 超酷, 還有附 client 程式

2012-01-12

來源: 2012-01-12
http://blog.hashpling.org/git-as-a-general-purpose-backup-utility/

2012-01-12

來源: 2012-01-12

用 firefox 透過 XPCOM 執行系統指令,並取得執行結果
先用進 xul 的瀏覽,網址列輸入 => chrome://browser/content/browser.xul
然後開 firebug 作 console 輸入指令

function popen_js( cmd ){
        var result = Array();
        Components.utils.import("resource://gre/modules/ctypes.jsm");
        var lib = ctypes.open("libc.so.6");
        c_str_ary = new ctypes.ArrayType( ctypes.char, 1024 );
        var popen = lib.declare("popen", ctypes.default_abi, ctypes.void_t.ptr, ctypes.char.ptr, ctypes.char.ptr );    
        var pclose = lib.declare("pclose", ctypes.default_abi, ctypes.void_t.ptr, ctypes.void_t.ptr );
        var fgets = lib.declare("fgets", ctypes.default_abi, ctypes.char.ptr, c_str_ary, ctypes.int, ctypes.void_t.ptr ); 
        fd = popen( cmd, "r" );
        buf = new c_str_ary();

        do {    
                output = fgets( buf, 1024, fd );
                ret = ctypes.cast( output, ctypes.int );
                if( ret.value == 0 ){ break; }
                result.push( buf.readString() );
        } while ( true )
        pclose( fd );
        return result;
}
command_output = popen_js( "ls -l /tmp/" );
for( i=0; i<command_output.length; i++){
    console.log( command_output[i] );
}

( Mat: Thinker 真是太威了, LCamel is , too~~ )

2011-12-29

來源: 2011-12-29
mount —move $old $new 跟 mount —bind $old $new 不一樣。
用 mount —move $old $new 執行完之後, $old 就會消掉,只留 $new
而 mount —bind $old $new 的話,$old 跟 $new 都會同時存在,並指到相同內容
initrd 開機,切換 root 的機制主要有兩個:

pivot_root ( new )

若開機參數有 root=/dev/ram0

1. 將 initrd image 掛成 rootfs

2. 執行 /sbin/init

3. 掛上將要切過去的 rootfs

4. 用 pivot_root 將 rootfs 切過去

5. 執行 /sbin/init

6. 移除 initrd image

change_root ( deprecated )

若開機參數沒有 root=/dev/ram0

進到 initrd 後,會執行 /linuxrc 而不是 /sbin/init

initrd 的格式也分兩種:

1. 傳統的 initrd

用 ext2 的分割區 image + gzip 來製作

2. 新的 initramfs ( 現在的主流 )

用 gzip + cpio 來製作

2011-11-17

來源: 2011-11-17

#!/bin/bash 

lsof > lsof.log

cat lsof.log | awk '{print $1}' | sort | uniq > item.list

for item in `cat item.list`
do
        echo -n "$item: "
        cat lsof.log | grep '^$item ' | wc -l
done

2011-10-13

來源: 2011-10-13

curTime = Array();

curTime[0] = (new Date()).getTime();

alert('hello');

curTime[1] = (new Date()).getTime();

alert('world');

curTime[2] = (new Date()).getTime();

for( i=1; i<curTime.length; i++ ){
    deltaTime = curTime[i] - curTime[i-1];
    console.log( "["+(i-1)+"]-["+i+"] execution time: " + deltaTime + " ms" );
}

deltaTime = curTime[curTime.length-1] - curTime[0] ;

console.log( "Total execution time: " + deltaTime + " ms" );

2011-09-22

來源: 2011-09-22
V8 的 platform pattern
http://www.google.com/codesearch#cZwlSNS7aEw/external/v8/src/platform.h&exact_package=android&q=class%20Mutex%20WIN32%20v8

2011-09-15

來源: 2011-09-15
http://www.codeguru.com/cpp/com-tech/atl/article.php/c3565
http://369o.com/data/books/atl/index.html?page=0321159624%2Fch04lev1sec9.html

http://blog.roodo.com/tumi/archives/1797927.html

:vimgrep KEYWORD **/*.c **/*.h

2011-08-25

來源: 2011-08-25
昨天聊到的 error/log handling

void caller(){
    //....
    int ret = callee( 99 );
    if ( ret!=0 ){
        ; // error handling...
    }
    //....
}

int callee( int input ){
    // 先用 assert 檢查輸入值, sometimes

    //.... 
    try{
        foo1();
        foo2();
        foo3();
        foo4();
        foo5();
    }
    catch( ErrorA ){
        log( "Error 1");
        return -2;
    }
    catch( ErrorB ){
        log( "Error 1" );
        return -3;
    }
    catch( ... ){
        log( "Error 1");
        return -1;
    }

    // normal routine ...

    return 0;
}

如何用 MinGW 作出 Visual C 可以使用的函式庫

  • 編成 *.a + *.dll
  • 分開用 —output-def 跟 —kill-at 製作 .def 跟 .dll 檔
  • .def 有些部分需要手動改,或另外用 dumpbin 的程式來作
  • 避免用 C++ 的 interface, 因為 ABI 各 compiler x version 都不盡相容
  • 用 __cdecl + extern "C" 宣告 call convention
  • 若用 __stdcall 的話, VC 在用的時候要修改,但 COM/VB/… 外部使用的 binary library 大都是走 __stdcall

2011-08-18

來源: 2011-08-18
我最常用的進階編輯模式有:

  • 區塊編輯 ( Ctrl-V + I, d, p … )
  • 紀錄模式 ( q-a …. q => macro-a, @a, @@ )
  • 全域搜尋 ( vimgrep <keyword> **/*.cpp )
  • location-list ( cn, cp, copen, … )

店家說之前休息的分店預計週末要再開張。若無意外的話,我們預計下下週換到新場地。
( 於下週確認 ready 後,會發通告通知大家 )

前陣子 survey Single-Sign-On 時,看到的 facebook 的介紹文件
http://developers.facebook.com/docs/authentication/

http://qa.debian.org/popcon.php?package=emacs21
http://qa.debian.org/popcon.php?package=emacs22
http://qa.debian.org/popcon.php?package=emacs23

2011-08-11

來源: 2011-08-11
需要將 html 轉成 structured text. 但是 html2text ( CLI ) 有編碼的問題,改成用 python 的模組來作:

http://www.aaronsw.com/2002/html2text/

def html2txt( the_html ):
    result = html2text.html2text( the_html.decode('utf-8'), '' ).encode('utf-8')
    return result

此外,用 python mail 模組發信時,要指定 MIMEText 的 encoding 為 UTF-8

msg.attach( MIMEText(text,"plain") )

=>
msg.attach( MIMEText(text,"plain", "utf-8") )

註: 加上 encode('utf-8') 跟 decode('utf-8) 可以避免中文字問題。

2011-07-07

來源: 2011-07-07

import sys
sys.path.append( '/home/USER/' ) # 新增 /home/USER/ 為 *.py 的搜尋路徑
import hello  # hello.py 在 /home/USER/下

2011-06-30

來源: 2011-06-30
四元前陣子提到的,可以自動喚醒開機

sudo su -c "echo $(( $(date +%s) + 60 )) > /sys/class/rtc/rtc0/wakealarm" && cat /proc/driver/rtc

to Amos:
from SimpleXMLRPCServer import SimpleXMLRPCServer

to Peter:
http://drbl.nchc.org.tw/news/

2011-06-23

來源: 2011-06-23

週二聽 wuman 提到的新作 dogfan
http://www.appbrain.com/app/dogfan/com.wuman.dogfan
http://dogfan.heroku.com/index.html

http://blog.gauner.org/blog/2010/07/07/mini-buildd-and-linux-vserver/

2011-06-16

來源: 2011-06-16
for CA:
http://code.google.com/p/pkgbzr/
http://techbase.kde.org/Getting_Started/Build/KDE4/Windows/emerge

2011-05-26

來源: 2011-05-26
To clyde, geebox
http://www.geexbox.org/
這個是專門為多媒體客製化的 LiveCD版本

2011-05-12

來源: 2011-05-12
一般在批次作業中,如果需要修改設定檔的內容時,大多是用 sed, awk.
不過因為對 vim 的指令較熟,於是就想說有沒有辦法把 vim 當作 pipe 工具來用,
後來試出的用法如下:

vim -i NONE -e -X -c ':123 move 117' -c':wq' /usr/bin/genkernel

這一段的語法,是指將第 123 行換到 117 行,然後存檔。

2011-05-05

來源: 2011-05-05

最近需要將 debian squeeze 上的 php 5.3 換裝成 php 5.2 ,頗為困擾,
剛剛找到一個進階用法:

http://atom-hosting.com/blog/?p=52

大致上的原理就是:
1. 將 lenny 的 source 加到 /etc/apt/sources.list
2. 在 /etc/apt/preferences 加上

Package: php5*
Pin: release a=oldstable
Pin-Priority: 700

Package: *
Pin: release a=stable
Pin-Priority: 600

3. 重裝 php5

2011-04-21

來源: 2011-04-21
最近遇到一個問題,就是 mysql 連線時,預設是連往 localhost。
不過對 mysql 來說, localhost != 127.0.0.1 。我發現用 127.0.0.1 會開 socket , 但用 localhost 卻會是用 /var/lib/mysql/mysql.sock 這個檔案 I/O。
所以用到像 mysql-proxy 這類軟體時,就會遇到像:

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

的錯誤訊息
之前都直接改程式將 localhost 換成 127.0.0.1 來跳過,不甚方便,後來發現可以用 socat 來作 I/O pipe
socat UNIX-LISTEN:/var/lib/mysql/mysql.sock,fork,reuseaddr,unlink-early,user=mysql,group=mysql,mode=777 TCP:127.0.0.1:3306 &

就順利解決這個問題。

參考網頁: http://blog.redbranch.net/?p=306

2011-04-07

來源: 2011-04-07
Funtoo Live USB

2011-03-31

來源: 2011-03-31
dracut, 是一個用來作 initramfs 的工具。Fedora 系統的 initrd 好像都是用這個工具作的。
這個工具有考慮到 cross distribution, 所以我在 gentoo 上也可以用。
有模組化的架構,因此可以方便的設定需要的功能,目前支援有 squashfs, raid,livecd, ..等開機載入的功能。
to 4$, 目前 poppler 好像只支援 single font, 所以當英文字型排前面時,中文會變成方塊
相關的片段在 GlobalParams.cc :

1171 #if WITH_FONTCONFIGURATION_FONTCONFIG
1172 DisplayFontParam *GlobalParams::getDisplayFont(GfxFont *font) {                                
1173   DisplayFontParam *dfp;
1174   FcPattern *p=0;

2011-03-10

來源: 2011-03-10
http://amarok.kde.org/wiki/Development/Scripting_HowTo_2.0

給 gmail 用的 esmtp 設定檔

identity username@gmail.com
        hostname smtp.gmail.com:587
        username "username@gmail.com"
        password "password"
        starttls required

esmtp 的 gmail 設定有變動,需要再加上認證過的 CA

mkdir ~/.authenticate
chmod 0700 ~/.authenticate
wget http://curl.haxx.se/ca/cacert.pem
mv cacert.pem ~/.authenticate/ca.pem
chmod 0600 ~/.authenticate/ca.pem

2011-02-24

來源: 2011-02-24
http://pida.co.uk/wiki
http://pida.co.uk/screenshots
這是一個將 vim, emacs, … 或是其他編輯器嵌入某框架內的整合編輯器
http://amix.dk/blog/post/46

http://www.linuxfromscratch.org/blfs/view/svn/general/dbus.html

2011-02-10

來源: 2011-02-10
過年時間聊天聽到的,是 emacs 上用來作筆記的軟體,不過我自己沒用過。
http://orgmode.org/
http://linuxtoy.org/archives/emacs-org-mode.html

最近接觸到 SunPinyin, http://code.google.com/p/sunpinyin/

2011-01-20

來源: 2011-01-20
https://github.com/matlinuxer2/linux-kernel-utf8
歡迎大家下載試用~

2011-01-13

來源: 2011-01-13

以下有兩段 script,一個是固定在 terminal 下 prompt 問題。
但手動回答很麻煩,所以可以用 expect 來讀取問題,作自動回答。

 1 #!/usr/bin/env bash
 2 
 3 while true; do
 4         sleep 1
 5         read -p "Are you sure?[y/n]" YES_OR_NO
 6         echo " Your answer is ....$YES_OR_NO"
 7 done

自動回答

 1 #!/usr/bin/expect
 2 
 3 spawn ./prompt.sh
 4 
 5 while 1 {
 6         expect  "Are you sure" { 
 7                 sleep 0.3
 8                 send "y\r" 
 9         } 
10 }

( LCamel: perl 上 expect 的模組,那 python 上有沒有相同定位的模組呢? )
pexpect : Python 上的 expect 模組

2011-01-06

來源: 2011-01-06

 1 #!/usr/bin/env bash
 2 
 3 echo $1
 4 echo $2
 5 
 6 function confirm1(){
 7         echo " are you sure to rename $1 ";
 8         echo " are you sure to partition? $2 ";
 9 }
10 
11 function confirm2(){
12         echo " are you sure to delete?? ";
13         echo " are you sure to delete??? ";
14 }
15 
16 confirm1 "Mat" "/dev/sdb1"                                                                       
17 confirm2

一般我在寫 script 時,大致上是從
raw shell script
=> shell script with common functions and parameters
=> pythonize shell scripts with subprocess/system/popen
=> python scripts

2010-12-30

來源: 2010-12-30

devicekit, 從小朱聽來的,用來取代 HAL 的工具
http://wiki.linux.org.hk/w/HAL
不過目前似乎專案停止了

dbus-send --print-reply --session --dest=org.freedesktop.DBus.Examples.Echo /org/freedesktop/DBus/Examples/Echo org.freedesktop.DBus.Introspectable.Introspect

2010-12-23

來源: 2010-12-23

http://blog.chinaunix.net/u/13265/showart.php?id=1008020

看 initramfs 的內容的方便指令

cat /boot/initramfs-genkernel-x86-2.6.32-gentoo-r1 | gzip -d | cpio -t

還原 initramfs 的內容到當前目錄

cat /boot/initramfs-genkernel-x86-2.6.32-gentoo-r1 | gzip -d | cpio -i

2010-12-09

來源: 2010-12-09

dbus-c++ example to 顯顯

http://gitorious.org/~matlinuxer2/dbus-cplusplus/matlinuxer2s-mainline/trees/win32only/examples/echo

dbusxx-xml2cpp.exe echo-introspect.xml --adaptor=echo-server-glue.h
dbusxx-xml2cpp.exe echo-introspect.xml --proxy=echo-client-glue.h

init.sh from wayling

#!/bin/ash
#Mount things needed by this script
mount -t proc proc /proc
mount -t sysfs sysfs /sys

#Disable kernel messages from popping onto the screen

#Create all the symlinks to /bin/busybox
#busybox --install -s

exec sh

2010-12-02

來源: 2010-12-02

如何檢查 debian 系統內裝過的套件有那些被動過

dpkg-query -W| cut -f1| xargs debsums

因為某個原因需要 recovery 某個 debian 系統的系統檔,但是一些程式不能正常運作,像是 aptitude
經 kanru 的指點,可直接解 *.deb 到某個 tmproot , 然後再針對需要的目錄作 rsync, 如下:

cd /var/cache/apt/archives/

# for deb_file in `ls *.deb`
for deb_file in `dpkg-query -W| cut -f1`*.deb
do 
dpkg-deb -x $deb_file /tmp/root2/

done

X="bin"; rsync -n -avz /tmp/root2/$X /$X
X="usr"; rsync -n -avz /tmp/root2/$X /$X
X="sbin"; rsync -n -avz /tmp/root2/$X /$X

2010-11-25

來源: 2010-11-25
最近試玩 debirf ,但沒有成功

debirf
http://www.debianadmin.com/debirf-build-a-kernel-and-initrd-to-run-debian-from-ram.html

  1. apt-get install debirf

$ mkdir ~/debirf
$ cd ~/debirf
$ tar xzf /usr/share/doc/debirf/example-profiles/xkiosk.tgz
$ debirf make xkiosk
debirf make -k /var/cache/apt/archives/linux-image-2.6.28-0.slh.10-sidux-686_2.6.28-10_i386.deb xkiosk

最近看到一篇不錯的文章:
如何有效地報告錯誤
http://www.chiark.greenend.org.uk/~sgtatham/bugs-tw.html

to wuman:
《大教堂與市集》(The Cathedral and the Bazaar)
http://zh.wikipedia.org/zh-hk/%E5%A4%A7%E6%95%99%E5%A0%82%E5%92%8C%E5%B8%82%E9%9B%86

2010-11-11

來源: 2010-11-11
感謝大家的指點!

用 ob_flush() 跟 flush() 後,問題解決了,非常感謝 mic , Tsung,..!
set_time_limit() 好像沒有影響到,可能是 system() 不計在時間裡,所以即時時間超過了還是可以跑。

問題的內容簡述如下,

我處理的程式性質類似下面這個:

<?php
system( 'for (( x=1; x<30; x++ )) ; do ls -l /tmp/; sleep 1; done' );
?>

因為輸出是在 system() 函數,所以單純在 system 前後都加上 ob_flush(),flush()
後,還是沒辦法分段輸出,其實還需要在進一步取得指令的分段輸出。

之前我在 http://theserverpages.com/php/manual/en/function.shell-exec.php
找到有個人寫了一個 runExternal 的方便函式,用 pipe 跟 stream_select
的機制來取得指令輸出。不過只用這個函式,還沒有辦法分段輸出。這次和 Tsung 的 sample code 對照後,發現在這個函式裡加上
ob_flush()/flush() 就可以了!

2010-10-28

來源: 2010-10-28
for wayling

先開一個空目錄,然後在那個目錄執行

apt-get source vim

主要的套件的資訊都是放在 vim-7.35/debian/下,其中以 control, rule 是核心的檔案

cd vim-7.35
dpkg-buildpackage -rfakeroot -uc -d

2010-10-21

來源: 2010-10-21
http://techbase.kde.org/index.php?title=Getting_Started/Build/KDE4/Windows/emerge

來要個 key
http://developer.wikidot.com/i-want-api-access
http://developer.wikidot.com/doc:api
http://www.wikidot.com/doc:api-methods-v2

zim 下有方 lib 可以轉換格式

/usr/lib/python2.6/site-packages/zim/formats/__init__.py
/usr/lib/python2.6/site-packages/zim/formats/html.py
/usr/lib/python2.6/site-packages/zim/formats/latex.py
/usr/lib/python2.6/site-packages/zim/formats/plain.py
/usr/lib/python2.6/site-packages/zim/formats/wiki.py

to czchen:
下一篇有解釋到為什麼要用 #!/usr/bin/env python 比較好
http://mail.python.org/pipermail/tutor/2007-June/054816.html

2010-10-14

來源: 2010-10-14
ssh tunnel 的 -L , -R 的差別
http://antbsd.twbbs.org/~ant/wordpress/?p=198
http://pank.org/blog/2009/04/ssh-tunnel--l--r.html

2010-09-30

來源: 2010-09-30
doxygen 在 1.7.1 之後,也支援了 svg 的圖檔展開格式,可以作為程式示意圖的在編輯時的素材來源。

2010-09-23

來源: 2010-09-23
http://code.google.com/p/cppthreadpool/
C++ 的 Thread Pool

2010-09-09

來源: 2010-09-09

apt-get source dbus

在 HTML 的 header 加 <script> 的方式,可以作 cross domain 的 ajax request.

javascript 用 eval 來執行字串的程式碼。

eval( "var xxx=[3,[2,1]];" );

javascript 下物件轉字串的函式是: toString()
http://www.javascriptkit.com/jsref/object.shtml

2010-09-02

來源: 2010-09-02
ebuild 除了 enable debug 外,還要記得加 FEATURE="nostrip"

遇到 deadlock 時,一個 trace 的方式是用 gdb 開,在 hang 住時,按 "CTRL-z",然後再按 backtrace,就可以看到程式是停在那個 block

2010-08-26

來源: 2010-08-26
for wayling

qemu -nographic -M pc -m 64 -kernel /boot/vmlinuz-2.6.30-1-486 -initrd /boot/initrd.img-2.6.30-1-486 -hda ./i386-squeeze.qemu -hdb ./place/qemu.17545.dev -append root=/dev/hda quiet init=/pbuilder-run console=ttyS0 -serial stdio

2010-07-29

來源: 2010-07-29
vim 的底線設定,在 ~/.vimrc 裡加上

set cursorline

bash 的 vim mode 啟動

set -o vi

2010-07-22

來源: 2010-07-22

不需修改 /etc/apt/sources.list 就可以下載 apt-get source 程式碼

pkgname="$1"                                                                                        
debsrc="$2"

PKGDIR="$ROOT/$pkgname"
LISTS="$ROOT/tmp/lists"
STATUS="$ROOT/tmp/status"
CACHE="$ROOT/tmp/cache"
SOURCELIST="$ROOT/tmp/sources.list"

install -d $PKGDIR
install -d $CACHE/archives/partial
install -d $LISTS/partial
install -d $(dirname $STATUS) && touch $STATUS
install -d $(dirname $SOURCELIST) && echo "$debsrc" > $SOURCELIST

APT_OPTIONS="-qq"
APT_OPTIONS="$APT_OPTIONS -o Dir::State::Lists=$LISTS"
APT_OPTIONS="$APT_OPTIONS -o Dir::State::Status=$STATUS"
APT_OPTIONS="$APT_OPTIONS -o Dir::Etc::SourceList=$SOURCELIST"
APT_OPTIONS="$APT_OPTIONS -o Dir::Cache=$CACHE"
APT_OPTIONS="$APT_OPTIONS -o APT::Get::AllowUnauthenticated=true"

apt-get $APT_OPTIONS update
apt-get $APT_OPTIONS source $pkgname

2010-07-15

來源: 2010-07-15

28         for ( int i=0; i< 20; i++ )
29         {
30                 if ( setjmp( setjmpBuffer ) == 0 ){
31                         cout << "calling foo()..." << endl;
32                         try{
33                                 foo(i);
34                         }
35                         catch(...){
36                                 cerr << "==== catch user-level error! ====" << endl;
37                                 cerr << "skiping..." << endl;
38                         }
39                 }
40                 else{
41                         cout << "foo() failed by some reason, continue execution..." << endl;
42                 }
43         }

2010-07-08

來源: 2010-07-08
今天聽到 perl的用法

perl -de 0
  DB<2> x 1+1
0  2
  DB<3> for(1...5){print}

http://www.phpsh.org/

<pre><script type="application/x-javascript" src="shortcut.js">
shortcut.add("X",function() {myOBJ.onCommand();});
</script></pre

2010-07-01

來源: 2010-07-01

To kcliu:

1. 用內建的 window.getSelect() ,就可以取得一個 selection 相關的物件。
https://developer.mozilla.org/en/window.getSelection

2.
selObj = window.getSelection();
result = selObj.toString(); // 這一行就可以拿到選取的文字。

2010-06-24

來源: 2010-06-24

http://world.std.com/~swmcd/steven/perl/module_mechanics.html
Perl 設定的一些注意事項
export PERL5LIB=<path to private perl modules *.pm>
可以指定 *.pm 的搜尋路徑

perl -V 可以看到 perl 搜尋路徑的列表

autoconf, automake, … 等 autotools 工具,是用 perl 寫的。

有人有用過 AC_CONFIG_SUBDIRS 的功能嗎?
http://www.gnu.org/software/hello/manual/autoconf/Subdirectories.html

perror 可以用來查一些常見的 error num 對應的訊息

perror 13
perror 65

一篇寫得不錯的導引
http://realmike.org/mfgraph/automake.htm
Makefile.am 關鍵字講解
http://techbase.kde.org/Development/Tutorials/KDE3/Makefile.am

2010-06-17

來源: 2010-06-17

to hychen and 4$:
openvanilla 的 sync.sh 寫好了,我用 shell script 實作了 lndir 的功能
最新程式碼如下:
http://github.com/matlinuxer2/openvanilla-oranje/

http://www.motifzone.net/forum/developers/bitmap-ximage
中間的一篇

* Because the bitmap you receive is not an X bitmap but a buffer, and because an XImage is basically a data structure with extra display information, you are probably best doing the conversion as a data-to-data transfer on the client side. That is, you likely will iterate over the pixels in the source and convert them to pixels in the target, using XPutPixel().

* The alternative is to render the bitmap into an X Pixmap and then to retrieve it as an Image using XGetImage(). This route uses the X server as part of the conversion, while still demanding that you get the original data displayed.

http://hi.baidu.com/netadabiao/blog/item/3f442006570b157902088189.html

http://en.wikipedia.org/wiki/Keith_Packard

to yan, 我猜得沒錯的話,wmii 的字型 api 應該是集中在 drawstring() 這個 function 上
drawstring() 這個函式在 ./lib/libstuff/x11/drawing/drawstring.c 裡

啟動另一個 X 來測試 wmii

startx -- :1

? font->type 在那設定的?

font 的實體主要是在 ./cmd/x11/wmii9menu.c 初始化,其他的地方主要是用 extern 來取用

160         font = loadfont(readctl("font "));

loadfont 的實作在 ./lib/libstuff/x11/text/loadfont.c

wmii 的字型處理主流程,似乎是:
1. 在 wmii9menu.c 裡,用 readctl("font") 讀取 wmiirc 的設定檔的設定
2. 將 wmiirc 的設定丟進 loadfont(),將字型的資料結構及函式實體化
3. 將初始化的 font 交給 wmii 裡其他的地方來使用字型

patch 成功了, 但還只是 prototype,尚有一些未完整的地方。

視窗的標題列還沒能順利顯示中文,原因是因為其文字的傳遞的過程中,有經過一些函式的過處理,像是

* utflcpy

* utfecpy

git commit --amend

這個只能回溯前一份 commit message

2010-06-10

來源: 2010-06-10
http://linuxreviews.org/beginner/bash_GNU_Bourne-Again_SHell_Reference/

#!/bin/bash
menus=(
       "[0]=First Menu" 
       "[1]=Second Menu" 
       "[2]=Thurd Menu"
      )
dialog --stdout \
       --title "Testing Loops" \
       --menu "This is the Menu" 15 55 6 ${menus[@]}

openvanilla的 github source ( main upstream )
http://github.com/lukhnos/openvanilla-oranje

最近把之前的 autotools部分也弄上去了,還在試驗中
http://github.com/matlinuxer2/openvanilla-oranje

1.進 Distributions/Autotools
2.執行 sync.sh
3.執行 autoreconf -sif
4.接著就如一般的 autotools package 一樣,執行 ./configure && make && make install即可

2010-06-03

來源: 2010-06-03
近期參照 fbterm的字型實作程式,改了一段 freetype + fontconfig的 sample code.
http://groups.google.com/group/ucimf/msg/8e0a90c961fbbece

2010-05-27

來源: 2010-05-27
kde-windows' emerge
這個是我目前看到最屌的 win32 porting toolchain
http://techbase.kde.org/Getting_Started/Build/KDE4/Windows/emerge

 1 #!/bin/bash
 2 
 3 output=${output:=/dev/stdout }                                                                   
 4 
 5 ls &> $file
gitk --all

(這樣子就可以看到所有 branch的分支圖了~~ )

To kcliu:下面這個可以看到 javascript用 regexp的寫法
http://www.javascriptkit.com/jsref/regexp.shtml

2010-05-20

來源: 2010-05-20

  • 今天終於明白 git merge 是 branch head 對 branch head,而不是 node 對 node
  • 感謝 Fourdollars 指導的 launchpad + bzr 的概念指導!!
bzr-illu.png

gitourious 跟 github 及其他分散式版本系統的作法也有類似的用法.

2010-05-13

來源: 2010-05-13
寫了一個 for gentoo 的 binhost server, 可以接受 gentoo binary package 上傳,同時上架成 Packages repository。以初步達成 portage 相容使用!!!

( 資料集成 => rss => planet ( web ) + rss reader => irc, micro blogs… )

2010-04-15

來源: 2010-04-15
走出軟體工場
http://www.anobii.com/books/%E8%B5%B0%E5%87%BA%E8%BB%9F%E9%AB%94%E5%B7%A5%E5%A0%B4/9789866587955/01f9ee6e18992f0700/

2010-04-08

來源: 2010-04-08

xrandr --output VGA --mode 1024x768

https://wiki.edubuntu.org/ARM/RootfsFromScratch

qemu-system-arm -cpu ?

BTW, Firefox 也有一個外掛叫 FireCat,好像是資安類外掛的集合套件的樣子…
http://www.itis.tw/node/289

2010-04-01

來源: 2010-04-01
推薦 email 整合的程式 spicebird
spicebird 整合了 email, calendar, widget , xmpp 等個人通訊的工具。
自己裝過使用過,覺得是個很令人期待的新 email 整合軟體。
目前還沒有特別成熟,但對於有意作 XUL, javascript, xpcom 的開發者們,
這個是一個不錯的參考資料,包括裡面有個“真的可以用的” XMPP xpcom 元件。
提供給有興趣的人參考看看嘍~

http://mozlinks-zh.blogspot.com/2008/01/spicebird-04.html
http://map.answerbox.net/landmark-820473-bbs-2.htm

2010-03-25

來源: 2010-03-25
聽 yuren 跟 fourdollars 說 ChromeOS 改採 gentoo 作 native build system 。
http://dev.chromium.org/chromium-os/building-chromium-os/portage-based-build
( 開發者文件看起來好複雜啊~~)
gentoo++

2010-03-18

來源: 2010-03-18
我用的 vim tabbing 是 minibufexpl
http://www.vim.org/scripts/script.php?script_id=159

2010-03-04

來源: 2010-03-04
以 xulrunner + xpcom + html + javascript 作簡單的 home screen 選單
https://developer.mozilla.org/en/Code_snippets/Running_applications
( 目前只有單向執行外部程式,但還沒有辦法拿到外部程式的輸入 )

用 pdsh, dsh 可以一次下指令給多台電腦。

2010-02-11

來源: 2010-02-11
zenity 接受 shell script pipe 的 gtk dialog 工具

(for a in `seq 1 100` ;
do
echo $a;
sleep 0.03;
done) | zenity --auto-close --progress \
--text="Slow counting from 1 to 100" \
--title="Example Progress"

2010-01-21

來源: 2010-01-21
指令參考
http://code.google.com/p/wtxcode/wiki/LiveCD_Scripts

作 base layer

mkdir /tmp/ro/ 
mount -t tmpfs -o size=1% tmpfs /tmp/ro/

作 overlay layer

mkdir /tmp/overlay/ 
mount -t tmpfs -o size=1% tmpfs /tmp/overlay/

合併成 union layer

mkdir /tmp/aufs/
mount -t aufs -o br:/tmp/overlay=rw aufs  /tmp/aufs/
mount -n -o remount,add:1:/tmp/ro=rr aufs /tmp/aufs/

合併成 union layer ( 更常見的寫法 )

mount -t aufs -o rw,noatime,dirs=/tmp/overlay=rw:/tmp/ro=ro aufs /tmp/aufs

LiveCD/USB 常用到的唯讀壓縮檔案系統 SquashFS
http://zh.wikipedia.org/zh-tw/SquashFS

2010-01-07

來源: 2010-01-07

我上^n週提到的 inkboard 現在有 jaunty 跟 karmic 的版本嘍。

https://launchpad.net/~matlinuxer2/+archive/inkboard/+packages

C 語言的 volatile 的特性,這個通常在最佳化編譯時,比較有碰到。
如:

test.c:

int c;

void xxx(void){
  c=1;
  while ( c!= 0 );
}

void intq(void){
  c = 0;
}

test2.c:

volatile int c;

void xxx(void){
  c=1;
  while ( c!= 0 );
}

void intq(void){
  c = 0;
}

然後用 gcc 來最佳化編譯:

gcc -O1 -S test.c 
gcc -O1 -S test2.c

主要的差別是在最佳化的編譯,編譯器會認為 c!=0 恆真,而把他跳過。

c=1;
while ( c!= 0 );

而 volatile 的關鍵字可以提醒編譯器不要忽略。因為有時候變數會因為中斷而產生變化。
這個通常在最佳化時才會遇到…

可以得到 test.s test2.s 的差別:

--- test.s      2010-01-07 19:56:08.000000000 +0800
+++ test2.s     2010-01-07 19:56:07.000000000 +0800
@@ -1,4 +1,4 @@
-       .file   "test.c"

+ 2009-12-17
來源: [[[2009-12-17]]]
有時候會執行一些指令會等很久,可是沒辦法每次都記得用 time 指令去記時間。
所以想到上次 Aki 提到的 bash prompt 的東西,就試作了一個簡易計時的 bash prompt。
只要將程式碼貼到 ~/.bashrc 的最下面就可以了

[[code]]
count_time2(){

        TimeFile="/tmp/.__timestamp__$(tty | tr '/' '_' )"
        test -f $TimeFile || date +%s > $TimeFile
        TimeOrig=$( test -f $TimeFile && cat $TimeFile )

        Time=$( date +%s )

        Delta=$(( $Time - $TimeOrig ))
        Sec=$(( $Delta % 60 ))
        Min=$(( ( $Delta / 60 ) % 60 ))
        Hour=$(( ( $Delta / 60 / 60  ) % 60 ))

        if (( $Hour > 0 ))
        then
        Output="[${Hour} hr ${Min} min ${Sec} sec]\n\r"
        elif (( $Hour < 0 || $Min > 0 ))
        then
        Output="[${Min} min ${Sec} sec]\n\r"
        else
        Output=""
        fi

        echo -e "$Output"

        TimeOrig=$Time
        echo $TimeOrig > $TimeFile

}

export PS1="\$(count_time2)$PS1"
[[/code]]

感謝 LCamel 的提示,改用
[[code]]
$SECONDS 
[[/code]] 變數來取代寫 /tmp/ 暫存檔的方法,BTW LCamel 也提到可以用
[[code]]
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
[[/code]]
將時間紀錄在 bash 的 history 裡。

後來發現用 $SECONDS 的方式有 Bug ,先改回原本的寫檔方式的版本

+ 2009-12-03
來源: [[[2009-12-03]]]
wink 可以用來錄螢幕操作,作簡報跟使用手冊很方便

pmount: 可以看 /dev/ 的裝置,自動建目錄並 mount 上去
ivman: 可以跟 pmount 結合,達成自動 plug and mount

http://ycfunet.blogspot.com/2008/02/ivman-hal.html

+ 2009-11-26
來源: [[[2009-11-26]]]
http://wiki.ubuntu.org.cn/Qref/Applications

核心偵測到新裝置後, 會來 /etc/udev/rules.d/ 讀取規則, 做出相應動作
例: /etc/udev/rules.d/70-persistent-net.rules
修改裝置名(NAME)、執行(RUN)
[[code]]
# USB device 0x:0x (zd1211rw)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:90:cc:d8:4e:4f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0", RUN+="/etc/udev/scripts/restart-net.sh"

SUBSYSTEM=="net", ACTION=="remove", DRIVERS=="?*", ATTR{address}=="00:90:cc:d8:4e:4f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0", RUN+="/etc/udev/scripts/restart-net.sh"
[[/code]]

+ 2009-11-19
來源: [[[2009-11-19]]]
dbus c++ 是我目前用過最好用的 IPC  library
dbus 開始學習時,會對專有名稱不好掌握。
可以先裝 d-feet 跟 python dbus 來試玩玩看,這樣可以協務嘗握 dbus 的行為跟設計方向
http://www.blogjava.net/zarra/archive/2008/07/11/214161.html

+ 2009-11-12
來源: [[[2009-11-12]]]
google 出了 javascript 的 framework : closure-library 
http://code.google.com/closure/library/

用 javascript 可以使用 gettext 
http://code.google.com/p/gettext-js/

[[code]]
xgettext.pl -D ../js/
[[/code]]

UML 工具 :umbrello, 將 code import 之後,class 拉一拉就可以自動畫關係線

+ 2009-11-05
來源: [[[2009-11-05]]]
vimdiff - 編輯兩個檔案, 並顯示他們的差異
lsdiff, filterdiff, ... 這些工具包含在下列這個套件

* **dev-util/patchutils** A collection of tools that operate on patch files

Q: 如果 patch 上的檔案有問題, 是不是可以試試 patch -R 參數
A: 用 patch -R 可以,大概要加一步偵測錯誤。也可以用 -N, --forward 不中斷執行。

vim 可以設定成看到特殊字元的顯示
[[code]]
:set list
[[/code]]

* Thinker 意見: three-way merge 可以避免再次 conflict 問題,不見得需要利用 filterdiff 來避免 conflict.
* vimdiff [mine] [base] [other]

+ 2009-10-29
來源: [[[2009-10-29]]]

http://mercurial.selenic.com/wiki/LocalbranchExtension
這個網頁有兩個程式網址,第一個好像不能用,我是用第二個。

主要指令是:

[[code]]
hg lbranch  ( 顯示目前所在的 local branch )
hg lbranches  ( 顯示所有的 local branch )
hg lbranch <branch name>  ( 切換到某 local branch, 若沒有,就直接新建 )
hg lbranch -d <branch name> ( 刪除這個 local branch )
hg lbranch -f <branch name> ( 強制切換到某 local branch, 因為有時候有會 uncommit changes )
hg in lbranch://<branch name> ( 將某 local branch 的 change 拉到目前的 local branch )
[[/code]]

影片: http://www.youtube.com/chihchun#p/c/A5EEDD8C5C327E46/16/2nCAW4Xrfkk

+ 2009-10-22
來源: [[[2009-10-22]]]
Mercurial 關於 Local branches
http://mercurial.selenic.com/wiki/LocalbranchExtension

印書小舖
http://www.pressstore.com.tw

看到一個網頁 "[http://bhuntr.com/ 用比賽賺賞金| 獎金獵人BHuntr]"

MozEx 可以讓你在 Firefox 的文字輸入區,外掛 vim 來編輯文字
http://mozex.mozdev.org/
yan: 請問這需要gvim嗎, 另外可以試試 :) It's all text https://addons.mozilla.org/zh-TW/firefox/addon/4125

[[code]]
xterm -e vim predefine.txt
[[/code]]

+ 2009-10-15
來源: [[[2009-10-15]]]
[[[Skalde行前準備]]]

+ 2009-10-08
來源: [[[2009-10-08]]]
把 lspci -n 輸出的訊息貼上來, 就可以幫你找對應的驅動
http://kmuto.jp/debian/hcl/

參考了:Ubuntu Linux 使用 3G 做頻寬共享設置(3.5G + NAT、DHCP)
http://plog.longwin.com.tw/my_note-unix/2009/07/08/ubuntu-linux-3g-nat-dhcp-2009

今天的話是將 honki 抓錯無線網卡驅動的 X200 透過 ethernet 連上 Mat 的筆電, 透過 SNAT 從 Mat 的無線網路連出去
> server (example: wlan0、eth0、eth0 ip 192.168.2.22)
>> #echo 1 > /proc/sys/net/ipv4/ip_forward
>> #iptables -t nat -A POSTROUTING -s "192.168.2.0/24" -o wlan0 -j MASQUERADE

> client (example: eth0、ip 192.168.2.24)
>> #ifconfig eth0 192.168.2.24
>> #route add default gw 192.168.2.22 

pcmanfm 好用啊!!

今天提到的 A 隊要作的東西,就是去年有作的留信板, [[[Skalde]]]

下面這一段是 osd 式的定時提醒器,可以在一定的時間提醒自己要休息~
[[code]]
 1 echo "
 2 for (( x=1; \$x < 30; x++ ))                                                                      
 3 do
 4 
 5 DISPLAY=:0 osd_cat \\
 6   --pos=middle \\
 7   --lines=7 \\
 8   --align=center \\
 9   --font='10x20' \\
10   --color=green \\
11   --delay=1 <<EOF 
12 $(date +%H:%M)
13 
14 Take a rest...
15 
16 $(date +%H:%M)
17 EOF
18 
19 sleep 1
20 
21 done
22 " | at now + 50min

2009-10-01

來源: 2009-10-01
今天後半都在聊 Yahoo Open Hack Day

tsung 分享的 bbauth 使用者登入程式
http://plog.longwin.com.tw/programming/2009/07/27/yahoo-bbauth-login-set-tech-faq-php-2009
目前 google 跟 yahoo 的 openid 支援跟之前想的不太一樣。
在帳號系統上目前還是沒有一致的解法…

vim tip:
用 V 框起來, 然後加 :指令, 就可以對那個範為作處理
vimgrep 'REGEXP' **/*.txt
copen, cn, cp
r!指令,可以將指令的內容輸入內容

ducati 的 sony g502 不用錢…

to kcliu: 我用的 window manager 是 wmii
http://wmii.suckless.org/

去年 Skalde 相關的參考資料:
http://www.assembla.com/wiki/show/skalde
http://www.javascriptkit.com/jsref/string.shtml 常用的 javascript 參考手冊

PackageBazaar

note:

  • sketch pkgbzr ( package bazaar )
  • play wikidot and discuss

* talk about open hack day's activity
* 想問 GW-US54GZL usb 網卡怎麼抓
* 想問有沒有作過合併 svn repository 的經驗

2009-09-24

來源: 2009-09-24
聽hychen說"走出軟體工廠"這本書不錯…
honkia貼的包包感覺不錯啊
http://groups.google.com/group/hackingthursday/msg/9326758eb3907afa
這陣子看到了 buildbot,剛好補足 qemubuilder 在 online interface 的部分。好像也有不少軟體專案有在用

除非特別註明,本頁內容採用以下授權方式: Creative Commons Attribution-ShareAlike 3.0 License