CodeHighlight

2012年9月29日 星期六

[Web Plugin]JPGraph 在圖表中顯示中文資訊

在Jpgraph中,中文顯示是一個比較麻煩的部分,
如果直接使用中文的話,會發現顯示出來的資料變成亂碼,
主要是原本設定檔中,指定的中文字體,與實際的位置不合的緣故


所以我們可以利用這部分來修正!

  1. 首先找到在jpgraph/src底下的jpg-config.inc,找到「DEFINE('CHINESE_TTF_FONT', 'bkai00mp.ttf');
  2. bkai00mp.ttf改成ARIALUNI.TTF
  3. 若是在windows底下的話,就改成mingliu.ttc,這個是新細明體
  4. 當然,也可以找自己喜歡的中文字體,下載後放到字體存放的地方即可

首先,如果是在windows底下的話,下面部分可以省略,因為jpgraph預設的中文字體在windows中,是可以直接抓得到的
不過如果是像我一樣,在linux上本身沒有太多權限,然後在"/usr/X11R6/lib/X11/fonts/truetype/"裡面也沒有我要的字體。
那就到jpgraph中,找到「DEFINE('TTF_DIR','/usr/X11R6/lib/X11/fonts/truetype/');」這行
把「/usr/X11R6/lib/X11/fonts/truetype/」改成你字體存放的絕對路徑
這樣就可以抓到中文字來顯示了!



最後補充一點,中文字處理是要傳進big5編碼的,所以記得要先把編碼轉成big5之後
在餵給jpgraph的函式執行!



參考資料:


如何讓 JpGraph 顯示中文
讓你的PHP Jpgraph圖形能夠秀出中英文都很好看的字體
在 JpGraph 中顯示中文字

[Web Plugin]superfish套件,整個Menu置中方法

superfish這個套件,可以很容易的在網頁上建立漂亮的下拉式選單
不過本身好像受限於CSS設計的關係,所以無法利用「align=center」來把整個選單放到頁面中間,不過網路上有人提出方法,可以利用修改部分css碼,來把這個整個選單變成浮動的狀態。


1) 首先,開啟 superfish.css(一般在CSS資料夾底下)

2) 找以下的code:

.sf-menu {
line-height: 1.0;
z-index: 99;
}


在其中,加上下列程式碼:
float:left;
position:relative;
left:50%;

3) 找以下的code:

.sf-menu ul li {
width: 100%;
}

在其中,加上下列程式碼:
left:0%;

4) 找以下的code:

.sf-menu li {
float: left;
position: relative;
}


在其中,加上下列程式碼:
left:-50%
這樣,就可以把整個表單依照需求來擺放了

[網路]CSMA/CA & CSMA/CD

Carrier Sense Multiple Access,CSMA

CS: Carrier Sense: 要發送frame之前,都要先確定頻道上是否為閒置
MA: Multiple Access: 每個送出去的frame,都可以給多個Device同時接收

目的:提升網路存取的效能,降低collision發生

當等待傳輸時,CSMA的三種傳輸策略

1-persistent:
若Channel為busy時: 密切注意是否為free
轉為Free: 直接傳送
  • 優點:channel不忙時效率極高
  • 缺點:channel忙碌時,collision數會爆增

non-persistent:
若Channel為busy時: 等待一個random time
轉為Free: 直接傳送
  • 優點:較不易collision
  • 缺點:效率略差一些

p-persistent
若Channel為busy時: 等待一個random time
轉為Free: 倒數一個random time後,若channel仍是free時傳送
  • 優點:更不易collision,尤其在大量使用者使用時,效率高於前兩者
  • 缺點:略為複雜


避免collision的傳輸策略:
CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)
►以避免collisioin為原則
►使用p-persistent
►使用RTS-CTS握手(handshake)
►用於無線網路上


CSMA/CD
►以避免連續collision再發生為原則
►使用特殊封包來告知collision發生
►在固定時間內等待一個random backoff time,倒數完畢後再傳
►用於Ethernet中

[Ubuntu]重啟apache服務時,錯誤訊息處理方式

在安裝VM時遇到的問題,在設定IP完成後,啟動 apache2 出現這錯誤訊息:

Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 127.0.0.1 for ServerName

經過查詢,看來應該是沒有設定domain name的問題,
所以會出現此訊息,而且外部IP無法連線到此網頁伺服器,


根據爬文的結果,只要在 httpd.conf 或 apache2.conf 裡面加上
ServerName 127.0.0.1
給予一個基本的ServerName,就可以解決這個問題了

[Ubuntu]安裝設置網頁伺服器(apache、php5、mysql)

在ubuntu上面安裝大多數的工具,主要使用「apt-get install」指令
由於本身需要較高的權限,所以一般都會在前面加上「sudo」,取得較高的權限


而一般網頁伺服器來說,需要三個主要部分:
伺服器核心:處理來自各個網頁的request,一般採用apache
網頁程式編譯器:編譯與執行網頁程式,一般採用PHP
資料庫:儲存與處理資料存取,一般採用mysql


因此,我們就以這三個為安裝重點:


sudo apt-get install apache2
sudo apt-get install php5
sudo apt-get install mysql-sever
sudo apt-get install mysql-client

[Ubuntu]phpmyadmin安裝後出現404 error

日前在VM安裝phpmyadmin時,雖然根據以往裝機的步驟去安裝(by: apt-get)
不過最後在phpmyadmin的部分卡到,使得phpmyadmin無法由瀏覽器開啟,
在確認設定檔無誤後,才找到說是apache找不到phpmyadmin的配置,
所以無法自動導向該網頁,解決方法如下:



重新配置phpmyadmin的連結:
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin.conf
重開apache
sudo /etc/init.d/apache2 restart

參考網頁

2012年9月26日 星期三

[Ununtu]PHP PDO安裝

PHP PDO是目前存取資料庫的方法之一
在日後的PHP6中,也將會是主要存取方式,
不過在PHP5裡面的安裝,如果是用apt-get的話,會遇到不少問題
主要就是PHP5原本就有內涵PDO相關函式,不過似乎在config的過程中並沒有包進來
所以查看php.ini時,其pdo欄位的value會是空的

以下方式是在裝好apache2、php5、php5-dev、php-dp後的處理
$ sudo apt-get install php5-dev 
$ sudo apt-get install php-pear 
$ sudo apt-get install libmysqlclient15-dev 
$ sudo pecl install pdo 
$ PHP_PDO_SHARED=1 sudo pecl install pdo_mysql
<--在這邊可能會有錯誤訊息,是系統php_pdo_driver.h找不到,所以輸入:
ln -s /usr/include/php5 /usr/include/php

再回去輸入最後一行即可
安裝完成後,要在php.ini中加上以下Extension訊息:

extension=pdo.so extension=pdo_mysql.so

再回去看php.ini,就會看到pdo的欄位已經填上去了!

參考網頁:安裝方式
過程中找不到php_pdo_driver.h的解決方式