Author Archives: 璉璉

[UAC] Win10 IoT 無法傳遞 Window Message


公司用在現場監測的設備,一直是用 Embedded ,我剛到公司時,已經從 Win2k WorkStation 轉換到 WinXP Embedded SP3 (XPE 3) ,偶爾因為維護的時候會碰到 Win2k WS。中間曾經導入 WinCE 5.0/6.0 ,不過硬體不太行,還是退回去用 XPE 。

之後用 Windows Stanard Embedded (WSE / W7E) 取代 XPE ,為了方便起見,預設把 UAC 關閉,最近改用 Win10 IoT Enterprise 取代 W7E ,但在測試機一直有問題,大概在 1 ~ 7 天左右,不定時發生畫面停滯,連滑鼠、鍵盤都不回應。

原先硬體商認為是我公司的軟體問題,後來用空機跑 IE11 ,就會出問題,把重現步驟列給廠商後,廠商發現是 BIOS 不相容,原先的硬體跑 W7E 都沒事,但跑 Win10 IoT 就出問題,更新 BIOS 後,持續又測了一陣子後,終於把部分案場開始更新 Win10 IoT 。

作業系統啟動後,我設計是自動登入後,在啟動 (StartUp) 目錄放捷徑,捷徑設定視窗最小化後,自動顯示在系統工具列 (SysTray) 目錄,在由此程式依據設定檔掃描開機應該啟動的軟體、應縮小或關閉的視窗,逐步控制,完成畫面初始化。

在我檢視 IT 設定出場到現場的 Win10 IoT 後,忽然發現 TeamViewer 沒有依設定掃描結果最小化。雖然前景有其他軟體,但是偶爾可能閃現的 TeamViewer ,畫面上有可連線進入的帳號密碼,可能發生資安風險,所以開始檢查。

起先以為是設定錯誤,但是開啟我軟體畫面,的確有標記持續送出訊息給 TeamViewer 讓視窗最小化。

我的作法是 SendMessage ,想到 Win8 以後,UAC 無法關閉,所有軟體強制降階成 Users 群組權限去跑,就先把我軟體結束掉,改用滑鼠右鍵,以系統管理員身分執行,果然就可以正常操作視窗,看樣子就是 Users 群組權限執行的,已經不能用 SendMessage / PostMessage 到其他視窗了。

知道問題來源就可以測測看,但是發現,啟動目錄只能以 Users 群組權限執行,不管是透過捷徑或是將軟體設定為系統管理員身分,只要是以系統管理員身分執行的,就會被拋棄不執行。

後來在保哥這邊找到相關資訊:

如何在每次 Windows 登入時自動啟動需要以系統管理員身分執行的程式

也就是說改用工作排程來繞過啟動無法跑系統管理員身分的問題。

排程執行
排程執行

解決啟動問題後,又發現另一個問題,就是捷徑可以設定啟動視窗是否最小化,但是排程不行,排程去啟動捷徑也不行,就是 Normal Window。

只好又回頭改我公司軟體,考慮保存人工執行時為正常視窗,採命令列 (Command Line) 加入支援啟動時最小化,讓排程使用這個命令列,完成啟動時最小化。

有些在 Embedded 用的軟體,都要等整體規畫上去後,才會發現不相容阿~

Categories: 工作點滴, 技術分享 | 標籤: | 發表留言

[WU] 5 月份的安全性更新可能會造成 .Net framework 2.0/3.x 程式閃退


在 05/13 Win10 Pro 的同事更新本月份的 Windows Update 後,發現公司的加解密程式會閃退。

經過測試,在已更新 Windows Update 的 Win10 上,用 VS2019 重新將舊的程式碼編譯,就可在安裝 Windows Update 後的電腦正常執行,但原因不確定。

Win10 Ent 則在 05/27 更新 Windows Update ,我把錯誤訊息及畫面擷下來,先跳錯誤事件 1023,.NET Runtime:

.NET Runtime version 2.0.50727.9151 – 嚴重的執行引擎錯誤 (00007FFF34F56D4E) (80131506)

Event 1023
Event 1023

同時跳錯誤事件 1000,Application Error:

失敗的應用程式名稱: EnDecrypt.Net.exe,版本: 1.14.9.12,時間戳記: 0x54128b08
失敗的模組名稱: mscorwks.dll,版本: 2.0.50727.9151,時間戳記: 0x5e75a06b
例外狀況代碼: 0xc0000005
錯誤位移: 0x00000000001c49b8
失敗的處理程序識別碼: 0x%9
失敗的應用程式開始時間: 0x%10
失敗的應用程式路徑: %11
失敗的模組路徑: %12
報告識別碼: %13
失敗的套件完整名稱: %14
失敗的套件相關應用程式識別碼: %15

Event 1000
Event 1000

初步懷疑是 KB 4552931 問題:

https://support.microsoft.com/zh-tw/help/4552931/kb4552931-cumulative-update-for-net-framework

同事有立即在 Win10 Pro 移除,但是沒效果,不過當時沒重新開機,有可能 .Net framework 被快取造成。

最後測試重新編譯原始碼可正常,有解決方案後,就沒再做更多進一步測試。

碰到此問題可以參考看看,但沒原始碼可以重新編譯的,可能就要看原廠有沒有提供更新了。我有測過一個台灣開發者分享的 Database.Net 免費版也有此問題,更新到最新版本就正常。

Categories: 工作點滴, 技術分享 | 標籤: | 發表留言

視訊會議選用 Jitsi Meet


話說三月的時候,預防性先把軟體式的視訊會議評估一遍:

視訊會議軟體簡易比較表

當時是不含 Jitsi Meet 的,四月中董事會希望能在五月董事會把視訊會議納入議題,六月起使用,所以就上線測了。

基本上硬體目前暫時不考慮,因為硬體式的綁設備,而且影片壓縮編碼無法升級,買了甚麼版本,將來對應的很難改,所以直接以軟體式的納入範圍。

但股務說,若董監事透過視訊會議參加,則即時人像畫面須出現在螢幕上,並且被錄影到,才能做數,好了,考慮到董監事人數,馬上只剩下 Zoom ,另外一個是剛異軍突起的 Jitsi Meet ,當時還以為 Jitsi Meet 只能同時出現 12 個人頭,經過測試,最多可以跟 Zoom 一樣,出現 25 個人頭,目前 Jitsi Meet 同時可參加 75 人,官方說後面還會改版放寬上限,不過我是需要錄董監事人像的,對於上限數量壓力不大。

Jitsi Meet 是一套開源免費軟體,要建立會議室可使用官方網站登入,並輸入會議室 ID:

https://meet.jit.si/

會議室 ID 可自建,自己高興就可以,連入網址後,輸入會議室 ID 即可。

事實上會議室 ID 就是網址,比如說 ID 用這個網誌的網址 tlcheng.wordpress.com 也可以,不用特別進網站建 ID,還可以用中文:

https://meet.jit.si/tlcheng.wordpress.com

