2007/04/25

[ASVN] svn 權限保留問題的解決方案

最近在搞 svn 的部份,想把整個系統丟進 svn 裡面來玩。
一來可以解決版本控管的部份,二來誰改了什麼東西會比較清楚。
不過 svn 沒辦法保留權限, check out 之後,統統都是原來那個使用者的 ownership ,且 permission 的部份也都變成 mask 的值。

所以去 svn 官版有看到: asvn 的解決可能。

簡單的說 asvn 的使用方法是:

1. 把 asvn 丟到 /usr/local/bin 底下去
2. 修改 asvn 裡面 SVN 的路徑,預設是指到 /usr/local/bin/svn
3. alias svn='asvn'
4. 其它的 import , ci , up 都比照 svn 的用法。
它只是做 svn 的 shell 而已。

[Programming] XFakeKey

參考這裡的文章,調整了一點點,讓 XFakeKey 可以再隨意調用出自已想要的 keycode :

#include
#include

#include
#include

// A full list of available codes can be found in /usr/include/X11/keysymdef.h

// Function to create a keyboard event
XKeyEvent createKeyEvent(Display *display, Window &win,
Window &winRoot, bool press,
int keycode, int modifiers)
{
XKeyEvent event;

event.display = display;
event.window = win;
event.root = winRoot;
event.subwindow = None;
event.time = CurrentTime;
event.x = 1;
event.y = 1;
event.x_root = 1;
event.y_root = 1;
event.same_screen = True;
event.keycode = XKeysymToKeycode(display, keycode);
event.state = modifiers;
if(press)
event.type = KeyPress;
else
event.type = KeyRelease;

return event;
}

main(int argc, char *argv[])
{
int keycode;
// Obtain the X11 display.
Display *display = XOpenDisplay(0);
if(display == NULL)
return -1;

keycode = atoi(argv[1]);
if (keycode>65535||keycode<=0) return -1;
// Get the root window for the current display.
Window winRoot = XDefaultRootWindow(display);

// Find the window which has the current keyboard focus.
Window winFocus;
int revert;
XGetInputFocus(display, &winFocus, &revert);

// Send a fake key press event to the window.
XKeyEvent event = createKeyEvent(display, winFocus, winRoot, true, keycode, 0);
XSendEvent(event.display, event.window, True, KeyPressMask, (XEvent *)&event);

// Send a fake key release event to the window.
event = createKeyEvent(display, winFocus, winRoot, false, keycode, 0);
XSendEvent(event.display, event.window, True, KeyPressMask, (XEvent *)&event);

// Done.
XCloseDisplay(display);
return 0;
}


// 其實是因為 fvwm 的關係,所以想要用 key 綁音效的效果出來,但是 fvwm 的 FvwmFakeKey 有限制,所以還是自已來做 FakeKey 比較快。

2007/04/18

[Linux] Fvwm-crystal

LinuxToy 上面介紹的樣式還蠻好看的。

在Ubuntu 底下很簡單的下 apt-get install fvwm-crystal 就可以了。

不過接著下來有點中文方面的問題,因為預設的字體不是中文。

不過還好,這個只要調整字型設定就可以。

麻煩的是:

1. 快捷鍵的設定
2. autostart 的設定

還好拜 google 的方便,蠻快就找到答案了:

這裡有提到:
修改 File: ~/.fvwm-crystal/preferences/Startup
加入

#Launch ivman
+ I Test (x ivman) Exec pidof ivman || exec ivman

就可以了。

然而!這是的。

或著說已經不合時宜了,因為 fvwm-crystal 大概想再改回 fvwm 的主流,所以它的 rc 已經都指回去 ~/.fvwm 了。
所以應該是下面:

AddToFunc InitFunction
+ I Exec exec /usr/local/bin/gaim
+ I Exec exec xmodmap -e "pointer = 3 2 1"
+ I Exec exec /usr/bin/xfce-mcs-manager


嗯,至少我能動啦,我讓 滑鼠左右互換了,同時調用 xfce 的 setting manager 出來玩,免得 gtk 的程式變得很難看。

中文的部份感謝國父(d2207197)的說明

設字型像這樣設...
XFT
代碼:

*FvwmIconMan-Windows: Font "xft:AR PL ShanHeiSun Uni:pixelsize=12:encoding=iso10646-1"

