2007年12月27日 星期四

《 Linux 》資料備份手法

UNIX 課老師補充了一點,用 ftp 的方式進行兩台主機的資料備份
主要概念是以下幾點:
  1. ftp 批次操作
  2. shell script
  3. crontable 的設定
UNIX FTP 批次操作

[ 情境假設 ]

我在 192.168.81.128 Web Server 有一個 pccamp 資料夾,裡面都放置了許多網頁。現在我要定期備份到另外一台主機 192.168.81.132,利用 UNIX 課程教的方式逐步配置。

手動編輯/新增檔案 .netrc ,並在裡面進行以下設定:


machine ip/domain name login username passwd password


machine,login,passwd 為其關鍵字,不可以亂修改。
要記得修改 .netrc 得權限為 600,因為你面涉及了帳號密碼主機位址很機密。

接者再去新增一個登入 ftp 後的批次動作檔案,可以隨意名稱。


cd www
bin
put pccampWeb.tar.gz
quit



編寫 shell script 如下:


#!/bin/bash
cd www
tar zcvf ~/pccampWeb.tar.gz pccamp
cd ~
ftp 192.168.81.132 < ~/ftp.bat


加入排程在這邊先忽略,直接執行剛編輯好的 script 測試,成功!

##CONTINUE##

UNIX SSH Key

範例是用了 FTP 作資料備份,但是之前常常聽到 ftp 是多麼恐怖的通訊協定啊
資料完全沒有加密或是作處理,於是我比較偏好用安全一點的模式去備份資料,
我利用了 SSH RSA Key Pair 的機制和 shell script 完成上述的過程。

以下是編寫的 script:


#!/bin/bash
cd www
tar zcvf ~/pccampWebSSH.tar.gz pccamp
cd ~
scp -i ~/.ssh/id_rsa_suse pccampWebSSH.tar.gz bernie@192.168.81.132:~/www


主要的差異在於利用 SSH 的安全機制去傳遞資訊,至於 SSH 憑證方式的請參閱下一篇筆記。

[ 延伸閱讀 ]

UNIX ftp 網路教材

使用 SSH 配合憑證來遠端複製檔案 (scp)

2007年12月14日 星期五

《 Maya 》Glass & Light 設定

之前那篇 Maya Curves Edit 和 Surface 應用到現在還真是久遠啊
因為 Maya 期中作業對我這個沒設計天份的來說,真的很累人 :(

玻璃材質設定
老師課堂上教的設定,班上的美術天才 EaSon's BLOG 有紀錄
這邊只做小紀錄而已囉 :)
  • Color 和 Transparency 這邊要注意"透明"的定義。
  • Raytracing 中,要瞭解各物質的直射率,和 Refaction Limit 數量不可太多。
  • 加入反光板的設定:Plane 物件,Color 白色,Incandescence 白色。
物質折射率
  • 水:1.33
  • 玻璃:1.5
燈光設定
  1. 五種光的運用(Area用於模擬窗戶,Direction用於太陽光)
  2. Light Effects:
  • Light Fog:Fog Spread,Fog Intensity(適用於聚光,點光,體積光源)
  • Light Glow:衰減效果
  • Barn Doors:
  • Decay Regions

##CONTINUE##
這次練習 Render 出來的效果如下:
對了,大家不要跟我一樣用 IRP 去 Render圖片喔,那不支援光跡追蹤
害我一度以為我做錯了呢! :(



各種折射率
























From:維基百科,點擊放大圖片。

2007年12月10日 星期一

《 PHP》天啊! 又是 Warning: Cannot add header information

惱人的 Warning: Cannot add header information - headers already sent by ....
這個標題是 Neo's Blog 大大下的,我也是發生問題之後,去 Google 打了 headers already sent by
找到的精闢解說。


有空再解釋原理及發生的原因,一般可以用 PHP 的 ob 系列函數來處理,但是比較簡單的方式也可以用打開 PHP Output buffer 的方式來解決。




這句話我也好期待,可惜文章久遠,可能大大忘記了。
因為我不是虛擬主機,所以我走了一個最快的解決方式(找 php.ini 開刀)
找到以下這行,進行修改如下:



output_buffering=Off


改成


output_buffering=On


重新啟動 Apache 就好了:)

在我的 Webserv 裡面預設的 php.ini 中,發現 output_buffering = 4096
將整段敘述 Copy 上來看起較快:

; - output_buffering = 4096 [Performance]
; Set a 4KB output buffer. Enabling output buffering typically results in less
; writes, and sometimes less packets sent on the wire, which can often lead to
; better performance. The gain this directive actually yields greatly depends
; on which Web server you're working with, and what kind of scripts you're using.

只說明了使用 4KB 這個不大不小的好處,並沒有說明 header information 的始然。

2007年12月8日 星期六

《 PHP》.txt 轉 .xls ( 特定格式轉換 )

家裏的老大姐小小花前天跑來問我問題,我盡然被看得起啊(受寵若驚)
研究所的資料庫探勘課程要弄資料分析,據說教授丟了一堆.txt


3:
1025579,4,2003-03-29
712664,5,2004-02-01
1331154,4,2004-07-03
2632461,3,2005-07-22
44937,5,2004-06-22
656399,4,2003-09-20
439011,1,2004-01-22
1436762,3,2003-03-17
1644750,3,2003-03-19
2031561,4,2004-03-31
616720,4,2003-08-10
2467008,4,2004-03-15
975874,5,2004-02-09
701730,2,2005-10-05
1614320,4,2003-08-11
115498,3,2003-07-16
931626,2,2004-07-08
.........


檔案只列出部份而已,以上數據分別代表"顧客編號","評等","評分日期"
不過41kb的 .txt 還真多資料啊,在加上有一萬多個 .txt 檔案要處理到 SQL Server
小小花是說,轉成 Excel 檔會比較方便,然後他 Lab 的同學好像也都覺得
一個一個轉檔很麻煩,因為一萬多筆會累死人呢!

所以幫忙寫了一個小程式轉檔囉,以下是 php 的程式碼:

<?php
/*****************************************************
*
* 說明:大量讀取.txt,轉成.xls,針對檔案內容做的轉換
* 以下是部分檔案內容:
* 3:
* 1025579,4,2003-03-29
* 712664,5,2004-02-01
* 1331154,4,2004-07-03
* 2632461,3,2005-07-22
* 44937,5,2004-06-22
* ...
* 如果是別種檔案結構可能會有部份錯誤,見諒!
* 作者:寶尼
*
******************************************************/

// HTML 下載頁面
echo '<div align="center">';
echo '<h2>.txt 大量轉檔 .xls 程式</h2>';
echo '<h4>Author:Bernie (NCUE IM)<br/>2007/12/07</h4>';
echo '<p>Download</p>';

require('loadfile.php');

$i = 0; $flag = 0; $tmp = array(); $value = NULL;
// 讀取檔案
$tmp = openfile('./txt');
foreach($tmp as $data)
{
$tok = explode(".", $data);
$filename = $tok[0];
$filename_orginal = 'txt/'.$filename.'.txt';
$filename_translate = 'xls/'.$filename.'.xls';
$file = @fopen($filename_orginal,"r");
$file_translate = @fopen($filename_translate,"w");

while($buffer = fgets($file, filesize($filename_orginal))){
if($i++ == 0){
$value = $buffer;
}
else{
// 進行轉檔
$tok = explode(",", $buffer);
foreach($tok as $data){
$value .= $data;
if($flag != 2){
$value .= "\t";
$flag++;
}
else if($flag == 2){
$flag = 0;
}
}
}
}

$i = 0;
@fputs($file_translate, $value);
@fclose($file);
@fclose($file_translate);
$value = NULL;

echo '<a href="'.$filename_translate.'"> '.$filename.'</a><br/>';
}
echo '</div>';
?>


目前的方式會讓 /txt 底下的 .txt 檔案一次全部轉完並放到 /xls 底下,產生相同檔名的 .xls 檔案。因為我沒用過微軟另一個免費的大刀 MS SQL Server,所以不確定匯入外部資料的方式,是用那一種,反正只差在匯到資料庫而已,所以我的幫忙到此告一段落。

順便說一下,會知道 \t 在 excel 會放到下一個欄位,以及 \n 會換行是在如何用php將資料寫到Excel中 知道的,雖然是小技巧但是卻很屌,根本沒想到可以這樣互通有無啊,果真學到新的一技呢 :D

2007年12月3日 星期一

《 Java 》JavaMail 環境配置

工欲善其事,必先利其器,所以我們先到 Sun Micro 去 Download Classes

1) 下載的步驟這裡省略。
2) 將 javamail,jaf 解壓縮之後的幾個檔案複製到 C:\Program Files\Java\jdk1.6.0\jre\lib\ext
  • 說明:C:\Program Files\Java\ 是我的Java安裝路徑,jdk1.6.0是我的版本。請依照自己的路徑去作修正,只要放到當中的jre\lib\ext即可(言下之意是擴充extends,Sun Micro 設想真週到啊)。
  • javamail 的部份分別為:javamail\mail.jar,以及javamail\lib\ 底下的全部
  • jaf 的部份為:jaf\activation.jar
3) 接著,在環境變數下增加 C:\Program Files\Java\jdk1.6.0\jre\lib\ext
  • [我的電腦] 按右鍵 > [內容] > [進階] > [環境變數]
  • path 編輯,在最後加上 C:\Program Files\Java\jdk1.6.0\jre\lib\ext
  • 小心分號(;)
4) 如果有用編譯器的習慣記得將 jdk 的 Class 作更新的動作
  • JCreator:在 [Configure] > [Options] > [JDK Profiles] 會看到您的版本
  • 點選 [Edit] ,引入最新加入的全部檔案,這樣就可以用編譯器繼續 Coding 囉。

以上必須下載的檔案附在這裡,雖然說到目前為只是最新的,不過以後就不知道啦。
有需要的話,就自取 [JavaMail 1.41] [Jaf 1.11]囉。

2007年12月1日 星期六

《 Debian 》啟動 Apache 特定模組

作業系統:Ubuntu 7.10 (Debian 系列)

Apache 預設安裝會在 /etc/apache2 底下
  • apache2.conf 為主要的設定檔
  • httpd.cong 為其他使用者設定檔,apache2.conf 會引入該檔案中的設定,所以也可以將一些設定的部份放在這裡,是沒問題的。
  • mod-available 資料夾:放了許多的模組引入位址,通常會在 /usr/lib/apache2/modules/ 裡面,.load檔就是將他們進行引入的動作,而另一種 .conf 就是針對該模組的設定部份囉。
  • mod-enabled 資料夾:將 mod-available 裡面需要的部份就列入 apache2 啟動的對象,裡面都是符號連結檔(Symbol Link,又稱 Soft Link),他們進行連結到上述所說得資料夾。
  • 認識指令:ln -s source target 即可產生連結。
  • 進階指令:a2enmod、a2dismod、a2ensite、a2dissite
  • 進階指令範例:a2enmod userdir,a2enmod rewrite
  • conf.d 資料夾中有 charset 為設定預設的網頁編碼。
種種的設定完成之後,一定要記得重新啟動 apache
進階指令其實都含蠻語意化的,很清晰的表達囉。


/etc/init.d/apache2 restart


修正日期:2008/01/08