之後再散佈給相關參與的人員即可。可以透過簡訊、LINE、FB、eMail、QRCode 等各種方式。

使用官方網站創建會議室沒有必須主持人需要先進入的問題,隨時都可以開,事實上使用官方網站,所有使用者權限平大,也沒有誰是主持人的問題。

使用的軟體在 PC/NB 只需要使用支援 HTML5 的瀏覽器,但 IE11 以前不支援,官方推薦使用 Chrome ,我自己用新版的 Edge 。

同事自己架了一台測試用的 Jitsi Meet Server ,對 CPU 及網路流量都不高,應該只是協調點對點連線而已,差別如下:

  1. 網址改了,這句等同廢話,但就只差在網站而已
  2. 完整主持人權限,自架 Server 才有完整主持人權限
  3. 缺少會議錄影功能

可以設定會議室密碼、其他人靜音、畫面跟隨我等功能,但只針對後續加入的有效,所以主持人還是先進入會議室,先開啟設定,後面的人進來就沒影響了。

在行動裝置則需安裝 App ,在 App 搜尋 Jitsi Meet 即可,為了避免安裝到非官方網站的,下面列出官方 App:

  1. Android:https://play.google.com/store/apps/details?id=org.jitsi.meet
  2. iOS:https://apps.apple.com/tw/app/jitsi-meet/id1165103905

對於參與者來說,通常持有個人設備即可滿足,基本上就是鏡頭、顯示器、喇叭、麥克風,所以對於行動裝置、NB 都沒啥大問題,PC 增購即可,基本上建議還以 NB 為主,行動裝置會發熱,大概只能撐 2 ~ 3 小時,這也是正常的,因為要錄影透過網路傳輸,本來就在高負載。

但對於會議主持人就有差了,如果是三個人以內,個人設備就可滿足,如果是四到六人小會議室,可能要用電視盒配液晶電視,中大型會議室就很麻煩。

原先大會議室的 NB 影像外接 Full HD HDMI 的投影機,聲音透過 LineOut 輸出到會議室音響系統。

鏡頭挑選了這顆:AVer VB342+

我挑這顆的原因主要是 120 度的廣角攝影,並且選配有10米長的全向性高敏感麥克風,所以可以把全向性高敏感麥克風引到高階主管區。當然他還有很棒的附加功能,可以依照聲音源自動轉向對焦,並自動 ZoomIn ,當然這功能董事會用不到,董事會目的是所有人要照到,但這功能在平常視訊會議很好用。

上面的10米全向性高敏感麥克風只是我針對一般視訊會議的用品,我真正要搭配的是無線麥克風,由於大多數的藍芽麥克風多半內含喇叭,所以我選擇了:DVM180 VHF 無線麥克風

無線麥克風
無線麥克風

包含老闆都不知道我為啥要買這組無線麥克風,一般會議室內的無線麥克風訊號直接進音響系統,在會議室內播放,所以這表示參加視訊會議的那頭聽不到。所以我需要無線麥克風接到 NB 的麥克風接點,透過 NB 的網路傳送到遠端。所以簡報人需要一支,會議主席則放一隻供傳遞使用,無線麥克風也有好處,因為是指向性低敏感,所以臨時要討論成本或機密,只要把手上麥克風切靜音即可。

但總不能叫簡報人或老闆同時拿兩支麥克風,一支傳遠端,一支傳音響系統吧?所以還要在 NB 把麥克風的音效設定為「聆聽此裝置」,則接 NB 的無線麥克風就同時能將聲音傳到遠端跟音響系統了,設定完後,音響系統撥放出來的聲音大概會慢 0.2 秒,勉強可接受。

Jitsi Meet 在 NB 上使用網頁的好處就是可以多開。就是同一台多次登入,這樣對於測試最大人數或是多個鏡頭很方便,多開時切記先把麥克風關靜音,不然可能會產生音嘯,只保留一個網頁啟用麥克風是很必要的。此外,多開的時候,不知道是網路存取量大增還是鏡頭共用問題,人頭畫面會一頓一頓。

好了,幹嘛強調多開?

Jitsi Meet 跟多數的軟體一樣,當分享畫面的時候,自己的即時人像會轉成桌面的內容,然後人像就不見了,所以多開就可以一個傳人像,一個傳桌面。

此外,若有多個螢幕,可以一個顯示視訊會議畫面,一個切到多人像畫面,甚至螢幕夠多的話,可以每個畫面顯示一個人像,所以多開,直接解決其他軟體沒辦法支援多螢幕的功能,超讚。

視訊會議若是在主畫面,右側可以有滾動式人像,上限約 8 個,超過要翻轉才能看到人頭,董事會會遠端參與的人數不多,原則上都在 8 個以內,所以我把 NB 這樣規劃:

  1. 開兩個網頁,一個放在 NB 畫面顯示鏡頭,一個放在投影機分享 NB 畫面。
  2. NB 開啟簡報檔,並設定在 NB 畫面播放。
  3. 播放 PowerPoint 時,會把簡報者提示畫面扔到投影機,縮小簡報者提示畫面。

則投影機顯示出來的就是主畫面是簡報內容,右側是遠端參與者的人頭。

Jitsi Meet 的會議錄影功能需要有 DropBox 帳號,由於使用網頁瀏覽器,通常不會擋桌面錄影軟體,所以我找了一套免費的開源軟體:

OBS Studio:https://obsproject.com/

這套軟體的做法是先建立畫布,然後在畫布上放要錄影的來源,可以分別選每個螢幕、每個鏡頭,所以是套支援多螢幕桌面錄影軟體,還可以把各別軟體畫面視為錄影來源。音源也支援多個,還可以輸出成串流,看起來多數人是用來做直播畫面,支援 H.265 ,並且會掃描硬體是否支援,若支援可以直接用硬體編碼。

我用預設 1920×1080 畫布來放,背景為投影機畫面,左下角為 NB 顯示器,如下圖。

Jitsi Meet 錄影畫面擷圖
Jitsi Meet 錄影畫面擷圖

從上圖可以看到,右側為參與人的大頭,畫面中間為簡報檔,可以同時讓會議室參與人員從投影機直接看到大多數內容,從軟體畫面彈性,滿適合會議室用的視訊會議。

Jitsi Meet 教學影片我推薦下面幾個:

網頁操作:

iOS 安裝 App (董監事幾乎全用 iPhone …):

Android 操作:

Categories: 工作點滴 | 標籤: | 發表留言

定時刪除 Nas 過舊檔案


老闆交代,Nas 上暫存簡報的目錄要自動刪除 3 天前的檔案。

Nas 是用 QNAP 的,上 QNAP 的網站看,要自動備份後才能自動刪除,感覺有點累贅,所以考慮在 Windows 設排程定時刪除。

查了一下,最簡便的方法是使用 Windows 內建命令 forfiles

但是 forfiles 不支援 UNC 路徑,所以必須將 UNC 路徑映射成網路磁碟。

不支援 UNC 路徑
不支援 UNC 路徑

最後我把下面內容做成 DelOldFiles.cmd 後,設定到工作排程器每日夜裡跑一次。

NET USE Z: \\伺服器名\完整路徑
forfiles /d -3 /p Z:\ /s /m . /c “cmd /c del /f /q @path"
NET USE Z: /delete /y

其中比較重要參數說明如下:

/d -3:表示刪除 3 天前檔案,詳細用法參見參考資訊的連結。

/f /q:表示靜默刪除唯讀檔,靜默對於排程很重要,表示不會跳出任何詢問,詳細用法參見參考資訊的連結。

/y:表示強制中斷網路磁碟,關閉所有連線,詳細用法參見參考資訊的連結。

參考資訊

註: Windows 內建命令可以從上面連結點進去,再從左側命令清單找到其他相關命令

Categories: 工作點滴, 技術分享 | 標籤: | 發表留言

視訊會議軟體簡易比較表


老闆雖然還沒交代,不過可能會用到,就先上網搜尋了一下。

我自己個人認為我們公司可能會用 Skype … 因為老闆用習慣了,全公司幾乎都裝… 而 Skype 功能也上來了,所以應該可能最有機會被老闆選上。

我們公司有訂閱 Office 365 跟 TeamViewer ,所以 Teams 跟 TeamViewer 授權是沒問題,幾年前評估是 TeamViewer 最強,當時 Zoom 功能還很陽春,但是現在大家都追上來了,TeamViewer 反而是最不想用的…

資料是從網頁上搜尋的,沒有普遍測試。

軟體名 Skype Skype for Business Teams LINE Zoom TeamViewer WebEx Facebook Messenger Hangouts Meet Hangouts DuoJitsi Meet
行動裝置
分享螢幕  
同步人像 4 4 4 4 25 滾動 清單 6 10 10 25
電子白板                
螢幕錄影          
接管              
會議ID          
群組            
連線數 50 250 300 16 10 25 100 50 250 25 7 75
其他限制 4hr/通、10hr/日、100hr/月 被 Teams 取代 詳見參考網址 40min/通,付費有完整功能 新版會議為協力廠商 Blizz 人頭上限 6 人 G Suite 用戶 人頭上限 10 人 可自建 Server
Categories: 工作點滴 | 4 則迴響

[Android] Google Play 年齡限制將老舊 App 下架


我的 Android App 主要是做成一個 WebBrowser ,後面接到 HTML5 網頁,所以 App 在 Google Play / Apple AppStore 上架後,基本上不用改 App 。所以通常只有每月整理月報及 KPI 時,會去看安裝人數。

二月去看安裝人數時,畫面顯示我的 App 遭到下架,但我用的帳號是公司帳號授權的開發者帳號,細節看不到,但畫面上有提到要使用公司帳號的 eMail 去看。

原先的設定與錯誤訊息
原先的設定與錯誤訊息

到了公司查了公司註冊服務的帳號密碼後,登進去看看原因,是說我的目標對象和內容需要重新提交。

eMail 通知下架原因
eMail 通知下架原因

我原先在 2017 的時候,是依據 google play 問卷自動分類成 3 歲以上。在 2019/09/01 時,Google 修改了家庭政策,所有的 App 都需重新提交分類,沒重新提交分類的,到 2020/02/12 強制下架。

未提交家庭政策強制下架
未提交家庭政策強制下架

反正公司的 App 只是透過網頁查詢即時資料,客戶鐵定滿 18 歲,就不去管家庭政策,把年齡層改為 18 歲以上。

選擇客群為18歲以上
選擇客群為18歲以上

就勾選小孩沒興趣…

兒童沒興趣
兒童沒興趣

重新提交。

重新提交
重新提交

大概半個小時,開發帳號就收到「你的更新已發布」通知,到 Google Play 確認一下,果然完成重新上架。

不過我重新填寫自動分級問卷還是分在 3 歲以上,但是如果要滿足 18 歲以下,感覺要調東調西的,算了,跳過吧…

做完後發現到還有新版 App Logo 要強制更新,主要原先是正方形,要改成四角有弧形的圖示,當初做 iOS 的 Logo 跟 Android Logo 就考慮過 iOS 是四角圓角的,所以可以直接選擇 Google 建議的自動修改套用,就省的改圖示了。

Categories: 行動裝置, 封裝部署, 工作點滴, 技術分享 | 標籤: | 發表留言

[Win10] 語音辨識


語音辨識並不是 Win10 新增的 Cortana ,Cortana 是語音助理,目前支援簡中,尚未支援繁中,可參考:

https://support.microsoft.com/zh-tw/help/4026948/cortanas-regions-and-languages

語音辨識這功能,原先是叫 Voice Command (語音命令) ,在 Win10 內可從下圖位置開啟:

語音辨識
語音辨識

啟動後,上方會出現「正在聆聽」,這時就可以透過語音下達命令,例如喊「開啟 檔案總管」,會自動開啟檔案總管。詳細功能可以自己玩看看,但是不知道是不是我的口音不標準,常常會辨識成錯誤的內容,在記事本上,也可以當成語音輸入法。

Voice Command 我最早是從 Agent 發現他的,在 Win95 內建梅林精靈,預設位置為:

C:\Windows\msagent\chars\merlin.acs

在 Office 95 內新增了 Rocky 狗、迴紋針酷哥等多個精靈,去年還有迴紋針酷哥的新聞:

https://today.line.me/tw/pc/article/%E5%BE%AE%E8%BB%9F%E5%85%AC%E9%96%8B%E3%80%8C%E8%BF%B4%E7%B4%8B%E9%87%9D%E5%B0%8F%E5%B9%AB%E6%89%8B%E3%80%8D%E8%BF%91%E7%85%A7%E3%80%80%E7%B6%B2%E5%8F%8B%E8%A6%8B%E4%BA%AE%E9%BB%9E%E7%A7%92%E7%88%86%E5%93%AD-zy1k97

精靈中,Windows 內建 1 個,免費下載 4 個,Office 95 8 個,Office 2000 1 個,Office XP 2 個。

而精靈是接受語音命令或唸出文字的。

從精靈的設定來看,是 voice speech 4.0 ,也就是語音命令引擎。在這個年代,只支援英文跟少數歐洲語系。可參考:

https://en.wikipedia.org/wiki/Microsoft_Speech_API

在 Office 2003 起,語音命令引擎新版本 5.0 起,納入簡中支援,在 2004 微軟才發布語音命令引擎 5.1 ,從這個版本開始,納入繁體中文支援,所以可能有人聽過在 Office 2003 就可以用語音輸入法在 Word 內打文章。

Vista 以後,語音命令內建在 Windows 內,就可以向上面視窗那樣啟用,對電腦用口下命令,執行相關軟體或指令。

但是這功能不是很好用,也有安全疑慮,也就是透過一段錄好音的命令,撥放給電腦聽,從而造成電腦執行惡意命令:

