Feeds:
Posts
Comments

Archive for the ‘computer language’ Category

Twitter Typeahead is a fast and effective auto-complete jQuery plugin for form filling.

Twitter Typeahead 插件是一個jQuery 插件,用作快速而有效率的自動填表工具。

In desktop computer, this plugin (Twitter Typeahead) works properly. However, when this plugin is run on a mobile computer, it cannot detect the “blur” event properly. The suggested text cannot be closed when you click outside the suggestion box.

在正常的桌面電腦上,這個Twitter Typeahead插件能正常地運作。可是,一旦放在手機的瀏覽器上運行,卻因無法捕捉到“blur”的事件。如果輕觸瀏覽器的其他地方,無法可以正常關閉“提示列”。

One of the possible method is add a close button “x” to close the suggestion list. I’ve done an ugly example illustrate this: typeahead with close button “x”

其中一個可行的方法,就是在提示清單上加入一個關閉的按鈕”x”,小弟做了個核突的版本:typeahead with close button “x”

只要您修改第849行,
What you need to do is to change line 849:

 dropdown: '<span class="tt-dropdown-menu"></span>'

換成以下,
To

 dropdown: '<span class="tt-dropdown-menu"><a class="tt-dropdown-close" onclick="$(this).closest(\'span\').hide()">x</a></span>'

還有,只要修改CSS就能改善畫面。
If you feel this screen is ugly, what you need is to add CSS file.

Read Full Post »

我在網上看到有文章說可以很簡單的使用Java的Input Stream來開啟Big5 HKSCS編碼的網頁,然後直接轉成UTF-8。
I’ve seen some articles in internet saying that it’s quite easy to use Java’s Input Stream to open a webpage encrypted in Big5 HKSCS and convert it directly to UTF-8.

我將那些網頁介紹的方法,寫了一個到香港政府某網頁的程式,試試看轉出的內容是否UTF-8。
According to the method introduced, I’ve written a java program to test if it can download a Hong Kong Government’s webpage and display the content in UTF-8.

這個程式的內容如下:
The source code is as following:

import java.net.URL;
import java.net.URLConnection;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Building{
	public static void main(String args[]) throws Exception{
		URL bdgSite=new URL("https://bmis.buildingmgt.gov.hk/chi/building.php?count=0&ordfield=&district_id=0");
		StringBuffer s=new StringBuffer();
		String inputLine;
		URLConnection fc=bdgSite.openConnection();
		BufferedReader in=new BufferedReader(new InputStreamReader(fc.getInputStream(),"Big5_HKSCS"));
		while((inputLine=in.readLine())!=null)
			s.append(inputLine);
		in.close();
		Pattern p1=Pattern.compile("<option[^>]+>([^<]+)</option>");
		Matcher m1=p1.matcher(s);
		while(m1.find()){
			System.out.println(m1.group(1));
		}
	}
}

在程式中,我試圖將十八區的名稱找下來。(尤其是深水埗的「埗」字,這個若用普通的Big5編碼是看不到的。)
In the program, I tried to use regular expression to find the 18 regions in Chinese, one of the word “埗” cannot be processed properly if using Big5 encryption.

我在mac機的Terminal用UTF-8輸出,看到亂碼,用BIG 5 HKSCS輸出,看到正常。這表示,Java只能正常地讀取網頁,卻沒有將網頁的內容轉成Unicode或UTF-8。

I use mac os and set the output of terminal into UTF-8. I found the output is messy and is in wrong encoding. Then I switch the output of terminal to BIG 5 HKSCS, I found the output become normal. This shows that Java can process the encoding of the web page properly but, it doesn’t convert it into Unicode or UTF-8 for processing. Thus, the output is still in BIG 5 HKSCS.

我將這程式安裝在Ubuntu 13.04, JDK 1.7.0_21的環境運行卻發現正常,最後,我找到了Mac OS的Java 設定中,Default file encoding 是並不是UTF-8而很可能是ISO-8859-1。而要正常運行,必需要加入參數 -Dfile.encoding=UTF-8

