Pool 是關聯性最少的,先寫。前面說到設備預設為 DHCP ,所以必須開 DHCP Pool 給 Router 分配 IP 池,設備數量是多餘 Pool 的,不過出廠前會先設好,所以 Pool 只需保留給維運人員現場換新機或是插入網路使用,所以沒留很多 IP ,RouterOS 也可以指定一段範圍,不用遮罩計算,不過我覺得這樣比較簡單好記,所以直接用 /29 來限制 IP 範圍。
Your app, [我的 App 名], app Apple ID: [App 代碼], does not follow one or more of the App Store Review Guidelines.
For details, or to contact App Store Review, visit Resolution Center in App Store Connect.
Best regards, App Store Review
因為看不出來要幹嘛,所以沒理他。
01/20 收到 Apple 更新的信:
Dear [我的英文名],
On September 1, 2016, we announced that we’re implementing an ongoing process of evaluating and removing apps from the App Store that no longer function as intended, don’t follow current review guidelines, or are outdated.
You were asked to submit an updated version of your app, [我的 App 名], app Apple ID: [App 代碼], for review within 30 days. We noticed that either you did not submit an updated version of your app or the updated version of your app was not approved. As a result, your app has been removed from the App Store.
Next Steps
Your app has not been deleted from your account. To make your app available on the App Store, submit an updated version that follows the latest App Store Review Guidelines. Your app will become available on the App Store if the update is approved. If you submitted an update after the 30 day grace period, please allow time for review.
Additional Information
Learn more about changes to the App Store and keeping your apps up-to-date.
封裝完沒問題後,卻跳出無法上傳到 App Store ,這部份是我自己真的忘了,但我應該知道,我先前也沒紀錄到。
要上傳之前,App Store Connect 那邊要先針對新版號開一個空間,Visual Studio 才能把新版上傳到這個位置,開好就正常了。
Visual Studio 2019 for Mac 不用像 Visual Studio 2017 for Mac ,先產生 [專案名].ipa ,而是直接產生完後就上傳,所以會找不到 [專案名].ipa ,但也方便很多。
關卡 8:要上傳新的螢幕擷圖
回到關卡 7 的網頁,新版本要求要四種版本的畫面擷圖,其中包含 iPhone 6.5 吋跟 iPad Pro 12.9 吋 (第三代) ,起先模擬器我跑 iPhone 13 的,沒想到居然尺寸不對,上 Apple 官方網站查詢以後,改用 iPhone 11 Pro Max ,iPad Pro 12.9 吋就比較單純,模擬器是第五代的,一次搞定。
其次是效能不錯的 Google 時間伺服器,早期 Google 分成 4 台時間伺服器,現在用 DNS 做自動平衡,一般使用者用 time.google.com 即可。
別名
NTP Server
IPv4
IPv6
time
time1
216.239.35.0
2001:4860:4806::
time
time2
216.239.35.4
2001:4860:4806:4::
time
time3
216.239.35.8
2001:4860:4806:8::
time
time4
216.239.35.12
2001:4860:4806:c::
Google 的時間伺服器
所以 RouterOS 對上游校時的主伺服器設定為中華電信,次伺服器設定為 Google 。
Windows 再對 RouterOS 校時即可。
對 RouterOS 校時。
在有 AD 架構下的網域,Windows Client 會自動對 AD Server 校時,另外 Windows Server 可以透過 regedit 修改啟用 NTP Server ,倒不一定要用到這個方案。
我這個方案是要用在現場,現場沒有 Windows Server,而 RouterOS 的硬體都是便宜大碗的工業級設備,支援多 WAN ,多通道的 Site To Site VPN,唯一的缺點就是設定複雜,現場網路設備多需要校時,統一對 RouterOS 校時最好,把校時流量關在 LAN 裡面,只有 RouterOS 走 WAN 去校時。
SELECT SN, DataTime
FROM (
SELECT SN, DataTime, COUNT(SN) AS nCount
FROM Data_Temp
GROUP BY SN, DataTime
) AS Data_Limit
WHERE nCount > 1
我一直以為搭配 EXISTS 是類似子查詢,把上面語法嵌入即可,不過實際上不是,需要把 WHERE 條件合併,測試時,先用 SELECT 測:
用 SELECT 測試 EXISTS
SELECT *
FROM Data_Temp
WHERE EXISTS (
SELECT SN, DataTime
FROM (
SELECT SN, DataTime, COUNT(SN) AS nCount
FROM Data_Temp
GROUP BY SN, DataTime
) AS Data_Limit
WHERE nCount > 1 AND Data_Temp.SN=Data_Limit.SN AND Data_Temp.DataTime=Data_Limit.DataTime
)
;
如上面語法,其中,下底線加粗體字的條件,基本上就是 JOIN 在 ON 後面的條件,要一起組進去,組好測試無誤後,把 SELECT 改成 DELETE 即可。
最後測試完成的語法:
DELETE
FROM Data_Temp
WHERE EXISTS (
SELECT SN, DataTime
FROM (
SELECT SN, DataTime, COUNT(SN) AS nCount
FROM Data_Temp
GROUP BY SN, DataTime
) AS Data_Limit
WHERE nCount > 1 AND Data_Temp.SN=Data_Limit.SN AND Data_Temp.DataTime=Data_Limit.DataTime)
;
實際在用的時候,要在 GROUP BY 之前再加入一個 WHERE DataTime<=’日期’ 的條件,避免有即時備份重複資料時,有即時最新的重複資料沒備份到,而執行刪除重複資料時,卻被刪除到。
<Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="SendMessage")>
Public FunctionSendMessageUInt32(
hWnd As Integer,
wMsg As enuWindowMessageId,
wParam As Integer,
lParam As Integer
) As UInt32End Function
Public FunctionGetCaretPos(ByVal EditControl As Control) As System.Drawing.Point
Dim i, j, k As LongDim lineNo, colNo As IntegerDim lParam, wParam As Integer
i = SendMessageUInt32(EditControl.Handle, EditTextMessage.EM_GETSEL, wParam, lParam)
j = Int(i / 65536)
lineNo = SendMessageUInt32(EditControl.Handle, EditTextMessage.EM_LINEFROMCHAR, -1, 0) + 1
k = SendMessageUInt32(EditControl.Handle, EditTextMessage.EM_LINEINDEX, -1, 0)
colNo = ((j + 65536 - (k Mod 65536)) Mod 65536) + 1
Return New System.Drawing.Point(lineNo, colNo)
End Function
VBNET 並不完全支援 UInt32 ,很多函數僅支援 VBNET 內建型別,因此在收 SendMessageUInt32 回傳值時,都立刻改為 Long 。
j 在算 HIWORD ,這個數值超過 65535 後,會從 0 再開始,類似里程表。
而在呼叫 EM_LINEFROMCHAR 時,依照 Windows API 說明,回傳目前位置是使用 -1 ,有用到選擇範圍時才用 lParm ,所以直接改成 -1 。