https://zh.wikipedia.org/wiki/Windows%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB

所以後來微軟也沒有推廣,但不是沒有,慢慢偏向輕鬆存取的輔助工具。

Categories: 技術分享 | 標籤: | 發表留言

[VSS] 啟用陰影備份


Windows 內建陰影備份功能,對於修改檔案很好用,例如改錯了,還可以回頭找出舊的檔案救援回來。

但陰影備份很吃空間,預設是不開,我常常忘掉啟用步驟,所以把啟用步驟摘出來,以後好查詢。

從電腦管理設定
從電腦管理設定
  1. 開啟 [電腦管理]
  2. [共用資料夾] 滑鼠右鍵 > [所有工作] > [設定陰影複製]
  3. 點選目標磁碟後,選下方 [啟用]
啟用 VSS
啟用 VSS

預設是每個工作天 (周1 ~ 周5) 早上七點備份,依照硬碟剩餘容量備份,上限是 64 次,若要更改預設值,點選 [設定]

進階設定
進階設定

若需要改時間設定,可以點選 [排程]

變更備份時間及密度
變更備份時間及密度

若需要調出舊的檔案,就在檔案總管針對目標按滑鼠右鍵 > [內容] > 以前的版本。

以前的檔案
以前的檔案

上圖是 QNAP Nas 設定的快照,等同於 Windows 的陰影備份,我個人偏好在目錄上按滑鼠右鍵,這樣可以看整個目錄,因為如果有刪除的文件,從檔案上按滑鼠右鍵是找不到的。

每次安裝新的 Windows Server 都忘掉,乾脆記下來。

相關參考:

磁碟區陰影複製服務 https://docs.microsoft.com/zh-tw/windows-server/storage/file-server/volume-shadow-copy-service

Categories: 工作點滴 | 標籤: | 發表留言

[IE11] 透過設定信任網站簡單讓 IE11 恢復 VBScript 支援


我從 1998 開始寫 ASP 動態網頁,那時瀏覽器是 IE 的天下,我個人又是 Basic 的信徒,所以當時 client script 我都堅持使用 VBScript ,但是隨著時代轉變,VBScript 已被淘汰,更嚴重的是 IE11 居然不支援了…

在 2019/08 的新聞中有寫

預設關閉 Win7/8/10 IE11 的 VBScript
https://www.ithome.com.tw/news/132294

所以得到微軟網站查詢設定。

啟用/停用 IE11 VBScript 設定
https://support.microsoft.com/en-us/help/4012494/option-to-disable-vbscript-execution-in-internet-explorer-for-internet

可以透過 GPO (gpedit.msc) 或 regedit 兩種方式設定,機碼是動這個:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones[代碼]\140C

改成 3 停用 VBScript 支援
改成 0 啟用 VBScript 支援

針對上篇更多的 IE 安全性設定可參考下面網址:
https://support.microsoft.com/en-us/help/182569/internet-explorer-security-zones-registry-entries-for-advanced-users

例如:

代碼 範圍

0 我的電腦
1 近端內部網路
2 信任的網站
3 網際網路
4 限制的網站

雖然有描述 1001 ~ 270C 的意義,不過關於 140C 的部分沒有描述。

我自己簡單測試設定方式,目前仍然可以不用管上面的機碼,主要是下面兩項:

  1. 設定信任網站 (重點)
  2. 設定相容網站 (在網頁 meta 強制指定相容網頁,例如 IE6 亦可)

Categories: 工作點滴, 技術分享 | 標籤: | 發表留言

[VBNET] String.Format(String, Object[]) 多載的問題紀錄


因為不是 MVP 沒有免費的微軟問題數可用 (微軟的技術支援是收費的) ,所以不能確定是不是 bug ,就當成問題紀錄記在這。

我原先是在使用這功能時發現異常
StringBuilder.AppendFormat(String, Object())

所以我回到最簡單的原點,測試呼叫 String.Format(String, Object()) 這個多載,微軟官方說明詳如下方連結。

String.Format 方法 多載 Format(String, Object[])

從官方說明來看,這個多載第一引數是純字串,第二引數為物件陣列。

不過我用 VBNET 經過測試,我只能使用
String.Format(Object, Object())

實際上說明內無此多載,詳見上方官方說明。

為了驗證,我用 Visual Studio Code 在 ASP.NET 寫一小段測試程式碼,選用 ASP.NET 是因為可以更短小的程式碼進行測試,而且可以在 IIS 新增一個虛擬應用程式,就可以將同一目錄設定成 .Net framework 2.0/4.0 兩種版本。

測試程式碼
測試程式碼

我用 ASP.NET 來測試,分別測試 .Net framework 4.0 整合式 與 .Net framework 2.0 整合式 (用虛擬目錄 Test2i 指向同一個檔案,詳見錯誤訊息檔案路徑)

.Net framework 2.0 整合式
.Net framework 2.0 整合式

.Net framework 4.0 整合式
.Net framework 4.0 整合式

可以看到兩個錯誤畫面最上方輸出的第一行都能正確輸出 .Net framework 版本。

第二行、第三行分別都是確認 Format(Object, Object[]) 可正確呼叫。

第四行則為 Format(String, Object, Object, Object)

但第五行是 Format(String, Object[]) ,就跳錯誤了…

現在搞不太清楚 String.Format 這個多載到底發生甚麼問題,暫時紀錄在網誌,以便以後查閱。

註:StringBuilder.AppendFormat 也有這樣問題

Categories: 技術分享, 更新與回報 | 標籤: | 3 則迴響

[Driver] Windows 的 AHCI 驅動程式


很多人多數聽過,當初 Intel 為了提升硬碟存取效能,提出了 AHCI ,可提升效能約 30% ,所以在 BIOS 可設定使用 AHCI ,電腦在安裝時就能用 AHCI 驅動程式加速 Windows 效能。

大部分人用的是內建於 Windows 內的標準驅動程式。

微軟內建 AHCI 驅動程式
微軟內建 AHCI 驅動程式

內建驅動程式就是硬體相容度最大,但效能未必最佳的通用驅動程式。

所以要最佳效能當然是安裝 Intel 提供的最佳驅動程式,但 AHCI 驅動程式並不被「 Intel 驅動程式與支援助理 」 支援,所以得自己找,又因為跟內建晶片相關,但硬體商通常不會標註晶片資訊,就造成在 Intel 網站上根本不知道要抓甚麼。

近幾年的 AHCI Driver 在 Intel 網站上有統一趨勢,可到下面網址下載:

http://www.intel.com.tw/content/www/tw/zh/search.html#q=RST

若是無相容驅動程式,建議先到主機板廠商網站看看該主機板提供那些 Intel 相關驅動程式,可先安裝主機板廠商提供的版本,再由裝置管理員看到晶片版本,到 Intel 網站搜尋相關驅動程式。

Intel AHCI 驅動程式
Intel AHCI 驅動程式

新版的 AHCI 驅動程式安裝好了,可在系統列找到。

Intel 快速儲存技術
Intel 快速儲存技術

註:我碰過微軟內建的 AHCI Drvier 未能正確辨識硬碟,導致內建硬碟圖示顯示為抽取式硬碟,但不是一定會這樣,所以如果用得好好的,可以不用改為 Intel 的驅動程式。

Categories: 電腦和網際網路, 工作點滴 | 標籤: | 發表留言

[Office] Outlook 365/2016/2019 變更預設收件匣


在 Outlook 2007 以前,Outlook 在使用 POP3 收信時,預設會將信件收到 Outlook.pst (個人資料夾) 裡面的收件匣。

在 Outlook 2010/2013 的時候,預設依照電子郵件信箱建立對應的 .pst 來收信,但是在建立電子郵件信箱時,可以很輕鬆地選擇 .pst 讓它仍然將信件收取到 Outlook.pst\收件匣。

隨著電子郵件普遍化,一般使用者多半有多個信箱,但通常搞不懂如何透過 Outlook 設定收件方式,所以 Outlook 365/2016/2019 新版將設定收件方式加以簡化,反而導致部分舊功能因為畫面精簡後不能在一開始建立電子郵件信箱時執行。

對於大多數人來說,不同的電子郵件信箱歸類到同一個 .pst 是很自然的事,所以不太會有需求變更預設收件匣,但 Outlook 在收發郵件時,若因為當機、收發郵件過長(執行緒鎖定) ,非常常容易造成 .pst 損壞,所以我在家裡的電腦習慣用舊的方式收信,先收到 Outlook.pst\收件匣,再用郵件規則分信,這樣發生問題時,通常只有 Outlook.pst 受損,由於信件收進來就自動使用規則分到不同 .pst 後,Outlook.pst 內本身沒甚麼信件,修復起來快,也不容易造成信件遺失。

當然,也有其他特殊需求需要變更到不同的 .pst 內收信,下面就直接說明步驟了。

1. 左上角選單:檔案 > 資訊 > 帳戶設定 > 帳戶設定

帳戶設定
帳戶設定

2. 在 電子郵件頁籤 下方,針對每個電子郵件帳戶點選 [變更資料夾],例如將原先的收件匣改變更到 Outlook\收件匣。

選擇收件匣
選擇收件匣

若有需要新增 .pst 或子目錄,在上面畫面右側有按鈕可點選。

這樣就完成設定了。

若須將信件設定到既存的 .pst ,例如從舊電腦拷貝過來的 .pst ,就點選資料檔頁籤進行管理。

資料檔頁籤
資料檔頁籤

我個人習慣將 .pst 都放到 D 槽,這樣若是 Windows 要重灌或是帳號受損,我的 .pst 都能安好無缺,而且也便於備份管理。我個人習慣將 .pst 依照功能性區分,我同學有人會依照年份區分,依照年份區分的好處是可以每年固定燒錄 .pst ,就可以確保當 .pst 受損時,可以從光碟的備份還原。

最後來看一下這個畫面擷圖對應的 Office 版本。

Office 帳戶
Office 帳戶

點選 關於 Outlook

關於 Outlook
關於 Outlook

這是公司的 Office 365 ,若是要跟家裡個人的 Office 365 連結,例如使用家裡的 OneDrive ,就在左邊點選新增服務。若要更換帳號,可以參考前篇:

[Office] Office 365 企業授權更換

Categories: 資訊管理, Office, 工作點滴, 技術分享 | 標籤: | 發表留言

風力發電可能會造成物種滅絕,還是先別用好


我很少在部落格扯跟電腦無關的,但關於風力發電的事,我也是磚家。

我待的公司早年有做風力發電,我接觸過大小風機,主要是負責風機監測,包含發電、狀態等,所以算是專業人士,而不是所謂的環保鬥士。

在開始之前,先引用中研院這篇:

從天氣預報看發電──郭志禹的「風中奇緣」
http://research.sinica.edu.tw/offshore-windfarm-wrf/

這篇主要是在說明兩風機建造過近,會因為互相影響,可能會引響投資報酬率,不過那是投資者該考慮的,死老百姓不用考慮。

從裡面引用這段:
「風通過風機之後,風速下降超過 1 公尺(每秒)的區域,面積竟然廣達 100 平方公里左右。」

風力發電主要是靠西風帶、季風、地形風為主。

從前面看到中研院的研究,一台風機影響的就有 100 平方公里,所以北部拍照打卡聖地觀音工業區旁邊的沿岸幾十隻風機,後方一百平方公里有多大?

風速下降一公尺在海上可能還沒感覺,在陸域大概就是平均少 1/5 ~ 1/4 的風量。

風量下降代表的就是微氣候的變化,風攜帶的水分、平衡的熱量減少。當微氣候變化,就會造成物種遷移,無處可去的物種就會消失。

農委會有個計劃「推廣水田生態環境保護及地下水涵養補注」,俗稱種水。種水的理由是因為田間休耕,導致沒有正常灌溉,田間的水就沒有蒸發散,氣溫會升高,此外田間的泥鰍、青蛙等生態無法正常維持,因此針對休耕的田地仍然要灌溉,除可維持田間生態水平衡外,還可間接補注地下水。

也就是說田間只是休耕沒種水稻,就被認定為破壞生態平衡,而 100 平方公里平均風速少一公尺要維持 20 年,會不會破壞生態,會不會破壞微氣候?從海面上帶來的水氣,會因為風速降低 (風通量減少) ,導致攜帶到陸域的水氣跟著降低,對流造成的降雨量就會減少,除人類有灌溉的地區外,其他地區的水平衡會不會改變?

國中理化教大家,能量守恆。

在岸邊或是近海將風能轉換成電能傳輸到陸域,陸域居民又因為自然風減少,必須開空調,那麼實際電能需量差異不但沒減少,反而又增大了,能量轉換與傳輸,必然造成能量損失,也就是說,季風帶來的風能,若用來風力發電,不但造成水氣減少,微氣候變化,既有生態破壞,還增加空調的用電。

另一個風力發電的大戶在西風帶,也就是大家知道的歐洲這種高緯度國家。高中地理與地球科學教大家,西風帶是由地球自轉引起。

西風帶:
https://zh.wikipedia.org/wiki/%E8%A5%BF%E9%A2%A8%E5%B8%B6

國中理化教大家,能量守恆。

當西風帶的風能一部分轉換為電能後,與地球自轉平衡的能量被損耗後,地球自轉速率會不會變化?

國外有一些小眾的看法的確認為地球自轉平衡可能被破壞,大部分看法並沒否決能量被損耗,只是認為影響小可忽略。

那麼成語中積沙成塔是甚麼意思?

高中生物教大家,開花結果跟光週期有關
成花誘導:https://zh.wikipedia.org/wiki/%E8%8A%B1#成花诱导

若有關,可能導致植物無法正常開花結果,就會造成糧食危機,不是人類而已,是全球靠植物維生的大多數動物,而無法開花結果可能導致植物無法繁衍,最後連植物也會滅絕。

另外地球的洋流一般認為西風帶的風切應力有一定的影響力,導致了洋流方向:
洋流:https://zh.wikipedia.org/wiki/%E6%B4%8B%E6%B5%81

大洋經過多年的平衡,甚麼時候洋流到達,可替不同區域的海洋生物帶來食物,產生完整的食物鏈,可參考下面那篇連結。
https://zh.wikipedia.org/wiki/%E5%8A%A0%E5%88%A9%E7%A6%8F%E5%B0%BC%E4%BA%9E%E6%B4%8B%E6%B5%81

當西風帶的風能一部分轉換為電能後,推動洋流的風能就會減少,洋流的平衡也會被破壞。

所以看下來,風力發電只會破壞生態平衡,不能叫綠能,西風帶的風力發電破壞全球平衡,季風的風力發電破壞區域平衡,風力發電只適合用在不得不用的情況下。

小常識:風力發電一般在風速 1.5 m/s 開始發電,到達 15 m/s 時,自動煞車停止發電,15 m/s 就是俗稱的七級風,因此颱風來的時候,風力發電是不運作的。

Categories: 新聞與政治 | 標籤: | 發表留言

[Office] Office 365 企業授權更換


我的 NB 安裝的是 MSDN Subscription 附的 Office 365 E3 ,他可以自己測試 Office 365 管理帳號與使用者帳號。我的 MSDN Subscription 是 2019/07/31 到期,但一時還沒失效,我就先等著。

今天我的 Office 365 授權終於失效,看起來是 40 天跳失效訊息,這也可以用來概估同事離職後,公司 Office 365 失效的期限。

開啟 Outlook 提示帳戶失效
開啟 Outlook 提示帳戶失效
Outlook 工具列提示失效
Outlook 工具列提示失效

雖然上面已經跳出 Office 365訂閱發生問題的提示,但是 Outlook 仍然可以用,我想滿 40 天只是開始會提示,可能還要一陣子 (聽說是 180 天) 才會完全不能用 Office 。

所以開始要改用公司給的 Office 365 授權,因為我還沒登入過公司給的 Office 365 商務進階版授權,所以要先登入一次,修改密碼。

第一次登入企業的 Office 365 要改密碼
第一次登入企業的 Office 365 要改密碼

我原先的 Office 365 E3 帳號是 xxxx@xxxxxxt.onmicrosoft.com,公司的 Office 365 商務進階版帳號是 xxxx@xxxxxxs.onmicrosoft.com ,所以後續圖片請看 t 或 s 的尾碼來判斷是哪個帳號。

然後從 Outlook 的選單 > 檔案 > Office 帳號來變更,首先從圖上中間上方點選切換帳戶。

點選切換帳戶
點選切換帳戶

會跳出一個對話框,點選下方新增帳號。

點選 新增帳戶
點選 新增帳戶

依照導引畫面完成。

點選 是
點選 是
稍後片刻
稍後片刻
點選 完成
點選 完成

現在可以看到使用者資訊已經變成公司的新帳號,但是右側產品資訊仍然是我的就帳號。

兩邊帳號不相同
兩邊帳號不相同

點選右邊產品資訊的變更授權。

變更產品授權
變更產品授權

點選登入,一畫面引導登入公司授權。但是重新開啟 Outlook 還是會顯示授權異常,還是上面兩邊帳號不同的圖案。

可能是公司授權沒有 Skype for Business ,登入 Office 網站下載 Office 安裝檔,採用覆蓋性安裝。

下載 Office
下載 Office

覆蓋性安裝完就正常了,畫面顯示還有一個授權,但預設還是顯示我的舊授權。

顯示其他授權資訊
顯示其他授權資訊

這樣就完成 Office 365 E3 授權變更為 Office 365 商務進階版授權了。

雙授權
雙授權

[追加 2019/09/26]

Windows Update 後,變成兩套 Office ,只好移除一套。

Categories: Office, 工作點滴, 技術分享 | 標籤: | 1 則迴響

[T-SQL] IIF 與 CASE WHEN … THEN … ELSE … END


有個案子現場是前面的人做的,因為距離關係,分了三區設置 4G 網路,把資料扔回 Server 。

但妙的是其中有兩區相連,比如說 A/B 區。當 A 區設備沒開,A 區的流量就要歸總到 B 區算。

本來 Server 只負責接收資料,針對這種情形,建一個分析規則表,等待現場回傳後計算。

本來是在 SQL Server 2016 上開發測試,所以 T-SQL 語法習慣就選用
https://docs.microsoft.com/zh-tw/sql/t-sql/functions/logical-functions-iif-transact-sql

IIF(bool, true_value, false_value)

但實際上要跑的資料庫是 SQL Server 2008 R2 ,沒想到 SQL Server 2008 R2 不支援 IIF 。

我記得以前微軟文件會寫相容層級,找半天都找不到,只好一版版翻,似乎是從 SQL Server 2012 以後開始支援。

只好退回舊版,改用
https://docs.microsoft.com/zh-tw/sql/t-sql/language-elements/case-transact-sql

CASE
WHEN bool1 THEN result1
WHEN bool2 THEN result2
ELSE result3
END

所以,比如說原先要用:
(IIF(Col1=Col2, ‘真’, ‘假’)) AS 判斷
改成
(CASE WHEN Col1=Col2 THEN ‘真’ ELSE ‘假’ END) AS 判斷

Categories: 資料庫, SQL, 工作點滴, 技術分享 | 標籤: | 發表留言

[SQL] 透過 Access 轉換資料庫架構


有個客戶要結束節能業務,把他們的節能服務轉交給我們公司,他們原先的雲端監測系統阿祖 (Azure) Web Server 與 SQL Server 都要關閉,要由我們的監測系統自己處理。

它們的系統是現場 IPC 沒有查詢展示介面,監測資料在現場暫存後,就上傳到雲端資料庫,所以雲端資料庫每分鐘一筆,主要的資料表架構如下,每個月一個資料表:

分區視別字串點位識別字串資料時間值(字串)原始值(字串)
長度100最大長度50DateTime長度50長度50

所以在上面這個資料表架構下,每個月大概七百萬筆資料,約佔用空間500MB。

看了對方資料架構我才知道,為何對方網頁限制每次查詢時間間隔不能超過七天,而且每次查詢起來大概要跑 3 分鐘才會出來。

我的架構分成兩部分,現場端有IPC安裝 SQL Server Express資料庫,每分鐘一筆,統計分析後上傳到雲端資料庫,不同時間間隔分開放,以小時、日、月、年為單位統計。現場資料庫考慮效能及容量,將點位抽出來列表,核心資料表則所有時間放在一起不分表,資料架構大概是:

資料時間點位1點位2點位n狀態
DateTimeDoubleDoubleDouble長度n

所以每月大概變為43200筆,約佔用空間 50 MB。

所以需要將資料格式進行轉換,將對方類似一維的數值表格架構轉成我的二維的數值表格架構。

首先先將對方的 Azure SQL Server 整個備份到我電腦的 SQL Server Developer,光是做這件事,我電腦硬碟就被吃掉 40 GB …

考慮到我電腦內的資料庫避免異動,確保乾淨,所以我不打算在 SQL Server 處理資料格式轉換,我打算把每個月的資料匯入到 Access 後再轉換成我要的格式。

Access 轉換的架構

查詢「刪除 data 資料」這個並不需要存在,是我開發過程期間測試 SQL 語法用的。

資料表 raw 是用來放置 SQL Server 的匯入暫存資料,資料表 data 則是樣本資料表,為了快速處理,我還是依照每個月複製貼上 Data_yyMM 資料表,進行格式轉換,最後再統一匯入一個資料表。

所以核心的程式碼很單純:

DoCmd.SetWarnings False ' 關閉告警視窗
DoCmd.RunSQL nowQuery ' 執行 SQL 語法
DoCmd.SetWarnings True ' 恢復告警視窗

所以上述部分迴圈的目的就是為了組合 SQL 語法來達成目的,所以後面說明就專注於 SQL 語法,而非 VBA 語法。

匯入資料到 raw

將 SQL Server 資料表資料匯入到 Access raw 資料表,SQL 語法如下:

INSERT INTO [raw]
SELECT 點位識別字串,資料時間,值
FROM [來源表格名] IN " [odbc; Driver=SQL Server Native Client 11.0; Server=(local); Database=資料庫; UID=帳號; PWD=密碼; ]

注意到了嗎?這邊最特別的就是 IN 子句,透過 IN 子句跨越資料庫,這功能只能在 OLEDB 資料庫驅動程式下用,所以表示 Access 內 VBA RunSQL 是跑 OLEDB 來做查詢,這部分說明沒寫,這段應該是這篇的精華。

對 In 子句延伸閱讀可在部落格右側搜尋輸入:In 子句。

插入時間

為了避免無效時間,所以先在 data 資料表內將時間插入,並可確保所有時間都不被遺漏,SQL 語法如下:

INSERT INTO [Data_yyMM]
SELECT DISTINCT 資料時間 FROM raw ORDER BY 資料時間

更新各欄資料

這邊就依據資料點位對應到資料欄位,逐欄更新,所以前一步插入時間很重要,插入時間後,就有 PK 欄可供 UPDATE 使用。逐欄迴圈 SQL 語法如下:

UPDATE [Data_yyMM]
INNER JOIN (
SELECT 資料時間, 值 FROM raw WHERE 點位識別字串="點位代碼"
) AS tabData ON ([Data_yyMM].rdate=tabData.資料時間)
SET [Data_yyMM].點位i = tabData.值

透過前一步的插入時間做為 PK 值 JOIN ,就可以整欄資料直接轉移。

刪除 Raw Data

這段 SQL 語法太簡單,應該無須解釋。

DELETE FROM raw

小結

所以就能快速透過 Access 執行巨集持續進行不同資料表的資料匯入、表格架構轉換,不過雖然有跑刪除 Raw Data ,但還是無法防止 Access 長大,因此長大到 2 GB 時, VBA 會被中斷,重新壓縮 Access 檔案,再改回圈開始處,就可以繼續往下跑。

我這時會先把 Data_yyMM 搬到其他 Access 檔案,把這個轉換用的 Access 盡量空出來跑資料轉換,不過我把 Data_yyMM 合併的 VBA 也寫再這個轉換檔,所以最後我會把所有 Data_yyMM 搬回來合併。

Categories: 資料庫, SQL, 工作點滴, 技術分享 | 標籤: | 發表留言

[SQL Server] 資料庫損毀與修復


週日傍晚異常斷電,UPS 也掛了,周一早上重開後,伺服器一直跑得不順,在事件檢視器發現資訊訊息,建議跑 DBCC CHECKDB (SQL Server 2014 的資料庫)

Info:825 建議進行資料庫檢查
Info:825 建議進行資料庫檢查

另外也有錯訊息

Fail:8646 建議進行資料庫檢查
Fail:8646 建議進行資料庫檢查
Fail:824 建議進行資料庫檢查
Fail:824 建議進行資料庫檢查

周一下午跑過
DBCC CHECKDB (db)

Info:8957 資料庫修復結果
Info:8957 資料庫修復結果

,修復了 77 個錯誤。

但此之後,就頻繁發生 LOCK 錯誤

Fail:1204 無法 LOCK 資源
Fail:1204 無法 LOCK 資源

並且仍然會發生建議要跑 DBCC 的錯誤。

Info:825 建議進行資料庫檢查
Info:825 建議進行資料庫檢查

考慮了一晚,周二早上決定建新資料庫:

  1. 新建 db1 ,把 db 周日凌晨定時備份還原到 db1
  2. db 更名為 db_o ,db1 更名為 db
  3. 用匯入匯出精靈把 周日備份後的資料從 db_o 匯入到 db1
  4. 所以 db_o 除了人為測試與自動備份外,等同無人存取

週二晚上本著廢物利用的精神,平常沒機會玩資料庫修復,跑:
DBCC CHECKDB (db_o)
多次,每次跑完,錯誤數都比前一次多 (主要為索引錯誤)

Info:8957 資料庫檢查52個錯誤
Info:8957 資料庫檢查52個錯誤
Info:8957 資料庫檢查54個錯誤
Info:8957 資料庫檢查54個錯誤


DBCC CHECKDB (db_o, REPAIR_REBUILD)

Info:8957 資料庫檢查59個錯誤
Info:8957 資料庫檢查59個錯誤

無法修復

另外發生資料庫存取時間過長。

Info:833 存取超過15秒
Info:833 存取超過15秒

改跑
DBCC CHECKDB (db_o, REPAIR_ALLOW_DATA_LOSS)

Info:8957 資料庫修復60個錯誤
Info:8957 資料庫修復60個錯誤

修復了 60 個錯誤,又比上面 DBCC CHECKDB (db_o) 檢查的錯誤要多。

再跑一次:
DBCC CHECKDB (db_o, REPAIR_ALLOW_DATA_LOSS)

Info:8957 資料庫修復11個錯誤
Info:8957 資料庫修復11個錯誤

又修復了 11 個錯誤。

早上再跑一次
DBCC CHECKDB (db_o, REPAIR_ALLOW_DATA_LOSS)

Info:8957 資料庫修復結果
Info:8957 資料庫修復結果

終於沒錯誤了。

周二傍晚 db (原db1) 在事件檢視器有跳出資訊建議跑 DBCC CHECKDB ,但今天改跳出故障,建議跑 DBCC CHECKDB ,回頭翻了跳電前的 db_o 是有資訊事件建議跑 DBCC CHECKDB ,所以我想應該是還原時,把原先 db_o 的索引錯誤還原到 db1 ,利用午休的時間跑
DBCC CHECKDB (db, REPAIR_ALLOW_DATA_LOSS)
多次,直到沒有錯誤為止。

