網頁

2010年6月30日 星期三

沈默的新技術 WPF

WPF出來好幾年了,微軟的新一代使用者介面,2006年推出時,實在帶給人很大的震撼,但實在是太早出來了,相關的整合配套措施都還沒好,又包山包海,十足是隻怪獸一樣,另一個明顯的缺點就是畫面上的字,看起來都糊糊的,實在傷害眼睛,WPF 4.0有解決了糊糊的問題,花了四年!!

WPF真的出來的太早了,一堆資源找不著了,光要讓我的VS 2005可以開發WPF的程式,就花了我非常多的時間,微軟的網站早就不提供Visual Studio 2005 extensions for .NET Framework 3.0 (WCF & WPF), November 2006 CTP 下載了,搜尋了好久終於下載成功,只能說微軟的手法太高招,逼迫大家提昇VS。

或許WPF是個大躍進,但在Windows Form出來沒多久,MFC還是一堆人最常用的選擇,本身優良開發的ide沒出現,微軟自己產品也沒看到任何一套使用這新技術,所以周邊的人也沒看到誰在用這東東,它可能又要默默的發展幾年,才會讓人去注意吧。
閱讀全文...

2010年6月11日 星期五

好用的SQLite資料庫管理工具

SQLite Expert Personal 好像的視覺化SQLite資料庫管理工具,請至 http://www.sqliteexpert.com/ 下載,免費的 Personal 版本就灰熊好用。
閱讀全文...

2010年5月28日 星期五

SQLite with Visual Studio 2005

採用 System.Data.SQLite(http://sqlite.phxsoftware.com/) -An open source ADO.NET provider for the SQLite database engine
請至 http://sourceforge.net/projects/sqlite-dotnet2/files/ 下載安裝檔案,我下載的是2010/04/18的版本SQLite-1.0.66.0-setup.exe(下載最新的就對了)

1. 安裝,重點就是一直按 Next,安裝目錄用預設值,把你現有的開發環境勾起來(我的是Visual Studio 2005),就會自動裝好了。


















































2. 測試
2.1 開啟一個新的 C# Console Application Project
2.2 專案開啟後,首先最重要的一步,就是 Add Reference,將System.Data.SQLiteSystem.Data.SQLite.Linq加進專案中。
2.3 主要程式碼如下
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SQLite;
using System.IO;

namespace SQLiteTest1
{
    class Program
    {
        public static SQLiteCommand cmd;

        public static void CreateTable()
        {
            string sql = "CREATE TABLE user(" +
                            "id INTEGER PRIMARY KEY, " +
                            "name text, " +
                            "sex int(1) NOT NULL DEFAULT 0 " +
                         ")";
            cmd.CommandText = sql;
            cmd.ExecuteNonQuery();
        }

        public static void DropTable()
        {
            string sql = "DROP TABLE user";
            cmd.CommandText = sql;
            cmd.ExecuteNonQuery();
        }

        public static void AddUser(string name, int sex)
        {
            string sql = " INSERT INTO user (name, sex) " +
                         " VALUES ('" + name + "', " + sex + ") ";
            cmd.CommandText = sql;
            cmd.ExecuteNonQuery();
        }

        public static void ListAllUser()
        {
            SQLiteDataReader sdr;

            string sql = "SELECT * from user";
            cmd.CommandText = sql;
            sdr = cmd.ExecuteReader();

            Console.WriteLine("ID\tNAME\tSEX");
            Console.WriteLine("------------------------------------------------");
            while (sdr.Read())
            {
                Console.WriteLine("{0}\t{1}\t{2}",
                    sdr["id"],
                    sdr["name"],
                    sdr["sex"]);
            }
        }

        static void Main(string[] args)
        {
            SQLiteConnection conn = null;

            try
            {
                string strDatabaseRoot = Directory.GetCurrentDirectory() + "\\SQLiteTest1.db";

                if (!File.Exists(strDatabaseRoot))
                {
                    SQLiteConnection.CreateFile(strDatabaseRoot);
                }

                conn = new SQLiteConnection("Data Source=" + strDatabaseRoot);
                conn.Open();
                cmd = conn.CreateCommand();
                DropTable();
                CreateTable();

                AddUser("Dick", 1);
                AddUser("Mary", 0);
                AddUser("GiGi", 0);
                ListAllUser();

            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
            }

            Console.ReadLine();
        }
    }
}

Output:

閱讀全文...

小巧實用的資料庫 SQLite

資料庫一直是程式開發中不可或缺的好幫手,但現在許多有名的資料庫包山包海給你重量型的規格,當然也是重量型的價格。可是當你只是開發一個需要儲存,資料量不大,只需要單機使用,或是沒多人同時使用的需求,你會想搬出 Oracle、DB2和SQL Server嗎?No,此時不需要這種怪獸級的產品,SQLite會是個不錯的選擇。

SQLite(http://www.sqlite.org/index.html) 是一套 Embedded RDBMS,很適合加進應用程式裡頭跑,並且資料庫檔能輕鬆跨平台。一般的SQL92語法都有支援,單一檔案,不需要安裝科學怪獸,只需要寫程式時將他加入一起編譯就好了。

SQLite特性優缺點和支援的平台及程式語言,請拜請 Google 大神一撈或是光臨SQLite網站就有了。容我偷懶,光速逃。
閱讀全文...

2010年5月27日 星期四

C# Tutorial – 7. Control Statements Tutorial

每個程式常常在連續的步驟後,會遇到要停下來,判斷各種情況後,在繼續往下執行。底下是一些常用到的判斷語法。


Control Statements – Seelction
The if Statement
取決於給予的條件,來執行不同的程序,當條件是 true 時,將執行那區塊的程式碼。

syntax:
if () {
    statements;
} else if () {
….
} else {
        statements;
}

if (money > 0) {
        Console.WriteLine(“時間就是金錢({0}),朋友!”, money);
} else {
        Console.WriteLine(“天啊!你真窮。”);
}

當有多種情況需要判別時,就會衍生成下面的樣子

if (xx > 100) {
        statements;
} else if (xx<100 && xx > 50) {
        statements;
} else if (xx<50 && xx>20) {
        statements;
} else {
        statements;
}

The switch Statement
取決於給予的一整組邏輯的值,當符合其特定的參數,其包含的區塊成勢將會被執行。
switch 運算式的值可以為 booleansenumsintegral typesStrings

syntax:
switch ()
{
case value1:
        statements;
        break;
    case value2:
        statements;
        break;
    …
    default:
        statements;
        break;
}

int myInt;

    myInt = Console.ReadLine();
    // switch with integer type
    switch (myInt)
    {
        case 1:
            Console.WriteLine("Your number is {0}.", myInt);
            break;
        case 2:
            Console.WriteLine("Your number is {0}.", myInt);
            break;
        case 3:
            Console.WriteLine("Your number is {0}.", myInt);
            break;
        default:    // 當都不符合上面條件時,就會執行此區塊
            Console.WriteLine("Your number {0} is not between 1 and 3.", myInt);
            break;
    }

Control Statements – Loops
當要重複執行某些特定的動作,loops是最後達成這任務的。

The for Loop
for loop包含三個部分:起始值、條件判斷和條件增量。
syntax:
for (; ; ) {
;
}

ForLoop.cs
    using System;

    class ForLoop
    {
        public static void Main()
        {
            for (int i=0; i < 20; i++)
            {
                if (i == 10)
                    break;

                if (i % 2 == 0)
                    continue;

                Console.Write("{0} ", i);
            }
            Console.WriteLine();
        }
    }

Output:
1 3 5 7 9

說明:
1.      i的起始值為0;條件式是小於20i的增量每次加1
2.      i等於10的時候就會跳出for loop
3.      i2整除時,i直接加1

The while Loop
while loop就包含一個條件式,當條件一直成立(true)時,就是一直重複執行那段程式。

syntax:
while () {
;
}

WhileLoop.cs
    using System;

    class WhileLoop
    {
        public static void Main()
        {
            int myInt = 0;

            while (myInt < 10)
            {
                Console.Write("{0} ", myInt);
                myInt++;
            }
            Console.WriteLine();
        }
    }

The do Loop
do loop動作和while loop差不多,最明顯的差異在於 do loop最少會執行一次。

syntax:
do
{
;
} while ();

DoWhileLoop.cs
    using System;

    class DoWhileLoop
    {
        public static void Main()
        {
            int myInt = 0;

            do
            {
                Console.Write("{0} ", myInt);
                myInt++;
            } while (myInt < 10);
            Console.WriteLine();
        }
    }

總結:
Selection Control Statements讓你可以用不同的判斷式來執行不同的邏輯分支的程式。
Loop Control Statements 讓你可以輕鬆重複執行同一區塊的程式。
不同的情況選擇適當的 Control Statement 將會使程式更易於閱讀和執行工作,達到事半功倍的效用。

閱讀全文...

2010年5月26日 星期三

容忽視的隱患 差異性阻礙Android發展[此為網路轉帖]

很多Android手機用戶在近期得到了好消息,他們所使用的手機將會被升級至最新的Android 2.1操作系統。摩托羅拉、HTC、三星等製造商都推出或者正在計劃産品系統升級計劃,這涉及摩托羅拉MilestoneHTC Hero等熱門産品。此時,距Android 2.1系統發布已經有近3個月時間。




Android版本差異讓用戶抱怨
  但目前大部分Android手機,特別是更早的産品目前仍然只能使用較低的系統版本。其中一些産品或許會在未來升級,但並沒有具體時間表,另一部分則 或許永遠不會有升級計劃。這些手機用戶無法使用最新的Google應用,也不能擁有更絢麗的用戶介面。

採用Google Android 2.1操作系統的Nexus One
  不同版本的差異,已經被認爲是Google Android發展的一大障礙。從誕生起,Google Android系統經曆了多個版本,從1.0發展到了最新的2.1, 其中甚至包括精確到兩個小數點的2.0.1版本。不同版本的Android系統在介面上存在差異,應用程式也不能完全相容,Google並未提供統一的升級機制, 而是由製造商提供系統升級固件,或者以OTA的方式對系統進行更新。
  這一點和競爭對手蘋果iPhone不同。iPhone OS同樣有著很多不同的版本,但是由於硬體的統一性,蘋果能保證所有的iPhone能在新系統發布之後立即升級到最新版本。

程式開發者也面臨煩惱
  Android版本差異和應用程式相容性不僅被用戶抱怨,也爲開發者帶來了煩惱,他們必須決定爲那個版本開發軟件,這是個問題:新版系統將會在未來廣 泛應用,但舊版系統往往在很長時間內仍然是主流。

2009
年底Android不同版本比例分部
  Google曾經試圖爲開發者提供幫助,在2009年底,Android開發者官方博客提供了當時 Android版本在市場的份額比例,其中Android 1.51.6版本占據了超過60%的比例,2.02.0.1版本系統也顯示出很快的發展勢頭。然而,幾天之後Google就推出了採用Android 2.1系統的Nexus One,這讓開發者更加無所適從。

硬體和OEM介面同樣阻礙Android統一
  系統版本並非Android面對的唯一差異,這一系統産品的硬體差異同樣巨大。比如,最初的幾款 Android手機都採用了HVGA解析度的螢幕,但是現在,高端Android手機解析度已經達到了WVGA水準,一些低端産品則採用了QVGA解析度 的螢幕。另外在處理器、內存等方面,不同Android手機之間也存在很大差異。這無疑也會對開發者帶來困擾,他們需要針對不同硬體對應用程式做出調整, 這將花費更多的精力。

熱門的HTC Hero目前運行Android 1.6系統
  從這一點來講,蘋果iPhone平臺對於開發者會更有吸引力。值得一提的是,不僅是蘋果,從Windows Phone 7系統開始,微軟也將對産品的硬體規格進行嚴格控制,微軟也意識到,這將有助於未來保持系統版本的統一和應用程式相容性。
  另外,第三方OEM 介面也被認爲可能破壞Android系統的統一性。HTC、摩托羅拉、三星、索尼愛立信等公司,都在自己的Android手機上另外搭載了獨特的用戶界 面,這有助於保持産品的個性,避免過分同質化,但是也可能影響到系統的升級或者軟件運行異常。

差異性問題不容忽視
  Android 所面臨的這種局面已經得到很多業內人士的關注。開發者和手機製造商都必須考慮自己的軟件和産品選擇何種版本,甚至不得不針對Google的一次更新改變産品規劃。 在消費者層面,盡管目前尚未顯現太大的負面影響,但是長期來看這也是不可避免的:如果用戶不確定自己購買的手機未來能否升級到最新系統並且使用最新應用, 他們會猶豫是否購買,特別是在需要和運營商簽訂很長協議的情況下。

目前最熱賣的摩托羅拉Droid採用Android2.0系統
  因此,盡管Android目前是行業的熱點,採用這一系統的産品正如雨後春筍般出現,但是差異性已經成爲其不可忽視的一個隱患。這一問題如果不被重 視,Android未來的命運將是一個未知數。

閱讀全文...

2010年5月24日 星期一

利用VBS定期刪除過期檔案

本文主要介紹如何利用VBS在WINDOWS上刪除過期檔案,雖然不是很常用,但久久就會有人問一次,寫下來當作備忘。

DeleteFolder.vbs

' ====== Code Start ===================
Option Explicit
 
WScript.Echo("作業開始執行:" & Date & " " & Time)
 
Dim FSO, agoDays, modifiedDate, delFolder
 
' 設定過期檔案預期天數
agoDays = 3
' 欲刪除檔案所在之目錄
delFolder = "D:\Temp"
 
Set FSO = CreateObject("Scripting.FileSystemObject")
 
modifiedDate = DateAdd("d", -agoDays, Date)
 
DelFilesInFolder FSO.GetFolder(delFolder)
 
Sub DelFilesInFolder(folder)
    Dim file, subFolder

    For Each file In folder.Files
        If ((file.DateLastModified <= modifiedDate)) Then
            file.delete
        End If
    Next

    ' 如果遇到子目錄,也要進去檢查並刪除
    For Each subFolder in folder.SubFolders
        DelFilesInFolder subFolder
    Next
End Sub
 
WScript.Echo("作業執行完畢:" & Date & " " & Time) 
' ====== Code End ===================

閱讀全文...