韌館-LearnHouse

Archive for the '程式&軟體' Category

[C/C++]c語言中volatile關鍵字

資料來源:msdnC++心得分享

volatile 關鍵字表示同時執行的多執行緒可能修改了欄位。

宣告為 volatile 的欄位不遵從假設單一執行緒存取的編譯器最佳化。這確保最新的值會一直出現在欄位中。

volatile 為一關鍵字 加在變數的前面,被 volatile 宣告的變數 將不會使用最佳化編譯

有時一個變數的值改變了 compiler 並不會馬上將他寫入記憶體中

而會先把結果放在CPU暫存器中 等到處理結束之後 才寫入記憶體

說這個變數是多執行緒的flag 其他的執行緒要透過這個變數來反應

而這個值卻又沒有寫入記憶體 這時便會發生意想不到的結果

又或者是這變數為一個硬體的暫存器 會被硬體所改變,然而compiler 並沒有正確的將值從硬體暫存器取出來

而是將自己暫存的值拿來使用,種情況 就是要用volatile 來宣告變數 告訴compiler不要自己暫存變數來提升速度

如此這個變數有任何的改變 便會馬上反應出來 

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

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)