2015年3月11日 星期三

[C#] Performance: 泛型 List V.S. ArrayList V.S. DataTable

說明:數值型別使用ArrayList(型別轉換為Object)會有裝箱與拆箱的問題,參考型別也需進行型別轉換,因此使用List<T>應有較佳的執行效率,而DataTable在擷取DB資料方便使用,但效能似乎較差? 使用StopWatch來簡單驗證(皆跑1000000次)。


Case1:
使用數值型別int做比較,List > ArrayList >> DataTable。








Case2:
使用參考型別string做比較,List ≒ ArrayList >> DataTable。



2015年2月2日 星期一

[git/gerrit] Mac OS使用git將文件push上gerrit的branch

說明:git是分散式版本控制系統之一,gerrit是以git專案為基的code review系統,記錄在Mac OS下如何將code push上gerrit的branch。


做法:
1. 安裝git(http://git-scm.com/)。

2. 啟用gerrit之帳戶與建立SSH key。可參閱以下網址:
http://git-scm.com/book/zh/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key

3. 測試本地電腦跟gerrit連線ok後,開啟電腦上的終端機,輸入defaults write com.apple.finder AppleShowAllFiles TRUE並按下Enter,再輸入killall Finder然後送出,讓電腦顯示系統的隱藏檔案,方便後續操作.git裡的config檔。

4. 在終端機輸入git clone ssh://ssh_user_name@gerrit_url:29418/project_name.git。

5. 專案複製到本地電腦帳戶下資料夾後 -> 打開此專案,修改某行程式碼儲存後,可將該檔案commit -> 輸入commit message -> commit送出。

6. 回到終端機視窗,輸入cd ~/project_name/,進到該專案下 -> 輸入git status,檢視目前專案異動狀態。

7. 輸入scp -p -P 29418 ssh_user_name@gerrit_url:hooks/commit-msg .git/hooks/,可將每次commit所需的Change_Id自動加進去commit message,否則可能會出現ERROR: missing Change-Id in commit message的訊息。

8. 打開Finder,進到本機帳號下的Project,打開隱藏的.git資料夾 -> 打開裡面的.config檔,加入以下指令,增加gerrit用來review code的branch,
[remote "review"]
pushurl = ssh://ssh_user_name@gerrit_url:29418/project_name
push = refs/heads/master:refs/for/master

9. 最後在終端上輸入git push review,即可將code push上gerrit review
code的branch -> 進gerrit即可看到剛push上去的記錄。



參考資料:
https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/xcode_guide-continuous_integration/PublishYourCodetoaSourceRepository/PublishYourCodetoaSourceRepository.html
http://stackoverflow.com/questions/8845658/gerrit-error-when-change-id-in-commit-messages-are-missing
http://vimeo.com/23609339

2015年1月23日 星期五

[IOS/Swift] 在text field內左側放入圖片(put the pic inside the text field)

說明:想在text field內左側塞入一小圖,但又不想放在background占滿整個text field,該怎麼做?


做法:
在storyboard放入一text field,接著在viewDidLoad事件中,建構一UIImageView object,並給予初始位置與大小,在assign給text field的leftView的property。例:

let imageTest = UIImageView(image: UIImage(named: "xxx.png"));

imageTest.bounds = CGRect(x: 0, y:0, width: 20, height: 20);
txtTest.leftViewMode = UITextFieldViewMode.Always;
txtTest.leftView = ImageTest;


參考資料:
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextField_Class/index.html
http://stackoverflow.com/questions/13508836/add-image-to-uitextfield-in-xcode

[Oracle] 使用單行函式(function)記錄

說明1:想把查詢出來的多列資料合併成一列(combine multiple rows into one row),該如何做?


做法:使用LISTAGG函式,語法:LISTAGG(column[, 'delimiter']) WITHIN GROUP (ORDER BY column),例:
SELECT LISTAGG(ITEM, ';') WITHIN GROUP (ORDER BY No) DISPLAY
FROM table;


參考資料:
//http://stackoverflow.com/questions/1076011/how-can-multiple-rows-be-concatenated-into-one-in-oracle-without-creating-a-stor



說明2:去除查詢資料的特定字元TRIM/LTRIM/RTRIM


語法:L(R)TRIM( string, [ trim_string ] );
TRIM( [ [ LEADING | TRAILING | BOTH ] trim_character FROM ] string )
例:
--remove . on the right side of DISPLAY
SELECT RTRIM(DISPLAY, '.')DISPLAY
FROM table


參考資料:
http://www.techonthenet.com/oracle/functions/trim.php
http://give.pixnet.net/blog/post/25491792-(%E8%BD%89%E8%BC%89)-oracle%E7%9A%84%E5%AD%97%E4%B8%B2%E8%99%95%E7%90%86

2014年12月31日 星期三

[.NET] GridVIew合併儲存格

說明:想讓GridView的某欄合併儲存格(非動態等資料繫結後,再判斷資料是否相符),該怎麼做?


做法:
在GridView的PreRender(GridView載入後與render前)事件中加上:

foreach (GridViewRow gvRow in GridView1.Rows)
        {
            if (gvRow.RowIndex > 0)//DataRow
            {
                //let column index+1 merge cell and assign the rows to across
                GridView1.Rows[0].Cells[index].RowSpan = GridView1.Rows.Count;
                //hide the extra cells
                gvRow.Cells[index].Visible = false;
            }
        }



參考資料:
http://www.dotblogs.com.tw/mis2000lab/archive/2008/04/archive/2008/04/archive/2008/04/24/3452.aspx
http://pramaire.pixnet.net/blog/post/31837470-gridview%E8%B3%87%E6%96%99%E5%88%97row%E5%90%88%E4%BD%B5%E6%AC%84%E4%BD%8D

2014年11月24日 星期一

[ClosedXML] 使用語法紀錄

using ClosedXML.Excel;

var workbook = new XLWorkbook(templateFilePath);
var worksheet = workbook.Worksheets.Worksheet(1);

//set cell value
worksheet.Cell(Row, Col).Value = string;

//set value by using DataTable
for (int j = 0; j < Data.Rows.Count; j++)
{
    for (int k = 0; k < Data.Columns.Count; k++)
    {
          worksheet.Cell(j, k).Value = Data.Rows[j][k].ToString();
     }
}

//set cell value in center
worksheet.Cell(R, C).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
worksheet.Cell(R, C).Style.Alignment.Vertical = XLAlignmentVerticalValues.Center;

//set border line
worksheet.Cell(R, C).Style.Border.SetRightBorder(XLBorderStyleValues.Thin);
worksheet.Cell(R, C).Style.Border.SetTopBorder(XLBorderStyleValues.Thin);
worksheet.Cell(R, C).Style.Border.SetBottomBorder(XLBorderStyleValues.Thin);
worksheet.Cell(R, C).Style.Border.SetLeftBorder(XLBorderStyleValues.Thin);

//column fit
worksheet.Column(columnIndex).AdjustToContents();
worksheet.Column(columnIndex).Width -= 1;

//merging columns
//Merge(true) might cause files error?
worksheet.Range(R, C, R2, C2).Column(1).Merge();

//copying worksheets
worksheet.CopyTo(sheetName);
worksheet.CopyTo(workbook2, sheetName);


workbook.SaveAs(filePath);


參考資料:
http://closedxml.codeplex.com/documentation
https://closedxml.codeplex.com/wikipage?title=Copying%20Worksheets
https://closedxml.codeplex.com/wikipage?title=Merging%20Cells

2014年11月6日 星期四

[Oracle] 在小於1的小數的整數位補0

說明:使用Round函式算百分比到小數位數,可能出現小於1的小數,Oracle不會顯示整數位數的0,如.03,那該如何補0呢?

做法:
使用TO_CHAR函式來將數值轉換成特定字串,語法:TO_CHAR(numeric, text),例:
--轉換為百分比,四捨五入到小數第2位,其中fm可去除首尾的空字元
SELECT TO_CHAR(0.05, 'fm990.09')||'%' FROM DUAL;


參考資料:
http://blog.csdn.net/hj402555749/article/details/8878587