TechDays 2013隨堂筆記0925
2 |
DBA的十大惡夢 by 楊志強
- 資料庫出現I/O問題
- DBCC CHECKDB可以發現故障,但結果文字閱讀不易,INSERT INTO @T EXECUTE('DBCC CHECKDB WITH TABLEREULTS'),將SP執行結果塞入Table進一步利用(甚至發出電子郵件通知)
- 事前防範Storage故障所引發的問題
- 埋藏在事件檢視器的潛在問題
- T-SQL無法直接讀取系統事件
- Powershell Get-WmiObject –Class Win32_NTLogEvent
- Get-WmiObject –Query "SELECT * FROM Win32_NTLogEvent WHERE LogFile='Application' AND EventID=1" …
- 利用PowerShell Script將事件抓進DB進一步分析、應用
- 亡羊補牢,解析交易記錄檔
- 以下為Undocumented SP: 不保證永久有效
- SELECT * FROM fn_dblog(null, null)
- 由fn_dblog找出Transaction_ID,組成LSN可RESTORE LOG ... FROM DISK=... WITH RECOVERY, STOPBEFOREMARK='LSN:.....' 將資料庫還原到指定時間點
- 此法不可靠也不夠直覺,良心話: 花錢買3rd Party工具才是王道
- fn_dump_dblog... --> 離線Log適用
- 快速重建交易記錄檔
- 搭配核心數、HD數開多個DataFile可以增進效能,但Log檔一個就好,開多個適得其反
- Log檔毁損的緊急處置方法(Emergency Mode->Single User Mode->DBCC CHECKDB自動補Log檔)
- 空中換引擎,解救爆滿的HD
- DBCC SHOWFILESTATS
- DBCC SHRINKFILE('OrdHist2',EMPTYFILE) 縮小資料庫,將特定DataFile的資料移走,過程中DB可如常讀取寫入,速度不快但系統持續可用
- 在Filegroup加入新的DataFile,利用上述指令將資料移到新增的DataFile
- 正式資料庫被移除
- DDL Trigger,遇到砍DB指令時Rollback並丟出錯誤,防止資料表被移除
- 用RaiseError with Log,將警示寫入事件檢視器
- 偵測SQL Agent停止
- T-SQL SELECT * FROM sysprocesses檢查SQL Agent是否存在
- 設成Scheduled Task定期檢查
- 使用手機查看過去15min的CPU
- sys.dm_os_sys_info取得CPU Load,串URL將資料塞入Google Chart
- CPU飆高時自動啟動追蹤功能
- SQL Profiler可設停止時間,無法預定時間啟動,但Profiler可以將設定存成SQL Script,執行之即可啟動Trace
- fn_trace_gettable()抓出Trace內容以Table方式呈現
- 用手機KILL鎖定問題
App/IVR(語音操作) - Super SQL Server FB社團 (本場次的所有內容會放在該社團)
Visual Studio 2013 Keynote
- VS產品更新頻率加快,約每季更新一次
- VS2013 Title Bar增加笑臉/哭臉鈕,對各功能進行回饋(按讚或嚧爆?)
- Medern Web現代化網站的要件
- Responsive Design - 適應各裝置各解析度
- Web API/Open Data – 服務導向
- Social Integrated – 與FB整合
- Scalable – 自動Scale up、Scale out
- 可將設定儲存到雲端,在多台機器間同步VS設定
- ASP.NET專案改為單一專案範本,建立精靈時決定要用MVC、WebForm、SPA、WebAPI,且支援自訂選取個別為專案加入WebForms/MVC/WebAPI功能
- ASP.NET專案內含Bootstrap,Responsive Web Design Ready
- BrowserLink,一次開啟多種瀏覽器(IE、Chrome、FF...),改好ASPX存檔,按Rerfresh(CSS不用按Refresh就更新),所有瀏覽器自動更新到修改後的結果
- app.Use***Authentication,輕鬆支援Microsoft Account、Google Account、FB Account認證整合
- Azure部署程序更簡化
- *** 我是Win8.1相關功能分隔線 ***
- Win8/8.1/WP8 Unity3D 模組免費(iOS/Android要1500元)
- Win8.1商業平板,擺脫平板只是for fun的刻板印象
零售業: 店員平台,放入商品,設定折扣,刷卡結帳
醫院: 病人資訊、看診輔助 - Geofense(地理圍欄),進出某個地理空間時啟動特定App
- 支援3D列印API
- App評價不佳的原因: App Hang、閃退、反應時間太長、過度耗電
- VS2013支援WinApp效能診斷(CPU Load取樣、XAML UI回應性、耗電)
記錄一段時間的CPU、網路使用狀況,估算電力耗盡時間、JavaScript函式計時、JavaScript記憶體 - *** 我是跨平台開發(Xamarin)分隔線 ***
- Xamarin為付費商業軟體
- Android可直接拉控制項,馬上寫C#;iPhone要先在Xecode拉好框架,再到VS裡寫Code Behind,下個版本會支援直接拖拉
- iOS專案仍需要Mac機器進行編譯
- 跨平台開發的痛: 要養不同的Team、技術、元件難以共享。Xamarin可將Business Logic抽出寫成Core Library供iOS/Android介面共享。(簡便方法是用Add as Link大絕,不然用Portable Library亦可)
- 支援.NET 2.0 SOAP Web Service、WCF、RESTFul
- *** 我是Cloud部署與測試分隔線 ***
- Azure已納入Oracle DB/Linux VM、PHP... 愈來愈開放
- Azure端已有VS2013 RC桌面環境可登入測試。(MSDN訂閱可啟用Azure試用)
- 巨型壓力測試: 模擬數萬個Client,萬箭齊發情境
- 錄製測試 -> 轉成壓力測試 –> 選擇用Team Foundaton Service跑雲端壓測(需幾分鐘等待設定完成) -> 由雲端取回測試報表
- 試用版上限: 15000人次-分鐘。ex: 5000人次可以跑三分鐘
- MSDN訂戶Azure權益,Ultimate版本每月有4600元額度,免提供信用卡資訊,9/30前開通可以抽跑車
- *** 我是TFS分隔線 ***
- TFS(Server) vs TFS(Service),Server才能客製流程跟工作表單、BI分析報表,支援AD登入,但Service改版速度很快,或許不久後就會改觀
- 功能分解成使用者劇本,使用者劇本再分解成工作。Project內包含多個團隊,成員不同,有各自的Portal及Burndown
- InRelease –> GUI部署工具,設定DEV到UAT、UAT到PROD的設定,One-Click完成,還可以設定Approver(出包誰負責,在江湖打滾過就知道這個功能多重要 XD )
- *** 客戶證言: 趨勢科技Anden 分享使用TFS敏捷開發的經驗
- VS2013 9/9 RC、10/18 RTM <== 有沒有VS2012還沒用熟,新版就出來的八卦
運用Scrum進行專案規劃 – Agile Planning by Ruddy
- 每回見到Ruddy老師都會燃起"我可以再Coding十年"的信心,老師儼然已成中年程序員的精神寄託兼信仰中心
- 敏捷 - 利用短週期的反覆開發獲得頻繁回饋
- Wiki上的Scrum要素是鬼扯淡
- Planning –> 開發 Daily Standup Meeting –> Demo(交付) –> Retrospective 回顧
- 為什麼要Agile? 老闆: 每週要交付一個版本,通過測試,而且要讓客戶點頭 --> 不可能的任務
- 達成不可能任務的方法: 1) 將大問題拆成小問題(用短週期換取客戶回饋) 2) 只專注於最重要的事件心無雜念 3) 確保交付的東西可以運作 4) 一定要尋求回饋 5) 必要時可以改變流程 6) 勇於負責(有錯就立刻改) 要設期望值/控制品質/控制進度/把自己當客戶去思考產品
- 開發軟體是世界上最崇高的工作 -- 用軟體幫助世人,增進人類全體之生活來著
- 三個簡單準則: 1) 初期不可能蒐集完整需求 2) 需求一定會變化 3) 總會有任務超時超支
- "可工作的軟體"是衡量專成功的主要度量指標
- 經驗的神奇之處在於提醒你不要再犯同樣的錯誤。第N+1次Iteration要以第N次Iteration的回饋為依據
- Scrum歷史
竹內弘高/野中郁次郎 哈佛論文 豐田式管理 首次出現Scrum一詞,Ken Schwaber(在MS)&Jeff Sutherland以Scrum為主題寫了Paper,在鹽湖城會議發表敏捷宣言
Kent Beck 程式有壞味道
Martin Fowler 倡議重構(Refactoring)
Mike Cohn - User Story的發明人
Henrik Kniberg – 著作"煙硝中的Scrum",最暢銷的一本(Free電子書) - 把大案子大需求拆解細分個個擊破 -> Scrum很適合做大案子
- Timebox –> 時間箱,時間到就要有東西出來。不是時間箱的例子: 新創公司的作品,寫到好為止。
- Prodcut Backlog –> Sprint Backlog –> Sprint(1-4wks) [每天Standup Meeting,焦點集中在: 昨天做了什麼? 今天要做什麼? 有什麼困難? 勿超過15分鐘]-> Retrospective
- 浮現式設計(Emergent Design) – OOP、Design Pattern
- 完成的定義: 由團隊認定,多半由PM或QA決定
- 三種角色: Project Owner、Scrum Master、Team
- Artifacts(工作物件): Product Backlog、Sprint Backlog、Burndown Chart
- **啟動計劃**: 10問
- (1) 問尖銳的問題!! 事後才問是事後諸葛無意義,找到正確的人問對問題,會有驚人回饋
- Remind ourselves why we are here? 專案的目的? 客戶是誰? 為何要先做這個專案?
- 好客戶: 主動提供意見。一般客戶多半要先看Demo,經詢問才會出聲
- 目的: 更好更明確的抉擇、平衡矛盾共加以取捨、充分授權獨立思考才能更好
- 加班要加對時候: 開始、結束、中間點放,長期加班會造成生產力下降
- (2) Create an elvevator pitch! 30秒電梯演講! 30秒和二句話描述這個專案
目標客戶、需求機會、產品名稱、產品類別、主要優勢、競爭對手、主要區別 - (3) 設計產品包裝
一目了然、引人注目、提出好處 - (4) 列出否定清單
否定項目區分成需要清除的巨石、無須擔心的東西 - (5) 認識鄰居
設備維護部門、MS Support、DBA、Open Source的Community是否活躍… 判定可用資源及其可靠性 - (6) 展示解決方案
架構巨觀藍圖,確保溝通有效,獲取其他單位的意見 - (7) 關注那些使我們睡不著覺的問題
找出風險,在尚未萌芽時解決 - (8) 估算項目的規模
無法準確評估,但仍需要讓需求者知道何時可以拿到成果,即使只是猜測也好 - (9) 明確知道我們要捨棄什麼?
範圍、預算、時間、質量(不能妥協)、簡單好用、簡單又簡單、詳細設計 <== 決定優先權重 - (10) 對專案所需付出資源加以展示
專案需要的時間、花費、何種團隊才能勝任
EX: 7人三個半月120萬,首次Release - 小於3個月完成建置、一週驗收測試、一週培訓、交付 - 最有效的Feedback –> 匿名回饋是最真實的
- 敏捷不是互相猜測,而是馬上做決策。讓共同的目標,讓團隊自我管理,主動成長。
Visual Studio 2013 新功能及訣竅 by demo
- VS2013小冊子裡有詳細新功能介紹
- VS2013的Title Bar右上角有現在登入的使用者,可在雲端建立共用Profile,建議開發設定選C#(熱鍵為單手操作,效率高),共用Profile可使多台機器的設定保持一致(同步範圍可調: 外觀、環境別名、快速鍵、啟動、文字編輯器)
- 選項設定畫面可輸入關鍵字在茫茫選項大海中篩選出要找的項目
- TFS Explorer改為Metro化,更易操作
- Code Lens
- 在方法上顯示被幾個地方呼叫(n 參考),點下後顯示參考來源清單,且以非同步方式載入,不會卡住操作(比類似外掛更先進)
- 如果有單元測試,可顯示測試次數
- 專案如果連結到TFS,可以顯示作者及變更次數
- 支援熱鍵!
- View Definition vs Go Definition
- 傳統按F12一路追蹤穿過多層後,開發人員常會迷失所在位置
- Alt-F12 View Definition,另開浮動視窗顯示定義來源,原有視窗不動
- 熱鍵不用背,Mouse OnHover就會有提示
- 捲軸加強:
- 捲軸色塊顯示: 區別異動未簽入、中斷點、異更後未儲存...等等
- 垂直捲軸可以"文件地圖"方式顯示(展示整份文件縮圖)
- 滑鼠經過捲軸時用浮動視窗預覽該位置的程式碼
- Tips: 同一個檔案可切成上下兩塊檢視區(VS2012已有),同時參照不同段落
- 巡覽至(Ctrl + ,) 快速在程式碼中找到吻合關鍵字的程式
- Alt + 上下方向鍵,將某行程式向上或向下搬移
- 打字時預設會自動補上右括弧、右引號,若不習慣可關閉
- 通知視窗: Title Bar旗子圖示,通知有套件可更新
- BrowserLink儀表板:
能主動偵測哪些Browser開啟了專案(方法: 在網頁偷插入JS當內應)
ASPX或CSS更改時,Browser們也會自動顯示最新結果 - SQL資料比對工具: VS2012消失,只剩Schema Compare,VS2013又加回來了
工具/SQL Server描述比較(比對兩個DB Schema的差異),方便將Schema更新部署到目標DB去 - 工作清單: (檢視/工作清單)
類似內藏在VS內部的ToDo List,不需要離開IDE就可用的便利貼
//TODO //HACK(鋸箭) //UNDONE –> 自動列入工作清單的註解區
捷徑 Ctrl + E,T, Ctrl + K,H,按下後左方出現箭頭小Icon,自動加入工作清單 - 加入/移除書籤: Ctrl + B,T, Ctrl + K,K,左方出現書籤Icon
Ctrl + B,P(上個書籤) Ctrl + B,N(下個書籤)
Ctrl + B,C(清光書籤) - Ctrl + Shift + V: 循環剪胋環 (找回前幾次複製的內容)
- Ctrl + F5 Attach to Process比重新Build重跑IIS Express快,可取代F5使用
- 中斷點視窗: 一次列出所有中斷點方便管理
- 中斷點條件式、計次: 指定特定條件成立時才中斷,或執行過幾次後才中斷,取代猛按F5。
- 【插花】如果有冷氣廠商要強打恆溫舒眠功能,可以考慮用"讓你的客廳像TICC大會堂一樣舒適"當廣告詞,這溫度拿捏太到位了,好多人被周公擄走,超可怕。
- 整行複製、剪下: 不要選取任何字按Ctrl + C
- 列編輯: 按Alt加上下箭頭,可垂直整排插入及刪除
- Ctrl + Enter / Ctrl + Shift + Enter : 取代按Home+Enter
- 主字型推薦Consolas,等寬,且1l0Oo區別明顯;編輯器工具提示改為細明體,粗體比較明顯
- 套件介紹: 網站 http://vs.demo.tc
Visual Studio跨平台開發 Xamarin by Terry
- Mono Project, 可以在Linux執行C#。
- Xamarin – 為iOS SDK、Android SDK寫出一對一對應的.NET Library
在iOS透過AOT編譯成ARM Binary(iOS時無法使用Refelcdtion)、在Android透過JIT編譯成ARM - iOS的編譯只能在Mac上進行,TFS無法整合Build程序,但Android可以
- Xamarin: Objective-C跟Java可以做到的,都可用C#實現,與Apple同一天推出iOS SDK對應版本,更新很即時。iOS 7 Ready!
- LINQ、Lambda、XDocument、Parallel LINQ… .NET 4.5 await/async都支援
- VS+Xamarin可通吃500M部iOS, 600M Android, 16M Mac, 1.5B Windows
- 按F5就可Compile/Debug,與VS的開發體驗一致
- iOS事件範例
btnHello.TouchUpInside += (sender, e) = { this.lblMsg.Text = "Blah"; };
imgBoo.Image = UIImage.FromFile("blah.png"); - 資料存取
本機: XML、SQLite 遠端: Oracle、SQL、SQLite - SQL Cipher 付費元件,全資料庫加密AES256,且對效能影響不大
new Mono.Data.Sqlcipher.SqliteConnection(),其餘用起來跟.NET SqlConnection()一樣
如果不花錢,則可以自己在寫入DB前加密,取出時解密 - Demo: 呼叫Web Service
- 付費圖表元件: Bubble、Radar、Pie、Candle(K線)、Tower、Pie...
- 程式碼共享: Add as Link + #if/#endif(條件式編譯),讓Android、iOS App共享程式
- 實例示範: YouTube搜尋,顯示影片,RT + Windows Phone + iOS + Android 四種平台
- Youtube.Core.YoutubeSearcher.cs用Add as Link,供Youtube.iOS, Youtube.Android… 使用,各專案定義不同的條件化編譯宣告
- Youtube查詢API: gdata.youtube.com/feeds/api/videos?q=..
- Android專案有工具箱可以拉控件配置頁面,iOS不支援(要用Xcode拉)
- 雖然是用C#,不同SDK有不同的Method,GetCell(iOS) vs GetView(Android),開發者仍得學習不同平台的SDK,切換開發時難免打架
- 跟PhoneGap比較: PhoneGap非原生,效能輸一截,適合純UI呈現且效能不是重點的情境
- Source Code已在github
- 資源: http://aka.ms/vs-xamarin
Comments
# by demo
協助勘誤 巡覽至(Ctrl + .) 快速在程式碼中找到吻合關鍵字的程式 正確為 巡覽至(Ctrl + ,)逗點 ===== Ctrl + Shift + B: 循環剪胋環 (找回前幾次複製的內容) 正確為 Ctrl + Shift + V
# by Jeffrey
to demo, 叩謝原PO現身指正。