韌館-LearnHouse

Archive for the '程式&軟體' Category

Visual Studio Just-In-Time Debugger

這兩天不知道為什麼,不管開SD卡的東西或者是開FrontPage都會出現下面的錯誤

原來這個錯誤訊息主要是因為系統的設定找VisualStudio.NET為預設的偵錯工具

但是我目前系統中VisualS.NET已經被我移除了,所以才會出現這個訊息。

解決的方法只要在開始->執行->輸入drwtsn32 -i

這樣就能把Dr.Watson設定成預設的Debugger工具

但這似乎對我沒啥幫助,因為啟動那兩個本來會出錯的程式

就算改回來還是一樣會出錯,一樣也不是能開啟 = =" 

2008年5 月 posted by admin in 程式&軟體 and have Comments (2)

[PHP]]isset()與empty()的區別

資料來源:思想之地

  1<?php error_reporting(E_ALL);
  2echo '<B>未定義$var</b><Br>'
;
  3echo "isset測試:<Br>"
;
  4if (isset($var
))
  5
{
  6    echo '變量$var存在!<Br>'
 ;
  7
}
  8

  9

 

 10echo "empty測試:<Br>";
 11if (empty($var
)){
 12    echo '變量$var的值為空<Br>'
;
 13
}
 14else

 15{
 16    echo '變量$var的值不為空<Br>'
;
 17
}
 18

 19echo "變量直接測試:<Br>"
;
 20if ($var
){
 21    echo '變量$var存在!<Br>'
;
 22
}
 23else
{
 24    echo '變量$var不存在!<Br>'
;
 25
}
 26

 27echo '----------------------------------<br>'
;
 28echo '<B>$var = \'\'</b><Br>'
;
 29echo "isset測試:<Br>"
;
 30$var = ''
;
 31if (isset($var
))
 32
{
 33    echo '變量$var存在!<Br>'
 ;
 34
}
 35

 36

 37echo "empty測試:<Br>"
;
 38if (empty($var
)){
 39    echo '變量$var的值為空<Br>'
;
 40
}
 41else

 42{
 43    echo '變量$var的值不為空<Br>'
;
 44
}
 45

 46echo "變量直接測試:<Br>"
;
 47if ($var
){
 48    echo '變量$var存在!<Br>'
;
 49
}
 50else
{
 51    echo '變量$var不存在!<Br>'
;
 52
}
 53echo '----------------------------------<br>'
;
 54echo '<B>$var = 0</b><Br>'
;
 55echo 'isset測試:<Br>'
;
 56$var = 0
;
 57if (isset($var
))
 58
{
 59    echo '變量$var存在!<Br>'
 ;
 60
}
 61

 62

 63echo "empty測試:<Br>"
;
 64if (empty($var
)){
 65    echo '變量$var的值為空<Br>'
;
 66
}
 67else

 68{
 69    echo '變量$var的值不為空<Br>'
;
 70
}
 71

 72echo "變量直接測試:<Br>"
;
 73if ($var
){
 74    echo '變量$var存在!<Br>'
;
 75
}
 76else
{
 77    echo '變量$var不存在!<Br>'
;
 78
}
 79echo '----------------------------------<br>'
;
 80

 81echo '<B>$var = null</b><Br>'
;
 82echo 'isset測試:<Br>'
;
 83$var = null
;
 84if (isset($var
))
 85
{
 86    echo '變量$var存在!<Br>'
 ;
 87
}
 88

 89

 90echo "empty測試:<Br>"
;
 91if (empty($var
)){
 92    echo '變量$var的值為空<Br>'
;
 93
}
 94else

 95{
 96    echo '變量$var的值不為空<Br>'
;
 97
}
 98

 99echo "變量直接測試:<Br>"
;
100if ($var
){
101    echo '變量$var存在!<Br>'
;
102
}
103else
{
104    echo '變量$var不存在!<Br>'
;
105
}
106echo '----------------------------------<br>'
;
107

108

109echo '<B>$var = "php"</b><Br>'
;
110echo 'isset測試:<Br>'
;
111$var = "php"
;
112if (isset($var
))
113
{
114    echo '變量$var存在!<Br>'
 ;
115
}
116

117

118echo "empty測試:<Br>"
;
119if (empty($var
)){
120    echo '變量$var的值為空<Br>'
;
121
}
122else

123{
124    echo '變量$var的值不為空<Br>'
;
125
}
126

127echo "變量直接測試:<Br>"
;
128if ($var
){
129    echo '變量$var存在!<Br>'
;
130
}
131else
{
132    echo '變量$var不存在!<Br>'
;
133
}
134echo '----------------------------------<br>'
;
135

136?>

137
輸出:
未定義$var
isset測試:
empty測試:
變量$var的值為空
變量直接測試:
變量$var不存在!
----------------------------------
$var = ''
isset測試:
變量$var存在!
empty測試:
變量$var的值為空
變量直接測試:
變量$var不存在!
----------------------------------
$var = 0
isset測試:
變量$var存在!
empty測試:
變量$var的值為空
變量直接測試:
變量$var不存在!
----------------------------------
$var = null
isset測試:
empty測試:
變量$var的值為空
變量直接測試:
變量$var不存在!
----------------------------------
$var = "php"
isset測試:
變量$var存在!
empty測試:
變量$var的值不為空
變量直接測試:
變量$var存在!
----------------------------------
請注意20行會觸發一個Notice:
Undefined variable: var ;因為使用一個未初始化的變量不規範.

2008年5 月 posted by admin in 程式&軟體 and have No Comments

[SQL]幾個好玩的SQL語法

一直以來程式一直是我的弱項,一直都很想學但卻又不得其門而入

每次都三分鐘熱度的玩味幾天,幾天後就放棄而丟在一旁 

剛好最近要幫學校寫一支統計資訊的程式,以及其他的一些功能,才漸漸的對程式有近一步的了解

但目前的我程式寫的是亂糟糟,純粹是為了想要某些功能而寫某些功能,都沒有什麼規劃

不過也因為這次的機會,讓我對程式也越來越感興趣不再害怕 

一、 

資料表(部份資料)

 

執行 

SELECT DISTINCT course , Count(course) AS C FROM mdl_resource GROUP BY course

結果(部分) 

 

說明 

透過上面語法即能計算出不同的course重複的次數:DISTINCT course代表不同的course欄位,Count(course) AS C 計算相同course值的次數並把計算結果的欄位改成C。


二、 

資料表(部份資料)

mdl_user_teachers

 

mdl_user

執行 

select mdl_user_teachers.course from mdl_user_teachers,mdl_user where (((mdl_user.id)=31231) and ((mdl_user_teachers.userid)=31231))

結果 

 

說明 

下這語法主要是為了找該使用者的course,而且他要為老師mdl_user_teachers也要為使用者mdl_user

 


三、 

資料表(部份資料)

 

執行 

SELECT * FROM mdl_course WHERE (fullname like '%專題%'or fullname like '%論文%') and (school_year = '96一'or school_year = '95二' or school_year = '96二')

結果

 

說明 

這個方法可以同時選擇欄位fullname字串裡包含專題或論文的或者是school_year是95二、96一、96二的資料


四、 

資料表(部份資料)

執行 

UPDATE mdl_course SET school_year = 96二 WHERE id IN (9870, 9871, 9872, 9873, 9874, 9875, 9876, 9877) 

結果

說明

不用說應該知道這段SQL的功用吧!! 

 

備註: 雖然說SQL語法會用很好用,可以減少很多Coding的工夫,但我有一次為了查詢某資料,做了太複雜的資料表交叉比對運算,結果使得效能變的很低,也就是說開啟網頁的速度會變很慢,而用程式Coding來做篩選判斷,不到一秒鐘的時間網頁就顯示出來!!

 

 

2008年3 月 posted by admin in 程式&軟體 and have No Comments

