:::

NetBeans用SSH複製git儲存庫:以GitLab為例 / Clone git Repository via SSH in NetBeans: a GitLab Example

NetBeans用SSH複製git儲存庫:以GitLab為例 / Clone git Repository via SSH in NetBeans: a GitLab Example

image

之前我寫過在NetBeans裡面用HTTP來複製(clone) git保存庫的作法,這篇則是要介紹使用SSH來複製保存庫的另一種作法。雖然SSH連線需要比較多設定,但較適合正式開發時使用。而這次要連接的對象也不是公開的GitHub,而是私人使用的git保存庫GitLab,但介面跟作法都跟GitHub大同小異就是了。


關於Git的基本知識 / About Git technology

我在之前幾篇文章中都有介紹過git,首先這三篇是使用TortoiseGit作為git工具的入門介紹:

TortoiseGit是很強大的git工具,比NetBeans內建的git還要好用,像是要取代分支(branch)檔案時特別方便:

但是如果要開發的話,還是使用NetBeans這種IDE會比較適合。所以我就寫了以NetBeans使用git的教學:

然而這篇是用HTTP存取git儲存庫,這種作法雖然簡單,但是使用HTTP的缺點是不能上傳大檔案。git使用HTTP傳輸檔案時,http.postBuffer預設值只能夠上傳1MB,而伺服器端通常也不允許過大的檔案,GitHub最多一次上傳100MB,而GitLab使用的Nigix則是預設只能上傳20MB。上傳過大檔案時會發生411錯誤,必須要同時修改git客戶端跟伺服器端的設定才能解決。雖然修改過後可以用TortoiseGit來連線,但在NetBeans上卻仍然不能上傳大檔案。

最後我只好回頭改用SSH的方式連接,一併把SSH連接時使用不同連接埠的方法也找了出來。請照著以下步驟一起來操作吧。


環境說明 / Environment

首先必須說明git的客戶端與伺服器端的基本資訊。

Git客戶端:NetBeans / Git client: NetBeans

我目前使用的是NetBeans 8.0版本。但是Git功能並沒有多大改變,前幾版使用時應該差不多。

我現在大部分以專案進行的開發都是使用NetBeans,不論是寫網頁、JavaScript、PHP、Java都能夠支援。例如最近一篇編譯WISE就是用NetBeans來進行。相對的,我反而比較不推薦使用大學很常教的Eclipse,它在開發網頁應用的支援較差。

Git伺服器端:GitLab / Git server: GitLab

如果要架設GitLab的話,有兩種方式可以選擇:

如果不想架設的話,也可以直接使用GitLab的雲端空間:

  • GitLab.com:雲端私人儲存庫,剛好跟GitHub強調開放原始碼的運作方式打對臺

本篇我採用OpenVZ架設Turnkey Linux GitLab,設定IP為192.168.11.102,SSH連接埠為22,Domain Name為 git2.pudding.dlll.nccu.edu.tw。這些都是區域網路的設定,僅供本篇測試用,其他人是連不到這個網站的喔。


步驟說明 / Steps description

如果要用SSH來連接Git,我們必須要先用SSH金鑰製作工具產生公鑰私鑰,然後將公鑰上傳到Git伺服器端(也就是本篇的GitLab),而Git客戶端(也就是本篇的NetBeans)要存取伺服器端時,則需要搭配私鑰來連接。

Step 1. 產生SSH的公鑰與私鑰 / Create SSH public key and private key

image

我在「GitHub入門 Part.2 工具安裝與環境配置 」這一篇中有介紹如何用PuTTYgen (PuTTY Key Generator)產生公私鑰。

不過這裡我們簡單一點,我隨便產生一個公鑰與私鑰直接給大家下載:

這個公鑰與私鑰僅供測試使用,正式開發環境請不要用它,不然其他人也可以用這個私鑰去連接你的私人git儲存庫喔。

Step 2. 加入SSH公鑰到GitLab / Add SSH public key to GitLab

image

接著登入GitLab,進入帳號中的SSH Keys。一般來說SSH Keys的網址是:

請按下右上角的「Add new」新增公鑰。

image

新增公鑰並非是上傳檔案,而是要用複製貼上的方式來將公鑰貼到Key的欄位。至於Title欄位可以填寫一個容易記得的名字即可,例如「puli-public-key」。

