實作 Flask 後端中的 Hash ID 需求

Hash ID

上個學期有個小組的學期作業,要寫一個雲端服務,
我們組的主題是實作出一個功能較多又比較兼顧 UI 的 when2meet

在實作分享功能的時候,
我們希望有一個頁面的資訊(一個叫做 meeting 的 model)可以用網址分享,
讓沒登入的人也可以看得到,
但是這樣的分享方式如果直接用 restful api 的標準的話,
直接使用 api/meetings/<meeting_id> (這裡 <meeting_id> 是整數)當網址來呼叫需要的 api,
會讓不相干的人直接在 <meeting_id> 打上數字戳進來

所以要使用 hash_id 來實作,
最簡單的方式是直接隨機 random 出一串字串當作 model 的 id,
但我總覺得這樣做很不舒服,
所以我選擇直接拿原來的 id 做 encrypt

Read more

使用 travis-ci 自動部署 Hexo Blog 到 GitHub Page

Hexo 部署到 GitHub Page

Hexo 部署到 GitHub Page 應該算是最常見的方式了
我之前都是照這篇最後面的方式部署
但我在去年決定改成使用 travis-ci 來幫我自動化的將部落格丟到伺服器上

我的 Hexo Blog git 架構

我延續了使用叫做 <username>.github.io 的 repository,
Branch 名稱與規劃如下:

  • Branch site: source,markdown 稿子
  • Branch master: 由 hexo generate 產生的靜態檔案(伺服器位置
Read more

isolate Sandbox 使用

Sandbox

Sandbox 的中文名字就是直譯過來的沙箱
他能讓程式在一個隔離的環境中執行
隔離的意思就是有限的路徑、有限的記憶體甚至是有限的 process 數量等等
通常是拿來測試一些不受信任的程式
讓我們就算執行了惡意程式也不會影響到我們的作業系統或環境

今天依然是在寫 OJ 中 judgehost 的部份
因為 judgehost 需要跑別人 submission 送來的程式
如果有人送個惡意程式的話就糟糕了
所以就需要用到 sandbox
把大家的 submission 放在 sandbox 裡面跑

isolate

isolate 是 ioi 的那群人開發的一個開源 sandbox
甚至還有蠻不錯的 manual page
前陣子發現還不錯的 judgehost 開源 API —— Judge0 也是使用 isolate 搭配 Ruby on Rails 實現的

Read more

使用 docker-compose 建立開發環境

動機

最近覺得自己的開發技能還有很多欠缺的地方
尤其是完整的開發流程
以往都是直接在自己的本機開發
也沒有使用 CI/CD

然後又突然想寫寫看 OJ
於是我打算直接做中學
並做以下幾個改變

  • 使用 docker-compose 建立開發環境
  • 善用 environment variables
  • 做 testing 以及 CI/CD
  • 認真寫 git commit messages
  • 將學到的東西跟踩到的坑寫成 blog 文章
Read more

Datasets

MNIST Series

MNIST

  • Image of handwritten digit
  • 60000 training examples
  • 10000 test examples
  • 28*28 grayscale images
  • 10 classes
Read more

Tcsh Prompt 個人化

最近學校好多作業都要使用系上的工作站
系上有提供能夠 ssh 進去的 Linux 跟 FreeBSD 空間
預設的 shell 是 tcsh
而且是很原生的 tcsh

多麼的原生呢?

Read more

使用 Docker 架設 DOMjudge

基於某些原因社團需要架設 DOMjudge,因為不想弄髒環境所以最後選擇建在 Docker 裏面
架設 DOMjudge 需要 3 個以上的 Container,Domjudge 官網上有幫我們整理好 Docker 指令要怎麼下

MariaDB Container

1
docker run -it --name dj-mariadb -e MYSQL_ROOT_PASSWORD=rootpw -e MYSQL_USER=domjudge -e MYSQL_PASSWORD=djpw -e MYSQL_DATABASE=domjudge -e CONTAINER_TIMEZONE=Asia/Taipei -p 13306:3306 mariadb --max-connections=1000
Read more

使用 Google Script 來管理 Gmail

Google Apps Script 是 Google 自己出的 Script,可以拿來串接 Google 各項服務的 API

上學期期末的時候其實就聽過系上社團學長說他有用這個在管理他的 Gmail,當然那個時候也是第一次聽過有 Google Script 這種東西

不過期末實在太忙了就沒有研究,然後放暑假 email 們也少少的所以也沒有想到

直到最近開學,直接被各種學校公告學習系統 email 轟炸,熊熊覺得可以來研究一下了

Read more