發表文章

錯誤(errors)發生與效能低落的處理

圖片
錯誤(errors)發生與效能低落的處理 前言大綱 在開發過程中會出現各種錯誤,重要的是找出並解決錯誤發生的原因。對初學者而言,就算看到了錯誤訊息,也完全不知道原因何在,更不用說檢討了。最簡單的解決方法是,利用全世界的智慧,也就是以 雙引號 “….”  將一部分,或全部錯誤訊息框起來,使用在雙引號中的中間的關鍵字來做 Google 搜尋。 “一部分,或全部錯誤訊息” 使用Google搜尋時,有的時候是用 Google中文、英文網站切換來搜尋結果,也因為會不一樣。因此,錯誤訊息中含有中文的時候,請將中文的部分刪除後,再進行搜尋。 還有,Linux會將逐次錯誤日誌寫入 /var/lob/dmesg 檔案中。請將相關部分擷取出來到檔案中進行搜尋。這個雖然難度稍微高一點,也請嘗試做做看。 如果就是解決不了問題,那要怎麼辦呢 ? 我們做法是不在這上面花太多時間,轉而思考別的方法。 舉例說,Ubuntu 共享資料夾功能,若是不能順利設定時,可以從瀏覽器用Gmail傳送檔案。 另外初學者最容易發生的問題是,明明照著書上寫的做,還是無法順利進行。這是因為使用的電腦和OS的細部版本的不同,會使問題發生變化。另外,嵌在 OS 裡的裝置驅動程式與其中的晶片也會使問題發生變化。 因此解決問題的王道就是 :  分別以英文與中文在Google上搜尋,找出發生同樣問題的人及解決方法。 盡量嘗試各種解決方法就對了。 冷靜下來想想有沒有別的方法。 為了以防萬一電腦的重要檔案一定要備份。 Windows 會一直累積垃圾檔案 ,所以要在 "我的電腦 '=>硬碟=>內容=>點擊右鍵,開啟執行清理磁碟。另外,還可以在 Windows "開始" 選單的 “搜尋程式與檔案” 或 “搜尋” 中輸入 “%tmp%”,然後將不要的檔案及資料夾全部刪除。 在 Explorer 的電腦或 PC 上,點擊右鍵,開啟”內容”,點擊 ”系統的詳細設定” ,點擊 "效能" 的 "設定" 鍵,點選 "效能優先"。 累積太多的復原點(Restore Point) 資訊 的話,會佔去磁碟容量,請在Explore 等處的磁碟 “內容” 上,點擊右鍵開啟,執行 “清理磁碟” ,點擊位於 "磁碟清理...

如何在Ubuntu上安裝Arduino IDE

圖片
如何在Ubuntu上安裝Arduino IDE 前言大綱 Arduino軟件或IDE(集成開發環境)包含一個文本編輯器,通常用於在Arduino硬件中編寫,編譯和上傳代碼。它有助於連接和與Arduino硬件通信。 Arduino IDE可以在所有主要操作係統平台(例如Linux,Windows和Mac OS)上運行。它適用於32位和64位OS平台。 在本文中,我們將逐步介紹在Ubuntu上安裝Arduino IDE的步驟。我將使用 Ubuntu 20.04.2 LTS來描述該過程。但是,可以在舊版Ubuntu中使用相同的步驟進行安裝。 下載Arduino軟件 首先,您需要從 Arduino官方網站的下載 Arduino IDE(外連結)  軟件包,選擇適當的作業系統版本32位或64位,下載至資料夾 "Downloads" 後並將其解壓縮。 安裝Arduino IDE Step 1 現在,您將需要安裝Arduino IDE。要準備安裝,請導航至資料下載夾。您將需要解壓縮下載的Arduino存檔文件夾。開啟終端,可以按Ctrl + Alt + T組合鍵 : Step 2 然後運行以下命令導航到 "Downloads" 資料下載夾: $cd /home/username/Downloads    // 以我為例 : $cd /home/aron/Downloads  Step 3 要解壓縮存檔的文件夾,請在終端中運行以下命令: $tar -xf [Compressed-filename]  // 此例為 : $tar -xf arduino-1.8.16-linux64.tar.xz Step 4 然後在終端中運行以下命令以導航到剛剛解壓縮的Arduino文件夾: $cd [Uncompressed-foldername]    // 此例為: cd arduino-1.8.16-linux64 您可以在終端中輸入ls –l來查看Arduino文件夾中的文件列表並找出我們將要安裝的安裝文件。 $ls -l Step 5 現在我們準備安裝Arduino。以sudo的身份在Terminal中運行以下命令以安裝Arduino。 $...

AIoT軟體開發架構

圖片
AIoT軟體開發 一般來說有軟體控制硬體 AIoT 的裝置開發時,要利用 Arduino 開發環境,並最大限度地靈活運用開放原始碼,習慣之後可以在一小時以內就能完成裝置的開發 。 最常被使用的 AIoT 裝置軟體開發方式分為以幾個步驟 : 決定要用 AIoT 裝置做什麼事 ,AIoT 的功能要盡量可能的單純,較難的部分就交給應用程式。 依照你要做甚麼事,找合適的 Arduino 開放原始碼程式庫 :  首先在 Arduino IDE 工具=> 管理程式庫 ,尋找範例。 接著到 ► 官網函示庫 Arduino Libraries(外連結)  找。 最後到網路上搜尋 ,例如要找 WiFi 功能,進行搜尋 : "arduino wifi library" 或 "arduino wifi library github"。 再選購硬體零件(感測器和驅動器) 。硬體零件的選擇依 Arduino 程式庫的有無與充實度與否而定,當然在選定零件後,如果能搜尋到合適的 Arduino 程式庫也可以。可以先到 Arduino 商店的 IOT 選購(外連結) ,然後到電商找副廠。請參考: ► 亞洲原廠供應商(外連結) 。 使用Arduino IDE寫程式,參考選好的程式庫的skeches(xxx.ino 檔案稱為 sketch) 並完成 sketch。做得好的程式庫除了程式庫之外還有多個參考案例的sketches xxx.ino。 獨立應用程式, Linux “make”   後,生成 xxx.hex。下載 MakeFile 在同一個資料夾裡面準備程式庫(xxx.cpp 與 xxx.h) 與 xxx.ino,只要執行 make 指令的話,就可以簡單的生成 AIoT 裝置的韌體 xxx.hex。為了做到以上的動作,要在Windows上的 Virtual Box等處安裝 Ubuntu,在 Ubuntu 上設定 Ardunio 環境,再從下列網站下載 MakeFile......。 使用 Python 應用程式控制 Arduino :  請參閱 :  使用 Python 控制 Arduino(外連結) Firmata : 利用Arduino IDE 已經內建了各種應用的 Firmata 韌體,透過Firmata 協定所寫的韌體燒入 ...

Arduino VS Raspberry Pi 樹莓派

圖片
Arduino VS Raspberry Pi 樹莓派 前言大綱 因為近兩年內有家裝的需求,考察了市面上的智能家居方案,要麼不靠譜看不上眼,要麼價格高得離譜。想著自己原來也搞過一段時間單片機,Linux 靠著 Google 和 StackOverflow 也能解決一些問題。於是開始嘗試 Arduino 和 RPi 在家居控制方面的各種實踐。 Raspberry Pi 和 Arduino 的差異 Raspberry Pi 和 Arduino 兩個完全不同運算水平的平台。畢竟 Raspberry Pi 使用的是一顆運行在 700MHZ 的 ARM11 CPU;而常用的 Arduino UNO 則是一顆在工業控制領域常見的 8-bit ATmega328,最高運行頻率僅 20MHz。 Raspberry Pi 可以運行完整的操作系統,如 Debian 等常見 Linux 發行版 - Raspberry Pi Distributions。這意味著你可以使用你熟練的語言(如 Python、Java)和熟悉的庫來進行開發,同時後台運行多個進程也毫無壓力。而 Arduino 作為一款真正傳統意義上的單片機系統,一次只能運行一個你燒進去的程序,功能也相對單一。 Raspberry Pi 自帶的介面比較全面,USB-host、RJ45、HDMI、SD讀卡器等常用介面都有;而 Arduino 比較單純,與外部設備打交道需要另外採購介面板。 Raspberry Pi 因為是一個相對完整的「電腦」,其成本肯定比 Arduino 高,目前 Raspberry Pi Model B(8G) 普遍 NTD2800 元左右;而常用的 Arduino Uno R3  NTD200 元搞定。 Raspberry Pi 擁有更完整的操作系統,這也意味著每次複電後所需的啟動時間很長,而且還不能保證重啟後你寫的相關服務都能正常啟動(Linux 大拿可能會覺得是我技術渣);但 Arduino 因為用途單一,重啟速度超快,而且重啟結束後立即就在運行你讓它做的事。 綜合應用 Raspberry Pi 作為家居中央控制伺服器 ,負責與互聯網的通信、採樣存儲 Arduino 上報的狀態數據、處理數據量大的工作(如音頻、視頻、圖片相關)、提供 API 給 iOS 及 Android 以方便用手機控制...

值得關注的資料科學部落格、網站

值得關注的資料科學部落格、網站 前言大綱 在資料科學層面有許多絕佳的資源,要知道從何開始著手可能令人有些不知所措。本文列出對每個人而言都是最實用的一些部落格和網站,從資料科學專家到新手都適合。除了提供建議和學習資源之外,這份資料科學部落格、網站清單也包含可供隨時瞭解專業人士最新消息、趨勢和意見。 部落格 Data Science Central 格主:Vincent Granville 網站連結: DataScienceCentral.com Data Science Central 的作用正如其名稱所示,而且做為資料科學和大數據所有相關內容的線上資源中心。該網站涵蓋有關分析、技術、工具、資料視覺化、程式碼和工作機會的各種資料科學主題。業界專家提供有關關鍵主題的討論和見解。 該網站經常更新,每天有將近兩篇由撰稿人投稿的部落格文章,而且也提供可供討論或提出問題的社群論壇。 SmartData Collective 格主:Social Media Today 網站連結: SmartDataCollective.com SmartData Collective 是著重於商業智慧和資料管理趨勢的社群網站。與 Data Science Central 類似,這也可以透過業界專家的投稿來提供資料科學的見解。Data Science Central 直接關注整體資料科學,SmartData Collective 則著眼於更廣闊的領域,並探究資料科學如何與業務交互作用。 What's The Big Data? 格主:Gil Press 網站連結: WhatsTheBigData.com What's The Big Data? 在資料科學層面採取不同的方法,而且著重研究大數據成長對現今數位龐然大物的影響。該部落格的創辦人 Gil Press 相當熟悉大數據和資料科學,並從事資料研究的工作,目前擔任顧問職務。 Press 在本身的部落格中探討大數據如何與我們的生活交互作用,並影響從技術到企業到政府和政策的一切層面。他提供有關資料領域的消息和評論來源。 沒有不勞而獲的預感 格主:Kaggle 網站連結: Blog.Kaggle.com 此部落格與其他部落格略有不同,可以直接檢視資料科學家的思想、教學課程和消息。這是資料科學網站 Kaggle 的部...

Python 中 yield 的用法詳解

Python 中 yield 的用法詳解 前言 yield 最主要的目的與功能是 : 為了節省記憶體的使用。 讓我們來看看下面一個狀況: my_list = [x*x for x in range(1000000000000000000)] for i in my_list : ... print(i) 可以看到,通常我們在進行遞迴時都會傾向於先把要遞迴的 list 存起來,之後再以 for 迴圈把內容逐步輸出。 但我們可以看到 my_list 裡有非常驚人的數列,因此如果要全部存進記憶體,運行效率就會變的非常的慢。 這時可能有人會說,那為什麼不直接用 range 就好呢?其實 range 在 Python 2 是分成 range 跟 xrange 兩個, range 的生成方式就像上面的 my_list;xrange 才是以 class 的型態運行。 其中要注意的是python3時已經沒有xrange()了,在python3中,range()就是xrange()了,你可以在python3中查看range()的類型,它已經是個<class 'range'>了,而不是一個list了。 這個問題,最常被注意到的便是爬蟲。有時候短短的幾千條網站,還能靠記憶體來爬;但如果有數十萬個網站,每一個網站都以 list 的方式儲存,記憶體不夠大,程式就會直接崩潰了。 因此 yield 設計來的目的,就是為了單次輸出內容。我們可以把 yield 暫時看成 return ,但是這個 return 的功能只有單次。而且,一旦我們的程式執行到 yield 後,程式就會把值丟出,並暫時停止。 直到下一次的遞迴,程式才會從 yield 的下一行開始執行。那哪裡有遞迴呢?沒錯,最常被用到 for 迴圈裡,而且 for 迴圈自帶 next() 的功能。換句話說,for 迴圈會自動在程式內部進行下一輪的遞迴,因而觸動 yield 進行下一輪吐值。而所有能被迭代的物件,都能夠被 yield 製作成生成器。 好了,如果你對這些不明白的話, 那先把 yield 看做 return ,之後再把它看做一個是生成器 generator 的一部分,然後直接看下面的範例 ...

如何學習 Python 呢?

如何學習 Python 呢? 學習教程 Python 教學(外連結)  : 這份教學介紹 Python 中最值得一提的那些功能,幫助您了解 Python 語言的特色與風格。讀完教學後,您將有能力閱讀和撰寫 Python 模組與程式,也做好進一步學習 Python 標準函式庫 (Standard Library) 中各類型的 Python 函式庫模組的準備。 Python 標準函式庫 (Standard Library)(外連結) : 你該好好的瀏覽這份手冊,它提供了完整(但簡潔)的參考素材,像是型別、函式與模組,可以了解 Python 標準物件和模組的描述。 安裝 Python 模組(外連結) :說明與解釋如何安裝其他 Python 使用者所編寫的模組。 Python 語言參考手冊(外連結) : Python 語法以及語意的詳細說明。這份文件閱讀起來會有些吃力,但作為一個語言本身的完整指南是非常有用的。 擴充和嵌入Python 直譯器(外連結) 和 Python/C API 參考手冊(外連結) : 可以學到用 C 或 C++ 寫擴充套件 (extensions)。 更多 Python 的資源: Python 官網 (外連結)  : 它包含代碼 文檔以及指向全網 Python 相關頁面的鏈接。該網站在世界各地建有鏡像,如歐洲、日本和澳大利亞等;鏡像網站可能會比主網站更快,具體取決於您的地理位置。該網站還包含許多免費的第三方 Python 模塊、程序和工具的發布包及其附加文檔的鏈接。 https://docs.python.org :快速訪問 Python 的文件。 https://pypi.org :Python 套件索引 (Python Package Index),之前也被暱稱為 Cheese Shop ,彙總了使用者開發 Python 模組的索引,並提供模組能夠被下載。一旦開始發佈相關程式碼,你可以將開發的作品註冊到這裡並且讓其他人找到。 https://code.activestate.com/recipes/langs/python/ :Python Cookbook 是一個相當大的程式碼集,包含程式碼範例、較大的模組以及有用的腳本。特別值得注意的貢獻則被收集在一本名為 Python Cookbook (O’Re...

GoTop 按鈕讓網頁快速回到最上方

圖片
GoTop 按鈕讓網頁快速回到最上方 大綱 步驟 1 : 編輯 HTML 步驟 2 : 新增 CSS  步驟 3 : 新增文章時,新增程式碼  步驟 4 : 驗收成功 步驟 1 : 編輯 HTML 首先,登入你的Blogger 後台 => 選擇 "主題" => 下拉"自訂"選項  點選 "編輯HTML" 來到HTML網頁編輯中,按 "Ctrl+F" => 出現 Search 的搜尋輸入欄位,輸入: "<head>"  => 找到 <head> 標籤後,在下面貼上以下 2行程式碼:  <script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js'/> <link crossorigin='anonymous' href='https://use.fontawesome.com/releases/v5.0.13/css/all.css' integrity='sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp' rel='stylesheet'/> 再按 "Ctrl+F" => 出現 Search 的搜尋輸入欄位,輸入: "</body>"  => 找到 </body> 標籤後,在上方貼上以下 JavaScript 程式碼: <script type='text/javascript'> $(function() { /* 按下GoTop按鈕時的事件 */ $(&#39;#gotop&#39;).click(function(){ $(&#39;html,body&#39;).animate({ scrollTop: 0 }, &#39;slo...

Scrapy爬蟲框架

圖片
Scrapy爬蟲框架 前言 我們前面已經說明各類模組可以執行網路爬蟲設計,針對一般的網頁抓取已經足夠,這裡我們將介紹的 Scrapy ,其實是一個爬蟲框架,是一個快速的高階網頁抓取和網頁淬取框架,用於抓取網站並從其頁面中提取結構化數據。它可用於廣泛的用途,從數據挖掘到監控和自動化測試。適合大型爬蟲設計,我們將簡單以範例說明此框架 。 大綱 安裝 Scrapy 從簡單的實例開始 - 建立 Scrapy 專案 Scrapy 專案框架 Scrapy 專案框架的檔案說明 爬蟲程式設計 Scrapy 定位元素 使用cookie 登入 保存文件為 JSON 和 CSV 檔案 Scrapy 架構圖 數據流 DataFlow Scrapy Components 控件 專題爬取多頁 PTT 資料 安裝 Scrapy 早期在安裝 Scrapy 需要先安裝 Twisted,Twisted 是異步網路請求框架,現在這個 Twisted 安裝已經被整合在 Scrapy 安裝內,讀者可以使用下列方式安裝 Scrapy。 pip install Scrapy 安裝成功後可以看到下列畫面 從上述可以看到 Twisted 也安裝了,若是不知道是否安裝成功,可以使用輸入下列指令了解相關 Scrapy 的模組版本 。 scrapy version 從簡單的範例開始 - 建立 Scrapy 專案 Scrapy 專案框架 這裡我們先用一個簡單的網頁測試 Scrapy 的功能,對於 Scrapy 而言,想要執行設計爬蟲程式必須建立 Scrapy 專案,專案建立方式是使用下列指令: scrapy startproject 專案名稱 此例我們在 Windows PowerShell 環境進入~/scrapyProject 資料夾,然後使用下列指令建立專案: scrapy startproject yahoo 可以看到下列結果 這時 Scrapy 模組就自動在我們的 ~/scrapyProject/yahoo 資料夾下方建立了一系列專案檔案。 上述就是我們建立 Scrapy 專案 yahoo時,模組 Scrapy 自動產生的框架完整結構與內容,有關各個 Python 檔案內容意義,將在下面說明。 Scrapy 專案框架的檔案說明 在 ~/scrapyProject/ ...

Requests-HTML 模組

圖片
Requests-HTML 模組 前言 Requests-HTML 模組  是原 Requests 開發者另一個巨大貢獻,他包含所有 Request 模組功能,更重要的是新增加了數據清洗與爬取使用 ajax 動態數據加載網頁的功能,它的觀念是 ajax 動態網頁數據會被加載到 Chromium 瀏覽器網頁,然後爬蟲程式自行在 Chromium 瀏覽器爬取,更多相關資訊可以參考。 大綱 安裝與導入 使用者請求Session 認識回傳資料型態與幾個重要屬性 數據清洗與爬取 使用 find() 方法 使用 xpath() 方法 搜尋 search() 搜尋豆瓣電影網站 Ajax 動態數據加載 安裝與導入 安裝方式如下 pip install requests-html 請留意程式導入此模組方法如下 import requests_html 可以使用模組屬性 DEFAULT_URL 了解是否安裝此模組成功  使用者請求 Session Requests 的 Session 模式可以讓請求對話持續保持,只要使用者與伺服器雙方沒有關閉此連線,就持續存在。 Requests-HTML 的請求是承襲 Requests ,不過 Requests-HTML 的請求只能使用 Session方式。 使用 Requests 模組時,常用的 get()、post() 方法,也可以應用在 Requests-HTML 模組,同時在 Requests 模組內,使用 get() 、post() 的參數,也可以使用在 Requests-HTML 模組的 get()、post() 。所以先前章節介紹的 headers、proxies、cookies... 等等的參數,也可以運用在此 get()、post() 。此外,偽裝瀏覽器的表頭 headers ,如果沒有設定, Requests-HTML 模組會使用預設的表頭 headers 。在安裝此模組時,可以看到下列路徑 ~\Python39\Lib\site-packages 的 requests_html.py 檔案。 開啟上述檔案可以看到下列預設的表頭 headers 預設內容: DEFAULT_ENCODING = 'utf-8' DEFAULT_URL = ...

股市數據爬取與分析

圖片
股市數據爬取與分析 大綱 證券櫃檯買賣中心 獲得特定上櫃股票的 CSV 檔案 一個月的收盤價分析 台灣證券交易所 獲得特定上市股票的盤後資訊 台泥年度收盤價分析 獲得每天股票每5秒的成交資訊 Google 全球股市資訊 Yahoo 股市資訊 台灣股市資料讀取與圖表製作 Stock建構元 Stock物件屬性 Stock 物件方法 取得單一股票之即時資料 realtime.get() 證券櫃檯買賣中心 證券櫃檯買賣中心是台灣上櫃股票的買賣中心,本文我們將講解獲取特定股票的是 CSV 檔案方式,然後做基礎股票分析 。 獲得特定上櫃股票的 CSV 檔案 請進入 證券櫃檯買賣中心網頁 。 點選上櫃 =>盤後資訊 => 個股日成交資訊,可以看到下列畫面 : 讀者可以參考上述圈選欄位,自行輸入股票代碼和資料年月,就可以看到特定股票在特定年月份的成交盤後資訊。下列是筆者填選 110/09 月份,股票代碼 6488 環球晶的盤後資訊 上述可以看到另存 CSV 按鈕,點選就可以下載,下列是我們以 Microsoft Excel 開啟此檔案的畫面 。 同時我們也使用相同名稱 ST43_6488_202109.csv 儲存此 CSV 檔案。 一個月的收盤價分析 我們有了上述 CSV 檔案,就可以使用我們了解的繪圖知識,製作股價走勢圖,當然在製作前我們必須了解此 CSV 檔案,才可以讀取我們想要的內容。首先這個檔案的前 5 行是股票基本訊息,我們可以忽略,此外最後一行是計算本月成交的日期數,也稱成交筆數,我們也須忽略,可以參考以下範例。 範例 pythonStock-01.py :  設計上櫃股票,股票代號是 6488 的 2021 年 9 月,每天最高價、最低價、收盤價的股票走勢圖。這個程式設計中,我們先將所讀取的 csv 檔案轉成串列 list,然後使用串列切片觀念,刪除前5行和最後一行。 # pythonStock-01.py import csv import matplotlib.pyplot as plt from datetime import datetime fn = 'ST43_6488_202109.csv' with open(fn) as csvFile: csvReader = csv.rea...