2009/10/30

利用 jacascript 來繪圖

最近因為工作上的需要,急需要一套可以利用 javascript 來畫曲線圖的工具,於是再度透過 google 大神的介紹,先是找到了 flot ,這是
基於 jQury 來繪劃出的,剛好這一陣子就在學 jQuery, 所以便選了它。但是試用一下後,發現它有一個致命傷,就是碰到 ie6 時,那個繪圖
網頁便會跳出一些警告,怕使用者會使用不便,於是我再去找到另外一套 Js Charts!

經過一再的嘗試,我決定就使用它來運作。

以下是我作出來的結果:


底下便是我的程式:



不過,這套 JsCharts 還是有幾點的缺點
1. 當 X 軸是日期時,就完全要自定坐標了, 但是自定坐標值時,若該座標沒有點時,就不會出現文字。這有點麻煩。

2. 一條數線上必須要有兩點以上才可以,沒有點或只有一點時,它是完全停擺,還送出個警誥訊息來,不太方便。

3. Title 不接受中文,不過當滑鼠移到點上面時,出現的說明可以有中文!

4. 當滑鼠移到點上面所出現的說明, 在 ie6 時,越告右邊的點,越會亂折行!

基於以上幾點, 我想我應該還會再找一個更適用的工具了 !!!

JsCharts 的網站 : http://www.jscharts.com/

2009/10/5

如何防止當按下 enter 鍵後, 表單就送出 submit 了

應工作需要, 必須限制使用者隨便在輸入的欄位中按下 enter 鍵,就把資料送到後方去了, 造成一些不必要的影響。便又開始從 google 大神那邊來搜找解法。google 大神這次還是沒有讓我失望,輕易的找到了解決作法!

當然了, 還是用 javascript 的作法來解決了 !





至於程式中,則更簡單了, 如下

2009/9/30

解決 ie6 無法如預期顯示透明的 png 圖

ie6 真的是很討厭, 對於 png 圖的支援有限,當網頁中此用了透明的 png 圖時,不但不會透明,還會以灰色的底來呈現,讓網頁變得超級難看 !

於是請出 google 大神去找一下,果然有解法,

以下為解決步驟 :

1. 到 DD_belatedPNG 去下載 js 檔, 網上有兩個, 下載任一個都可以!

2. 上傳到自己的網站上去

3. 在網頁中加入,


問題便解決了....

2009/9/29

灌籃高手最終章...

不小心再度看到這漫畫的最終章
這是當年第一次讓我看漫話和到喉結酸痛的
太熱血了....

灌籃高手 nba 2009

哇 ! 有人能作出這樣的影片, 真是太厲害了點 !!!

2009/8/8

颱風天的父親節聚餐

 今天颱風天也是父親節,老婆說要去加州風洋館吃晚餐,算是幫我作個父親節聚餐!

我們沒有事先訂位,原以為會沒座位,沒想到下午去的時候還可以臨時訂到五點的座位,有點出我的意料之外。因為往常我們沒事先訂位的話,一向都是吃不到的!尤其今天是父親節理當會暴滿才是說!

 這裏我來過一次,感覺上還算經濟實惠,東西不會太膩,所以老婆說的時候,我是當然點頭同意。

開胃菜-- 香酥炸雞捲 : 全家都喜歡吃,我這很少吃油炸的人也不例外,只不過一盤四個被小孩分光了,我只吃到一個!


在來是湯,我點的是玉米濃湯,其實是幫小孩點的,我只喝了兩口,玉米粒不算多 ( 也可能都被小孩撈光了 )我沒吃到幾粒。


麵包,呵,我都還沒照到就被吃掉幾片,也不錯吃,不過老婆大人說有點油!


大女兒點的是- 海鮮焗飯 : 看起來好像很好吃的樣子 !


兒子點的是 - 雞肉焗飯 : 看起來也很好吃。我有偷吃一口,蠻入口的,難怪一向吃不完東西的小子會整盤清光。


老婆和二女兒共用是 - 米蘭起烤豬排 : 看他們吃的很津津有味,應該不錯吧!


呵呵,我點的是加州碳烤雞排,圖片上的蕃茄醬不多,不過實際東西上面的蕃茄醬太多,有點把烤雞肉的香味搶去不少。


 只不過吃完後,還是有我刷卡付帳,真搞不清是不是來慰勞我這老爸的辛苦就是了。呵呵,東西好吃,全家都很高興就好,其它的一切就都不重要了。

2009/7/16

在 Oracle 定時執行 Stored Procedure

進入 pl/sql 後

SQL> variable a1 number
SQL> exec dbms_job.submit(:a1,'compm24diff;',sysdate,'TRUNC(SYSDATE+1) + 480/1440' ); // 每天早上 8:00 執行 sp : compm24diff
SQl> print a1
A1 = 1
SQL> exec dbms_job.submit(:a1,'compm24per;',sysdate,'TRUNC(SYSDATE+1) + 500/1440' ); // 每天早上 8:20 執行 sp : compm24diff

