發表文章

adb not responding/unable to detect adb version Syntax error - Android Studio on ubuntu

圖片
 當你運行 Android studio debug app 出現下面的錯誤 當你在啟動  Android Device Monitor 出現下面的錯誤 請下載使用舊版本的 platform-tools 就好了........ (無言) 參考: stackoverflow: android studio adb Syntax error: “)” unexpected

相見恨晚的自動化測試開發工具 Sikuli

圖片
2010年由一位在 MIT 就讀的台灣人發表的 graphic script language, 有別於一般的開發工具,利用一些截圖加上一些簡單的語法就可以操作電腦滑鼠、鍵盤。 開發這工具最難的,我覺得是圖形辨識跟操作行為的判斷。 這工具提供的語法滿完整的,不同的情境都可以簡單的使用, 搭配 Python 語法可以更靈活的操作。 我用了兩個小時的時間,就可以完成安裝並輕易完成一個自動化訂票的 script。 坦白說,效果讓我感到非常的驚豔,可能是本身是開發人員,能夠了解這軟體的困難。 只是覺得自己怎麼可以這麼 lag,六年前的玩意現在才知道。 -- 安裝步驟 -- 先到 Sikuli 官網  下載  SikuliX 目前版本是1.1.0 檔案是 .jar,也就是 java 程式,所以請先安裝 jre 環境。 依教學是說只要檔案下載下來,直接點兩下執行,就會自動下載需要的檔案, 還有一個執行 Sikuli IDE 的批次檔。 安裝過程遇到 "Could not find the main class. Program will exit!" 直接在 console 下指令 " java -jar sikulixsetup-1.1.0.jar" 就會自動下載並安裝起來了。 語法的部份我是參考這個範例    Sikuli的入門使用 -- 遭遇問題 -- 寫範例的過程遇到兩個問題,一個是中文的輸入問題、一個是按鍵的問題。 一、中文輸入的問題,網路上查到的解法是 type(u"中文") 或是 paste("中文"), 實際使用出現的都是亂碼。 最後解法是 paste(unicode("中文", "utf8")) 二、按鍵問題是一些特殊鍵的輸入,例如 windows 鍵 + 字母的特殊組合鍵、Enter 鍵。 這邊統一解答,windows 鍵+字母的特殊鍵組合是 type("d",KEY_META) , 以這範例表示的是 windows 鍵 + d (一定要小寫唷!) Enter 鍵是 type(Key.ENTER)...

Semaphore

多執行緒下控制可使用資源的執行緒上限數 比喻作夜店的安管人員再洽當不過,安管人員可控制夜店入場人數, 例如今天只開放100人入場,超過此人數則不得再進場,除非有人離開才可以放行, 控制人數在上限 100。 在多執行緒的情形下,資源的掌握更顯得重要,如資料庫資源。 But, what's the difference between semaphore and singleton? singleton 是用來作 lock,可以想成是一次只開放一個人進場的安管,這樣就很好理解了。 在查到的資料上顯示,若在上限為一個物件存取的情形下, 效能上 singleton 比 semaphore 好多了。 reference:  Android Semaphore

[實作] Facebook messenger bot

圖片
如果各位是跟我一樣,對新平台、技術有高度興趣,這次看到了 Facebook F8 開發者大會,對 Facebook messenger bot 有興趣, 想實作自己的機器人,卻沒有相關背景、Know how 的人,來這就對了,我花了一兩天的時間,確確實實的把這服務建置起來。 網路上絕大部份都是以 node.js 為範例,當然還有其它的像是python django,對於這些名詞(node js. python. django)僅止於知道的我來說, 等到學會上手都不知道幾年後了,我還是習慣作中學,雖然過程坎坷,但是中間產生的問題,會擴大自身對各技術的初步了解; 扯遠了,重點是平台的選擇,對我來說還是選最多資源的教程,也就是 node.js。 ps. 好歹要知道這些技術名詞在作什麼,才有辦法繼續往下作吧。 對這議題我的背景程度大概是 ndoe.js: server side javascript. (全知全能的 javascript) python: script language. (有在網路上學過 tutorial) django: python's web framework. (有裝過這個 framework) 一開始對這個 facebook messenger bot 的架構不清楚,不知道應該具備什麼技術或是平台或是套件才能建起來。 作完之後,再回頭看才比較清楚整個架構,也知道在這些點上,需要的資源是什麼。 就讓我大略把架構畫出來,有經驗的人一看就知道在那些點會需要那些服務跟資源。 到這裡,各位已經比我當時不清不楚、傻傻就決定要花時間作一個自己的機器人還站在更有利的位置了。 所以需要的東西有什麼呢? 1. 提供網頁服務的主機 (我一開始傻傻的以為只需要將代碼寫在 facebook 的開發者平台上就好了) 2. 接收/回應 facebook 送過來訊息的代碼 就這麼簡單,可是 facebook 的官方教程對我這樣非網頁開發背景的人來說,實在很難理解,跟著教程走還是會有問題。 所幸找到一個更完整的教程,雖然我已經花半天的時間了。 分享給大家 messenger-bot-tutorial 這篇太讚了,非常完整的教程。 這樣還要寫正文嗎? 大家直接看 github 就好了...XD 那....

