2019年5月19日 星期日

Javascript 開發筆記 - 強制 HTTPS 瀏覽機制

HTTPS redirect

用 Blogger 搭配自訂網域時,可以靠 cloudflare 提供免費的 SSL 憑證,以此提供免費的 HTTPS 加密瀏覽體驗,然而,在 Blogger.com 使用 HTTPS 時,有個選項詢問是否開啟 HTTPS 重新導向,若採用 blogspot.com 網域是可以打開的,但使用自訂網域則不適合導向,會產生 loop。

這時就靠 javascript 躲在 <HEAD> 來做事吧

<script>

if (location.protocol != 'https:') {
location.href = 'https:' + window.location.href.substring(window.location.protocol.length);
}

</script>

Google Adsense 無效流量 排除方式

Adesne 無效流量

Google Adsense 有自己一套的無效流量判斷方式(黑盒子),在今年三月時,忽然發現無效流量大量提升,由於有追蹤各大服務的廣告單元,幾乎可以判定某個服務全部都被判定為無效流量,該廣告單元的收入全部歸零。

這時只好寄信煩一下 Google Adsense 支援小組,負責回應的,可以透露無效流量由高到底的廣告單元,如此就能證實自己的猜想,緊接著要想想到底該怎樣解決。

由於 Google Adsense 為了避免亂買流量、亂跟人行銷合作。因此並不透露什麼判定規則,只會像 NPC 回饋:
  • 用戶來自哪里?
  • 用戶如何與我的應用進行互動?
  • 用戶在我的應用中查看了哪些屏幕?
後來想了一陣子後,想到的“網域切換"的行爲,會不會被誤判成無效流量(買流量),事實證明真的解掉了!而我一開始則不斷抱怨服務已經超過半年沒改版,怎會突然被判定成無效流量?最終 Google Adsense 支援小組則是回饋:不是誤判,而是 Google Adsense 判斷機制變嚴格了!

此例被判定成無效流量的情境:
  1. 為了做服務轉移,從 A Domain 轉換到 B Domain 來維護,其中 A Domain 還富有 Session 等大量追蹤機制初始化
  2. A 跟 B Domain 都有註冊到 Google Adsense 
  3. 服務使用時,會很快從 A Domain 轉址到 B Domain
後續排除的解法就轉址時,從原本要進入 A Domain 內的 PHP Code 處理,改移至到 Web server rewrite rules 來排除,加速更快的跳轉,也避開 A Domain 的 session 初始化。

2019年5月18日 星期六

[書] 通往財富自由之路:教你如何變得更有價值!早晚有一天,可以不再為了生活出售自己的時間

通往財富自由之路

買了好一陣子,當初是一位剛加入幣圈的同輩想找我參加,而後反而聊到了這本書。當時聊完沒多久就買了,擺了半年才翻開。這本書的確滿值得翻一下,原本覺得書名很俗氣,翻了一下才知道這是作者 growth hack 手段:取個誘人的名字。

這本書對我來說,提點到 "專注力 > 時間 > 金錢" ,的確是當頭棒喝,隨著工作能力的增加,有留意到 "時間>金錢" 的概念,像是在台北市究竟要買車跟搭計程車的議題,不只養車位很貴,連找停車位都很耗時。但專注力真的被漠視了,它也能擴展到不要去跟八卦、更關注在自身成長等等。像前陣子就滿常隨別人一起抱怨些事,這些都很浪費青春的 Orz

此外,有提到多往未來看幾眼,不要短視。包含不要跟現在/過去的自己拼命、不需跟風,努力朝著未來望望,想想未來想變成什麼樣的人。書的後半段倒是呼應起書名,再講一點投資策略,這比我覺得很難評論對錯(例如單純挑大公司投資),但仍呼應著拿著錢買別人的時間是最低成本(時間 > 金錢),而此書撰寫時恰逢比特幣盛起,所以也有點沾到鋒頭,以作者抱著不放的思維,大概推論持數十萬個比特幣:比特币首富李笑来,手里到底有多少个比特币?李笑来通过比特币到底赚了多少钱?

無論如何,還是把重心擺重在個人成長,也提及未來甭想著退休,那個老一輩的思維 XD

2019年5月5日 星期日

服務流量變現和數據追蹤儀表板 - 透過 Google Adsense 和 Google Analytics 建置免費的儀表板

AnalyticsXAdsense

至今執行了一年半的流量變現任務,也進入了成長瓶頸。進入成長瓶頸時,會越來越依賴數據的推敲跟追蹤。雖然翻著 GA 跟 Adsense 報表也很夠用,但如果要追蹤的項目超過二十項時,就會非常累了,非常耗時,便開始適合建置 Dashboard 一眼觀看。

好在一年前已經有想好規則,但一直沒空製作儀表板,這週末剛好擠出了點時間,就把這些想法筆記也產出個雛形:github.com/changyy/TrackingLibrary