或用 XLFD
代碼:

*FvwmIconMan-Windows: Font "-arphic-ar pl shanheisun uni mbe-medium-r-normal--12-*-iso10646-1"

就解決了

快捷鍵的部份可以再修改

fvwm 底下的 components/bindings

或呼叫 xbindkeys 出來玩。

--
* 0419 更新: 字型的部份我修改的部份直接打包成一個檔案了,可以用 root 在 /usr/share/fvwm-crystal/ 底下解開就行。。

[Linux] sshfs

西底... 今天再來介紹這個 sshfs 跟 fuser 的應用:

參考文章在這裡

Mounting a remote filesystem with sshfs allows you to do anything on the files, just like local files. Because it is an SSH connection, it is secure (encrypted, two-way authenticated), and it works with almost any ssh server.


簡單的說呢,每次都要 ssh 上去某個站點改來改去的,多麻煩。
如果可以用 mount 的方式,把 server 上面的某個目錄當作是我的 public_html 目錄,
加上 ssh 金鑰的方式,豈不是很好?

架設需求如下:
1. 可以 ssh 登入的帳號
2. fuser (如果要讓使用者自已可以 mount 的話)
3. sshfs

[Linux] Subversion 工具 hooks

西底~ 我又來騙篇數了。

這次來介紹的是「每天工作」這位先生的網誌裡頭有關 subversion hooks 的工具說明。

在 subversion repository 目錄裡面有 conf, dav, db, hooks, locks 等目錄。其中 hooks 目錄就是用來存放 hooks 的地方。總共有 5 種 hook:

* start-commit: 在 commit 開始之前執行,常用來檢查使用者是否有權執行動作。
* pre-commit: 在 transaction 完成而未真正 commit 之前執行,常用來檢查 commit 動作的有效性。可以在這個地方對 commit 時的 log 訊息進行要求。
* post-commit: 在 transaction 完成而 commit 結束,建立了新的 revision 之後執行,常用來寄送 e-mail 通知訊息。
* pre-revprop-change: subversion 的 revision property 並不會存入 repository,這個 hook 可以在 revision property 變更之前作一些處理,譬如把更新的資訊存到外部的紀錄檔裡面。
* post-revprop-change: 用途與 pre-revprop-change 類似,但會在revision property 變更之後執行。

詳情可以進去看一下。

我的困擾在於版本不合:

官版的最新版本是:
http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/mailer/mailer.py

上面的 pytho script 沒辦法正常在 FC4 上面運作。
所以我只得另外再找。

嗯 果然是來騙篇數的。

2007/04/17

[Linux] Squashfs 壓縮型的檔案系統

Fred說:
SquashFS是一個即時解壓縮的檔案系統,如同Cloop、CramFS一般。只是,SquashFS的壓縮比更高、速度更快,又不像CramFS有單一檔案大小或整體檔案系統大小的限制,在LiveCD的應用上非常有用。


最近找到他的網誌,裡面蠻多有趣的東西,所以開始一篇一篇(吃)看了起來,其實 2006 年 5 月的這篇文章引起了我的注意,因為有段時間沒注意 LiveCD 的技術了,想不到又多了這個 squashfs 可以拿來玩。

不過當然,實證是很重要的:
這裡有人寫了評比,我摘一小段下來:
5.1 Ubuntu liveCD compression results

ext3 uncompressed size 1.4 GB
ISO9660 uncompressed size 1.3 GB
Zisofs compressed size 589.81 MB
Cloop compressed size 471.89 MB
Squashfs2.0 compressed size 448.58 MB
Squashfs2.1 compressed size 448.58 MB

5.2 Damn Small Linux liveCD compression results

ext3 uncompressed size 126 MB
CRAMFS compressed size 52.19 MB
Squashfs2.0 compressed size 46.52 MB
Squashfs2.1 compressed size 46.52 MB


夭壽哦,給人家壓那種東西壓到剩原來的 30~40 % 大小耶。
且通常 LiveCD 上面這種空間非常要求的東西,有這個幫忙真是不賴。

不過這頁後面有一小段沒看懂....:
Yes, an intelligent algorithm decides that if the underlying compression
algorithm used produces no results, it just marks the block as
uncompressed and stores it as such. ZLIB does this if the block gets
bigger. LZMA might not; but higher level intrinsics (block headers)
could handle that easy (as you said).