SQl> print a1
A1 = 2

即可

2009/5/20

備份Oracle Data 到backup Server 的 作法

讓 backup server 自動將 oracle server 的資料留存一份

( 透過 scp 的方式)

1. 在 oracle server 上, 用 oracle 這帳號來登入
mkdir /backup/daily
chown -R oracle.oinstall /backup

2. vi ~/backup.sh
內容如下 :
export time=`date '+%Y%m%d-%H%M'`

export ORACLE_HOME=/oracle/product/9.2.0
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export NLS_LANG=AMERICAN_AMERICA.UTF8

exp userid=ip200/ip200pwd@ENOTER.LOCALDOMAIN file=/backup/daily/ip200-83data.dmp owner=ip200 log=/backup/daily/ip200-83data.log
exp userid=health/healthpwd@ENOTER.LOCALDOMAIN file=/backup/daily/health-83data.dmp owner=health log=/backup/daily/health-83data.log


3. crontab -e
增加一筆資料
10 12,23 * * * sh /home/oracle/backup.sh >> /home/oracle/log/backup.log 2>> /home/oracle/log/backup.err
(我是設定每天備份兩次 , 分別是在 12:10 和 23:10 )

4. 到 backup server 上, 用 要 backup 的帳號登入 ( 假設是 backup )
mkdir /backup/daily

5. cd ( 回$HOME )
vi backup83.sh
內容
scp oracle@oracle_server_ip:/backup/daily/health-83data.dmp /backup/daily
scp oracle@oracle_server_ip:/backup/daily/ip200-83data.dmp /backup/daily

6. 因為我們是要採用 scp 將資料備份過來, 但是 scp 會詢問 password
自動備份時,將會讓備份作業失敗, 所以必須讓 oracle server 信任 backup server
因此要在 backup server 上產生 private key 和 public key

ssh-keygen -C oracle@oracle_server_ip -t dsa

會產生兩個檔
$Home/id_dsa 和 id_dsa.pub ( 當然了, 在產生過程中可以改名 , 此時再改也無妨 )

7. 將 id_dsa.pub 傳送到 Oracle Server 去

scp ~/.ssh/id_dsa.pub oracle@oracle_server_ip:~/

8. 回到 Oracle_server 上

在 Home Directory 下先 ls -la 看一下有無 .ssh 這個隱藏檔

a. 若有的話, 下以下的指令
cat ~/id_dsa.pub >>~/.ssh/authorized_keys

b. 若沒有 .ssh 目錄的話
mkdir .ssh
cp ~/id_dsa.pub ~/.ssh/authorized_keys

9. 再來到 Backup Server 上 建立 crontab
crontab -e
加上以下一行命令
20 12,23 * * * sh /home/young/backup83.sh
在 12:20 和 23:20 把data copy 過來, 時間上晚了 10 分鐘,
當然了若您的 Oracle Server 資料量過多, 在 10 分鐘內可能 export 不完
這時間可以在往後延一些

10. 大功告成, 只要定時看一下 oracle 的 data 有沒有被放到 Backup Server 上即可!!!!!

2009/3/11

探究一下我愛喝的七葉膽《by 童顏未老人》

 喝了好一陣子的七葉膽,不過對它的作用還一知半解,僅僅是覺得它的味道很讓我喜歡,尤其是入口後的滿嘴的香氣讓我就這樣的喝了好幾個月。

 這幾天開始到網路上看一下七葉膽有何作用,收獲還真不小:

 從植物本身的生場環境來看,七葉膽的生長分布相當的廣,從中國陜西南部及長江流域以南各省區,均有其生長蹤跡,尤其以雲南一地的種類最多。另外在韓國、日本、越南、印尼等地區亦有它的蹤跡。咱們台灣在海拔 600 公尺到 2000 公尺的山谷陰濕處均能生長。

 其內容成份中:
 蛋白質19.88%、
 碳水化合物65.5%、
 粗脂肪1.7%、
 灰份1.54%、
 水份7.5%、
 其他1.93%(許,1999)。
 另外七葉膽含有很多種皂甘,其中含有五、六種皂甘與人參相同,故有甘味。

 其作用 :

1. 七葉膽皂甘的化學結構與人參相同者多,故其取代人參的功能受人重視。且七葉膽能明顯的升高白血球數值,能增加白血球的吞噬功能。

2. 能明顯抑制子宮、肝、肺、黑色肉瘤等癌細胞的生長、增殖,以及其他內外腫瘤,對消化道癌有一定輔助治療功效,另痰氣鬱結者,尤為適宜。

