2010年11月25日星期四

找回已存檔(Archive)的GMail電郵

今天用iPad看電郵搞了個麻煩 -- 不小心按到Archive圖案。
回到All Mail底下找,因為電郵太多,找了好久也找不到。

因為Archive了的電郵不是已刪除,所以在垃圾箱(Trash)找不到,電郵只是被移除了[Inbox]標籤罷。

在網絡上找了好久,終於找到了一個好方法。

GMail主介面的搜尋欄輸入-in:inbox -in:sent -in:draft,沒有被標籤作[Inbox]和[Sent]以及[Draft]的電郵都出來了。

2010年11月21日星期日

用SSH伺服器作tunneling,作穿越防火牆的隧道。

SSH除了可以作遙距對*nix系統下指令外,亦可以用作穿越公司、機構防火牆的socks4/5代理。只要你有伺服器可經SSH登入,而且伺服器的SSH支援tunneling就可以了。

方法很簡單,Linux使用者只需輸入指令:
ssh -D [選一個埠口] [你在SSH伺服器上的用戶名]@[SSH伺服器域名或IP]例子:
ssh -D 13579 username@antonyho.net 然後到你的瀏覽器或應該程式設定socks5代理
代理的地址為:
localhost:[你剛才選的埠口] (localhost就是代表本機了)以剛才的例子:
localhost:13579 

2010年11月18日星期四

以Handbrake轉換iPad的MP4

iPad是一個很好的影片播放器,在車上也可以享受720P級的清晰影片播放,讓我可以在上班途中把Heroes一至四季看完。

可惜在iPad上播放RMVB實在無法找到一個工具能播得流暢。用Handbrake的預設格式檔轉為720P的MP4後出現不流暢情況。


經反覆測試後,小弟找到一個用Handbrake*轉換720P,在iPad上播放畫質亦不錯的設定。由於小弟是使用quadcore伺服器轉片的,所以使用Handbrake的指令模式。

指令如下:
HandBrakeCLI -i 輸入RMVB檔名 -o 輸出M4V檔名 -e x264 -q 0.589999973773956 -r 29.97 -E faac -6 dpl2 -D 0.0 -f mp4 -4 -Y 720

略為解釋一下參數

-e x264 (輸出檔以x264編碼)
-q 0.589999973773956 (畫質的設定值,一般足夠在iPad上播的很清)
-r 29.97 (每秒幀數)
-E faac (輸出檔的音效以faac編碼)
-6 dpl2 (輸出檔音效轉為DPL雙聲道)
-D 0.0 (音量動態調整,0.0為不作調整)
-f mp4 (輸出檔案格式為MP4)
-4 (支援64-bit MP4檔,支援4GB以上檔案)
-Y 720 (輸出畫面高度最大為720)



配合shell script把影片一次過轉換為MP4,實在暢快。我把影片都放到四核的伺服器去轉,把片放到伺服器,然後去睡覺。不到一晚他就替我將Heroes第一至四季全都轉好囉。



*是一個很好的影片格式轉換工具,網站: http://handbrake.fr/

2010年10月25日星期一

在Ubuntu上安裝指命模式的Handbrake轉片器

要使用add-apt-repository指命,所以我們先得有python-software-properties
sudo apt-get install python-software-properties

將這個Handbrake的PPA加進source list
sudo apt-add-repository ppa:stebbins/handbrake-snapshots

安裝Handbrake指命模式
sudo apt-get install handbrake-cli

完成,可以使用指命:
HandBrakeCLI
不懂用HandBrakeCLI轉片的可以到這裡查看:http://trac.handbrake.fr/wiki/CLIGuide

2010年9月23日星期四

使用舊版本的Arch Linux軟件包