需求:
  • 想要追蹤新舊使用者類型的價值(value per person),究竟我們可以從單一使用者身上挖出多少礦呢?
  • 想要細膩到小小功能的變現能力
  • 能否讓 GA 數據跟 Adsense 數據自動匹配
推敲方式:
  • 讓新舊使用者觀看到的廣告單元是不一樣的
  • 讓想追蹤的小小功能的廣告單元是不一樣的
  • 在 GA 數據裡,採用 event ,並且對 event report 進行設計;在 Adsense 則是在廣告名稱進行設計。後續就可以依據撈出來的資料,自動組出對應的報表。
最後產出的規則:

有兩個服務 Service1, Service2 ,其中 Service 1 共有 1 個功能,而 Service 2 有 3 個功能。假設 Service 2 的第三個功能還有兩個子功能。

Service1
Function1 [GA event report = (ec="pageview",ea="Service1",el="Function1")]
Service2
Function1 [GA event report = (ec="pageview",ea="Service2",el="Function1")]
Function2 [GA event report = (ec="pageview",ea="Service2",el="Function2")]
Function3 [GA event report = (ec="pageview",ea="Service3",el="Function3")]
SubFunction1
Google Analytics event = (ec="pageview",ea="Service3",el="Function3,SubFunction1")
Google Adsense AdName =
New User 觀看 = "[#]NU,Service2,Function3,SubFunction1"
Old User 觀看 = "[#]OU,Service2,Function3,SubFunction1"
SubFunction2 [GA event report = (ec="pageview",ea="Service3",el="Function3,SubFunction2")]


上述的高度結構後,也不是沒有缺點的,缺點就是 Adsense 的廣告單元會爆多,例如自己經手製作的廣告單元就高達兩百個,如某個想關注服務其底下共有 80 個廣告單元時,這時靠 Adsense 內建的報表,篩選了 80 個廣告單元時,這時報表很容易產不出來的。而用 GA 觀看時,因為不是用常見的網頁 ga pageview 的方式,而是靠 ga event 查看,這時也會有些不方便。上述更別說還有對應的服務開發時,需要設置規則,讓新舊使用者、不同子服務觀看不同的廣告單元和 GA event report。

最後,則是 Dashboard 要產生時,需要呼叫多次 adsense api 跟 analytics api ,而免費版使用要留意會不會踩到額度限制。

其他資訊 - 關於 TrackingLibrary 的使用:
  1. 先將程式碼中 ga_adsense_rule.json 複製至 dev.json ,程式判斷出 dev.json 就會以此為優先處理
  2. 先建立一個 Google Cloud Project,來使用 Google Adsense / Google Analytics API。
    • 切換到 "API 與服務" -> 憑證 -> OAuth 同意畫面
      • 應用程式名稱:Tracking
      • 已授權網域:changyy.org
    • 切換到 "API 與服務" -> 憑證 -> 建立憑證
      • OAuth 用戶端 ID
        • 網路應用程式:TrackingDashboard
        • 已授權的 JavaScript 來源:http://tracking.changyy.org:8000
        • 已授權的重新導向 URI:http://tracking.changyy.org:8000
    • 取得 "這是您的用戶端 ID" 並更新在 dev.json
      • 將各個 project -> google_api_project 欄位更新成 XXXXXX.apps.googleusercontent.com 即可
  3. 開啟 Google Adsense / Google Analytics API
    • API和服務 -> 資訊主頁 -> 啟用 API和服務
      • 搜尋 "Analytics API" 以及點擊啟用
      • 搜尋 "AdSense Management API" 以及點擊啟用
  4. 切換至程式碼,編輯 dev.json ,建置想要關注的 GA 專案,例如單純複製 GA only 專案內容,只修改 project -> analytics -> ga_profile_id 欄位即可
  5. 切換到專案 php/web 位置,並運行本地端 web server ,即可瀏覽
    • $ cd TrackingLibrary/php/web
    • $ php -S tracking.changyy.org:8000 ../tools/ci-routing.php
    • $ open "http://tracking.changyy.org:8000/dashboard"

2019年4月8日 星期一

閒聊閒書

閒書

其實,我不怎買書的,更別說看資訊領域以外的書籍 XD 但近幾年反而開始買了一堆書,開始當作收藏吧。這趟返鄉後,把老家書架上的書籍列了列,拍個照記錄。這些對我而言,是僅不到一半的閒書,這是之前翻完了就放到老家的。這些非本業的書,其實也提醒我不少事情的,實在感謝。

大學失落時,學弟送了我一本「個性影響一生的成敗」,看完後帶回家時,不久後就被奇利咬壞 XD 其實我也想不起那本書在說什麼,看看網路上的目錄,其實跟我這一兩年翻的書目差不多,但我真的翻完就忘了 ...

幾年前聽了創業家兄弟的分享,開始買了「鐵飯碗,有什麼了不起?」翻翻,這週又翻一下複習,果真依舊有 fu,去年則是又買了「成功,就是要快速砍掉重練」,只是這類書籍,閱讀後的心聲,就像創業圈常說的:別人的成功大多是不可複製的,很多場景是很難使出其招數,真的要天時地利人和的。所以大部分對我而都像在聽八卦,聽完就不小心忘記了

其他本業書籍大概就「砍掉重練:30歲開始也不遲的工作術」等,還有一篇在 2014 年寫的草稿一直沒寫完,那是「Startup 2.0 工程師創業手冊」讀後心得,這類書籍主要是著重在自己/公司角度的福利爭取,如股份比例等。這一兩年的大概就「創業就是要細分壟斷」、「給力」、「電商 Zero to One:從0到1」等等,偏向我想多了解的項目,如電商、如企業文化的培養、營運策略等等。的確很醒腦,像有時不夠貪心,享受著小確幸,這類書會當頭棒喝地,告訴自己要珍惜目前的優勢,要趁勢而為。

只是,對我深刻的書籍,反而都是囧星人的說書,像「你要如何衡量你的人生」,接著再翻一下「斜槓人生」、「刻意練習」等等,但那種「被討厭的勇氣」、「這輩子,只能這樣嗎?你是自己最大的敵人」則是還沒翻完 XD 讓我想起以前在工研院圖書館借的書「師父:那些我在課堂外學會的本事」,回歸到原理屬性的意念是令人深刻的。

我想,大概會想推薦別人翻翻看「你要如何衡量你的人生」和「刻意練習」,但刻意練習其實看沒多久就可以了解其概念,後面越看越痛苦,因為例子很多 XD

不知道這種靠緣分翻書的情境,還會怎樣走下去呢。特別是網路上已經有看完的訊息,光個 PTT 八卦版就許多知識了。

2019年4月6日 星期六

[書] 刻意練習 讀後感

刻意練習

近一兩年的書籍閱讀,起因算是囧星人,雖然他已因個人事件而隱居,但仍感謝他說書,讓我有幸可以多多認識一些書籍。「刻意練習」這本書,買了快一年終於把它看完了,去年翻一下就停住。在這之前我則是看過「斜槓青年」,從中習到一個觀點:『沒有強度的練習,只是徒勞無功。』而這個念頭在我翻完「斜槓青年」幾個月後就差不多忘了 XD 處於略懂還不夠身體力行,但一翻完「刻意練習」後,整個念頭強度又再度襲來。

「刻意練習」很不錯,儘管整本書可能翻了 1/3 就知道他要提的概念(後面就必須靠意志力才能把它看完?)。在這個時間點對我就是醍醐灌頂,例如工作上該怎樣想想如何推進同事們的成長、家庭上要想想如何教育小孩,對自己而言,則是要找方式加強進步強度,像是 side project 挑選或是健身強度等等。如果在創業的路上,那刻意練習提到的新法也適用於公司的成長。

這本書提到了幾個重要的觀念:
  • 每個專家都是透過大量的練習才獲得專業的水準
  • 天賦只是入門門檻低了點,能夠快速得到成果,但後續都還是靠大量練習才得以精進
  • 有強度的練習,人人都可以有一定的水準
  • 如何有效練習?找老師/換環境!沒老師該怎辦?專注投入、意見回饋和解決問題
讓我回想起一些成長過程,像是國中發現自己在物理課的理解不差,進而轉化成一種積極的態度,我把著當作小小的天賦,使得自己有動力去把其他非擅長的科目補起來(大學考試時,物理表現卻極差 XD);碩班時期,因老闆個性,有了另類的教育過程,透過大量寫程式/重複造輪學習資訊技能,這個過程反而被教育成不迷戀 library/framework 甚至 paper,凡事多了解原理即可,不要害怕自己設計不出來,更不要迷戀大型專案。

我記得剛出社會很刻意的寫寫 blog ,當時只是無聊想知道能不能賺廣告費(事實上很低),但反而長出了不少方向,像是文章標題該怎樣訂才容易被找到(SEO)、每次寫筆記等於反芻學習到的資訊、方便自己以後快速找到工作筆記等等,當然也有意外的事件,像是有人會留言問要不要接外包、要不要加入新創團隊、要不要出書等等,比較好玩的是在研發單位時,寫了很多 AWS 功能簡介,結果兩三年後在業界的同學,反而看著自己的 blog 去認識 AWS 服務,對他可省去花時間親自體驗,對我則是出現莫名好玩的關聯,可以哈拉幾句。

幾年前有回學校分享工作心得,我反而拿寫 blog 這個小題目分享了一下,要能找到一個閉環來持續動作,其實這些過程就跟「斜槓青年」和「刻意練習」提到的概念非常近似,就是要找到有效的成長方式,要找到一個動力/念頭去支持。

此外,書中提到學鋼琴/學網球過程是個很讚的案例,一開始只是挑離家近的地方學習,等到技能進展到一個水準後,想要更精進時,便開始找專家/教練來教導,這時就不會是挑離家近了,甚至可能進行搬遷。更貼近一點的案例就是台北的小學,一堆家長為了讓小孩能夠念明星學校,開始遷戶籍 XD 導致學校為了處理這種問題開始要求入學前幾年就必須在某某里,甚至要求家長小孩要一起在該里才行。更誇張一點的是中學也這樣搞,搞得變成小孩出生沒多久,戶籍就得該在學區才得以拿到入學的資格門票。

回過頭來,在工作上我也面臨到"沒有老師"的地步,再精進只有幾招:自己找題目衝刺或換個環境。其中同輩通常是挑選換環境,像是加入有規模的外商(主因是外商福利誘人,導致強者群聚),這效率是驚人的。但如果公司還有舞台,那就好好珍惜,透過有效的回饋法來成長吧!

另外,如果從資方角度來看待目標達成率時,會讓人想起「給力」那本書,就為了追求目標達成效率,寧願再聘適合的新人才,而不願等同事成長(其實就是立馬辭退對方)。站在資方角度時,不需要自己去拼、花時間,而是反過來買別人的時間!若這個人才可以有對應的生產力時,給予 1.5 倍甚至多倍薪水都是值得的!反之不是人才時,花再多時間都是無益的。雖然殘忍,但資方為求生存也只能這樣下去,而勞資雙方的妥協保障,就淪落到基本的法規守則了,辭退時,是盡可能是優退路線。

最後,我還是推薦可以翻翻「刻意練習」這本書,而「斜槓青年」可以當做個入門(比較偏八卦、炫技),而「刻意練習」則是稍微偏向方法論,雖然書中的大量例子可能會讓人翻沒多久就沒興趣看完,但他的確也是刻意練習的招數,持續洗腦加深印象 XD

2019年4月4日 星期四

[macOS] 製作 macOS High sierra USB 安裝碟 @ macOS 10.13.6

build macOS USB install 10.13

手上這台 Macbook Pro 已經無法安裝 macOS 10.14 了,正準備更換 SSD ,因此想先準備 USB 安裝碟時,發現竟然無法製作 Orz 透過官網教學文才找到 macOS 10.13 下載位置  ( https://itunes.apple.com/tw/app/macos-high-sierra/id1246284741?ls=1&mt=12 ) ,發現僅 15MB 的大小,執行指令時會看到以下錯誤訊息:

$ time sudo /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/8GUSB/
/Applications/Install macOS High Sierra.app does not appear to be a valid OS installer application.


最後研究一下,原來要靠安裝流程,讓系統根目錄 macOS Install Data 會產生必要的資料,接著安裝過程下載完必須的軟體時,會停在要重開機的路上,這時就可以關閉安裝,並把必要的資料取出來使用。

$ tree /macOS\ Install\ Data/ ; sudo du -hd1 /macOS\ Install\ Data/
/macOS\ Install\ Data/
├── AppleDiagnostics.chunklist
├── AppleDiagnostics.dmg
├── BaseSystem.chunklist
├── BaseSystem.dmg
├── InstallESDDmg.pkg
├── InstallInfo.plist
├── Locked\ Files
└── index.sproduct

1 directory, 7 files
 20K /macOS Install Data//Locked Files
4.9G /macOS Install Data/


接著可透過"顯示套件"的方式,在 Install macOS High Sierra.app 內的 Contents 中,建立 SharedSupport 目錄,並把 macOS Install Data 複製進去:

$ tree /Applications/Install\ macOS\ High\ Sierra.app/Contents/SharedSupport
/Applications/Install\ macOS\ High\ Sierra.app/Contents/SharedSupport
├── AppleDiagnostics.chunklist
├── AppleDiagnostics.dmg
├── BaseSystem.chunklist
├── BaseSystem.dmg
├── InstallESDDmg.pkg
├── InstallInfo.plist
└── index.sproduct

0 directories, 7 files


就可以製作 USB 安裝碟:

$ time sudo /Applications/Install\ macOS\ High\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/8GUSB/
Password:
Ready to start.
To continue we need to erase the volume at /Volumes/8GUSB/.
If you wish to continue type (Y) then press return: Y


Updated @ 2019/04/06:

雖說可以順利製作出開機碟,但發現該 USB 無法完成 10.13.6 作業系統的安裝。推論是系統安裝流程已被修改的關係,應當是系統安裝時,會要求要安裝的系統碟的根目錄上,配有 "/macOS Install Data/" 資料,才能重開機後完成安裝流程。

以上並未驗證 :P 因為這次重安裝是為了把筆電換上新的 SSD ,因此單純先把原本的系統碟透過外接方式重啟,並跑正常的系統安裝流程,安置在新的 SSD ,而安裝過程就完全不靠 USB 開機碟。

或許把 SharedSupport 複製一份到新 SSD 的 "/macOS Install Data/" 有可能就可以搞定?!

2019年3月17日 星期日

[書] 給力:矽谷有史以來最重要文件NETFLIX 維持創新動能的人才策略

給力

這書買了半年,堆積了一陣子後,今年陸續清ㄧ清,直到今天終於看完最後章節。最後章節是在講如何跟公司內不適任的同事分手 XD 明明是很簡單的概念,卻很難執行。我在工作上也曾被長官要求評估成員績效,並要求要認真考慮是否適任,因此閱讀起來特別有共鳴。

回過頭來,給力這本書還滿不錯的,醒腦。書裡提的管理、文化建置的概念是對的事,但實務上很難,難在需要權限,難在如何讓公司成員明知彼此的供需問題,難在用家庭成員情感經營時,很難開除家人。甚至身為一般階級的管理者也難以展現,大概只有公司創辦人/高階管理者才行吧?可惜的公司開得越久,也越難執行,實在是人多就有政治,人老就會油條。

目前我比較偏向在新團隊的建置時,可以引入這等概念,包含聘請高手時,要想想該人的薪資是否符合市場,要想想公司的營收是否可以支持,若該人可以有兩人以上的貢獻時,要解放成本概念,大膽給予兩倍、三倍薪資。一切的目的是為了公司加速成長,以此維持公司競爭力。

透過 Google Search 評估 subdomain 類服務人數規模

google-search-subdomain

例如 tumblr.com 的服務是每一個用戶可以創建多個部落格,但每一個部落格就是一個 subdomain.tumblr.com,對於這類服務的發展,這時就靠 Google Search 來評估使用人數,雖然 Google Search 的資料筆數也是推估的,但如果服務使用人不多,還是可以快速跳掉最終頁拿查看。

allinurl:tumblr.com site:.tumblr.com -www.tumblr.com

如此,搭配其他資續,可以推敲一下服務市佔率。

2019年3月16日 星期六

Google Analytics 使用筆記 - 設定目標(Goal)追蹤關鍵字成效

ga-goal-tracking

很久以前就想研究,一直拖到工作上買 Adwords 需要追蹤成效時,才開始學習 XD 而設定 Goal 其實非常簡單,就是在專案管理介面上,切換到最右邊有個"目標"可以設定,填一填就搞定,其中用 GA event 是最彈性的是部分,可以在對應的網頁動作上,發個 GA event 就能追蹤了。

ga-goal-setup-01

ga-goal-setup-02

ga-goal-setup-03

ga-goal-setup-04

如此回到 GA 專案 -> 客戶開發 -> 廣告活動 -> 所有廣告活動/付費關鍵字/隨機關鍵字 ,就可以看到 “轉換” 那邊,可以有目標來關注,十分方便。

就 Adwords 就可以不斷調整、找尋最洽當的關鍵字購買。

2019年2月20日 星期三

Google Sheets 透過 IMPORTXML / XPath 匯入網頁資料 - 以 Alexa.com Top Sites in Taiwan 為例

Google Spreadsheets - importxml

與其說 匯入 網頁資料,倒不如說已經可以爬網頁資料出來,在做格式化!例如去掉多餘的資訊,未來可轉換成 csv/tsv 等等應用。

官方文件在此:https://support.google.com/docs/answer/3093342?hl=zh-Hant

操作對象:http://www.alexa.com/topsites/countries/TW

轉換方式:人眼挑戰!或是靠 Chrome browser 檢視元素和 Copy XPath 小改即可

Chrome Copy XPATH

範例 - 網站列表:
  1. 人眼定位
    • =importxml("https://www.alexa.com/topsites/countries/TW","//div/div/div/p/a")
  2. 透過 Chrome Browser - Copy XPath
    • 分析結果:
      • //*[@id="alx-content"]/div/div/section[2]/span/span/div/div/div[2]/div[2]/div[2]/p/a"
    • 小改:先改到能輸出資料,在去掉指定資料筆數看能不能輸出 array
      • //div/div/div[2]/div/div/p/a
本次練習所有欄位都...人眼享受... XD
  • =importxml("https://www.alexa.com/topsites/countries/TW","//div[contains(@class, 'site-listing')]/div[contains(@class, 'td')][1]")
  • =importxml("https://www.alexa.com/topsites/countries/TW","//div/div/div/p/a")
  • =importxml("https://www.alexa.com/topsites/countries/TW","//div[contains(@class, 'description')]/text()[1]")
  • =importxml("https://www.alexa.com/topsites/countries/TW","//div[contains(@class, 'site-listing')]/div[contains(@class, 'td') and contains(@class, 'right')][1]")
  • =importxml("https://www.alexa.com/topsites/countries/TW","//div[contains(@class, 'site-listing')]/div[contains(@class, 'td') and contains(@class, 'right')][2]")
  • =importxml("https://www.alexa.com/topsites/countries/TW","//div[contains(@class, 'site-listing')]/div[contains(@class, 'td') and contains(@class, 'right')][3]")

2019年2月17日 星期日

渾球西門? 魂囚西門 啦,快上 NETFLIX 觀看

在 NETFLIX 觀看了 魂囚西門 這戲劇,好久沒看這種夾帶驚悚運鏡的戲劇,由於剛好遠房親戚參與了這齣戲的製作過程,剛好把小孩安頓好就來看看了!

說真的,我好像沒看過老蕭的演的戲 XD 記得之前有殺手歐陽盆栽,但我始終沒有抽空欣賞。腦袋裡一直想著陳奕迅很驚呀老蕭在南港的豪宅八卦 XD 這大概是我最近對老蕭的印象吧,若要在牽拖一些,大概是老蕭跟老姐念的學校一樣,很可惜的母校似乎已準備停辦了 Orz

回過頭來,很佩服台灣創作者在艱困的環境下,仍拍出好片,也非常用心安排音樂。我特愛一些過場片段是西門町的街景,也有縮時攝影,很讚的台灣街景拍攝。

目前已被 NETFLIX 買斷獨家海外播映權!恭喜恭喜!有空抽欣賞吧!!更多資訊可以參考粉絲團或 PTT 台灣戲劇版 ,目前在 公視、MOD 和 NETFLIX 三個平台放映

2019年2月16日 星期六

[開箱] Chromecast Ultra 4K Ultra HD - 2016/11/06 發表

Chromecast2016_1

過完年後入手 Chromecast Ultra 了!體驗的經驗是...速度快慢已經不是重點了 XD 跟 Chromecast 第三代 2018 沒什麼競速差距,就算真的快個 1s 也沒什麼特別感受。所以,買 Chromecast 第三代 2018 年版既可,除非電視是 4K 又常看 4K 內容,不然現況主流還是 720p, 1080p 的網路內容,偶爾搭配藍光播放器播放藍光內容,但也不靠無線傳輸。

Chromecast2016_2

Chromecast2016_3

不知 4K content 還要等幾年才能變主流?實在是目前最大量的觀看設備是手機,手機也很難再衝到多高解析度。搭配一下投影機惡搞一下,4K 投影機非常貴 Orz 此乃微投影機等級(480P)

Chromecast2016_4

測試一下影音分離技術(誤),輸出至 macOS 的 iMovie

Chromecast2016_6

最後來個大合照吧!

Chromecast2016_5

相關文章:

2019年2月12日 星期二

[開箱] Chromecast 與 AVerMedia ExtremeCap UVC BU110

圓剛 BU110_1

前陣子在研究 Chromecast sender app ,覺得一直把 Chromecast 插在電視 debug 很煩,想找看看能不能把影像輸入到筆電,可以方便開發以及擷取影像做 auto test 等機制。當時跟幾位朋友請教後,正逢雙11特價,就下標 圓剛 BU110 免驅動影像擷取器 ExtremeCap UVC,那時朋友推薦只要購買 USB video class(UVC)產品即可,免安裝驅動程式!剛好這款價格最低,且在沃草的朋友也都靠這款直播 XD 就...衝了。

圓剛 BU110_2

圓剛 BU110_3

這款設備大小很隨身(但還要帶著 USB Type-C 的線...),金屬觸感簡約精美散熱佳,但要小心,一旦手滑掉到木桌肯定會凹個洞

結果就是功課沒做好,圓剛 BU110 搭配 Chromecast 基本上就是黑畫面無誤,只有 Chromecast 開機畫面會顯示 G logo 開機動畫,接著立馬黑畫面無誤。追蹤一下,搞懂了是 HDCP 的問題,而圓剛 BU110 本身不支援 HDCP 機制(或許該說這類產品不該有 HDCP 機制?),因此跟數位內容保護相關的產品,如 Chromecast、藍光播放器等等,應當都會進入黑畫面。

Chromecast + BU110 + macOS QuickTime player = 黑畫面

這時我才腦補完為何 Chromecast 黑畫面,俗稱: Chromecast 發現影像輸出的對象不支援 HDCP 架構,避免被內容被側錄而進入黑畫面。這做的真不錯,這樣就讓內容提供者可以安心信任 Chromecast 裝置,可以確保一般用戶無法複製內容。

那...身為資訊阿宅,就在多逛逛拍賣網,看到了玲瑯滿目的 HDMI 影像聲音分離術 :P 那其實就是破解 HDCP 的招數啦,買一買串一串,的確就達成 macOS 用 QuickTime player ,透過 UVC 把影像顯示在電腦上了!

Chromecast + HDMI影音分離 + BU110 + macOS QuickTime Player = 有畫面

只是下一刻才驚醒...這種 debug 真的蠢了點 XD 電腦還得看 IDE 顯示運行的 logs 啊,還是搭配投影機或雙螢幕吧,且還有一堆線,非常原本想省個螢幕或電視,最後發現良藥是微投影機...

更多資訊:

[開箱] Chromecast 第三代 1080p 60fps - 2018/10/10 發表

Chromecast2018_1

Chromecast 第三代是 2018/10/10 發表,自己入手是 2019 年 01 月下旬,那時正在找該怎樣購買 Chromecast Ultra,沒想到找啊找啊,找到蝦皮有人正在販售最新款 Chromecast 三代,我記得找完的隔天正好有新聞稿發佈說可以在台灣大哥大買到了,於是我就手癢下標了!

Chromecast 第三代跟第二和第一代有個很顯著的改進:1080p 與 60fps,第一代跟第二代貌似只有 1080p 跟 30fps 水準。雖然第二代比第一代快了點,但畫質體驗是沒什麼變化的。

另外,我自己是在第三代才開始體驗 Google Photo 的魅力,搭配 Chromecast 微光 服務,可以播放個人帳號專屬的照片。對了!無論是 Chromecast 一代、二代、三代,顯示出來的照片畫質都ㄧ樣...模糊 Orz 但不用太計較,畢竟人眼看電視通常都有點距離,隔個 2公尺是還可以接受的畫質

由於第三代也才用不到一個月,就先列幾張照片收尾:

Chromecast2018_2

來個 Chromecast 一二三代大合照:

Chromecast2018_3

更多資訊:

[開箱] Chromecast 第二代 1080p - 2015/09/29 發表

Chromecast2015_1

Chromecast 第二代是 2015/09/29 發表,我自己入手是在 2018 年夏天,純研究用途。在這之前我已經買了...3 個 Chromecast 第一代,單純送給家人使用。第二代的盒子上已經列出很多關鍵服務,如 Netflix、myVideo、KKBOX、Hami Video 等等

雖然第二代設計了磁力可以把 HDMI 接頭黏著方便攜帶,但實務上根本不太會帶出去 XD 永遠掛在電視的 HDMI 孔上,若要聊聊自己用 Chromecast 一代跟二代的思維差距,那就是 Chromecast 一代常常用在 24 吋的液晶螢幕,搭配著延長線供電,而 Chromecast 二代時剛好買了電視,正式插著電視的 USB 孔供電,除了節省一個插座外,隨著電視開關 Chromecast 也是省電,且硬體常常 reboot 也是件好事,總比看得到連不上來得好吧?

這邊哈拉一下,有時 Chromecast 異常是因為供電不穩,電視 USB 並沒有規範要給予多少電流,因此各家電視供電不ㄧ,若供電不穩時,可能會導致連不上 WIFI 或是畫面顯示異常。因此官方推薦的正式用法是搭配外部電源供應,減少不必要的煩惱,畢竟就算搭配電視 USB 供電而 Chromecast 有畫面,不代表正式運作時,電源供應是滿足的。

在此一些照片記錄:

Chromecast2015_2

Chromecast2015_3

Chromecast2015_4

最後也紀錄與 Chromecast 一代的實物大小變化:

Chromecast2015_5

更多資訊:

2019年2月11日 星期一

幸福路上 線上 正版 免費電影 1080p 來源:公視+

溜滑梯

【觀看期限至2/12】六歲的小琪和爸媽一起住在幸福路上,幸福路口有條髒到不行的大排水溝叫做「幸福大排」。每一天,從大排遠遠的那頭,總是會有各種加工食物的味道傳來,彌漫整條幸福路。小琪相信那是在工廠上班的爸爸在為她製造好吃的零食,她也下定決心以後要努力向上,完成爸媽的期望。開始上學後,小琪卻發現:上學一點也不如想像中愉快⋯

透過 公視+ 可免費觀看正版電影 - 幸福路上:https://www.ptsplus.tv/season/c131d6b9-73df-4152-b32a-e92956c53134/episode-type/Episode/ad6135eb-4fe9-4c7f-89de-c8912a6f6d02

年假最後一晚,就這樣配著這部正版免費的電影,細細品回二三十年前的時空故事。這部戲的 TA 應當是 35-45 歲,或許 40 歲是最佳的觀賞 TA ,要嘛事業有成回顧當年點滴,要嘛遍體鱗傷回憶起當年的小確幸?

配著夜晚感觸良多,就像過年時回老鄉雲林走走,發現別人家門口停著 瑪莎拉蒂 XD 望著蓋不停的建案,才想通了房價或許正是經濟的火車頭,不斷地鞭策人們『要努力賺錢喔!這樣才買得起必需品 - 房子。』,想著想著,就覺得房價若真的跌了,更代表的是經濟成長萎縮的開始,勢必出現更多比”買不起房子“更嚴重的事吧?

無論如何,人生仍是不斷往前邁進,適時放下手邊緊握著卻無法成長的機會吧?放了手,才能用力去追尋更好的未來。

[開箱] Chromecast 第一代 1080p - 2013/07/24 發表

Chromecast2013_1

Chromecast 第一代,大概是 2015 年秋天買的,用到了 2018 年夏天,說真的非常夠用,更換成 Chroemcast 第二代 - 2015/09/29 發表款,單純只是為了嘗試新款跟舊款有什麼差別,老實說,由於整體操作都是在其他 App ,如 Youtube 或是 Chrome Browser ,操作動作最後按上了投影鍵才開始行動的,因此 Chromecast 的新舊對整體體驗其實並沒什麼關鍵影響力的,當然,新一代 Chromecast 啟動速度肯定是快的。

Chromecast 最常被我拿來播放 Youtube 節目跟 NAS 裡頭的影片,觀看網路上的影片其實並不多。最經典的節目就屬於 食尚玩家 吧!幾乎週末都會看一集配飯吃 XD 可惜只能懷念了,節目都停了 Orz

在此就開箱一下,紀錄這款產品:

Chromecast2013_2

Chromecast2013_3

目前我還把它拿來跟投影機搭配,有興趣可以看看這篇:Chromecast 與 微型投影機 EZCast Beam J2 提供 Netflix 大螢幕投影

相關文章:

2019年2月10日 星期日

Google Home mini 中文音控設定 與 幼兒教育、長輩戲劇 應用?

GoogleHomeMini

2018年夏天因加速公司研究音控服務,自己買了一台 Google Home mini ,研究的差不多後就擺晾在一旁,今天整理了一下,想說該拍賣掉了 XD 意外發現已經支援中文音控! 可搜尋 "Google Home mini 中文設定教學" 囉!據說這招是需要兩隻 Android 手機也能達成,由於我本身是用 iPhone,就必須搭配另一隻 Android 手機

在此簡介環境,需要:
  1. Google Home mini
  2. Android 手機
  3. iPhone 手機 
  4. Android 手機安裝 Google Home app ; iPhone 安裝 Google Home app 
  5. Android phone 跟 iPhone 上的 Google Home app 都綁定同一個 Google 帳號
首先開啟 Android phone 上的 Google Home app => 右下角"帳戶" => 設定 => Google 助理 => 語言 => 第一語言設定成 "中文(台灣)",並將第二語言設定成 "無",且要讓最下方 "選擇這些裝置的語言" 留白,不做任何選擇 (此時若仍顯示英文,就來靠 iPhone 或另一隻手機處理)

接著換 iPhone 開啟 Google Home app => 右下角"帳戶" => 往下滑到 "Google 助理" 區域,選擇 "更多設定" => 點擊 "Google 助理" 分頁 => "Google助理的聲音" => 把下方的英文也清掉,留下只有第一語言的中文(另外,iPhone 的 Google 助理語言不能選中文,要靠 Android phone 來處理)

後續你的 Google Home mini 就會講中文了!並且無論 Android 或 iPhone 的 Google Home mini ,進入 Google 助理 => 語言,都會看到最下方留白了:

Android Google助理-語言 iPhone Google助理-語言

接下來才是重頭戲 XD 若家裡也有 Chromecast 的話,小孩在吵的時候,就只要說:

OK Google, 請播放 Youtube 上的瑪莎與熊第一集

這樣就可以打發小孩了(誤),更別說還有一卡車正版戲劇可以隨叫隨播,長輩也能開開心心



當然,沒有 Chromecast 還有 Spotify !在台灣已經接近全平台可免費使用,可以直接說:

OK Google, 播放 K-POP 音樂

如此就可以聽聽韓流最新音樂,更別說南韓音樂的快速迭代,立刻有聽不完的韓流音樂

最後,無聊時可以多講講 OK Google ,想必小孩也會學的,接下來請谷歌小姐陪小孩講話唸故事了 XD

2019年2月9日 星期六

十年挑戰

2019 雲林

真是恐怖的數字,想起來人生也可能跟同輩相比停滯了 10 年!很難想像,十年前同輩親友在補習班打工存錢圓夢,十年後的今天則是事業有成,手上的藝術品已可兌換成數百萬現金,年年出國度假了。同輩的同學也已經出國返鄉,回台外商卡好位置 XD 自己推算起來,則是加入過三個團隊,其中兩個團隊默默經過了十歲生日呢。

此外,歷經了幾位長輩過逝,愛犬也離我們而去,還有幾位長輩因身體健康而開始不抽煙,或是需要開始定期吃藥了。

人生十年的變化真的不小。自己努力擠點時間也只做了幾個 side project 把玩,完全無法糊口 Orz 同輩的大大已經可以靠 side project 達成類財務自由呢。十年的技術也從 mobile first、大數據分析、巨型資料分析,接著直播、AI和區塊鏈。而自己大多的 side project 還是在十年前的 mobile first 領域,真是說來慚愧啊,也說明當年 mobile first 題目可是人人可單打獨鬥的美好日子。

這十年體驗了不少跟 "健康" 、 "資訊技能" 、 "公司政治" 、 "養小孩" 相關的議題,沒想到政治比想像中複雜,雜到最後大家只能自私做事,明明都是聰明人卻選擇不同路線(自己的舒適圈?),這時就很佩服朋友的公司,老闆專門 fire 理念不同的人,降低公司的政治複雜度和小圈圈呢 XD

下個十年,或許算是搭上火箭吧?開始好好打團體戰,適應政治圈了

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 相關簡介: