2008年8月31日 星期日
不需安裝 PDF 檢視軟體,線上觀看 PDF 檔
PDFMENOT 提供了線上觀看 PDF 的服務。可讓使用者經過 URL 或是上傳的方式直接線上觀看 PDF 內容。
除此之外,PDFMENOT 還提供了 FF 的擴充套件以及 Blogger 的 script 等工具。詳情參考這裡。
在 ASP.NET 中遇到 Access is denied 錯誤
C# 的 Regex.Replace
在 Perl 中正規表示法的取代,可以簡單的利用 $1、$2 等方式來輕鬆指代記憶的群組;比如:
$text="Hypermethylation of E-cadherin is an independent predictor of improved survival in head and neck squamous cell carcinoma. Shematic illustration of E-cadherin in adherens junction. E-cadherin homodimer on the cytoplasmic membranes of adjacent cells is shown. Moreover, overexpression of E-cadherin, which was found underexpressed in MTX-resistant cells, also sensitized the cells toward the chemotherapeutic agent"; $text=~s/([^>])(\bE-cadherin\b)([^<])/$1$2<\/span>$3/g; print $text; # 輸出: Hypermethylation of E-cadherin is an independent predictor of improved survival in head and neck squamous cell carcinoma. Shematic illustration of E-cadherin in adherens junction. E-cadherin homodimer on the cytoplasmic membranes of adjacent cells is shown. Moreover, overexpression of E-cadherin, which was found underexpressed in MTX-resistant cells, also sensitized the cells toward the chemotherapeutic agent
在 C# 中,也可以辦到:
2008年8月30日 星期六
Windows 快速鍵
F3
在 Windows 系統裡,按下 F3 就可以呼叫出「搜尋」功能,可以輸入關鍵字後搜尋電腦裡的檔案。在 IE 瀏覽器裡,按下 F3 則可以切換到自訂的搜尋引擎網站,不需要再輸入搜尋引擎的網址或點選我的最愛。
Word 便條紙功能 Ctrl+Alt鍵+M
想要在某段文字加上 note,只要 Ctrl+Alt+M,便能呼叫「註解功能」。
「Win+F」搜尋檔案
找檔案時只要「Win+F」再輸入檔名,縮短搜尋時間。
「Win+L」立即登出電腦
暫離座位時,按「Win+L」登出系統畫面,防止竄改文件。
Word 中快速改變字母大小寫,Shift+F3
只要將想要改變的字選取起來,按下 Shift+F3 就可以讓小寫變大寫、大寫變小寫。C# static constructor
class Demo{ private static int i; private static String s; static{ i=24; s="abc" } }在 C# 則可以利用 static constructor 達到同樣的效果:
class Demo{ private static int i; private static String s; static Demo(){ i=24; s="abc" } }
2008年8月28日 星期四
中華電信推出「行動導遊 Lite」基地台定位服務
中華電信新推出的「行動導遊 Lite」服務將個人導航加值服務擴大至一般手機上,就算使用的手機沒有 GPS,也能透過基地台定位而使用這項服務。
這個服務的概念,我最早是在 Common Craft 裡看到;介紹 Google Map 的新服務:
跟中華電信的另一個利用 GPS 服務的「行動導遊」僅支援特定 AGPS 手機的加值服務相比(利用手機基地台輔助衛星定位,讓不論在室內或戶外的使用者均能快速定位並搜尋附近的生活資訊),該服務讓低階手機用戶也能使用。
與行動導遊最大不同之處,在於 Lite 透過基地台以 Cell ID 方式定位所在地,即使手機沒有 GPS 定位功能,也能定位搜尋附近影院、加油站、百貨公司與餐廳等生活資訊,甚至提供路徑規劃。不過因為所有資訊包括圖資系統均仰賴行動網路傳輸,因此較適合以 3G 手機使用。
目前只要月付 50 元,就可以無限使用這項加值服務。不過我上去晃了一下,發現不支援我的手機(囧)...原來我的手機比一般低階手機更低階...
2008年8月27日 星期三
如何做好一個合格的下屬
- 自己崗位職責上的工作,必須要自己來完成,不要什麼事情都去麻煩上司出面,要明白公司設定我們這個崗位的目的就是要完成工作的。
- 不要裝「酷」,在任何時候,面對任何問題的時候都說沒有問題,而在實際工作當中老是就有問題。不懂並不是缺點,用心學習,態度端正才是領導的最愛!
- 要充分瞭解自己的領導,不要忽略領導的感受,在開展工作的時候,要多想想領導想要的結果及欣賞的做事方法。
- 不要把領導當傻瓜。做事腳踏實地,不要表面一套背裡一套;不要油頭滑面,要知道在我們的背後有無數的眼睛。
- 不要吝嗇把功勞推給領導,記住,要想讓自己獲得成功,就必須懂得如何要讓別人先成功。我們的所有成績都應該歸功於領導的正確指導。
- 不要老是犯同樣的錯誤或不該犯的錯誤,人無完人,只要是人都有可能會出錯,但是要學會總結,同樣的問題絕對不能重犯,不該出現的問題絕對不能出現。
- 要勇於承擔責任,但問題發生時,其實損失最大是公司,不可能是個人,最為一個下屬,要勇敢的面對問題,不要推卸責任,領導是最討厭那些整天推卸責任的下屬。
- 要善於幫助領導承擔責任,但問題發生時,不僅僅是下屬的單方面問題,領導就應該付領導責任!面對這個時候,做為一個聰明的下屬,就要學會如何合理的代領導 承擔責任。但是絕對不是要下屬盲目的去承擔,要看是發生了什麼問題,不痛不癢的或者是無關決定工作前程的可以承擔,如果是發生了重大問題時,就不適合了, 作為下屬最好只付自己那些責任就可以了,不能冒然出頭!
- 工作時候要仔細謹慎,不要放棄任何一個環節,不要以為事情太小,就可以不抓。但是更要注意衡量利弊,千萬不要抓了芝麻丟了西瓜。
- 做事情時,不要老是討價還價,要知道任何一個人都是討厭老是討價還價的人。
- 面對額外的工作任務時,要端正態度,適當考慮,服從第一,拒絕時需要十足的理由,千萬別找借口。
- 有事情可以商討解決,千萬不要越過自己的上級,去反映事情,做為管理者要時刻明白,越級上報現象的弊端或容易引發的事情。
- 不要老是提問題,公司用我們是讓我們來解決問題的,不是來提問題的,一般問題的發現是普遍的,而解決問題的是很少的。作為一個合格的下屬,應該懂得反映問題的方法:提問題時,一定要有自己的見解和解決方案,拿出來一同讓領導考慮。千萬不要老是給領導製造麻煩。
- 作為一個合格的下屬,一定要注意自己的言行舉止,一般的領導都比較注重這個方面,任何一個領導不可能喜歡那些吹牛皮的人,也不可能喜歡背後議論他人是非的人,更不可能喜歡作風不良,衛生不講究的下屬。
- 和領導一起時,一定要注意保持距離,不要太近乎,否則會讓領導產生反感,或者會產生那種認為你拍馬屁的想法。和領導在一起時,也要注意千萬在面對大眾時,不要去搶領導的風頭,自己要做好一個跟班。
- 當領導遇到難題時,在自己能力範圍之內的,不管是不是自己的工作,都應該主動的,而且默默無聞的幫助領導度過難關。
- 作為一個下屬,要帶好自己的團隊,要作到自己的團隊與別人比較起來佔有絕對的優勢。在面對工作時,要作到讓領導,省心,放心,開心!
- 作為一個合格的下屬,在面對自己的工作崗位,一定要有創新的理念或事物,保持工作原狀,絕對不是公司招我們的目的,在工作上一定要有不斷的突破,一定要做的比前人好,比別人好,才可能證明自己的價值。
- 作為一個合格的下屬,應該擁有穩定的心態,不要做暴風雨類的人物,也不要什麼問題與不滿都強壓心頭,要時刻調整自己的心態,沒有過不去的坎,沒有辦不好的事情!
- 作為一個管理者,也必須要有著自己的性格,如果都和別人一樣,那在這個世界也不需要有我們的存在。做事情在不能夠違反原則的情況下,要保持著自己良好的個性。
2008年8月26日 星期二
db4o 簡介與初探
db4o object database 引擎主要由一單獨的 DLL 組成。目前版本支援了 Microsoft .NET. framework 1.0/1.1 以及 2.0。
一般 .NET framework 的 DLL 檔位於安裝目錄內的 bin/net/ 目錄底下;.NET Compact Framework 則位於 bin/compact/ 下(我使用的 6.4 版本檔名為 Db4objects.Db4o.dll)。在開發時,必須將這個 DLL 加入到參考中。
Db4objects.Db4o namespace
包含了大部分開發所需要用到的功能。其中最重要的兩個類別是 Db4objects.Db4o.Db4oFactory 和 Db4objects.Db4o.IObjectContainer。
- Db4oFactory:提供的靜態方法讓我們可以開啟資料庫檔案、啟動伺服器或是連線到既存的伺服器。另外,它也允許我們再開啟資料庫前先設定好 db4o 的環境變數。
- IObjectContainer:則是我們最常會使用到,也是最重要的資料庫程式介面。它代表的就是我們的 db4o 資料庫。
- IObjectContainer 可能是處於單一使用者模式的某個資料庫,或是一個連線到某個 db4o 伺服器的客戶端連線。
- 每一個 IObjectContainer 都擁有一個 transaction。每個執行的動作都是處於 transaction 狀態;當我們開啟一個 IObjectContainer,我們就處於一個 transaction 之中;當我們下達 Commit() 或是 Rollback(),將會馬上切換到另一個 transaction。
- 只要我們有在操作 IObjectContainers,它將會持續保持開啟連接的狀態。當我們關閉一個 IObjectContainer,所有存在記憶體中的資料庫參考將會被丟棄。
第一個 db4o 程式
我們首先常是如何儲存、擷取、更新和刪除某個只包含 primitive 以及字串成員的類別 。
public class Sentence { private string rawText; /// raw 參數代表原本的文字內容 /// section 參數則為該文字所屬的 section public Sentence(string raw, string section) { rawText = raw; this.section = section; } public string RawText { get { return rawText; } set { rawText = value; length=value.Length} } private int length; public int Length { get { return length; } set { length = value; } } private string html; public string HTML { get { return html; } set { html = value; } } private string section; public string Section { get { return section; } set { section = value; } } }
開啟資料庫
要存取一個 db4o database 資料檔或是建立一個新的資料庫,我們只要呼叫 Db4oFactory.OpenFile(),並提供我們想要存取的資料庫檔案路徑當作參數及可。該方法會回傳一個 IObjectContainer 實例。
如前述,IObjectContainer 代表的就是一個資料庫,並且扮演了我們跟 db4o 將的主要溝通橋梁。藉由呼叫 Close() 方法,將關閉該 IObjectContainer 資料庫檔,並且是放所有參考到的資訊。
// accessDb4o IObjectContainer db = Db4oFactory.OpenFile(dbfilename); try { // do something with db4o } finally { db.Close(); }
儲存物件
要儲存某個物件,我們只要對我們的資料庫呼叫 Set() 方法,並且存給它某個物件當作參數及可!
// store First Sentence object Sentence s = new Sentence("Pain management: evaluating the effectiveness of an educational programme for surgical nursing staff.", "Title"); db.Set(s); Console.WriteLine("Stored {0}", s);
取回物件
db4o 提供三種不同的 query 系統:
- Query by Example (QBE)
- Native Queries (NQ)
- SODA Query API (SODA)
當使用 QBE 時,我們會提供 db4o 一個原型物件(prototypical object)作為我們想要取得的物件的一個範例,並呼叫 Get() 方法。db4o 將會依據傳給 Get() 方法的物件的內容,從資料庫內取得包含跟我們提供的物件一樣資料值欄位的所有物件(非預設值;一般物件的預設值為 null,int 為 0),並以 ObjectSet 實例回傳(代表所有符合的物件)。
下面我們示範如何從資料庫中取得所有的 Sentence 實例。方法很簡單,我們只要提供一個空的 Sentence 原型即可(所有的資料欄位值都為預設值):
Sentence sents = new Sentence(null, null); ObjectSet result = db.Get(sents); ListResult(result); // ...略 public static void ListResult(IObjectSet result) { Console.WriteLine(result.Size()); while (result.HasNext()) { Console.WriteLine(result.Next()); } }
db4o 另外提供了一個簡便的方法讓我們可以取得某類別的所有實例:
ObjectSet result = db.Get(typeof(Sentence)); ListResult(result);對於泛型物件,可以利用 query() 方法取得:
IList <Sentence> sents = db.query<Sentence>(typeof(Sentence));
下面示範如何依據 section 來查詢:
Sentence sent = new Sentence(null, "BACKGROUND"); ObjectSet result = db.Get(sent); ListResult(sent);
更新物件
更新物件跟儲存物件的動作很類似;我們也是呼叫同樣的 Set() 方法:
ObjectSet result = db.Get(new Sentence(null, "TITLE")); Sentence found = (Sentence)result.Next(); found.Section="BACKGROUND"; db.Set(found); Console.WriteLine("Modified section for" + found);
注意很重要的一點是我們第一個步驟是先去 query 物件。假若,當我們呼叫 Set() 方法去修改一個未知的(但是實際上我們想要修改的是既存的物件)的物件;也就是說我們沒有先去 queyr 物件,那麼 db4o 將會在資料庫內插入一個新的物件。db4o 並不會自動的把我們產生的物件跟資料庫內的物件進行比對;它假設我們實際上要插入一個剛剛好有同樣值的物件到資料庫內。
刪除物件
在資料庫內的物件可經由 DELETE() 方法加以移除。IObjectSet result = db.Get(new Sentence("Pain management: evaluating the effectiveness of an educational programme for surgical nursing staff.", null)); Sentence found = (Sentence)result.Next(); db.Delete(found); Console.WriteLine("Deleted {0}", found);
Object Database 相關連結
依據之前使用 object database 的經驗,查詢速度印象中並不理想,尤其當資料量非常大的時候(不知道是不是錯誤的記憶)。
最近又想要在嘗試一下。下面列出 object database 相關連結:2008年8月24日 星期日
jQuery 筆記:用 jQuery 快速選取元素
完整的文件可以參考官方網站。以下摘錄重點:
$("div").addClass("special");$ 記號是 jQuery 的物件(其實是 jQuery 函數的縮寫),使用 $("div") 就是用 jQuery 來選取元素,這個範例可以選取文件內所有的 <div> 元素。後面接著的 .addClass("special") 就是用來做一些事情,這個範例是將先前所選取到的所有元素都加上一個名為 "special" 的 class。也就是透過 $("div").addClass("special") 的語法,可以一次幫文件上有的 <div> 元素都加入 special 的 class。
這和原本使用 JavaScript 來寫程式有很大的差異,原本自己寫可能會需要用到迴圈之類的語法,而 jQuery 的函數大多具有批次處理的功能! $ 記號 $ 是使用 jQuery 過程中最重要的函數,可以用來用來找元素;使用方式只要把參數帶入即可。下面的範例,結果將會和上面的範例一模一樣:
jQuery("div").addClass("special");如前述,$ 是 jQuery 函數的縮寫。
選取元素
前面的例子使用 $("div") 來選取元素,帶入的參數 div 表示要找的元素,這是 CSS 選擇器(CSS Selector)的語法,如同 CSS 在做排版和外觀所使用的選擇器語法一樣。jQuery 所支援的 CSS Selector 包含了 CSS 1、CSS2 以及仍未正式發佈的 CSS3,透過 plugin 還可支援常用的 XPath 語法。
這是一段原始的 HTML: 以下用一連串的範例,以展示基本的語法與文件中會被選取的元素。
$("#body")
- 選取到:<div id="body">
- 解釋:選取 id 為 body 的元素
$("div#body")
- 選取到:<div id="body">
- 解釋:選取 id 為 body 的 <div>
$("div.contents p")
- 選取到:<p>...</p><p>...</p>
- 解釋:選取 class 為 contents 的 <div> 元素所包住的所有下層的 <p>
$("div > div")
- 選取到:<div class="contents">
- 解釋:選取被 <div> 包住的下一層 <div>
$("div:has(div)")
- 選取到:<div id="body">
- 解釋:選取至少有包住一個 <div> 的 <div>
2008年8月20日 星期三
Songsterr 吉他 tab 撥放器
吉他通常採用簡譜的方式來紀錄如何彈奏歌曲。但是這種方法對於樂曲節奏的呈現上有先天的不足。
Songsterr 服務藉著在每個簡譜中插入音樂檔,來呈現樂曲原有的旋律、節奏。
2008年8月14日 星期四
Windows Vista 更新後,Word 2007 無法開啟
今天中午吃飯前,放著讓 Vista 自動更新,更新完後(應該是有自動重開機),想利用 Word 2007 改 comment,沒想到卻無法使用。症狀是:只要開啟 Word 2007,整個視窗就 hold 住;無回應。
查了一下 Word 2007 解決方案中心在「在 Windows Vista - 架構電腦上安裝自動更新 Word 2007 供您可能會遇到許多問題」一文中找到了解決方案。節錄如下:
自動更新在安裝之後,必須重新啟動電腦。不過,如果在重新啟動電腦時,正在執行 Word 2007,則可能會遇到下列問題:
- 使用 Word 2007 時滑鼠無法運作
- 無法開啟一份 Word 文件
- 嘗試啟動或結束 Word 時當機
- 開啟 [ 開啟 ] 對話方塊時, Word 停止回應
- 儲存文件時,Word 停止回應
- 關閉文件時,Word 停止回應
利用 regedit,刪除 HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Word\Data 登錄子機碼即可解決!
2008年8月13日 星期三
在 blogger 中高亮度顯示程式原始碼
從 JSPWiki 移轉到 Blogger 以來,最大的困擾除了語法不能像 Wiki 那麼簡潔之外,另一個問題就是程式碼在顯示上不能像 JSPWiki 有一些 plug-in 可使用。
一個方式大概就是利用 Format My Source Code For Blogging 的服務,可以產生格式化的語法。然後貼到 Blogger 上。
但是這種方式其實只是把原始碼稍微排版一下而已(近似於原本 Wiki 的 {{{、}}} 語法)。另一種方式就是利用類似 Hightlight Code Coverter: 將排版後的程式碼轉換成 HTML 輸出 的工具輸出 HTML 後再貼上。
不過這些方式都要繞一大圈才能。這裡介紹一種或許比較好的方式(支援高亮度顯示);利用 syntaxhighlighter。
syntaxhighlighter 支援了大部分常見的程式語言,如 C++、Java、C# 等(完整列表見此列表)。
- 首先到 syntaxhighlighter 下載 StyleHighlighter 原始碼
- 將壓縮檔內的 Scripts 和 Styles 目錄解壓到可公開存取的網站目錄內
- 修改您的 Blogger 的範本,加入如下程式碼
<link type="text/css" rel="stylesheet" href="css/SyntaxHighlighter.css"></link> <script language="javascript" src="js/shCore.js"></script> <script language="javascript" src="js/shBrushCSharp.js"></script> <script language="javascript" src="js/shBrushXml.js"></script> <script language="javascript"> window.onload = function(){ dp.SyntaxHighlighter.ClipboardSwf = '/flash/clipboard.swf'; dp.SyntaxHighlighter.HighlightAll('code'); } </script>
- 最後在以下列語法修改包含原始碼的 HTML 片段:
- 利用 <pre> tag,並設定 name 屬性為
code
、class 屬性為對應的程式語言代碼(參考此表)<pre name="code" class="c-sharp"> ... some code here ... </pre>
- 利用 <textarea> tag。
<textarea name="code" class="c#" cols="60" rows="10"> ... some code here ... </textarea>
- 利用 <pre> tag,並設定 name 屬性為
<html>HTML 測試</html>collapse
- 使用 <pre> 來包含程式碼時,中若是程式碼中有 < 符號,則必須將其置換為 <,否則原始碼可能會被截斷。
- 在 class="xxx" 中可以利用「:」指定額外的控制參數。詳細控制參數列表參考此表
2008年8月12日 星期二
2008年8月9日 星期六
2008年8月8日 星期五
2008 Best of Open Source Software Awards
- Git:Version control
- 移植到 Windows 上的版本:Git on MSys
- soapUI:Web Services Testing Tools
2008年8月7日 星期四
Mloovi RSS&Blog 翻譯服務
比如下面是 TechCrunch 的繁體中文 feed
http://mloovi.com/r/00885942775b267049eee20daf09d9d0
2008年8月5日 星期二
由 Greasemonkey script 直接產生 Firefox extension
參考這個線上工具。將 script 檔
// ==UserScript==
之後的所有原始碼直接貼上,即可產生 xpi 檔。==UserScript== 區塊中請把空白欄位去除。比如
// @include http://www.example.idv/* // @exclude ^^^^^^^^^^^^^ 移除此欄