[PHP]在HTML中顯示JpGraph

以下是Document文件說的以圖片的html tag <IMG>方式顯示

4.2 How to generate images with PHP

As a general rule each PHP script which generates an image must be specified in a separate file which is then called in an HTML <IMG> tag. For example, the following HTML excerpt includes the image generated by the PHP script in "fig1.php".

 <img src="fig1.php"  border=0 align=center width =300 height=200>

Strictly speaking the "align", "width" and "height" are not necessary but helps the browser position the image correctly before the image has been fully sent back to the browser.

The library will automatically generate the necessary headers to be sent back to the browser so that it correctly recognize the data stream received as an image of either PNG/GIF/JPEG format. The browser can then correctly decode the image

Observe that you can't return anything else than an image from the image script. By definition each HTML page (or more correctly each HTTP stream) can only consist of one mime type which is determined by the header for that particular stream.

A common mistake is to have a space in the beginning of the image script which the HTTP server will send back to the browser. The browser now assumes that the data coming back from this script is text since it hasn't received an explicit header. When then the image headers get sent back to the browser to forewarn the browser of the forthcoming image the browser will not like that as it has already assumed the data stream was a text stream. The browser will then give the infamous "Headers already sent error".

To include several images together with text on a page you need to have a parent page with several <IMG> tags which each refers to an image script (or the same image script with GET/POST data).

按照doc的作法,每要在html繪製一張圖表,就用一個<IMG>標籤指定該程式

但我試了幾個一樣也無法顯示,因此就修改了一下,改讓他先輸出png的圖片檔,再用<IMG>

首先先修改之前編寫的PHP script:

將原本的$graph->StrokeCSIM();  //從HTML中直接輸出圖片

改成
$graph_name = "路徑/檔名.png";
$graph->Stroke($graph_name);

再到要顯示的html頁面中加入<IMG>:

再加入<IMG>前要先把支前編寫的PHP script先include進來

<img src="images/test.png" width="600" height="850" /> 

寬度與高度要跟你在繪製圖表的PHP script指定的大小一樣 

Tips: 在開始html之前要先把寫好的繪圖的PHP script先include進來,而且最好用require_once("XXXX.php")的方式,避免重複include

2008年2 月 posted by admin in 程式&軟體 and have No Comments

[PHP]linux下使用jpgraph顯示中文字型

這個問題讓我花了快一個禮拜的時間,本來一度想放棄使用jpgraph改用圖片的放式來顯示圖表

但今天早上一醒來,覺得想想,我花了那麼多時間蒐集資料與測試

竟然在這一刻要我從找另一個方法,真的很不甘心

因此我又從新試了一次,把可能會導致無法顯示中文或是中文亂碼的可能原因,重新的排列組合

一個一個去修改核心程式碼,最後終於讓我歸類出幾個需要改的項目

由於改很多,有些已經忘記是我改的還是原本的了,所以以下方法是我覺得可能影響的幾個要改的項目 

1.修改src/jpgraph.php

require_once('jpg-config.inc.php');
require_once('jpgraph_gradient.php');
require_once('jpgraph_errhandler.inc.php');
require_once('jpgraph_ttf.inc.php');

// Version info
DEFINE('JPG_VERSION','2.3');

// Minimum required PHP version
DEFINE('MIN_PHPVERSION','5.1.0');

// Should the image be a truecolor image?
DEFINE('USE_TRUECOLOR',true);

//------------------------------------------------------------------------
// Automatic settings of path for cache and font directory
// if they have not been previously specified
//------------------------------------------------------------------------
if(USE_CACHE) {
    if (!defined('CACHE_DIR')) {
    if ( strstr( PHP_OS, 'WIN') ) {
        if( empty($_SERVER['TEMP']) ) {
        $t = new ErrMsgText();
        $msg = $t->Get(11,$file,$lineno);
        die($msg);
        }
        else {
        DEFINE('CACHE_DIR', $_SERVER['TEMP'] . '/');
        }
    } else {
        DEFINE('CACHE_DIR','/tmp/jpgraph_cache/');
    }
    }
}
elseif( !defined('CACHE_DIR') ) {
    DEFINE('CACHE_DIR', '');
}