在Arch Linux上更新軟件很方法,只需使用root權限輸入pacman -S package-name就可以把該軟件更新到最新的版本。又或將整個Arch Linux更新,只需輸入pacman -Syu就可以直接把整個Arch Linux連軟件更新到最新的版本了。因為Arch Linux的更新是無縫的,安裝Arch Linux後只需一直使用pacman -Syu就可以一直把Arch Linux保持最新的狀態。而不像Debian、Ubuntu等等每有新版本的發行就要把系統重灌,即使不重灌更新也有許些軟件要在升級後要自行更新或替換其他軟件。

但當使用pacman -Syu後,有某些軟件出現問題或不穩定,呢該怎麼回到舊版本呢?

基本上,更新時,系統也會下載舊版本的軟件包。我們只需查看/var/cache/pacman/pkg裡找上一個版本的軟件包就可以了。

以openssh為例,
ls /var/cache/pacman/pkg | grep "openssh"
找到了一堆過去的軟件包
$ ls /var/cache/pacman/pkg | grep "openssh"
openssh-5.3p1-3-x86_64.pkg.tar.gz
openssh-5.4p1-3-x86_64.pkg.tar.xz
openssh-5.4p1-4-x86_64.pkg.tar.xz
openssh-5.5p1-1-x86_64.pkg.tar.xz
openssh-5.6p1-1-x86_64.pkg.tar.xz

上一個版本是openssh-5.5p1-1-x86_64.pkg.tar.xz,那我們就安裝這個。
cd /var/cache/pacman/pkg
pacman -U openssh-5.5p1-1-x86_64.pkg.tar.xz

系統會以現在安裝這個軟件包去覆蓋現在的新版本。

2010年9月18日星期六

在Arch Linux安裝未被包括在核心軟件庫的程式

Arch Linux的軟件庫不是甚麼程式也會打包進去,一般軟件要進入軟件庫的程序是先要被加到AUR(Arch User Repository 社區用戶軟件庫)。在AUR內經投票或反對後,得到足夠票數的就會被放進軟件庫(community repository),之後就可以經pacman或ads來安裝。

要安裝一個在AUR找到個軟件可跟以下程序:

先到AUR搜尋想要的軟件 http://aur.archlinux.org/index.php?setlang=zh_CN



在該AUR軟件包頁面找連結下載壓縮包(Tarball)



下載後將他解壓
tar -xzvf pidgin-hotkeys.tar.gz
然後到該目錄下察看PKDBUILD和pidgin-hotkeys.install這兩個檔,目的是檢查裡面有否隱有不正當的script,因為AUR是整個社群也可以上載的,不加思索地安裝會有風險。

若沒甚麼異樣的話,可以執行指令裝作軟件包。
makepkg -s
那個-s是指,當這個軟件對其他軟件或涵式庫(library)有相依時,以sudo去主動找相關的軟件安裝。

安成後應該在出現一個以.pkg.tar.xz結尾的軟件包。執行pacman指令就可以安裝他。
pacman -U pidgin-hotkeys-0.2.4-1-x86_64.pkg.tar.xz
安裝完成

2010年9月7日星期二

Arch Linux接駁Google G1跑ADB (Android Debug Bridge)模式

Android系統若果開啟了USB Debug模式的話,可以經USB接駁電腦控制。在Arch Linux上搞了好久才知道怎樣連接我的G1使用ADB。以下是簡略的步驟,


首先,安裝Android SDK。這個可以使用yourt安裝AUR。

加上UDev rule,

su轉為root
vi /etc/udev/rules.d/51-android.rules

在文件裡加上:
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"

"0bb4"是給HTC的vendor ID,其他牌子ID可以這裡找: http://developer.android.com/guide/developing/device.html#VendorIds

儲存後,執行chmod令其他使用者也有權限可以使用。

chmod a+r /etc/udev/rules.d/51-android.rules


重新載入UDev的rule。

udevadm control restart

udevadm control --reload-rules

關掉正在執行中的adb

adb kill-server

在Android裡設定好使用USB Debug模式,Settings -> Applications -> Development -> USB Debug打勾。


接上Android到電腦後,查看Android有否被掛到Arch Linux上。