I’ve tried to install this program in one of my Ubuntu desktop 13.04 with JDK 1.7.0_21. The program runs properly. Finally, I found out a fact that there is a setting “-Dfile.encoding” which affect Mac OS to output the result properly. In order to fix the problem, I need to add an option “-Dfile.encoding=UTF-8”:

java -Dfile.encoding=UTF-8 Bulding

Read Full Post »

I've just received a press release from Packt about the latest 
jQuery Campaign. Here is the press release:


Packt celebrates jQuery in October with exclusive book offer

Packt has this week announced a series of discounts and 
promotions to herald the publication of the Learning jQuery, 
Third Edition in October. Packt will offer readers the exclusive 
discounts of 20% and 30% off the cover price of all jQuery print 
books, including the just published third edition of the Learning 
jQuery book, for limited period only.

jQuery is a powerful, yet easy-to-use JavaScript library that helps 
web developers and designers add dynamic, interactive elements to 
their sites, smoothing out browser inconsistencies and greatly 
reducing development time.

Learning jQuery, Third Edition, written by Jonathan Chaffer, 
Karl Swedberg, is revised and updated for version 1.6 of jQuery. 
Readers will learn the basics of jQuery for adding interactions 
and animations to their pages. Even if previous attempts at writing 
JavaScript have left one baffled, this book will guide them past the 
pitfalls associated with AJAX, events, effects, and advanced JavaScript 
language features.

“jQuery is one of the topics Packt remains committed to publishing on, 
offering more interesting books that will help the diverse needs of 
jQuery users. The set of jQuery related books we’ve recently published 
shows our continued commitment to the topic area, and we intend to 
publish important jQuery books, such as the Learning jQuery, Third Edition, 
for a long time to come”, said Packt Open Source publisher Doug Paterson.

For more information on jQuery October and the discounts being offered 
throughout October, please visit: 

- https://www.packtpub.com/news/jquery-month

Read Full Post »

Using Application Scope Regular Expression 是一種使用IIS的冷知認。

在處理「搜尋器友善」(Search Engine Friendly)的網頁時,網頁瀏覽器每一次向服務器索取
網頁時,常常會利用「正規表達式」。其實,每次使用「正規表達式」時,服務器會重新將
「正規表達式」進行即時翻譯(Just-in-Time Compilation),當網頁傳送給瀏覽器後,「正規表達式」
就會從記憶體移除。

試想像一個繁忙的網站,同一時間有千多個客戶。每一個用戶會使用一個或以常的「正規表達式」,
而每次使用,都會從新「即時翻譯」。這些過程,對服務器是一個很大的負擔。

在微軟IIS上,有一個使用物件的方式,叫做Application Scope,表示物件在啟動後會一直運行,
直到IIS重新啟動、或者清理Application Pool時,才會從新載入、翻譯。我們可以將
「正規表達式」以Application Scope的方式,長期留在記憶體內。以下的情況,有四個常用的
「正規表達式」以Application Scope的方式運作的代碼(儲存在/global.asa):
<object runat="server" name="URL_RegExp" scope="application" progid="VBScript.RegExp"><object/object>
<object runat="server" name="NODE_RegExp" scope="application" progid="VBScript.RegExp"><object/object>
<object runat="server" name="SITEMAP_RegExp" scope="application" progid="VBScript.RegExp"><object/object>
<object runat="server" name="PART_RegExp" scope="application" progid="VBScript.RegExp"><object/object>
<script language="JScript" runat="server">
function Application_OnStart(){
  Application.lock();
  URL_RegExp.Pattern="404;http:\\/\\/[^\\/]+\\/(.+)$|^~404\\.asp$";
  NODE_RegExp.Pattern="^node/([01][a-z0-9]{3})$";
  SITEMAP_RegExp.Pattern="^sitemap/([01][a-z0-9]{3}|nodes)$";
  PART_RegExp.Pattern="^parts/([01][a-z0-9]{3})/([0-9A-Z\\-\\.\\/\\%\\s]{4,50})$";
  Application.unlock()
}
</script>
經過簡單比較,在繁忙的服務器上,用應用程式層面(Application Scope)會比(Session Scope)快十多倍。

Read Full Post »

最近有一位同事栛助我處理有關Search Engine Optimization(SEO)的事宜。
舊的系統產生了大量的網頁,我這位同事要建立新的系統。但舊的系統所
產生的網頁。有大量的ASP(Active Server Page)代碼,不應該直接移至新的系統中。

其中一個方法,他要使新的系統將所有ASP代碼移除。最有效的方法,就是
編寫合適的「正規表示式」Regular Expression,用「正規表示式」來表達及
辨識ASP代碼。

要辨識普通的ASP代碼,即以<%...%>所包裹的文字,可以用以下的「正規表示式」:
In order to recognize asp code inside a source code file, 
we can use the following Regular Expression:

<%([\S\s](?!%>))+[\S\s]%>

要辨識附加檔案(Include file),即以<!--#Include File="..."%>或
<!--#Include Virtual="..."%>所包裹的文字,可以用以下的「正規表示式」:
In order to recognize asp include file tags inside a source code file, 
we can use the following Regular Expression:

<\!\-\-\s*#([\S\s](?!\-\->))+[\S\s]\-\->

要辨識有內容的Server-side Javascript,即以<script language="JScript" 
runat="server">...</script>等所包裹的文字,可以用以下的「正規表示式」:
To identify the server-side javascript, we can use 
the following Regular Expression:

(<script runat|<script([^>](?!\brunat\b))+[\S\s]?runat)\s*=\s*"server"[^>]*>([\S\s](?!<\/script>))+[\S\s]<\/script>

如果將「正規表示式」利用JScript運行的話,我們要避免<script>的標籤
內藏有任何<script>的標籤,請參考以下的寫法:
If the regular expression is written in JScript, to avoid 
nested-javascript (i.e. javascript tag inside javascript), 
the Regular Expression should be written in a way similar 
to following example:

<script language="JScript" runat="server">
//... some code here
var serverjs=new RegExp("(<"+"script runat|<"+"script([^>](?!\\brunat\\b))+[\\S\\s]?runat)\\s*=\\s*"server"[^>]*>([\\S\\s](?!<\\/"+"script>))+[\\S\\s]<\\/"+"script>","g")
//... some code here
</script>

Read Full Post »

當你用微軟的VB或者C#寫程式的時候,你會預期他們會在相對應的Dot Net平台上正常地運作。最近,我用VB dot NetC#及Visual C++寫一樣的內容的程式,涉及純100%的Dot Net指令。在VC++ 10的環境下產生的程式,卻不留情面,要用戶安裝msvcr100.dll的庫程式,甚至我用command line來翻譯,強制/clr:pure參數,結果也是一樣。

試問有那一個Dot Net的開發者希望他的產品要附帶額外一個Runtime程式。Dot Net的本義就是不用再安裝任何一個Runtime,從網上下載就可以直接運行的平台。

Microsoft Visual Studio正式發表了一年多,而Visual C++的團隊卻無視這些根本性的問題。可以想像,C++的開發團隊,素質比較其他團隊差。不要以為越新的產品質素越高,要用C++開發100%純Dot Net程式,唯有試用較舊的Visual Studio吧!

Read Full Post »

最近有同事發現有一個Ms Access的VBA不能正常地在一部測試用的64bit 的Window 2003上運行。雖然那個是預訂在32bit 視窗上運行的。

我們追查原因的時候,發現Scripting engine 的版本太舊。是故我們到微軟的網頁,希望可以下載Window Script 5.7,才發現沒有64 bit的版本。Windows Script在視窗

之前希望安裝IIS 的監察軟件,也發現缺少了64bit 的支援。

眼看蘋果將64 bit OS正規化,而微軟則視它為「二奶」。很多更新只推出了32 bit,遲遲都未看到64 bit的蹤影。

想當年,微軟能一力擔成設計USB的創舉,現在連支援64 bit 都力有不遞。現在的微軟已是明日黃花了。

後記:經跟朋友討論,其實,微軟的32bit及64bit看來是不同的開發團隊,他們有不同的產品,所以很多時候,有些產品只有 32bit或64bit的版本。 至於Microsoft Scripting Engine沒有新的64 bit 版本是比較可惜的,用它來寫VBScript, JScript的文本程式是十分方便的。

Read Full Post »