if (!defined('TTF_DIR')) {
    if (strstr( PHP_OS, 'WIN') ) {
    $sroot = getenv('SystemRoot');
        if( empty($sroot) ) {
        $t = new ErrMsgText();
        $msg = $t->Get(12,$file,$lineno);
        die($msg);
        }
    else {
      DEFINE('TTF_DIR', $sroot.'/fonts/');
        }
    } else {
//    DEFINE('TTF_DIR','/usr/X11R6/lib/X11/fonts/truetype/');//修改成下面的路徑
    DEFINE('TTF_DIR','/usr/share/fonts/zh_TW/TrueType/');
    }
}

Tips: 要注意/usr/share/fonts/zh_TW/TrueType/下是否有.ttf或.ttc的字型,若沒有可從Windows系統的fonts去複製

 

2.修改src/jpg-config.inc.php

DEFINE('CHINESE_TTF_FONT','bkai00mp.ttf');

修改成DEFINE('CHINESE_TTF_FONT','mingliu.ttc');

Tips: 紅色的部份可依自己的喜好的字型修改,而字型的檔案要在上述的路徑裡面,這裡以新細明體mingliu.ttc為例

 

3.修改src/jpgraph_ttf.inc.php

        FF_CHINESE     =>   array(FS_NORMAL    =>CHINESE_TTF_FONT,
                  FS_BOLD    =>'',
                  FS_ITALIC    =>'',
                  FS_BOLDITALIC    =>'' ),
修改成

         FF_CHINESE     =>   array(FS_NORMAL    =>'mingliu.ttc',
                  FS_BOLD    =>'mingliu.ttc',
                  FS_ITALIC    =>'mingliu.ttc',
                  FS_BOLDITALIC    =>'mingliu.ttc' ),

 

4.再來就是呈現繪圖資訊的檔案了,可從Example的資料夾選擇想要的範例修改

$graph->title->Set("這裡這樣設定就可以直接顯示中文");
$graph->title->SetFont(FF_BIG5, FS_NORMAL);

Tips1:不過若是從資料庫取得utf-8的字串,要先轉成big5的編碼格式

下面範例是從資料庫取得utf-8字串後丟入陣列,陣列再轉成big5編碼,我去掉一些在資料庫上做擷取資料判斷的簡略程式片斷

for($i = 0 ; $i <= 10 ; $i++)
{
    $name[$i] = iconv("utf-8","big5",$name[$i]);
}

Tips2:轉換的動作不能寫在呈現繪圖資訊的php檔案中,不然會導致圖表無法顯示

 

最後再來說一個我遇到的問題,就是如何把SetLegends($name3)也能顯示中文

其中$name是從資料庫取得的utf-8轉big5的中文陣列

而要能在SetLegends顯示,就要加入$graph->legend->SetFont(FF_BIG5, FS_NORMAL);

這麼一來就能顯示中文了 

 

 

2008年2 月 posted by admin in 程式&軟體 and have Comment (1)

服務導向架構(Service-Oriented Architecture,SOA) 簡介

資料來源:http://www.cc.ntu.edu.tw

作者: 曾保彰 / 臺灣大學計算機及資訊網路中心資訊網路組


「以客為尊」的核心概念,提供網路服務單位建構一個具彈性、可重複使用的整合性介面,加速達到網路服務提升的目標。

前言
SOA是一種架構模型,由網站服務技術等標準化元件組成,目的是為企業、學校或提供網路服務單位建構一個具彈性、可重複使用的整合性介面,促進內外部如內部應用程式、用戶、與部門(系所)等相關單位完美的溝通,盡速達到網路服務提升的目標。何謂SOA?
我們常聴到 Information Technology (IT)產業的架構演進,由1980年代的主機(mainframe)架構,到1990年代的主從式(client server)架構,到1999年時是network centric架構,而到2004年時已複雜到所謂的 Service-Oriented Architecture架構(SOA,服務導向架構) 。此外也常聴到:如果企業不導入這個架構,企業在未來就會沒有競爭力。因此,本文將針對SOA作淺顯的簡介,也希望透過本文的介紹,對於本校網站服務技術(web services) 未來的架構有所幫助。
首先讓我們釐清一些SOA的迷思。正確來說 [1]:

  1. SOA不是新玩意:多年前即有資訊部門或公司成功地用SOA方式來建構、運行應用程式,且當時XML、web service都尚未提出。

  2. SOA不是種技術:它是種建構、組織的方法,用來建立應用程式的運行環境,以及讓學校的業務程式能以「功能化」方式發展、累積。

  3. 就算購買最新的XML、web services產品(如開發工具、執行平台、軟體元件等),也不表示就可以建構出SOA式的應用程式。

簡單來說,SOA是一種遵循典範,是針對學校或企業內應用程式的設計、開發、佈建、管理所提出的遵循典範。從資訊技術層面而言,一個執行學校或企業業務的 應用程式稱為一個獨立的「邏輯單位」,而對學校或企業營運層面而言則可稱為一項「服務」,在企業的整體運算環境中就存在著多個「獨立邏輯/業務服務」,且 需要對其進行妥善設計、開發、佈建、管理等,也因此需要採行服務導向架構(SOA)。

要 實現SOA,需要學校或企業的程式設計師改採「持續累積服務」的觀念與角度來開發應用程式,即便這麼做在短時間內看不到顯著好處,程式師還是必須跳脫、超 越過往對應用程式的想法,改以「既有服務可否再運用?」或者是「能否沿用其他同仁開發過的服務再建構?」的觀點來面對程式開發。

SOA 主張「程式開發技術」與「程式建構方法」的交替並用,以類似傳訊溝通的作法,將數個所需的「業務服務」進行連結,以此來實現一個新的應用程式,而非「從頭 開發」。透過適當的程式組構及傳訊式的程式連結,可讓學校或企業快速因應學生或用戶的需求與改變,新的應用程式只要透過「傳訊微調」即可實現,而非「重新 撰寫」。

SOA 不單只是程式開發的方法論,也提供行政管理層面的依循。例如它並非是以應用程式個體為角度來進行管理,而是直接將過往程式師開發出的程式視為「服務」來管 理。而對「服務」間的「互動傳訊」進行分析,SOA便可讓程式設計部門的主管瞭解何時該執行哪個業務邏輯,以及為何要執行,如此資訊管理者與分析師便可對 服務程序進行最佳化調適。

SOA如何運作?
SOA服務導向架構是一種新興的系統架構模型,主要概念是針對學校或企業需求組合而成的一組軟體元件。組合的元素通常包括:軟體元件、服務及流程三個部 份。當學校或企業面對外部要求時,流程負責定義外部要求的處理步驟;服務包括特定步驟的所有程式元件,而軟體元件則負責執行工作的程式。SOA 已成為現今軟體發展的重要技術,透過 SOA 讓異質系統整合變得容易,程式再使用度也提高。不必自行開發或擁有所有程式元件,發展者可以視其需要組合網路上最好的服務。不受限於特定廠商的產品功能或 是平台,達到真正的開放性(Openness)。從分散式元件架構到 SOA概念上,SOA 如同物件導向、軟體元件等軟體技術一般,運用小的零組件組合成應用系統。但 SOA 強調的是如何將彼此關係鬆散的應用系統功能元件在網路上發行、組合及使用。SOA 具有下列技術特性[2]:

  1. 分散式架構 (distributed)-SOA 的組成元件是由許多分散在網路上的系統組合而來,可能是區域網路,也可能是來自廣域網路。例如網站服務技術 (web services) 就是運作 HTTP來相互連結的 SOA。如此的作法,也使得網站服務技術很快的就成為所有支援網際網路的系統平台均能使用的技術。

  2. 關 係鬆散的界面 (loosely coupled)-傳統的系統主要是將應用系統功能需求切割成相互關聯的小零組件:模組、物件或元件,發展者要花費極大的心力了解零組件是如何設計及使 用,以確保不會違反零組件連接關係限制。如此一來,若要以不同零組件替換原始設計,就成為一件困難的事。SOA 的作法是以界面標準來組合系統,只要符合界面要求,零組件可以任意替換,大幅提高系統變更的彈性度。

  3. 依據開放的標準 (Open standard)-使用開放標準是 SOA 的核心特色,過去的軟體元件平台如 CORBA、DCOM、RMI、J2EE 採用專屬協定作為元件連結的規範,使得不同平台的元件無法相通。SOA 則著重於標準與互動性,將可避免不同平台 (.NET web services 與 Java web services) 開發程式間相互整合的困擾。

  4. 以流程角度出發 (process centric)-在建構系統時,首先了解特定工作的流程要求,並將其切割成服務界面(包括輸入與輸出資料格式),如此其他的發展者就可以依據服務界面開發 (或選擇) 合適的元件來完成工作。