網誌整合

之前有三個網誌,想就各程式語言或是程式開發人員作分類,後來發現文章量沒那麼多,實在沒必要這樣區分。 所以將網誌的標題改成 Sporting coding note 。 ps. 我不是運動狂熱者 Sporting 只是中文名字的對翻罷了。

Fragment 迷航記

最近為了 "吹哨找手機" 的其中一個 bug issue,好幾天睡眠不足,每天挑燈夜戰,查遍各大論壇,雖然釐清了不少觀念,但是還是解不出來。 問題是這樣,當這 app 被 android 回收後,再重新執行會出現 ANR crash,檢查 log 會發現 No view found for id (:packageName) 之類的錯誤,雖然在上架前我用其它方法躲過 ANR,可是顯示上還是有異常。 整個佈局是 PreferenceActivity 鑲嵌 PreferenceFragment,就在剛才翻了翻 google api,才驚覺原來 Fragment 在鑲嵌進 Activity 時,有兩種方式,其一是以前用過的 getFragmentManager().beginTransaction().replace(R.id.query_container,new PrefsFragment()).commit(),另一種是用 xml 方式套入 fragment。 在 AS 開新專案時使用的是 SettingActivity 範本,預設是用 xml 嵌套的,但是原始範例是兩層的設定頁面,看不是很懂,所以改成以往的 getFragmentManager().beginTransaction().replace(R.id.query_container,new PrefsFragment()).commit() 方式在套入,但是原本範例內的 xml 嵌套仍然保留,所以才會在 android 回收 Activity 後,出現 ANR 錯誤。 解決方法就是把自作聰明的 getFragmentManager().beginTransaction().replace(R.id.query_container,new PrefsFragment()).commit() 拿掉就好了。 為了這一行失去了好幾個晚上的睡眠,天呀。 話說我還是比較喜歡從實作中學習整個概念或使用方法,要我去翻 api 再逐一驗證,要嘛是睡著,整個學習沒有衝勁看不到成果,要嘛就是放棄的早。 雖然這樣的學習方式跌跌撞撞,但也會慢慢建立起自己對這 api 的世界觀,我果然是實作派的。 ---------------------------------------...

吹哨找手機

圖片
吹哨找手機 (WhistleWakeUp) 是不是跟我一樣,手機隨手亂放,櫃子裡、枕頭下、棉被裡、包包裡,翻遍了可能出現的地方就是找不到! 老婆、小孩不給你玩手機,把手機藏起來! 不喜歡手機鈴聲響起吵到人,常常設定靜音。 沒有開啟網路、沒有啟動 Google android 裝置管理員功能。 這時候多希望呼喊手機,讓手機自己跳出來說 "我在這裡! 我在這裡!" [特色]  1. 定時重置哨音計數,避免在不適當場合喚醒手機  2. 設定哨音長短目標值,掌控喚醒手機難易程度  3. 調整喚醒音量,建議同預設最大音量,以利找尋手機  4. 喚醒音效重複撥放設定,若關閉循環撥放,在播放完畢時會重啟哨音偵測服務  5. 選取提醒音效  6. 開啟服務, 離開設定頁面即開啟  7. 開機自動開啟服務 (參考 Q&A: Q6)  8. 通話時服務自動停止  9. 螢幕開啟自動停止提醒音樂 *10. 哨音偵測敏感度設定 *11. 螢幕關閉啟動哨音偵測服務 *12. 手機靜置3~6分鐘後觸發哨音偵測服務,手機翻轉移動則終止哨音偵測 註: "*" 表示吹哨找手機 Pro 版本獨有 請先下載免費版評估使用,體驗功能後確定合用再購買 Pro [如何使用] 下載後開啟 app 設定、選取音樂,系統裡授權吹哨找手機自啟動服務,把手機藏起來 (option),吹吹口哨即可 [如何停止喚醒後的音樂] 全版本均可透過點選系統提醒訊息,或是開啟設定頁面或是螢幕開啟即自動停止提醒音樂 [問與答] Q1: 不會吹口哨怎麼辦? 任何高頻聲音均可以取代口哨,例如小孩的哭鬧聲、笛音壺煮開的聲音、哨子聲、垃圾車音樂...etc Q2: 口哨聲太小,手機聽不到? 請用替代音源或是麥克風擴大效果 XD Q3: 過度吵雜的環境,手機偵測哨音能力? 安靜的使用環境有助於手機的尋獲 Q4: 手機經常誤判亂響怎麼辦? 1. 重置哨音計數設定重置秒數縮短 2. 哨音長短設定提高 Q5: 會不會很耗電? 手機隨時要注意聽哨音,是需要點精力的,或是購買 "吹哨找手機 Pro" 作節電設定的調整 不過維持良好的充電習慣是必要的. Q6: 重...