image

請用文字編輯器(像是Notepad++)來開啟公鑰檔案,複製裡面全部的內容,貼到網頁中Key的欄位內。

或是複製以下文字框裡面的內容,裡面的文字跟我上面分享的公鑰是一樣的:

 

2015-08-07_011436

完成之後應該會像是這樣子,然後按下「Save」儲存。

image

新增完成。

image

讓我們回到要複製的git儲存庫首頁。在這裡可以找到連接git儲存庫的連接網址,以SSH來說,通常會是「git@git2.pudding.dlll.nccu.edu.tw:pudding/test.git」。請記下這個連接網址,下一步設定git客戶端的時候,我們就會用這個網址來連接git儲存庫。

Step 3. 使用NetBeans連接Git儲存庫 / Connect Git Repository in NetBeans

image

接著我們來設定Git客戶端:NetBeans。開啟NetBeans之後,從Team > Git > Clone… 找到複製的功能。

image

接下來是很重要的關鍵設定。

首先,Repository URL本來應該設定剛剛看到的連接網址「git@git2.pudding.dlll.nccu.edu.tw:pudding/test.git」,但如果伺服器必須指定SSH連接埠的話,那就要改用不同的形式:

  • 原本的連接網址格式:[user@]host.xz:path/to/repo.git/
    例如:git@git2.pudding.dlll.nccu.edu.tw:pudding/test.git
  • SSH的連接網址格式: ssh://host.xz[:port]/path/to/repo.git/
    例如:ssh://git2.pudding.dlll.nccu.edu.tw:22/pudding/test.git

接著Username請務必輸入git,請不要用GitLab的帳號。

然後Pirvate Key File則選擇剛剛產生的SSH私鑰 puli-private-key.ppk。

下面還可以在Clone into: 設定檔案的位置。

設定完成之後就按下「Next >」進入下一步。

image

這時候應該會跳出一個Warning,要加入GitLab伺服器的連線授權。請按下「Yes」即可。

image

看到這個畫面表示正常連接,按「Next >」進入下一步。

image

這樣就完成了,按下「Finish」確定。

image

複製完成之後,接下來再建立專案,請按下「Create Project」。

後續的步驟就跟「Git合作開發從NetBeans開始!NetBeans複製git專案教學」的「Part 2. 新增NetBeans專案」一樣了,請參考之前的文章繼續操作吧。

只要第一次設定後,Git連接方式就會保存在NetBeans裡面,以後每次存取Git儲存庫就不用重複輸入帳號密碼了。


結論:需要學習使用IDE跟版本控制 / Conclusion: Learn to use IDE and version control

最近實驗室又加入了新進成員,而許多人也需要開發系統作為畢業論文。由於我們系所並不是強調軟體工程的科系,所以進來的學弟妹雖然能夠看得懂程式碼,但是在開發上仍顯得生澀。

選擇好用的IDE與版本控制工具能夠降低開發過程中繁雜的操作,程式設計師主要是在邏輯思維上下工夫,而不是像打字員一樣複製大量的程式碼,還難以維護。而IDE與版本控制也是未來踏入業界開發團隊中,與他人合作開發系統時必須要具備的技能。作為未來進入職場的投資,請務必多多熟悉IDE與版本控制的操作吧。

(more...)

網頁式科學探究學習環境WISE的編譯與安裝 / WISE Development: Compilation and Installation

布丁布丁吃布丁

網頁式科學探究學習環境WISE的編譯與安裝 / WISE Development: Compilation and Installation

image

我們實驗室接手網頁式科學探究學習環境WISE並開發成合作網頁式科學探究學習環境CWISE已經有幾年的經驗,而這一篇則是要回顧原本的WISE是如何編譯與安裝,以便後續進行更深入的功能開發。


WISE與CWISE的差異 / The difference of WISE and CWISE

WISE原本是美國柏克萊大學Marica Linn教授的計劃成果,主要是提供國小到高中的學生透過網路瀏覽器進行科學探究的學習。WISE建置了大量的資料蒐集與分析工具,以支援教學研究的進行。

