發表文章

目前顯示的是 2018的文章

我的大學生活 - 暨大資工

這篇文章獻給就讀暨大資工的學弟妹們。 其實我滿想念北部的學校,當時學測成績出來,分數只夠填地名大學(彰師還填不了),經過一番求神問卜之後決定暨大,此處環境好師資好,是個練功的好所在,當時長輩們就跟我說,在暨大好好練功四年,研究所考個好一點的。 暨大資工師資可以說非常棒,老師們都是台清交等級以上的。大一時的程式課是教 Python,真正體會到「寫程式是一種魔法」[註1],當時對於寫出程式的興奮與成就感使我開始自學,還記得大一宿營時(約莫十月吧)我帶了一台筆電過去,晚上休息時在寫爬蟲,只為了給朋友一個能夠自動下載中央氣象局每日觀測檔案為生日禮物,那時使用的還是 py2exe 呢,現在都使用 pyinstaller 了。 說到 Python,當時我除了跟著上課的進度,週末在家晚上有空時也會上網看[官方文件](https://docs.python.org/3/tutorial/),因實在對 Python 太有興趣了,雖然有買中文書但這語言不斷改版,書中內容又偶有錯誤,不如乾脆看官方文件,但是大家可別嚇著了,「Python 這語言優雅到初學者可以不必看那些漏漏長的英文敘述,直接看程式範例去會意即可」。程式最重要就是會用會寫,我一直堅持動手先玩一下,要先感興趣再鑽研其道理也不遲,相信有不少人一開始看到長長的英文敘述就先昏過去了呢。就這樣不知不覺將官方文件看了一大半,但課內的課程也很重要,當時是吳坤熹老師授課,他的課總是提醒我不少小細節,尤其是考卷的部分實在很有趣,老師有[將考卷公開上網](http://course.ipv6.club.tw/),有興趣可以去看一下。 程式課使用老師的 STU Server,因爲都在終端機上面操作,加上當時順便修了 Unix 使用入門,我也對終端機感興趣了,假日有空就利用從克寧老師教的指令亂逛 STU,找找看有沒有沒藏好的東西如考卷之類的😂。說到 Unix,這堂課是影響我很重要的一堂課,當時學長們說這堂課不好過,不過實在沒什麼系選修好修,只好嘗試看看,反正也有人大一修通過的。雖然 Shell Script 跟 awk 現在都忘光光了,但因為有了 Unix 的基礎,讓我往後的課程、實驗能夠更加流暢,也讓我學好了 vim(這技能很重要,當你看到同學殘廢的用著 vim 就能炫技一下),到現在我打 Python 跟 C 語言還是習慣用 v...

HTML Email 初嚐心得

markdown HTML Email 是指在 Email 中使用 HTML 去排版顯示。 最近要替學生會寄信,覺得如果內容就幾行字實在是太無趣,打算弄的跟現在公司寄信一樣美美的。Gmail 編輯時尚不支援 HTML,我打算大量寄信,因此也沒有打算使用 Gmail 去寄信,而是使用 Python SMTP lib 去完成。 我使用的是  BEE Free 這款線上免費使用的編輯軟體,畢竟 HTML Email 不支援很多 HTML 語法,時間緊迫就不打算自己刻了。這套軟體除了免登入,且只需要拉一拉就可以完成,對於不會寫程式的人也十分方便。 在編輯完成之後,可以打包下載,裡面會有一個 .html 檔和一個資料夾,裡面放有各種圖片素材,通常是使用內建的圖片才會有,因此我把這些圖片上傳到 Imgur,再連結到原本的 HTML 檔當中。 測試寄送 HTML 信件時,發現雖然我寄出了,但是沒收到信,但若使用較短的 HTML 信件則可以成功,找了很久發現是不支援 <body> 這個 tag,因此 HTML 內容就砍到剩 <table> 而已。不過還是失敗,顯示 \xe6 不是 unicode 什麼的,這時我確認了很多遍,確定內容都是 unicode 編碼,狀況依舊。在不斷的使用二分法確認出問題的段落後,我發現有個段落有時成功有時失敗,原因竟然是出在那行太長,於是把整份 HTML 貼到 online HTML beautify 網站重新排版過後,果然就成功了。 測試雖然成功,但是在大量寄信時卻有漏信,查了 log 似乎是每次只能寄送 1000 封信,超過就會 drop,於是在寄信清單尾端的人都會沒收到信,`mail.log` 裡面也不會有紀錄。知道這個問題後就去交叉比對收信人跟 log 有哪些 diff,即可找出沒收到的名單再次寄信。我使用 ``` sudo grep -irn "mail1.ncnu.edu.tw" /var/log/mail* | awk '{print $7}' | cut -c 5-32 | awk 'length($0)>27{print $0}' ``` 去抓出哪些人有寄過,再寫 Python 腳本比對。朋友告訴我可以使用 ``` sudo ...

2018 交大丁組面試心得

---- 11/9 更新 ---- 丁組正取 == 以下正文 == 看到 note35   a40136   a73126 agg2567 幾位前輩都有 PO 文 今天 (10/29) 面試完記憶猶新也來寫一下延續傳統  先自我介紹一下 就讀學校:暨大資工(抱歉本校 IP 非 140 開頭) 成績:前三學期十初,後三學期維持前二,總排 4(7%) 經歷:提早一年畢業、大一下開始跟教授接案寫網頁到大三、修過 CCNA JNCIA、Ubuntu 兩年以上經驗、AIS3 中區得名、學生會資訊顧問 第一階段很幸運的通過了,總共有 17 人進入第二階段,但是有三人缺考,兩人逕予錄取,是 14 搶 4 的局面。 早早來到考場,今天氣溫特別低只有 17 度,新竹風又特別大,穿著薄外套一直發抖,簽名完先到一間電腦教室待著,之後 8 點 50 一到就被叫去考場做性向測驗。性向測驗時可以帶水、鉛筆盒, B3 考卷有八張、A5 考卷四頁,總共有三小時時間可以作答。 其中第一張 B3 是各種關心提醒語,跟你說進來之後要一直值班、要有耐心等等,問你願不願意,一直寫願意寫到底就對了。 接著我先作答 A5 的考卷,裡面大多是 WWW 方面的題目,以下是稍微有記到的: 用過哪些網頁後端框架 用過哪些網頁前端框架,Vue, React 等等 比較 ORM 優缺點 如何加速網站 遇到 DDOS 怎辦 說明些需求資料要你畫出 ER Model 並且要做關聯,還問說如何加速、標準化 Docker 使用經驗 Git 考題給你 graph log,問你 rebase -i 之後長怎樣,還有要怎麼還原 viewport 是什麼 em, px, pt vh, vw 差別 兩三題 ES6,有要你將多個 array 做 sort,好像是要寫出程式碼 JavaScript Callback Hell 是什麼 再來就是那很嚇人的大張紙,裡面較多是網管技術了,考題印象如下: maildir 跟 mbox 差異 單位如果想要用 IPv6 該事先注意什麼 Docker 跟 VirtualBox 差別 BSD pkg port 差別 BSD 網路設定檔 trace 原始 Email 秀出某執行檔使用哪些 Lib...

DokuWiki - Wiki 平台初體驗

你知道嗎?Wiki 並不是指維基百科,那是 Wikipedia,Wiki 其實是只說在網路上開放給大家多人協同創作的平台。 最近幫學生會弄了一個 Wiki 站,因此也稍微查了一下主流的 Wiki 平台。目前以 MediaWiki 為最多人使用,其次則是這篇所介紹的 DokuWiki。 那為什麼我選擇這套呢?網路上最近的評價是以 DokuWiki 為最好,也許是因為他的簡潔、權限控管功能、免資料庫而大受好評。對,你沒聽錯就是 不需要資料庫 ,跟 SPHINX 一樣不需要資料庫即可做到寫作、搜尋等功能。我在意的點除了免資料庫在部署上會比較容易,再來是有 Markdown 相關 plugin,Markdown 最近很紅,紅到我在學生會內都相當推薦大家學習(題外話,學生會會議紀錄為 HackMD、Trello 使用 Markdown、WordPress 站也使用 Markdown 編輯)。只要學一種語法就可以通吃,何樂不為呢? 安裝 本篇文章以 Debian/Ubuntu 系統作為示範 方法一:使用 apt sudo apt install dokuwiki 安裝的同時會問你「要不要在在解除安裝時刪掉資料」,這就看大家了,我的話會選「不」,很怕某天手殘不小心刪掉... 再來他會告訴你資料都放在 /var/lib/dokuwiki 當中 然後...我就把他解除安裝了... 想到這路徑那麼奇怪,設定檔位置又不知道放哪邊還要看文件就覺得累,既然這個套件是 PHP 寫的,那我就抓下來放 /var/www 不就好啦~ 方法二:自行下載原始碼 下載連結 點開上面的網站後,選一下自己需要的語言以及外掛插件就可以直接按下載了。 下載後解壓縮放到你要的位置 tar xvf dokuwiki-*.tgz 再來就是設定檔啦~ Nginx 請點我 Apache 請點我 基本上複製貼上就會動了,這邊簡單說明一下設定檔(以 Nginx 為例) 我們可以看到裡面寫著: #Remember to comment the below out when you're installing, and uncomment it when done. location ~ /(data/|conf/|bin/|inc/|install.php) { deny all; } 意思是說請將 locati...

好用跨平台開源電郵客戶端 Mailspring

圖片
筆者之前主要使用 Ubuntu 平台,現在轉用 Mac 了,都一直使用這套軟體,操作非常直覺,比較明顯的缺點應該是沒有中文話,且作者也說在穩定之前暫時不打算開放各個語系的翻譯製作。 大家可以到 Mailspring 的 Github 看看,該專案使用目前最火紅的跨平台工具 React 去編寫,因此在美工上特別出眾,但是效能就沒那麼好,但仍不影響日常使用,搜尋都很快速,唯有觸控板滑動時沒有很順暢。 好用的功能 Snooze 其中文為打盹,能夠讓你晚點再收到這封 email,也就是會暫時從收件夾消失,算是另類的 todo 提醒,可以安排那件事情的執行時間,對於事情較多的人來說非常方便,Gmail 也有類似的功能,中文為「延後」。 圖為官方的範例 Read Receipts 回條功能,不少 email 都有支援了,可以得知對方有沒有已讀,Mailspring 設計在左上角,將所有的回條通知集中管理,點開後還可以查看一些統計資料,如寄出的信件已讀比例有多高。 Signatures 自訂簽名,內建有許多格式可以給你選,不滿意的話甚至可以自己寫 html 去定義格式,可以說非常好用! Unread 未讀功能,在數百封郵件中,你可以馬上知道有哪些郵件是還沒處理的,像筆者之前常有郵件拖了一兩個月才點開,通常是當時沒時間處理,之後信件又一直堆積造成他們被埋沒... 結論 我會接觸到此軟體最主要是因為自架 Mail Server,Gmail 電腦版不支援登入非 Google 的 Email,除非你付錢,所以就開始找各種免費好用的軟體,找過 Thunderbird、Mac 內建 Email,感覺都沒有 Mailspring 好用。 目前我大部分常用的 Email 都使用 Mailspring 去收了,不過它好像不支援語法檢查,像我之前打英文 Email 就常常用 Grammarly 這套文法檢查工具,它是一個瀏覽器插件,可以說非常強大,除了錯別字更正和語法更正,付費版甚至會建議你用哪些片語會讓你更顯得專業。

自架網路相簿:Lychee V.S. Piwigo

暑假的時候跟家人去澳洲玩,拍了不少照片留下許多回憶,人生第一次搭直升機就是在布里斯本海洋世界!實在是太難得了,雖然這些照片 Google 相簿都會自動幫我們備份,但由於免費版畫質不佳,且我有拍攝 1080P 60FPS 影片,上傳到 Google 相簿實在是慘不忍睹,就決心自架一個網路相簿。 兩款相簿都需要建立資料庫,我是使用 MariaDB,沒遇到什麼資料庫的問題。 Piwigo Demo 點我 這款還滿強大的相簿,使用起來沒太大問題,但是筆者發現當圖片量一大或是畫質稍高,載入就會花很多時間。 而且許多功能不夠直覺,例如要全螢幕顯示相片,就還得要點個兩三下。雖然官方有許多主題和插件,不過沒有找到合我胃口的。 Lychee Demo 點我 相對於上一個,這款相簿使用上快很多,也滿直覺的。動畫流暢且快,讓人看起來很舒服外,且還有許多主題可以選。 不過也就簡約很多,沒有花俏的功能、沒有自訂主題、沒有插件,就純粹相簿,不過我覺得這樣就夠了,已經夠我瀏覽了。 再來說說缺點,我嘗試了很多次都無法一次匯入太多張相片,每次都是 10 幾張成功,數百張失敗,因為我有設定照片不重複,所以就拼命的嘗試上傳,終於把照片都上傳完成了。有人說原因是某個轉檔套件的問題。 而每次上傳完成都會自動產生縮圖,如果你的機器 CPU 不夠力可能就需要一點時間。 除錯功能 Diagnostics 會告訴你目前遭遇到什麼錯誤、哪些套件沒裝,當然你也可以去看 log,都滿淺顯易懂的,總之複製丟 Google 就對了 XD。 其中 Imagick 是用來加速圖片處理的套件,我有裝但是把它停掉了,因為有看到其他人說這個套件最近出了點問題,會讓 Lychee 有一些功能不能使用。 小提醒 如果要做一些設定,如 Imagick 啟用/停用,我是直接到資料庫去改布林值,這點稍微麻煩一些。 結論 繼續使用 Lychee,畢竟介面最合我胃口,就祈禱上傳的問題能夠快點解決,這樣就完美了!

在 Ubuntu 上 PPPoE 撥號並啟用 IPv6

圖片
筆者家裡使用中華電信,DNS 使用 Cloudflare 代管,因此以下介紹會以這兩個為主。 免費的固定 IP Address 家裡沒有申請固定制,不過中華很好心的可讓我們 免費申請一組固定 IP 。值得注意的事情是這只是給你看似固定的 IP,如果機房有調整線路等等這組仍會變動的,且沒辦法申請 PTR 反解服務,這對於寄信有點困擾,就算已經弄好 TLS 郵件加密,沒有 PTR 還是容易被對方的主機認定是垃圾信件。 前陣子有打電話去詢問客服,表示這服務只提供固定的 IPv4 服務,不過我測試了一段時間 IPv6 是還沒有變過,如果大家擔心的話可以使用 DDNS 之類的服務,我自己是使用 Cloudflare,他們有提供 API 讓我們可以直接寫腳本去偵測並且變更 DNS Record,讀者也可以 參考我自己寫的 。 小烏龜啟用 IPv6 如果是由主機撥號連線出去,小烏龜 其實不需要 開啟 IPv6 功能 當初傻傻的不知道就開了,造成家裡對部份網站連線品質奏降,常常連不上... 不過沒想到關掉之後我的主機還是能透過 IPv6 上網,所以小烏龜是否啟用其實不影響,下面還是教一下大家如何啟用 中華小烏龜的帳密相信大家網路上都 Google 得到,目前最新為 cht/chtvdsl。 進入到工程模式之後,有個 IPv6 的選項,將它開啟即可。 撰文時不在家裡,之後有空再幫大家補上圖片。 使用 PPPoEConf 撥號 這個套件可以協助我們自動設定 PPPoE 撥號連線,在 Debian/Ubuntu 底下可以輸入下面指令安裝: sudo apt install pppoeconf 接下來的設定我是 參考這篇文章 ,裡面講的很詳細 其中要注意的事情是,如果你要使用固定 IP,在帳號那邊是打 xxxx@ip.hinet.net 啟用 Ubuntu IPv6 詳細的設定可以參考 這篇 這邊稍微幫大家整理一下,總共設定兩個檔案 vim /etc/ppp/options # 在最後一行加上 +ipv6 ipv6cp-use-ipaddr -------- vim /etc/sysctl.conf # Uncomment the next line to enable packet forwarding for IPv6 # Enabling this option disables...

Mac 上右鍵以 Sublime、Visual Studio Code 開啟

圖片
在 Ubuntu、Windows 上安裝一些編輯器時,總會問你要不要新增到右鍵選單(Context Menu),在 Mac 中似乎就少有這樣的提示,這對於程式設計師可以說非常好用,在這邊教大家如何新增自己喜歡的編輯器到右鍵選單。 新增 Automator 服務 開啟 Automator 後新增一個服務(Service) 依照圖片順序設定好,這張圖片是 Visual Studio Code 的設定,第 7 點部分下面可以讓大家複製貼上 用 Visual Studio Code 開啟 "/Applications/Visual Studio Code.app/Contents/MacOS/Electron" $@ 用 Sublime 開啟 "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" $@ 最後儲存該服務(Service)即可 在 Finder 中右鍵開啟 對資料夾按下右鍵 > 服務(Service)即可找到剛才新增的服務 最後,這些腳本會存在 ~/Library/Services 底下,如果有需要可以去那邊開啟編輯

Win10 底下使用 Linux Terminal + zsh,VS code 也能吃

圖片
上上篇文章中提到我從 Ubuntu 跳到 Win10 最不習慣的就是終端機不好用且沒有我熟悉的指令。這幾天終於放暑假了發現到有幾個超好用的工具讓我對於 Win10 比較釋懷了。 cmder 這是一款 Windows 底下的 console 模擬器整合版,實際上是透過 ConEmu 這個模擬器來將 UNIX 指令轉換成 Windows 指令。還有使用 Clink 將一些 GNU 函式庫整進來等等。詳細介紹網路上很多我就不一一贅述。 配色方面我是採用 xterm,而該畫面中 tmux配置參考這邊 Windows Subsystem for Linux (WSL) 雖說 cmder 整合了不少東西,但還是有許多命令、工具是它沒有的,當然也可以透過安裝 cygwin 來實現,不過這也都只有非常基本的工具而已,幸好 Windows 出了 WSL,將 Linux 環境整合到 Windows 當中。 開啟方式網路上也很多,但我 相當推薦這篇 ,裏頭順便講了如何在 VS code 裡面啟用 ZSH,對於測試程式是個相當實用的功能。也因為在 WSL 預設的終端機下會有中文亂碼問題,要解決也是可以,將預設 UTF-8 編碼改掉即可,不過直接使用 cmder 會更加方便。 openssh-server 出錯 當一切就緒後 port 也開了,會發現無法從另一台電腦連過來,使用 ssh -vvv 查看發現其實有連上,可是交換一些資訊後就突然被中斷連線, 這篇文章 有提到因為 WSL 預裝的 openssh-server 並不完整,因此建議刪除重裝。 cmder 設定 zsh 上面的連結設定頁面似乎跟現在的不太一樣,可以按照 這篇 去做設定,裡面也有安裝教學,可以交互參考。 VS Code 設定 zsh 按住 Ctrl + Shift + P 輸入 Select Default Shell 即可找到 WSL Bash 這邊我是使用 Steeef 主題,在 ~/.zshrc` 裡面設定 `ZSH_THEME="steeef" 即可 home 目錄設定 WSL 的 home 目錄就是它自己的 home 目錄,Windows 的 C 槽是掛載在 /mnt/c/ 中,而我有弄個 symlink 指到自己的 Windows 的使用者目錄方便我存取。 $ link -s /mn...

Arduino 自走車 & 機械手臂

微算機實驗課程期末專題有些人接線做 8051 喇叭,但因為器材不太夠,就有幾個人可以玩 Arduino 自走車,剛好 MOLi 實驗室有舉辦 機械手臂相關活動 也是使用 Arduino 去弄,就順便將這兩樣東西兜起來當作期末報告。 使用器材 Arduino UNO Arduino Sensor Shield V5.0 感測器擴展板 自走車相關零組件 PS2 副廠搖桿 組裝教學 自走車 基本上可以參考 這篇 ,其中我拿到的零件比較不同的是馬達驅動模組,但一樣接上 IN1~IN4 當作訊號即可,因為另一邊有通電了。聽同學說有個跳線的地方,蓋子拔掉就不會通電了,這樣就得自己接電接地。對於擴充版不熟悉的話可以參考 這篇 。 搖桿 網路上很多接線圖,大部分都一樣, 這邊 就貼個我看的順眼的。 遇到的坑 馬達 一開始測試馬達,code 寫進去要他怎麼轉就怎麼轉,可是之後重接重寫就發現不會動了。先檢查程式,發現是忘了在最前面寫上 pinMode 指定 OUTPUT。後來還是不會動,從馬達開始接電測試,不管正轉逆轉都沒問題,再來是馬達驅動模組,螺絲重新鎖、接電測試也都沒問題,那該不會是我的腦袋有問題吧!?最後終於發現是杜邦線太鬆、或是模組的針腳太細,總之就是接觸不良,因為這批線是當天助教拿新的給我,沒想到就有這個問題。後來詢問老師,說可能是針腳太短,且杜邦線價格差異很大,品質可能也有差。 PS2 搖桿 沒想到這搖桿也能拿來接 Arduino,上網找來找去好像就 PS2X 這個 Library 最好用,基本上就是範例 code 貼上去就要會動,可是我怎麼測試就是不會動,弄了約 3.4 小時聽到同學早就成功了,跟他借線測試後才知道可能有些訊號線斷掉了,之前還有請老師幫忙找問題,可惜沒找到,老師表示原來杜邦線品質這麼差。之後弄弄手臂再回來弄搖桿發現又不會動了。。。換線過後又正常,Arduino 這東西怎麼那麼難搞阿,光是接線測試就花了 8 小時,雖然很倒楣線材總是出包,但也只能怪自己沒玩過多少硬體,對於 debug 不熟悉。 IDE 問題 在 Mac 上如果輸入法是在內建的注音模式,複製貼上或是快捷鍵註解等操錯可能會有問題,建議切換到英文模式操作。 如果 Arduino 同時接電又接 USB,傳輸時可能會出...

半年後從 Ubuntu 再轉回 Windows

去年 12 月因為一場講座,講師 Tim Hsu 說想要學好 Linux 就轉到 Linux 系統去每天使用,剛好我也想再次試看看 Ubuntu,距離上次以 Ubuntu 當作主系統大概是兩三年前了吧,因為買了 Macbook air 之後就越來越習慣 Unix-like 環境。持續約半年,我又跳回到 Windows 了,這是為甚麼呢? Ubuntu 優點 Linux 環境對於開發者友善 (指令、套件) 不太會中毒 (測試軟體或是網站時不太需要擔心) Docker 原生支援 很多工具都很強大,介面當然另當別論 缺點 輸入法 (嘗試過新酷音、Rime,選字都沒有到很滿意) 文書處理軟體都會跑版 (就算是開源文件在 LibreOffice 顯示有時也會有問題) 支援遊戲少 支援軟體少 (Line,Jandi) 套件有時衝突 轉捩點 其實上述缺點都還好,習慣就好,最主要的轉捩點應該就是手癢搶在第一波 Bionic 釋出後馬上升級,Ubuntu 一直以來對於跨版本升級都很容易出問題。升級後首先當然是開不了機,修了幾小時後發現是顯卡問題,將套件衝突處理完後重裝驅動即可正常開機。 16.04 升級到 18.04 後是一連串的問題,程式執行到一半容易異常終止,圖形化介面經常無回應後自動重啟,開機常常要開好幾分鐘,音訊時常有雜音或是沒聲音,得重啟系統,重啟 ALSA 沒用。。。基於這些原因就又跳回 Windows 了,黑蘋果畢竟驅動與升級問題也不少也就不考慮。 Windows 當初 2015 年首天升級 Win10 時我就更新了,還記得那天是 7/29,升級完一切順利安好,就這樣過去了一年多,有時桌面會死當,也遇過幾次內建的解壓縮程式解壓不完全,後來下載 7zip 解決,Defender 好像也有點問題,記不太得了,總之後來又灌回 win7,相信大家應該都明白 win10 剛出來沒有到太穩定,強制更新更是很惱人。在我使用 Ubuntu 這段時間偶爾也會開 Win7 打打遊戲,不曉得為甚麼 Ubuntu 顯卡驅動就是沒有黑蘋果的 WebDrive 驅動好,打 CSGO 黑蘋果底下比 Ubuntu 順暢呢! 優點 軟體支援多安裝方便 有世界最強 IDE 打遊戲方便 缺點 沒有 Unix Command 沒有 Unix Command 沒有 Unix Command 字體預設新細明體 B...

SQL COUNT 裡面加入 WHERE 過濾

最近在開發 Laravel 專案需要做些統計,eloquent 不太熟悉且效率很差,因此講求效率的查詢仍使用 Raw SQL 前情提要 需要過濾出所有使用者的答對數量、答題總數 期待輸出: UserID CORRECT TOTAL 1 27 45 2 18 61 嘗試過的方式 (SELECT BH.UserID as UID, COUNT(AH.choice = Q.ans) AS correct FROM ans_histories AH, battle_histories BH, questions Q WHERE BH.BHID = AH.battleID AND AH.questionID = Q.QID AND AH.choice = Q.ans GROUP BY BH.UserID) UNION (SELECT BH.UserID, COUNT(*) FROM ans_histories AH, battle_histories BH, questions Q WHERE BH.BHID = AH.battleID AND AH.questionID = Q.QID AND AH.choice IS NOT NULL GROUP BY BH.UserID) 行不通原因:下面那個會被當作獨立的,不會以相同 UserID 跟上面的敘述結合 UserID CORRECT 1 27 2 18 1 45 2 61 解法 SELECT UserID, COUNT(CASE AH.choice WHEN Q.ans THEN 1 ELSE NULL END) AS correct, COUNT(*) FROM ans_histories AH, battle_histories BH, questions Q WHERE BH.BHID = AH.battleID AND AH.questionID = Q.QID AND AH.choice IS NOT NULL GROUP BY BH.UserID; 其中 COUNT(CASE AH.choice WHEN Q.ans THEN 1 ELSE NULL END) 可以替換成 SUM(CASE AH.choice WHEN Q....

[Weekly Report] 2018.04.05 - 04.18

[Weekly Report] 2018.04.05 - 04.18 My dormitory doesn't have static public IP address so I tend to use Dynamic DNS (DDNS) method. Even though my D-Link Access Point (AP) provides free DDNS service, but I want to use my own domain name. First I change my domain name server from freenom to Cloudflare , then install ddclient for automatically update my IP address to Cloudflare. But no matter how I changed the arguments of the configuration file for hours, it still didn't work. Then I tended to use Cloudflare API and read the official document, it succeeded in ten minutes. Here is my sample DNS-update code, you can also use requests library instead of curl : '''This program will get record from Cloudflare and compare my current IP address''' import json from os import popen, system getCMD = 'curl -X GET "https://api.cloudflare.com/client/v4/zones/{ZONE-ID}/dns_records?type=A&name={YOUR-FULL-DOMAIN-NAME}" \ -H "X-Auth-Email: {YOUR-...