2016/06/28

IntraWeb 學習日記:【Parameters】

在Web網頁應用中,常常會使用到網址列利用GET指令來傳遞參數,比方像是:
http://grandruru.blogspot.tw/index.html?MyParam=HelloEden

接著便Response給伺服器一個參數為「MyParam」,值為「HelloEden」的內容。


在IntraWeb中,由於Web Application特性,我們不能直接呼叫其它的html為起始網頁(會被引導到首頁),但是,我們仍然可以使用參數,例如:

2016/06/21

IntraWeb 學習日記:【Login】

之前有提過 IntraWeb 原始目標和ASP.NET 2.0 Web Form 一樣,都是拖拉元件的方式產生。
不過單獨介紹元件意義不大,直接看看可以做些什麼出來吧!

目前已知,要撐起一套 Win32 應用程式,大概需要以下幾個元素:

2016/06/14

堅持,就是在遇到錯的人還能勇往前行

圖片來源

有一天晚上,在和孩子講著「父子與驢」的故事。

故事是這樣的:
父親打算到市集賣掉驢子,便帶著孩子一同前往市集,路上遇見三個對他們說三道四的鄉民:

「怎麼不騎驢?」、
「怎麼不讓孩子騎?」、
「怎麼這麼不孝順?」、
「為什麼虐待驢子!」,

每一次這對父子都對來者的「建議」照辦,最後這驢子就在市集前的橋上掉到水裡,父子窩囊地丟了面子,也失去了銀子。


相信這類的人你身邊很多,而這世上也的確不乏很多愛胡亂提供 批評 建議的人。

2016/06/07

不是不努力,而是不專業

Photo from lime122
近梅雨季來臨,不是一直下雨,就是濕氣含著不下雨,不只戶外像熱帶叢林,就連回到家裡,也感受到家中【滿滿地 Juice】和【濃濃地發霉味】。

一連幾個晚上,都將冷氣開著除濕睡整晚,過了快一個星期後的某一日,如往常的回到家,撲鼻而來的不只是滿滿 Juice 的濕氣,連發霉味也更加地沉重!


不是每晚都開除濕了嗎?為什麼還會有發霉的味道跑出來!


這次決定不用冷氣的除濕功能,把那台迷你的小小除濕機給請了出來,開始工作不到半個小時,神奇的事發生了,不僅 Juice 感沒了,就連發霉感也湮消雲散了!


看著地上迷你除濕機,再看看牆上巨大的冷氣機,心中突然有感而發:

2016/05/31

Delphi ORM 產生器 1.0.0.0 已在 Windows Store 上架!

Delphi 現在也可以做到 ORM 了! Photo source


您還在跟單引號與括弧對打嗎?

您的Pas裡早已充斥著這樣的程式碼:
DataSet.FieldByName('fieldname').AsString
DataSet.FindField('fieldname').AsString


又臭又長又噁心,又常常寫出在執行時期跳出「數值轉換失敗」的程式碼,您的開發效率就這樣打了折扣嗎?

老闆付您薪水卻產出這樣品質低劣的程式碼,不管是老闆或是您,在內心一定是充滿著悔恨吧!


還好,這並不是您的錯,千錯萬錯都是 Delphi 沒有滿足您的願望惹的禍!



更幸運的是,您現在看到了這篇。

為了讓您薪水領得安心,在這個星期,集合了傳說中 Delphi 社群的力量,終於將【Delphi ORM 產生器】完成!


千呼萬喚始出來,【Delphi ORM 產生器】終於完成!


它結合了【TField】,【T*Field】,【Native Type】三種模式,絕對可以滿足您多樣化的開發方式,而且,保留了最貼近 Delphi 原生 TDataSet 的程式寫法,又可以解決在編譯時期找出【型別錯誤】的長期 Delphi 之痛


【Delphi ORM 產生器】是彈性和實用兼具的好物,據統計,它至少可以節省 Delphi 開發人員 53% 以上的開發時間更可以提高程式正確率 92% 以上


更更更重要的,目前開放免費體驗中

【Delphi ORM 產生器】終於完成!

再寫下去就囉嗦了,想提高您在使用者心目中的地位嗎?那就快去下載使用吧!


2016/12/03 更新:

現在,Delphi ORM 產生器已在 Windows 商城上架!

軟體安全性更上一層樓,還沒體驗的 Delphier,趕快來體驗極速開發吧!


See also:

2016/05/24

IOUtils TDirectory.CreateDirectory 跳出 The drive cannot be found 錯誤

最近使用 IOUtils 單元的 TDirectory.CreateDirectory 來處理目錄建立的工作。

MSDN中說明這個函式的功能:
按照 path 所指定的來建立所有目錄和子目錄。

備註
會建立 path 中指定的任何和所有目錄,除非它們已經存在,或 path 的某些部分是無效的。path 參數指定的是目錄路徑,而不是檔案路徑。如果目錄已經存在,這個方法不執行任何動作。
所以DirectoryExists這類的工作都可以拿掉了,是個很方便的功能。

程式運作了好一陣子,都沒有出問題,一直到某天,客戶回傳了一個錯誤視窗:


於是,我又踏上抓鬼之路了。
  接著我請了個道士來 Debug   圖片來源


雖然已知是「TDirectory.CreateDirectory」造成的錯誤,但為什麼客戶會出現但我這裡完全沒事呢?


後來才知道,原來客戶的環境是以虛擬機器運作,以 UNC 路徑執行所有程式,看來就是 UNC 路徑搞的鬼。

What is "UNC"?就是像「\\ComputerName\DirectoryName」這樣的網路路徑。

總之,Bug找到了!讓我們來看看「它」長什麼樣子吧!



Bug 示意圖.........  圖片來源
































咳!………還是回到正題!


仔細研究原始碼,才發現在 IOUtils.pas 單元的函式出錯:
class procedure TDirectory.CheckCreateDirectoryParameters(const Path: string);

出錯的程式碼為:
if not TPath.DriveExists(TPath.DoGetPathRoot(Path)) then

因為沒有針對 UNC 路徑多做判斷,所以一定會跑「The drive cannot be found」錯誤。

找到了Bug,但要如何解決呢?很簡單,將出錯的那一列置換如下:
if TPath.IsDriveRooted(Path) and not TPath.DriveExists(TPath.DoGetPathRoot(Path)) then


如此便修正了這個問題,但最好是將底下路徑的IOUtils.dcu一併置換:
$(BDS)\lib\win32\debug
$(BDS)\lib\win32\release
$(BDS)\source\rtl\common


或是把 IOUtils.pas 複製到自己的專案進行修改後使用。


















最後,這個Bug在XE3之後已被修正。

See also:

2016/05/17

Delphi 加密解密(含數位簽章)的解決方案 -- 【初探篇】

嗯,今天不討論破解病毒的問題

一直以來,總是覺得自家系統的加密法很陽春,容易被破解,最近看到可怕的【 加密勒索病毒】,發現居然用到 RSA 4096 加密等級,凡是中招者,只能選擇「付贖金」或是「銷毀」這兩個選項。

看來這 RSA 加密真是個很可靠的東西,如果可以應用在自家的產品上……