CWISE則是由我國的國立臺灣師範大學科學教育研究所、國立高雄師範大學科學教育暨環境教育研究所與我所在的實驗室——國立政治大學圖書資訊與檔案學研究所三個研究團隊,在科技部計畫的贊助之下,將 WISE網頁中文化,架設了CWISE網頁,並依各團隊的專長——生物、理化及地球科學三個科目,每個科目各發展完成兩個課程,共計六個課程模組,並已經在CWISE首頁上開放預覽。(介紹來自CWISE使用說明)

WISE與CWISE的架構都是採用JSP Servlet,背後是以Java Spring Framework這個Java全站開發知名的框架架設而成。因此在編譯與部署時,都是採用Java的方式來進行即可。


環境 / Environment

開發與運行所需要的環境並不一樣,兩者也可以在不同的平臺上進行。只是本篇我們先以WISE為例子來介紹如何在Windows作業系統上編譯與安裝。

開發環境 / Development Environment

開發環境所需要的功能是取得原始碼與編譯。WISE的原始碼已經在GitHub發佈,可以直接下載最新版本,或是在releases中找尋對應的版本。例如CWISE使用的4.6版本各別保存在WISE-VLE—Deprecated--WISE-Portal—Deprecated--裡面。在編譯上,像是採用了Java Spring的大型系統通常會搭配Apache Maven這套自動化編譯工具,WISE也是要用Maven來編譯。

但是我們也不需要個別下載或用指令來操作,實際上有更簡單的方法:使用整合開發環境IDE。而這邊我推薦使用的是NetBeans。

image

NetBeans已經內建了Git跟Maven的功能,我們可以直接用NetBeans從GitHub下載原始碼、建立專案、並且編譯,一氣呵成。操作的細節將會在下面介紹。

運作環境 / Runtime Environment

WISE是JSP Servlet應用系統,一般常搭配Apache Tomcat 網頁伺服器來運作(以下簡稱Tomcat),此外還需要MySQL資料庫搭配使用。在Windows環境中,我們可以直接安裝XAMPP即可。它集合了Tomcat與MySQL,並且提供了容易操作的個性化操作介面GUI,是適合開發與入門的伺服器安裝包。

blog image172

2015-08-05_192009

安裝XAMPP之後,要先從控制面板開啟Tomcat跟MySQL服務,另外為了管理MySQL,我們還需要開啟Apache。開啟按鈕如上圖紅框所示。

2015-08-05_192851

比較需要說明的是XAMPP的Windows安裝版本的路徑,這跟一般的Tomcat運作環境不一樣。如果XAMPP安裝在D:\底下的話,那Tomcat的網頁則是放在「D:\xampp-5.6.8\tomcat\webapps」之中。以下我們將該路徑簡稱為 [webapps]。

image

MySQL的控制則可以使用phpMyAdmin。預先安裝的話,phpMyAdmin的網址如下,僅能用localhost登入,但不用輸入密碼。


如何編譯WISE / How to compile WISE

2015-08-05_194246

WISE的原始碼發佈在GitHub上,我們雖然也可以用Download ZIP的連結下載所有程式碼,但我比較推薦使用Git的Clone功能下載WISE的原始碼。這樣做法不僅可以取得較完整的程式碼,更可以直接在NetBeans中建立專案(Project),以便後續的編譯。

下載原始碼 / Download Source Code

image

NetBeans的Git功能在Team功能表裡面,找到Remote裡面的Clone。這個功能要等NetBeans全部開啟之後才會顯示。

2015-08-05_200346

在Clone對話框裡面,將Git Clone的網址輸入Remote Repository的「Repository URL: 」之中,檔案保存位置不要選在XAMPP資料夾中,建議放在根目錄,例如「D:\」。然後按下「Next >」。

image

接著NetBeans會問我們要下載哪一個分支(Branch)。這個儲存庫並非CWISE採用的4.6版本,在此我們先以現在的WISE最新的主要版本 (master) 作為例子即可。

image

然後按下「Finish」確認,接下來就要開始Clone囉。

image

接著Git會從儲存庫Clone下程式碼,如上圖紅框標示。這個步驟會花蠻多時間的。這是因為GitHub並不適合傳送大量檔案,而且我們這邊的學術網路跟GitHub關係一直不是很好的樣子,每次大量檔案傳送都很慢。

image

