February
22nd,
2024
使用 AiohttpAsyncHttpClient 處理 LINE Bot 圖片消息
在開發 LINE Bot 應用時,我遇到了一個挑戰:如何有效地處理用戶發送的圖片消息。我需要從 LINE 平台獲取圖片內容,然後將其用於後續的處理。這裡,我想分享我的問題與解決方式,特別是在使用 AiohttpAsyncHttpClient 與普通 HTTP 客戶端之間的比較。
套件: https://github.com/line/line-bot-sdk-python
問題描述
當用戶通過 LINE Bot 發送圖片時,我需要從 LINE 的服務器上獲取圖片數據。初始的問題出現在嘗試使用一個不存在的 iter_any 方法來讀取數據流,這導致了一個 AttributeError。這個問題很快被發現並修正,但我還想探索一種更高效的方法來處理這些圖片數據。
以前做法
這是以前透過 non-async 的做法,資料會完整讀完才會繼續執行。
ef handle_message(event):
if (event.message.type == "image"):
SendImage = line_bot_api.get_message_content(event.message.id)
local_save = './static/' + event.message.id + '.png'
with open(local_save, 'wb') as fd:
for chenk in SendImage.iter_content():
fd.write(chenk)
line_bot_api.reply_message(event.reply_token, ImageSendMessage(original_content_url = ngrok_url + "/static/" + event.message.id + ".png", preview_image_url = ngrok_url + "/static/" + event.message.id + ".png"))
這樣有可能會在某些地方卡住很久,造成整個流程無法繼續進行。
AiohttpAsyncHttpClient 的優勢
AiohttpAsyncHttpClient 是 line-bot-sdk 的一部分,它提供了一種非同步的方式來處理 HTTP 請求。這與傳統的同步 HTTP 客戶端有著本質的不同。在同步模式下,每個 HTTP 請求都會阻塞當前執行線程,直到收到響應。這在處理大量請求或需要高性能的應用中是不可取的。
相反,AiohttpAsyncHttpClient 允許我們發送非同步請求,這意味著我們可以在等待響應的同時繼續執行其他代碼。這對於提高應用的響應性和吞吐量至關重要。
from linebot.aiohttp_async_http_client import AiohttpAsyncHttpClient
.....
async_http_client = AiohttpAsyncHttpClient(session)
line_bot_api = AsyncLineBotApi(channel_access_token, async_http_client)
解決方案
我採用了以下代碼來異步獲取圖片內容:
message_content = await line_bot_api.get_message_content(event.message.id)
image_content = b''
async for s in message_content.iter_content():
image_content += s
img = PIL.Image.open(BytesIO(image_content))
這段代碼使用 AiohttpAsyncHttpClient 通過 line_bot_api.get_message_content 異步獲取消息內容。然後,我使用 iter_content 方法來異步迭代數據塊,並將它們合併到一個二進制字符串中。最後,我使用 PIL.Image.open 從這個二進制數據創建了一個圖片對象。
這種方法的好處是,它完全非阻塞。即使在下載大圖片時,我們的應用也可以繼續處理其他事件或消息,從而提高了整體效率。
結論
通過使用 AiohttpAsyncHttpClient,我成功地解決了處理 LINE Bot 圖片消息的問題,並且提高了應用的性能。這個案例展示了異步編程在現代應用開發中的重要性,特別是在需要處理大量 I/O 操作時。對於開發者來說,理解並利用這些異步工具將是提高應用性能和用戶體驗的關鍵。
參考文章:
https://ithelp.ithome.com.tw/articles/10280087
https://www.myapollo.com.tw/blog/aiohttp-client/
繼續閱讀
February
15th,
2024
Google Colab 是一個免費的雲端 Jupyter 筆記本環境,可用於編寫和執行 Python 程式碼。Colab 預設的 Python 版本為 3.7,但有些情況下可能需要使用其他版本的 Python。 如何查看 Google Colab 的 Python 版本 要查看 Google Colab 的 Python 版本,請在程式碼編輯區域中輸入以下命令: !python --version 如何更改 Google Colab 的 Python 版本 有兩種方法可以更改 Google Colab 的 Python 版本: 使用 %env 魔術命令 %env PYTHONPATH=/usr/lib/python3.11 !python --version 使用 update-alternatives 命令 sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 !python --version 注意事項 更改 Google Colab 的 Python 版本可能會影響已安裝的套件。 更改 Python 版本後,請重新啟動 Colab 執行階段。 以下是一些常見的 Google Colab Python 版本問題及其解決方案: 問題: 我需要使用 Python 3.9,但 Colab 預設的 Python 版本為 3.7。 解決方案: 使用上述方法之一將 Python 版本更改為 3.9。 問題: 我更改了 Python 版本,但 Colab 仍使用舊版本的 Python。 解決方案: 重新啟動 Colab 執行階段。 問題: 我更改了 Python 版本,但某些套件無法正常工作。 解決方案: 重新安裝這些套件。 希望這篇教學文章能幫助您解決 Google Colab Python 版本號碼問題。 以下為截圖上的程式碼擷取,放在這裡備用。 !python --version #Python 3.9, but langchain need workaround for pydantic==1.10.8 to fix import issue. change to 3.11 !sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 #Install Python3.11 (no need for final version, will use latest one) !sudo apt update !sudo apt install...
繼續閱讀
February
5th,
2024
前提 在之前的文章中,探討了如何使用 Golang 結合 Google Gemini Pro 來開發一個具備大型語言模型(LLM)功能的 LINE Bot。這些文章分別介紹了如何整合 Gemini Pro 的聊天完成(Chat Completion)和圖像識別(Image Vision)功能: 使用 Golang 透過 Google Gemini Pro 來打造一個具有LLM 功能 LINE Bot (一): 聊天完成與圖像識別 使用 Golang 透過 Google Gemini Pro 來打造一個具有LLM 功能 LINE Bot (二): 使用聊天會話(Chat Session)與 LINE Bot 快速整合,打造具有記憶功能的 LINE Bot 這次,將簡要介紹如何利用 Gemini Pro Vision 模型來創建一個能夠幫助你整理名片的小工具,它甚至能自行識別名片上的資訊。 相關開源程式碼: https://github.com/kkdai/linebot-smart-namecard 註解: 關於如何使用 Notion 作為線上免費的資料庫,請參考這篇文章 : [Golang][Notion] 如何透過 Golang 來操控 Notion DB 當成線上資料庫 。 系列文章: 使用 Golang 透過 Google Gemini Pro 來打造一個具有LLM 功能 LINE Bot (一): Chat Completion and Image Vision 使用 Golang 透過 Google Gemini Pro 來打造一個具有LLM 功能 LINE Bot (二): 使用 Chat Session 與 LINEBot 快速整合出有記憶的 LINE Bot 使用 Golang 透過 Google Gemini Pro 來打造一個具有LLM 功能 LINE Bot (三): 使用 Gemini-Pro-Vision 來打造名片管理的聊天機器人 (本篇) 辨識名片處理上的小訣竅 執行的 Prompt 關於打造一個名片辨識的部分,這裡分享相關的做法: // Const variables of Prompts. const ImagePrompt = "這是一張名片,你是一個名片秘書。請將以下資訊整理成 json 給我。如果看不出來的,幫我填寫 N/A, 只好 json 就好: Name, Title, Address, Email, Phone, Company. 其中 Phone 的內容格式為 #886-0123-456-789,1234. 沒有分機就忽略 ,1234" 這個名片分成幾個部分來解釋: 解析圖片: 相關資訊透過照片的上傳。請...
繼續閱讀
February
4th,
2024
樂高 - 小積木立大功,用玩具堆出財富帝國的秘訣
レゴ 競争にも模倣にも負けない世界一ブランドの育て方
作者: 蛯谷 敏
譯者: 連雪雅 陳幼雯 蘇文淑
出版社:大塊文化
出版日期:2022/05/28
語言:繁體中文
買書推薦網址:
Readmoo: 購買網址
前言:
這是 2024 年第 1本讀完的書,這一本還蠻早之前就注意到的。但是因為真的超級厚一本,所以遲遲沒有開始看。去年年底開始喜歡看比較大本的書,以致於年底的書籍掛零。 這一本看完反而易猶未竟,真的蠻多小故事。不論是你是一個新創企業的老闆,還是一個成熟企業的主管。這一本書裡面有許多時期都是你會感同身受的。
內容摘要:
你一定玩過樂高,但你也許不知道:
任天堂、TOYOTA、Google、MIT、NASA⋯⋯都與樂高有著出乎意料的關聯!
樂高是現在世界上最大、利潤最高的玩具製造商,它曾被美國《財星》雜誌評為「世紀玩具」,更獲選為「全球最具影響力的品牌」,蟬聯「全球最佳聲譽企業」的寶座。在COOVID-19疫情下依然逆勢成長,營收屢創新高。
轉型創新必看!
面對時代新趨勢,向玩具龍頭學習變與不變的經營哲學
1932年創立於丹麥的樂高,發展至今近90年,在發展初期幾乎無人料想到其產品對於成人,能夠像對於兒童一樣具有吸引力。除了玩具外,還跨足不同商業領域,包含電影、遊戲、主題樂園等。
在今日如此成就下,其實鮮少人知道,樂高曾幾度陷入經營危機:因專利保護期結束,相繼產生,造成市場占有率急劇縮小;與《星際大戰》、《哈利波特》等知名 IP 合作,急於改革卻導致樂高一度面臨破產⋯⋯
在這些危機中,樂高如何活用原有的創造性,提高商品價值的產品開發、品牌養成、培育廣大粉絲群、進行異業合作等策略,突破經營困境,創下高收益?
創造競爭優勢,「拼」出好成績
向樂高學習品牌永續經營的核心關鍵
品牌經營永遠是進行式!本書揭開超越GAFA(GOOGLE、AMAZON、FACEBOOK、APPLE)的樂高成功法則,教你掌握連Google 、TOYOTA都受到影響,持續創造品牌價值的四大關鍵——
【關鍵1】理解自身強項
【關鍵2】創造能不斷收獲佳績的體系
【關鍵3】經營社群、強化連結
【關鍵4】明確的企業存在意義
樂高的年度財報表,可以看出來 2017 面臨著少見的營業利益與營收雙雙下滑的窘境。
心得:
在閱讀這本書前,我可能不是很清楚其實樂高已經是一間超過九十年的老公司。他高昂的單價,會讓我不知道其實他的專利在 1980 末期其實就已經過期。 現在你看到的所有「樂高-like」的組合積木其實都是合法的。
那麼到底樂高是透過哪些方式在經歷了:
1980 末的專利權過期,市場競爭開始激烈。
2000 之後,電視遊樂器的興起更讓兒童對於樂高逐漸失去了興趣。
2017 年初的經營危機,連續十三年的獲利之後戶然在這一年遇到營收與獲利雙減。
2020 年之後,所有的民眾對於短視頻的熱衷。讓注意力更難在積木上專注。
究竟他們是如何專注與轉型? 當然樂高不是沒有做錯事情,他們也有因為做了許多特有的樂高積木,造成過多的庫存與低迷的買氣。差點讓整個公司面臨到倒閉。
但是,回歸使用者創意的做法,讓他們更認真的思考會玩樂高的人,究竟要的是什麼?
是更多專屬的新樂高積木塊?
是更多電影系列的合作款?
之後他們也認真的將積木回歸了最基本的方式,反而與玩家一起成立特殊品牌 - 「 Ideas 系列」
這個系列將玩家變成了創作者,也讓「玩家社群化」更多與更多的玩家加入討論,搜集,投稿。一起跟公司成長。也造就了公司營收的復甦。 加上 2020 年之後的瑪莉歐創作系列,讓整個樂高的創作來的一個新的高度,並且讓更多的人願意一起加入。
最後,這整本書的編排其實不是依照時間的編排方式。 反而是透過許多單獨採訪的方式來敘述關於樂高這間公司的故事,在觀看上會稍嫌有點凌亂。 但是許多的重點還是有被完整的敘述,一間偉大的公司在經歷許多不同的嘗試過後。最重要的還是要回歸初衷,讓使用者找到他們真正的價值。
繼續閱讀
February
4th,
2024
前情提要:
上週五晚上用 PS Portal Remote 打破第一款遊戲 「PS5 惡魔靈魂-重製版」,打一些感想: (跟著我唸三次: Playstation Portal Remote 是搖桿)
Portal 打籃球遊戲有點吃緊,但是魂系類可以打王。不打盾反的話,之前玩隻狼因為要抓防禦節奏,還是不太行。
整個續航力很強大,大概可以打到四五個小時以上(因為都是串流)
用 PS Portal 好處就是,每一場都有錄影可以用。 XDDD
滿了 PS Portal 之後,我 Deck 開始變少用了。因為串流續航力真的很強。
接下來是「惡魔靈魂-重製版」的感想:
畫面真的超好,魂系列最好的畫質也不奇怪。(法環沒有 PS5 版本)
惡魔靈魂的王都比較簡單,倒是跑圖超遠。
全白跟全黑很農,到後期根本不想打了。
家人看韓劇,我在旁邊刷刷魂跟密斯特鐵鎚,其實很療癒。
不過我尾王還是拿打刀來收尾。
一些遊戲片段
1-2 如何用法師打紅龍
如何刷 密斯特鐵鎚
老勇士要怎麼打
繼續閱讀
January
29th,
2024
2023年,我最大的收益之一就是发现了许多优秀的书籍。这些书对我的职业发展提供了极大的帮助。照片中是我去年买的和职业发展相关的书籍。大致可以把这些书分为三个类别。第一类,关于理解和成为(或选择不成为)Manager 的书籍:- 《The Manager's Path》✨(经典必读,即使不想当 Manager)-《An… pic.twitter.com/XZaubZD9U7— 北火 (@beihuo) January 29, 2024
第一类,关于理解和成为(或选择不成为)Manager 的书籍:
《The Manager’s Path》(经典必读,即使不想当 Manager)
這個在 Safari Online 有,也有 audio Book 版本。 這本我也看完了,但是還沒寫心得分享。
《An Elegant Puzzle: Systems of Engineering Management》 from Amazon
《Become an Effective Software Engineering Manager》(读的 Kindle 版,里面有非常实用的技巧)
這個在 Safari online 也有。
第二类,旨在帮助你成为更出色的工程师的书籍:
《Staff Engineer: Leadership beyond the management track》
原文有人做了中文翻譯,還開放Gitbook。
《The Staff Engineer Path》
這個在 Safari online 也有, 也有 audio book 版本。 我也有心得分享。
第三类,专注于培养更优秀的团队和工作环境的书籍:
《Shape Up》
《Rework》
《Remote》
《It doesn’t have to be crazy at work》
以上書籍帶查詢。
繼續閱讀