3. 保肝作用
A.抗自由基損傷作用:能抑制肝臟和血漿的脂質過氧化反應,降低肝臟脂質氧化物含量,還能增加自由基損傷細胞超氧化酵素的活力,顯示其有抗氧化和抗自由基損傷的作用。
B.以七葉膽粗皂甘餵給大鼠,可以降低以高脂質、高糖食物為食物的大鼠血中之三酸甘油脂(Tri-glycerol)、脂質過氧化物(LPO)、總膽固醇、磷脂質、麩氨酸-焦葡萄酸轉氨脢(GPT)之含量(Kimura et al., 1983;Cour et al., 1995)。
C.以吞噬細胞、肝微粒體及血管內皮細胞做氧化試驗,七葉膽能降低人類嗜中性白血球之超氧化物陰離子及過氧化氫的含量,故可減低被氧化作用,增加細胞存活率(Lin et al., 1993)。
D.能抑制四氯化碳所致的急性肝損傷,對肝細胞空泡變性、炎性浸潤、壞死等有保護功能。

4. 抗血小板凝集作用:抑制及誘導血小板的凝集與釋放,對某些心脈 血管疾病的防治,有一定的功效。

5. 血流動力學的影響:能降低腦血管及冠狀血管的阻力,增加冠脈流量,減慢心率,明顯的有降低血壓的功能。
抗心肌缺血缺氧作用:能減輕缺血心肌組織結構的損傷程度,亦能縮小心肌梗塞範圍,對心肌細胞有保護功能。
降血脂作用:能抑制脂肪細胞產生游離脂肪酸及合成中性脂防,對脂質代謝失調有調解和改善的功能,所以對高脂血症有防治的作用。

6. 能預防調節血糖與胰島素的協調功能,所以對大渴、 多飲的糖尿病患者,能減輕其症狀。

7. 具有顯著的鎮靜、催眠、抗緊張的作用,對於精神緊張、鎮痛以及神經衰弱、失眠等效果明顯。

8. 健腦、學習記憶增進作用,所含有效成分如人參皂等,能促進腦細胞的活化,因此對於學齡兒童之學習力、記憶力,有增強作用,並有防治老人癡呆症的功能。

9. 抗衰老作用:明顯提高免疫力。促進機體神經細胞生長及保護延緩腦細胞萎縮,增強腦的活力和記憶力。

10. 其他作用:對於腰痛、風溼痛、肩部肌肉僵硬、慢性支氣管炎、哮喘、胃十二指腸潰瘍、痔瘡、四肢冰冷、畏寒、舒解工作及生活壓力、保持體力等均有良好的預防和治療的功效,並能減輕類固醇藥物的副作用。

( 資料參考自 : http://www.dharma.com.tw/X1Chinese/D32Health/H404Leaf7.htm )


看起來功效不差,不過,聽說台灣本來是有人專門來種植它,但是在價格上難敵來自中國的劣等品,所以已經不種了。看來我買的那包極有可能是來自中國的差品,聽說差別在於來自中國的七葉膽是直接青採乾燥,有比較重的腥味,難怪我家人沒有一個會喜歡喝它。而台灣所出產的七葉膽是採用的是日本進口的乾燥機,採半青熟烘焙,兼具重烘焙及青採乾燥的優點,所以要好喝上許多。價格上當然也差了兩倍多,只可惜已不在生產了。幸好的是這些中國的七葉膽並不是那種農藥過多或富含重金屬的可怕東西,那我就可以放心的繼續喝下去了 :)

2009/3/6

php 對 oracle clob 的新增與修改《童顏未老人》

php 要運作 oracle 的 clob 時,若沒有特別去處理的話,每次增改的字串長度還是會受到限制。這方法我每次用過就會忘了, 特別記錄下來 , 以免以後又要找一遍。

( 註 : 我是採用 ADODB 的 )

假設我的 table 是這樣的 :

create table docfile (
DocID Number Not Null,
DocTitle Varchar2(100 byte),
DocCont Clob,
TX_DATE Date Default sysdate );

今天若要增加一筆 record 進去的話
$ID = 1422;
$Title = '我愛美女';
$DocCont = '我愛林志玲,隋棠,蕭薔,'.......(設有數千字 )


$sql = "insert into docfile ( DocID,DocTitle,DocCont,tx_date) values ( ";
$sql .= $ID.",'".$Title."',empty_clob(),sysdate)";
$conn->Execute($sql);

資料已 insert 進去了

然後 執行

$conn->UpdateClob('docfile','docCont',$DocCont,'docid='.$ID);

如此一來便不怕字串會有長了!

若要 update 的話, 就更簡單了, 直接執行便可
$sql = "update docfile set doccont = empty_clob() where docid = ".$ID;
$conn->Execute($sql);
$conn->UpdateClob('docfile','docCont',$DocCont,'docid='.$ID);


!!!

2009/2/28

用 javascript 來取代 marquee 《by 童顏未老人》

 最近網站上的部份功能被老板要求要改變了,他希望公司的訊息能跑馬登的方式來呈現,呵,這不太難:


 不過這會有一個問題,那就是在 "星期五,同劉真去跳舞" 和 下一次出現的 "星期一,幫林志玲穿新衣" 間會有一大塊的空白,會形成冷場,所以這不是我所要的。但是我在網路上找半天後發現,用現成的 marquee 來製作的話,好像就一定會有這一大塊的空白。恩,看來要用 javascript 了。


 先用 google 大神找一下,果然網路上有現成的,但是很多都是有點小問題,不是只能在 ie 跑,要不然在 firefox 下會毫無動靜,不過還是讓我找到一個最簡單又貼近我的需求的作品,雖然它有一個小問題,就是當滑鼠移入後不會讓跑馬燈停下來,不過這還好,修改一下就可以了 :