好不容易Clone完成之後,NetBeans會問你是否要建立成Project。這時候按yes即可。

image

這樣子WISE的所有程式碼就已經下載到你的電腦上,建立了名為「Web-based Inquiry Science Environment」的專案,並且可以編輯了。

image

這時候就能用NetBeans的全文搜尋功能找尋要修改的功能,進行更深入的開發。

但是這些原始碼需要經過編譯才能夠放到運作環境。因此接下來我們要來看一下怎麼編譯WISE原始碼。

使用maven編譯原始碼 / Use maven to compile Source Code

image

NetBeans也內建了編譯Java專案的Apache Maven工具,不過必須要先將原始碼建置成專案。如果你是照上述的步驟操作,你應該已經有一個WISE的專案。我們可以從專案上按右鍵,開啟「Build」功能。

image

第一次編譯時,Maven會因為相依性設定,下載很多WISE需要的函式庫。因此第一次編譯比較花時間,之後編譯就不用重新下載,編譯時間會短很多。

image

編譯完成之後會看到以下訊息:

------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
這樣就表示編譯完成。相反的,如果看到ERROR的話就是編譯錯誤,請看maven的提示來修正程式的錯誤吧。

image

最後編譯完成的結果會放在專案路徑中的「target」資料夾中,「wise.war」就是最後編譯的結果。


安裝WISE / Install WISE

有了「wise.war」編譯檔案,我們就可以把他部署到運作環境中。然後接下來還要配置資料庫、修改WISE的設定檔,這樣就可以正常運作了。

配置wise.war跟jnlp.war / Deploy wise.war and jnlp.war

image

首先,我們先把「wise.war」跟「jnlp.war」放到XAMPP底下在「webapps」資料夾。jnlp.war是Java Web Start,下載網址如下:

 

image

然後關閉Tomcat服務,再重新開啟Tomcat。這個時候Tomcat會將wise.war跟jnlp.war解壓縮並配置到合適的位置。

配置資料庫 / Setup Database

接著我們要進入phpMyAdmin來設定資料庫。網址是:

要進行的動作包括:

  • 建立一個資料庫名為 wise_database 
  • 匯入資料庫的初始SQL:wise_db_init.sql。這個檔案位置在
    [webapps]/wise/WEB-INF/classes/wise_db_init.sql

image

因為phpMyAdmin的操作比較廣為人知,因此這邊我就不描述細節了。

建立資料夾 / Create Directories

image

接下來要在[webapps]底下建立「curriculum」跟「studentuploads」兩個空資料夾。

建立設定檔 / Create configuration

最後我們要建立設定檔案,裡面將會有資料庫的連線設定。

image

我們先到以下路徑:

[webapps]/wise/WEB-INF/classes

image

請複製這個資料夾裡面的「wise_sample.properties」到同一資料夾中,並改名為「wise.properties」。

image

然後修改裡面的設定值,首先先修改檔案路徑,主要是修改紅字的部分:

wiseBaseDir=[webapps]\wise

curriculum_base_dir=[webapps]\curriculum

studentuploads_base_dir=[webapps]\studentuploads

image

接著修改下面的資料庫設定,採用XAMPP預設的帳號root跟空白密碼即可:

hibernate.connection.username=root
hibernate.connection.password=

修改設定檔之後需要重新啟動Tomcat,請使用XAMPP的控制面板來關閉、啟動Tomcat吧。

啟動測試 / Startup Test

image

經過上述步驟之後,WISE應該就能夠正常運作了。請打開以下網址,看看會不會出現上圖的畫面吧:

這樣就完成囉。


結語:下一步是修改CWISE / Conclusion: We will compile CWISE at next time

這一篇介紹的是WISE現在版本的編譯與部署,但是這跟CWISE使用的WISE 4.6版並不一樣。最大的差異就是CWISE需要同時修改兩個專案,個別是WISE-VLE—Deprecated--WISE-Portal—Deprecated--,然後我們又改了許多JSP檔案。當然,編譯跟部署的作法其實還是大同小異。希望接下來要修改的功能能夠順利進行了。

附帶一提,這篇是在手機、平板、筆電等多個裝置中不斷切換撰寫草稿,最後再回到桌機上修飾、加圖後完成。雖然才兩千五百多字,但其實寫了好幾天了啊。沒辦法,現在真的很難有專心待在電腦前面的時間啊……