study area 上面也有提到 :
現在要算squashfs + lzma 最棒了.
squashfs default use gzip, but you can try to patch it to use lzma,
of course you have to change mksquashfs to use lzma too.

siyou.


看起來是 lzma 最小了,不過不知道在「即時讀取」的時候會不會慢到?

--
順道提一下:

squashfs 在 去年的時候還沒進到 kernel 2.6 裡面,但是現在 Ubuntu 6.10 的 kernel 已經到了 2.6.17-50-generic ,所以就直接下 modprobe squashfs 就可以用了。

工具方面要另外安裝 "squashfs-tools"

FC 的部份也是一樣,在我的 FC5 (還沒打算更新到 FC6)上面
2.6.20-1.2307.fc5 已經有了,所以一樣裝上 squashfs-tools 就可以用了。

操作大致上是:
1. mksquashfs /home/anton/三國志/ dir.sqsh
把三國志(是陳壽寫的文言本啦)文檔壓成 dir.sqsh 檔

2. mount /home/anton/html dir.sqsh -o loop
用 loop device 掛載 dir.sqsh 上來。

這樣就可以了,夠簡單吧?

[Programming] xosd font size

好吧,這篇其實應該用英文或義大利文寫的,因為我這篇其實想寫給這裡的問題回覆。
但是我的英文很破,所以我還是用中文寫吧。
如果有緣的話,他應該會再 google 到我的.. XD (不然我不想一天到晚去註冊人家的論壇啊...)

問題說是: XOSD 都裝好了啊,結果 xosd 的字型大小一直沒變化,不知道神明有沒有什麼指示,有指示的話請給個聖杯 XD

正經回來:

XOSD 的問題,我也是今天才大致解決,基本上要用幾個工具來做:

1. xlsfonts , XOSD 用的是 XLFD 的字型描述(,所以用 xlsfonts 來尋找能用的字型:

$ xlsfonts |head -n 10
-adobe-courier-bold-o-normal--0-0-100-100-m-0-iso10646-1
-adobe-courier-bold-o-normal--0-0-100-100-m-0-iso8859-1
-adobe-courier-bold-o-normal--0-0-75-75-m-0-iso10646-1
-adobe-courier-bold-o-normal--0-0-75-75-m-0-iso8859-1
-adobe-courier-bold-o-normal--10-100-75-75-m-60-iso10646-1
-adobe-courier-bold-o-normal--10-100-75-75-m-60-iso8859-1
-adobe-courier-bold-o-normal--11-80-100-100-m-60-iso10646-1
-adobe-courier-bold-o-normal--11-80-100-100-m-60-iso8859-1
-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso10646-1
-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1
因為太長了,所以我只露一點點出來,說明是這樣用的。

2. xfontsel 可以直接選擇字型
3. mkfontdir [說明]
4. 最後是 xorg.conf 裡面的 font path 設定:(也可以用 xset fp +$PATH 來做,不過還是會被 Xorg 影響到一點點)
像是:

Section "Files"
FontPath "/usr/share/X11/fonts/misc"
FontPath "/usr/share/X11/fonts/cyrillic"
FontPath "/usr/share/X11/fonts/100dpi/:unscaled"
FontPath "/usr/share/X11/fonts/75dpi/:unscaled"

FontPath "/usr/share/X11/fonts/Type1"
FontPath "/usr/share/X11/fonts/100dpi"
FontPath "/usr/share/X11/fonts/75dpi"
FontPath "/usr/share/fonts/X11/misc"
# path to defoma fonts
FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
FontPath "/usr/local/share/fonts/"
EndSection


粗體字的地方,要特別注意。
unscaled 一旦下下去, fonts.dir 裡面就算加了 alias 或其它放大(scaled)的"條目"都無法作用。

這點在 config 的時候要特別小心。

[Windows] git-bash 底下的工具

因為工作轉到 Windows 平台上的關係,所以很多工具改到 Windows 上面運作,跟著在 TortoiseGit 底下使用 git-bash 來維護自己的專案原始碼。結果就是裝了前面提過的 auto-hotkey 使用熱鍵來提昇自己的平台操作速度; 但除了 hotkey...