Git 在 Windows 下匯出差異檔案

當使用 git 來當作版本控管的時候,如果需要匯出兩版本之間的差異檔案,這時候可以利用 info-zip 配合 git 來做檔案匯出的動作。

首先下載 Info-Zip ,並且配合 git diff 的指令

git diff --name-only 2def75e 163c9c | C:/tools/zip.exe C:/Temp/patched.zip -@

這邊代表的意思是先比對兩個 commit 之間的差異檔案,之後傳給 C:/tools/zip.exe 執行黨做打包的動作,並且匯出到 C:/Temp/patched.zip 這個位置下。要注意的是這邊單純只是利用 git diff 匯出的差異清單,再到清單的位置下去找到檔案做打包的動作,因此這邊的 git branch 需要先切換到目標的版本,這樣匯出的檔案版本才會是正確的。

另外可能會遇到一種狀況是在 git 中會有刪除檔案的狀況在這個匯出的 zip 是沒有辦法識別的,因此一樣配合 git diff 匯出差異清單識別 A(Add) M(Modified) D(Delete) 的狀況。

git diff --name-status 2def75e 163c9c > C:/Temp/patch_list.txt

將差異清單一併匯出到 C:/Temp/patch_list.txt 下。

在 GoDaddy 上競標網域名稱

相信有很多人都使用過 GoDaddy 的服務註冊網域,如果需要註冊國外網域( .com .net . org )的時候,GoDaddy 應該是大多數人的首選,Google 的首要合作夥伴也是 GoDaddy 喔。

很常遇到這種狀況,想要的域名常常都是已經被註冊掉了,有一個新想法新服務要實現的時候,每當遇到網域被註冊掉總是要重新想名字,或是有另一種狀況,網域目前沒有人使用,可是正處於競標狀態?

image

像上圖的 musics.com 目前的標價已經來到 56.555 美元了,折合台幣大約是 18 萬左右。或許大部分人會覺得這真是太貴了。但是換個角度想如果今天是對 kkbox 來說,或許標下這個網域可以為公司帶來更多的流量。其實也是可以考慮的投資。

如果想要在 GoDaddy 上面參與競標網域的話,一般會員是沒有辦法參加的,必須加入 auction member 才可以加入競標的行列,auction member 的費用是 4.99 / yr 。算是競標初期的一個小花費。

image

加入 auction member 之後就可以使用相關的功能了,查看在 GoDaddy 拍賣上面所有物件的拍賣狀況,也可以根據各項指標做排序喔,例如說 Most Active / Time Left 之類的。

在 GoDaddy 使用的拍賣方法是 第二密封拍賣(The Second Price Sealed Auction),也稱為 維克瑞拍賣(Vickrey auction)。如果有玩過暗黑三的就應該很熟悉了。

主要的概念就是你的出價並不是實際的成交價,而是代表你內心的底價,當有人同時跟你競標的時候,實際成交價才會往上抬升。這邊列出的價格都是一次成交價,如果要繼續使用 GoDaddy 的平台註冊的話,還需要付 .com 14.99 / yr 的註冊費用喔。(會根據域名種類有所不同)

image

例如說這一個前幾天的競標紀錄,biddler 3 的競標金額原本是 $22 ,但是當我投入 $27 的競標之後,系統同時又幫他投入了 $32 的競標,直到最後超越了 bidder 3 之後才發現,他的投標金額是 $35 ,當沒有第二個競爭者跟他競爭的時候,系統的成交價會是略高於第二個競標者的價格。所以我們一開始看到的 musics.com 最高者的投標價可能遠遠不止 $56.555 ,這是由於第二個競標者出到這個價格,所以顯示的金額才會是這樣喔。

image

這是我最後競標到的網域,其實我的競標金額是 $50 ,但是第二競爭者只有出到 $35 ,所以我最後成交價是 $37。所以直接投入心理可以接受的最大值,既不用被當冤大頭,也不用半夜跑起來搶最後五分鐘囉。

加入為拍賣會員之後也可以做賣出的動作,立馬就可以轉職為網域註冊蟑螂囉~~~ 不過我還沒有要賣出的物件啦,等我有賣出的心得再分享。

This is a list of the top 20 highest prices paid for domain names.

  1. VacationRentals.com $35 million in 2007 [1]
  2. Insure.com $16 million in 2009 [2]
  3. Sex.com for $14 million in October 2010[2][3]
  4. Fund.com 2008 £9.99 million[2]
  5. Porn.com 2007 $9.5 million[2]
  6. Fb.com by Facebook for $8.5 million in November 2010[4]
  7. Business.com for $7.5 million in December 1999[2]
  8. Diamond.com 2006 $7.5 million[2]
  9. Beer.com 2004 $7 million[2]
  10. Israel.com 2008 $5.88 million[2]
  11. Casino.com 2003 $5.5 million[2]
  12. Slots.com 2010 for $5.5 million [5]
  13. Toys.com: Toys ‘R’ Us by auction for $5.1 million in 2009[2][6]
  14. Asseenontv.com 2000 for $5.1 million [7]
  15. iCloud.com by Apple for $4.5 million in April 2011[8]
  16. GiftCard.com by CardLab for $4 million in October 2012[9]
  17. Yp.com by YellowPages.com for $3.8 million in November 2008[10]
  18. AltaVista.com for $3.3 million in August 1998
  19. Candy.com for $3.0 million in June 2009[11]
  20. Loans.com by Bank of America for $3.0 million in February 2000[12]
  21. Investing.com by Fusion Media Limited for $2.45 million in December 2012[13]

順便列出 wiki 上面有史以來最高價的前十名賣出網域,前五名兩個是色情,兩個是金融保險。是不是暗示著這兩個行業在網路上最好賺呢?

NHunspell – C#/.NET free Spell Checker

NHunspell 其實所指的就是 Hunspell 的 .NET 版本,而 Hunspell 則是 MySpell 的延伸專案,主要原理是根據 OpenOffice 建立的字典檔來判斷拼寫是否正確。

Requirement

Open Office Dictionaries

Hunspell

專案資源

雖然說 NHunspell 在 Nuget 上面就可以找到最新版本的 Resource 下載,但是缺少了字典檔以及 Hunspell 的 dll 可是不能執行的。預設 Hunspell 的 dll 以及字典檔需要在輸出目錄之下。

Sample Code

using (Hunspell hunspell = new Hunspell("en_us.aff", "en_us.dic"))
{
foreach (string word in words)
{

bool correct = hunspell.Spell(word);

// If the word is spelled incorrectly, add it to the list of words to be
// returned along with suggestions

List<string> suggestions = new List<string>();
if (!correct)
{
suggestions = hunspell.Suggest(word);
suggestions.Sort();
}
}
}

在使用 hunspell 物件的時候同時載入兩個字典檔 .aff & .dic,而在 Spell Check 的部分主要分為幾個方法

  1. Spell : 檢查拼寫是否正確
  2. Suggest : 取得建議的字詞

Reference

NHunspell: C#/.NET free Spell Checker
NHunspell Component for Visual Studio – CodeProject
Using NHunSpell in ASP.NET with JSON Web Service and jQuery
NHunspellHunspell for the .NET platform

發布專案至 Cloud Service

image

webRole

加入 Azure 雲端服務專案

在 MVC 專案上右鍵 > 加入 Azure 雲端服務專案。

發佈到 Windows Azure

MVC 專案上面右鍵 > 發佈到 Windows Azure。

選擇登入以下載認證 > 再匯入下載的認證。

image

就可以利用 Visual Studio 發布專案至 Windows Azure Cloud Service 了。

image

Reference

http://msdn.microsoft.com/en-us/magazine/jj618299.aspx

http://www.windowsazure.com/en-us/manage/services/cloud-services/how-to-create-and-deploy-a-cloud-service/

http://msdn.microsoft.com/en-us/library/windowsazure/ff683672.aspx

http://msdn.microsoft.com/en-us/library/windowsazure/hh403979.aspx

SQL Database Migration Wizard 發布本地資料庫至 Window Azure SQL

SQL Database Migration Wizard

先到 http://sqlazuremw.codeplex.com/ 下載 SQL Database Migration Wizard 這個工具,它包含了兩個主要的功能

  1. 將資料結構匯出成 Azure SQL 版本相容的 T-SQL 語法,可以直接在 SSMS 執行。
  2. 將資料利用 BCP 匯出成檔案,同樣也可以用 BCP 匯入。

*BCP 的介紹

解壓縮之後直接執行

image

輸入想要匯出的資料庫連線資訊

image

image

如果要一併匯出 BCP 檔案的話要選擇包含資料。

image

最後就匯出完成了。

image

SSMS 建立 Table Schema

接下來用匯出的 SQL 建立 Azure SQL 的資料庫結構

image

直接用 Management 連線到 Azure SQL 並且將 SQL 指令貼上執行就可以了。

BCP 匯入資料

如果當初有選擇匯出資料的檔案,則在 T-SQL 最下面會看到類似 command 的註解。