最 後舉一個學校常用的例子來說明SOA在實際應用上帶來的可能性。假設我們要建立一個線上投稿的網站,網站提供的服務包括了線上投稿作業、論文分派作業、論 文審查作業、線上註冊及報名作業等。傳統的方式我們會儘快找一個類似的網站,再儘快將其他類似網站的原始碼(source code)拿來修改,但其他類似網站的原始碼所執行的平台有可能不是架站者所熟悉的作業系統。若要讓架站者作一個客製化,並符合自己投稿主題的線上投稿的 網站,可能要熟悉這個平台並修改網頁及測試,再加上別人的網站可能有一些bug,如果要做到毫無問題,除錯時間可能要花上三個月的時間。但是,如果我們導 入SOA的架構的話,可能將來只要花費心力將作業服務模組化、物件化或元件化,然後將它們整合到網站中即可,不需要再花費時間和資源自己去維護一個線上投 稿的網站,也不需要再自行建立和資料庫連結、報名付款機制等。這個網站就像是建立在SOA上,整合了這些web services元件的一個應用程式系統。更重要的是,透過如http、XML、SOAP 等產業標準開放式協定,不必擔心這些服務使用甚麼平台、甚麼技術來建立,而將來如果有更好的服務或服務提供者時,也可以輕易的將服務更換或更新。對系統開 發者來講,可以快速輕鬆的將系統建構完成,將心思專注在規劃更好、更完善的系統上;對服務提供者而言,只要能設計出一個好的服務,它的潛在使用者市場將不 再受到使用者平台的限制而有無限的可能。單就這類應用所呈現的美好遠景,應該可以解釋為什麼會到處聽到有人在談論SOA了。

因此 SOA 的實作,就是將所有程式邏輯及服務內容全部包裹在服務內部,並實作一個標準的介面與外部作溝通,這種做法跟傳統的元件導向做法非常類似,唯一的差別是介面定義的方式、資料格式、與溝通管道必須是產業標準 (http、XML、SOAP 等)。 也就是說只要能實作出這樣的介面,不論介面後面是什麼,都可使成為 SOA。
 

結論
綜合以上的介紹,SOA能帶來的幫助,有以下好處:
1.增加企業盈收,或提升學校的服務品質。
2.提供可變動的網路服務型態。
3.降低學校或企業的成本。
4.降低開發服務的時間。
5.整合學校或企業的網路服務技術資源。
6.降低整體風險及意外。
 

參考文獻
[1] http://dev2dev.bea.com.tw/techdoc/07soa/07soa_040812_01.htm
[2] http://www.microsoft.com/taiwan/msdn/columns/soa/SOA_overview_2004112901.htm

2008年1 月 posted by admin in 程式&軟體 and have No Comments