沒錯誤後,另外跑重建索引
DBCC DBREINDEX (DataTable)

但是晚上仍然發生建議跑 DBCC CHECKDB ,我有跑了

Info:825 建議進行資料庫檢查
Info:825 建議進行資料庫檢查


DBCC CHECKDB(db)

Info:8957 資料庫檢查0個錯誤
Info:8957 資料庫檢查0個錯誤

顯示 0 個錯誤,此外上面 LOCK 錯誤訊息持續出現。

目前找不到問題來源,懷疑可能跳電時,硬碟或 RAID 控制卡有受損,因為有些問題是持續存取時間過久,這次事件就是純練功修復資料庫了。

Categories: SQL, 工作點滴, 技術分享 | 標籤: | 1 則迴響

[Book] 讀書心得 – IoT物聯網無限商機:產業概論x實務應用


IoT物聯網無限商機:產業概論x實務應用
IoT物聯網無限商機:產業概論x實務應用

這本書最大的好處是把可能相關的領域內容都提了一遍。

從網路上搜尋資料,通常是東一撇,西一點,很難全面的看趨勢,容易掉到自己不熟悉的領域,或是以偏概全。

當然全面看過一遍後,可以看到 IoT 雖然快速大量發展五年了,但是普及率還是有限,我自己看是還是偏貴與不習慣。

物聯網對投資者來說,必要的總體成本必須下降,比如說因投資 IoT 後,客服成本或是生產成本等,最終呈現的成本應該是要下降,才會促進投資者花錢投資。

但現階段顯然成本仍然增加,雖然增加了應用方案,效益似乎沒想像中高,所以整體環境都在想踏入,但都沒有很有效踏入。

比如說 ETC 好了,大家理想上電子收費後,因為少了一堆收費員,高速公路的收費應該僅須要維護高速公路而降低人事費,所以應該過路費要下降,但實際上電子收費相關設備與維護人力成本高昂,導致過路費沒有明顯下降,甚至有些情況是稍微漲價,那麼不管技術或是理想,就會認為是錯誤的決策,甚至有圖利廠商的疑慮。

我在1992開始念類神經網路,1996的碩士論文也是類神經網路為主,2004在西雅圖參觀 Microsoft Home ,近十年都在能源監測領域,也建置規畫過實驗性質的智慧家庭系統,除了貴以外,還有很大的穩定性問題。

IoT 除了設備多,可能故障設備數量多外 (假設故障率不變) ,大部分是商用等級設備,不耐高溫,此外最麻煩的是維護人員需要專業人員。一個感應器沒回應,一般的維修人員完全不知道是無線通訊問題還是硬體問題,此外由於大量的 IoT 設備,就有設備代號對應問題,所以發生問題後,必須專業人員處置,但專業人員有限,使用單位就無法在第一時間完成維護。

IoT 在我看來,大家還在找出路,但已經有大者恆大的趨勢,不論是優先使用的,還是優先生產的,而初期投資的生命週期通常不長,每年都在革新換代,導致中小企業無力導入,大型企業也不會全面導入。

IoT 未來到底要怎樣走不知道,但必然是大降價以後才會大躍進,短時間內,應該還是叫好不叫座。

Categories: 圖書, 工作點滴 | 標籤: | 發表留言

[T-SQL] SQL認證帳號新增資料庫未正常掛入使用者


工作的資料庫其中一個資料表超過 2 億 2 千萬筆,但這個資料表常常用在 JOIN 上,導致工作日查詢網頁時,大概要拖到 20 秒以上,假日沒人用倒還好,大概 3 秒可以出來。

某個資料表超過兩億筆
某個資料表超過兩億筆

這個資料表存了超過兩百個專案的資料,所以考慮採專案切割的方式,將每個專案資料切到不同資料庫,再由各專案資料庫的資料表進行 JOIN ,減少維度障礙。

超過兩百個專案進行切割,換句話說就是要建立超過兩百個資料庫,所以打算建立完整的 T-SQL 語法,方便後續使用。

正常建立的資料庫使用者如下,考慮到管理問題,預設加入 [BUILTIN\Administrators] ,再加入自行建立的 SQL 認證的 [馬賽克B] ,以下簡稱 UserB 。

資料庫的使用者
資料庫的使用者

開發的時候用測試機來測 T-SQL ,使用本機 Windows 認證,所使用的 T-SQL 語法簡化如下:

USE [master]
GO
/* 建立資料庫 */
GO
USE [專案資料庫]
GO
/****** User [BUILTIN\Administrators] ******/
CREATE USER [BUILTIN\Administrators] FOR LOGIN [BUILTIN\Administrators] WITH DEFAULT_SCHEMA=[dbo]
GO
/* BUILTIN\Administrators Set db_owner */
/*
EXEC sp_addrolemember 'db_owner','BUILTIN\Administrators' /* Before MSSQL 2008r2 */
*/
ALTER ROLE [db_owner] ADD MEMBER [BUILTIN\Administrators]
GO
/* --分隔線-- */
/****** User [*******B] ******/
CREATE USER [*******B] FOR LOGIN [*******B] WITH DEFAULT_SCHEMA=[dbo]
GO
/* [*******B] Set db_owner */
ALTER ROLE [db_owner] ADD MEMBER [*******B]
GO


正常建立完成的 UserB 點選 [屬性] 可看到 [使用者名稱]、[登入名稱] 都如同 UserB 的內容,左下角的輸出畫面可以看到沒有錯誤。

正常建立的 UserB 帳號
正常建立的 UserB 帳號

測試完沒問題後,從我的電腦跑,變成遠端存取建立資料庫,但這一建立就發生錯誤。

遠端建立無法正常加入使用者
遠端建立無法正常加入使用者

起初發現是 UserB 無法加入這個資料庫,但用手動也加入不了,經詳細比對後,發現是 SQL Server 自動掛入的 dbo 帳號會變成:

[使用者名稱]=dbo,但 [登入名稱] =UserB ,然後 [登入名稱] 又不給我改回 dbo ,所以無法加入 UserB,只好砍掉重練。

經過多次測試,發現上面的 T-SQL 語法從分隔線處分成兩次執行,第一次執行時,SQL Server 會正常掛入 dbo 帳號,第二次執行就可以正常掛入 UserB 帳號。

目前要得到我要的資料庫安全性登入帳號的測試結論是:

  1. 本機使用 Windows 認證時,上面 T-SQL 語法可以同次執行
  2. 遠端使用 SQL Server 認證時,上面的 T-SQL 語法需要從分隔線處分兩次執行

原因我還沒找到,做個心得記錄,後面可以翻查。

本機 Windows 認證我測試過 SQL Server 2008r2、2012、2014、2016、2017 都正常。

Categories: SQL, 工作點滴, 技術分享 | 標籤: | 發表留言

在WordPress.com寫網誌.

%d 位部落客按了讚: