最近初次接觸 ORM——Object-relational mapping——這個強大的工具,但是為其中的關聯而苦惱不已。在仔細研究後終於了解其差異,本篇文章透過一個圖書館專案的實例,使用 Golang + GORM 來實做,並輔以 SQL 做說明,讓已經學會 SQL 而想要了解 ORM 的人真的「懂」如何設計 Relation。
什麼時候會用到 Relation? ORM 中的 Relation 就是相當於 SQL 中的各種 Join,用來將不同表格中的資料串起。由於 ORM 是用物件,所以如果未來有關聯到其他表格的需求,必須在物件設計時就包含進來。
來定義需求吧!我們今天假設情境是要定義一個圖書館的資料庫,那我們會有編目資料 Book(書的資料)、館藏資料 Item(書的實體),作者資料 Author,出版社資料 Publisher。書名、ISBN 等等跟關聯沒有關係的就不放入。
我們先不要討論 gorm 要怎麼寫,先把要取得的資料擺出來。
type Book struct { Items []Item Authors []Author Publisher Publisher } type Item struct { Book Book } type Author struct { Works []Book } type Publisher struct { Publication []Book } 我們要讓所有的 structure 都能夠參考到依賴自己的對象:作者必須參考到作品集、出版社要能參考出版品、分類要能找出其中的所有書籍。
接下來我們一個一個釐清物件之間的關聯關係,來設計 ORM 吧!...
Caps Lock 是一個我們很少用的鍵,偏偏它擺在鍵盤的黃金位置,實在是大大的浪費,在 Mac 上可以使用 Caps Lock 來作為中英切換鍵,我認為是很好的設計,以下教學將介紹如何用指令列來設定 Fcitx 使用 Caps Lock 來切換輸入法。
事實上 Fcitx 可以使用任何鍵作為輸入法切換鍵,然而因為 Caps Lock 有著切換大小寫的功能,如果不將此功能關閉,輸入法會發生異常——中文切到英文後變成大寫,因此我們要利用 xmodmap 工具來將 Caps_Lock 鍵指向到不會使用到的 Multi_key,再將 Fcitx 切換鍵對應到 Multi_key。
我們先查詢一下 Caps_Lock 對應到的 keycode 是多少。
$ xmodmap -pke | grep Caps_Lock keycode 66 = Caps_Lock NoSymbol Caps_Lock 可以看到鍵盤上的 Caps_Lock 對應到的是 66 這個 keycode,那我們接下來就是要將 66 改成對應到 Multi_key。
$ xmodmap -pke > ~/.Xmodmap #將設定存為檔案 $ vim ~/.Xmodmap # 將 keycode 66 處改為 keycode 66 = Multi_key NoSymbol Multi_key # 在最底下加入 clear lock $ xmodmap ~/....
YaCy是一個開源的點對點搜尋引擎 本文將講解如何在 Ubuntu Server 上安裝 YaCy 搜尋引擎,並用Nginx做反向代理,將網址改成像是 yacy.example.com 的形式。
YaCy 架好的範例可以來我架設的伺服器使用看看https://yacy.wancatserver.tk
環境說明 本文假設有一台無圖形界面的伺服器以及有圖形界面的Desktop。Desktop必須要能夠使用瀏覽器。 假設伺服器網域: example.com,請將本文所有example.com改成你的網域名稱 假設使用者名稱:user ,請換成自己的使用者名稱
如果沒有網域名稱仍然可以安裝 YaCy ,只是需要用 ip:8090 的形式來連上它。 如果沒有真實 ip 就只能在內網使用
伺服器安裝 Java 8 YaCy可以使用 OpenJDK,也可以使用Oracle官方的JRE。 OpenJDK使用apt安裝
$ sudo apt install openjdk-8-jre 官方的JRE比較麻煩,可參考此文章
安裝 YaCy 至官網下載程式。
{% asset_img slug download.png %}
將程式上傳至伺服器,請將/path/to/yacy.tar.gz替換成你下載的路徑
$ scp /path/to/yacy.tar.gz [email protected]:/home/user/ 接下來以ssh登入伺服器
$ ssh [email protected] 解壓縮,將yacy.tar.gz替換成你下載的路徑
$ tar -zxvf yacy.tar.gz 解壓縮完可以看到家目錄下多了一個目錄yacy,裡面有 startYACY.sh, stopYACY.sh, killYACY.sh, reconfigureYACY.sh, updateYACY.sh等執行檔,以及許多資料夾。
我們先去打開防火牆,YaCy使用的是 8090 port (HTTP),以及8443 (HTTPS)。...