Pages

2015-06-29

Genymotion安卓模擬器

官網:http://www.genymotion.com/

GENYMONTION因為是採用X86指令,所以模擬器飛快,不像SDK自帶的採用ARM指令, 但是GENYMONTION對純ARM指令是不支援的,例如DELPHI生成的APK。Xamarin是支持的,這個說明Xamarin生成的不是真正的原生ARM代碼。

以下是使用Genymotion一些細節及好文章: (以Genymotion v2.5為例)

  • 如何重開機模擬器?
    Reboot virtual device
  • [Android] Genymotion安裝Google Play的方法 ~ One Node
    http://onenode.blogspot.tw/2015/05/android-genymotiongoogle-play.html
  • 移動下載的Virtual Device Images?
    1. 預設下載位置是: C:\Users\[UserName]\AppData\Local\Genymobile\Genymotion\deployed\,先修改Genymotion下的VirtualBox日後下載位置:
    Change VM saving location
    2. 關閉運行中的Emulator, 移動原本的Image目錄至想要的位置上,並開啟VirtualBox,移除Virtual Mache再新增新位置即可。
    Change VM
    3. 重新開啟Genymotion,列表就能載入位置後的Virtual Device了,因為此列表是讀取VirtualBox上的VM List。
    Virtual Device List

2015-06-25

DbCommand.Prepare批次執行SQL

DbCommand.Prepare() 可以產生暫時性的Store Procedure,若有大量的資料需批次更新,會獲得比較好的效能。使用SQL Profiler查看,它會多了exec sp_prepexec指令,這就是產生一個暫存的SP,而後續的異動,就只是傳參數進去就好,不需要再傳完整的SQL Script. 須要注意的是DbParameter須要明確宣告型別,且資料長度得自己張羅,有被截斷不會回報錯誤。

如果 CommandType 屬性設定為 TableDirect,則 Prepare 不會執行任何動作略過。 如果 CommandType 設定為 StoredProcedure,對 Prepare 的呼叫應該會成功,但它可能不會執行任何作業。由於建立臨時性的SP也是需要成本,因此若筆數不多且SQL內容不複雜的話,就不需要使用Prepare()方式了。

cmd.CommandText = string.Format(@"
UPDATE [STR_StockSpec] SET
[SpecQty] = [SpecQty] + @BuyQty
WHERE SpecId = @SpecId
");

// 產生暫存Store Procedure,尚不會執行
cmd.Prepare();

// DbParameters
// DbCommand.Prepare method requires all parameters to have an explicitly set type.
var paramSpecId = DB.AddParameter(cmd, "@SpecId", 0, null, DbType.Int32);
var paramBuyQty = DB.AddParameter(cmd, "@BuyQty", 0, null, DbType.Int32);

foreach (var item in items)
{
paramSpecId.Value = item.SpecId;
paramBuyQty.Value = item.BuyQty;

// 執行SQL
cmd.ExecuteNonQuery();

}

2015-06-23

讓TeamViewer Portable變成開機自動執行

TeamViewer是套挺好用的遠端控制工具,尤其它能穿越防火牆、傳輸檔案,更棒是我能利用它的上線狀態監控遠端主機的運作正常與否。通常我會自官網下載Portable免安裝版本:

TeamViewer Portable

但如何讓Portable也能隨系統自動執行呢? 編輯官方下載包目錄下「TeamViewer.ini」,將nosave由1改為0即可。
 TeamViewer.ini

重新啟動程式,在選單「Extra> Options> General」,就會多出一個自動啟動的選項,勾選它並設定連線密碼。預設的Portable版壓縮ZIP包裏少了「TeamViewer_Service.exe」這個檔案,它能在完整版裏找到,得把它放入目錄才行。

Start with Windows 

它會自動建立背景服務如下圖項目,如此一來,就不用安裝TeamViewer Host版本於遠端主機內了。

image

服務項目是呼叫TeamViewer目錄下的「TeamViewer_Service.exe」,與「TeamViewer.exe」桌面互動程式不一樣,在MultiUser多用戶模式下,兩者的TeamViewer ID也不同,後者會隨著系統登入就消失了,而使用隱藏的ID即可在登出時仍能連線。

image

若想要移除服務,也使用以下的Batch Script來快速移除。
@echo off

rem ---------------------------------------------------------------
rem Remove TeamViewer Windows Service.
rem ---------------------------------------------------------------

set SvcName=TeamViewer

sc stop "%SvcName%"
sc delete "%SvcName%"

pause

2015-06-11

VS2013開啟多行的Tab顯示

VS2013開發環境裏,想要讓開啟的文件檔上方Tab作多行呈現是沒辦法的,雖然太多排Tab會顯亂,但一般2-3並排顯示有它的切換便利性。VS有Pinned Tabs釘住頁籤的功能,它們不會被卷縮入左側消失,而有依視窗Size自動多行多排的效果。但是不太可能每開一個文件就花費動作去釘住所有Tab(沒預設值能改),而且默認Pinned Tabs會和一般Tab混排在一起,造成切檔的混檔。

image 

在VS2013功能選單「/Tools/Options/Environment/Tabs and Windows」中可設定Pinned Tabs與其他Tab分離獨立顯示。

image

如此,常常參照的文件就可設成Pinned Tabs顯示在上面,而下面一般Tabs就放臨時性開啟的文件。

image

2015-06-03

LINQPad程式產生器

LINQPad是一套測試LINQ與SQL的免費工具(未開源),小巧又綠化免安裝,是測試.NET片段程式碼(Code Snippet)挺好的利器。我看重的是它的語法高亮提示及MyExtension延伸函式章的架構,可以用來寫程式產生器,例如一個資料庫的Table CRUD後端的程式碼,配合UI命名規格及欄位名稱、型別,就可以產出自己架構的程式碼。

CRUD Generator

產生用完隨拋的POCO類別也沒問題:

POCO Generator

甚至平時下載的美劇,也能用滑鼠拖拉批次命名: (此WinForm由LINQPad產生,也能隨時調整取名規則Script Code)

Drama Rename

以往用T4 TemplateCodeSmith Generator產生的功能,不是依賴性重就是要付費購買,LINQPad提供另一項不錯的選擇。