FTP檔案傳輸雖然不是安全的協定,
但在公司內部,由於使用方便簡單,
如果需要在不同主機間交換檔案,至今仍然是一個好的方式。
但在實務應用上,如果需要傳遞的檔案比較大,
有可能發生提供檔案的程序仍在執行中,
而收檔的程序已經開始進行檔案下傳了,
結果收到的檔案便會不完整,也無法立即發現,
需要額外的檢查程序,才能夠確認是否有問題。
這個問題有兩個可能的解決小技巧:
第一個是傳送時先使用暫時檔名(比如檔案名稱前加個底線),
等到傳送完成時再將檔名改成正確的檔名。
如此一來,當收檔的程序'看'到檔案的時候,
必定是已經傳送完成的狀態了。
只是這個方法需要傳送檔案的程序配合。
另外一個類似的方法是在傳檔完成後,
多傳一個小檔案(比如檔案名稱後加個".ok"),
當收檔的程序'看'到這個小檔案的時候,
也必定是已經傳送完成的狀態了。
這個方法同樣需要傳送檔案的程序配合。
或許有人會想說,
也可以經由持續檢查檔案的檔案大小,
或檔案最後修改時間來判斷是否已經傳送完成,
只是這個方法必須依賴不同遠端作業系統的一致性,
不如前面二種方法來得可靠。
參考連結
2011年8月30日 星期二
Time::Piece 模組
Time::Piece 是CPAN上的一個模組,
用來處理日期時間,跟DateTime模組一樣簡單好用。
它主要是取代原有的localtime以及gmtime,改為物件方式來處理日期時間。
( * 有關日期時間的處理,可以參考這篇文章The Many Dates and Times of Perl)
用來處理日期時間,跟DateTime模組一樣簡單好用。
它主要是取代原有的localtime以及gmtime,改為物件方式來處理日期時間。
( * 有關日期時間的處理,可以參考這篇文章The Many Dates and Times of Perl)
use strict; use Time::Piece; # Time::Piece模組會取代原有的localtime & gmtime # localtime會傳回Time::Piece物件 my $dt = localtime; # Time::Piece物件在字串語境下,也會自動跟localtime的輸出是一樣的 print "Time is $dt\n"; # Time is Fri Aug 26 17:12:31 2011 print "Year is ", $dt->year, "\n"; # Year is 2011 print $dt->datetime, "\n"; # 2011-08-26T17:12:31
2011年6月5日 星期日
2011年5月4日 星期三
VMware-Player 問題處理
作業系統更新至Ubuntu11.04後,
今天是第一次開啟VMware-Player,
想要更新WinXP,
沒想到VMware-Player開不起來,
按例上網Google找最近一週的網路資訊
依樣畫葫蘆的胡搞了十幾分鐘,但沒有成功
最後直接連上VMware官網,
下載最新版的VMware-Player-3.1.4-385536.x86_64.bundle
簡單兩行
chmod +x VMware-Player-3.1.4-385536.x86_64.bundle
sudo ./VMware-Player-3.1.4-385536.x86_64.bundle
竟然一切順利正常
搞定收工
今天是第一次開啟VMware-Player,
想要更新WinXP,
沒想到VMware-Player開不起來,
按例上網Google找最近一週的網路資訊
依樣畫葫蘆的胡搞了十幾分鐘,但沒有成功
最後直接連上VMware官網,
下載最新版的VMware-Player-3.1.4-385536.x86_64.bundle
簡單兩行
chmod +x VMware-Player-3.1.4-385536.x86_64.bundle
sudo ./VMware-Player-3.1.4-385536.x86_64.bundle
竟然一切順利正常
搞定收工
2011年5月2日 星期一
Term::ShellUI 模組
Term::ShellUI 是CPAN上的一個模組,
用來建立像shell一樣的文字模式人機介面。
多了一層介面,
當然意味著可以隨需要增強或限縮可以做的事情,
也可以紀錄使用者在連線過程中,
所操作的每一個按鍵與時間戳記,
所謂"凡走過必留下痕跡"需求下,
這算是基本必要的功能。
另外,也可以再建立另外一組應用層使用者,
一方面可以減少系統使用者數量,
同時也能夠簡化作業權限的管理。
類似的想法,也能夠用web的方式來實現,
端看實作環境與作業特性來選擇。
由使用文件範例稍做修改如下:
這個模組的基本用法整理如下:
經由自動產生的help畫面,
知道可以執行的指令有哪些,
中文顯示沒有問題,
cd切換目錄,經由pwd指令確認沒有問題,
lsl也正常,但是ls如同預期不能執行,
最後,雖然指示quit離開,但因為程式設定exit是quit的別名,
所以打exit或quit都可以離開。
《影片使用recordmydesktop錄製,再使用vlc轉成mp4》
用來建立像shell一樣的文字模式人機介面。
多了一層介面,
當然意味著可以隨需要增強或限縮可以做的事情,
也可以紀錄使用者在連線過程中,
所操作的每一個按鍵與時間戳記,
所謂"凡走過必留下痕跡"需求下,
這算是基本必要的功能。
另外,也可以再建立另外一組應用層使用者,
一方面可以減少系統使用者數量,
同時也能夠簡化作業權限的管理。
類似的想法,也能夠用web的方式來實現,
端看實作環境與作業特性來選擇。
由使用文件範例稍做修改如下:
use Term::ShellUI;
my $term = new Term::ShellUI(
commands => {
"cd" => {
desc => "Change to directory DIR",
maxargs => 1,
args => sub { shift->complete_onlydirs(@_); },
proc => sub { chdir($_[0] || $ENV{HOME} || $ENV{LOGDIR}); },
},
"chdir" => { alias => 'cd' },
"lsl" => {
desc => "List files in working directory",
maxargs => 0,
proc => sub { system('ls -l'); },
},
"pwd" => {
desc => "Print the current working directory",
maxargs => 0,
proc => sub { system('pwd'); },
},
"help" => {
desc => "Print helpful information",
args => sub { shift->help_args(undef, @_); },
method => sub { shift->help_call(undef, @_); }
},
"exit" => { alias => 'quit' },
"quit" => {
desc => "結束作業", maxargs => 0,
method => sub { shift->exit_requested(1); },
}},
history_file => '~/.shellui-history',
);
print 'Using '.$term->{term}->ReadLine."\n";
$term->prompt('OP-Shell: ');
$term->run();
這個模組的基本用法整理如下:
- 建立一個command set,這個command set就是使用者可以執行的指令。
- command set 基本上是一個以hash為主的資料結構,詳細參見文件說明。
- 同一個指令可以有別名。
- command set可以遞迴,也就是可以有"次指令 sub command"的功能。
- 支援指令歷程command history,按上下鍵選擇。
- 支援中文 (要安裝Term::ReadLine::Gnu)
經由自動產生的help畫面,
知道可以執行的指令有哪些,
中文顯示沒有問題,
cd切換目錄,經由pwd指令確認沒有問題,
lsl也正常,但是ls如同預期不能執行,
最後,雖然指示quit離開,但因為程式設定exit是quit的別名,
所以打exit或quit都可以離開。
《影片使用recordmydesktop錄製,再使用vlc轉成mp4》
2011年4月23日 星期六
整批檔案格式轉換
習慣將喜愛的音樂光碟做一份備份
之前使用nero燒錄程式所做的備份
預設是存成nrg格式。
自從2010年家中的電腦因Windows版權問題
改成免費而且已經穩定好用的Ubuntu系統
沒有辦法直接掛載*.nrg格式映像檔
日積月累的數位檔案也已經"氾濫成災"
花了點時間
集中整理放在同一顆硬碟上
希望格式也都是統一的ISO格式
2~3百個光碟映像檔當然不可能適合手動轉換
簡單方法如下
之前使用nero燒錄程式所做的備份
預設是存成nrg格式。
自從2010年家中的電腦因Windows版權問題
改成免費而且已經穩定好用的Ubuntu系統
沒有辦法直接掛載*.nrg格式映像檔
日積月累的數位檔案也已經"氾濫成災"
花了點時間
集中整理放在同一顆硬碟上
希望格式也都是統一的ISO格式
2~3百個光碟映像檔當然不
簡單方法如下
# Linux下,將目錄內所有 *.nrg轉成 *.iso檔
# 使用 nrg2iso 指令
use strict;
my @nrg = glob "*.nrg";
for my $nrg (@nrg) {
# 需要將副檔名 .iso 改成 .nrg
my $iso = $nrg;
$iso =~ s/\.nrg$/\.iso/;
# 印出 nrg2iso 的輸出
print `nrg2iso "$nrg" "$iso"`;
}
2011年4月5日 星期二
如何排除安裝Perl模組時可能遇到的各種問題?
Perl不像Python,有著號稱"batteries included"的預設模組庫,
通常得視需要,安裝適宜的模組。
這兩種截然不同的"武器裝備哲學"到底孰優孰劣,
標準答案當然是:各有優缺點,青菜蘿蔔各取所愛。
使用cpan方式來安裝Perl模組,
通常會很順利地自動下載(以及自動下載所依賴的其他模組)、測試、安裝,
但是偶爾遇到安裝失敗時,怎麼辦?
最常見的方法是用look 模組的方式,以分解動作來手動安裝。
今天安裝DateTime::TimeZone時,dmake吐出了一個錯誤訊息
這個問題,得額外加上一個參數才行MAXLINELENGTH
(30000是任意數,應該不用這麼大)
大多數的問題,經由look手動安裝,見招拆招,多能順利解決。
通常得視需要,安裝適宜的模組。
這兩種截然不同的"武器裝備哲學"到底孰優孰劣,
標準答案當然是:各有優缺點,青菜蘿蔔各取所愛。
使用cpan方式來安裝Perl模組,
通常會很順利地自動下載(以及自動下載所依賴的其他模組)、測試、安裝,
但是偶爾遇到安裝失敗時,怎麼辦?
最常見的方法是用look 模組的方式,以分解動作來手動安裝。
c:\> cpan cpan> look POE > perl Makefile.PL > dmake > dmake test > dmake install exit
今天安裝DateTime::TimeZone時,dmake吐出了一個錯誤訊息
dmake.EXE: makefile: line 1312: Error: -- Input line too long, increase MAXLINELENGTH
這個問題,得額外加上一個參數才行MAXLINELENGTH
(30000是任意數,應該不用這麼大)
c:\> cpan cpan> look DateTime::TimeZone > perl Makefile.PL > dmake MAXLINELENGTH=30000 > dmake MAXLINELENGTH=30000 test > dmake MAXLINELENGTH=30000 install
大多數的問題,經由look手動安裝,見招拆招,多能順利解決。
訂閱:
文章 (Atom)
