Author Archives: 璉璉

[Spam] 比特幣詐騙郵件不斷,eMail 密碼切記不要與外面註冊密碼一致


事情大概是 10 月初開始發生。

最早是一位先前信箱被入侵過的同事身上出現。

收到一封信內容大概是說:


電腦已經被入侵,掌握所有資料,在 48 小時內不付 8xx 元的話,將會加密電腦內所有資料,試圖改密碼也無用,電腦內有木馬,這封信就是透過入侵電腦而發送的。

信件內容說是透過入侵發送,檢查 Mail Server 該封信件的紀錄,是正常透過 SMTP 協定,從外面信箱寄進來,另外清查該位使用者改過密碼後,從公司外的連線至 Mail Server 的紀錄,都是該位同事手機連線,並無其他不正常紀錄。

之後清查該位同事電腦,整體看起來沒有獨立木馬存在的跡象,考慮該位同事先前信箱有過被他人入侵後才改密碼的狀況在,假定該位同事資安觀念不夠,還是決定將該位同事資料備份後,重新安裝作業系統。

隔幾日,該位同事又收到同樣信件,只是金額不同,仍然是八百多,決定不理他。

再隔幾日又多了幾個人收到,其中包含離職的稽核,前稽核離職後,信箱被設為別名,別名只能接收寄給前稽核的郵件,該帳號因為不實際存在於 Mail Server ,所以不能登入、不能寄信,所有 Mail Server 提供的服務都不支援,只有將信件轉給現任稽核會生效。如此一來,很明顯的是詐騙郵件。而一開始收到郵件的同事,開始收到日文版…

到了 10 月底,我也收到類似郵件了,這就跟廣告郵件一樣,所以我在 Mail Server 上依據郵件特徵直接在 Server 擋掉,只把阻擋紀錄通知給 IT 追蹤。11月初起,我收到的郵件開始說我的帳號密碼是 xxxx 了,例如下面擷圖郵件,是最新的內容 (註:文件內容一直更新,例如加入思科網通設備漏洞是新版的才有):

詐騙比特幣的郵件
詐騙比特幣的郵件

有密碼就搞笑了。

我自己密碼習慣分級處理,eMail 密碼與外面註冊密碼不會一致,避免註冊資訊外洩,或是網站管理者本身別有用心下,eMail 被登入資訊外洩。另外我在註冊習慣會登記到自己的 Excel 檔內,畢竟年紀大了,帳密又多,背不下來。

經過比對,同一組帳密我只用在三個網站登入用,考慮到對方可能會測試,我說明就不完全揭露網站細節:

  1. 一個國產 IC 晶片網站,大概2011註冊,2013以後沒在用
  2. 一個國內網址帶有 cpu 的網站,大概2011註冊,2013以後沒在用
  3. SMA一個分公司的論壇,大概2012註冊,2013以後沒在用

但是跟其他收到郵件的同事,網站1/2 雖然我沒再去了,IC 部分改由研發部門處理,但是收到郵件的同事都沒在用。而網站3 雖然其他幾個同事有可能用,不過問了一下,基本上是都沒在用,因為同事都去 SMA 官方主站,而我是因為在分公司論壇看到有人討論到未公開的通訊協定細節,才在該網站註冊後續詢問,分公司論壇我們公司只有我去看過。

算起來應該是沒交集,所以也無法鎖定是哪個網站外洩註冊資料。

由於都是註冊很久的資料,所以我想應該是對方購買的帳密資料庫包含了這三個網站其中之一的外洩資料。我個人偏向網站3 ,因為現在會收到詐騙郵件的同事,都是會處理到國外事務的相關人員,純粹國內事務的還沒收到詐騙郵件的案例。

從這個案例來提醒大家:

  1. 近期透過 eMail 詐騙比特幣案例橫行,自己要慎重閱讀考慮。
  2. eMail 的帳密絕對不要與外面網站註冊的一致。
  3. 重要會綁裝置或著資產的帳號,例如 Microsoft/Google/Apple 的帳號,不要拿來註冊其他網站使用,若有必要,密碼絕對要分開。
  4. 帳密最好在自己電腦用加密檔案紀錄,不要上傳到雲端空間,最多可放在行動裝置內,但關閉該目錄的自動雲端備份。

希望大家都別被騙去繳比特幣阿~~~

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

[iOS] 環境升級後,無法正常編譯 App


話說七月底完成 iOS 程式後,我就沒開過 MacBook Pro 。

老闆忽然嫌棄起 App 在 iPhone 上的顏色,所以由形象設計師不斷改版,直到老闆終於 OK 選定 Icon 後,昨天我把 MacBook Pro 打開。

太久沒開機了,昨天就是一直更新,XCode 從 11.x 更新到 12.0 ,再更新到 12.1。

今天早上開 Visual Studio for Mac 也觸發更新,等到更新完都快中午了。

把新的 Icon 置換進去,變更版號後,重新編譯居然發生錯誤。我一開始以為是我操作有問題,直到後來編譯沒改過的測試專案後也發現相同的問題。

主要錯誤是 ibtoold 引起,錯誤訊息為:

unrecognized selector sent to class

unrecognized selector sent to class

unrecognized selector sent to class

開了多個專案都在畫面出錯 (.storyboard) ,可能是啟動畫面或主畫面,似乎都是軟體啟動的第一個畫面。

眾裡尋她千百遍,終於找到,是 XCode 尚未更新完造成。當然不是的話可以試試 google 找到的其他方案。

先把 Visual Studio for Mac 關閉。

打開 XCode ,可以看到,雖然 App Store 那邊說更新完畢了,但是實際上尚未更新:

XCodeUpdate_02

完成 XCode 更新

按下 [Install] 讓它跑一下:

XCodeUpdate_03

更新 XCode 中

更新完成後版本為 10.1 。

XCodeUpdate_04

完成 XCode 更新

再開啟 Visual Studio for Mac 重新編譯就正常通過了。

 

 

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

[WU] 升級 Windows 10 1809 雜記


今天到 MSDN Subscription 下載 Win10 1809 ,發現 Win10 / WinServer / Office 2019 都有新增序號… 依往例,每天只能拉 10 組序號…

Win10 1809 跟 1803 一樣,分成 商用版 跟 客戶版,商用版有企業版沒有家用版,客戶版則有家用版沒有企業版,兩個版本都有專業版跟教育版,不過 1809 要用 DVD R DL 燒,1803 還可以用 DVD R 燒,就差個 300 MB 而已~

Windows 1809

Windows 1809

 

1809 x64 企業版我安裝近 3 小時,跟 1803 一樣,安裝完會複寫註冊資訊,所以一些圖檔軟體也會被改回預設值,會觸發部分軟體自動重新安裝,例如我的 Office 365 升級前是 Office 2016 Pro+ ,升完 1809 後,開 Outlook 發現工具列畫面變了,依據羅杯杯說法就是 Office 365 升級到 Office 2019 Pro+ 。

Office 365

Office 365

安裝好後,感覺比 1803 順,1803 剛開機完 svchost.exe 大概要跑 20 分鐘才會閒下來,1809 很快就正常了,不過還得觀察幾天。

第一次安裝好自動重開時,不要急著用吃硬碟資源的軟體,比如說我重開完急著做事,就開 Outlook ,被通知 Outlook 資料檔發生錯誤的訊息,但實際上是因為硬碟滿載,造成未正常載入相關檔案,等到硬碟存取量降下來後開 Outlook 就正常開啟了,其它就是很多設定被改回預設值,目前還沒碰上像 1803 那樣搞死人的地步。

這幾天若是有碰到問題再來更新這篇。

[10/06 23:27 更新]

微軟已暫停 1809 更新:

https://support.microsoft.com/en-us/help/4464619/windows-10-update-history

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

[RouterOS] 沒注意資安新聞就被攻陷的經驗


話說,案場因考慮工業路由器,大量使用 RouterOS ,在 2018/08 月初發布了相關資安新聞,沒注意,到了 09/12 先發現某案場展示網頁會發生 Timeout ,才發現被攻陷變肉雞了。

展示系統大量使用 HTML5 + SVG 來處理畫面,09/12 廠商訪談完,在大廳展示電視發現展示網頁顯示 script 逾時了,開始追蹤這問題,現場是一個雙向 512k 的 ADSL 專線,使用 RouterOS 的基地台,用 Winbox 登入檢查後,從 log 發現不對勁:

防火牆規則異動

防火牆規則異動

防火牆規則被改了?問過同事,沒人連過去。確定被入侵異動,一時之間不確定問題,先升級韌體,改回被異動的參數。

09/13 開始進行更進一步 log 檢視,原先 RouterOS 服務基本上都關閉,只保留 api-ssl / winbox ,原先想說 api-ssl 可能是原廠軟體的通道,但是從 log 看起來不是透過 winbox 軟體登入,查原廠說明:

https://wiki.mikrotik.com/wiki/Manual:API-SSL

靠腰,api-ssl 只有加密,但不認證,嚇了一跳,趕緊連線到各案場普查,由於不同 IT 設定,有些有開,有些沒開,發現有四成案件有被入侵的痕跡,但有些是沒開的,不見得是 api-ssl 問題而已,甚至有些案場被打開服務,使用其他服務登入。

趕緊 google 新聞,原來是 08/03 就有新聞發出,是透過原廠軟體漏洞入侵:

超過17萬台MikroTik路由器淪為駭客挖礦攻擊的跳板 https://www.ithome.com.tw/news/124977

所以展示網頁發生 script 逾時,是因為展示電腦在幫忙挖礦阿…

再找了幾篇文章

Mikrotik的Winbox的任意文檔訪問漏洞的PoC流出,漏洞公佈以後仍舊沒有引起網絡管理者足夠的重視 https://hk.saowen.com/a/8c1dd31786b20e8da4d39cd378ffd85552d89a8e7235b570e16aaace7e923090

近期RouterOS的几个漏洞说明 http://www.irouteros.com/?p=338

大概看出來,漏洞有很多,從 winbox 漏洞備份設定檔後,還可以透過公開金鑰反解出密碼,讓 RouterOS 可以被遠端登入… 解決的方案無他,就是升級韌體,已被入侵的連管理帳號都得改…

下面來看一些慘況吧~

