Posts
NuGet - Local cache source
在安裝 NuGet 套件時,NuGet 會將使用到的 Package 存放起來以備後續重覆安裝時使用。存放的套件若有需要,可開啟 Visual Studio 的 Options 對話框,切換到 Package Manager 下的 General 頁籤,進行 Package 的清除或是瀏覽。
{% img /images/posts/NuGetLocalCacheSource/1.png %}
點選 Browse... 按鈕,可以查看 NuGet 幫我們快取了哪些 NuGet 套件。
{% img /images/posts/NuGetLocalCacheSource/2.png %}
這邊我們將該目錄位置複製下來,再次回到 Options 對話框。這次切到 Package Manager 下的 Package Sources 頁籤,在這邊添加一個 Source 。Source 位置指到我們剛剛所複製的位置,也就是 NuGet 套件快取所存放的位置。
{% img /images/posts/NuGetLocalCacheSource/3.png %}
設定好後按下 OK 按鈕將 Options 對話框關閉。接著開啟 Manage NuGet Packages 對話框,左側 Source選用剛剛我們所新加的 Source ,我們可以看到所有快取的 NuGet 套件,這代表著我們可以在此使用快取的 NuGet 套件進行安裝,即使此時網路無法連至 NuGet Server。
{% img /images/posts/NuGetLocalCacheSource/4.
read morePosts
Perfmon - Identifying processes by PID instead of instance
在使用效能監視器時,當程式多開,各自有不同的 Process 時,效能監視器會在 Process 後面加上 #n 為後綴 (n 為流水號)。
{% img /images/posts/PerfmonWithPID/1.png %}
這樣在使用效能監視器,我們就很難區別哪個才是我們想要關注的 Process。
此時,我們可以開啟登錄檔,找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfProc\Performance ,然後加入一個 DWORD 值 ProcessNameFormat ,並設定其值為 2(要關閉的話將其值設為1)。
{% img /images/posts/PerfmonWithPID/2.png %}
{% img /images/posts/PerfmonWithPID/3.png %}
{% img /images/posts/PerfmonWithPID/4.png %}
重啟效能監視器,可看到本來看到的後綴會變成 Process ID,使用效能監視器時會比較好區別監看的 Process。
{% img /images/posts/PerfmonWithPID/5.png %}
Link Perfmon: Identifying processes by PID instead of instance
read morePosts
Octopress - Add Linkedin profile link with Octoflat theme
Octoflat Theme 預設就有支援 Linkedin Profile 的連結,只要在 _config.yml 設定檔中設定 linkedin_user,將 Linkedin User ID 設上去就可以了。
{% img /images/posts/OctopressOctoflatLinkedinProfile/1.png %}
呼叫命令產生靜態網頁並啟用預覽:
rake generate rake preview 我們可以看到在部落格的右上方會多出 Linkedin 的 Icon。
{% img /images/posts/OctopressOctoflatLinkedinProfile/2.png %}
點擊該 Icon,沒意外的話應該可以看到 Linkedin 的 Profile 頁面。
但是筆者看到的畫面卻是…
{% img /images/posts/OctopressOctoflatLinkedinProfile/3.png %}
因為 Octoflat 他的 Linkedin Profile 位置是設成 http://www.linkedin.com/in/[UserID],而 Linkedin Profile 的位置看起來是有很多不同的可能,像是筆者的 Profile 位置就不是 Octoflat 預期的那樣。
{% img /images/posts/OctopressOctoflatLinkedinProfile/4.png %}
因此筆者修改 source/_includes/navigation.html 檔案,為其加入 linkedin_url。
{% if site.linkedin_url %} <li><a href="{{ site.linkedin_url }}" title="Linkedin Profile"><i class="icon-linkedin-sign social-navbar"></i></a></li> {% endif %} 像是下面這樣:
read morePosts
MS-DOS - Merge files with copy command
若要在 MS-Dos 下撰寫 Script 去合併檔案,很直覺得會想到用 Type Command 將內容秀出並將之導到指定的檔案流做存放。
像是要將所有的 txt 檔進行合併並儲存到 outputFile.txt 的話,就可以像下面這樣叫用:
type *.txt >> outputFile.txt 但在 MS-DOS 下的 Copy Command 也能做到一樣的效果,只要像下面這樣叫用:
copy *.txt outputFile.txt 就可以將所有的 txt 合併儲存至outputFile.txt 內。
若是要合併的檔案不是單純的可用萬用字元濾出,或是需要精確的控制合併的順序,我們可以像下面這樣透過 + 去串接多個來源檔案:
Copy file1.txt+file2.txt+file3.txt outputFile.txt Link Copy /b 合併檔案語法 你知道 Windows 命令提示字元 的 copy 指令也可以合併檔案嗎? 複製串連命令語法為基礎的檔案
read morePosts
Octopress - Change theme
要更換 Octopress 的 Theme,我們可先找到要替換的 Theme。
這部份可參閱 Opthemes · Octopress Themes ,它有將 Octopress 可用的 Theme 做個整理,並以縮圖方式呈現, Theme 套用起來的樣子一目了然。
找到喜歡的 Theme 後可以到範例網站做進一步的預覽。
若沒有什麼問題,也以確定就是要套用該 Theme 的話,可到 GitHub 查閱進一步的安裝與設定步驟。
除了 Opthemes · Octopress Themes 外,也可以到 3rd Party Octopress Themes · imathis/octopress Wiki · GitHub 這邊看看有無喜歡的 Theme,它的 Theme 介紹的比較多,但沒提供縮圖預覽,使用上比較沒那麼直覺。
找到 Theme 後,基本上安裝方式都一樣,就是將 Theme 用 Git Clone 下來,Clone 下來後呼叫 rake install 任務進行安裝,安裝完後叫用 rake generate 產生靜態網頁。
git clone GIT_URL .themes/THEME_NAME rake install['THEME_NAME'] rake generate 安裝完後,各套件可能會要做不同的設定動作,因此建議還是要到對應的 GitHub 網站,餅以上面的操作為主。
read morePosts
Octopress - Notify search engine
sitemap.xml 是 Google 提出來的標準,以 XML 為格式,紀錄著網頁的連結與最後修改的時間。
{% img /images/posts/OctopressNotifySearchEngine/1.png %}
如果要即時通知搜尋引擎更新,而不等待搜尋引擎自行檢測,我們可以主動將 sitmap.xml 上傳給搜尋引擎。
若是想要在 Octopress 中做這動作的話,我們可以編輯 Octopress 的 Rakefile 檔案,將下面腳本加入。
desc 'Ping pingomatic' task :pingomatic do begin require 'xmlrpc/client' puts '* Pinging ping-o-matic' XMLRPC::Client.new('rpc.pingomatic.com', '/').call('weblogUpdates.extendedPing', 'Level Up' , 'http://larrynung.github.io', 'http://larrynung.github.io/atom.xml') rescue LoadError puts '! Could not ping ping-o-matic, because XMLRPC::Client could not be found.' end end desc 'Notify Google of the new sitemap' task :sitemapgoogle do begin require 'net/http' require 'uri' puts '* Pinging Google about our sitemap' Net::HTTP.
read morePosts
NuGet - Package restore
使用 NuGet 安裝套件,使用到的 Nuget 套件資訊會被記載在 packages.config 檔案內,所以這些 Nuget 套件是可以被重新安裝復原的。因此一般在上版控時,會習慣性將這些套件排除 Commit ,待從版控 Pull 下來時再行 Nuget 套件的復原。
要做 Nuget 套件的復原,以前我們會在 Visual Studio 的方案上按下滑鼠右鍵,在彈出的滑鼠右鍵快顯選單中,按下 Enable NuGet Package Restore 這個滑鼠右鍵選單選項。點選下去,會針對專案檔做些修改,並產生一個名為 .nuget 的方案目錄,裡面會有 Nuget.config、Nuget.target、以及 Nuget.exe 這幾個檔案,此時再次建置就會將遺失的 Nuget 套件復原。
{% img /images/posts/RestoreNugetPackage/1.png %}
這邊這個動作產生的 Nuget.config 內容會像下面這樣 該設定會告知一些版控系統(如 TFS)要對 Nuget 套件進行忽略的動作。
不過這是舊的設定方式,若使用新版,不用做任何動作,系統就會自動處理還原的動作。 預設在 Options 視窗這邊會將 Allow NuGet to download missing packages 以及 Automatically check for missing packages during build in Visual Studio 這兩個選項勾起,建置時會自動將遺失的 Nuget 套件復原。
{% img /images/posts/RestoreNugetPackage/2.
read morePosts
gist-it - Embed files from a github repository like a gist
筆者在寫部落格時,有時候會將範例程式碼整理放至 GitHub 上。而文章中又會針對程式做細部的拆解與解說,以往筆者會將程式碼片段複製在部落格的文章內,或是貼至 gist 然後將之內嵌。雖然都可以達到相同的結果,但這樣的作法總是會覺得有些不對勁,因為我的程式就在 GitHub 上,卻還是要將程式碼片段重複貼至部落格或是 gist 上。
也因如此順手找了一下相關的解決方案,發現了 gist-it 這個服務…
gist-it 使用上十分的簡單,只要在文章中內嵌一段 JavaScript,像是:
<script src="http://gist-it.appspot.com/github/robertkrimen/gist-it-example/blob/master/example.js"/> Script 的位置前綴為 http://gist-it.appspot.com/github/ ,也就是 gist-it 的服務位置,後面緊接著帶入要內嵌的檔案在 GitHub 上的位置。
像是下面這樣,筆者想要嵌入 larrynung/RDPDemo 這個 Repository 下的 Source/RDPDemo/Form1.cs 檔案,我們要帶到 gist-it 服務位置後的位置就是 larrynung/blob/master/Source/RDPDemo/Form1.cs 。
{% img /images/posts/GistIt/1.png %}
所以內嵌的 JavaScript 會是
<script src="http://gist-it.appspot.com/github/larrynung/blob/master/Source/RDPDemo/Form1.cs"/> 這樣放在部落格中就能將指定的檔案內容整個內嵌進去,很簡單吧?不過筆者不建議像這樣使用,因為以這個例子來說,內嵌到的會是最新的檔案,隨著 Commit 檔案的內容可能會有增減或是刪除,所以比較保險應該是由特定 Commit 的檔案去作內嵌。
像是下面這樣:
<script src="http://gist-it.appspot.com/http://github.com/larrynung/RDPDemo/blob/bdc43c40e50305f2e12f29c5ff7e8b376b73d90b/Source/RDPDemo/Form1.cs"> 此外, gist-it 服務也提供一些參數可接在 Script 位置後面供細部調整。
像是 slice 參數可設定檔案所要內嵌的部份,可帶入指定的行數或是行數區間。(使用時可一邊開啟 GitHub 確定要做內嵌的部份,但要注意到這邊指定的行數是以 0 為基底)
所以要指定內嵌 Form1.cs 的第 31 行,可以像下面這樣撰寫
read morePosts
Remote desktop with Microsoft Terminal Services control
要使用.NET來開發具備遠端桌面功能的程式,我們可以使用 Microsoft Terminal Services control 這個 Com 元件來做。
首先將 Microsoft Terminal Servics control 這個 Com 元件加入工具箱,並將之拖曳至設計頁面擺放至適當的位置。
{% img /images/posts/MicrosoftTerminalServicesControl/1.png %}
然後接著進行程式的開發動作。
設定遠端桌面的 Server 位置。
設定Domain。
設定使用者名稱與密碼。
這邊的設定都很單純,只有密碼這塊設定需要特別的處理,需要叫用 GetOcx 方法取得 IMsTscNonScriptable 物件,再對其 ClearTextPassword 欄位設定。
該做的設定做完後,呼叫 Connect 方法就可以開始進行遠端桌面的連線。
若要斷開遠端桌面連線,可呼叫 Disconnect 方法。
另外連線的狀態可透過 Connected 欄位取得,欄位值是1時代表正在連線。所以在程式撰寫的時候我們可以在連線時進行連線狀態的確認,依此狀態決定是否要先將連線斷開。
最後附上完整的程式範例。
運行起來會像下面這樣:
{% img /images/posts/MicrosoftTerminalServicesControl/2.png %}
若有需要,範例程式也可至 larrynung / RDPDemo 這邊下載。
Link Remote Desktop using C#.NET - CodeProject
read morePosts
RAML - RESTful API Modeling Language
RAML (RESTful API Modeling Language) 是ㄧ以YAML為基礎、專門用來描述 RESTful API、且人與機器都看得懂的標記語言。
{% img /images/posts/RAML/1.png %}
因為透過RAML去描述的API,機器也能夠看得懂,所以可以衍生出一些附加的功能服務,像是解析並自動產生對應的 API Console、API Client、API Server、API User Document…等。
Root Section RAML文檔最開始是Root Section,是用來做 API 基本的描述用,像是 API 的標題、API 版本、API 基底位置、相關文檔、與 schema 及其參考…等。
就像下面這樣:
#%RAML 0.8 --- title: GitHub API baseUri: http://api.github.com/{version} version: v1 一開始要描述RAML的版本,接著就是帶入 API 的標題等。以這例子來說,這邊是在描述 GitHub 的 API ,API 的基底位置是 http://api.github.com/{version} ,基底位置內寫的 {version} 會被實際的版本取代,而目前的版本是 v1 。
除了上面範例提到的設定外,還有其它可用的設定,這邊不深究,請直接參閱下表整理:
Resource Root Section設定好我們已經有 API 的基底位置了,所有的 API 都是以這基底下去延伸,我們可能為了讓 API 更為清楚,而在 API 基底位置下再加上幾層 Resource 進去,像是 GitHub API 的 API 基底位置是 https://api.
read more