而結果也還算是如人意,若想要調整捲動速度時, 僅要去改一下 setInterval(NewsMarquee,100); 裏面的數字即可 !

2009/2/24

oracle 主機毀損歷險記《by 童顏未老人》

 昨天是我碰過最精采刺激的一天,咱公司的 Oracle DB Machine 竟然無預警的就掛點了。所有的公司運作當場停擺。雖然最後是有經無險的渡過,但是我相信這是冥冥中給我的提醒,要我對可能發生的問題及早準備。

 昨天下午 Oracle 一罷工之時,我二話不說立刻飛車衝到機房去。本來僅僅以為在 console 前去操作一下就可以救回來了,那知問題可真是大了。它在 filesystem check 時便過不了了,直接要我輸入 root 密碼切入到 Repair filesystem 的 mode 下去,因為看到他寫著 /dev/sda3 發生問題,所以我只好下 fsck /dev/sda3 那知它回吐給我 fsck.ext3 for device /dev/sda3 exited with signal 11 這樣的訊息。

 接著下 e2fsck /dev/sda3 ,回給我另一個錯誤訊息 : Segmentation fault。這時我已有點擔心了,我擔心會是 Hard disk 毀損,這最慘的情形。且當我硬要用 mount 測試一下時, 他回給我 wrong fs type, bad option ,bad superblock on /dev/sda3 ! 看到這裏,我心中其實有點明瞭了,硬體應該是掛了,只是不知是硬碟還是 其他周邊設備出問題。

 於是我先回到公司去把安裝光蝶帶到機房去,改用第一片胱碟開機,再去 fsck 一下,狀況依舊,不過他就會問我要不要去修復,我再狀況未明下不敢冒然回答要。但是我仔細看一下他 mount 在 /mnt/sysimage 下的原 filesystem ,檢查半天後,發現絕大多數的東西都還在,壞掉的 filesystem 是 /var 這重要的目錄,難怪 linux 會起不來。

 既然所有東西都還在,我臨時起了一個大膽的想法。我有另一台機器是之前學著安裝 oracle 所裝的,上面跑 另外的 ap,不過並不吃重。所以我想嘗試將原 oracle db 的所有檔案 copy 下來,在另一台機器上復原。反正若不成的話,大不了在回公司拿備份的資料來倒進去。

 不過擺在眼前第一個問題是,這台在 linux rescue 下的機器網路功能一直起不來,資料要傳過去是個大問題。所有的 datafile、control file 、redolog file‧‧‧等經過 tar -czvf 後也還有 1G 左右,嘿嘿,剛好我身邊的 usb 隨身碟還有 1.5G 的空間,於是用 fdisk -l 看一下隨身碟是在 /dev/sdd1 這怪設備路徑下。

 先mkdir /aaa 這臨時的目錄,然後 mount /dev/sdd1 /aaa ,再把所有壓起來的檔案通通 cp 到 /aaa 下去。不過這 1G 多的檔案足足 copy 了近四十分鐘,看來我要去買個好一點的 usb 隨身碟了。

 準備好以後,再到另一台機器上,同樣的把 隨身碟 mount 上去,在解壓縮後,再一一的去 chown oracle:oinstall *,然猴啟動 oracle , 哇,居然就成功了!真是太美妙了!

 不過我得在作好更多的萬全準備,不是美次都能如此的幸運的!

2009/2/6

在 php5 程式中使用 include 會多空一行的解決《by 童顏未老人》

 最近在使用 php 開發程式時碰到一個問題, 找了許久終於被我找到解法。當在 php 中使用 include 時,常常就會多空下一行來,使得版面常常是破壞的很慘, 例如 : 原先需要的效果


程式是直接寫在主體程式內這樣沒有問題!


但是因為這一塊是很多頁都要用到的,所以想把它改成是獨立一隻程式,然後讓每隻要用的程式再去 include 就好,所已改寫如下:


但是結果卻發生如下圖中,兩個圖片竟不會對齊了!


真是怪了,我到 google 上找了幾下,終於了解是因為 UTF-8 的 檔首有 BOM 字元,會造成 include 進來後就發生多空一行的情形 !

因我使用的 edit 是 Notepad++,只要將格式改存成 UTF-8 格式,檔首無 BOM 存檔檔後就恢復未用 include 前的排版效果了 !

2009/2/5

對 高血壓有就醫但沒療效的一些看法《by 童顏未老人》

 在 2/5 的自由時報上有一篇 3成8高血壓患者 有就醫 但沒達到治療效果,這對台灣目前逐漸走向高齡化社會的大多數人來說,無疑是一項警訊!

 當然了,除了醫師所開的處方籤外,我們日常生活中亦可透過健康的飲食來逐漸改善高血壓的情況,請參考高血壓 - 常見病食療驗方,透過我們日常生活中的膳食來減緩高血壓,這應該是最自然與健康的方法了!大家可以多參考看看。不過,若人在感到不適時,請務必要上醫院去看醫生!

