2010年5月27日 星期四

要如何協助別人除錯呢

協助別人除錯我習慣先自己測試,等到找到問題時才,這樣一來可以避免浪費他人時間,再來自己也不會緊張。可是如果是老師在講台上解題,就不可能自己悶在講台上不說話解自己的問題,相反的就要將解決問題的思考步驟說出來,一方面說給自己聽,提醒自己下一步要如何進行,一方面要提醒同學在思考中需要注意的地方。說真的在辦公室睡睡念會被同事討厭,好像自己在做事情要讓其他人知道似的,特別是位置距離很近。在辦公室有問題就該提出來,一方面提問的人會讓人覺得有在思考,一方面被問的人會認為被重視,當然前提是發問的人有作過功課,畢竟希望藉由討論的方式讓提問與方問方都獲得知識。

2010年5月26日 星期三

說話有時會透露自己的內心世界

C君跟新同事分享專案用到的工具,同事不安地問道「前輩,人家以後是不是要負責目前專案底下的系統呢?」身為前輩的C君說道「不一定啦!說不定會負責…我想一下…」,此時C君不小心將自己負責的專案名稱脫口而出,心想「被發現了!」,沒想到其他同事也紛紛說出自己負責的案子。

2010年5月24日 星期一

Silverlight 版本的線上小畫家-存檔

Is it possible to save the Canvas with "children" on the server
Photoshop存檔時,可以選擇儲存成為Photoshop的格式,或是匯出成一般圖片(例如JPEG)。這個概念仍然可以用在線上小畫家,目前我是用Silverlight 3的類別存檔,在畫布上面的物件(例如矩形等)會被結合成為一張圖片,主要的程式碼如下。

WriteableBitmap bitmap = new WriteableBitmap(TracingPaper, null);

可是如果要達到類似Photoshop的功能(圖層疊疊樂),這個方法就不行了,不過方法並不難,主要的方法有二,一是存成XAML格式,不過存檔很不方便,開啟舊檔時也要重新解析,目前我還沒有找到解析的方法,另一是存在資料庫內,這是我決定採用的方法。
讀檔時首先利用雜湊演算法計算出圖片的雜湊值,並且搜尋資料庫是否存在,如果存在則傳回陣列並且動態建立繪圖物件與加上事件,存檔時將幾個必要的屬性值傳回後端儲存,並且刪除之前存在資料庫的屬性,至於屬性的資料列可以設計成(屬性A, 屬性B, 屬性C)或是(屬性名稱, 屬性值)的方式,我採取後者,因為這種方式彈性較大。

存檔資料庫設計畫面


讀檔示意畫面(紅色與藍色框框都會從資料庫中讀出來)

2010年5月22日 星期六

聯銓的Smart eVision

認識Smart eVision
最近去聽聯銓的Smart eVision,除了認識他們BI的解決方案之外,還見識到華麗的3D效果,身為工程師的我當然會想知道這個立體效果是怎麼做出來的。
後來找到Animated Perspective Transform,不過可惜沒有程式碼。

Silverlight立體效果 (遠近景深轉換)
Perspective Transform Laboratory
Silverlight 一点透視図法によるグラフィクス
透視畫法的影片教學
Perspective 3D in Silverlight 3

2010年5月21日 星期五

無法開始偵錯。未安裝Silverlight Managed偵錯封裝。


之前專案用到Silverlight 3,使用Visual Studio 2008 SP1 的 Microsoft® Silverlight™ 3 Tools,沒想到最近開舊專案編譯時竟然出「無法開始偵錯。未安裝Silverlight Managed偵錯封裝。」,後來找到Question on SIlverlight 3 debugging,發現其實是自己安裝新版的Silverlight 4,導致無法除錯,後來反安裝新版的並安裝Silverlight 3 Developer Runtime,就可以正常除錯了。

2010年5月20日 星期四

SSRS設定數字和時間格式選項


這個功能位於「文字方塊屬性」「數字」底下,與Excel的「儲存格格式」「數值」類似,設定格式之後我們切換到「自訂」。
此時會看到「自訂格式」的內容為「#,0.00;#,0.00-」,如果原本的值「-2」要呈現為「2(負數)」,此時負數「12,345.00-」就要改為「#,0.00;#,0.00(負數)」,「零的顯示方式」也可以使用這種方法自訂格式。

2010年5月14日 星期五

C#呼叫Win32 API

Calling Win32 DLLs in C# with P/Invoke
P/Invoke(平台叫用)什麼時候會用到呢?有時用到.NET沒有封裝(Encapsulation)的功能時就會用到。
1. 引用「System.Runtime.InteropServices」

using System.Runtime.InteropServices;

2. 在pinvoke.net左上方搜尋列輸入函數名稱,這裡就不用文章中的例子,使用「FindWindow」函數。
3. 搜尋到的結果有很多種,例如智慧型裝置上面也有類似的API(呼叫coredll.dll),但這不是我們需要的,我們在user32底下找到以下函數。

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

將這段宣告放在要呼叫的class裡面,或是你可以將.NET沒有提供的Win32 API自己打包成為一個類別。
4. 最後在事件或函數裡面加入這個函數。

2010年5月13日 星期四

網頁程式碼排版

Awesome code syntax highlighting made easy
這篇文章說明如何設定「程式碼排版」,以下簡單介紹設定步驟。
1. 在</head>之前加入以下程式碼,其中要編排C#需要引入shBrushCSharp.js,使用shThemeDefault.css風格排版。

<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'></script>

2. 在</body>之前加入以下程式碼。

<script language='javascript'>
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>

3. 在<pre></pre>之間加入你的程式碼,class="brush: csharp"可以替換成你需要排版的程式語言。

<pre class="brush: csharp">

</pre>

4. 如果要顯示HTML,可以使用Quick Escape轉換HTML標籤。

SyntaxHighlighter
Quick Escape