Posts
C# 6.0 - Extension Add methods in collection initializers
C# 6.0 以前,集合類別可以像下面這樣透過 Collection Initializers 初始集合成員:
... var blogs = new List< Blog> { new Blog( "Level Up 1", "http://www.dotblogs.com.tw/larrynung" ), new Blog( "Level Up 2", "http://larrynung.github.io" ) }; ... {% endcodeblock%} <br/> 但無法像 VB 10 以後的版本一樣透過擴充方法客製處理 Collection Initializers 的動作,一直到 C# 6.0 才被加入 C# 內。 <br/> 只要為集合撰寫 Add 擴充方法即可客製處理 Collection Initializers,像是如果預期要讓 List<Blog> 的初始可以直接帶入 name 與 url,就會像下面這樣撰寫: ```c# ... public static class BlogExtension { public static void Add(this List<Blog> list, string name, string url) { list.
read morePosts
C# 6.0 - Parameterless constructors in structs
在 C# 6.0 以前,Struct 會自帶 Parameterless Constructors,且不允許我們自行實作,像是下面這樣的程式碼:
... public Blog() : this( string.Empty, string.Empty) { Console.WriteLine( "Blog.Ctor()..."); } public Blog(string name, string url) { this.Name = name; this.Url = url; } ... 運行在 C# 6.0 以前,編譯器就會告知錯誤:
{% img /images/posts/ParamlessStructConstructor/1.png %}
如果想要在 Parameterless Constructors 自行加些處理,像是用建構子鏈導到別的建構子去建構,在 C# 6.0 以前都沒辦法。
在 C# 6.0 以後,就比較沒有這樣的限制了,我們可以自行撰寫自己的 Paramless Constructor,加上自己想要的處理動作。唯一要注意的是需要透過 new 語法建立的才會觸發自己撰寫的 Paramless Constructor。
... var blog = default( Blog); DumpBlog(blog); blog = new Blog() { Name = "Larry Nung", Url = "http://larrynung.
read morePosts
C# 6.0 - Index initializers
以往我們在撰寫 C#,有 Object Initializer 與 Collection Initializer 可輔助我們作初始的動作,雖然可以初始大多數的資料,但在 Index 與 Event 這邊卻無法直接初始。
如果以 Dictionary 來說,因為他還是屬於集合的一種,所以仍舊可以像下面這樣透過 Collection Initializer 在初始的同時就將內容一併放入:
... var blog1 = new Dictionary<string , string >() { { "Name", "Level Up" }, { "Url", "http://larrynung.github.io/index.html" } }; ... 但並不是所有的情況下都可以用 Collection Initializer 來做 Index 的初始,所以在 C# 6.0 導入了 Index initializers,寫起來會像下面這樣,就像透過索引子塞值一般:
... var blog = new Dictionary<string , string >() { [ "Name"] = "Level Up" , [ "Url"] = "http://larrynung.github.io/index.html" }; .
read morePosts
C# 6.0 - String interpolation
以往在做比較簡單的字串串接,我們可能會用 + 運算符號進行串接,或是用 String.Format 帶入 Pattern 與要串接的字串去處理,像是下面這樣:
... Console.WriteLine((++idx).ToString("D2") + ". " + blog.Name + " (" + blog.Url + ")"); Console.WriteLine( String.Format( "{0:D2}. {1} ({2})", ++idx, blog.Name, blog.Url)); ... 在 C# 6.0 導入了 String Interpolation,可以像下面這樣簡化寫法:
... Console.WriteLine( "\{++idx, 5 :D2 }. \{blog.Name } (\{blog.Url ?? String.Empty})" ); ... 有點像是本來 String.Format 的 Pattern 內直接用斜線與大括號包住帶入運算式,且支援 optional alignment 與 format specifiers 的設定。
這邊來看個完整的使用範例:
using System; using System.Collections.Generic; public class Program { static void Main(string[] args) { var blog = new Blog { Name = "Level Up", Url = "http://larrynung.
read morePosts
LinkedIn - Customize public profile url
LinkedIn 在剛申請完,會配給你一個預設的 Public Profile Url,這個 Public Profile Url 會長得像下面這樣。
http://linkedin.com/pub/johndoe/40/263/205 這樣的 Url 不僅不便於記憶,對於 SEO 來說也不是很好。一般來說我們會傾向將 Public Profile Url 帶上自己的 English Name,這樣在搜尋時會比較會被搜尋到。所以我們需要將 Public Profile Url 進行客製,第一步就是要先連到我們的 Public Profile (這邊因為筆者已經改過了,所以網址看起來不會像上面提的那樣)。
{% img /images/posts/CustomizeLinkedInProfileUrl/1.png %}
開啟的 Public Profile 頁面會像下面這樣。
{% img /images/posts/CustomizeLinkedInProfileUrl/2.png %}
將之向下捲動,在右側這邊會看到 Yor public profile URL 這個區塊,找到後點擊 Public Profile Url 後面的鉛筆圖示進行編輯。
{% img /images/posts/CustomizeLinkedInProfileUrl/3.png %}
將之改為我們期望的網址後按下 Save 按鈕即可。
{% img /images/posts/CustomizeLinkedInProfileUrl/4.png %}
Link Customizing Your Public Profile URL | LinkedIn Help Center
read morePosts
ASP.NET MVC - Replacing MVC JavascriptSerializer with JSON.NET JsonSerializer
使用 ASP.NET MVC 或是 Web API 做 JSON 格式的回傳,只要將 Model 帶入去建構 JsonResult 物件回傳即可,像是下面這樣:
... return new JsonResult(model); ... 這樣的寫法預設會採用 JavaSriptSerializer 去做 JSON 的序列化,有著效能不佳的問題,且序列化出來的資料有時也不是我們所期望的,像是 DateTime 物件會被序列化成下面這樣:
"/Date(1290181373164)/" Json.Net 提供了 JsonNetResult 可解決這樣的問題,可將程式直接加到專案內使用。
/// <summary> /// Simple Json Result that implements the Json.NET serialiser offering more versatile serialisation /// </summary> public class JsonNetResult : ActionResult { public JsonNetResult() { } public JsonNetResult (object responseBody) { ResponseBody = responseBody; } public JsonNetResult(object responseBody, JsonSerializerSettings settings) { Settings = settings; } /// <summary>Gets or sets the serialiser settings</summary> public JsonSerializerSettings Settings { get; set; } /// <summary>Gets or sets the encoding of the response</summary> public Encoding ContentEncoding { get; set; } /// <summary>Gets or sets the content type for the response</summary> public string ContentType { get; set; } /// <summary>Gets or sets the body of the response</summary> public object ResponseBody { get; set; } /// <summary>Gets the formatting types depending on whether we are in debug mode</summary> private Formatting Formatting { get { return Debugger.
read morePosts
MediaWiki - Change Wiki Logo
要改變 MediaWiki 的 Logo,我們可以先開啟 LocalSetting.php 檔,查閱 $wgLogo 設定的檔案位置。
{% img /images/posts/ChangeMediaWikiLogo/1.png %}
將要替換的 Logo 檔案放置設定的檔案位置即可。
{% img /images/posts/ChangeMediaWikiLogo/2.png %}
檔案放置完畢回到 Wiki 頁面即可看到設定的 Logo 生效。
{% img /images/posts/ChangeMediaWikiLogo/3.png %}
read morePosts
Windows Azure - Enable MediaWiki File Upload
使用 Azure 架設 MediaWiki,若要啟動檔案上傳的功能,我們需要在建立 MediaWiki 時,將 Enable MediaWiki File Uplad 以及 Use Windows Azure Storage As File Backend 設定開啟,並設定 Windows Azure Storage Account Name 以及 Windows Azure Storage Account Key。
{% img /images/posts/EnableAzureMediaWikiFileUplad/1.png %}
填寫 Windows Azure Storage Account Name 以及 Windows Azure Storage Account Key 的值時,可參閱儲存體的存取金鑰。
{% img /images/posts/EnableAzureMediaWikiFileUplad/2.png %}
這樣建立出來的 MediaWiki 就會啟用 MediaWiki 的 WindowsAzureStorage Extension,可以看到建立好的 LocalSetting.php 內會自動設好相關的設定。
{% img /images/posts/EnableAzureMediaWikiFileUplad/3.png %}
建立出來的 MediaWiki 也可以正常的將檔案上傳上去。
read morePosts
Windows Azure - MediaWiki in Azure
用 Azure 架設 MediaWiki,我們可以到 Azure 的入口網站,切換至網頁管理頁面。
{% img /images/posts/MediaWikiInAzure/1.png %}
按下左下角的新增按鈕。
{% img /images/posts/MediaWikiInAzure/2.png %}
然後從組件庫中建立我們要的服務。
{% img /images/posts/MediaWikiInAzure/3.png %}
也就是 MediaWiki 服務,選取後按下 Next 繼續。
{% img /images/posts/MediaWikiInAzure/4.png %}
接著要進行服務的細部設定,像是服務的網址、Wiki 的名稱、登入的帳密…等。設定完一樣按下 Next 繼續。
{% img /images/posts/MediaWikiInAzure/5.png %}
最後是設定 MySQL 資料庫。
{% img /images/posts/MediaWikiInAzure/6.png %}
到這邊設定告一段落,系統會開始進行服務的佈署。
{% img /images/posts/MediaWikiInAzure/7.png %}
佈署完成按下下方的瀏覽按鍵。
{% img /images/posts/MediaWikiInAzure/8.png %}
我們即可看到 MediaWiki 服務運行的結果,但因為是第一次使用,所以此時還未有 LocalSettings.php 設定檔,為此我們可以按下畫面中的連結產生預設的設定先。
{% img /images/posts/MediaWikiInAzure/9.png %}
按下後 MediaWiki 就可正常使用了,這邊直接用服務建立時所設定的帳密進行登入就可以了。
{% img /images/posts/MediaWikiInAzure/10.png %}
read morePosts
MediaWiki - How to check MediaWiki's version
有些時候我們會需要知道已安裝的 MediaWiki 版本,像是要安裝 MediaWiki 的套件前我們就會需要明確的知道是否能在其上正常運作。
要查閱安裝的 MediaWiki 版本,我們有三種方式。
一種是進到 Wiki 的 Version 頁面查閱(搜尋框輸入Special:Version)。
{% img /images/posts/CheckMediaWikiVersion/1.png %}
或是透過網頁原始碼查閱。
{% img /images/posts/CheckMediaWikiVersion/2.png %}
抑或是透過 DefaultSettings.php 檔的 $wgVersion 設定也可得知。
{% img /images/posts/CheckMediaWikiVersion/3.png %}
read more