Recent Articles / Archives

Microsoft 的免費軟件開發工具

Microsoft 開始一項名為 DreamSpark 的活動,內容是讓學生可以免費用微軟的軟件開發工具。一套完整的 .net 開發平始十分昂貴,要購買這類昂貴的商業軟件才可以學習一門技術,那已經對入門已經加上一重障礙,這項舉動無疑可以讓學生更早接觸微軟的開發工具。

如果你是全職學生,只要到 DreamSpark 網站登記,那便可以免費下載以下產品:

– Microsoft Visual Studio 2008 Professional Edition
– Windows Server 2003 Standard Edition
– Microsoft SQL Server 2005 Developer Edition
– Microsoft Expression Studio
– Game Studio 2.0
– Creators Club Online
– Microsoft Visual Studio 2005 Professional Edition
– Microsoft Visual C# 2005 Express Edition
– Microsoft Visual C++ 2005 Express Edition
– Microsoft Visual Basic 2005 Express Edition
– Microsoft SQL Server 2005 Express Edition
– Microsoft Visual Web 2005 Express Edition
– Microsoft Visual J++ 2005 Express Edition
– Microsoft Visual PC

February 27, 2008 · 程式設計分享 · No Comments Yet

基本分析 vs 技術分析

大家如有看一些 phone-in 的財經節目,一定會聽過支持位、阻力位、黃金比率等字眼,這些都是股票技術分析的名詞。看技術分析一般是從事短線買賣,或者對於長線投資者,希望從技術分析捕捉一個較佳的入市位。

我沒有學過技術分析,也不打算學,因為個人較認同基本分析,相信股價長遠而言會和盈利掛鈎,而且基本因素比技術因素較紮實。如果公司有優秀的業績,那麼即使股價下跌也會較有信心。

近期比較少留意財經消息,因為這個月較多工作。正如特首所講:「我要做好呢份工」,做好正職才是根本,從沒想過全職炒股,搞不好分分鐘成為病態股民,我買股票的目的只是對抗通漲及資本增值。

December 15, 2007 · 程式設計分享 · No Comments Yet

不使用 form 之下傳送 POST 變數

可以打開 HTTP socket 連線及傳送 HTTP POST 指令,以下是範例:

PHP:
  1. <?php
  2. // Generate the request header
  3. $ReqHeader =
  4. "POST $URI HTTP/1.1n".
  5. "Host: $Hostn".
  6. "Content-Type: application/x-www-form-urlencodedn".
  7. "Content-Length: $ContentLengthnn".
  8. "$ReqBodyn";
  9.  
  10. // Open the connection to the host
  11. $socket = fsockopen($Host, 80, &$errno, &$errstr);
  12. if (!$socket){
  13.  
  14.    $Result["errno"] = $errno;
  15.    $Result["errstr"] = $errstr;
  16.    return $Result;
  17. }
  18. $idx = 0;
  19. fputs($socket, $ReqHeader);
  20. while (!feof($socket)){
  21.    $Result[$idx++] = fgets($socket, 128);
  22. }
  23. //-------------------------------------------
  24. ?>

或者可以使用 PHP 的 cURL extension。當你安裝了 cURL 及重新編譯 PHP 支援 cURL後,便可以用以下這個較簡單的方法:

PHP:
  1. <?php
  2. $URL="www.mysite.com/test.php";
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_URL,"https://$URL");
  5. curl_setopt($ch, CURLOPT_POST, 1);
  6. curl_setopt($ch, CURLOPT_POSTFIELDS, "Data1=blah&Data2=blah");curl_exec ($ch);
  7. curl_close ($ch);
  8. ?>

December 11, 2007 · 程式設計分享 · No Comments Yet

使用 MySQL 儲存圖片

其實這個方法不單可以用在 MySQL,在其他資料庫及非圖片也應該也沒問題,原理是 使用 base64_encode() 將檔案轉成 MIME base64 字串編碼,然後放入資料表,當然儲存檔案用的欄位要夠大才可以,在取出時用 base64_decode() 回復原狀即可,以下是例子:

PHP:
  1. <?php
  2. $file_str=base64_encode($file);
  3. mysql_query("insert into table_name values ('$file_str')");
  4. ?>

December 10, 2007 · 程式設計分享 · Comments (1)

PHP 內將數值自動補零

如果在 PHP 想將數值自動補零,例如以 00, 01, 02 ...... 等方式顯示,可以用以下方法:

$var = 1;
echo sprintf("%02d", $var);

這樣就會印出 01,其中 2 是顯示的位數,如果想顯示 001,可以改成 sprintf("%03d", $var);

December 7, 2007 · 程式設計分享 · No Comments Yet


PHP 存取 MySQL 4.1 的亂碼問題

早前替客戶開發了一個系統,原本沒遇到問題,但這個星期他們致電給我說不能輸入中文。這時覺得奇怪,MySQL 內的 table 欄位已設成 utf8,而輸入介面及顯示頁面的編碼均為 utf8。

然後在 MySQL 官方網站的 Character Set Support 找到解決方法。

只要在查詣資料表時使用 SET NAMES 'utf8'; 即可解決,這個語句等同於以下句:

SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

December 6, 2007 · 程式設計分享 · No Comments Yet

解決 MySQL 4.1.x 以上的認證問題

因為 MySQL 在 4.1 或以上的版本的認證加密方法更改了,那即是說在 php 程式內即使密碼正確也會連接失敗。解決方法為:

1. 重新編譯 PHP
將 --with-mysql 的選項改為 --with-mysqli=mysql_config_path/mysql_config,其中 mysq_config_path 是 MySQL 的安裝路徑下的 bin 目錄。

2. 修改 my.cnf
打開 /etc/my.cnf,在 "[mysqld]" 下加入一行

old-passwords

然後重啟 MySQL,這樣就會強逼 MySQL 使用舊加密認證。

隨機抽取 MySQL 內的資料

如果要在資料庫內隨機抽取資料,可以用 PHP 或 MySQL 內置的 RAND() 函式來做,以下是使用 MySQL 的語法:

SELECT * FROM table_name ORDER BY RAND() LIMIT 1;

December 5, 2007 · 程式設計分享 · No Comments Yet

用 ImageMagick 製作縮圖

只要在系統安裝 ImageMagick 後,就可以在指令模式下製作各種圖片的持效。當然也可以使用 PHP 從 shell 下使用 ImageMagick,以下是製作縮圖的方法:

shell_exec("/usr/local/bin/convert -sample 500x500 /pathto/images/image1.jpg /pathto/images/image2.jpg");

以上是將來源圖片 /pathto/images/image1.jpg 製作縮圖,高和闊都以 500 像素為上限,那就是說製作出的縮圖會根據原始圖片的比例下,高和閣都不會超出 500 像素,然後檔案會輸出到 /pathto/images/image2.jpg.

如果要單單用 PHP 完成以上工作,要自行計算出縮圖片大小才可以做,而且更加可以用百份比,例如 50%x50% 就是高和闊都是原圖的 50% 大小。

December 5, 2007 · 程式設計分享 · No Comments Yet

PHP 設定瀏覽器 timeout 時間

如果你的 PHP 程式需要做很複雜的運算,而且預計不能在 30 秒 (PHP 的預設值) 內完成,可以在 PHP 程式的開始部份加上:

set_time_limit(900);

以上例子是將 timeout 時間設定成 900 秒,即 15 分鐘。

December 4, 2007 · 程式設計分享 · No Comments Yet


MySQL 中的變數

一般上使用 MySQL 都是儲存資料及需要時抽取所需的資料,其實 MySQL 還有很多其他功能,以下介紹使用 MySQL 的變數刪除一些舊資料:

select @del_time:=`time` from `article` order by `time` desc limit 499, 1;
delete from `article` where `time`

以上第一行 SQL,會定義一個 del_time 變數,value 是資料表 article 倒序排第 500 筆的 `time` 欄位。
第二句是刪除在 article 資料表內時間比 del_time 還要舊的文章。

December 4, 2007 · 程式設計分享 · No Comments Yet

Visual Studio 2008 開放下載

Visual Studio 2008 已經開放下載,在 Visual Studio 2008 Express Developer Center 包括所有 Visual Studio 2008 的免費版本及 SQL Server 2005 Express (2008 版本開放時會更換)。裡面還有一些範例及資源,例如 Facebook Dev KitGame Creators Game Development Kit

November 21, 2007 · 程式設計分享 · No Comments Yet

超過 70 個 IDE

開寫程式時一般上會用上 Integrated Development Environment (IDE),這裡有超過 70 個 IDE,包括有 C/C++, Java, Perl, ASP.net, PHP, Python 及 Ruby:
Read more...

升級 Ubuntu 7.10 Gutsy Gibbon

今天將 laptop 升級為 Ubuntu 7.10,新版本的開發代號為 Gutsy Gibbon,照例 Ubuntu 的開發團隊也沒有令我們失望。主要更新包括 Ubuntu 7.10 將 Linux kernel 更新為 2.6.22,桌面環境建構在 X.org 7.2 上,glibc 及 GCC 的版本分別為 2.6 及 4.2。

印象最深刻的是驅動程式的部份,當我安裝好系統後,系統便自動彈出有新的顯示咭驅動程式,跟著指示很快便更新完成,感覺真的很方便。另外用上一個版本當瀏覽一些較多 client side 語言之類的網站時,會出現很慢的情況,不知是 Firefox 還是其他套件的改進,現在瀏覽頁面較複雜的網頁時也很暢順。其他更新包括:

-- 預設已經支援 NTFS 寫入檔案系統,不用手動安裝。
-- 內建 Compiz 0.6.0 及 Compiz Fusion 0.5.2,可以實現超炫的 3D 桌面效果。
-- 使用 Gnome 2.20,OpenOffice.org 2.3,IMP 2.4 RC 3 及即時通訊軟件 Pidgin 2.2.1。

MySQL 編碼函式

MySQL 內建提供了一些編碼函式,以下會介紹 ENCODE() 及 DECODE() 的作用及用法:

ENCODE(str,pass_str)
將字串 str 加密,並使用 "pass_str" 作為加密鑰匙,例如:

mysql> select encode("testing string", "mykey");
+ - - - - - - - - - - - - - - - - - +
| encode("testing string", "mykey") |
+ - - - - - - - - - - - - - - - - - +
| �k��y����ۙ�( |
+ - - - - - - - - - - - - - - - - - +
1 row in set (0.00 sec)

 
DECODE(crypt_str,pass_str)
decode() 的作用就是對 encode() 加密的內容解碼,其中 crypt_str 是經過 encode() 加密的二進字串,而 pass_str 就是解密鑰匙。如果使用的鑰匙與加密時的鑰匙不同,回傳的結果便不會正確,用法如下:

mysql> select decode(encode("testing string", "mykey"), "mykey");
+ - - - - - - - - - - - - - - - - - - - - - - - - - - +
| decode(encode("testing string", "mykey"), "mykey") |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - +
| testing string |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - +
1 row in set (0.01 sec)
August 31, 2007 · 程式設計分享 · No Comments Yet


  Next Page »