(more...)

解決Acer Aspire S7筆電自動關機問題:鎖緊螺絲 / How to prevent Acer Aspire S7 notebook from accidentally shutdown: Tighten the Screw

布丁布丁吃布丁

解決Acer Aspire S7筆電自動關機問題:鎖緊螺絲 / How to prevent Acer Aspire S7 notebook from accidentally shutdown: Tighten the Screw

image

Acer Aspire S7筆電在不插電的時候常常會自動關機,解決這個問題的方法是把電池中間的斷電螺絲鎖緊,但記得要準備T6六角星型螺絲起子。


推測突然斷電的原因 / Why S7 accidentally shutdown?

我使用Acer Aspire S7(以下簡稱S7)也有快三年了,大概是最近一年的時候一直有個問題困擾著我:在不插電的時候,我這台S7總是很常自動關機。

我有注意到自動關機的時間點總是剛好是在筆電風扇啟動的時候,這究竟是為什麼呢?在網路上查了一下,聽說維修中心的人說鎖好筆電電池中間那顆斷電螺絲就好,真的假的?

我半信半疑地找了六角星型鎖來鎖鎖看筆電螺絲,沒想到還真的有點鬆。鎖好之後姑且嘗試一下,的確不會自動關機。又這樣子過了一個月,還是正常運作。這下子我敢確定的確螺絲鬆脫是導致S7自動關機的主要原因了。

如何解決? / How to fix?

IMAG0685

雖然說只是鎖緊螺絲,但是S7使用的是特殊的T6六角星型螺絲,而不是一般常見的一字鎖或十字鎖,這可能得想辦法去借一下。
量一下螺絲的大小,螺絲直徑大約是0.4cm,六角星形孔大概0.1cm,太大或太小都無法鎖緊喔。

IMAG0431

然後要鎖緊的螺絲就在上圖的位置,鎖緊之後就完工了。祝大家跟Acer Aspire S7相處順利。

(more...)

道南橋旁的港味食堂 / Gang-wei Restaurant (nearby Daonan Bridge)

布丁布丁吃布丁

道南橋旁的港味食堂 / Gang-wei Restaurant (nearby Daonan Bridge)

門口的港味食堂 IMAG1165 - 2

  • 店名:港味食堂
  • 位置:道南橋下
    2015-07-25_230748
  • 菜單:一主菜三副菜、附養樂多
  • 價位:便當75NTD
  • 座位:大概25個左右
  • 服務:要自行取餐與回收餐具

港味食堂簡介 / Introduction

由於港味食堂已經於2015年7月25日結束營業。為了感謝港味食堂阿姨帶給我們餐餐充實又好吃的便當,我想在此回顧一下我跟港味食堂的回憶。

小巷子中開幕 / New open in a lane

 IMAG0091

港味食堂大概是我在研究所一年級左右開幕的,大概是2006年吧(常常搞不清楚自己的時間軸),那時候還在政大門前的小巷子裡面。當時便當還是一份60元,還有賣35元的港式點心。可是店內空間很小,用餐時間總是擠到門外去,十分熱門。

梅子五花肉 薑汁豬肉飯IMAG1098

港味食堂的菜色一向是一主菜加三配菜,再加一罐養樂多,以及超級多但好吃的飯。主菜好吃不說,我也很喜歡各種配菜,像是肉丸系列、牛蒡、士林香腸、茄子、以及各種好吃的青菜,特別是地瓜葉。餐點的內容可以參考我以前寫過的食記「政大小巷內的港味食堂」,想著想著肚子又餓了。

關門的港味食堂 2012-07-29 18.26.06

後來我畢業離開政大去當兵,一段時間沒回來光顧。有次放假時我刻意搭車北上回政大走走,想說吃個港味食堂回憶一下,不過赫然發現小巷子裡面的港味食堂已經關門。找了一下照片,發現那是2012年的事情。

搬到道南橋旁 / Reopen nearby Daonan Bridge

小曼谷旁 IMAG1164

當時我還蠻難過的,有種滄海桑田的感覺。不過後來回來政大繼續唸書的時候,才發現原來港味食堂改到道南橋下,跟小曼谷泰式餐廳當鄰居了。

菜單

換了位置的港味食堂價位變高了,可是店內座位變多,也有了電視可以看。雖然位置跟原本政大熱門的小巷子來說冷門許多,但是中午用餐時間還是常常遇到排隊或是一位難求的情況。

IMAG1180

由於店內的裝潢變成深長型的擺設,所以進來的客人就只能看左側的「今日菜單」小白板來點菜。

Copy of 今日配菜 IMAG1104

今日配菜的內容比起以前在小巷子裡面的時候又多了其他類型。根據我的印象,青菜的種類變多了,然後還多了「糖醋里肌」跟「蒲燒鯛魚」等特別的類型。不過後來就沒看過秋葵了,有點可惜。

梅子豬肉飯 IMAG1245

右上角就是糖醋里肌,不僅非常下飯,甚至可以直接當做主菜食用。

結束營業 / Close down

門口的港味食堂 IMAG1249

可惜的是,我在一週前得知港味食堂已經決定於2015年7月25日結束營業。在這最後一週中,我猜港味食堂的客人數量應該是爆增。有一次中午來吃港味食堂時,發現門前有一群學生抱著「可能是最後一次吃港味食堂了」而前來,可是門內客人卻已經塞到水洩不通的程度。即使位置搬到離校門這麼遠的地方,港味食堂也依然很有人氣。

一堆人的點餐 IMAG1247

最後一天吃完港味食堂打算離開時,突然進來一群學生說要來點餐。即使是週六假日還如此多人,大家真的很喜歡港味食堂。我在感受人情溫暖之餘,偷偷拍了一張照片,不過人臉的部分都馬賽克處理了。


餐點 / Meals

空餐盤 11745319_10204684047248808_5801598170368445520_n

在這港味食堂最後營業的一週間,我決定每天都去用餐,以點餐歡送阿姨,順便記錄一下每一餐點的內容。不過每次一看到美味的餐點,我就像是餓昏了一樣,常常忘了要拍照。回過神來的時候,已經只剩下空的餐盤了。

儘管如此,在這幾次跟朋友一同前去用餐時,還是記錄了大家點的餐點,讓我們來回味一下吧!

南乳扣肉飯 IMAG1178

南乳扣肉飯,配菜是蘿蔔肉丸、花椰菜、雞胗。

梅干扣肉飯 IMAG1173

梅干扣肉飯,配菜是空心菜、士林香腸、洋芋肉丸。

梅子五花肉 薑汁豬肉飯IMAG1098

左邊是梅子豬肉飯,配菜是空心菜、糖醋里肌、洋芋(馬鈴薯)肉丸。右邊是黑胡椒豬肉、苦瓜、糖醋里肌、芥藍菜。

滑蛋牛肉飯 IMAG1181

滑蛋牛肉飯,配菜是大白菜、地瓜葉、蘿蔔肉丸。

鼓汁皇雞排飯 11698647_10204702720395625_8417380054150897283_n

鼓汁皇雞腿飯,配菜是白莧菜、油豆腐、蘿蔔肉丸。雞腿還蠻嫩的。

11755086_10204689113135452_530305214583903439_n

鹹蛋肉餅飯,配菜是糖醋里肌、百葉豆腐、大陸妹。

梅子豬肉飯 IMAG1245

這是最後一餐,梅子豬肉飯(以前稱為梅子五花肉飯),配菜是菜脯蛋、花椰菜、糖醋里肌。而且還不小心忍不住挖了幾口才想到要記錄。

從上面的配菜可以看到我到底有多喜歡糖醋里肌跟肉丸系列,當然每餐綠色蔬菜也是絕對要有的。另外從照片中也可以看到他的飯量之多,真的是會受到學生歡迎的便當店啊。


結語 / Conclusion

港味食堂的關門來得很突然,我還是覺得有點反應不過來。今晚離開咖啡店覓食的時候第一個想去吃港味食堂,可是又發現他們今天已經關門了,不禁感到萬分惆悵。於是只好在此為港味食堂做一個記錄,感謝他們這些年來的陪伴,並且希望能在我畢業之前看到他們復業。

題外話,看著這些照片,我肚子又開始餓了起來……看到港味食堂的便當就想要大吃,難道我是帕夫洛夫的狗嗎?

(more...)