微軟年度盛會TechDays 2012又來了! 身為靠微軟技術討生活的中年大叔,跟著進香團帶筆電過個香爐參與課程認真做筆記,也是佷合情合理的。所以,TechDays 2012隨堂筆記來囉~~

【Keynote】

  1. 看到尚未上市的Intel Ultrabook雛型機展示,Keyboard + Mouse + 觸控螢幕操作三合一。開機速度快、圖檔觸控式解鎖(取代開機密碼)、整合重要資訊的開始畫面(常用功能以動態磚方式集中在開始畫面: 股票、新聞、Facebook)、個人化設定儲存在雲端,在不同裝置也享有同樣個人設定、Office支援手指Zoom In/Out搭配鍵盤輸入
  2. ARM平板(WinRT)展示: Bing地圖(中文圖資)、IE10(無邊框模式Chromeless,力求內容空間最大化)、Charm工具列的分享功能可將網頁轉成Email(類似FB貼Link時的操作)
  3. acer All-In-One電腦: Win8要求多點觸控最少要支援五點(現場展示機為10點觸控)、相片App: 整合SkyDrive, FB雲端空間、可用相片App轉換成拼圖遊戲
  4. 未來一年內 Win8相容裝置將可達6億9千萬台(把PC也算進去的話),將成為全世界最大的軟體市集(相較於Android、iOS)
  5. App展示: 譯點通、KKBOX(雙指縮放進入音樂分類或回上層)、關鍵字搜尋可涵蓋App的內容
  6. 企業觀點的App應用類型:
    * 消費型: Game、FB
    * B2C: PCHome、中華電信
    * 商業套裝軟體: MS Dynamic、SAP... (平板應用, 以高層主管觀點操作)
    * 內部專案: 允許企業內部自建私有App市集
  7. Windows To Go: 將作業系統安裝在USB行動碟上(BitLocker全硬碟加密)
  8. Windows App開發方式: .NET, C++, HTML5+JavaScript三種擇一
  9. Windows 8正式上市日期: 10/26
  10. The new Office的四大特色: 跨裝置可用、儲存在雲端、社群分享、管理(DLP原則範本,配合個資法)
  11. OneNote MX(針對平板觸控手寫最佳化) 支援照相功能
  12. Office On Demand: Browser連Office 360,以Streaming方式下載程式後在本機執行
  13. PowerPoint新增酷炫特效: 拉窗簾、摺成紙鶴飛走
  14. Office支援HTML5 + JS開發相關應用
  15. SkyDrive Pro: 企業版的DropBox,多裝置間檔案同步
  16. 終於!! 新版Office可以Side-By-Side與舊版並存
  17. 雲端演變: 1993 Client-Server -> 2012 Devices-Services(裝置愈來愈多樣化)
  18. Wndows 2012已於9/4正式上市: Hyper-V 3.0單一Host可承載的VM規模大幅提升,ODX(Offloaded Data Transfer,同一Server網路分享間Copy不透過網路,直接在Server傳輸,快100倍)、Live Migration(把VM轉到另一台機器上執行)
  19. MVMC -> VMWare轉至Hyper-V的工具
  20. Windows Azure: 現有8個資料中心,24個CDN節點
  21. 本屆倫敦奧運透過Azure愛爾蘭資料中心做轉播(含大量轉檔作業),未建置任何機房,算是通過一次大規模壓力測試
  22. 今年6月起Azure提供VM IaaS服務,允許使用者上傳Hyper-V VM Image到雲端建立虛擬機器。CloudXplorer(Open Source工具)可以把VM下載回來,沒有被廠商綁死的問題。
  23. SQL Server 2012: Excel 2013結合地理資訊、本地SQL混合SQL Azure組成Mirror,由本地Failover到雲端
  24. Big Data: 支援Apache Hadoop,非結構式鉅量資料
  25. 應用程式生命周期: System Operation Manager示範,OP檢視網站正式台上出現錯誤事件 -> 將錯誤訊息派工給開發人員 -> Visual Studio裡可直接檢視訊息細節,甚至可連結到錯誤發生所在的程式碼位置

【SQL 2012 T-SQL】

  1. Sequence
    • 在多個Table間保持Unique。傳統做法: GUID、複合Key、Global Table管理。2012新增Sequence (向Oracle看齊,符合ANSI SQL標準)
    • 可要求循環(CYCLE,跳到最大值後重頭開始算)、設Cache可以減少硬碟IO(但異常關機可能重號)
    • DEMO失敗囉! 有Cache比無Cache的Sequence還慢了幾ms(八成是受現場某種神祕力量影響 XD)
    • WHERE、TOP、GROUP BY... 等不可使用Sequence(NEXT VALUE)
    • SSMS TIPS: "GO 10"表示執行10次, 選項可設定捨棄執行結果(測效能時避免結果傳送的消耗
    • GUID重複的機率: 小於慧星撞地球的機率
    • GUID缺點: 偏長(16Bytes)、產生慢(相較於Sequence或Identity)、不連號(但就算一般Key要保證絕對連號也很難,談規格時能免則免)
    • 例外處理:
      • 新Keyword: THROW: 跟C# throw不加參數一樣,可以在Catch錯誤處理後,把原來的系統錯誤往上層抛
      • RAISERROR Level< 20,傳回錯誤, 但不會放棄Batch,後續指令可繼續執行。RAISERROR 20 WITH LOG(要加WITH LOG,呼叫時要有管理者權限,會寫入系統事件,會中止連線)
      • THROW一律中斷批次
      • FormatMessage("…%s …", variable)
      • xp_logevent 偷偷寫入事件,不引發任何錯誤
      • 比較表: RAISEERROR, THROW, xp_logevent, 自訂記錄資料表
    • 計算&彙總:
      • 跨筆比較、遞移平均: 用CURSOR比Self-Join / Sub Query好!! <== 少數用CURSOR較好的情境
      • 2012新增Windowing函數: 比Cursor跟Sub-Query都有效率
        PARTITION BY ... ORDER BY ... ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
      • 新函數: CUME_DIST、LAG(上一筆)、LEAD(下一筆)、FIRST_VALUE、LAST_VALUE...
      • 30筆 vs 10萬測試: 不同方法30筆時差不多,但筆數增加所需時間會呈級數成長,開發時無法察覺,上線才爆炸的地雷。實測 Cursor - 3秒  Sub Query - 18秒  Self-Join - 跑不完  Window函數 - < 1秒(相當於用C語言跑Cursor)
    • 大量新函數: TRY_PARSE, TRY_CONVERT, TRY_CAST, FORMAT, IIF, CHOOSE(Oracle DECODE), CONCAT
      日期: EOMonth, DateFormParts…
    • OFFSET / FETCH: 支援分頁取回
      ORDER BY ... OFFSET <expr> ROWS FETCH NEXT <expr> ROWS ONLY
      注意: 跟傳統row_number()法相比沒變快,因為瓶頸在排序
    • EXECUTE ... WITH RESULT SET可將傳回結果的欄位重新命名及轉換型別
    • 支援Unicode延伸字集Surrogate

    【IE10相容性】

    1. Windows 8試圖在Smart Phone, Pad, NB, PC上提供統一的操作模式
      * Modern Style(以前的Metro Style已改名) vs Destktop Mode(傳統操作模式)
    2. 用Modern IE10 vs Desktop IE10術語區別IE10的兩種操作模式: History、我的最愛是共享的
    3. Modern IE10
      * 回上頁回下頁,滑鼠移至左右兩邊出現箭頭
      * 移至下方開啟工作列(存取我的最愛)
      * 連結預覽: Charm 分享 -> 郵件 自動帶入Thumbnail & 摘要(跟Facebook一樣)
         網頁可用<meta name="title" …>指定標題、縮圖、摘要資訊
      * 關聯到App: msApplication-ID / 從下方工具列的工具圖示下載或開啟 (Desktop IE無此功能)
      * 釘選成動態磚,另可提供動態數字訊息
         網頁透過meta指定Polling-uri, Frequency(分鐘為單位)
      * 觸控: 縮放、多點觸控
    4. Charm Bar: 中文翻成 常用工具列,Win8右側垂直那一條
    5. Desktop IE10
      * Tab: 關掉某個Tab,釋放出的空間會留給仍存在的Tab均分
      * 可記住上回瀏覽階段(留意隱私議題: ex: 電腦借人用)
      * 可啟用"受保護模式",信任區域的網站,結束後清空History及暫存快取
    6. Modern IE10不再支援ActiveX(部分網站支援Flash子集)
    7. 工具 / 管理附加元件 / 追蹤保護功能 (不提供GPS定位)
      Desktop IE預設停用 / Modern ID預設啟用
    8. 支援CSS 3, HTML5 (AppCache, 非同步指令碼執行, 通道訊息, 拖拉API, 檔案API, History, 沙箱, 拼字檢查, Worker...), IndexDB ...
    9. 相容性問題: (10/26開始要面對問題)
      • IE10 user-agent變了
      • Conditional Comment: <!-- [if IE 8]>
        對特殊版本IE套用特定設定的Hacking技巧,依HTML5標準就只會是註解。這個Change應會導致大爆炸,來不及改就開相容模式 吧!
    10. X-UA-Compatible
      • IE10標準模式:
        一旦宣告<!DOCTYPE html>, 不支援X-UA-Compatible meta <== 這個會爆炸
      • IE10 Quirks模式:
        網頁未宣告<!DOCTYPE html>,此時X-UA-Compatible設定有效
    11. Desktop IE10 工具/ActiveX篩選 -> 模擬Modern IE10 無外掛的環境
    12. 無外掛Hint:
      HTML5 video, audio取代Flash, QuickTIme, Silverlight
      HTML5 canvas, SVG, CSS3取代Flash, QuickTime, Silverlight, Java Applets
    13. 強制切換到Desktop IE10: X-UA-Compatible: requiresActiveX
      (下方會出現詢是否要切換的對話條)
    14. IE10相容式檢視清單: (向微軟註冊申請iepo@microsoft.com, 請閱讀MSDN注意事項)
      <domain docMode="EmulateIE10">darkthread.net</domain>
    15. 偵測是否支援觸控: if (window.navigator.msPointerEnabled) …
    16. 偵測是否支援多點觸控 if (window.navigator.msMaxTouchPoints) 結果可能為0, 1或n
    17. 偵測為Modern or Desktop IE?
      1) window.innerWidth == screen.width  2) new ActiveXObject("")是否失敗
    18. CompatInspector: 把該.js Include進來,網頁上會出現紅、黃、藍燈,,出現不相容處的統計,甚至可用Debug跳到問題所在的程式位置

    【.NET程式偵錯及效能調校】

    1. VS2012的新偵錯功能:
      • 多執行緒: 除了[執行緒]視窗、新增[GPU執行緒]視窗
      • 新增[平行監看式]
      • DOM總管/JavaScript主控台: 進入中斷才能用,儼然就是IE Dev Tools翻版,目前JS Console不支援Intellisense
      • Win8 App Simulator: 可用滑鼠摸擬觸控
    2. IntelliTrace
      • VS Ultimate 2012才提供(最貴的版本才有)
        原名HistoricalDebugger, 記錄發生錯誤的完整場景,類似飛機的黑盒子
        * 記錄Application執行的事件及歷史記錄(預設只有事件,設定後可多記下方法)
        * 單元測試失敗的狀態
        * DailyBuild失敗狀態
        * 重現TestManager錯誤
        * 追蹤執行環境的錯誤(這個很猛)
      • 在不改程式前題下可記錄: 例外、檔案/Registry存取、使用者操作(Mouse/Kbd行為)...
      • IntelliTrace操作: 巡覽邊(上一事件/下一事件)、事件/方法歷史記錄清單、找到某行程式對應的事件(程式碼按右鍵"在IntelliTrace中搜尋這一行")、使用Filter找特定執行緒的事件、也可對事件進行關鍵字搜索
    3. 正式環境偵錯: (極強)
      1. 必要條件: IIS7+, 對象限.NET程式,要有.NET 3.5
      2. 在伺服器端安裝IntelliTraceCollection.cab
      3. PowerShell cd \資料夾 (RunAs管理員身分)
      4. Expand /f:* IntelliTraceCollection.cab . (別用WinZip、WinRAR解壓, 要保留目錄結構)
      5. AppPool的身分對該Folder要有Write權限
      6. Import-Module .\Microsoft.VisualStudio.IntelliTrace.PowerShell.dll
      7. 先IISRESET(等下重新啟動的Instance才會適用)
      8. Start-IntelliTraceCollection "AppPoolName" c:\資料夾\collection_plan.ASP.NET.trace.xml
      9. Stop-IntelliTraceCollection "AppPoolName", 停止後Dump檔案
      10. 在VS2012中開啟偵錯記錄檔,可還原出錯當下的資訊細節,跟使用VS線上Debug的情境很像
        (要配合pdb才能找出程式錯在哪一行)
    4. ASP.NET Validator支援Unobtrusive Validation,可減少Script的量,預設啟用(UnobtrusiveValidationMode)
    5. 打包CSS/JS:
      • 方法1: <script src="scripts/js"></script>指定資料夾,全部打包。如要決定順序,請用01, 02, 03為JS命名調順序, 記得<header runat="server">
      • 方法2: ScriptBundle, StyleBundle, DynamicFolderBundle
      • ASP.NET MVC內建,WebForm要另外用NuGet下載
    6. Win 8 ASP.NET 4.5最高可省35%記憶體,最高快35%
    7. 效能精靈: Pro以上的版本就有
      • CPU取樣: CPU%
      • 檢測: 方法被呼叫的次數
      • .NET記憶體用量
      • 資源爭用資料(並行)
      • ** 效能精靈可以比較兩個報告(.vsp) **
    8. Web效能測試:
      • Ultimate版本才有
      • Web效能分析前要取得實際使用情境: 各網頁的點擊率、順序,結果才會逼真
      • 負載測試前要確立效能目標
      • 錄製結果可以轉成程式碼,做進階客製
      • 參數化Web伺服器: 將WebServer URL變成參數
      • 報告名稱: 為每個動作定義在報告中出現的名稱,不然只有URL很難讀
    9. 用錄製結果進行負載測試(可指定使用者數量、多個錄製測試採不同比例混合),結果寫入DB,報告可轉成Excel

    Comments

    # by EvanKuo

    Modern IE10不再支援ActiveX? 那不是連網路ATM也不能用了嗎?

    # by ice

    不好意思想請教一下 >IE10標準模式: >一旦宣告<!DOCTYPE html>, 不支援X-UA-Compatible >meta <== 這個會爆炸 所指的會爆炸是指無效還是會造成未知的效果?

    # by Jeffrey

    to EvanKuo, Modern IE10不能用ActiveX->網路ATM不能用? => 只能導向到Desktop IE10再操作,而ARM平板似乎就無解了 to ice, 爆炸是寫給自己看的,過去沒留意這點,可能有混用<!DOCTYPE html>跟X-UA-Compatible的寫法埋在專案中,若meta無效恐會產生問題

    # by RED

    http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/58c2f719-727b-4dda-912e-d8b983ec3f90/ IE10的標準模式下 若不開啟相容性 XML則無法完整載入XSL 這算BUG?

    Post a comment


    31 + 31 =