技術分享

[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, 工作點滴, 技術分享 | 標籤: | 發表留言

[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: 技術分享, 決策支援系統 | 標籤: | 發表留言

[OWC] Group 的迷思


在先前的範例中:

[OWC] 雙 Y 軸的小範例

介紹了如何將數列解開群組後,重新群組在副 Y 軸。大部分在副 Y 軸不會有太多線,所以一直沒超過兩條線。

這次同事參照了這個範例,想要在副 Y 軸畫多條線,才發現 Group 不是我想像的。

我做了一個簡單的範例,資料內容為:

[Data]
Items=1,2,3
Z=6,9,3
A=20,40,60
B=10,30,50
C=30,60,90

A/B/C 是我要畫在副 Y 軸的。

例如以 A 為主時,我一直以為應該是 A.Group B ,A.Group C ,這次我發現中國人跟西方人真的腦袋不一樣…

測試結果,結論是 B.Group A,C.Group A ,主體是被 Group 的。

測試繪圖結果:

將三條線 Group 轉移到副 Y 軸

將三條線 Group 轉移到副 Y 軸

繪圖程式碼:

With nowChart

ReDim arrSeries(.SeriesCollection.Count – 1) : For i = 0 To .SeriesCollection.Count – 1 : Set arrSeries(i) = .SeriesCollection(i) : Next
idxLine = Array(1, 2, 3)
For i = 0 To UBound(idxLine) : arrSeries(idxLine(i)).Ungroup True : arrSeries(idxLine(i)).Type = chConst.chChartTypeLine : Next
For i = 1 To 2 : arrSeries(idxLine(i)).Group arrSeries(idxLine(0)) : Next
Set SumAxis = .Axes.Add(arrSeries(idxLine(0)).Scalings(chConst.chDimValues))

End With

注意迴圈內的 UnGroup / Group 位置,最後再參照 A 建立副 Y 軸。

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

[RouterOS] 阻擋外對內的 DNS 遞迴查詢攻擊


先前這篇:
[RouterOS] 上傳流量爆頻寬

會阻擋所有的 DNS 查詢,相對代表另一件事,區域網路無法透過 Router 查詢 DNS ,只能設廣域網路的 DNS ,由於內部系統習慣使用 Router 作為 DNS Server ,便於外部網路的變化,不影響內部網路設定,因此得改防火牆配合。

建好的規則如下圖,在防火牆的過濾規則中設定,將來自於外網的 DNS 的查詢全數拋棄:

將來自於外網的 DNS 的查詢全數拋棄

將來自於外網的 DNS 的查詢全數拋棄

來分別看看此兩規則的設定值,其中 pppoe-HiNet 為外網的名稱,這邊是使用 ADSL 上網,使用 WAN 也可藉此修改:

DNS TCP General

DNS TCP General

DNS TCP Action

DNS TCP Action

DNS UDP General

DNS UDP General

DNS UDP Action

DNS UDP Action

最後,若需如清單畫面中,分群,在清單中按下滑鼠右鍵,在彈跳選單中選擇 [Comment] ,輸入分群名稱即可:

DNS Query TCP Comment

DNS Query TCP Comment

DNS Query UDP Comment

DNS Query UDP Comment

設定完成後,就可以允許 DNS 查詢了。

DNS Settings

DNS Settings

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

[Android] WebView 啟動時自動調整大小 – Xamarin for VS2017


我的目標網頁有設定在 html5 的 head 有設定下行:

<meta id="metaViewPort" name="viewport" content="width=480px" />

WebView 預設開啟時,並無法正確的映射到這個尺寸,雖然可以在螢幕上點兩下自動縮放到設定大小,但總是要多一手。

因此透過程式碼設定初始化大小,主要就是這句:

MobileBrowser.SetInitialScale(GetDeviceInitScale());

程式碼片段寫在 MainActivity.cs


private int GetDeviceInitScale()
{

// 預設寬度 480d, 100%: 100d
double val = (double) Resources.DisplayMetrics.WidthPixels / 480d * 100d;
return (int)val;

}

protected override void OnCreate (Bundle bundle)
{

base.OnCreate (bundle);

SetContentView(Resource.Layout.Main);

MobileBrowser = FindViewById<WebView>(Resource.Id.MobileBrowser);

//啟用Javascript Enable
MobileBrowser.Settings.JavaScriptEnabled = true;

//支援縮放 ViewPort
MobileBrowser.Settings.LoadWithOverviewMode = true;
MobileBrowser.Settings.UseWideViewPort = true;

// 計算螢幕比例
MobileBrowser.SetInitialScale(GetDeviceInitScale());

MobileBrowser.SetWebViewClient(new CustomWebViewClient());

//載入網址
MobileBrowser.LoadUrl(“http://www.company.com/");

}


這樣開啟 WebView 就會自動縮放到網頁大小了。

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

[QNAP] 升級 4.3.3 以後,網頁不能被嵌入


上週公司的 Nas 系統受損,在 QNAP 原廠工程師協助下,用新版的 系統 上線,看到有些新功能,就打算把 www 也更新上去。

公司的 www 是以靜態網頁為主,由版面設計師負責,所以有些電廠介紹的網頁,要嵌入在電廠發電網站用的,就請版面設計師處理,在透過 frame/iframe 嵌入在發電網站。

www 更新的很順利,所以更新完也忘了它。過兩天後,慢慢有同仁反映電廠介紹的網頁無法正確顯示,由於我電腦正常,剛好更新韌體後,又有 Windows Update,我就沒積極處理,讓 IT 協助其他同仁去解決。

直到連資訊部的開發人員也發生同樣問題,資訊部同仁電腦狀況我比較熟,我就切入追蹤,我的電腦還是正常,所以在 IE 下強制重新整理 (Ctrl+F5) ,就開始不正常了,看了錯誤訊息是指此網頁不能顯示在框架中,所以之前正常應該是讀我電腦內的快取。

一開始我檢查網頁內容,以為是 google Analytics 改程式碼了,導致形象工程師內嵌在裡面的 script 做了阻擋,請形象設計師移除後,還是不正常,就改用開發模式看:

新韌體預設值變更為拒絕框架

新韌體預設值變更為拒絕框架

疑?居然有 X-Frame-Options 的設定?

用這關鍵字加上 QNAP 一搜尋就有解答,看起來是新版韌體預設加入。

新版韌體

新版韌體

依照 FAQ 是要透過 SSH 連入修改下面這個檔案:
/etc/config/apache/apache.conf

雖然 SSH 有 vi 可以編輯檔案,但我指令早忘了,要查起來使用說明還要花時間,還不如用 SFTP 進去抓檔修改再上傳:

啟用 SSH / SFTP 服務

啟用 SSH / SFTP 服務

config 是個虛擬目錄,要特別注意,點選後路徑會變更:

虛擬目錄 config

虛擬目錄 config

下載 apache.conf 來修改

下載 apache.conf 修改

下載 apache.conf 修改

可以把這行刪掉,官網建議加上 # 註解

用 Visual Studio Code 註解

用 Visual Studio Code 註解

改完後,QNAP 的 www 服務要重新啟用,就恢復正常了。

 

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

[WINS] 網卡內的 NetBIOS over Tcpip 無法正常啟用


在先前的

[Hyper-V] 在 Visual Studio Emulator For Android 我的虛擬網路設定
https://tlcheng.wordpress.com/2017/08/03/hyper-v-%e5%9c%a8-visual-studio-emulator-for-android-%e6%88%91%e7%9a%84%e8%99%9b%e6%93%ac%e7%b6%b2%e8%b7%af%e8%a8%ad%e5%ae%9a/

我的無線網卡在測試 Hyper-V 的虛擬交換器建立中,解除虛擬交換器後,忽然發生無法正常使用網路芳鄰,經檢視網卡後,發現我的 [IPv4 WINS 伺服器] 設定沒有顯示,[NetBIOS over Tcpip 已啟用] 顯示為 否。

下圖為修好後的截圖。

NetBios Over Tcpip 是否啟用

NetBios Over Tcpip 是否啟用

公司有架設兩台 WINS 伺服器,所以所有公司及 VPN 內都會設定 WINS ,在 [進階 TCP/IP 設定] 可正常顯示,但在 網路連線詳細資料 或是 ipconfig/all 就是無法顯示。即使試著強制啟用,如下圖,設定為 [啟用 [NetBIOS over TCP/IP](N)] 也沒有作用 (這邊 WINS IP 被我遮掉)。

進階 TCP/IP 設定

進階 TCP/IP 設定

我測試多種情形,包含從裝置管理員移除裝置時,同時刪除驅動程式,讓他自動新增時,使用 Win10 1703 內建驅動程式,但是還是沒用。

經過 google 網海後,我靠下面論壇這篇解決。
https://social.technet.microsoft.com/Forums/windowsserver/en-US/f3a909c8-04e8-485d-894c-3f92683c0fd7/can-not-enable-netbios-over-tcpip-on-shared-network-interface

首先,需要知道問題網卡的 GUID ,若是所有網卡都是預設值,可以將問題網卡上圖設定為 [啟用 [NetBIOS over TCP/IP](N)] ,然後到機碼:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces

找 [NetbiosOptions] 為 1 的,如下圖的項目:

登錄編輯程式

登錄編輯程式

記下這位置的 GUID ,為了確保這張是你的問題卡號,先選到這張卡,回到 [進階 TCP/IP 設定] 改設定為 [預設值(F)] ,回到先前 GUID 檢視 [NetbiosOptions] 是否變成 0 ?若是,這就是你問題網卡的 GUID 。

依序到下面五個機碼下:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Linkage
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Linkage
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBIOS\Linkage
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Linkage
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Linkage

底下的三個多字串值 (REG_MULTI_SZ)
Bind
Export
Route

加入你的網卡。
操作上我建議先複製其他網卡的片段來改 GUID ,再於最後一行貼入,大部分的情況都有多行要貼入。

編輯多字串

編輯多字串

修改完成後,重新開機,讓服務跟網卡都重新啟用就可以恢復正常了。

我另一個同事跟我一樣,在測試 Hyper-V @ Win10x64 時,因為同時 [乙太網路] 跟 [WiFi] 兩張網卡同時加入 Hyper-V 的 虛擬交換機管理員 內,造成兩張網卡的 NetBIOS over Tcpip 都無法啟用,也利用此方法恢復了,我是懷疑可能是 Hyper-V 加入虛擬網卡,移除實體網卡 NetBIOS 能力,當解除虛擬網卡時,未正確自動恢復實體網卡的 NetBIOS 能力。

最後,依據上述關鍵字,在手動修復前或許可以先測試這篇:

如何使用 NetShell 公用程式重設 TCP/IP
https://support.microsoft.com/zh-tw/help/299357/how-to-reset-tcp-ip-by-using-the-netshell-utility

用內建工具程式修看看。

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

[WiFi] 無線網路無法列舉搜尋附近的無線訊號


我的 NB 因為前一篇

[Hyper-V] 在 Visual Studio Emulator For Android 我的虛擬網路設定
https://tlcheng.wordpress.com/2017/08/03/hyper-v-%e5%9c%a8-visual-studio-emulator-for-android-%e6%88%91%e7%9a%84%e8%99%9b%e6%93%ac%e7%b6%b2%e8%b7%af%e8%a8%ad%e5%ae%9a/

被我玩傻了。

一下把 WiFi 加入虛擬交換器,一下退出,不然就是移除裝置重新掃描。

最後發生奇怪的事,無線網卡正常狀態,但是附近的無線訊號就是不會出現可以點選。

查了半天,是這個服務:
WLAN AutoConfig

狀態為 正在停止中 ,從服務管理無法啟動或停用,因為卡在正在停止中。

只能透過 [工作管理員] ,先從 [服務] 找 WLAN AutoConfig 的 [PID] ,再到 [詳細資料] 依 [PID] 找到對應的 svchost.exe 選 [結束工作] ,最後再回到 [服務] 對 WLAN AutoConfig 選 [啟動]。

如果不會操作的話,最簡單就是重新開機。

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

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


我在 Win81 時的 Hyper-V 中,透過 Loopback 網卡來分享 WiFi 給虛擬機用:

[Hyper-V] 我 NB 用的虛擬網卡
https://tlcheng.wordpress.com/2016/02/22/hyper-v-%e6%88%91-nb-%e7%94%a8%e7%9a%84%e8%99%9b%e6%93%ac%e7%b6%b2%e5%8d%a1/

當時的 NB 是效能不是很好,所以一直沒考慮使用 Hyper-V 跑 Android 模擬機,一直用 VirtualBox 來跑 Android 模擬機。

Visual Studio 2015 (VS) 以後,微軟推出了整合 VS IDE 開發環境與模擬機的架構,提高 Android 行動軟體開發速度,沒有安裝 VS 的電腦也可以安裝來跑 Android 模擬機:

Visual Studio Emulator For Android (以下簡稱模擬器)
https://www.visualstudio.com/zh-hant/vs/msft-android-emulator/

當然有安裝 VS 2017 的有內建,VS 2017 內建的版本比上述網站下載的還新。

我開始在 Hyper-V 測試模擬器,一開始就卡在開機中的畫面,不知道啥原因:

卡在開機中的畫面

卡在開機中的畫面

 

Terry Lin 建議我依照下面這篇除錯:

Visual Studio Emulator for Android 疑難排解
https://msdn.microsoft.com/zh-tw/library/mt228282.aspx#NoStart

無法解決問題,之後 Ian Chen 建議我把所有 Virtual Switch 全部砍掉一預設值重建,砍掉前我有看了一下設定後,砍掉重建,重建後我的模擬機就能完成開機,但卻出現不能上網。

Windows Phone Emulator Internal Switch

Windows Phone Emulator Internal Switch

註:後來是因為我的 Windows Phone Emulator Internal Switch 內不知道為啥預設是 169.* 開頭的 IP ,這裡必須是動態取得 IP

一開始無法上網,我依據先前跑 Windows VM 的慣例,把 Microsoft Loopback 網卡設定給 Android 模擬器,但是還是無法上網,Aska Su 建議我用 Hyper-V 建一個 Hyper-V Loopback 內部虛擬網路:

Hyper-V Loopback

Hyper-V Loopback

再把 WiFi 分享給 Hyper-V Loopback 虛擬網卡:

共用 WiFi 給 Hyper-V Loopback

共用 WiFi 給 Hyper-V Loopback

 

我用 Windows VM 測試,也可正常成功。

Hyper-V Loopback 速率 10 Gbps

Hyper-V Loopback 速度

Hyper-V Loopback 速度

比 Microsoft Loopback 網卡 1.2 Gbps 快。

Microsoft Loopback 速度

Microsoft Loopback 速度

 

但是 Android 模擬器仍無法上網。測試各種方案,Android 模擬機都會自動把 Windows Phone Emulator Internal Switch 虛擬網卡自動加入,若是參數不正確,還會自動把前次設定錯誤的網卡刪除。

苦無對策,拜了 google 大神,一般解決方案都是將無線網卡加入第二張 Android 模擬機網卡,這表示我得放棄不將 WiFi 加入虛擬交換器,必須將 WiFi 加入到 Hyper-V 內。

虛擬交換器管理員

虛擬交換器管理員

WiFi 一加入虛擬交換器就會組成網路橋接器,這讓網路管理複雜很多:

網路橋接器

網路橋接器

加入到 Android 模擬機第二張網卡:

WiFi 加到第二張網卡

WiFi 加到第二張網卡

就可正常上網了:

從無線基地台取得實體 IP

從無線基地台取得實體 IP

註:若網路設定錯誤,Android 模擬機仍會自動將無線網卡刪除

成功上網後,摸清楚特性,就測試改用 Hyper-V Loopback 網卡,由於 Hyper-V Loopback 網卡為內部網卡,只要一設定 IP ,例如共用網路變成 192.168.137.1 ,就會造成模擬機無法開機,只有外部網卡能設 IP。因此又回頭使用 Microsoft Loopback 網卡加入虛擬交換器:

Microsoft Loopback 加入第二張網卡

Microsoft Loopback 加入第二張網卡

再將 WiFi 分享給 Microsoft Loopback 虛擬網卡

WiFi 分享給 Microsoft Loopback

WiFi 分享給 Microsoft Loopback

一樣自動被設定為 192.168.137.1

虛擬網段 IP

虛擬網段 IP

讓網路設定變得比較乾淨:

實體網卡好管理

實體網卡好管理

終於,可以把先前的 Microsoft Loopback 網卡分享給 Android 模擬機。

透過 Microsoft Loopback 取得虛擬 IP

透過 Microsoft Loopback 取得虛擬 IP

平常沒有使用 Hyper-V 的時候,我就會停用不相關的網卡,另外重新把 Windows VM 網卡設給 Microsoft Loopback ,反正 1.2 Gbps 也夠我用了,平常就懶得動,直接用同一張須擬網卡就可以,這樣在外沒有無線基地台的情況下,模擬器也可以透過 192.168.137.* 網段與 NB 溝通,恢復到我的習慣工作環境了。

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

[Office] 將 Word 預設單位改為公分


Word 預設單位顯示為字元,習慣舊版用公分的可能會不習慣。

如下圖,邊緣的尺規、樣式都顯示為字元。

使用字元單位

使用字元單位

 

以 Word 2013 為例,操作方式為:

開啟 Word > 選單 > 檔案 > 選項 > 進階 > 顯示

將 [顯示字元寬度單位] 的勾勾移除。

顯示字元寬度單位

顯示字元寬度單位

則 Word 才會依照上圖的 [顯示度量單位] 的單位進行顯示。

例如下圖為 A4 的尺規。

使用公分單位

使用公分單位

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

[WinPE] EaseUS Todo Backup 還原新硬碟


Todo Backup Free 10.0 是一套僅有英文介面的全機備份還原軟體,採用 Win10 的 WinPE,可以使用行動碟開機,例如 GPT 4TB ,特別的是可以用在純 USB 3.0 環境。

大部分備份還原軟體可能會發生無法使用 USB 3.0 開機或是插 USB 3.0 的鍵盤、滑鼠不支援,Todo Backup Free 可解決這個問題。

http://www.todo-backup.com/products/home/free-backup-software.htm

但 Todo Backup Free 有個傻問題,當你要還原到新硬碟時,會因為硬碟沒規劃磁區,因此選不到磁碟,無法還原。

解決方案是呼叫 Windows 內建的 Diskpart.exe:

  1. 主畫面工具列右側選 [Tools]
  2. 選 [Windows Shell] 會跳出命令列提示字元。
  3. 執行 [Diskpart]
  4. 輸入執行 [list disk]
  5. 找到新硬碟的磁碟代號 n,輸入執行 [select disk n]
  6. 非必要步驟,檢查磁碟詳細狀況,輸入執行 [detail disk]
  7. 一般新硬碟為 mbr 基本磁碟,不必特別輸入指定,可參考步驟 6 的詳細狀況,若非 mbr ,輸入執行 [convert mbr]。
  8. 建立主要磁區,由於只是為了在介面能顯示出來,所以不用管大小,直接建立,輸入執行 [create partition primary]
  9. 指定磁碟代號,輸入執行 [assign]
  10. 檢查磁碟詳細狀況是否完成設定,輸入執行 [detail disk]

若沒其他問題後,回到 Todo Backup Free 主畫面選 [Browse to Recover] 即可依照精靈介面選擇,開始還原到空硬碟。

http://www.todo-backup.com/products/home/screenshots.htm

講實在,不支援新的空硬碟滿瞎的,但看在 USB 3.0 支援分上,只好忍著啦~

Diskpart 官方網站參考用法:

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

[WU] 升級 Windows 10 1703


台灣時間 2017/04/05 後 Win10 1703 已經開始發布,大部分的人還在苦苦等候 Win10 自動推送,若急著裝,可直接用 Win10 連結下面微軟網頁:

https://www.microsoft.com/zh-tw/software-download/windows10

若使用 Win10 連線,會自動出現 [立即更新] 這部分,若不是使用 Win10 連線,只會出現 [立即下載工具] 。

立即升級 Win10

立即升級 Win10

點選 [立即更新] 安裝,會在桌面上出現 [Windows 10 升級小幫手] ,並自動執行,若沒有自動執行或失敗,下次可點選 [Windows 10 升級小幫手] 。

Win10 升級小幫手

Win10 升級小幫手

若升級完成還執行 [Windows 10 升級小幫手] ,會跳出畫面顯示 已是最新的 Windows 。

最新 Windows

最新 Windows

這個軟體看起來應該是微軟企圖要做為未來升級工具用,升級完成後,不會自動移除,可自己到 [程式和功能] 去移除,省得在桌面占空間。

程式和功能

程式和功能

目前我升級幾台的經驗,[程式和功能] 若依照安裝日期排序,會發現很多軟體安裝日期被更改到 Win10 升級的那天,包含 [Windows 10 升級小幫手] ,由於安裝完 1703 ,Win10 會重新進入歡迎畫面,所以推測可能是 Win10 判斷軟體安裝資訊受損時,自動啟動重裝,部分檔案預設軟體可能因為自動重裝後,產生預設軟體改變,例如說圖檔可能會變回預設 Win10 開啟,或是 Zip 回復到 Win10 內建解壓縮,這個可能需要自己處理。

上面的網頁 [立即更新] 只支援 家用版 及 專業版 ,若是企業版,需要從大量授權網站下載 Win10 1703 企業版 ISO 安裝光碟直接點選 setup.exe 才能升級。

Win10 1703 比較像是新版本的安裝,所以多數安全性更新或 Windows Update 更新錯誤是不用管,安裝新版後會修復,但仍有相關問題不能安裝,Windows Update 不能正常執行時,可從下面網頁點選 Win10 疑難排解員進行故障排除:

https://support.microsoft.com/zh-tw/instantanswers/512a5183-ffab-40c5-8a68-021e32467565/windows-update-troubleshooter

若有特定 KB 不能安裝,可透過下面網頁搜尋下載離線安裝:

https://www.catalog.update.microsoft.com/Search.aspx

請輸入完整 KB 及數字,例如:

https://www.catalog.update.microsoft.com/Search.aspx?q=KB4015438

Categories: 工作點滴, 技術分享, 更新與回報 | 標籤: | 4 則迴響

[Office] Outlook 2013/2016 無法接收微軟信箱情形


微軟的 Hotmail / Outlook.com / msn.com / livemail.tw 等信箱,這幾個月在升級,從 Exchange ActiveSync 升級到 Microsoft Exchange
(我最早收到通知是英文版 2016/11/11,2016/12/22 以後收的是中文版,我抓中文版最新的畫面)

通知信

通知信

 

微軟的說明:
您可以在官方 Microsoft 支援網站存取重新連接帳戶的逐步指示:https://go.microsoft.com/fwlink/?linkid=837697

微軟的常見問題:
Windows 版 Outlook 近期問題的修正或因應措施

如果 Outlook 無法正常收信,可以手動改回使用 Exchange ActiveSync

新增帳號手動設定

新增帳號手動設定

 

選擇信箱類型

選擇信箱類型

伺服器資訊填入 eas.outlook.com

輸入伺服器

輸入伺服器

如果不是 Outlook 2013/2016 ,例如 Windows Live Mail,或是即使是 Outlook 2013/2016,但上面方法無法解決,可以透過 WebMail 登入,從選項啟用 POP3 / IMAP ,選擇其中一種方式設定收信,一般來說,建議使用 IMAP 。

支援 POP3

支援 POP3

剪貼 2017/03/12 的資訊如下:
POP
伺服器名稱: pop-mail.outlook.com
連接埠: 995
加密方法: TLS

IMAP
伺服器名稱: imap-mail.outlook.com
連接埠: 993
加密方法: TLS -> 注意:實測應為 SSL

SMTP
伺服器名稱: smtp-mail.outlook.com
連接埠: 587
加密方法: STARTTLS -> 注意:實測應為 TLS

以下為 Outlook 2013 實際設定畫面:

Outlook 2013 進階設定

Outlook 2013 進階設定


[2017/04/02 新增 Windows Live Mail 設定畫面]

如果使用 Windows Live Mail 連接 Hotmail 系列信箱,請參考下面兩個畫面的設定:

Mail Server 及認證方式

Mail Server 及認證方式

 

加密方式及 port

加密方式及 port

 

 

Categories: Office, 技術分享, 更新與回報 | 標籤: | 發表留言

在WordPress.com寫網誌.

%d 位部落客按了讚: