Carbon —— 把程式碼片段截成有質感的圖片吧

開始挑戰每週寫文之後,發現最大的敵人根本不是寫文這件事,而是自己的惰性啊。像這次母親節假期過太爽,差點兒就忘記發文…… 所以這週就還是 偷懶 工具介紹囉。

今天要分享的是 Carbon 這個工具,它能夠將貼上的程式碼輸出成圖片,並且支援程式碼上色,還可以自選字型、背景色等等,產出的圖可以說相當有質感。

當傳送圖片比較快或排版比較好的場合(例如Line, Facebook..),或是在部落格和文件中想直接放漂亮圖片,以及需要示範給對方看可是又不想要對方直接複製貼上的時候可謂是相當實用。

先來一張成果圖鎮樓

……

閱讀全文



我要訂便當 (4): 將 Python 腳本部署上 Heroku

2024.10 更新: Line Notify 將於 2025 年 3 月停止服務(LINE Notify 結束服務公告),有看到這篇的朋朋請選擇一組新的通知服務來串吧 QQ

目標:紀錄一下如何將 Python 寫好的東西丟上 Heroku

在先前的 訂便當系列 中已經建立了一個替我們去爬便當網並通知我們的小工具,但還存在一個相當大的問題:要在哪跑?總不能就只放在家裡電腦有開機就跑、沒開機就算了吧?因此我們必須找個主機把它放上去。而在上一篇做 Line Notify 的時候所參考的 如何快速建置一個 LINE Notify 的服務 中提到了將服務放上 Heroku 的部分,因此馬上嘗試看看。

結果過程中碰了不少壁,因此特地紀錄下來。

Heroku 是一個雲端平台,讓使用者可以把服務丟上去跑,同時最讚的部分是,免費用戶就提供了每月 450 小時可以使用(但有每半小時會進入休眠的限制),詳情可以參閱 Heroku 的計費頁面

更新:Heroku 已經改為收費方案了 QQ

本系列最後一階段的目標就是要將訂便當爬蟲整套丟上去雲端上運行,達到被動接收通知的效果。但由於訂便當爬蟲還牽涉到用 Selenium 開瀏覽器互動,以及使用 Sqlite 儲存的部分,轉移到 Heroku 的環境上還需要進行一些調整。因此這一階段將會分成兩篇(或以上)文章進行,上篇會先簡單地紀錄如何將服務放上 Heroku,下篇開始則著重於紀錄將訂便當系統放上 Heroku 時遇到的問題和解決過程

本篇主要的參考來源來自於 搭配 Git 在 Heroku 上部署網站的手把手教學發布網站到 Heroku 以及 網站部署(使用 Heroku) 這幾篇,其餘參考將附於文末,感謝各位前人大大留下的優質文。

……

閱讀全文



CSS: 變數 (Variables)

這禮拜忙了些,只好先偷懶打張安牌。這邊就記一下前陣子同學弄主題切換時用到的 CSS 變數(Variables)功能用法

原本使用 CSS 時就會有許多重複使用的部分,例如說網站的主色彩和副色彩等,然而在管理上,或是要修改的時候就會很麻煩,通常都要另外借助工具來處理。然而 CSS 其實原生就有變數可以使用,大大地增加了改動時的方便性。用法上也相當簡單。

在 CSS 宣告變數時,建議放在 :root 裡,並使用 --變數名 的方式宣告。例如

:root{
    --color: #000000;
}

而使用的時候只要 var(--變數名) 就可以囉。例如

body {
  background: var(--color);
}
……

閱讀全文



Feedly —— 用 RSS 訂閱來主動篩選資訊吧

「你看,我認為人的腦子本來就像一間空空的小閣樓,應該有選擇地把傢俱放進去,傻瓜才會把他見到的所有破爛一古腦兒的裝進去。這樣一來,那些對他有用的知識反而被擠了出來;或者,最多不過是和許多其他的東西摻雜在一起,在取用的時候也會很困難。所以一個會工作的人,在要把一些東西裝進他那間小閣樓似的頭腦中的時候,確實是非常小心謹慎的。」

  ——《福爾摩斯探案記:血字的研究》

在咱們寫程式這行中,幾乎所有人都必須要在網路上找尋資料;而就算非這一行的朋友們,也會在網路上多方攝取資源。隨著時間的累積,都會開始有一份列表,諸如一些崇拜的大神或是固定追蹤的部落格,又或是文風比較喜歡、素質感覺比較高的新聞或評論等等。

然而列表越來越長,就算加到書籤也總不能沒事就逛一大圈,也常常逛到不知道到底在幹嘛囧。因此把多個資訊來源集中起來整理就成了面對資訊爆炸的關鍵一步。

Feedly 就是一個協助資訊來源管理的工具,可以很方便地把不同訂閱來源整理在一起,例如你可能追隨了五六個大神的部落格,只要這些大神都有提供 RSS 訂閱,Feedly 就會將大神更新的文章收集到平台上。

每天只需要上去 Feedly 看一下有沒有哪位大神更新,就可以化主動為被動,穩定接收新資訊。並且由於集中管理的關係,也可以檢視是否有哪個資料來源,如新聞網站,實際上更新的文章並不太合你胃口,或是哪些已經停止更新了,就可以進行剪枝的動作,建立自己的篩選機制。

……

閱讀全文



EPPlus —— 輕鬆處理 Excel

前陣子工作需要匯出一些資料表,因此用到了 EPPlus 這套工具來把資料匯出成 Excel。由於這需求似乎會挺常遇到的,決定記一下。

目標:稍微紀錄一下這次碰到 EPPlus 的用法。

EPPlus 是在 .NET Framework 或 .NET Core 上提供控制 Excel 的元件,操作簡單好懂,當有需要在網頁上讓人將表格資料下載成 Excel 的功能時就可以試著使用。常常一併被提起的還有另一個一樣老牌的相似功能元件 NPOI,不過我個人只用過 EPPlus 便不再贅述。關於更詳細的介紹,可以參閱黑暗執行緒的這篇 比 NPOI 更討喜的 Excel 元件 - EPPlus!,儘管是有些久遠的文章但仍能迅速了解 EEplus 的賣點和差異。

我在使用 EPPlus 時主要的參考來自於 EPPlus 的 Wiki,每個功能都有說明及範例,同時也有範例專案可以下載,寫得相當詳細。另外還找了如 導出 Excel 之 Epplus 使用教程 - Wico’s Blog使用 EPPLUS 操控 Excel - 碼農的學習日誌 這些有逐步說明的文章,在此感謝。

……

閱讀全文



我要訂便當 (3): 用 Python + Line Notify 傳送通知

前情提要:

我要訂便當(1) —— 用 Python + Selenium 控制瀏覽器取得訂單 中,我們嘗試了用 Selenium 控制瀏覽器去取回訂便當團購網的訂單內容

而在 我要訂便當(2) —— 用 Python + Sqlite 儲存訂單 中,我們使用 Sqlite 達到將訂單儲存起來以判斷是否有新的訂單,因此這邊的下一步就是需要進行通知。

目標:使用 Line Notify,當有新訂單的時候就發送通知

Line Notify 是 Line 上面的通知服務,不像 Line@ 一樣可以有品牌有互動等等,Line Notify 純粹就是訊息通知;但同時對比 Line@ 最近吵得沸沸揚揚的收費和大量跳槽,Line Notify 則是免費的服務。

Line Notify 的運作上分為發送訊息和接受訊息。當我們使用 Line 帳號申請 Line Notify 的服務後就可以得到一個 Access Token,藉由這組 Access Token 就能夠讓我們的程式和服務去發送通知。這些通知會由一個叫做 LINE Notify 的官方帳號發送給有訂閱這個通知的人。

基於這個工作原理,像是需要經營品牌的服務就不太適合 Line Notify,反之像是伺服器斷線、設備超載等等這些個人通知性質比較高的服務就很適合使用 Line Notify。這點從 Line Notify 網頁 下方的示意圖也可以略知一二。

當然像我們這次的需求是「如果有新的團購便當 就 通知我」,相當符合使用場景,因此這邊就嘗試使用看看並記錄下來。

如果需要更多 Line Notify 的說明,保哥的這篇 上手 LINE Notify 不求人:一行代碼都不用寫的推播通知方法 介紹的更為完整,推薦參閱。當然,也可以閱讀 Line Notify 官方文件。那麼,我們開始吧~

……

閱讀全文



Visual studio 環境設定 —— 字型、套件、快捷鍵

目標:整理一下自己用的字型、插件和快捷鍵

今天在工作時寫到一半突然藍屏,重開機之後俺的地表最強編譯器 Visual Studio 整個就開始鬧脾氣,打開專案整排都是 Error,連 System.Object 都找不到,差點往生。還好用了修復功能之後一切恢復正常,但是載入的插件和一些個人設定就這樣重置了……

為了之後可能還會遇到相同的事情,這邊就先將平常的 Visual Studio 環境用到的設定做一份紀錄,之後遇到新插件或是什麼功能也可以回來更新這篇文,如此一來下次又被洗白的時候就可以回來參考了。

這邊主要會記錄三個部分,並隨時可能更新。主要是字型、使用的插件以及常用的快捷鍵。

不過我的 Visual Studio 也被洗白了所以這篇會跟著找回失落插件的歷程慢慢補上QQ

字型

字型部分必定、絕對要使用等寬字型,這是必要的前提也是絕對的共識,畢竟你不會希望有什麼神秘空白,或是推個版就排版大炸裂之類的。

推薦先參閱 換個好字型讓程式開發有效率

(2021/1/27) 補充:字型也可以看 devfonts 。裡面直接放了超多 Coding 常用字型,也可以貼上 Code 直接進行比較,相當貼心。想逛一下挑個順眼字型的朋友直接試試唄。

Consolas

內建就有的字體,個人認為在不想另外下載字體的時候是相當優質的選擇。

看起來粗粗圓圓的很放鬆。

FiraCode

FiraCode,整體看起來就是乾淨優雅,尤其是連字能使得整個 Code 更有滑順的感覺,十分推薦。

然而,FiraCode 雖然陪伴我一段不短的時間,但還是有一個致命的缺陷:不支援中文!

於是後來我基本上都使用下面介紹的這款

更紗黑體

更紗黑體 除了同樣支援連字以外,更支援多國語系。例如繁中就是有標註 TC 的字形,看見中英文都套用上去就是一陣舒服。是現在我的主力。

至於不想用等寬字體的朋友,都看到這裡了,沒關係。下面這套推薦給你們

Ink Free

就是這麼直接!這麼舒服!如果你的同事要過來 Code Review,不要猶豫字體直接換下去!

……

閱讀全文



SikuliX —— 針對圖形介面寫自動化腳本的小幫手

最近因緣際會下開始玩一些自動化測試的小工具,發現即使不是用在正規的測試時也相當實用,畢竟我們這行能讓電腦自動幫我們省事就是一種樂趣嘛。正巧這禮拜比較忙,無法準時推出訂便當系列的續集,因此決定直接紀錄一下試玩 Sikulix 的過程,以後有需要自動化的時候也方便回來參考。

Sikulix 是一款針對圖形介面編寫腳本達到自動操作的軟體,操作上相當方便。主要是將目標的圖示等畫面擷取下來,再編寫程式對目標進行操作。它編寫腳本時使用的語言是 Jython —— 用 Java 實現的 Python,關於 Jython 的基本操作可以參見 Wiki 教程:Jyhton,對於「實現 Python?」這句話感到疑惑的朋友可以參見 知乎:各種 Python 實現的簡單介绍與比較

此外,本篇對於 Sikulix 的參考主要來自於【測試】圖形化的自動測試 Sikuli / SikuliX 的相關技巧以及 Sikulix 圖形辨識自動化測試開發工具兩篇,特此感謝。

……

閱讀全文



我要訂便當 (2): 用 Python + Sqlite 儲存訂單

前情回顧:上一集在 我要訂便當(1) —— 用 Python + Selenium 控制瀏覽器取得訂單 中,我們藉由自動化套件 Selenium 控制 Chrome 成功從訂便當網站裡取得訂單資訊了。但只能夠取得現在的訂單,和原本有新訂單的時候才通知的目標仍然有點差距,那麼,如何判斷有沒有新訂單呢?只要和上一次讀取時的訂單相比就能知道了。

目標:將訂單儲存起來,判斷有沒有新訂單。

這一篇主要的做法主要參考自 大數軟體 - 如何透過 Line 發送最新一集的漫畫 中,關於如何判斷是否有最新一集漫畫的部分。這系列的影片步驟明瞭,說明直接,同時標題也很對我胃口(我就喜歡把工具拿來生活周遭玩的感覺),因此這邊也推薦一下,有興趣的可以去看看。

回歸正題,這篇的第一部分就是要使用 Sqlite 將抓到的訂單儲存起來。Sqlite 顧名思義就是 SQL + Lite 的感覺,主打小巧輕便。它會將資料儲存在一個檔案中,並且支援精簡的 SQL 指令,可以說是相當方便。

在 Python 要對 Sqlite 做操作主要是藉由 sqlite3 這個包,因此在接下來的步驟前,請先安裝這個包。關於 Sqlite3 的基本操作,可以參閱 菜鳥教程的 SQLite - Python 教學。

……

閱讀全文