這隻肉雞很慘,多方在上面交戰互相阻擋別人入侵,甚至時間伺服器都被改掉,偽裝舊的時間寫入的規則:

三方互相設定對方 IP 為阻擋清單

三方互相設定對方 IP 為阻擋清單

 

這就是幫人挖礦的嵌入網頁:

挖礦嵌入網頁

挖礦嵌入網頁

防火牆規則區除了 DNS 防禦被關閉 (紅框),也淪為駭客間互相阻擋的方案 (藍框)

DNS 防禦被關閉

DNS 防禦被關閉

IP Pool 也被改:

IP Pool 被新增

IP Pool 被新增

對應 IP Pool 的撥入規則也新增近來:

PPP 也被新增規則

PPP 也被新增規則

對應被加入的 VPN 帳號:

VPN 被新增帳號

VPN 被新增帳號

被加入的排程:

被加入排程

被加入排程

被加入 Script:

被加入 script

被加入 script

被加入 Layer 7 Protocol 規則:

被加入 Layer 7 Protocol

被加入 Layer 7 Protocol

還有 SOCKS 也被設定、加入 IP 等,甚至有些是底層被修改,在介面上完全找不到哪裡被改,當我改完規則後,居然被駭客改掉 admin 帳密,登不進去,只好換機,拿回來洗機重新設定。

看樣子 google 還要訂閱 RouterOS 資安相關訊息了…

對了,我們這幾台最早被入侵大概是在九月初,所以要是有看到新聞,其實還有救…

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

[H5] 偵測不同裝置的解析度


在 DHTML4 的年代,我常常用 VML 來處理未知螢幕解析度的縮放,到了 HTML5 的年代,當然就是改用 SVG 。

使用 SVG 處理縮放通常希望開啟網頁時,能自動縮放到最佳解析度,Windows 下還好除錯,行動裝置就很麻煩了。

Windows 裝置 IE/Edge 支援縮放,Chrome 則不支援。

原先寫的程式碼多半參考網路上的,各有出處,說法也不同,所以就發生 Android 正常時,iOS 就不正常,iOS 正常時,Android 就不正常。

所以乾脆用個除錯網頁分別讓不同瀏覽器去跑,下表是三個裝置 javascript 抓到的值,其中 IE11 的螢幕解析度 1920×1080 ,螢幕字型 125% (120 DPI) 。

IE11 Android 8.0 iOS 11.4
window.innerWidth 1536 1440 980
window.innerHeight 807 2240 1472
window.outerWidth 1550 360 0
window.outerHeight 878 560 0
window.screenX -7 0 0
window.screenY -7 0 0
window.scrollX undefined 0 0
window.scrollY undefined 0 0
window.pageXOffset 0 0 0
window.pageYOffset 0 0 0
window.devicePixelRatio 1.25 3 3
window.screen.width 1536 360 414
window.screen.height 864 640 736
window.screen.availWidth 1536 360 414
window.screen.availHeight 864 640 736
window.screen.deviceXDPI 120 undefined undefined
window.screen.deviceYDPI 120 undefined undefined
window.screen.logicalXDPI 96 undefined undefined
window.screen.logicalYDPI 96 undefined undefined
window.screen.systemXDPI 120 undefined undefined
window.screen.systemYDPI 120 undefined undefined
window.screen.pixelDepth 24 24 32
window.screen.msOrientation landscape-primary undefined undefined
document.body.clientWidth 1503 964 964
document.body.clientHeight 2555 5674 3201
document.body.scrollWidth 1848 4900 987
document.body.scrollHeight 2555 5695 3243

果然實作才是硬道理,可以得到:

實際解析度寬:window.screen.width * window.devicePixelRatio

實際解析度高:window.screen.height * window.devicePixelRatio

針對 Android 8.0 的分割視窗會發現 window.screen.height 變小,仍可使用 (分割時為 247)

至於最適化 (Auto fitting) 螢幕大小部分,我原先是先在 HTML5 的 HEAD 預埋:

<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, minimum-scale=0.1″ id="metaViewport" />

再透過 javascript 依 svg 圖面大小變更 metaViewport.setAttribute(“content", sViewportContent);

從網頁搜尋到的結果,一般是將 width=設定寬度, height=設定高度

自己整理表格後發現,用 sViewportContent = “initial-scale=" + scaleWidth; 即可。

使用 svg.width / window.screen.width 或 svg.height / window.screen.height 就看設計者要以寬度或高度為目標來調整。

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

[iOS] 上傳 App 到 App Store 供散佈


終於到這陣子最後一篇,上傳第一個 iOS App 真的很麻煩,開發還沒這麼多狀況,有些圖是完成後再補的,所以圖片的時間可能會有點錯亂。

這篇主要是依據微軟官方文件操作,再做點圖片心得分享,請務必參考官方文件。

將 Xamarin.iOS 應用程式發佈到 App Store https://docs.microsoft.com/zh-tw/xamarin/ios/deploy-test/app-distribution/app-store-distribution/publishing-to-the-app-store

上傳 App 之前,須先建立 App 密碼,可參考這篇建立:

使用 App 專用密碼 https://support.apple.com/zh-tw/HT204397

建立 App 密碼

建立 App 密碼

完成建立密碼後,會收到通知信,那個藍色的圈圈是寄來就這樣,我也是醉了,收件人帳號就在信頭,信中馬賽克好像沒啥作用。

收到建立密碼通知信

收到建立密碼通知信

從「將 Xamarin.iOS 應用程式發佈到 App Store 」步驟 11 開始,選擇手動佈建 [Manual Provision] ,再點選 [iOS Bundle Signing…] ,會跳出 [專案選項] ,這邊設定 [組態]、[平台]、[簽署識別]、[佈建設定檔] ,其中 [簽署識別]、[佈建設定檔] 參考前一篇 [iOS] 建立 App Store 簽名用的憑證給 Visual Studio for Mac 使用 完成。

設定編譯選項

設定編譯選項

從選單 [組建] > [封存以供發行]

選單封存與發行

選單封存與發行

點選 [簽署並散發]

簽署並散發

簽署並散發

點選 [App Store] ,並點選 [下一步]

儲存至磁碟並開啟應用程式產生器

儲存至磁碟並開啟應用程式產生器

依照編譯選項選擇 [簽署識別]、[佈建設定檔],並點選 [下一步]

佈建設定檔

佈建設定檔

點選 [發行]

存檔並發行

存檔並發行

點選 [發行] 後,會讓你選擇儲存位置,MacBook Pro 我不太會選位置,最後放棄讓它存在預設位置,我再用 Finder 管理它,其中圖上的 [標記] 建議不要點,因為可能會造成死當,我變成要把整個 [Visual Studio for Mac] 強制中止後重來。

存檔對話盒

存檔對話盒

如果沒有死當的話,你可以得到下面那個畫面讓你回到 [上一步] 重來。

發行失敗

發行失敗

如果你沒亂按 [標記] 讓它存檔在預設位置,就可以正常發行成功。

發行成功

發行成功

看到發行成功很容易誤會已經完成,其實只是把要上傳的 App 準備好而已,接著點選上圖的 [開啟應用程式載入器] 準備上傳。

樣板選擇器

樣板選擇器

點選上圖的 [遞送應用程式] ,從先前存檔的位置找出編譯封存好的 App。

開啟檔案對話盒

開啟檔案對話盒

選擇上圖[打開] 準備上傳檔案。

準備傳送檔案

準備傳送檔案

點選上圖 [下一步] ,點選 [傳送] 開始上傳檔案。

上傳檔案中

上傳檔案中

完成上傳。

AppUpload_15.1_UploadOk

上傳完成

告知上傳完成。

AppUpload_15.2_SendOk

表示已經上傳到 App Store

上傳完成後,不代表就完成了,還必須去 [App Store Connect] 網站,選擇 [我的 App] ,確認發行,這部分 [Visual Studio for Mac] 沒辦法代勞。

之後網頁會顯示等待審核,並會收到一封信表示完成建造過程。

完成上傳通知信

完成上傳通知信

沒事的時候會收到一堆狀態顯示 ReView 審核中的信件,很多,所以就懶得再貼了。我因為 App 一開始要輸入帳密,所以審核人員懷疑我是企業內部軟體,系統發信通知我要我上 [App Store Connect] 回應審核意見。

審核意見通知信

審核意見通知信

審核意見說依據 Guideline 2.1 要確認我的 App 是不是只給公司員工使用,我看半天,Guideline 2.1 並沒談到這件事,不過還是回說要給客戶用,員工只是其中之一。回完半天後就收到上架通知信了。

上架通知信

上架通知信

看起來上架審核應該是美國上班時間,因為除了系統自動郵件外,每次 eMail 通知信來,都是台灣凌晨在發。

總算,終於完成上架,步驟繁雜,只好自己留步驟圖,下次自救用。

 

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

[iOS] 建立 App Store 簽名用的憑證給 Visual Studio for Mac 使用


這篇圖多。主要是因為很繁瑣,不記錄下來,自己以後還要再找一遍資料,還是留下紀錄給自己看比較保險。

建立簽名用的憑證可以給公司所有 App 簽名,但是本篇後半段產生佈建檔設定部分會跟 App 產生關聯,所以先完成 App 開設會比較順,當然也可以先處理憑證建立後,再來進行 App 開設,再建立佈建檔,我自己第一次就是屬於後半部的方法,但是我覺得先建 App 設定會比較順。

App 開設要在 Apple 網站 iTunes Connect 網站填寫,此外,Visual Studio for Mac 的專案屬性也要一致,這部分微軟文件已經寫得很清楚了參考:

在 iTunes Connect 中設定應用程式 https://docs.microsoft.com/zh-tw/xamarin/ios/deploy-test/app-distribution/app-store-distribution/itunesconnect

在上面這篇連接中會看到需要將 App 的畫面擷圖上傳,所以我前一篇先放:[iOS] App Store Connect 上傳螢幕擷圖

在設定提交 App 審核前,這資料隨時可以修改,所以記得沒事就按下網頁內的儲存,避免設定時間過長,可能觸發網頁軟體的其他問題,導致一切從頭來。

這篇後續部分跟微軟文件這篇關聯很大,建議同步閱讀:

Apple 帳戶管理 https://docs.microsoft.com/zh-tw/xamarin/cross-platform/macios/apple-account-management

我推估這步驟通常一個公司一年大概要重複一次,接下來就開始吧。

在本機產生一個私密金鑰,在 Finder 搜尋 [鑰匙圈存取]。

鑰匙圈存取

鑰匙圈存取

從選單選擇 [鑰匙圈存取] > [憑證輔助程式] > [製作憑證]

選取製作憑證

選取製作憑證

替憑證取個好記的名字

憑證取名

憑證取名

確認製作憑證。

確認製作憑證

確認製作憑證

輸入憑證有效日期,預設為365天。這部份很奇怪,我輸入了3650天,過程中也是顯示10年,上傳 Apple 網站後顯示 1 年,重新製作也是一樣,就先使用預設值了。

輸入憑證有效日期

輸入憑證有效日期

輸入個人與公司資訊。

個人與公司資訊

個人與公司資訊

以下視窗基本上我都是按下繼續,所以就連續貼圖,不做文字說明。

憑證配對資訊

憑證配對資訊

密鑰用法擴充欄位

密鑰用法擴充欄位

延伸密鑰用法擴充欄位

延伸密鑰用法擴充欄位

基本限制擴充欄位

基本限制擴充欄位

主題替用名稱擴充欄位

主題替用名稱擴充欄位

這個類似IE匯入憑證時,選擇 [個人] 的意思,這就是說這個憑證有效範圍是使用這個登入 MacBook Pro 帳號為限。

指定憑證存放的位置

指定憑證存放的位置

完成憑證製作

完成憑證製作

到此本機憑證製作完成,若隨時要檢視憑證,可以在 [鑰匙圈存取] 中檢視。

檢視憑證

檢視憑證

接下來要將憑證匯出成為檔案,以便上傳Apple網站換成真正可替程式碼簽名的檔案,從選單選擇 [鑰匙圈存取] > [憑證輔助程式] > [從憑證授權要求憑證]

從憑證授權要求憑證

從憑證授權要求憑證

輸入憑證資訊

憑證資訊

憑證資訊

選擇存檔位置,不得不說,我在 MacBook Pro 每次要換路徑都有障礙,最後乾脆還是存在預設位置,我處理完成後再搬移到我計畫的位置方便管理。

選擇存檔位置

選擇存檔位置

完成存檔

完成存檔

接下來準備上傳到Apple,由於 IE11 在蘋果網站有的時候會出問題,為求保險起見,可以考慮用 Chrome ,我作圖是用 Chrome ,但第一次上傳時是用 IE11 。首先連線到開發者網站:http://developer.apple.com/

開發者網站首頁

開發者網站首頁

點選右上角的 [Account]

帳號中心

帳號中心

點選 [Certifates, IDs & Profiles] ,從左側選單或右側圖形連結都可以按,我習慣從左側選單連結。

從下面畫面左側選單選到 [Certificates] > [All] ,第一次使用時應該是空的,所以點選右上角的 [Add] 加入新的憑證。

憑證管理中心

憑證管理中心

由於是為了申請上傳 App Store 用的憑證,就直接選擇 [App Store and Ad Hoc] 。

選產品發布用

選產品發布用

憑證簽名要求的說明

憑證簽名要求的說明

上面只是一個告知網頁,直接按下 [Continue] 進入上傳憑證畫面。

選擇憑證檔案

選擇憑證檔案

上傳完憑證後,就會產生可下載的 .cer 檔案,如果沒在此時下載,也可以在憑證清單點選憑證後,在點選 [Download] 下載。

下載或移除憑證

下載或移除憑證

憑證到此完全申請完成,如果沒有需要考慮替App簽名,可以暫時擺一邊,但正常都是要簽名才會申請憑證,所以繼續往下走。

另外也會透過 eMail 提醒你完成憑證申請。

eMail 通知

eMail 通知

由於只是要上傳 App Store ,其他功能可以忽略不管,從左側選單選到 [Provisioning Profiles] > [All] ,第一次使用時應該是空的,所以點選右上角的 [Add] 加入新的佈建設定檔。

新增佈建設定檔

新增佈建設定檔

選擇 App ID,這邊要從 iTunes Connect 內已建立的應用程式才會出現在下拉式選單,所以前面才會建議先去 iTunes Connect 進行應用程式新增與設定再來進行。

選擇 App ID

選擇佈建檔的用途,一個憑證可以有多個佈建檔,所以自己要分清楚,當然忘了也可以從佈建檔清單看設定的內容。一樣,只管要上傳軟體用,所以選擇 [App Store] 。

選擇散佈到 App Store

選擇散佈到 App Store

選擇對應的憑證,憑證Apple限制只能申請兩個,我猜是考慮一年過期要續用時可以選,所以一年後應該是可以從佈建檔清單中編輯去改憑證。

選擇憑證

選擇憑證

完成後可下載佈建檔,不過在 Visual Studio for Mac 可以下載,這邊下載下來也不知道要扔哪,就直接完成即可。

開啟 Visual Studio for Mac ,並開啟目標專案。從選單選擇 [喜好設定]

選單選擇喜好設定

選單選擇喜好設定

從左側選單選擇 [Apple 開發人員帳號] ,並輸入帳密。

輸入 Apple 開發人員帳號

輸入 Apple 開發人員帳號

點選右側 [檢視詳細資料] 按鈕。

開發人員帳號

開發人員帳號

登入後會自動下載憑證與佈建設定檔,若網站上有更新,可以點選 [下載所有設定] 檔按鈕。

完成後的佈建設定檔

完成後的佈建設定檔

到此基本上是完成App簽名前,跟憑證相關的設定,下面另外補充我自己的錯誤狀況。

我在  iTunes Connect 內建立的應用程式資訊與 Visual Studio for Mac 專案屬性有大小寫不一致情形,所以一開始狀態顯示不在 Keychain 中,當我改完專案屬性後,狀態才變成有效。

狀態錯誤

狀態錯誤

測試過程中,發現在此點選建立憑證,可以直接完成佈建檔前所有程序,包含從 [鑰匙圈存取] 到網站上傳憑證與下載匯入,忽然覺得前面一堆步驟做的沒啥意義… 不過他會自己取的名字,如前面圖上後面有括號 (Supportde-MacBook-Pro.local) ,對於名字有點潔癖的我稍感安慰…

快速建立憑證

快速建立憑證

特別放最後一張圖的用意就是…

#不能只有我看到 #不能只有我嘔到

 

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

[iOS] App Store Connect 上傳螢幕擷圖


在微軟線上文件:在 iTunes Connect 中設定應用程式

https://docs.microsoft.com/zh-tw/xamarin/ios/deploy-test/app-distribution/app-store-distribution/itunesconnect

有提到,「盡可能使用真實、高解析度的 Retina iOS 硬體 (而不是在 iOS 模擬器中) 拍攝螢幕擷取畫面。」,但大多數人都不可能買實機去測試,因此只能用虛擬機擷圖。

上傳圖片的位置

上傳圖片的位置

App Store Connect 中,點選到耀上傳的應用程式,其中,iPhone 5.8 是可留空,必須上傳的是:

  1. iPhone 5.5″ : 可選用 iPhone 8 Plus,1242×2208 pixel
  2. iPad 12.9″ : 可選用 iPad Pro,2048×2732 pixel

選用 iPhone 8 Plus 虛擬機擷圖時,務必要變更解析度為 [High Quality] ,預設為 [Device Default] ,會依據虛擬機在螢幕上的大小自動調整解析度,因此只有選擇 [High Quality] 時,才會使用實體解析度。

iPhone 8 Plus 解析度

iPhone 8 Plus 解析度

調整好後,就使用 [New Screen Shot] 或是熱鍵 [Command+S] 擷圖,擷圖會自動產生在桌面上。

iPhone 8 Plus 擷圖

iPhone 8 Plus 擷圖

同樣,選用 iPad Pro 虛擬機擷圖時,變更解析度為 [High Quality] 。

iPad Pro 解析度

iPad Pro 解析度

同樣使用 [New Screen Shot] 或是熱鍵 [Command+S] 擷圖。

iPad Pro 擷圖

iPad Pro 擷圖

檢查螢幕擷圖是否符合 Apple 的要求,當然不符合的話,上傳就會被踢。

一開始不知道要調 High Quality ,就被 App Store Connect 踢,就紀錄一下提醒自己。

 

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

[iOS]補充:在 MacBook Pro 上安裝 fastline 給 Visual Studio for Mac 使用


在使用 Visual Studio for Mac 開發 iOS App 時,需要安裝 XCode 及 fastline 一起運作。

XCode 比較簡單,在 App Store 下搜尋安裝就結束了。

fastline 則須自行下載安裝,步驟請參考:適用於 iOS 的 fastline 簡介

https://docs.microsoft.com/zh-tw/xamarin/ios/deploy-test/provisioning/fastlane/index

這篇名為補充,就是補充文件上不清楚的。圖中馬賽克的部分,是在 MacBook Pro 裡的登入帳號。

參考「適用於 iOS 的 fastline 簡介」步驟 3,裡面提到按 [Control] 鍵,這步驟是按 [Control] 鍵不放,滑鼠右鍵選單選擇 [打開] 即可,安裝畫面如下。

安裝 fastlane

安裝 fastlane

參考「適用於 iOS 的 fastline 簡介」步驟 4,要執行 [which fastlane] 是要透過終端機來執行,可使用 Finder 輸入 [終端機] 來開啟使用。

找到終端機

找到終端機

第一次安裝,是找不到 fastlane 的,如果電腦夠新,也沒有 [.bash_profile] 這個檔案,因此針對第一次安裝的,可改用下面操作:

a. 使用 [ls ~.bash_profile] 檢查設定檔案是否存在。ls 類似 Windows 中的 dir 。

檢查設定檔案是否存在

檢查設定檔案是否存在

如圖,[No such file or directory] 表示沒有這個檔案或目錄,因此輸入 [cd ~/] 改變目錄位置。

b. 然後使用 [vim .bash_profile] 來編輯產生一個新的檔案。

輸入路徑

輸入路徑

輸入 [i] 下方會出現 [– INSERT –] 進入插入模式,參考「適用於 iOS 的 fastline 簡介」步驟 6,輸入 [export PATH="$HOME/.fastlane/bin:$PATH"],如上圖。

c. 按下 [esc] 鍵,離開插入模式,輸入 [:wq] 如下圖,即可存檔離開。

存檔離開

存檔離開

 

d. 輸入 [source .bash_profile] 重新載入,輸入 [echo $PATH] 檢查路徑。

路徑已加入

路徑已加入

可以看到在步驟 c 中輸入的路徑出現在紅色框框處。參考「適用於 iOS 的 fastline 簡介」步驟 7,輸入 [which fastlane] 就會出現 fastlane 的路徑。

若只是更新 fastlane ,基本上就不用在執行上面步驟了。


在已經申請好簽署程式碼的憑證或是有變更時,還要透過 fastlane 更新憑證。這部分可參考:適用於 iOS 的 fastlane – cert

https://docs.microsoft.com/zh-tw/xamarin/ios/deploy-test/provisioning/fastlane/cert

如果只要上傳 App Store ,不需要管上面文件的其他部分,只要執行 [fastlane cert] 即可,如下圖。

讀入認證資料

讀入認證資料

中間會要求輸入開發者帳號的 Apple ID,需與蘋果網站一致。

iOS 上傳軟體步驟很繁瑣,為了自己下次能順利重做,自己寫 blog 是最容易記住跟反覆查閱的方案。

 

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

[iOS] 註冊一個開發者帳號


在使用 Visual Studio for Mac 開發完成後,要把上傳第一個公司的 App 之前,大概要以下幾個步驟:

  1. 創建一個蘋果帳號 (AppleID)
  2. 將此帳號註冊為開發者
  3. 申請 D-U-N-S Number
  4. 註冊公司資料
  5. 完成付費

到此開發者帳號完成。

接下來要註冊公司資料、建立憑證後,才能建立第一個程式的代號 (AppID) ,填寫 App 資料、上傳截圖、App 進入審核,這篇主要分享是註冊開發者帳號為止。

如果有 Apple 的裝置,基本上一定會有蘋果帳號,這樣才能在 App Store 下載軟體,通常這個帳號是個人的,如果是要處理公司的,我建議用公司 eMail 來建帳號。

我個人建議建帳號在 https://appleid.apple.com/ 進行,因為這個網頁有完整的繁體中文支援。

登入畫面,點選右上角可建帳號

登入畫面,點選右上角可建帳號

建帳號時,一般來說可能會輸入中文姓名,但開發者帳號請務必使用英文姓名,也可以用羅馬拼音或萬國拼音,或是直接使用護照姓名。

新建帳號

新建帳號

建帳號需要完成認證才能登入,如果是透過裝置建帳號,會使用簡訊發送認證號碼,如果是採用公司信箱建帳號,會透過 eMail 發送認證號碼,eMail 發送認證號碼若因為 Spam 規則導致過久未收到信,在 AppleID 網站逾時後,先前輸入的帳號資料會被拋棄,必須重新建帳號,不能由原先新建帳號繼續輸入認證碼。所以如果超過 5 分鐘沒收到 eMail 發送的認證信,就趕快從介面上選取重新發送,一般 Spam 規則在第二封信發送時,就會允許兩封信一起進來,輸入最後一封信的認證碼即可,輸錯也沒關係,只要沒逾時,可以再改認證碼。

建立完成帳號後,用相同帳號登入 https://developer.apple.com/ ,這個網站目前只有英文,第一次登入會要求接受蘋果開發者協議。

Developer Agreement

Developer Agreement

點選右下角 [Submit] 接受,再點選 [Join the Apple Developer Program] 。

Join Apple Developer Program

Join Apple Developer Program

點選右上角 [Enroll] 開始進入開發者帳號註冊,搞到現在才開始,真是夠了。

註冊開發者帳號

註冊開發者帳號

接者進入引導畫面,引導畫面可選簡體中文,若英文不好也可以看簡體中文,這個時候可以切換語系,按下 [Start Your Enrollment] 繼續。

開發者帳號註冊引導畫面

開發者帳號註冊引導畫面

不得不說,蘋果網站支援 IE11 的部分常常出問題,如果原先 AppleID 不是兩步驟驗證的帳號,這邊畫面會跳警告畫面,但在 IE11 是全白畫面,ㄧ整個不知所謂,改用 Chrome 繼續才能正常看到,如果 IE11 看不到畫面,先回到帳號管理,看看帳號安全是否啟用了兩步驟驗證。

需要啟用兩步驟驗證

需要啟用兩步驟驗證

之後輸入公司資料,申請 D-U-N-S Number,這部分因為資料必須遮掩,只有上半截:

申請 D-U-N-S Number

申請 D-U-N-S Number

申請完畢後,大概幾分鐘就會把 D-U-N-S Number 的郵件發送到信箱。

收到 D-U-N-S 信件

收到 D-U-N-S 信件

點選郵件內的 [Enroll now] 繼續完成公司帳務申請,裡面有要填 D-U-N-S Number ,大部分都是個資法保護範圍,就看最後面 TaxID ,我只在這邊看到可以填統一編號。

選項輸入:填入統一編號

選項輸入:填入統一編號

完成表單後,大概幾分鐘可收到公司完成註冊的 eMail 通知,下半截都是公司資訊,就跳過了。

收到公司完成註冊

收到公司完成註冊

 

我建帳號時,因為不知道有剛剛說的要求,所以我是用公司資訊部的化名建帳號,這個化名帳號用在 Google Play / Youtube / Facebook 企業帳號 / MacBook Pro 新機註冊上,所以如果不做開發者帳號申請的話,純粹設備管理用化名是沒啥關係。我因為一開始姓名輸入中文,所以在審核資料時,被退,發了一封信通知我要改名。

要改英文名阿

要改英文名阿

周一早上登入網頁修改為羅馬拼音姓名後,回覆這封郵件,並註明 Case Number ,周二早上收到確認改名信件後,約 20 分鐘後接到疑似大陸口音的客服人員人工電話認證,確認個人與公司資料,索要第二個緊急連絡人資訊,特別是公司英文全名、第二緊急連絡人英文全名,客服人員有說,英文名可不用羅馬拼音或漢語拼音,慣用的英文名亦可,所以第二緊急連絡人直接用 丹尼斯 姓 的方式電話登錄,電話掛掉後約 5 分鐘就收到完成郵件。

註冊已接受

註冊已接受

點選 eMail 裡面的 [Review now] 準備進入付款流程。

檢視相關合約

檢視相關合約

左上角有 [Download] ,這內容有 78 頁的 pdf 檔案。

繼續進入下一步付款,一年就要新台幣 3400。

新台幣 3400

新台幣 3400

 

選擇用我的信用卡付款,下面是個人資料就跳過了。

信用卡付款

信用卡付款

 

進入下一頁可輸入公司發票資訊。

輸入公司發票資訊

輸入公司發票資訊

確認後,幾分鐘內就會收到 eMail 的感謝消費信件。

感謝訂購

感謝訂購

大概 20 分鐘左右會收到詳細訂單資訊。

詳細訂單

詳細訂單

約過半天會收到電子發票。

電子發票

電子發票

如果有要看電子發票長啥樣,大概就是下面那個樣子。

電子發票

電子發票

從註冊帳號到完成付款扣掉假日的話,大概就花了我四天。回想起 google play 商店註冊付款就輕鬆多了。

接下來還有開憑證、App 要上傳,蘋果真難搞阿~

 

 

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

[iOS] WebView 加上回前頁的手勢


在 Android 因為本身就有回前頁的功能按鈕,因此在以 HTML5 網頁為核心的行動裝置軟體本身並不需要做特別設計。

在 iOS 如 iPhone/iPad 只有下方的 Home 鍵,因此需要考慮一個方式,不管網頁如何跑,都能有回前頁的方案。

一般來說,在 iOS 大多數的軟體不是使用導覽工具列處理,就是利用從右往左滑的翻頁手勢,代表回到上一場景。

因此只要利用這個方向使用從右往左滑的翻頁手勢,代表網頁回前頁的功能。


public override void ViewDidLoad()
{

// 略

var swipeBackRecognizer = new UISwipeGestureRecognizer(HandleSwipeGoBack);
swipeBackRecognizer.Direction = UISwipeGestureRecognizerDirection.Right;

WebView.AddGestureRecognizer(swipeBackRecognizer);

}

void HandleSwipeGoBack()
{

WebView.GoBack();

}


假定畫面上已經有一個 WebView 控制項,就可以在載入事件中直接加入 WebView 物件變數的手勢設定。

參考:https://stackoverflow.com/questions/43779824/how-to-swipe-back-in-xamarin-ios

 

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

[iOS] WebView 瀏覽 http 的安全性設定 – Visual Studio for Mac


去年做 Android 的 App ,今年老闆要我做 iOS 的 App 。

我的大部分還是靠 HTML5 網頁呈現即時資訊,所以我主要只要把 App 包個 WebView 即可。

一開始我是在 Xamarin.iOS 大分類下看說明學著寫,例如這個 WebView:

https://docs.microsoft.com/zh-tw/xamarin/ios/user-interface/controls/uiwebview

我一開始以為我自己看得很透了,直接開始寫,但是怎樣都卡在連不上我的手機網頁,只好從上面網址抓線上範例來測試,範例網址的確可以正確呈現:

https://xamarin.com/

但是我只換網址為我的手機網頁就不行,畫面全白… 我開始鎖定是 http 跟 https 的差異。一找,果然在說明書找到:

https://docs.microsoft.com/zh-tw/xamarin/xamarin-forms/user-interface/webview

這個網頁是介紹 iOS/Android/Windows Phone 三種行動裝置共用的設計部分,在網頁中可以看到,iOS 特別註解從 iOS 9 以後安全性變更,預設不能瀏覽 http ,要修改安全性設定…

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

 

冏… 為啥 iOS 的特殊設定不是放在 Xamarin.iOS 下,而是放在 Xamarin Forms 下…

但是又碰上個難題,我是直接在 MacBook Pro 下安裝 Visual Studio for Mac ,沒有另外安裝純文字編輯器可以直接輸入安全性規則,比對原始碼內容,在介面上測試輸入如下:

設定網址安全性

設定網址安全性

重新編譯執行,果然可以正常瀏覽 http 網址。

編輯步驟:

  1. 在最下方點選 [新增項目]
  2. 類型選 [字典]
  3. 編輯項目名稱改為 NSAppTransportSecurity
  4. 在屬性 NSAppTransportSecurity 下方點選 [新增項目]
  5. 類型選 [布林值]
  6. 編輯項目名稱改為 NSAllowsArbitraryLoads
  7. 值 改為 是

存檔後會跟上圖一樣。

微軟網站的線上手冊沒考慮直接使用 Visual Studio for Mac 編輯,所以只能自己試啦。

可以看到專案名叫做 HelloWebView … 跟 Hello World 差不多的意思~~~

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

[AI] 關於類神經網路的學習經驗分享


話說五月下旬在:

台灣「人工智慧」社團 https://www.facebook.com/groups/Taiwan.AI.Group/

回了一篇落落長的文,要找的時候才發現被砍文了。
在別人的地盤發文的缺點就是刀在人家手上,想砍隨便砍…

看這張擷圖,我在回這篇前幾天寫了一篇落落長的回文,在這篇回應時提到另一篇給樓主看,兩天前要找已經找不到了。

有圖有真相

有圖有真相

我也忘了那篇不見的文章在講啥,就輕鬆分享一些我的想法吧。

1992 (民81) 升大三的暑假,我參加了我唸研究所指導教授的研究生 meeting ,就當成研究會好了,我還記得陳德源學長念混沌 (chaos)、劉業主學長負責念模糊 (fuzzy),還有幾個學長念啥我忘了,一個負責專家系統,我負責念類神經網路 (ANN) ,這是我最早接觸人工智慧 (AI) 的年代,當時念類神經網路應該是一本倚天出的電腦書,那本書大概只有概念,沒辦法依據這個概念去實作。

1994 (民83) 碩一上,去成大電機所念碩博合開的類神經網路,授課教授規定作業都要交程式碼跟運行結果,所以我就買了葉怡成教授的類神經網路,那時候葉老師的書是有 C的程式碼,我則是看懂後,改用 Quick Basic 4.5 寫作業,果然,實作才是王道,我終於開始入門了。後來葉怡成老師新改版的書已經抽掉程式碼。

碩士作業 類神經網路原始碼

碩士作業 類神經網路原始碼

碩士班搞了很多東西,主要包含 GIS 跟 NetFlow Programming,到了碩二下的三月,指導教授叫我列出來得及畢業的論文方向,並簡易試作,其中網流規劃我是計畫專任助理,會跟計畫成果有重疊,所以碩士論文就決定是類神經網路。

四月春假把原先的 QB 程式碼改用 Visual Basic 3 改寫後,每天晚上研究室的多台電腦都被我借來做算不同案例的批次學習,一早我再去每台電腦把計算結果拷貝到電腦進行分析檢討。

我的碩士論文是從曾文水庫九個電傳雨量站去預報未來一小時後曾文水庫的進水量,內容可到我個人網站找,網誌這邊沒有。

一開始滿白目的,犯了一個通盤的錯誤,所以我學習訓練的結果我總合來說,不用學習就可以使用公式:
f(t+1)=f(t)
來取代。

認真去看很多論文,其實都犯了這個錯誤,只用觀測量去推估預測量,例如預測一小時後,得到的結論是預測得很好,預測值只落後觀測值一小時。這種結論其實就是:
f(t+1)=f(t)

好在那時有念時序列分析,當我自己得到跟別人相同結論:「預測得很好,預測值只落後觀測值一小時」時,我是很洩氣,為啥大家做的都差不多,那到底用 ANN 還有甚麼意義?看著看著就想到時系列分析的 AR 模式,然後回想到非線性規劃,我就悟了。

這個狀況在五月初發現,說實在的,以碩士論文程度來說,沒發現也不會怎樣,更不要說那個年代沒幾個人懂,繼續往下做也沒關係,反正就是多一篇垃圾,當然發現得早就是指導教授會要我改… 所以我在 BPN (倒傳遞網路) 裡面加入了不學習的輸出節點當成系統內能,再轉入下一個時段的輸入節點。

這邊就要說,如果使用現成的套件,是不可能自己改架構的,學習不可能允許一個輸出值不被控制,所以能的話還是自己開發比較好,架構可以隨意調整,學習目標也可以任意變動,前期的值域,選擇的反映函數,輸出的映射,學習的目標函數,參數的最佳化等,才能自行變動。

再忙到七月論文口試之前,又體驗了過度描述 (over fitting) 問題。

用基本的數學原理來看問題。
一條變數、一條方程式可以得到一個唯一解。
所以當 n 個變數時,至少需要簡化後方程式還有 n 個方程式才能得到唯一解。
若小於上述條件時,將為無限多組解,當大於上述條件時,將得到近似解。

這段說得很饒口,我再舉一個簡例,大家都會線性回歸吧?線性回歸直接有公式算,在 Excel 只要在圖上按一下滑鼠右鍵就可以加入。
y=ax+b

有兩個變數 a, b
當只有一點 (x1,y1) 時,可以決定出無限多條直線方程式。
當有兩點 (x1,y1)、(x2,y2) 時,可以得到唯一一條直線方程式。 (這兩行是國中數學)
當有三點 (x1,y1)、(x2,y2)、(x3,y3)、…、(xn,yn) 以上時,可得到一條近似方程式最接近所有的點,也就是回歸方程式。 (這行是高中數學)

所以從上面的簡例可以知道,要有一個正確解,至少方程式要大於等於變數量,你才能得到唯一解或近似解來接近真正解,而不是無意義的無限多組解來拚運氣。

以 BPN 來說,參數量很好計算,是依據反應函數方程式來推,所以一層隱藏層就是 3 次方的參數量,而要學習的數據有限,所以只能透過降低參數量來改善過度描述的問題。

比如說一個七次方程式如果因為曲率變化不大,我們可能可以降階到改用三次方程式描述這個函數,所以就減少了四參數。

因此,我需要修剪我的 BPN ,把不重要的因子去掉,保留重要的因子進行分析,所以透過敏感度分析後,把影響不大的變數優先移除掉,以確保我的變數量小於我要學習的組數。

如果是說倒傳遞網路 (BPN) 的批次學習,我的理解是參數量x6 是最少的批次學習尺度,參數量的計算是 神經元數 + 兩兩層數相乘,假設是標準的超越函數,原因是依據數學方成組理論來,變數大於方程組,無限多組解,變數等於方程組,唯一解,變數小於方程組 在目標函數下跑最佳化才有意義,也就是說學習才有意義。大於參數量 是有義解,3 倍學習量是建議最小值,如果是高度非線性,例如三角函數,至少需 6 倍學習量才能良好的描述,所以學習的筆數少於參數量,從數學來看是無義解。

我是覺得當時我碩士論文針對 ANN 找到這些重點算滿大貢獻的了,不過青睞的人不多,還好葉怡成教授看上了,還發個 eMail 給我說要放到參考資料內,我 Outlook 內還有留 1997/11/21 回給葉老師的信…

碩士論文全文可到臺灣博碩士論文知識加值系統下載:https://ndltd.ncl.edu.tw/

鄭子璉,「分佈型類神經網路降雨逕流模式之研究」,碩士論文,國立成功大學水利及海洋工程研究所,民國 85 年 6月。

當然直接在臺灣博碩士論文知識加值系統可以搜尋到更多其他人的論文,做研究這個網站很重要。

當兵的時候,指導教授有要我把論文精簡後投研討會論文:http://www.tlcheng.tk/Paper/ANNRunoff/97topic.htm

當兵的時候,慢慢的想通所謂的學習,就是等同參數最佳化,就是非線性規劃的一種,ANN 通常採用的反應函數都是超越函數,透過微分 (牛頓法) 得到參數變化率的斜率,針對該斜率修正參數,逐步逼近最佳參數,達成最佳學習。

這裡面又有兩個關鍵點:
1. 參數最佳化
2. 評估函數 (目標函數)

首先先談參數最佳化。
牛頓法由於透過斜率為 0 來逼近最佳解,從高三數學教微積分就會教到,這會掉到區域最佳解。所以 ANN 透過多次亂數為起始值進行學習,來盡量找到全域最佳解。
非線性規劃屬於數學規劃的一種,而非線性規劃裡面談到最多的就是怎樣閃掉區域最佳解,所以為了解決這個問題,發展出多種參數逼近的方式。
在人工智慧裡面有個旁支是遺傳演算法,遺傳演算法若從非線性規劃的角度去解釋的話,可以當成格網縮放法 + 隨機格網,可以找到很多研究關於類神經網路與遺傳演算法的混和應用,我個人對於那種把兩種方法分兩步驟用的,沒有感覺,我認為拿遺傳演算法來做學習的,才叫做混和應用。
比如說牛頓法的原理是微分斜率為 0 ,重點就是連續可微。但是實際的應用大多數是有界的,就會產生不連續面,也就是不可微分點,如果還硬用牛頓法硬套,很大的可能結果是一直落在邊界附近的區域最佳解。
這種情形數學理論上來說,應該改用可處理有界或是不連續的非線性規畫法來推參數,也就是所謂的學習,而不是直接用既有的函數庫硬套學習,牛頓法如果能成為通解,後面也不會有一堆數學家研究非線性規劃的方法冒出來。
當然,非線性規劃有很多方法,用其他方法來取代牛頓法進行學習都是提高 ANN 的價值,回到老問題,想要做到這件事,就得自己開發軟體。

其次很重要的是評估函數。
大多數 BPN 可能會用均方根誤差來做評估函數,均方根越小,就認定參數越好,均方根縮小的曲線,就被稱為學習曲線。
很多軟體允許使用者選擇評估函數,但是也是有限的幾種。
從前面討論的線性回歸來看評估函數,線性回歸的公式應該是高二下在教,是利用 y 軸的最小距離平方法來推導,又稱最小平方法或是最小二乘方法。
均方根顧名思義,就是把誤差開根號取平均,最小平方法就是把誤差取平方。兩個在應用上的差別是容易受少數特異點影響,而造成回歸式改變,而均方根誤差,則是因為不受少數特異點影響而改變。
舉個例子好了,比如說要預測雨量,以南部地區來說大部分的情況下是不下雨的,只有少數情形是下雨。所以我不用任何 AI 模式或衛星雲圖,我直接給你 f(t+1)=0 ,也就是說我永遠預測未來一小時後降雨量為 0 ,我的準確率可達 98% 以上,因為南部下雨天數少於 60 天,所以算起來超過 98% 是不下雨的,那麼我到底準還是不準?以降雨預測資料進行學習,若使用均方根誤差,則預測的降雨會偏向 0 ,若使用最小平方法,則預設的降雨會比較大,因為小值的誤差,平方後幾乎沒影響,大值平方後影響就會很大,所以預測的結果就會跟著變化。
拿線性回歸來玩,可以玩甚麼?不要再套用線性回歸,而改用非線性規劃來推估
y=ax+b
的 a, b 兩參數。
比如說就用最小均方根誤差、最大相關係數來比。
我找到了一篇剛好在討論這件事,也用了線性回歸來檢討:
機器學習大神最常用的 5 個回歸損失函數,你知道幾個? https://buzzorange.com/techorange/2018/06/22/computer-learning-5-tips/

從輸出資料的特性,需正確選對評估函數,再使用此評估函數進行參數最佳化 (學習) ,整個設計的模型才會有意義。

用非線性規劃去做 ANN 的參數最佳化是退伍後才領悟的,放在前面是為了比較好的說明,當兵時主要想通的是評估函數這塊。退伍後,回到成大做研究助理,考博士班,所以回學校後就繼續參加研究會,那時相關的論文就多了。

我 ANN 的 VB3 原始碼先給一位直升碩士班的大四吳學弟做直升生的專題研究。

念博士班以後,把我原先的 ANN 模式升級到 VB6 後,幫一個無心唸碩士的學弟做颱風降雨預測。 (http://www.tlcheng.tk/Paper/rain00/rain00.htm)

類神經網路的 VB6 原始碼

類神經網路的 VB6 原始碼

又到資管及工業管理研究所去念數學規劃,才把這塊讀通。到了博三升博四的那年暑假,指導教授要我自己列研究方向決定博士論文,我列了六個方向,其中類神經網路部分,當時有個逢甲來的博一陳學弟碩士做這塊,指導教授要我讓給學弟,最後依據系上大老蔡教授的建議下,走第七個方向 Hydro-Information ,所以才把人工智慧擺在一旁。

AI 人工智慧,在現代資訊技術進步下,應該明確的重新定義。

人工智慧的核心在模擬思考,只會計算的,那叫做計算機 (computer) 。
人腦不是記憶龐大就會產生智慧,更不是透過雲端查詢問題解決方案 (你以為打電話給廠商客服就算你有智慧嗎?)
人工智慧的
第一步是建造出模擬人類思考的正確模型,類神經網路只是簡化後的 Lite 版。
第二步是正確思考。
第三步是獨立思考。
第四部是創造性思考。

換種想法吧,就像養小孩,第一步老天爺做完了,所以第二步是你要教小孩甚麼是對的,第三步是你要信任小孩做正確的事,第四步是他能創造出新的價值。

所以 AI 的核心在第一步。
那麼跟雲端有啥關係?是認為目前電腦的計算速度跟儲存速度比不上人腦嗎?
演算法建模並驗證完成後,成為一個穩定的產品時,才是考慮雲端的時機,就跟檔案空間一樣,一台電腦只能服務你,一台雲端可以服務無數的你。
開發測試 AI 是小範圍的事,已開發完成的 AI 服務大眾才需要雲端,至少是第六步以後的事。

很多人把 AI 過度神化,我就問個問題,我現在要算 4 個數字的平均。
麻煩使用 AI 模型建立平均的架構,我要求也不高,算出來的平均誤差在 1% 以內就好。

ㄜ…

我以前玩過,會讓你懷疑人生,不是,是懷疑所謂的人工智慧。這種類型的硬要凹人工智慧的話,應該改用專家系統做,當然啦,平均直接用個函數就算出來了,是誰教你用所謂的人工智慧做?當然未來希望能整合進人工智慧裡,那就是要像人腦一樣,分理性跟感性,專家系統做理性,類神經網路做感性。

就跟幾年前雲端大熱一樣,雲端不就是伺服器(群)?改個名詞而已。

目前的人工智慧比較流於前人開發好的架構去套用,比如說人臉辨識的架構去套用不同的人臉沒啥問題,你拿來用衛星雲圖預測颱風路徑試看看。

人工智慧的模型、評估函數、參數最佳化、反應函數都是實務應用的重點,目前並沒有標準化的模型,深入理解後架構出來的東西才有意義。

不要跟幾年前雲端一樣,一頭熱不知道在熱啥。

 

Categories: 技術分享, 決策支援系統 | 標籤: | 發表留言

[Outlook] iOS 寄來的信件亂碼


從開發者的角度來看,貧果的技術真的很差。

iOS 都到 11 版了,它的內建郵件軟體還不能設定寄件編碼。

依據 RFC 多媒體郵件 MIME 規範,信頭要標記郵件編碼,軟體才能正確的解碼。

關於 MIME 信件格式架構圖可參考這篇:Outlook 亂碼問題

在台灣最常碰上的就是從 iPhone / iPad 寄來的郵件是亂碼。

今天同事丟來一封信,無法辨識,從關鍵字來看就可以找到 iPhone 發出。

Outlook 2016 變更編碼

Outlook 2016 變更編碼

註:圖上破碎的字塊是故意圖形處理,避免郵件被人工解碼。

早先的 Outlook 版本,收信時就會將信件轉成 Unicode 編碼,如果轉碼錯誤是沒救的。

在台灣由於預設編碼通常為 big5 ,iOS 當出現日韓簡罕時,可能是選字造成 (廢話,一堆長很像的小字,不能分辨是繁體或簡體也是正常的),可能會自動採用簡體來編碼郵件,Outlook 還可以設定使用外寄編碼,例如 utf-8 ,就不會有解碼問題。

收到亂碼信請千萬記住,是寄件端問題,寄件端未依規範編碼,導致收件端無法採用正確解碼,只能依照電腦預設編碼解碼,要改編碼時,優先依照寄件者國別去猜,其次是常用編碼,例如 utf-8 ,當然幾大語系也是猜測重點。

  1. 在 Outlook 2013/2016 可以依照上圖變更編碼,選單的 [動作] > [其他動作] > [編碼] ,以這篇來說改用 簡體中文 就可以解碼。
  2. 如果沒有 Outlook ,我個人習慣都會安裝 Live Mail 來檢視與調整,從 WebMail 下載原始郵件為 .eml 格式,再給 Live Mail 解碼。
  3. Live Mail 在 2017/01/10 被微軟下架,大多數人是沒備份到,所以還有一種做法,把 .eml 更名為 .mht ,給 IE 開啟,就可以在 IE 解碼。
  4. 我自己有寫一個加解密編輯程式支援 .htm / .eml / .mht 預覽,其實就是用 WebBrowser Control 去開啟這個檔案,改編碼時用 TextBox 改,再把內容餵給 WebBrowser Control 預覽。

講實在的,iOS 只是包裝好,技術不怎樣,但我也很佩服貧果,一堆人反映缺寄件編碼就是不改,這大概是為了讓其他 App 能夠生存吧。

資訊人員只好自救啦。

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

[WU] 升級 Windows 10 1803 雜記


週四比較閒,早上先下載 Win10 影像檔,打算中飯的時候更新。

到 MSDN Subscription 網站搜尋,Win10 1803 跟 Win10 1709 命名方式又不同,Win10 1709 除企業版外,統合在一片,Win10 1803 則分成消費者版跟商用版。

所以專業版、企業版在商用版內,

企業版下載這張光碟

企業版下載這張光碟

而家用版、專業版則在消費者版內。

家用版下載這張光碟

家用版下載這張光碟

我習慣除了下載下來外,另外先把光碟燒好,以免不時之需。從命名來看,都是升級光碟,不能空機安裝,有沒有燒起來其實還好,不過趕不及午餐前更新,午餐時還在燒光碟,所以吃完午餐午休前開始跑更新,12:30 開始跑,還在 Windows 畫面約跑到 13:30 (87%) 開始重新開機,整個跑完大概到 15:00 ,其他同事都沒我跑的這麼久,可能我有 Hyper-V / VS2015 / VS2017 / MSSQL 2016 等大型軟體吧。

這樣的硬體要跑兩個半小時

這樣的硬體要跑兩個半小時

上次跑 Win10 1709 整個 Hyper-V 網卡都被重置,Win10 1803 也一樣,設定都跑了,停用的網卡也被重新安裝啟用了。

IE 所有 Cookies 都被清除,所以所有網站都得重新登入。

剛開機畫面顯示:

從 Win8 以後就不能沒有它

從 Win8 以後就不能沒有它

重設完成後就正常執行。

另外通知主動告知:

封包監測對開發人員很重要

封包監測對開發人員很重要

到微軟網站還沒看到 Microsoft Network Monitor 3.4 針對 Win10 1803 的更新放出來。

剛開完機 OS CPU / 硬碟 Loading 很重,急著在 Outlook 2016 找信找不到,還重建索引,結果一看 Loading ,近乎滿載,所以剛重新開完機後,關注一下 Loading 是否仍然偏高,偏高時可能會發生部分功能不正常。

重開兩次 Skype 桌面版 7.41 Loading 很高,明日開機後再關注看看。

[05/04 09:17]

Skype 桌面版還沒點開,還在開始工具列上最小化執行時還正常,一點開 CPU Loading 就爆表,如下圖,訊息區出不來,全白,滑鼠一直呈現轉圈圈的狀態,比對工作管理員,SkypeBrowerHost.exe 一下變很多個,CPU Loading 從 6% 衝到 37% 後上下跳躍。

Skype 好忙

Skype 好忙

最後移除 7.41 後,再重新安裝 7.41 就正常了,SkypeBrowerHost.exe 正常運作時,只有兩個。

[05/04 14:30]
設定在 Excel 開啟舊檔下的釘選都被清掉了,可能是帳號重置造成。

[05/04 16:21]

鼎新 Workflow 開啟時可能會發生錯誤,有些正常有些異常,例如如下錯誤畫面:

Workflow 錯誤畫面 1

Workflow 錯誤畫面 1

確定後約過 30 秒再跳另一個畫面:

Workflow 錯誤畫面 2

Workflow 錯誤畫面 2

重新安裝後可恢復正常運作。

[05/04 18:05]

忽然注意到一直在做安全稽核,大概吃掉 12% CPU ,吃了一下午。

安全稽核事件

安全稽核事件

大概 7 分鐘左右寫入事件檢視器 37,065 筆,持續覆蓋舊紀錄,真正要查事件都別查了。看起來是每個帳號輪完一次再繼續,不知道幹嘛,下周上班再查可能問題。

[05/07 10:22]

參考這篇:

Fix WmiPrvSE.exe WMI Provider Host High CPU Usage In Windows 10

https://usefulpcguide.com/18548/wmiprvse-exe-wmi-provider-host-high-cpu-issue/

裡面的步驟有些被阻擋,最後有提到移除不相容軟體,我把 Microsoft Network Monitor 3.4 移除就正常了… 事件檢視器的安全稽核就沒有一直塞 WmiPrvSE.exe 的 4798 事件了。

[05/11 14:21]

升級 1803 後,從 Hyper-V 管理員就無法連線本機伺服器,想先從 systeminfo 檢查起,結果 systeminfo 也無法跑:

systeminfo 不能執行

systeminfo 不能執行

systeminfo /? 可以正常執行,我懷疑是升級過程中某些檔案受損或權限錯誤造成,但是不確定什麼出問題了。

參考這篇來掃瞄檢查系統狀況:

https://support.microsoft.com/zh-tw/help/929833/use-the-system-file-checker-tool-to-repair-missing-or-corrupted-system

系統健康掃描

系統健康掃描

可以正常跑完。

用新增移除元件,把 Hyper-V 移除後,重新開機,再新增元件加回,再重新開機,還是無效。

也參考這篇重新安裝 Hyper-V:

https://docs.microsoft.com/zh-tw/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v

也是沒有效果。

整個 1803 升級光碟重新跑一次還是一樣,反而回到一開始狀況,Skype / ERP 等不正常,最後只好 Format 掉 C 碟重灌。

只格式化掉 C 還不能直接重灌,最後整顆清乾淨重灌,清乾淨重灌後,我懷疑應該是當初自動建成 GPT ,所以只砍 C 不行,要把系統保留區也砍掉磁區,然後重新新建磁區讓系統分配,才能保留資料碟。1803 空機重灌預留的保留區約比 1607 大,約為 550 MB 左右~

重灌完後,有一個 .Net framework 2.0 的程式會閃退,參考這篇:

[WU] 關於 .Net framework 2.0 2016/03 的安全性更新

同事發現裝了 Intel® 驅動程式與支援助理後可正常執行:

https://www.intel.com.tw/content/www/tw/zh/support/detect.html

我先裝起來後,並沒有更新任何驅動程式,可將該 .Net framework 2.0 的軟體正常跑後,再移除Intel® 驅動程式與支援助理,避免沒事就掃描驅動程式吃資源,該 .Net framework 2.0 的軟體仍可正常跑。

我自己不太用Intel® 驅動程式與支援助理,因為我沒 Intel 內顯,所以只掃得到無線網卡跟藍芽,AHCI、Chipset 都得自己找,所以乾脆全部自己上 Intel 網站下載更新。

目前我的 Win10 1803 x64 企業版終於正常運作。

[05/14 16:21]

在論壇上有人說 RDP 會閃退,我也碰上了。

我連到 Win7 一直閃退,直接從 Win7 看事件檢視器,有正常登入又被踢,後來連線 Win2008r2 有跳錯誤訊息才知道問題在哪。錯誤訊息為:

發生驗證錯誤。
不支援要求的功能
遠端電腦: xxxx
這可能是因為 CredSSP 加密 Oracle 補救。
如需詳細資訊,請參閱 https://go.microsoft.com/fwlink/?linkid=866660

參考連結:

CVE-2018-0886 的 CredSSP 更新 https://support.microsoft.com/zh-tw/help/4093492/credssp-updates-for-cve-2018-0886-march-13-2018

基於安全理由,Windows Update 後不能透過遠端桌面連結到不安全的 Server ,是個雙向的問題,簡單點就把所有的 Windows 都更新到最新,但是我的目標還包含沒更新的 WinXP/2003/2008/7/2008r2 ,所以直接依據上面那篇,把:

HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters
AllowEncryptionOracle=2
(DWORD 32 bits)

或著透過群組原則改也可以:

gpedit.msc 群組原則修改

gpedit.msc 群組原則修改

改完 RDP 就能暢通舊版 Windows 了。

[06/06 14:35]

空機安裝 1803 可能會發生網路芳鄰無法以來賓 (Guest) 身分登入 File Server ,這是 Win10 1709 以後的預設值,空機安裝會碰上,升級則不會碰上,請參考微軟說明:

Guest access in SMB2 disabled by default in Windows 10 Fall Creators Update and Windows Server 2016 version 1709 https://support.microsoft.com/en-us/help/4046019/guest-access-smb2-disabled-by-default-in-windows-10-server-2016

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
“AllowInsecureGuestAuth"=dword:1

預設為 0 ,改設為 1 即可啟用 Guest 存取權限。

 

Categories: 工作點滴 | 標籤: | 3 則迴響

[Hyper-V] Win10 1709 執行 WinXP


公司有些舊的 VB6 程式,考慮到 DLL Hell 下,是放在 WinXP SP2 虛擬機上開發的,沒錯,SP2 ,這樣碰上 DLL Hell 的機率才能降低。

隨著 OS 演進,從 Win7 的 Virtual PC 、轉變到 Win8 的 Hyper-V ,最後到 Win10 的 Hyper-V 。

我在 Win10 1703 還用過這個 WinXP 客體,還用來做這篇的 Hyper-V Loopback 速率 10 Gbps 測試:

[Hyper-V] 在 Visual Studio Emulator For Android 我的虛擬網路設定

升級 Win10 1709 後,這兩天有需求要維護舊的 VB6 程式碼,才啟用 Hyper-V 管理員打算啟用影像檔,這算是升級 1709 後第一次開 Hyper-V。

打開 Hyper-V 管理員,居然找不到這台虛擬機?重新載入虛擬機跳錯,說原先設定檔載入失敗,反正虛擬硬碟都還在,就重新開新的虛擬機拉虛擬硬碟進來,第一次忘了 WinXP SP2 不支援 UEFI,選了第二代模擬機,一直卡在開機說不支援,只好把虛擬機砍掉重練,改用第一代模擬機,之後加入 Microsoft Loopback 虛擬網卡、ReomteFX 3D 虛擬顯卡,從 Win10 1703 遺留下來的 Microsoft Loopback 虛擬網卡加入後顯示錯誤,最後只好把這張虛擬網卡砍掉重建,重新加入虛擬機後,就能正常開機了,重建以後的虛擬機版本顯示為 8.2 ,比 1703 留下一堆 Android 虛擬機 8.0 高兩個小版本。

但是開機後,顯示有些虛擬裝置不支援,就想找出 Win8 Hyper-V 內有的 vmguest.iso 。

找到的大部份資料,是說 Win10 的 Hyper-V 已經不支援 WinXP/Win2003 了…

Hyper-V 整合元件更新 Windows 10 或 Windows 伺服器 2016年為基礎的主機上執行的 Windows 虛擬機器 https://support.microsoft.com/zh-tw/help/3071740/

ㄜ,要不是先前有寫網誌,確定我的虛擬機是在 Win10 1703 下跑,我也比對虛擬硬碟檔案最後存取日期 (我比對備份檔) ,的確是我寫網誌的那天,我都要懷疑我有老年癡呆症了,但是我還真想不起來,Win10 1703 下,我有做啥調整… (我懷疑可能沒加入 RemoteFX 3D 虛擬顯卡?)

過去不須追憶,繼續從網海翻文,找到這篇:

Manage Hyper-V Integration Services https://docs.microsoft.com/zh-tw/windows-server/virtualization/hyper-v/manage/manage-hyper-v-integration-services

看起來只要有虛擬光碟就能解決,這不廢話。

又看到這篇:

FAQ: Windows Server 2016 and Hyper-V Integration Services https://rlevchenko.com/2017/02/18/faq-windows-server-2016-and-hyper-v-integration-services/

說到,只要有 Win2012 R2 裡面的 vmguest.iso 就可以,剛好公司有台 Win2012 R2 ,從裡面抓出 vmguest.iso ,再跟這個網站的 vmguest.iso (vmguest_nov172.zip) 比對,除了網站上為英文的 setup.exe 外,其他檔案日期版本相同,當然以安全來源優先,使用公司的 vmguest.iso 。

安裝 vmguest 中

安裝 vmguest 中

然後就正常更新了…

感嘆微軟總會逼走使用者,打算把這台虛擬機遷移到 VirtualBox :

https://www.virtualbox.org/wiki/Downloads

正好碰上 5.2.8 在 4/17 釋出,Windows 版本尚未準備好:

VirtualBox

VirtualBox

算了,只好下次再搬家,反正現在能用了。

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

[Modbus] 保護主義下的通訊協定設計,造成應用的困擾


某國內上市以羅馬字母為名的科技大廠,以下簡稱 D,2011 新出的太陽能逆變器 (以下簡稱 Inverter) 通訊協定推測是基於保護自家監測系統設計出來。

這不是技能問題,而是故意為之。

並聯型的 Inverter 功能是將太陽能板的直流電轉換為交流電,併入台電電網供電。

在國際規範有相關的規定,跟監測相關的是 1998 編訂的 IEC 61724,在 2017 有更新版釋出,1998 的國際規範要求的不多,就要求要有 EIA-485 及 9600 bps 的支援,監測項目則有交直流電壓、電流、功率、頻率、累積發電量等規定。

由於近年來太陽能產業技術快速發展,又隨時有新產品上線、舊產品停產等變化,而太陽能板保固是 25 年,Inverter 保固 5 年,必然產生 Inverter 需要替換的問題,而 IEC 相關規定只有大方向,因此近年民間超過 100 家太陽能廠商成立協議組織,共同訂定 SunSpec 相關規範,其中就包含 Inverter 通訊協定除使用 Modbus 外,並要求通訊位置列表的一致性。

好比你今天電腦內的硬碟故障,你隨時可以買一顆新硬碟取代,遵守 SunSpec 通訊協定的,你只要設定好 Inverter 參數,就可以正常上線,不會影響到你既有系統的運作。

D 廠牌早期的 Inverter 功率小,通訊雖然使用 Modbus ,但 ID 只能使用 1 ~ 31 ,通訊協定只有 2400 bps ,早期技術欠佳可以理解容忍。

2011/2014 出的新產品,裡面最神奇的地方就是透過通訊協定設計,形成技術障礙,讓大部分設備均無法支援。

一般來說,Modbus 通訊通常只要讀資料,除維護外,不輕易寫入設備。因此大部分的工業設備在設計上,都是透過設定讀取對照表來取得對應數據。

D 廠牌利用一個奇異的邏輯:

在 800 位置分別寫入目前項目 (0, 1, 2, 48, 49)

可在 1055 連續位置分別讀取 (AC1, AC2, AC3, DC1, DC2) 的目前項目、電壓、電流、功率、頻率 等資訊。

沒錯,要寫入、讀取、判讀目前項目、計算平均、累加。

這對自己有能力開發軟體的系統商其實不難,但是會破壞原先通用架構的邏輯,我的作法是加入動態原始碼支援方式處理。

VB6 版本的透過 Script Control ,載入我加密過後的 VBScript (可選擇使用 javascript)

VBNET 版本則是透過動態編譯方式處理。(我網站上有動態編譯原始碼)

但沒能力開發的系統商,既有系統或工業設備無力支援這個複雜的邏輯,就變成必須購買 D 廠牌提供的監控套件,買了後還不知道該怎樣整合。

D 廠牌不是沒能力處理通訊協定,以下情況可以說明之:

  1. 舊版 2400 bps 的通訊對照表正常。
  2. 2013 D 廠牌替斯奈德 OEM 的 Inverter 通訊對照表正常,硬體相同,只有差韌體。
  3. 2017 版的韌體支援 SunSpec ,但只對國外銷售,內銷想買還不出貨,只能買到奇怪通訊協定的版本。
  4. D 廠牌有其他工業設備、UPS 都屬正常通訊對照表。

早先國內太陽能案場多數 500 kWp 以下,2017 起,逐漸邁向 2 MWp 以下為大宗,當規模增加後,自然設備就會分散布置,485 雖然有很多方式分散式讀取,但穩定度畢竟不如光纖網路,因此分散式的環境下,我會使用 Modbus TCP Gateway 來將網路訊號轉換成 Modbus RTU 。

這裡面又發生了很瞎的狀況。

Modbus RTU 就像教室裡面只能有一個老師 (Master),老師上課的時候就會喊 3 號 (Slave),你來唸下面這段課文,3 號就會開始唸。但教室裡面不能同時有兩個老師,或是說兩個老師不能同時發命令。

Modbus TCP 就像是多個教務組員隨時透過電話 (Gateway) 打給老師詢問學生狀況,老師如果知道可以立即回覆,老師不知道可以問學生,老師要不要問學生就決定快取 (Cache) 時間有多長。

由於 D 廠牌設計很瞎的通訊協定造成 AC1/AC2/AC3/DC1/DC2 都在同一位置,因此在快取情形下,就可能發生問 DC1 時,還在回應 AC1 。

大部分 Cache 是全自動不可設定,還好我使用泓格的有調整 Read Cache 毫秒數,預設為 980ms ,0 ms 為停用,我改設定為 0 ms ,整個系統就能正常運作,當然,基本上就變成把 Modbus TCP 當 Modbus RTU 在用了。

謠傳,下半年或明年起,國內各太陽能案場需使用國產的 Inverter ,我對於保護主義尚能接受,但我只有一個要求,你他媽的至少要支援 SunSpec 這類國際規範,不接受胡搞瞎搞的廠牌。

註:

VB6 呼叫 VBScript 可參閱下面兩篇:

  1. [VBScript] VB6 Variant 變數傳遞給 VBScript 的相容檢討
  2. [VBScript] 傳遞陣列到 VB6 的物件

動態編譯可參考:[VB2005] 程式碼動態編譯執行引擎(模擬 Script Control)

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

[Stat] 數值 常態分佈累積機率函數 比較


最近開始整理水文統計網頁,打算重新用 ASP.NET 再寫一遍。 (關於 水文統計 – 線上分析 網頁)
最早的程式碼使用 Quick Basic 4.5 開發,是大四上 (1993) 修水文統計時開始寫的,當時以周文德[1]水文學原文為主。
念博一前半年 (2000) 的時候改寫成 ASP,採用 VBScript,那時工作要做動態網頁,所以當練功將大四的程式碼拿來改。

開始改寫時,想說精益求精,就開始把相關數值模型重新 research 。

參考維基百科[2] 的內容,原來數值模型還有好幾種,興起比較的意圖。

先用原先周文德水文學的方程式係數找到原作者跟年分[3],分別把方程式使用 Excel 2013 VBA 寫成函數比較,另外加入 Excel 內建的 Excel NORM.S.DIST 函數一起比較,如下表:

標準差 1 2 3 4 5 6
Wiki 表 0.8413447460685000 0.9772498680520000 0.9986501019685000 0.9999683287580000 0.9999997133485000 0.9999999990135000
Excel NORM.S.DIST 0.8413447460685430 0.9772498680518210 0.9986501019683700 0.9999683287581670 0.9999997133484280 0.9999999990134120
Abramowitz and Stegun, 1965
周文德水文學
0.8411238352705170 0.9774369986442540 0.9984208362961290 0.9999107486493130 0.9999941679910000 0.9999995054414810
Zelen and Severo, 1964 0.8413447404219760 0.9772499379836130 0.9986500327776380 0.9999683139654060 0.9999997128950000 0.9999999990098780
Hart, 1968 0.8413447460685430 0.9772498680518210 0.9986501019683700 0.9999683287581670 0.9999997133484280 0.9999999990134120
Marsaglia, 2004 0.8413447461005850 0.9772498680966180 0.9986500987983220 0.9999401630918050 0.9935899936665050 0.8832228594191580

由於不知道正確數值該多少,所以從維基百科[2]的表格做為比對依據,網頁上的數值位數有限,拿來跟 Excel 函數比對,假定 Excel 函數是正確的。

Marsaglia 使用泰勒級數展開,初步測試,17 項以上,小數點就沒有太大的變化,所以使用 20 項,2*20+1 = 41 ,x 的最高次方項為 x^41 。做到泰勒級數展開式時,不得不回來幹繳 VBA 7.1 LongLong 的識別字元是 ^ ,搞得我級數函數一值錯…

[VBA] LongLong 超長整數

Hart 則直接參考 West 2009 年的論文[4],裡面直接用 VB6 寫,剪來貼就可以了,West 說他把原始的 Fortran 函數轉成 VB 函數,果然我以前 Fortran 沒白學,以前的學者都用 Fortran 。

從比較表來看,以前水文統計使用周文德的累積機率函數誤差有點大,Zelen 的誤差都小於該函數,而 Hart 跟 Excel 結果完全一致,該不會 Excel 也用此函數來近似吧?

而 Marsaglia 使用泰勒級數展開,照理說泰勒級數展開應該要更準,不知道是寫錯還是其他問題,我懷疑也有可能是數值精度誤差問題,因為 x ^ 41 已經非常小,算完再去做除數,感覺誤差就被放大了。

所以我決定新版的水文統計在常態分佈累積機率函數就使用 Hart 了。(皮卡丘就是你了)

寫在這也希望給水利海洋相關從業人員參考,找個新函數比周文德的教科書更逼近,好吧,這是資訊從業人員的一種病。

1. https://zh.wikipedia.org/wiki/%E5%91%A8%E6%96%87%E5%BE%B7
2. https://en.wikipedia.org/wiki/Normal_distribution#Numerical_approximations_for_the_normal_CDF
3. https://books.google.com.tw/books?id=V1pHDwAAQBAJ&pg=PT523&lpg=PT523
4. https://s2.smu.edu/~aleskovs/emis/sqc2/accuratecumnorm.pdf

銀河的歷史,又翻過一頁~ 今年要重畫了,好期待~~~

Categories: 技術分享, 決策支援系統 | 標籤: | 發表留言

[Word] Mathematics 4.0


話說,前一篇 Mathematics 為 2.0 ,可直接嵌入到 Word 2010 內:

[Word]有趣的數學計算器增益集 – 方程式的擴充功能

上一篇 Mathematics 為 2013 ,直接嵌入到 Word 2013 。

[Word] Mathematics 增益集 2013

但是我一開始安裝的是 Mathematics 4.0

下載位置:https://www.microsoft.com/zh-tw/download/details.aspx?id=15702

我以為會像 2.0 一樣,直接嵌入到 Word 2013 ,但是沒有,找了一下,才知道,Word 2013 改版要用增益集。

比了一下,Mathematics 4.0 使用 .Net framework 3.5 ,Mathematics 2013 則使用 .Net framework 4.0 ,當然從微軟下載中心說明可以看出,Mathematics 2013 比較新,但 Mathematics 4.0 多了一個好處,是可以獨立執行,更有彈性。

Mathematics 4.0 安裝好,會在開始工具列上出現 (老樣子,我使用 Classic Shell 比 Win8 以後動態磚好用多了)

開始工具列

開始工具列

點開執行後,有獨立的 Logo 畫面

Logo

Logo

拿昨天的方程式來測試

輸入方程式

輸入方程式

 

繪圖輸出

繪圖輸出

 

切換到工作表可看到完整的指令,若要直接輸出,可直接使用指令。不過我認為應該不會直接使用指令,這應該是給 Automation 用的指令。

指令語法

指令語法

最好的是,連結到中文說明書。

線上手冊

線上手冊

稍微翻了一下中文說明書,可以解方程式,還有其他功能,測試看看解方程式,再拿女兒作業來翻。

圖解方程式可直接看到兩直線方程式相交點為解答。

圖解方程式

圖解方程式

改用解析解方程式。先從下拉式選單選擇方程式數量,之後輸入方程式後按下 [求解]。

輸入方程式

輸入方程式

直接可以得到解答,另外可以看到有三種求解方法。

求得解答

求得解答

拉下一個求解方式看看。

超詳細的求解過程

超詳細的求解過程

超詳細… 那身為爸爸,以後還有作用嗎?或說老師還有作用嗎?好吧,當作輔助教學來說完全夠用了,女兒完全不用我教了,通通丟給電腦吧。

 

Categories: 電腦和網際網路, Office | 標籤: | 發表留言

在WordPress.com寫網誌.

%d 位部落客按了讚: