2017年4月26日 星期三

加速Android Studio/Gradle建置

1.在gradle.properties新增
#守護進程,改善Gradle的啟動和執行時間
org.gradle.daemon=true
#並行編譯
org.gradle.parallel=true
#按需配置,大型多項目的構建速度更快
org.gradle.configureondemand=true
#依主機配罝調整
org.gradle.jvmargs=-Xms2048m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=512m
參考:Xms Xmx PermSize MaxPermSize 区别


2.Gradle設定Use local gradle distribution和Offline work→避免編譯前更新
















3.Compiler新增命令列參數--offline


4.SDK選21以上

5.修改studio64.exe.vmoptions設定檔(與執行檔同一目錄)
新增(或修改)以下字段
-Xms2048m
-Xmx2048m
-XX:PermSize=512m
-XX:MaxPermSize=512m
-XX:ReservedCodeCacheSize=512m


6.停用Android Studio未使用插件
1.CVS Integration
2.Git Integration
3.GitHub
4.Google Cloud Tools for Android Studio
5.Subversion Integration



2017年4月24日 星期一

SSIS設定需特別注意之處

SSISDB的[作業記錄檔]>>[保留週期]預設為365天, 在運行一段時期後,排程週期 x 執行專案數量 x 專案的元件數 所產生的log
會使該DB容量激增,
所以在初期規劃時就要注意該設定必須設在一個合理值。



記錄層次設為【效能】(只記錄錯誤事件)














定期壓縮ldf檔(因[作業記錄檔]>[定期清除記錄檔]刪除動作會產生大量log)
→可加入到[SSIS Server Maintenance Job]的最後1個步驟。











指令如下圖示:














需另外設定權限:

2017年4月21日 星期五

取得遠端DB所連接伺服器的檢視有錯誤訊息

狀況:要取得遠端DB=OA的特定資料表,但該資料表其實是以[連結的伺服器]=HRM所建立的View(如下圖)


SSIS程式會有以下問題:
1.OLE DB來源無法預覽,會顯示"找不到資料行"的錯誤訊息。















2."指定一個以上的字碼頁"的錯誤訊息。














解法:把[OLE DB 來源]改成[ADO NET 來源]元件即可。



參考:How to add a linked server to the SSIS Data Flow destination?

加速電腦啟動速度

狀況:
如果有多個耗用資源較多的大型程式(如Outlook, Skype等)
都設定在開機時啟動,往往會影響開機的啟動速度。

解法:
改以[工作排程器]延遲執行(如登入後5分鐘啟動);
但因為此種執行方式的程式基本優先順序會為"在標準以下",
為了不影響大型程式的執行效能,
所以要另外增加排程如下圖














用wmic指令將大型程式的基本優先順序提高到"標準型"。
wmic process where name="OUTLOOK.EXE" CALL setpriority "normal"

2017年4月17日 星期一

建立磁碟用量監控機制

1.用dos指令取得欲監控主機的固定式磁碟使用率(drivetype=3)
wmic logicaldisk where drivetype=3 get SystemName,Name,Size,FreeSpace > .\127.0.0.1.txt


2.[欲監控主機]的[系統管理工具]>>[工作排程器]設定每小時25及55分執行1次[取得主機固定式磁碟使用率]的dos指令並匯出文字檔。



















3.使用SSIS解析文字檔,將超標數值設為[Parameters],當使用率大於等於超標界線時即發信通知管理者。


SSIS讀入Excel只能讀到前幾列資料的解決方法

狀況:
User將數個表格放在同一個工作表中,
用SSIS讀入發現前8列有值,但之後的列內容都是null。

解法:
1.Excel檔的連線字串需增加IMEX=1→指定唯讀模式。
2.讀Excel的主機(開發區&正式區)的登錄檔需修改TypeGuessRows:8→0,
意指不以前8列推斷以下所有列的欄位型態
(因為當時前8列是屬於第1個表格,內容是數字,
但之後的列是屬於第2個表格,內容是文字,欄位型態不同導致讀取失敗),
而是強制Excel讀取每列內容判斷欄位型態。














參考:透過 OleDb 精準讀入Excel 檔的方法

2017年4月14日 星期五

Windows Form debug時拋出XmlSerializer例外

1.[Debug]>>[Exceptions]>>[Common Language Runtime Exceptions]>>[System.IO]>>[System.IO.FileNotFoundException]>>取消Thrown & User-unhandled












2.[Debug]>>[Exceptions]>>[Managed Debugging Assistants]>>[BindingFailure]>>取消Thrown




監看EasyFlow與DB間的SQL指令

開啟[SQL Server Profiler]>>[新增追蹤]
1.事件選取範圍
→選取事件RPC:Completed及SQL:BatchCompleted













2.資料行篩選
在DatabaseName新增資料庫名稱


















在TextData新增
declare @p1 int%
select%
update%
delete%
insert%








3.即可在結果尋找相關的SQL指令






Windows Form捕捉全域錯誤並處理

在Program.cs的進入點(Main方法)新增
// 宣告在Application.Run之前
#region 捕捉全域錯誤
Application.ThreadException += new ThreadExceptionEventHandler(OnThreadException);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException);
#endregion

並在OnThreadExceptionOnUnhandledException事件做處理

Coded UI Test在本機執行方式

1.建立Coded UI Test專案並已新增測試方法。
2.建立Console專案,在進入點(Main方法)撰寫執行Coded UI Test方法的dos命令。
3.設定專案執行順序
[1]要被測試的Windows Form專案>>[2]呼叫Coded UI Test方法的Console專案 即可。


SQL Agent顯示[指定的索引鍵不在字典中]的錯誤

狀況:查看之前Job的紀錄會顯示錯誤訊息如下圖。


解法:將管理工具選項重新安裝即可。


2017年4月12日 星期三

Error: 無法套用 ForEach Variable Mapping 數字 1 至變數 "User::xxxx"

狀況:此錯誤偶爾會發生,導致擷轉程式異常。
此元件所承接的結果是前1個元件(Execute SQL Task)所傳回的Result Set。


解法:
因為所傳回的Result Set含有NULL值,使用SQL指令過濾即可。





2017年4月10日 星期一

將資料庫檔案附加到另一台主機無法以原帳號登入

因為該帳號存在於[資料庫].[DB_Name].[Security].[Users]
但不存在於[資料庫].[Security].[Users]
(或兩者設定不同)

使用以下預存程式建立或同步設定
EXEC sp_change_users_login 'Auto_Fix', '<有問題的帳號>', NULL, '<密碼>';


參考:MS-SQL 資料庫還原到另一台主機無法登入

2017年4月7日 星期五

PSTools使用簡介

1.遠端安裝
1.1.
psexec \\<遠端電腦名稱> -accepteula -u <有管理權限的帳號> -p <密碼> -h cmd  "/c <指令>

1.2. 案例:不在電腦前,想要安裝.net framework 4.6.2,可以下dos指令
psexec \\192.168.3.201 -u prologium\frank_tseng -p <我的密碼> -h cmd /c \\192.168.2.12\mes\NDP462-KB3151800-x86-x64-AllOS-ENU.exe /q /norestart /log %temp%\NDP462-KB3151800-x86-x64-AllOS-ENU.htm



2.遠端啟動服務
2.1.
psservice \\<遠端電腦名稱> -u <有管理權限的帳號> -p <密碼> start <服務名稱>

2.2. 案例:不在電腦前,想要啟動遠端桌面的服務,可以下dos指令
psservice \\192.168.3.201 -u prologium\frank_tseng -p <我的密碼> start termservice

快速取得SQL連線字串

1.在桌面新增純文字文件,並改名為test.udl
2.雙擊該檔案開啟設置視窗如下

3.輸入連線資訊,按[確定]
4.右鍵用文字編輯器(notepad++等)開啟,內容即為連線字串


Visual Studio突破2GB Memory使用限制

在[Visual Studio 2013]>>[開發人員命令提示字元]
按右鍵選單以系統管理員身分執行
輸入editbin /LARGEADDRESSAWARE devenv.exe
(原有執行檔建議先備份)


參考:[Visual Studio]使用Editbin命令讓Visual Studio突破2GB Memory使用限制

欄位別名在同一筆SQL指令立即使用

使用通用資料表運算式(CTE)

WITH RESULT AS (
SELECT
5 - 1 AS COLUMN1
,4 - 1 AS COLUMN2
)
SELECT COLUMN1, COLUMN2 FROM RESULT;


參考:Tip: APPLY and Reuse of Column Aliases

同一筆SQL指令進行新增/修改/刪除(MERGE)

MERGE enginner AS Target
USING(<比對的條件語法>) AS Source
ON (Target.name = Source.name AND Target.dept = Source.dept)→目的和來源比較條件
WHEN MATCHED THEN→當目的符合來源就更新
UPDATE SET Target.position = Source.position
WHEN NOT MATCHED BY TARGET THEN→當目的無此紀錄就新增
INSERT (name, position) VALUES (Source.name, Source.position, Source.dept)
WHEN NOT MATCHED BY SOURCE THEN→當來源無此紀錄就刪除
DELETE;


<比對的條件語法>
可以指定Table
SELECT name, position from employee
或指定固定值
SELECT ‘frank_tseng’ AS name, ‘engineer’ AS position
或指定參數(程式使用)
SELECT ? AS name, ? AS position

*需MS SQL Server 2008以上;另外MERGE是ANSI SQL:2003的標準,
  每家資料庫廠商都有實作,所以不用擔心移殖的問題。

*僅針對單一紀錄合併新增/更新/刪除動作。

面試問題

## 1. 確認專業度及工作價值觀

為何想離開原公司?:

為何想投這個職位?:

- 介紹工作及個人項目用到的技術

  (做了哪些項目->應徵者當中是什麼角色->用什麼技術方案->為什麼選擇A方案而不是B方案):

- 履歷工作項目遇到的挫折(查核經歷及解決問題思路)

- 獨立作業或團隊合作?:

詢問基本技術問題:

- 學歷經歷矛盾疑義詢問:

- 有無記筆記的習慣?:

- 高危動作如何確認安全?:

- 遇到沒需求的空檔會做什麼?:

- 如果要請長假會如何安排工作?:

- 如果遇到重複發生的問題?:

- 對於自研系統被取代的看法?(任何語言任何系統只是提供服務的過渡手段)

 

## 2. 介紹工作項目環境

- 部門方向(導入或自研)

- 職位初期目標:

- 職位是新設或頂替及前任離職原因:

- 部門人員組成:

- 主管管理風格:

- on-call狀況:

- 加班狀況:

- 物理辧公環境(相鄰部門)

- 會議頻度:

- 溝通管道:

- 現有項目架構和技術:

- 項目管理:

- 開發流程(瀑布或敏捷)

- 開發環境建立(公版環境或需自行建立)

- 測試機制:

- Bug管理:

- 版控機制:

- 監控機制:

- 部署機制:

- 知識管理:

 

## 3. 總結

- 對應徵者的建議:

Visual Studio快速鍵

可在用到該方法的上一個/下一個位置快速移動方便找查。

設定在該方法的各Reference間移動的快速鍵(個人是設定Ctrl+Shift+上下箭頭,如下圖)



DOM操作注意事項

前提是要減少relayout及repaint。

1.不逐一改變node屬性,用className或是cssText一次設定。
2.先設定node屬性,最後再一次插入childNode到DOM前。
3.使用DocumentFragment。
4.把要改變的node複製出來,設定好再取代舊的node。
5.或用display:none屬性把node隱藏,設定好再顯示。
6.如果要逐一改變屬性,則可快取屬性值,亦能提升效能。


參考:【翻译】浏览器渲染Rendering那些事:repaint、reflow/relayout、restyle