一九八三年,家父添置了一部蘋果二型電腦。當年整套電腦包括了主機、彩色監視器及一台五又四分一寸的磁碟機。當年父親花了四千五百元,向剛在台灣讀完電腦的堂兄購入。家中的的每個人,當視它為一部電視遊戲機。

我第一次寫電腦程式,有賴當時的東方日報。那時,東方日報有一頁的副刊,叫做「歡笑樂園」,是專為學童而設的副刊,當中有「蔡志忠」的「大醉俠」漫畫,也有給學生投稿的畫廊及作文專欄。我的三姊及四姊的稿件間中也被採納,作文的稿酬為10元、圖畫的稿酬25元。而我,對當中一個教電腦的專欄特別有趣興。專欄的作者叫做「蔡敏機」,有次在專欄刊登一個「俄羅斯輪盤」的電腦程式。這是我第一個嘗試的程式,我把專欄剪下,跟著專欄的內容輸入電腦。由於專欄的篇幅有限,將多行程式連在一起。結果,我將所有程式當成一行,當然,最後不能正確地運行。

後來,當我看到另一期解除程式時,才知道自己攪錯了。跟著,我開始跟著專欄寫練習四則運算的電腦程式。我發覺,我可以一方面練習算術,一方面學習寫電腦。於是,我開始在圖書館閱讀寫程式的書。到了初中學,我會一方面上堂,一方面寫程式,老師們還以為我在勤力地寫筆記呢! 這時,每到午餐,我會省下數元,好讓我每個月買「電腦時代」。每期的「電腦時代」都有不同的程式。我喜歡對著這本電腦雜誌,演算著每一個電腦指令的結果。

到了上大學的時候,我申請了支助及貸款,並用貸款買了一部IBM XT 電腦。電腦課程教的是Pascal,由於我已習慣寫電腦程式,所以,學Pascal是十分輕鬆的。到了大二年級,我要用電腦編寫物理學有關的模擬程式,由於,我比較熟識GW Basic,我就用它交了一份自己很滿意的習作。

大學三年級,我開始自己學習C語言,結果自己儲錢賣了一套Microsoft C連帶Microsoft Assembly 6.0。後來,畢業後做了年多,又回到大學做研究。我開始寫Visual Basic及網頁。

但,這時,我仍只是個應用者,對電腦語言的認識還算很皮毛。我真正掌握一種電腦語言,就時在數年後,我離開大學,到外面教C電腦語言。那時,有很多人學電腦,我一個星期會教四到五班C語言,從教學角度,我反而更真正認識及掌握C語言。

自此以後,我常將日常的工作,考慮可否利用簡單的的程式來解決。我離開全職教電腦後,從事編程的工作。以前的訓練,使我在工作上解決了不少問題。

Read Full Post »

今天談談ASP.NET的誕生的理念問題。

經過十多年的歷史,ASP.NET已經是一個很知名的網頁電腦語言。知名度高、在書店上出現很多教學書本、在不同的學有多課程講授ASP.NET,也不代表ASP.NET是很完美的電腦語言。嚴格一點來說,ASP.NET絕對不完美。為了讓大家了解多一些,讓我從設計理念著手。

在十多年前,有很多編寫在視窗運行(「桌面程式」)的軟件專家,被要求設計一套在伺服器上運行的電腦語言。

如果能夠有一個視覺化的設計畫面就好了。於是他們就花了很多心思去設計那個視覺化畫面。

當他們利用視覺的設計畫面來產生網頁的時候,他們發現他們並不能令到網作出跟「桌面程式」一樣的反應,於是,他們就將每個反應,交回伺服器來處理。這樣就創作了所謂「Post-back」這個不尋常的詞語。

「Post-back」的意思是:網頁在按鍵後會返回同一個網頁。

這看似不太尋常但表面正常的設計,在實際運作上又產生另一個問題。就是網頁無法確保跟伺服器有相同的狀態,例如:如果網頁中途斷了線,使用者往往會按「從新載入」(Reload),有時,使用者又會按「返回上一頁」(Back)之類的網頁瀏覽器的按鈕。使用者看到的往往並不是伺服器上的版本。為了令到司服器上的版本跟使用者在瀏覽器上的版本可以保持同步,ASP.NET的設計專家又引入另一個新的理念「ViewState」,將伺服器上的狀態,儲存到傳給使用者的網頁上。舉一個簡單例子,假設伺服器中的A=5,網頁上有一個將A加上的1的按鈕。為避免使用者不斷按「從新載入」(Reload)而不斷執行將A加1的,變成加了很多1,網頁頁上儲存了A=5的數值,按加1的按鈕就只會執行5+1這個動作。

如果一個網頁有很大量的「ViewState」,例如一個網路遊戲上同一時間有很多遊戲的玩家,「ViewState」就可能需要儲存大量其他用家的資料而變得很巨大,傳送網頁,以至到伺服器的運算,就會變得很慢很慢。我曾經有三年前玩過一個用ASP.NET寫的Facebook的戰爭遊戲,由於參加的人數不斷增加,開發遊戲人不斷買貴價的伺服器,但遊戲仍然反應很慢,下載一個畫面,往往要花3分鐘以上。

現今大流量的應用程式,大多數都採用PHP,速度快及效果好。

究竟ASP.NET的問題出在那裡呢?ASP.NET的設計理念,最初無視瀏覽器的Reload、Back等運作,亦不考慮網頁在未發明XMLHTTP之前,只用作傳送整個網頁。ASP.NET在處理一個按鈕或一個輸入是,要將一整個網頁從新計算、傳送,而且為了確保能跟伺服器保持一定的狀態,但將網頁的內容加到很大,結果將問題惡化。

如前文提到的情況很類同,「桌面程式」跟「網頁程式」相去甚遠,勉強將它們變成同一個理念甚為不智。

Read Full Post »

昨天跟一位中學的師兄在電話上談論IT的技術。師兄以前是從事會計,對IT也很有興趣。由於對工作的環境不滿意,放棄了高薪的會計工作,轉了入一間知名的會計軟件公司。由於他對上市公司的合拼帳的運作很熟悉,負責設計新的會計系統。

在電話裡跟他談了很多不同的電腦技術。其中一樣比較新鮮的就是設計「流程管理」軟件,我的師兄說他的公司已經開發了一套「流程管理」Workflow的軟件,由於規模比較大,難於應用在小規模的計劃內。那套「流程管理」的軟件是從收購其他公司而得回來,未能融合在其他產品之上。他的公司曾經花了很多時間和資源去從新開發另一套「流程管理」的系統,但結果不理想,內部人士的評語是設計了另一套解讀c#的c#。這個奇怪的評語,指的就是,用一套類似c#的語言來表達整個流程,包括表達圖片及表真正的流程及其相關的邏輯。

令我想起了我公司那套專為「中介付款系統」背後的「流程管理系統」。設計者是其中的一位同事,是兩年多年的產物。主要的原理是利用邏輯而產生出SQL語言,然後將SQL執行的結果,轉換成流程。

我師兄的老闆是C#高手,而我的同事是SQL高手。他們在設計時難免會以自己最熟悉的技術出發。本來,這種思維模式是理所當然的。可是,c#或SQL太不像圖象,用他們來做圖象介面,不太合適。C#不能直接翻譯,所以用來表達「流程」的邏輯,吃力不討好,SQL處理邏輯不太靈活。這兩種電腦語言,用在「流程管理」上是「相去甚遠」。就算設計者是「神」級也要花巨大的氣力才可以勉強成事。

所以,每當我們要去解決自己熟悉的領域之外的問題時,要細心想想,自己所習慣的模式是否「相去甚遠」呢?

回到原先的問題,本人覺得,古老的「流程圖」還是最合適表達「流程」。則DOM是種很好的描述畫面的中介語言。最後,JSON是一種很好的溝通及直譯的電腦語言。所以,我們可以採用「流程圖」->「DOM」->「JSON」的方式來將「流程」轉化為「JSON」。「JSON」可以被儲存、提取及轉化為真的「流程」及其邏輯。

當然,我們亦可以考慮用XML取代JSON的角式,也可以用UML代替「流程圖」。設計理念是差不多的。

Read Full Post »

Older Posts »