2009/1/24

透過 javascript 來新增與刪除上傳檔案《by 童顏未老人》

 最近又碰到一個比較困難的東西,就是要在使用者上傳檔案時,需要可以任意的新增檔案,也要能隨意刪出任一個已選的檔案。

 如下圖是最先的狀況,


 使用者可以任意的點選「新增檔案」來增加上傳的檔案數。


 若覺得不妥想再刪除,只要點選該檔案後面的「刪除」,即可。


 新增的部份比較簡單,刪除的部份我花了不少時間才弄出來。

 在程式本體中,請如下的程式碼 :


主要是設了一個容器 fieldset 用來包含著每一個讓人去上傳檔案之用。在這裏先放上一個,方便使用者來用。當使用者想增加其它的檔案時,就點選上面的「新增檔案」按鈕,透過 onclick 去發動 addupload()。

var fieldcount = 1;

function addupload() {
fieldcount++;
var newfield = document.createElement('input');
newfield.type = 'file';
newfield.name = 'file' + fieldcount;
newfield.id = 'file' + fieldcount;
newfield.size = '60';
document.getElementById('fs').appendChild(newfield);

var newbutton = document.createElement('input');
newbutton.type = 'button';
newbutton.name = 'b' + fieldcount;
newbutton.id = 'b' + fieldcount;
newbutton.value = '刪除';
newbutton.onclick=function(){delfile(this.getAttribute('id'));};
document.getElementById('fs').appendChild(newbutton);

}

(以上 程式碼要包函在 script 和/script 中 )

因為我們在程式中已預先擺了一組可供使用者上傳用的檔案按鈕,所以作為 counter 用的 fieldcount 起始值為 1。然後每次被 call 一次 addupload 時,便立刻加一。然後利用 createElement 來創建兩個結點,一個是讓人上傳檔案用的欄位,另一個是用刪除該上傳欄位用的按鈕。各自將其 attribute 上進去後,在利用 appendChild 來將兩個節點上到 fs ( fieldset )這個父容器之下。

要想刪除認一指定的欄位時,同時也得把後面的刪除鈕一併刪除。當點選了「刪除」鈕時,會觸發 onclick 去執行 delfile(this.getAttribute('id')), 其中要把那一顆刪除鈕的 id 一併傳到delfile 這 function 去。

function delfile(idname) {
var filename = 'file' + idname.substr(1,1);

var filex = document.getElementById(filename);
var bx = document.getElementById(idname);
filex.parentNode.removeChild(filex);
bx.parentNode.removeChild(bx);
}

因為每一組的 上傳欄位的 id 都是 file1、file2、file3、....,其相對應的「刪除」鈕之 id 為 b1、b2、b3...,所以只要透過 substr(1,1) 將「刪除」鈕 id 的第二碼取出,便可組合出相對應上傳欄位的 id 名。最後透過 父容器的 removeChild 便可將兩者一一移去!

2009/1/22

ie6 下的覆蓋問題解決《by 童顏未老人》

 這幾天被一個工作上的問題給困擾住了,小弟寫的網頁需要當滑鼠停在會員名字上或是會員的照片上時,要出現該會員的簡介。這功能原本不算太難,用小弟之前的方法,光用 css 就可以辦的很好。但是當套用在用會員照片排成的九宮格狀時,在 ie6 下會員名片會被隔壁的照片壓在下面弄的支離破碎,但是在 firefox 下卻仍有很好的表現。

慘不忍睹的 ie6 表現狀況:


firefox 下的狀況正是我所要的:


 但是我不能犧牲使用比例還是最多的 ie6 使用者,所以只得另謀他法了,有朋友介紹我使用
[jQuery] bgiframe Plugin,不過我現在情況很趕,無法仔系去鑽研 jQuery,那可得等我過年有空時慢慢去研究,我現在能用的便是 javascript 和 css 了,我試了一天後終於給我弄出來了。這想穿了其實也沒什麼高明之處,就是得花時間想一下。

首先在整個 程式最末端埋入一整段會員名片的程式碼,

