https://www.gravatar.com/avatar/1b2e937d26fa273fd402e042f2139949?s=240&d=mp

Huang Po-Hsun

Flask 中使用 JWT

前言 因為我寫的上一篇文章是"Flask 中使用 MySQL",文章內容有提及 JWT 的使用,這篇就是寫一下我在 JWT 上的使用。 Cookie Session Cookie 和 LocalStorage 最大的區別是 Cookie 可以設置時效性,而LocalStorage 不行。 在 JWT 授權認證技術還沒出來之前,我們是使用 Cookie 和 Session 來做驗證,分別是前端(Front End)和後端(Back End)的本地存儲。過程如下: JWT 理論部份 因為 Cookie Session 這種方式太過繁瑣,所以出來了 JWT 這樣的技術,原名 (JSON Web Tokens),就是帶時效的 Token。主要差別是,Server 端不需要存 Session,大致情形如下: JWT 主要分為三段,個別為 header、payload 與 signature,中間以 . 做區隔,每一段都是透過 Base64Url 去編碼,中間的 payload 有時候會加密。 e.g. 1 2 3 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJlbWFpbCI6Imhpcm9AZ21haWwuY29tIn0. WAKjPd_0qcEG3dA9pEwAiw-0ADb8VwqFlSWiIYJTymo header 存放 token 型別與加密方式 。

Flask 中使用 MySQL

前言 我一開始學 Flask 時是看 Flask 的官方教學學的,不得不說Flask 官方文檔寫得很好。因為 Flask 官方教學是使用 Sqlite 做為數據庫,但是我想要使用 MySQL,在自己網上搜索,加上自己的鑽研手做,這裡紀錄我摸索的結果。因為我偏好使用原生 SQL 語法,所以下面的數據庫操作都是原生語句,例子也是我之前做的某個項目裡面拿出來的。 安裝 1 pip install mysql-connector-python 引入、連接數據庫 因為是 MySQL,所以自己要在自己的電腦本地數據庫寫好要用的數據庫。下面的連接參數要自己改。 1 2 3 4 5 6 7 8 9 10 11 12 13 import mysql.connector from mysql.connector import Error # 連接 MySQL 資料庫 connection = mysql.connector.connect( host='localhost', # 主機名稱 database='myTelegram', # 資料庫名稱 user='Rem', # 帳號 password='') # 密碼 cursor = connection.cursor(buffered=True) cursor.execute("SELECT DATABASE();") record = cursor.

關於學習軟件工程、計算機科學與技術的方法

學習態度 讀萬卷書不如行萬里路。 我認為學習工程相關最重要的莫過於要親身去實踐手作,而非靠一堆理論知識和小實驗去學習,做項目讓自己有經驗莫過於看一堆理論知識以及為考試或光鮮亮麗的文憑。切記,實作是刻印在人的身體。 再者,學習是靠興趣的,想要學好軟件工程,需要愛上編程,如果只是像學校老師或學長姊得學習步調走,而不自己主動去學習並實作自己感興趣部份,你將永遠不會學會編程。 學習步調 學習一門技術分幾個階段: 初步認識,了解原理等理論知識。 會寫 Hello world,學會基礎使用語法。 熟練該門語言,並能自己使用這技術開發中小型 Demo 與項目。 精通該語言,能駕馭該門技術,開發大型項目。 不要學到了 Hello world 就認為自己已經精通了,你還隻是菜鳥。不要還沒學會爬就想跑步,除非你自認天才。 關於文檔 我自己認為文檔在開發項目的比重並沒有很重要,要求文檔的前提是整體隊伍有一定的水平實力能去實現,不然寫出來的文檔也無法實現。做項目的是人不是文字,文檔頂多起到開發輔助的效用。然而,現在學校很多比賽卻是重視文檔,各種 PPT 大賽到 PS、PR 編程,這事實讓人痛心,使很多有實力的人因為文檔的繁文縟節而退卻。要真正做到的是項目不是靠文字或嘴巴或白嫖網上開源代碼……等方法實現,而是靠自己紮實編寫的代碼。 代碼技巧與學習管道 我認為有幾個技能是一個程序員必備的: 學會使用搜索引擎關鍵字。 翻牆使用 Google、Github、Stackoverflow、Youtube…等學習網頁。 官方文檔有時是最好的選擇。 編程注意註解,還有變量函數命名、代碼編排,儘可能讓代碼精簡。 要捨得花時間學習新知識。 Git、Github、Markdown 的使用,寫正式報告建議使用 LaTeX。文檔交 PDF 格式。 自己的 Blog,用來創造發表自己的想法與技巧。 保持上進心、好奇心與謙虛,要勇於探索新事物,且人上有人,天外有天。 最後希望大家能擇你所愛,愛你所擇,如果敲代碼是你的興趣,那恭喜你,你有自己的愛好。

Vue 技巧與經驗 - 項目構建、組件、路由、請求

