2017年07月,數學建模黑客松開始動了起來。
身為一個營隊,能有什麼不一樣的元素?
我們想要辦的不只是一個營隊,而是一個完整的大型活動。從設計與包裝、宣傳與行銷等各個面向,都必須媲美專業團隊所舉辦的活動。
當時的我所參加過最大型的活動是 PyCon TW,不管是人數、活動規劃、設計等等,我覺得都還算蠻完整的,畢竟是人數眾多的大型活動,已經是相當舒服的活動了。
電子名牌
延續著 PyCon 的感應名牌,這個計畫成為數學建模黑客松的第一項計畫。
首先是規劃電子名牌的功能,PyCon 的名牌採用 RFID 貼紙,但其實只有報到領東西用,上面也沒寫名字。基本上連辨識人的功能都沒有xD。而黑客松的名牌基於營隊的原因,至少要有名字!!! 後來開出的規格如下:
- 名字(外觀辨識)
- 感應(報到、點數系統)
- QR Code(電子名片)
當時有設想幾個製作方案:
- 客製化悠遊卡
- 客製化感應卡
- 購買感應白卡製作卡貼
- 一般名片卡兩張,夾層黏上感應貼紙
後來選擇第二方案,原因是價格可以接受,做出來的品質也比第三、第四方案好很多。但是由於少量製作,價錢並無法壓太低,而且也因為成本關係僅製作黑白版本。
讀卡機
讀卡機採用 Raspberry Pi 3 ,MFRC522 為感應晶片,4×4鍵盤作為輸入介面以及16×2的螢幕做為顯示用。主要分為兩個功能:
- Reader Mode:
- 讀取卡片id,並顯示在後台系統中。
- 螢幕上會顯示已登錄卡片之帳號。
- 後台可設定時段及機器所需要的功能,於刷卡紀錄中寫入該筆紀錄之用途(Ex: 9:00~9:30 為報到時段,讀卡機即可設定此時段為報到,讀卡紀錄則會自動寫入為「報到」)
- Money Mode:
- 按#可以開始感應,每次僅會感應一次。也就是每筆交易都需要先按#作為開始感應交易。
- 可以修改金額,當金額為 0 時則查詢點數。
由於讀卡機需連線才能使用(需要使用營隊系統 api),因此僅限於在演講廳及報到台使用。
點數系統
感應卡有除了報到的用途,還有點數功能。不過由於只是營隊,並不想讓系統太複雜,最後採取的方式是全部採連線交易,營隊系統 api 只需要卡片 id 及金額就能運作,並沒有寫入資料在感應名牌中。由於會場網路只規劃在系館及演講廳,戶外活動時並沒有網路,因此使用 QR Code 讓工作人員連到電子名片頁面進行點數增減(電子名片頁面功能,後面再介紹)。
電子名片
主要功能為讓隊員互相掃描電子名牌上的 QR Code 即可交換 facebook 帳號、email、電話。facebook 帳號原先採輸入個人網址,但顧及並非所有人都知道個人 facebook 網址,因此採取 facebook 登入方式連結系統。
而此頁面也會根據不同登入權限而有不同資訊。舉例來說,個人登入可以看到自己的點數及該隊隊輔聯絡資訊,而其他人掃描後僅可看到電子名片。具有點數權限的工作人員,掃描後可以看到點數的輸入框。
營隊系統
為整合各項子系統,統一使用 Django 作為營隊系統框架,各個子系統為各個營隊系統之 app 。此系統共用一個後台(Django 預設後台)。系統涵蓋了隊員保險資料處理、電子名片、點數系統、聊天機器人以及 api。營隊系統網站及官網皆使用 Let’s Encrypt 的 SSL 憑證進行 https 連線。
介紹完營期間的專案,接下來介紹營期前的專案xD
官方網站
官方網站採用 wordpress 作為 CMS(content management system),原因是一開始並不想自幹這麼多專案。(官網並沒有手動寫到太多 Code,頂多修改佈景主題的程式碼)
標準字
標準字由美宣組確定後即著手製作標準字電腦字型,並放上官方網站標題。佈景主題也有因應標準字修改配色及排版。
報名頁面
報名套件使用 Contact Form 7,搭配 Save Contact Form 7 儲存報名資料到資料庫。搭配 CF7 的 email 功能,將所有報名表另外備份至 Gmail。
關於報名表格式,一開始有考慮全部採用線上填寫,但是考慮到在學證明圖片,最後仍要求大家使用 Word 編輯,轉成 PDF 上傳。至於手機無法上傳的問題……這套件也是找來的,懶得處理了。
粉專聊天機器人
以 Quick Reply 流程為主,依照官網 Q&A 及最多人問的問題,分成活動內容、活動費用、我要報名、住宿問題,其他問題則轉介真人回答。原先還有計畫增加數學遊戲等功能,但時間不足作罷。
流程
任意字 ⇒ 顯示歡迎訊息及「問問題」按鈕 ⇒ 出現問題列表按鈕 ⇒ 利用按鈕的 payload 判斷屬於哪類問題
「其他問題」類
利用交接通訊協定,將主控權交給 secondary Receiver,primary 機器人則進入 standby 狀態。當輸入「問問題」的時候,primary 機器人會取回對話串控制權。
粉專活動
時間:2017/12/02 00:00 ~ 2017/12/09 00:00
格式:『海報上的兩段文字是: 第一段文字, 第二段文字』
自動比對格式,並將 psid 及通過資訊存進資料庫,機器人會自動回應通關訊息。
報名資料處理
由於報名資料很白目的採用了 PDF,雖然方便上傳、給評審委員審查,但是要從中擷取報名表格真的 hen 麻煩。
第零步:整理 pdf 資料並將重複報名的剔除,總計約 160 份。
第一步:將 pdf 的資料 parse 成 txt。
第二步:從 txt 的資料 parse 出個人資料及報名動機&研究成果。
第三步:統整各組報名資料,做成報名概要。報名概要包含全部報名名單、各組性別比、報名學校。報名學校輸出後使用 Google Maps API 取得學校位置。
此部分程式碼有放上 Github ,可以點選這裡參考 andylee830914/mathhack_data。
保險資料處理
錄取名單出爐後,即將錄取隊員名單匯入營隊系統,並使用原本 pdf 報名表所留之資料做為預設資料。每組都有一個 id,並以 email 方式批次寄給聯絡人。點選 email 中的連結即可登入填寫保險資料。
後續寄發營前通知時,則採用 email 及紙本通知。由於填寫地址時沒有一併要求寫郵遞區號,於是使用 Google Maps API 取得 formatted address 再取得其郵遞區號。
另一部份則是成大最狂雲端智慧密室了,這部分有機會再與大家分享吧www