adb devices

若果看到自己的Android就可以連接了。用adb shell指令進入。

2010年9月5日星期日

停止MySQL server,及外間接入問題

mysqld無法停止?

有些系統在安裝mysqld時會創建一個mysql的user,並會在/etc/init.d/mysql start(這是Debian或Ubuntu的init daemon方式)時使用mysql這個user來啟動mysqld。所以使用/etc/init.d/mysql stop或restart會失敗([fail])。(有些系統會是/etc/rc.d/mysql restart)
所以我們要檢查mysqld是以哪個user來起動的,使用指令

ps ax | grep mysql

可以看到mysql是以 --user=mysql 來啟動的。那我們就用mysqladmin來關閉mysqld,指令

mysqladmin -u root -p shutdown

輸入密碼後就能關掉mysqld,上面的root用戶是mysqld裡面的root用戶,不是*nix系統的root用戶,請別搞錯。



mysql無法遠端連接?

若果防火牆沒有封檔,iptables也沒有把mysql的port擋掉的話(iptables -L查看),那就看看mysql的設定檔。

使用root修改mysql的設定檔

sudo vi /etc/mysql/my.cnf #非Debian或Ubuntu請先su後再把sudo這個指令拿掉

找bind-address這一行。如果他前面沒有#的話,請看看他是否設定為127.0.0.1或者localhost。要是這樣的話,可以再加一行bind-address設定,使用外界連接用的IP。像我的機器,

bind-address = 127.0.0.1
bind-address = 202.195.207.133 #外界接入的IP


重啟mysqld,外面應該能接入了。

2010年2月8日星期一

在Linux上刪除svn的檔案

在相應的目錄上輸入:
find ./ -name .svn -exec rm -rf '{}' \;
很方便,每層的svn的目錄就會被刪除了。

2010年1月24日星期日

[C#] 四捨五入

在C#便用Math.Round(),得出的結果並非慣常的四捨五入。

當進位時,若果是介於中間的數,給果會取決於捨位後的數值是基數還是偶數,系統會挑偶數作為捨位後的結果。例如2.5要捨位為整數,結果會是2,因為3是基數。

其實C#的Math.Round()有提供一個overload method可以該我們選擇使用甚麼方式捨位。
Math.Round(Double, MidpointRounding)

MidpointRounding是一個Enumeration,他包括了兩個members:
ToEven
AwayFromZero

ToEven就是原來這個捨位後的最接近的偶數。
AwayFromZero就是四捨五入了。

使用例子:
double naturalNumber = Math.Round( 1.2534, 1, MidpointRounding.AwayFromZero );
結果:

naturalNumber會是1.3

2010年1月14日星期四

用指令打包Java程式 - jar檔案製作

將Java程式打包成jar (Java Archive)


本篇文章基本上是用Sun提供的教學文件簡化再翻譯,仔細的原文可以這裡找到:http://java.sun.com/docs/books/tutorial/rmi/compiling.html


假設我們目錄下已有寫好的Java原碼。


目錄:
/net/antonyho/javaexample/


檔案:
An.java
Example.java


另外程式裡需用到其他library:
lib/neededLib.jar
 


執行指令 (Linux指令,各位在Windows下請改用相應的指令)
cd  /net/antonyho/
javac -cp javaexample/lib/neededLib.jar javaexample/javaexample/*.java


這時Java原始碼應該已編譯成.class檔案。
An.class
Example.class


再執行指令將他們包成jar
jar cvf anjarexample.jar javaexample/*.class javaexample/lib/neededLib.jar



完成後在目錄下會產生了jar檔和manifest檔 (/net/antonyho/javaexample/)
META-INF/MANIFEST.MF
anjarexampple.jar




執行這個jar檔輸入指令:
java -jar anjarexample.jar



改變執行這個jar時的進入點,假設執行jar時會執行javaexample.example:
jar cfe anjarexample.jar javaexample/Example.class