27 9月 2007

[Perl] Sub function傳入兩個以上的Array的問題...

sub FUNC{
foreach(@_){
print "$_n";
}
}
my @zzz1 = split(/ /,"ab1 cd1 ef1");
my @zzz2 = split(/ /,"ab2 cd2 ef2");

FUNC(@zzz1, @zzz2);

原本Perl的sub function傳入多個參數是允許的
但是它會自動將傳入的參數存成@_的Array
所以若傳入兩個Array當參數
則在Sub FUNC中會將這兩個Array視為一個Array...
這樣就會產生問題了...

上面的程式碼就是將@zzz1,@zzz2兩個Array傳入sub FUNC
而sub FUNC會將這兩個Array存至@_中, 視為同一個Array

[Perl] local的用法

原本local的用法
是為了怕變數被sub function更改到 才有這個用法的
因為perl原本都不用宣告就能使用參數了
所以若是
sub Test
{
$abc = 0;
}
$abc = 100;
Test();
print $abc;
#印出來的值會是0
#因為 sub function中,使用了$abc在之前就宣告了, 所以程式會拿之前宣告的$abc的memory來使用
# 所以呼叫Test()後 值就變了

因此,若是不希望sub function會改到全域(呼叫它的也可能是sub function)原有的變數
就必須在sub function裡的變數 加上local這個關鍵字
sub Test
{
local $abc = 0;
}
$abc = 100;
Test();
print $abc;
#印出來的值會是100


另外一點就是...若程式使用了
use strict
就不能使用local了
因為上面這種情形就不會出現了...凡事要用的變數都要宣告
就不會分不清楚是「區域變數」還是「全域變數」了

[PHP] -error- UTF-8檔案中存有BOM

Warning: Cannot modify header information - headers already sent by進入網頁後若出現上面的警告文字

就是當你的檔案想用UTF-8編碼時
若利用UltraEdit-32時 將ASCII轉成UTF-8時
它會自動幫你在檔案前面多加了BOM的資料
但PHP不認識,所以開啟時會出現這樣的訊息

所以若想將原本Big5編碼的檔案轉成UTF-8
可以用Notepad++選擇"格式" => "編譯成UTF-8碼(無BOM)"即可


Notepad++真是個好物啊!
大部分的程式我都用它來撰寫
Notepad++網站連結

[Perl] 精要整理

正規表示式m// 比對
s/// 取代(只取代一次)

加在字尾部分 ex: m/falldog/ig
/s 跨行比對
/g 全域取代
/i 忽略大小寫

字符集...
d 數字(digital),代表[0-9]
w 單字(word),代表[A-Za-z0-9_]
s 空白(space)
f 跳頁(form-feed)
t 跳格(tab)
n 換行(new-line)
r 回行首(carriage return)
....w* => 0個以上的單字
....w+ => 1個以上的單字

 

[Tomcat] 如何防止目錄被瀏覽?

有時候 安全性也是挺重要的
因此,若是怕目錄被別人看透的話,是可以避免的

在 tomcat安裝目錄/conf/底下,找到web.xml檔案,尋找

<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>

把true改成false就好囉 

[JSP] 取得Client的IP

String ip = (String)request.getRemoteAddr(); 

[JSP] 將openDB、closeDB抽開來寫

通常在開發一個與資料庫連結的JSP專案時
常常每一個檔案開頭、結果都會有著同樣的code...
就是openDB, clodeDB的部分...

///一般jsp頁面要讀取資料庫寫法~
<%@ include file="../Connection/openDB.jsp" %>
...
...
<%@ include file="../Connection/closeDB.jsp" %>



///////////////////////////////////////////////////////////////////////////

///將openDB、closeDB抽出來的寫法~
//openDB.jsp的寫法
//...不能用try catch包起來...否則con這個變數只能生存在該try區塊中~
<%
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/SchoolList" );
%>


//closeDB.jsp的寫法
<%
try{
con.close();
}catch(Exception e){
out.println( e.toString() );
}
%>

[JSP] request.getParameter 中文的問題

request.getParameter 出來的結果常常會出現亂碼...這就是編碼的問題...

法1:針對單一個request
String name = new String( request.getParameter("name").getBytes("ISO-8859-1"), "Big5");


法2:針對此頁中的所有request
<%request.setCharacterEncoding("Big5");%>

[Java] 讀檔 對字串切Token

讀檔 對字串切Token

    String fileName = "xxx.txt";

FileReader fr = new FileReader( fileName );//讀檔

BufferedReader stdin = new BufferedReader( fr );
//將fr置入BufferedReader, 只有BufferedReader能readLine()



StringTokenizer stoken = null;

while( stdin.ready() ){

stoken = new StringTokenizer( stdin.readLine() );

while( stoken.hasMoreTokens() ){
System.out.println( stoken.nextToken() );
}
}
 

[Notepad++] 快速鍵改不回來

原本用Notepad++3.5版
為了修改檔案方便
DEL的快速鍵改掉成F3
結果後來就改不回來了...



後來不管是重新安裝or安裝更新版3.7版
還是沒有用

直到找到一個檔案才發現
快速鍵的設定在檔案中


1. 開啟執行對話窗(開始->執行)。注意:Notepad++ 應該關閉。
2. %APPDATA%Notepad++ 複製到執行對話窗,選取 ok,這將會開啟 Notepad++ 目錄視窗。
3. 在開啟的目錄視窗中,開啟shortcuts.xml
4. 找到

<ScintillaKeys>
....
<ScintillaKeys>

 在這個區間裡,應該就會有你所設的快速鍵的設定,把那一行刪除,儲存,就ok了

[Ubuntu] apt-get install出現錯誤

出現cdrom://Ubuntu....的錯誤訊息

必須至/etc/apt/sources.list 把那一行註解掉

[Ubuntu] 網路設定

在/etc/network/中


1. 所以我們先假設網路是由dhcp派送
我們該如何設定 eth0這張網路卡
% vim /etc/network/interfaces
auto eth0
iface eth0 inet dhcp 這樣即可


2. 若我們的IP 是固定的有該如何設
% vim /etc/network/interfaces

# The primary network interface
auto eth0
iface eth0 inet static
address 140.113.208.120
netmask 255.255.255.0
gateway 140.113.208.254
dns-nameserver 140.113.250.135


3. 另外還有loopback記得要設定(照理來說應該預設會有)
% vim /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback


存檔離開 即可
別忘了 最後一步當然是重新啟動網路服務
讓新的值生效
% /etc/init.d/networking restart

DNS name servers 還有一個地方要改:
% vi /etc/resolv.conf
nameserver 140.113.250.135

從Lifetype移機至Blogger

我想這是個重要的決定,畢業自架主機不是長久的辦法,以後流量愈來愈大(可能...),所以現在用學校的網路還撐得過去,但是以後一定要想辦法移機至虛擬主機上,可能花得錢多多、限製也多多。所以倒不如移至Google的Blogger,畢竟我也是個Google的愛好者(還幻想能到Google上班呢XD)~

而原本Lifetype上使用的dp.SyntaxHighlighter也改用Google Code Pretty,這部分暫時用鴻哲提供的css吧,以後有機會再自己改一下:p

01 1月 2000

Skype API

Skype提供了Skype API給開發者使用,而Skype API並非像一般的Library一樣,不如說是Plugin的開發套件還比較貼切。因為Skype API只能「控制Skype」,並不能直接存取Skype的Library。

Skype API提供了兩方法:(1) Windows Message (2) Com 控制Skype,以下寫了一些文章介紹Skype API,請客倌們慢用吧。

Windows Message

Skype4Com

Skype4Py