Hihi, 我是 Mat. 我用 gentoo ~
Table of Contents
|
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"
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 放到最大
- firefox 自動連 http://pad.hackingthursday.org
$ firefox http://pad.hackingthursday.org/
2012-04-26
來源: 2012-04-26
主機板元件圖
http://zh.wikipedia.org/wiki/File:PandaBoard_described.png
使用預先編好的 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
- 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 的概念指導!!
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 參考手冊
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 的部分。好像也有不少軟體專案有在用