image

這邊的 Command 並不是在 SSMS 這邊執行的。

我的做法是直接複製 BCP 輸出彙總。

image

修改掉幾個部分

out 關鍵字改為 in (out 為匯出 in 為匯入)

-S 之後的 server 名稱改為 Azure SQL Server 名稱

-U 之後的 username 改為 Azure SQL Server username

-P 之後的 password 改為 Azure SQL Server password

直接貼到本機 cmd.exe 執行

image

執行完之後資料就完整匯入了。

Reference

http://sqlazuremw.codeplex.com/

http://msdn.microsoft.com/en-us/library/windowsazure/jj156153.aspx

Windows Azure SQL Database

建立 Windows Azure SQL Database

一樣來到 Create New 的地方選擇 SQL Database

輸入資料庫名稱,登入帳號,密碼,確認密碼就OK了

image

連線到資料庫

進入 SQL Database 管理介面這邊就可以直接顯示需要的 connection string。

image

image

*目前的步驟還不能夠直接連線,會得到一個拒絕連線的結果,因為預設是會阻擋外部 IP 的。

開啟防火牆

進入 Design Your Database 的時候會得到一個警告,提示說目前 IP 是在防火牆外,是否要允許這個 IP 連線。

image

image

直接選是的話就可以用管理工具連線了。

image

也有 Silverlight 的線上管理工具可以使用。

image

Reference

http://www.windowsazure.com/en-us/develop/net/how-to-guides/sql-database/#PreReq2

Windows Azure 用程式存取 BLOB Storage

加入 Windows Azure 雲端服務專案

在專案右鍵 > 加入 Windows Azure 雲端服務專案

幫現有的 ASP.NET MVC 4 加入 Window Azure 專案

image_thumb[14]

設定 Storage 連線

image

image

這邊的設定是本機 debug 的時候他會建立一個虛擬的 Storage 可以在開發的時候使用。

如果要使用本機的 Storage 的話使用

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));

或是使用

CloudStorageAccount storageAccount = CloudStorageAccount
.Parse(ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString);

直接讀取 Config 設定

image

接下來在原本專案的 config 加入

  <connectionStrings>
<add name="StorageConnectionString"
connectionString="DefaultEndpointsProtocol=https;AccountName=[AccountName];AccountKey=[AccountKey]" />
</connectionStrings>

上傳 BLOB

如果 Container 設定是 public 只要上傳之後就可以直接從 Url 讀取了

        [AllowAnonymous]
public virtual ActionResult CreateImageUploadFile(HttpPostedFileBase imagePathFileUpload)
{
try
{
//檢查允許的附檔名
string[] allowExtensions = new string[] { "jpg", "jpeg", "gif", "png" };
WebImage picture = WebImage.GetImageFromRequest();
if (false == allowExtensions.Contains(picture.ImageFormat.ToLower()))
{
throw new ArgumentException("不支援上傳" + picture.FileName + "檔案格式不合");
}

string realFileName = Path.GetFileName(imagePathFileUpload.FileName);
//產生一組名稱
string uid = Regex.Replace(Guid.NewGuid().ToString(), "-", "").ToLower();
CloudStorageAccount storageAccount = CloudStorageAccount
.Parse(ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("uploadsimages");
//如果 container 不存在就建立
container.CreateIfNotExist();
CloudBlockBlob blockBlob = container.GetBlockBlobReference(uid + ".png");
//設定 contentType 並上傳
blockBlob.Properties.ContentType = "image/png";
blockBlob.UploadByteArray(picture.GetBytes());

return Json(new { msg = "上傳檔案成功", filename = blockBlob.Name, realFileName = realFileName }, "text/html");
}
catch (Exception ex)
{
return Json(new { msg = "上傳檔案失敗", error = ex.Message }, "text/html");
}
}

 

下載 BLOB

在某些時候或許不希望公開 container 而希望能夠透過一些驗證再讀取

/// <summary>
/// 顯示已經上傳的圖片
/// </summary>
/// <returns></returns>
[AllowAnonymous]
public ActionResult ShowImageUploadFile(string filename, int? width, int? height)
{
//可以在這邊判斷讀取權限
//利用連線字串取得連線
CloudStorageAccount storageAccount = CloudStorageAccount
.Parse(ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
//取得 Container
CloudBlobContainer container = blobClient.GetContainerReference("uploadsimages");
//取得 BLOB
CloudBlockBlob blockBlob = container.GetBlockBlobReference(filename);
using (var fileStream = new MemoryStream())
{
blockBlob.DownloadToStream(fileStream);
WebImage image = new WebImage(fileStream);
return File(image.GetBytes(), blockBlob.Properties.ContentType);
}

}

Reference

http://www.windowsazure.com/en-us/develop/net/how-to-guides/blob-storage/#header-4

http://www.windowsazure.com/en-us/develop/net/how-to-guides/blob-storage/#header-5

http://www.windowsazure.com/en-us/develop/net/how-to-guides/blob-storage/#header-6

http://www.windowsazure.com/en-us/develop/net/how-to-guides/blob-storage/#header-7

Windows Azure 使用 BLOB Storage 儲存靜態檔案

關於 BLOB Storage

BLOB 是 binary large object,也就是把物件用 binary 存下來。在 Windows Azure 網站的空間只允許 1GB 而已,如果有大量的圖檔或多媒體檔案的話很快就爆炸了,解決的方案就是 BLOB Storage 。

blob1

建立 Windows Azure Storage

一樣到 Portal 中 Create New 的部分,把 Storage 服務建立起來。

image

geo-replication 是否開啟在定價上是會有差別的

image

手動建立 Container

從 Portal 進入剛剛建立好的 BLOB Storage > CONTAINERS

但是在 Portal 介面的部分只有包含對 Containers 的操作,並不支援 BLOB 操作

image

利用工具直接操作 BLOB

我在這邊使用到的工具是 Azure Storage Explorer,可以對 BLOB 直接操作。

一開始進入的時候會要求輸入 STORAGE ACCOUNT NAME & ACCESS KEY

這都可以在 Portal > Manage Keys 找到

image

Azure Storage Explorer

用工具上傳檔案之後要記得確認 Content-Type 是想要的,如果 png 圖檔是  image/png,就可以直接在瀏覽器開啟圖片了。

*要用瀏覽器直接瀏覽 Container Access 須設定為 public Container

*瀏覽路徑為 http(是否有限定 https )://(Storage).blob.core.windows.net/(Container)/(BLOB) (ex: http://maricoard.blob.core.windows.net/images/test.png)

image

image

Reference

http://www.windowsazure.com/en-us/develop/net/how-to-guides/blob-storage/

http://www.dotblogs.com.tw/regionbbs/archive/2010/03/01/vs2010.and.azure.platform.understanding.blob.storage.service.aspx

http://ithelp.ithome.com.tw/question/10077453

http://gauravmantri.com/2012/05/13/comparing-windows-azure-blob-storage-and-amazon-simple-storage-service-s3summary/

http://www.codeproject.com/Articles/490178/How-to-Use-Azure-Blob-Storage-with-Azure-Web-Sites

http://msdn.microsoft.com/en-us/library/windowsazure/ee691964.aspx

Tool

http://azurestorageexplorer.codeplex.com/

Windows Azure 發佈第一個 ASP.NET MVC 4 專案

Requirement

必須要先安裝 VS 2012 的 Windows Azure SDK

Windows Azure SDK for Visual Studio 2012

進入 Create New

在 Windows Azure Portal 叫出 Create New 選單

直接選擇 Quick Create 設定之後都可以調整

image

Download publish profile

建立完之後在清單上面點擊 Web Site 就可以進入 Dashboard 的部分,右下功能清單就會有 Download publish profile ,方便從 Visual Studio 匯入發佈設定。

image

Import Publish Settings

先假設已經建立好了 ASP.NET MVC 4 專案,從專案 > 發佈進入發佈設定畫面,這時候直接選擇匯入找到剛剛下載的檔案。

image

發佈 ASP.NET MVC 4 專案

匯入完之後可以看到設定檔都已經設定完成了,直接按下發佈。

image

image

Reference

http://www.windowsazure.com/en-us/develop/net/tutorials/get-started/#deploytowindowsazure

Windows Azure 第一次進入 Portal

第一次進入 Portal

Windows Azure 目前也是 Metro 風格的介面了,簡潔的介面確實還蠻討喜的,唯一的問題的會找不到功能,為了怕有這種事情發生 Microsoft 也是有一段小小的教學。

image

Main Menu

右上點選帳號之後會出現右方選單,包含帳號資料以及語言選擇,目前看起來是還不包含中文。

image

Create New

建立新物件則由左下角的 Create New 進入

image

Commands

下方選單也有基本的指令,如果有使用 Windows 8 的話應該是很習慣這種介面。

image

Notifications

一些通知會出現在右下角的位置

image

完成教學

這些步驟都跑完的話才算正式進入 Portal,終於看到 Portal 的畫面了。

image