2019年1月31日 星期四

iOS 開發筆記 - [BoringSSL] nw_protocol_boringssl_input_finished, boringssl_context_alert_callback_handler, boringssl_session_errorlog, boringssl_session_handshake_error_print 處理方式

CFNETWORK_DIAGNOSTICS=3

看到以下訊息,完全摸不著頭緒:

[BoringSSL] nw_protocol_boringssl_input_finished(1543) [C294.1:2][0x11f2823d0] Peer disconnected during the middle of a handshake. Sending errSSLClosedNoNotify(-9816) alert
TIC TCP Conn Failed [294:0x2812a5a40]: 3:-9816 Err(-9816)
[BoringSSL] nw_protocol_boringssl_input_finished(1543) [C295.1:2][0x108589540] Peer disconnected during the middle of a handshake. Sending errSSLClosedNoNotify(-9816) alert
TIC TCP Conn Failed [295:0x2812d0540]: 3:-9816 Err(-9816)
[BoringSSL] boringssl_context_alert_callback_handler(3724) [C296.1:2][0x108450060] Alert level: fatal, description: inappropriate fallback
[BoringSSL] boringssl_session_errorlog(224) [C296.1:2][0x108450060] [boringssl_session_handshake_incomplete] SSL_ERROR_SSL(1): operation failed within the library
[BoringSSL] boringssl_session_handshake_error_print(205) [C296.1:2][0x108450060] 4838922792:error:1000043e:SSL routines:OPENSSL_internal:TLSV1_ALERT_INAPPROPRIATE_FALLBACK:/BuildRoot/Library/Caches/com.apple.xbs/Sources/boringssl/boringssl-109.230.1/ssl/tls_record.cc:586:SSL alert number 86
[BoringSSL] boringssl_context_get_error_code(3617) [C296.1:2][0x108450060] SSL_AD_INAPPROPRIATE_FALLBACK
TIC TCP Conn Failed [296:0x2812d0a80]: 3:-9860 Err(-9860)
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9860)
Task <FAB06FFC-73C2-48D8-AAEA-750F2FCF1969>.<0> HTTP load failed (error code: -1200 [3:-9860])
NSURLConnection finished with error - code -1200


最後拜讀 StackOverflow - XCode 9 iOS 11 BoringSSL SSL_ERROR_ZERO_RETURN 可以定義 CFNETWORK_DIAGNOSTICS = 3 數值來 debug,並透過 Xcode's scheme 管理環境變數即可,收工!

2019年1月29日 星期二

使用 Google Sheets 與 Google Script 進行簡易的人力管理

專案貢獻計算01

應該稱得上是第二份工作,老闆是一位三進三出工研院的強者,他主張所有都公開透明,採用美式(G社)的管理風格,讓各類 Project 都灑出去,決定好 Project Owner 後,各個 Project Owner 再去找成員進去。

每個 Project 重要程度不一,若成員想要達到好考績,不見得要參加各種專案,但是只參加一個專案肯定分數上又不是不夠的,而各類 Project 都參加又不貢獻,那分數依舊不佳。

這其實是一個有效管理極度壓榨人力的機制!但是好是壞,就看實際應用情況了,像是我也被老闆提醒一個觀念:資深工程師,本身就會身負重要職責,那本身就是對應著他價碼的任務的,若強用這種架構,那不就資淺的永遠難以翻身?

先無論其實用性,在這樣的概念上,試試看純靠 Google Sheets 製作,列個專案列表且每個專案依照其重要程度或開發時間列個重要分數,每個專案在列出成員貢獻度,最後再來個 Google Script 把各個成員的分數算一下,收工!

專案貢獻計算02

而 Google script 就只是輸入 工作表名稱 和 成員名稱,接著就會把他們計算出來,程式碼如下:

專案貢獻計算03

有需要可以參考:github.com/changyy/blog.changyy.org/blob/master/note/calc-member-contribution.gs

2019年1月26日 星期六

Chromecast 與 微型投影機 EZCast Beam J2 提供 Netflix 大螢幕投影

Chromecast + EZCast Beam J2 + Netflix

Chromecast 大家都不陌生,倒是有沒有人想一台小型、隨身投影機並且搭配 Chromecast 使用?投影機搭配 Chromecast 的好處是支援各大需要 DRM 保護的內容服務,如 Netflix、myVideo、Hami Video、CatchPlay 等線上影音服務,當 Chromecast 發現輸出 HDMI 資料的過程可能被竊聽/盜取資料時,整個輸出就會變成黑畫面的!

Chromecast + EZCast Beam J2

而使用 EZCast Beam J2 投放 HDMI 資料是符合數位內容保護機制,因此 EZCast Beam J2 微型投影機是可以搭配 Chromecast 使用,將 Netflix 等頻道內容投放出去眾樂樂。洽逢2019年初活動,入手了一台。

EZCast Beam 開箱 01
EZCast Beam 開箱 02 - 背後有規格: 3000 mAh 電池
EZCast Beam 開箱 03 - 主機 + 說明說 + 遙控器 + 電源
EZCast Beam 開箱 04 - 主機 + 遙控器 + 電源

先來提一下 EZCast Beam J2 這台定價台幣一萬元的微型投影機的定位(各大通路常有特價八折的價格)。在微型投影機的領域,常見台幣兩千以下的產品,與那些低價產品主因是硬體用料、投影技術的差別,反應在投影機亮度甚至投影機壽命。而投影機亮度常見單位是 ANSI 流明 跟 ISO 流明,兩者是計算的方式不同,而 ISO 流明數字是 ANSI 六倍左右。通常 2000 元以下的投影機,都會故意誇大自己的流明數,像是用 ISO 計算方式的流明或是胡亂標記,畢竟用戶很難認真比較、計算,建議使用上,還是參考投影機品牌的價格去推估。

EZCast Beam 開箱 05 - 散熱孔 + DLP
EZCast Beam 開箱 06 - 供電 + USB + HDMI + 耳機

就 EZCast Beam J2 而言,提供的投影機亮度是 ANSI 300流明 (約略 ISO 1800 流明)。拿 300 流明去 Google 一下,大概很容易看到破萬以上的品牌產品,如 Sony/Benq/Optoma/Acer/ASUS 等等,對等之下,EZCast Beam J2 在各大通路的特價後的八千價格,親民許多!可惜的是市場上太多低價投影機,導致萬元出頭的中階投影機容易失色於價格市場,甚至容易被誤會,這也是目前各大消費型品牌投影機碰到的困局,要嘛專注三五萬以上的高階機種,要嘛就跳下去做廉價的商品。

此外,影響投影機的價格還有:重量、體積大小。這兩個領域上 EZCast Beam J2 重量 400g / 體積 11.5公分x11.5公分x3.2公分 表現是很出色的,大多台幣1萬5以下的投影機,還很常看到 800g~1kg 等超過一瓶礦泉水的重量。

聊完一些價格上常吃悶虧的 EZCast Beam J2 後,回歸主題!當 Chromecast 搭配 EZCast Beam J2 後,可以有什麼便利的應用?當然是家裡電視不夠大,靠投影機投放到布幕上!透過微型投影機自帶 USB 插槽跟行動電源功能,可以便利地幫 Chromecast 供電,方便帶著走。

接下來就可以靠 Chromecast 提供的功能,播放 Netflix 影集等需要 DRM 保護的數位內容了。

Chromecast + EZCast Beam J2 + Youtube TWICE MV
Chromecast + EZCast Beam J2 + Youtube iKON MV

若對 EZCast Beam J2 感興趣,可以參考其他兩篇簡介及官網規格資訊,其實他根本不用靠 Chromecast 就可以完成很多無線/有線投影服務:
其他 Chromecast 相關簡介:

2019年1月25日 星期五

Google Analytics 使用筆記 - URI GROUPING

GA - 資料檢視 - 篩選器 - 搜尋與取代

這半年除了狂用 GA API 自製 Dashboard 外,偶爾也要強迫自已直接用 GA Web console 做事。在研究資料過濾/整頓時,發現 GA 的 資料檢視 已經做得很完美了,有個非常貼心的小功能稱作 篩選器 ,裏頭新增規則時可以做到 URI grouping 效果!

也就是,有些網址會帶很多參數,如:

/service?country=US
/service?country=TW
/service?country=JP&lang=

可以透過篩選器把他們都整合成一則:/service

如此,在觀看即時數據時,就可以一眼看出哪個服務最多人使用了!

使用方式:

資料檢視 -> 挑選/新建一個項目 -> 篩選器 -> 新增篩選器 -> 篩選器類型 選擇 自訂 -> 搜尋與取代

設定完後,下方還有 "驗證這個篩選器" ,很貼心

接著就能靠正規表達式子取代掉,達成 URI Grouping 效果。後續也可以透過這個篩選器,把不要看的流量去掉,讓人可以專注在該重視的項目上。

2019年1月4日 星期五

弦外之音

2019年一開始就有許多刺激的事情在進行,不少事都是冰山一角,聊完才略知弦外之音。

看來還是得好好規劃自己想走的路線,專注自己的步調。