前言 經過許久寫 VueJS 的經驗,實在是有些技巧我想要紀錄下來,畢竟當時我摸索了很久,從一開始的不擅長到後面的熟練,經歷的 Project 很多。希望能幫助新手快速掌握 VueJS。 這文章不會教你 Vue 基礎語法等詳細的基礎部份。所以在看這篇文章時需要一些 Vue 基礎。 如果因為沒有範例觀摩的話,可以看我在 2020/06/30 - 2020/07/17 暑假實訓寫的個人空間系統 - Blog 前端。 Vue-cli 腳手架使用 創建應用 用了 CDN 引入就不能用 Vue-cli 了,整個的結構差太多,通常 CDN 引入就是 Demo 或是很小的專案某部分用來代替 JQuery 用。 大部分開發還是使用 Vue-cli 比較方便。關於使用 Vue-cli 現在使用 npm 可以自己選擇要裝哪些東西,使用越來越方便,通常我是建議自定義,因為 eslint 的標準太高了,每次打開瀏覽器 Console 就一堆警告。所以在後面的選擇將 Linter / Formatter 這一項按空白鍵(Space)去掉。目前我開發項目初始構建只需要下列三個就暫時夠用了: Babel:自由開源的 JavaScript 編譯器、轉譯器。 Router:Vue 的路由。 Vuex:組件狀態管理。 關於怎麼裝 npm 和 vue-cli,我想 npm 就網上下載安裝,vue-cli 就執行 npm install -g @vue/cli 指令進行安裝。

Rem Blog 的構造改革過程心得

感觸 我第一次接觸 Hugo 的時候,是我因為朋友的技術 Blog 所以感興趣,尤其因為當時剛開始接觸項目和比賽,所以學了 Git 和 Markdown 卻不熟練,笨手笨腳的,那時大一生的我實在是太菜了,現在想想已經過了兩年,已經到了升上大三,時光飛逝,年紀越大感觸越深。 我第一次學怎麼構建 Hugo + Github Pages 構建自己的 Blog 是看這篇文章,這篇文章真的寫得很好,我也推薦我室友看這篇文章,他也快速就上手了。我還記得當時我真的就是折騰在 Hugo 主題上,我第一次選的主題無法發表 Posts,是比較適合拿來做簡歷的主題,害我白搞了一天要換主題,第二次看中了 AllinOne 主題(不知道位為什麼現在這主題從 Hugo Theme 網站下架了),因為看這主題很酷炫,但這主題說真的配置起來很麻煩,最後配置完還發現手機端的顯示不正常,要自己去修 CSS,還有各種 Bug。 最近又因為發現自己很多文章中上傳到圖床的圖片很多被 404 了,我也不知道為什麼被 SM.MS 給 Block 了,加上我 AllinOne 這主題讓我的 Blog 載入速度過慢,直到前幾天,我經過好友的建議,終於決定要全面換新,我也考慮要換哪個主題找好久,好友推薦我 LoveIt 這主題,我也最終被這主題的界面打動,決定改用這個主題,一開始摸索這主題的配置參數弄了很久,加上這個主題沒有正體中文的界面,所以我自己去修 i18n 的文件內容,把自己所有文章的構造重新整理一次,將自己所有的文章要用圖片都使用 Tinypng 壓縮過再上傳到 imgpoi,最終成了現在的樣子。我很滿意 (,,・ω・,,) Rem BlogRemBlog.png " Rem Blog Reference AllinOne LoveIt

Python 解決羅馬數字轉換 NPSC 模擬試題

前言 因為我家人正在學習寫 Python,我教導他去刷題庫,結果在高中生解題系統要解某個基礎題庫的題目時卡住了,我只好幫他解一下題目。 題目 這是高中生解題系統基礎題庫裡的 a013 題目 內容 如果生活在數世紀之前的古羅馬,你應該用過 V 來表示五。V 和 5 這兩個符號都可以用來表示數目五。用來表示數目的符號稱作數字。而羅馬人用來表示數目的符號就是羅馬數字。 以下是七個基本的羅馬數字︰ 羅馬數字 數目 I 1 V 5 X 10 L 50 C 100 D 500 M 1,000 所有其他的數目都是由這些數字組合而成。數目都是由左寫到右,通常值是等於組成的羅馬數字加起來。 例如十七可以表示為 1 2 X + V + I + I = XVII 10 + 5 + 1 + 1 = 17 表示羅馬數字可以使用減法來取代加法的規則。例如四可以不用四個一相加來表示 IIII,而採用五減一來表示 IV。利用這類規則,羅馬人能夠減化許多數目的表示方式,例如 IX 取代 VIIII 表示 9,及 CD 取代 CCCC 表示 400。

Linux 配置 npm

前言 npm(Node Package Manager)是 node 包管理器,是 Node.js 預設的、以 JavaScript 編寫的軟體套件管理系統。相信各位在開發 Vue 或是快應用等方面都會用到 npm,這裡我寫一下關於 npm 在 Linux 上的配置,因為在 Linux 使用 npm,因為在使用 npm 安裝套件時會發生權限不足問題還有下載源速度過慢,我將在這篇文章教大家如何配置 npm。 安裝 npm 裝 npm 時,會幫你也裝 nodeJS等相關依賴。 1 sudo pacman -S npm npm 本地化 在家目錄建立資料夾 1 mkdir ~/.npm-global 設置 npm 的目標資料夾 1 npm config set prefix '~/.npm-global' 加入本地環境變量 如果你有安裝使用 ZSH,也需要在 ~/.zshrc 引入環境變量。 1 2 vim ~/.

Arch Linux 打包教學

前言 這次之所以會有本次教學,是因為我大二上參加 2019 服創比賽,因為快應用開發 IDE 只有 *.deb 的 Ubuntu 版本,我當時將 *.deb 轉成 tar.gz 適用 Arch 發行版的包失敗,當時我是看這網站使用 Debtap 工具,雖然最後成功轉成 tar.gz,但是安裝時卻輸出該包的結構損壞,我也有在網上看到有建議 dkpg,然而實際上寫 PKGBUILD 才是最好的方法,當時是我朋友將快應用的官方 IDE 打包到 AUR 上,最後安裝成功,打包中途他也遇到很多坑,最後他寫了一篇 Arch Linux 打包教學,但他這篇卻沒有給出實例,讓大多數第一次打包的人看不懂,就跟看官方文檔一樣。網上詳細優質的打包教學少之又少,這次我藉著一個機會體會到打包的過程,為了紀錄這過程,我寫了這篇教學。 本次文章參考了 ArchWiki 的 Creating packages (简体中文)、PKGBUILD (简体中文) 和書術方隅。你可以認為我這篇是這三篇的綜合進化版。 簡述 創建 PKGBUILD – 一個包創建描述文件,由 makepkg 使用來從原始碼創建二進位制包。Arch 套裝軟體標準包含當前規則和提高套裝軟體質量的方法。如果已經有了 PKGBUILD 文件,請參考 makepkg (簡體中文)。 打包前一定要先 Google 一下你要打包的軟體包是不是已經有人上傳到 AUR 了。 準備工作 必需的軟體包 首先,確定你已安裝必須的工具包。安裝 base-devel 應該足夠了;它包含 make 和 makepkg 其它一些從原始碼編譯時所需要的工具。 創建包的一個很重要的工具是 makepkg(由 pacman 提供),它主要做以下工作:

在 Linux 配置 Java 開發環境到虛擬硬碟 - Java8、Tomcat8、Maven3、IntelliJ IDEA

前言 我在這篇會分享我是如何在 Arch 上配置 Java 的開發環境。再來我必須說的是,我這個適用於你的電腦的 Linux SSD (root) 空間不夠的情況,大部分的人是 Windows 與 Linux 雙系統,像我只能把 SSD 割 30GB 給我 Linux (這是因為我電腦上的 Windows 有被廠商更改過,限制了割出的量),而虛擬硬碟卻可以割到 100GB 以上,我會教大家如何將 Java 環境裝到 /home。如果覺得自己 SSD 夠用,就直接從 AUR 上 yay 下來,直接略過此次教學 (メ ゚皿゚)メ,畢竟會有人覺得我這樣的做法讓系統管理有點髒。不過關於環境變量的配置可以參考我這篇文章,不管是裝在 SSD 還是 HDD。 JDK 版本選擇 JDK 1.xxx 和 JDK xxx.0 比如 jdk 1.8 和 jdk 8 參考自這網站的介紹。 Sun 公司看別人的語言更新都更新到 xxx 了,自己的 Java 版本還是 1 點幾,讓人感覺很落後,所以在 jdk 1.6 的時候對外發布稱之為 jdk 6.0 ,讓人感覺更先進點。在寫 Java 的人眼裡都是叫 1.

在 Linux 上控制 Python 版本 - pyenv

前言 在 Linux 開發 Python 相關的項目,你是不是會碰到關於 Python 版本之類的問題?像是開發 Tensorflow 的時候碰到版本問題,原本 Python 3.7 可以支援 Tensorflow,但是忽然 Python 從 3.7 更新到 3.8.0,這時 Python 3.8 不支援 Tensorflow,你苦惱了,千辛萬苦的項目因為系統更新而導致版本不支援使項目暫停開發,這時 pyenv 將成為你的救星,如果你硬是不肯更新系統 Python 版本,你的系統將會得不到最新的體驗與安全並處於危險的不穩定狀態,系統更新真的很重要。 pyenv 是很棒的 Python 版本控制工具,讓你的電腦可以安裝多個 Python 版本。pyenv 是 Github 上的開源項目,關於使用須知該項目的 README.md 寫得很詳細。我這篇文章就分享一下我在 Arch Linux 的安裝方式。 安裝 從 Github 倉庫上直接 clone 下來。你也可以選擇直接在瀏覽器上下來。然後壓縮包解壓將文件內的文件放入 ~/.pyenv。 註:如果你在國內網使用 Github 網速過於緩慢,建議開 Proxy,然後給 Git 設置代理。 設置代理 1 2 3 4 5 6 7 8 9 10 # set http git config --global http.