<div style="position: absolute; width: 220px; height: 140px; z-index: 1;
left: -1000px; top: -1000px" id="mycard">
<table border="1" cellpadding="0" style="border-collapse: collapse"
width="220" id="table3"
height="140" bordercolor="#76A9B4">
<tr>
<td id="carddata" bgcolor="#E1F7F7">
<table width="220" height="140" border="0"
cellpadding="0" cellspacing="10" bgcolor="#E1F7F7">
<tr>
<td height="66" valign="top" align="center">
<table width="100%" border="0"
cellpadding="0" cellspacing="0">
<tr>
<td width="66" valign="top" align="center">
<table width="66" height="66" border="0"
cellpadding="0" cellspacing="0" bgcolor="#418488">
<tr>
<td align="center"><img id="pic2" src=""
width="60" height="60"></td>
</tr>
</table>
</td>
<td width="8">&nbsp;</td>
<td valign="top"><table width="100%" height="22"
border="0" cellpadding="0"
cellspacing="0" bgcolor="#C0E2DF">
<tr>
<td width="5">&nbsp;</td>
<td valign="bottom"><span class="MwordCL01"
id='username'></span>&nbsp;-<span class="Sword02"
id="sexname"></span></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0"
cellpadding="0">
<tr>
<td width="5" height="24">&nbsp;</td>
<td height="24" valign="bottom">
<span class="Sword02">層級:</span>
<span class="Sword02" id="attname"></span></td>
</tr>
<tr>
<td width="5" height="19">&nbsp;</td>
<td height="19" valign="bottom">
<span class="Sword02">區域:</span>
<span class="Sword02" id="codename"></span></td>
</tr>
</table> </td>
</tr>
</table>
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="SwordCL01">
<table width="100%" border="0"
cellspacing="0" cellpadding="0">
<tr>
<td width="70" height="19" align="right"
class="SwordCL01">健康部落:</td>
<td height="19" class="Sword01"><nobr>
<? if ( strstr($_SERVER["HTTP_USER_AGENT"],"MSIE")) { ?>
<span style="width:130;text-overflow: ellipsis;overflow: hidden;"
id="vip_name"></span></nobr></td>
<? }else{ ?>
<div style="width:130;text-overflow: ellipsis;overflow: hidden;"
id="vip_name"></div></nobr></td>
<? } ?>
</tr>
<tr>
<td width="70" height="19" align="right"
class="SwordCL01">發表篇數:</td>
<td height="19" class="Sword01" id="doccnt">
<span class="Sword01">篇</span></td>
</tr>
</table></td>
</tr>
</table>
</td>
</tr>
</table>
</div>

因為我需要在整個網站到處都會用到這個會員名片,所以我是把它單獨寫成一斷的程式,然後在每一隻需要用的程式末端下

<?include('Common/card.phtml');?>
</div>
</body>
</html>

 然後另外再寫一支的放滿我需要的 junction 的 js ,也是方便每隻需要用到會員名片的程式來 call !

<script language="javascript" src="/Js/feijer.js"></script>

其內容如下 :

function CardShow(obj,ty,lx,pic2,username,sexname,attname,codename,vip_name,doccnt){
enoter_IsBoard = 1;

if(enoter_IsBoard){

var enoter_demo = document.getElementById("mycard").style;
var leftNum,topNum;
enoter_demo.visibility="visible";

document.getElementById("pic2").src = pic2;
document.getElementById("username").innerHTML = username;
document.getElementById("sexname").innerHTML = sexname;
document.getElementById("attname").innerHTML = attname;
document.getElementById("codename").innerHTML = codename;
document.getElementById("vip_name").innerHTML = vip_name;
document.getElementById("doccnt").innerHTML = doccnt;
var _x = getObjX(obj);
var _y = getObjY(obj);

leftNum=19;
topNum=0;

document.getElementById("mycard").style.left = Number(_x) + lx +"px";
document.getElementById("mycard").style.top = Number(_y) + ty +"px";
}
}

function getObjX(obj){
var hlcleft = 0;
if (obj.offsetParent){
while (obj.offsetParent){
hlcleft += obj.offsetLeft;
obj = obj.offsetParent;
}
}else if (obj.x) hlcleft += obj.x;
return hlcleft;
}

function getObjY(obj){
var hlctop = 0;
if (obj.offsetParent){
while (obj.offsetParent){
hlctop += obj.offsetTop;
obj = obj.offsetParent;
}
}else if (obj.y)hlctop += obj.y;
return hlctop;
}

function CardClose(){
document.getElementById("mycard").style.left=-1000+"px";
document.getElementById("mycard").style.top=-1000+"px";
}

然後程式需要的地方,除了把值傳進去 function ,並可以指定名片視窗要出現在 父容器的那邊,因為有時那個名片太靠右邊時,會被畫面切割掉,這時就可以調整 ty lx 兩個值來指定七其位置。

<a href="<?=$Blog;?>"
onmouseover="CardShow(this,30,60,'<?=$pic2;?>','<?=$username;?>','<?=$sexname;?>',
'<?=$attname;?>','<?=$codename;?>',
'<?=$vip_name;?>','<?=$doccnt;?>');"
onmouseout="CardClose();">

所以當 onmouseover 被觸發時,便去 call js 中的 CardShow function ,再一一的將資料放會員名片中,如此便可以將名片無誤的在想要的地方去呈現。

2009/1/12

php : 上傳圖片後再切出並縮小成正方形圖《by 童顏未老人》

 這次的新需求是,會員要可以上傳自己喜愛的照片,而且要大小不拘,然後需由每一張圖居中的取出最大範圍的正方形圖後,在把他縮小到 60 X 60 的大小去,再存到系統上面去,這樣一來可以減低系統的硬碟的負擔。要作到這樣的話,就必需要利用到 GD 的函數了。

 例如,一張 1600 X 1200 的照片上傳以後,需先拮取其中的 1200 X 1200 (中心點不變),再將其縮小成 60 X 60 的圖片!

 在主要的輸入畫面上:

<form name="frm" method="POST" action="loadpic.php" enctype="multipart/form-data">
<input id="filename" type="file" size="45" name="filename">( 請上傳您的個人照片!)
<input type="submit" name="doit" value="送出">
</form>

在這裏最重要的是在 <form> 中必需要加上 enctype="multipart/form-data"!

而在 loadpic.php 這隻主要程式中,應如下的寫:

先定義出一個 function 用來抓副檔名:

function getFiletype ($FileName) {
$num=strrpos($FileName,".");
return ".".substr($FileName,$num+1);
}

// 取得上傳的圖片
$src = imagecreatefromjpeg($_FILES['filename']['tmp_name']);

// 取得圖片的寬
$src_w = imagesx($src);

// 取得圖片的長
$src_h = imagesy($src);

// 取得圖片的副檔名 ( 如 jpg, gif... )
$src_type = strtolower(getFiletype($_FILES["filename"]["name"]));

// 依長與寬兩者最短的邊來算出要抓的正方形邊長
if( $src_w > $src_h){
$new_w = $src_h;
$new_h = $src_h;
}else{
$new_w = $src_w;
$new_h = $src_w;
}

// 以長方形的中心來取得正方形的左上方原點
$srt_w = ( $src_w - $new_w ) / 2;
$srt_h = ( $src_h - $new_h ) / 2;

// 定義一個圖形 ( 針對正方形圖形 )
$newpc = imagecreatetruecolor($new_w,$new_h);

// 抓取正方形的截圖
imagecopy($newpc, $src, 0, 0, $srt_w, $srt_h, $new_w, $new_h );

// 建立縮圖
$finpic = imagecreatetruecolor(60,60);

// 開始縮圖
imagecopyresampled($finpic, $newpc, 0, 0, 0, 0, 60, 60, $new_w, $new_h);

// 儲存縮圖到指定的目錄存放 , 檔名就是記錄在 SESSION 中的 login name
imagejpeg($finpic,
"../../images/Upload/Users/".$_SESSION["MemberLoginName"].$src_type);

// 將檔名存到變數 $filename 去,以備記錄到 table 去,方便日後依會員的帳號來抓取圖片
$filename = $_SESSION["MemberLoginName"].$src_type;

大功告成!

2009/1/10

利用 css 來做到 title/alt 的功能《by 童顏未老人》

 剛剛試出一個或許對眾高手來說,是很簡單而且不太入流的技術,不過這可是我弄了好久才學到的。特別記錄下來免的以後會忘了。

 是這樣的,我希望在網頁上當使用者將滑鼠移動到某個物件上面時,右下方就會跳出一個簡單的說明,如下圖:

 這原本是不難的,只要用 title 這屬性就可以作到了,但是那樣的話,字會很小,而且沒什麼變化,對年繼大的人來說頗不友善的。於是我便動到 css 的頭上,再參考到網路上一個高手的作法,我略加修改一下,就相當的適合我用了。

首先定義一下 css 的部份


<style type="text/css">
.info {position:relative;}
.info:hover {background:#eee;color:#333;}
.info span {display: none }
.info:hover span {
display:block;
position:absolute;
top:30px;
left:60px;
width:400px;
border:1px solid #ff0000;
background:#FDFFB4;
color:#000000;
padding:5px;
text-align:left;
z-index:9;
text-decoration:none;}
</style>


然後對於 目標的地方修改 如下:

<a href="../News/List.phtml?StarID=<?echo $StarID?>" class="info">
<img src="../images/bt042.gif" name="Image0_4"
id="Image0_4" width="92" height="26" border="0">
<span>隨時將五大星球最新的資訊及活動傳達給您。</span></a>


主要的用意便是,想透過 <a> </a>裏面所包的 <span> 來顯示出那段說明。但是當游標尚未進入前,這段 span 先用 display:none; 來讓它隱藏起來。

當滑鼠的游標進入標的時,再用 display:block;的方式讓它出現,並在設定一下表現方式 ( 離游標的位置、字體、顏色‧‧‧ )

當然了 <a> 元素不要忘了設定一下 class="info" !

還有 info 本身要設定為 position:relative; ,否則那個說明會固定在畫面的左上角!

這樣就可以達到我想要的目標! :)

2009/1/7

水平線標籤在 ie 和 firefox 之不同的解決《by 童顏未老人》

 微軟的 ie 有點討厭,一些 html 的語法就是要與別人的不一樣,最近為了要讓自家公司的網頁能通吃 ie、 firefox ,於是下了苦心去調整程式。

 之前公司的在繪製長條圖時,都是採用圖片,然後再利用 width 的屬性來將其拉長到想要的長度!不過後來連圖也不想用了,畢竟圖還是有一點大小,為了省下一點點的速度,所以把它換成 html 的語法。

 當時採用的是
,這個繪製水平線的標籤。因為要區分嚴重性,所以線本身需要顏色管理,因此在
裏面特用了 css 的 style 來設定它的顏色和厚度。而且
在 default 上周在上下兩邊會有一點 margin,所以當時是如此下:

 其結果在 ie 中能得到滿意的效果,如下圖:

 但是在 firefox 中,卻是慘不忍睹,如下:

 於是經過一番測試後終於了解到,firefox 當設立 height 後,水平線本身是中空的, css 中的 color 所指定的顏色通通沒用。而且 firefox 對於
的上下 default margin 也和 ie 不同,所以程式有得依 ie 和 firefox 的不同來分別設定了!

 這樣一來, ie 還是可以好好的保遲原來的效果, firefox 的效果也能令人滿意了!

php 的 gd 繪圖與 firefox 八字不合的處理 《by 童顏未老人》

 最近一直被 php 的 gd 繪圖所困擾到,應該說不是 gd 繪圖本身的問題。而是利用它所繪制出來的曲線圖,在 ie 中可以順利的展現出來,但是到了 firefox 中時竟然 show 不出那圖來,他直接就把整串的網址 show 出來。我甚至還試著單讀獨寫一隻 html 去抓那張 gd 所繪出來的圖
,結果顯示也是很是正常,無論在 ie 或是 firefox 都一樣。看來是 firefox 面對 gd 產生圖片的程式與 show圖的地方寫在一起時會有問題。

在 ie 中的展示如下:

但在 firefox 下就變成這樣了:

 在網路上一直找不到有這方面的說明,那只好自己先用鋸箭法的方式來處理了 !

 先在原來的程式中去判斷使用者的瀏覽器是那一個, 當是 ie 系列的,就照原來的去 show;若不是時,便去跑另一隻專門 show 圖的程式 !

至於另一隻 show 圖程式便簡單多了,如下圖,當然了前方會有一些控制的語法就不 show 出來了!

結果還令人頗滿意的!

2009/1/6

抓取螢幕上任一地方顏色的好工具 ColorSPY 《by 童顏未老人 》

 最近公司的美術設計工作太忙,我手邊又有一些簡單的配色要問他,再打擾他幾次後我自己都覺得很不好意思,偏偏我有只有一個 jpeg 的示意圖初稿,想先動一下都很麻煩。之前我都是用 photoshop 把 jpeg 檔讀入,然後再去抓它的色碼。這實在是很笨的作法,有殺雞用牛刀的感覺。

 所以我再想一定有更簡單的軟體來作這種事,於是我再度求助於萬能的 google 大神,幾經折騰後,被我找到一套既簡單又小巧的軟體, ColorSPY ,不但操作容易更重要的是它還是綠色軟體,對於有這方面需求的人,我是極度推薦它。

 下載網址: ColorSPY

 下載後,會得到一個 cspy20b.exe 的壓縮執行檔,解開後有兩個檔 ColorSpy.exe 和 Readme.txt。後者只是簡單的說明,可以不理它。 ColorSPY.exe 就是執行檔,將它 copy 到桌面方便點選的地方即可。

 需要用到時,直接執行 ColorSpy.exe ,完全不必安裝。使用時更為簡單。只要滑鼠移動到螢幕上的任何地方,它自動會把 色碼和 RGB 三原色顯示出來,非常簡單。倘若不需要再查詢時,僅僅點選 pause 讓它不要再抓滑鼠所處的顏色色碼就好了;若要再用時點選 resume 就可以恢復作業,極度的方便吧!

2009/1/3

我喜愛的「虱目魚肚湯」《by 童顏未老人》


 我喜歡吃魚,而虱目魚又是我最喜歡吃的魚了。雖然牠的刺實在是不少,但是都有其固定的走向與紋理,所以這難不倒我。虱目魚清蒸或是煮清湯的話,那是最為對味的了。曾看過有人用煎的,但是吃起來虱目魚的特殊口感便失去了。所以還清蒸的好。

 不過,離開台南回來台北多年,然我卻顯少吃到會讓我回味無窮的虱目魚料理。但是就在前幾天,陪家人到華西街逛時,就讓我吃到了有台南味的虱目魚肚湯了,真是老天爺開眼了。

 這家叫「阿義魯肉飯」的小攤,其攤位面積不算大,桌子也都是小小一桌,地點算是偏了點,它是在整條華西街觀光夜市的最北邊的底端去了,一般遊客鮮少會逛到那邊去。

 它的虱目魚肚已將所有的刺都處理掉了,所以相當適合小朋友品嘗,當然了對於不喜歡碰到魚刺的人也可以大膽的一嚐口福了,且它還有附上一碟的醬料,上面還有小塊的「哇沙比」,吃起來更是爽快至極,那天我一個人解決了兩碗的虱目魚肚湯,至今仍無法忘懷。

 特地推薦給大家,有機會到華西街觀光夜市去逛時,可以去品嚐一下,絕對不會讓您失望的!