發表文章

Android 設計-3 藍牙

圖片
設計藍牙函數 設計藍牙函數 終於回到主題,藍牙的設計, 藍牙的牙到底要不要草字頭, 藍芽? who care? 反正我講的就是 Bluetooth。 我相信大家都有看過 Android 的標準範例 BluetoothChat。沒看過的,自己去找一下。 大致解說一下: BluetoothChat 就是啟動 非對稱 雙方溝通的藍牙,也就是兩台藍牙之間訊息的溝通, 不必要等對方的訊息才能打下一段的文字,收訊息與發訊息不需要等待。 在 BluetoothChatFragment 的 onCreate() 先確定是否有藍牙設備。 在 onStart() 裡面請求 Android 系統啟動 是否開啟藍牙 的指令 Intent。 確認開啟與否 REQUEST_ENABLE_BT 要求 Android 系統傳回 onActivityResult()。 如果確定 Activity.RESULT_OK 就 setupChat(), 或是 onResume() 啟動 mChatService()。 重點在 BluetoothChatService 採用 Thread,同時避免資料亂掉還加上 synchronized。 好了,講完了。你要自己去研究一下 BluetoothChat 範例的原始程式。 我們首先要先了解,我們的需求。我們用藍牙傳輸的方式是對 OBD dongle 連接器做運作,我們的指令是 一個口令一個動作,也就是說 Android 手機下 OBD 的指令,要等待連接器的訊息回傳。所以上面的 5,要改寫。 第二,Bluetooth 的 initialize。範例裡面動用了兩個程序。onCreate() 及 onStart()。 可以合在一起產生一個檔案嗎? Android Activity 的生命週期 Fragment 更細,不過還是衍生自 Activity 的行為,所以我們用 Activity 來討論就可以。 既然onCreate() 是建立藍圖的階段,onStart()是啟動階段。那可不可以把 REQUEST_ENABLE_BT 的行為放到 onStart()? 答案是 當然可以 。所以對於 Activity 及 Fragment 的生命週期,你必須稍...

工商廣告 III - Big-O

圖片
程式的邏輯概念在哪裡? 程式的邏輯概念在哪裡? 阿貝你一直說演算邏輯, 我們寫了N年的程式, 也沒寫過半個函數, 需要嗎? 程式邏輯倒是使用了不少, 真的不知道要用在哪裡? 問題總是接二連三, 早知道就不要那麼麻煩, 講了兩篇的 Python, 搞出了一堆後面的尾巴。現代的年輕人, 毛真多。每個都是碩博士, 小的只有小小的大學畢業而已, 連研究所都沒讀。 早知道, 當年有錢就給它繼續讀下去, 混個文憑也好, 不過阿貝兄弟至少還出個留英派的高材生, 阿貝也沾光。 OK, 言歸正傳, 大家在寫程式, 用了很多外掛函數, 包含原廠標準函數, 其實有很多已經最佳化了, 所以你就很習慣的拿來使用, 例如 Android 的 SDK, 軟體物件包裝起來, 一整包送給你, 無償使用。 但是別忘了 Searching method, memory heap,,,, 等等這類型的 API (SDK) 是基本的功能, 你要運用它, 還是要懂得選擇用那一款, 趕時間, 將就用, 將來程式一大起來, 還是要來檢視問題的, 與其以後找問題, 還不如現在有空先找出來調整一下。 身為一個程式員, 腦袋裡裝著演算邏輯是應該要有的事。既然這樣說, 那主管呢, 是每天在那裡, 準備高爾夫球具準備打球, 每星期對你們的 review 就是問問你程式做到哪裡? 然後就飄走了嗎? 基本上, 阿貝是看過很多主管是醬子的啦, PS: 不要怪他們, 有一天你也會變成他們, 換了位置換了腦袋。 那主管的腦袋到底要裝什麼?當然是對部門的同仁小朋友們做 performance 的了解。以前有一套軟體叫做白金牌 (Platinum)後來被組合國際(CA)併購, 不知道還存在否?阿貝已經很久沒用這些東西了, 那現在呢?單元測試 Unit testing 大行其道, 不過你最好保佑你的老闆看不懂, 這樣測起來就會 煞有其事 的成功執行。 所以說, 做老闆的就要有一套高爾夫工具? 我講錯了, 是一套準則, 好了解工程師的效能。其中之一最有名的就是 時間複雜度 ( Time complexity ), 啥, 讓人覺得無用的東東。真的有效嗎? 時間複雜度 (Time complexity) 唉, 這個中文讓阿貝頭痛了好幾十年, 就好像當年的...

工商休息時間 part II

工商休息時間 part II 工商休息時間 part II 又是小小的脫離主題, 又有人不死心, 他說: 阿貝你又不會 Python, 你的程式一定是抄來的。 是的! 我確定告訴大家, 我的程式是抄來的, 是看了網路上的一堆見解, 然後就抄出來的。 我們不是天才, 但是我還是要誠懇的跟大家說一下, 你要學什麼像什麼, 程式語言不是你的重點, 觀念的理解才是重點, 既然要我再寫一個下載股票成交的歷史資料程式, 那我就再加碼一篇, 不過下不為例。 import pandas as pd import requests def google_stocks(symbol): url = "https://finance.google.com/finance/historical?q=" + symbol + "&start=0&num=200" raw_response = requests.get(url).content stock_data = pd.read_html(raw_response) return stock_data if __name__ == '__main__': data = google_stocks('TPE:1101') print(data) 找出你的來源 Google 有提供網站讓我們看歷史資料, 所以只要加上 TPE: 就可以, 不過阿貝沒找到上櫃資料。知道的舉手。 使用 pandas 的 dataframe 就可以直接讀啦。 上次我用 BeautifulSoup 美麗的甜湯, 這次用 pandas 很多的貓熊, 這兩個夠你們用了吧?! 翻的有夠 聳 。 pandas 的解說很不明確, 所以自己要學會了解 dataframe 的原理, 這就是重點, 然後網頁的解析才能繼續下去。 Google 的台股沒有附加 csv 檔案, 最多只能瀏覽 200 天。你可以試試 yahoo。證交所就免了, 要付費的。 簡單就是美 真的是這樣嗎?! 見仁見智吧! python 有些語法太寬鬆, ...