我與R之間的愛恨情愁

[前言]

事情是這樣的,有一天呢,我需要將我的資料用圖表呈現,我最初一開始,用了 EXCEL 作畫。

之後,老師跟我說:我希望把 X 軸的間距調小,我沒用過 EXCEL,但是我覺得EXCEL應該可以作到。

我都用R。

…好吧,既然老師都這樣說惹,那我只好去用R惹。

[正文開始]

R語言,是一個統計分析的語言,它跟SAS一樣,就是當初設計是用來產生統計圖表與處理資料所使用。

正因為它是開源的專案,因此得到大眾的喜愛與支持。

[開發環境]

比較常用的開發環境:是使用RStudio

[安裝R的方法]

作業系統:Ubuntu 16.04 LTS


sudo apt-get update
sudo apt-get install r-base
# installing packages
sudo apt-get install r-base-dev

安裝 RStudio

到這個網址,並選擇 Desktop 與 Open Source 的版本即可。
在 Ubuntu 下,下載回來的是一個 deb 檔,雙擊兩下就可以執行安裝了。

Run R script from command line

  1. use Rscipt
  2. 在檔案的第一行加入:
    #!/usr/bin/Rscript
  3. 範例程式如下:

#!/usr/bin/Rscript
print("HelloR")

執行方式:


Rscript test.r

安裝R的packages

install.packages("package-name")

在安裝的過程中,有可能需要 mirror (鏡像網站)上的位址。
通常選擇有Taiwan就好(如下示意圖)


載入R的package

library("package-name")

[基本操作]

寫出第一個小作業:河內塔

基本就是把,一般的C語言,轉換成:R script 的版本。

這個作業就是來熟悉:基本的遞迴在R的用法(recursive)

[進階應用]

這裡就是之後學習R的各種應用的紀錄。每個都是獨立的文章,在之後會慢慢的更新上去…

讀取某個資料夾檔案,並進行歸類檔案,檔案/資料夾的處理。
R 寫出一個輸入該副檔名就可以以此命名新增資料夾,並將所有有此副檔名的檔案歸類到那個新增資料夾。

第一個是使用DescTools中的StrPos搜尋字串中有沒有我們指定的字串:

第二個是使用stringe中的str_detect從字串中,找到我們要指定的字串:

第三個是使用stringe中的str_detect從字串中,找到我們要指定的字串。
跟第二個的差別是,找到檔案名稱有跟附檔名相關的字串,再進一步多一個判斷,判斷是不是附檔名是相等的。(第19行)
因為多這判斷有可能輸入是附檔名是:r,但是判斷檔案名稱可能有*.rb的檔案也算會進去(TRUE)。
所以要再把檔案的附檔名取出來,再去比對輸入的附檔名稱是否一樣。

[其他範例,持續更新中…]

畫圖,讀取CSV檔,畫出曲線圖。(coming soon…..)

畫圖,讀取CSV檔,畫出多條線在同一張圖上。(coming soon…..)

讀取或處理完資料之後,發送 email 做通知。(coming soon…..)

 

[參考文章]

Run R script from command line on Ubuntu

(下面這個連結,會安裝到新版的R,目前我是用這個方式去安裝)

how-to-install-r-on-ubuntu-16-04-2

在 MAC OS X 下安裝 MySQL 與簡易故障排除

[前言]

事情是這樣的,有人看了Allen 大的文章之後,安裝完了MySQL,要用root使用者登入,卻遇到了:

 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 

這樣的錯誤。

通常發生這種情形呢,就是因為:

  1. 忘記密碼是多少。
  2. MySQL root 帳號出了點問題。

通常要解決的話,就是:停用 MySQL service, 進入 MySQL 安全模式, 修改 root 密碼。重新啟動 MySQL service 結束!

適用的 MySQL 版本:5.7.17 (目前官方最新版) 其他的應該也可以,不過沒有試過就是了…….

[修復步驟]

  1. 假設,已經安裝好 MySQL 了,還沒有的話,請參考:Allen 大的文章:https://blog.allenchou.cc/mac-apache-php-mysql-setup/
  2. 假設我們的 shell 環境預設就是使用:bash 當作我們的環境。我們先來設定幾個東西:[設定 .bash_profile] 在家目錄下設定這個檔案原因是為了要:使我們的 .bashrc 能夠完整的被執行。以下是其內容:
     if [ -f ~/.bashrc ]; then source ~/.bashrc fi 

    [設定 .bashrc] 因為MySQL 執行位置並沒有在 $PATH 環就變數裡面,所以我們必須要加進去。那還有一個夠簡單的方式,就是使用 alias 指令把它設定到 .bashrc 檔裡面,其路徑也在家目錄下面。以下是其內容:

     alias mysql="/usr/local/mysql/bin/mysql" alias mysqld_safe="sudo /usr/local/mysql/bin/mysqld_safe" 

    這樣在執行 mysql 和 mysqld_safe 的時候,就不用打那一長串的指令了。上述兩個步驟做完,需重開 terminal。

    或者是執行下面兩個指令:這有點像是重新載入這兩個設定檔案。

     source ~/.bash_profile source ~/.bashrc 
  3. 上面的步驟設定完成之後,我們可以開始本篇文章最重要的動作了。先停掉 MySQL service系統偏好設定裡的MySQL 並把管理器呼叫出來。如下圖,接著按下:stop MySQL server。

  4. 按下之後。回到終端機(terminal)啟用 mysqld_safe (MySQL 安全模式)
    mysqld_safe --skip-grant-tables

    完成之後,他會跑在 daemon service 背景服務(如下圖)

  5. 開一個新的終端機terminal分頁標籤。並輸入以下指令,這時候會要求密碼時候,按 enter 就好,安全模式下密碼是空的:
    mysql -u root -p
  6. 這時候我們就會看到下面這張圖:代表我們已經成功進入安全模式了。
  7. 改密碼:依照下面的順序輸入 SQL 指令來修改root 密碼並退出 MySQL shell:(大小寫都可以,對於 SQL 來說是通吃的)
    FLUSH PRIVILEGES;
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourMyNewPass';
    exit;
    
  8. 接著執行下面的指令找出跑 daemon process 的 process id.
     ps ax | grep mysql 

    這時候我們可以發現有三個 process id 是我們需要把它給砍掉的。

    因為可以從 command 中得知,第一個是我們跑的,第一個去跑後面兩個,所以總共會有三個。

    分別是:2382, 2383 以及 2464 所以我們要執行下面的指令:


     sudo kill 2382 2383 2464 

    每次的 process id 會不同,因為 process id 是由作業系統去派發的,所以每次 id 都會不一樣。這邊是示意。

    我們把 process kill 掉之後,這時我們切換到第一個標籤頁的 terminal 這時候我們可以發現:這個 daemon service 已經停止了。

    如下圖:

  9. 重新啟動 MySQL service (如下圖為未啟動前的樣子,按下 start MySQL server 按鈕)

  10. 回到終端機,並執行:
     mysql -u root -p 

    登入 root 使用者並使用修改過後的新密碼。

    下圖所示,就會成功了!

[結語]

以上就是MySQL 搶(ㄔㄨㄥˊ)救(ㄕㄜˋ) root 密碼的步驟!謝謝收看。

[參考資料]

  1. [Mac]不用懶人包,在 OS X 上安裝 Apache, PHP, MySQL
  2. How to Change the MySQL root Password in Linux or macOS via Command Line

如何在 Ubuntu 16.04 上安裝 Squid (proxy server)

[English title:How to install Squid in Ubuntu 16.04 LTS?]

[前言]

因為做論文研究關係,需要用到 Squid 這類的 proxy server 來做網址導向(redirection)的動作。

[環境需求]

本次的Linux Distro:Ubuntu 16.04 LTS

[開始安裝!]


# 更新套件

sudo apt-get update

sudo apt-get install squid

# 複製一份設定檔,若改錯還可以把設定回復。

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.backup

# 編輯 squid.conf

sudo vim /etc/squid/squid.conf

[squid.conf 的設定]

這邊只設定成:把指定的網址做重新導向的動作。

那我們是靠著 PHP script 來處理重新導向的動作,squid 會監聽所有的 HTTP 請求。

把他們交給 PHP 之後,接著交由 PHP 執行,接著 PHP 會去跑我們指定的 PHP script ,處理完並得到結果後進行輸出,結束。

以下是 squid.conf 的內容:除了下面有一些客製化的設定之外,基本上可以直接複製拿來做使用的。

我把 configuration (squid.conf) 貼在Gist:

以及:url_redirect.php (squid.conf 的 134行,使用 PHP script 處理導向)
作用:指的是,若連線到:www.animen.com.tw 就導向到:www.google.com.sa

[解析]

比較重要的地方是從:#custom configuration 下面開始(在 129 行開始),裡面有定義一些

requst header, 還有 url_rewrite 等。

  1. 其中的 192.169.0.1 應該要改成你自己當前電腦所使用的 IP。
  2. 如果要用:url_rewrite 把所有的請求都交給 PHP 來做處理的話,129 行到 133 行可以刪除。
    留下 134 以及 135 行即可。
  3. 若不靠 PHP scirpt 處理導向的話,請留下 129 行到 133 行。刪掉或註解 134 跟 135 行。
    129 行請換成當前電腦的 IP address (請用 ifconfig 指令查詢)。
  4. 第 129 行到 133 行,作用:當連到 www.google.com.pa 時,會自動導向到:https://google.com.tw
  5. 若要改 proxy server 的 port number,請參考第 44 行
  6. 第 101 行的 cache_mgr 是管理者 email 當有存取的動作的時候,就可以發信做通知
    當然也要設定與安裝 email server。
  7. 第 106 行的 visible_hostname 則是填寫你主機的 host name
  8. 任何設定完之後,記得要重啟 squid 服務,這樣新的設定才會生效。
  9. 因為會動到 HTTP 應用層上的東西,所以通常重啟服務會稍微久一點,是正常的。
  10. 有用防火牆的話,記得將 port 打開。(如果要允許讓外部連線的話,不用的話,這步就免了。)

[討論&後記]

雖然有一些方式,像是直接把要導向的 URL 直接的寫在 squid.conf 裡,不過就是我不太熟 bash,再加上要導向的網址很多,想說用 PHP 直接去做掉,會比較快一點。雖然效能會差一點。不過是導向靜態的內容檔案,感覺是還好的。說不定之後就會改成直接在 squid.conf 裡設定,不用 PHP script XD。

[參考資料]

Creating an HTTP Proxy Using Squid on Ubuntu 12.04

SQUID URL Redirection

Squid 官網

在 Ubuntu 16.04 上安裝舊版的 PHP5.6

[前言]

在這邊只是紀錄要怎麼安裝舊版的PHP而已,可以的話,還是用預設安裝PHP7即可。

[加入外部PPA]


sudo add-apt-repository ppa:ondrej/php

sudo apt-get update

[安裝PHP5.6以及一些phpMyAdmin所必要的extension]


sudo apt-get install php5.6

sudo apt-get install php5.6-mbstring

sudo apt-get install php5.6-mcrypt

sudo apt-get install php5.6-mysql

# 啟動 PHP modules

sudo phpenmod mcrypt
sudo phpenmod mbstring

# 打開編輯器去編輯檔案

# 並把裡面的 mysqli.allow_local_infile = On 前面的註解拿掉

sudo vi /etc/php5/apache2/php.ini

# 重新啟動 Apache2 之後,就結束了。

sudo service apache2 restart

[安裝phpMyAdmin]


sudo apt-get install phpmyadmin

我使用過的主機供應商評測(持續更新)

[前言]

在 2015 年開始的時候,因為誤打誤撞下,開始研究架站,如何把開發好的服務部署到外部的網站上去。

接著,開始接觸主機供應商,也就是這些 service provider 也在高中英文老師的推薦下,開始使用所謂的虛擬主機,VPS 以及雲端服務(PaaS等)

算一算時間,大概也有兩三年了,從一開始使用國內代理外國主機到真正外國主機在主導的主機供應商。

我都使用過了,前前後後大概有使用了 5 家左右,當然這個數目,我覺得還是會再增加中,畢竟要找到一個 C/P 值高的主機是不容易的…..

最近也感謝孤雨網路大大,所提供的這方面寶貴訊息,謝謝讓我對這方面有更進一步的認識。

下面,主題開始…..

[Acisite] 兩個種方案都還在使用中

使用過的主機:shared hosting, VPS.

機房可以選擇的地方:洛杉磯。

網址:www.acsite.net/tw/vhosting/linux_hosting/economic.htm

使用過的方案:一年/350NT (shared hosting)一年/1500NT(VPS)(皆是最便宜方案)

shared hosting 支援的程式語言:PHP, Python, Ruby

shared hosting 支援的

shared hosting 特點:有支援 ssh (需寫客服信開通~)

shared hosting 採用管理系統:cPanel

cPanel 支援SSL? 沒有。

VPS虛擬化技術:OpenVZ

優點:這家主機供應商是高中老師所推薦的,方案便宜,使用起來也還好。

適合一開始新手架站的人。

缺點:客服會漏信,過很久之後才會回,或不理你,基本上shared hosting 所支援 PHP 以外的就看看就好,不是難設定,或是框架的版本過舊(Rails)。

[Hawkhost] 還在使用,semi-dedicated 已退訂

使用過的主機:shared hosting, semi-dedicated.

機房選擇:美國,新加坡,加拿大等,我選新加坡。

semi-dedicated 跟 shared hosting 沒有兩樣,不過就是資源比叫不會有人跟你搶,上面只有兩個人。

所以速度來說會較快,但是快上許多。

網址:www.hawkhost.com

使用過的方案:一年/35.91US(最便宜shared hosting)一個月/2.99 US

shared hosting 支援的程式語言:PHP, Python, Ruby

shared hosting 特點:有支援 ssh 不用跟客服說,預設就有。

shared hosting 採用管理系統:cPanel

cPanel 支援SSL? 有,Let’s encrypt。

優點:自己爬文找到的,基本上都還可以,只要你會英文,它算是加拿大一家主機供應商,客服都很快速。算是大公司,所以PHP有支援到7.

適合 senior 架站的人。

缺點:Python 在shared hosting 上面架不太起來,放棄。

[A2Hosting] 還在使用

使用過的主機:shared hosting.

機房選擇:美國,新加坡等,我選新加坡。

網址:https://www.a2hosting.com/

使用過的方案:一個月/9.99 US (最便宜 shared hosting 方案)

shared hosting 支援的程式語言:PHP, Python, Ruby

shared hosting 特點:有支援 ssh 不用說,預設就有。

shared hosting 採用管理系統:cPanel

cPanel 支援SSL? 有,Let’s encrypt。

優點:自己爬文找到的,基本上都還可以,只要你會英文,它算是美國一家主機供應商,客服都很快速。算是大公司,所以PHP有支援到7.

適合 senior 架站的人。

缺點:還沒有找到,可能比較貴吧(?

[BandwagonHost] 還在使用

使用過的主機:VPS.

機房選擇:美國,我選美國。

網址:https://bandwagonhost.com/

使用過的方案:一個月/2.99 US (最便宜 VPS 方案)

VPS管理系統:Kiwi VM

虛擬化技術:OpenVZ

優點:自己爬文找到的,基本上都還可以,只要你會英文,它算是美國一家專營 VPS 主機供應商。

以VPS來說,價格算很便宜了,適合 junior VPS 的人。

缺點:連線速度慢,因為機房只有美國可以選擇。

[SugarHost] 俗稱糖果主機,已退訂。

使用過的主機:shared hosting.

機房選擇:美國,香港,台灣等,我選美國。

網址:http://www.sugarhosts.com

使用過的方案:一個月/72.1 NT (最便宜 shared hosting 方案)

shared hosting 管理系統:cPanel

優點:自己爬文找到的,基本上都還可以,它算是英國一家主機供應商(聽說有中資….)。

缺點:所有 shared hosting 中較貴,也沒有 ssh 可以使用。

[GreenGeeks] 已退訂

使用過的主機:shared hosting.

機房選擇:美國,我選美國。

網址:https://www.greengeeks.com/

使用過的方案:一個月/3.95 US (最便宜 shared hosting 方案) 續約後:一個月/9.99 US

shared hosting 管理系統:cPanel

優點:自己爬文找到的,基本上都還可以,只要你會英文,它算是美國一家主機供應商。

缺點:連線速度慢,因為機房只有美國可以選擇,號稱是綠色環保主機,所以價格貴了一點。

不適合新手,以及沒有 ssh 功能可以使用。

[DigitalOcean] 最近沒在使用

知名的 VPS 主機供應商,價格什麼的,網路也是一大堆文章可以看。

使用過的主機:VPS.

機房選擇:美國,新加坡,我選美國。

網址:https://www.digitalocean.com/

使用過的方案:一個月/20 US (VPS 官方推薦的方案) 一個月/10 US

優點:自己爬文找到的,基本上都還可以,只要你會英文,它算是美國一家主機供應商。

虛擬化技術:KVM

VPS 管理系統:官方自行開發的管理系統。

缺點:通常 KVM的虛擬化技術,架上都比較貴,如果架設的環境有用到 Kernel ,也就只能用 KVM的。

像是 OpenVPN 等。

不適合新手,以及沒有 ssh 功能可以使用。

[同場加映]

  1. 付款方式:大多使用 PayPal 付款

  2. SSL:免費的 SSL 就用 Let’s encrypt

或是可以參考付費的:https://cheapsslsecurity.com/comodo/positivessl.html

這個算是SSL經銷商,所以價格比在原來的網站上買要來的便宜。

[參考資料]

  1. LowEndTalk:裡面有很多主機相關的推薦與介紹,很值得一看。

***想到或是用新的主機供應商之後再補充。

安裝 Eclipse IDE(新版)

最近想要回去寫點 JAVA 小程式,所以就在去安裝了:Eclipse 來玩看看。

改版的幅度真的很大@@,而且也多了很多實用的功能,像是 installer 等等。

再者,因為之前有碰過一些 gradle 的 package manager 的經驗,因此這次架設 IDE 之外,我也會使用 gradle wrapper 在專案中使用。

這邊以:Ubuntu 16.04 為例。

預先動作:安裝 JRE 與 JDK


sudo apt-get install default-jdk

sudo apt-get install default-jre

16.04 預設為 JAVA 8

  1. 先到官方網站下載 Eclipse installer,下載點:https://www.eclipse.org/downloads/download.php?file=/oomph/epp/neon/R2a/eclipse-inst-linux64.tar.gz
  2. 下載回來之後解壓縮,會看到如下的檔案

  1. 點擊 eclipse-ins 啟動,會看到一個介面,裡面有各式各樣的 Eclipse IDE的環境料表提供安裝。
  2. 如下圖
  3. 選擇要安裝的Eclipse IDE,這邊就以 Eclipse for JAVA developers為例。
    點進去之後,可以設定要安裝的路徑以及要安裝的版本。
  4. 接著點 INSTALL 就開始安裝了!
  5. 安裝好之後,就會有下面的 Eclipse 的安裝資料夾。
  6. 點擊 eclipse執行。
  7. 就會看到下面的畫面了。
  8. 修改成dark theme,因為我個人不喜歡白色的畫面當作開發的環境。
    可以點選:window->Preferences->General->Appereance
    看到右邊的設定,有 Theme 選擇 Dark 就可以得到下面的截圖裡的樣式了。
  9. 新增 gradle plugin 到市集裡。
    gradle 是一個dependency package manager,如同 PHP 有 Composer 一樣,可以幫助我們輕易的安裝一個 JAVA library。
    在 Help->Eclipse Marketplace,點擊下去之後會出現可以尋找與瀏覽要安裝的 plugin 的畫面。
    我們在 Find 的地方打上:gradle,並按下 enter 鍵,等它搜尋一段時間之後,就會出現下面的清單了。
    把清單拉下來找到下面的有 Gradle IDE Pack 3.8.x 等字樣的套件,點擊旁邊的 install 按鈕,接著就等一段時間等安裝成功。
  10. 在前面的 gradle 套件安裝成功之後,我們就可以新建一個 JAVA (gradle) 專案了。
    點選 File->New->Project…. 並選擇 Gradle->Gradle Project 接著 Next。
    會有一個 Welcome 訊息,就看一看按下一步 (Next)
    這邊就打上 Project name 專案名稱之後,就可以按下 Next 了。
    接下來會要讓我們選擇 Gradle 的版本等,使用預設的即可。接著按下 Next 之後等它跑一段時間了。
    最後結束之後按下 Finish 就建置完成一個 Gradle Project 了。
  11. 透過 gradle 安裝 okhttp library
    打開 build.gradle 拉到最下面有一個 dependencies 的欄位,在大括號裡面我們可以填上:

    compile 'com.squareup.okhttp3:okhttp:3.6.0'
    

    接著,對著專案名稱按下右鍵選擇:Gradle->Refresh Gradle Project
    等它跑一段時間之後,okhttp就成功安裝了,如下圖

  12. 以上就是安裝 Eclipse 以及一些基本的設定,Happy coding with JAVA!
    後面有想到什麼再補充吧!

    [後記]

  13. Reset 所有的 view 畫面,Window->Perspective->Reset Perspective 就可以把所有畫面重設了!

如何在 Ubuntu 架設 private Git server (Gitolite + GitWeb)

自己租的 VPS 經歷上次的更新 MySQL 5.7 版本之後就爛掉,資料庫變成只能讀不能儲存…..

一氣之下,就把上面的專案都把它放到其他的主機裡,這台就重新的 reset 掉。

這台目前打算就拿來架設:Git server 與 CI server 作為日後有private Git 專案使用,本來打算是是架設 GitLab 作為 Git server,可是現在目前的VPS規格不夠好。

據說 GitLab 要跑得順的話,需要將近 8G RAM 才有辦法…..於是目前就先放棄了….先打算架設版本控制跟可以做持續整合的服務的 server 為主。

在經歷了一番GitLab server 安裝不起來之後,現在是轉向這篇要講的東西了,這個方式的 private Git server 算是比較輕量型的方案,也是比較合理的。

所以以下就是安裝 Gitolite + GitWeb 的方法。

[參考的資料]

install_git_server.sh

how-to-create-own-git-server-with-gitolite-and-gitweb-in-ubuntu

 

  1. 首先,先 setup 一個乾淨 VPS 並裝好Ubuntu 14.04 或是 16.04 的 LTS 版本,沒有的話就自己去租一臺吧,DigitalOcean 都有很便宜的價格有可以加上 Github 的學生方案可以使用,可以拿到 50 美金作運用。不過,不用的話要記得關掉,不然可是會一直的扣錢喔!
  2. 接著跑下面的 bash script: initial_ubuntu.sh,使用方式是:
    # initial_ubuntu.sh
    #!/bin/bash
    #Firstly, we have to login the root user via ssh.
    # install some required package
    # set locales (zh_TW.UTF-8 or en_US.UTF-8)
    
    sudo locale-gen "en_US.UTF-8"
    
    sudo dpkg-reconfigure locales
    
    sudo echo 'LC_ALL="en_US.UTF-8"' > /etc/default/locale
    
    export USERNAME=$1
    
    if [ "$USERNAME" = "" ]
    then
    echo 'please add the user name!'
    exit 1;
    fi
    
    sudo apt-get update
    
    echo 'Upgrading the package...It will be let user type the yes | no'
    echo 'We have to notice that this upgrade package will be installed the Apache2 HTTP server...'
    # skip the kernel update (OpenVZ is not allowed updating the Kernel.)
    sudo apt-mark hold linux-image-generic linux-headers-generic
    sudo apt-get upgrade
    
    sudo apt-get install -y curl wget vim ufw
    
    sudo useradd -m $USERNAME
    sudo usermod -s /bin/bash $USERNAME
    sudo adduser $USERNAME sudo
    echo 'Please set password for the $USERNAME ...'
    sudo passwd $USERNAME
    
    sudo ufw enable
    sudo ufw default deny
    sudo ufw allow in ssh
    sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config
    sudo echo 'ClientAliveInterval 60' >> /etc/ssh/sshd_config
    sudo service ssh restart
    
    echo 'done.'
    
    exit 0;
    
    
    bash initial_ubuntu.sh your-usernmae
    

    可以安裝一些基本或是需要的套件在以及設定基本的軟體防火牆還有 SSH 的簡易安全防禦設定。
    這裡的 your-username 在範例中,我們先填  peter 做為這一次範例的使用者名稱。

  3. 接下來就是要安裝 Git server 了,首先先依照步驟慢慢來。
  4. 首先,先更新一下軟體來源庫的網址。
    sudo apt-get update
    

    接著,在安裝 Git 套件:git-core,接著新增一個使用者

    sudo apt-get install git-core -y
    
    #新增一個使用者
    sudo adduser \
     --system \
     --shell /bin/bash \
     --gecos 'git version control' \
     --group \
     --disabled-password \
     --home /home/git git
    
    #切換使用者:git
    sudo su -l git
    
  5. 切換到 git 使用者的家目錄下面並 clone Gitolite 的 repository.
    在家目錄下建立 bin 目錄。

    mkdir $HOME/bin
    cd /home/git/bin
    git clone git://github.com/sitaramc/gitolite
    
  6. 驗證使用者為 git 相關的設定 (user verification)
    # Verification 登入使用者 git
    # ------------------------------
    # git@ubuntu:~$ ls bin/gitolite/src/gitolite
    # git@ubuntu:~$
    # ------------------------------
    
    # ssh key generation and we have to type one and more enter key to check some interactive message.
    # In your Linux client and run your-name@your-ip-address-or-hostname:~$ ssh-keygen -t rsa -C "Git-Admin"
    # If you have already had the id_rsa.pub, we can skip previous step and run following command directly: (我們使用這一項)
    # scp ~/.ssh/id_rsa.pub username@git-server-FQDN-or-its-ip-address:~ then go back to the git-server
    
    
  7. 我們使用的是將本地端的 id_rsa.pub 上傳到 Git server 上
    要注意的是,我們在新建使用者 Git 的時候,我們並沒有為使用者: git 設定一組密碼,因此使用 scp 傳輸 public key 時,我們需要先傳給另一個使用者。
    並登入之後把檔案搬移到 git 使用者的家目錄下面。

    scp ~/.ssh/id_rsa.pub username@git-server-FQDN-or-its-ip-address:~
    
  8. 接著,執行下面的指令:
    sudo mv id_rsa.pub /home/git/Git-Admin.pub
    sudo chown git:git /home/git/Git-Admin.pub
    sudo su -l git
    bin/gitolite/src/gitolite setup -pk Git-Admin.pub
    # 離開使用者 git (logout)
    exit
    
  9. 安裝 GitWeb 與 Apache2 以及修改權限
    sudo apt-get install gitweb apache2
    sudo usermod -G git www-data
    sudo chmod -R 750 /home/git/repositories/
    
  10. 修改 gitolite.rc 設定檔並找到下面這一行改成:
    # sudo vim /home/git/.gitolite.rc
    UMASK value as 0027
    
  11. 修改 /etc/gitweb.conf 的檔案
    sudo vim /etc/gitweb.conf
    並修改下面這幾行:

    $projectroot = "/home/git/repositories/";
    $projects_list = $projectroot;
    
  12. 重新啟動 Apache HTTP server
    sudo service apache2 restart
    
  13. 有啟動防火牆設定的話,記得將 ufw 允許 http 可以有外部連線。
    sudo ufw allow http
    
  14. 複製 gitweb.conf 設定檔
    sudo cp /etc/apache2/conf.d/gitweb /etc/apache2/conf-available/gitweb.conf
    cd /etc/apache2/conf-enabled
    sudo ln -s ../conf-available/gitweb.conf
    
  15. 修改位在:/etc/apache2/conf-available/gitweb.conf 的設定檔
    <Directory /usr/share/gitweb>
    # 修改這一行
    Options +FollowSymLinks +ExecCGI
    AddHandler cgi-script .cgi
    # 如果有 HTTPS 連線的需要,則需要使用以下的設定
    # 從下面開始,是要啟動 rewrite module 之外
    # 設定強制使用 HTTPS 進行連線
    # 可以進行 HTTPS 連線有:Cloudflare and Let's encrypt
    AllowOverride All
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    </Directory>
    
    
    # 接著重啟 Apcahe2 服務與啟用 cgi module
    sudo a2enmod cgi
    sudo service apache2 restart
    
  16. 最後,輸入網址:http://you-ip-address-or-hostname/gitweb 就可以看到 GitWeb 的清單了。
  17. 下面是要新建一個 repository 的方法
    git clone git@your-ip-address:gitolite-admin.git
    
  18. 接著切換到:gitolite/conf/gitolite.conf 編輯:
    
    RW+ = Git-Admin
    
    repo testing
    
    RW+ = @all
    

    像這樣就是新增一個名字叫做 testing 的 repository。如果要新增其他的,就依照新增 testing 的格式,再增加一個 repository.
    接著輸入: git commit -m “your commit message” && git push origin master

    這樣就完成新增一個 repository 了。

    [延伸閱讀]

    1.  為 VPS 增加 SSL 憑證:以  Let’s encrypt 為例
    2. 如何使用 Cloudflare 作為 DNS 代管
    3. 為你的 GitWeb 增加 HTTP-basic-Authentication
    4. 利用 reverse proxy server 把 git server 藏在其後面,增加安全性,以 Nginx 為例

WAMP Server3 安裝的注意事項

這一篇主要是提醒自己,WAMP Server 在版本 3 以後有顯著的安裝改變,特別是在要求 Windows 作業系統,VisualStudio 可轉散發套件,以及 Apache 設定上與之前有很大的不同。

詳細更改的注意事項,可以參考這裡

我目前需要注意的事項有:

  1. 目前這版本的作業系統開始已經不支援Windows XP 以前的版本。
  2. VisualStudio 可轉散發套件需要最新的版本。
  3. Apache2 目前只支援安裝成服務的形式
  4. 預設 PHP 有 5.6 跟 7.0.10 這兩個版本,可以自由的切換。
  5. Windows 7 我在安裝之後,缺少 vcruntime140.dll 而無法啟動 WAMP server 3 所以在下載 dll 擋之後,放到 c:\windows\system32 底下,再重新啟動就可以正常運作。
    缺少的 DLL 檔案可以在這裡下載

目前就只有遇到這些問題,再來就是 XAMPP 也是另外一個在 Windows 上受歡迎的 Apache + PHP + MySQL 的整合方案之一。

我現在是沒有再用,不過聽說他很快在 PHP 7 出的時候就快速更新版本上去惹@@,所以也是不錯,我也蠻推薦使用的。

之後想到再補充。

[名詞小解釋]

WAMP=Windows Apache MySQL PHP 的縮寫。

目前最新版本的資料庫仍是使用 MySQL 5.7

XAMPP=Crossed-Platform Apache MySQL Perl PHP

X即為跨平台,所以XAMPP有出跨平台方案,包含:Windows, Linux  and MAC OS

目前新版的資料庫已經轉換成為:MariaDB

研發替代役的一些面試心得

研發替代役的面試對我來說已經事告一個段落了,找這個項目就是等同於再找一般工作一樣辛苦。

畢竟現在工作也不好找,對於一個不是四大血統又是北部某間海邊大學的阿宅來說,是一件不容易的事。

我只能靠著平常的貢獻 Github 專案與平時開發累積的作品來提升一些非學歷相關的技術與能力。

以及剛有一點小成就的論文衝個場面,這些都準備齊全之後,就開始投履歷惹。

隨信附上充滿各式作品與貢獻的的Github帳號XD

大概從9月開始的時候,就準備好履歷開始投惹。

  • 群暉
    應徵工作:MIS 工程師
    第一次面試就去面在科技板上的大魔王
    工作內容:負責開發與維護公司內部應用系統使用到的程式語言大多是以 PHP 做為開發。面試流程:首先第一關是進入人資,人資開始請你自我介紹,以及詢問關於此工作以及你自己的人格特質。
    第二關則是工程師,首先也是自我介紹以及作品相關簡介,接著他就說:你知道我們的規矩吧?時間差不多了,我們來寫點程式吧!
    接著我就來到了小白板面前,他就跟我說:你最熟悉的排序演算法是什麼呢?我想想只好說:氣泡排序法吧!於是我就開始寫我的氣泡排序法。
    我很快就寫完了,不過我發現我寫的像是插入排序法 ORZ….接著被糾正之後,我想了大概 5 分鐘左右吧,終於把它改成正確的版本,以及更近一步需要提升效能。
    所以又改了第二次的版本。他看完並出去之後,沒多久就進來一位 MIS 主管,一樣開頭是自我介紹之後,接著問我有什麼問題要問,後來問的差不多之後面試就到這裡結束了。

結果:無聲卡

  • 歐酷網路
    應徵工作:Node.js 工程師
    這次面試時在是有些倉促,因為從遠地趕過去,還有些許的遲到,所幸還是到了公司,這家是一家新創的公司,自詡為亞洲版的 NetFlix,目前主要的服務是台日韓陸的戲劇。
    當然在我面試完之後,就有韓劇版權問題上新聞惹QQ。工作是主要是負責公司內部開發與維運應用系統。前後端都使用 JavaScript 做為開發的程式語言,當然對我來說其實就還好,不過我之前想說使用 PHP 比較多。
    但是 JavaScript 來開發後端我也有興趣,所以這間公司我也去投看看惹。第一關是技術相關的面試,近來是一位年輕的工程師,名片抬頭是架構師,接著就開始我自己的自我介紹,以及知識方面的問答,問的知識範圍極廣,從軟體工程的概念,到 Map/Reduce 以及 CI/CD 的概念皆有,以及 Node.js 上一些與 PHP 不同的特性都有。我有些自認為回答不是很好,有些就還可以,最後第一階段就結束了。第二階段是負責公司營運的經理,一樣有自我介紹之外,主要是關注在人格特質以及公司的介紹以及未來的發展。經理對於公司的營運與前景有一定的信心,在他的眼神中,看到對公司營運有信心。之後面試就結束了。

結果:感謝函

  • 艾絲資訊
    應徵工作:PHP 全端工程師
    這家是一家做運動器材的為主的公司,我應徵的是 PHP 程式設計師,主要是開發公司內部的系統之外,基本上就是電子商務網站開發為主。面試只有一個階段,由一位資深工程師面試,主要內容試提及技術方面問題作探討與面試以及我之前作品進行提問。此網站系統目前多以 Laravel 框架作為開發。

結果:無聲卡

  • 異術科技
    應徵工作:PHP 程式設計師
    這家是一個專門接政府的案子的公司,主要負責的像是有立法院的視訊會議系統等等,大多都是駐點在外,公司裡面的人很少。
    面試我只有到第一階段,一進去之後,一個人資大嬸發了一個履歷表示意要我填寫,我填寫完之後,接著等了快 10 分鐘左右,進來了一位資深工程師跟我面試,接著就開始我的自我介紹跟一些相關的經歷介紹,他後來覺得不錯,不過看到新水就皺眉頭,說碩士起薪只有 38K?要 45K 以上需要說服我為什麼可以給這個價碼以及跟其他人有什麼不一樣,後來我就說我有做一些作品而且也貢獻過專案,他還是說我沒經驗。那他這樣不就白問了嘛…….不懂後面問我這個問題最後還回這個答案的目的是什麼,後面有點讓人傻眼。他覺得我 ok 所以跟我說如果要進來的話再通知人資請他安排第二次面試談有關薪水的部分。

結果:婉拒二面

  • 資策會:大數據所
    應徵工作:前後端工程師
    因為資策會的面試我是直接參與它的聯合甄選,所以就跟同一批的人考英文和進到第二階段的複試這樣。
    基本上的面試過程時間非常的快,大概問了工作內容和基本的自我介紹,以及人格特質之後,面試就這樣結束了。

結果:offer get

  • 資策會:創研所
    應徵工作:後端工程師
    如同上面,也是在甄選的時候一起面試的部門,不過輪到我的時候,我在那裡坐了將近 20 幾分鐘,聽工作人員說面試的主管都跑去開會了….冏。接著好不容易來了一個資深工程師,接著自我介紹之後,就開始針對我的論文跟作品進行介紹與提問,介紹完了之後,他就簡單的自我介紹有關於他們部門目前在做的事情,現在他們目前在跟百貨公司進行合作,有關於百貨理餐廳的排隊快排系統,我提出一些想法與問題之後,面試就到這邊結束了。

結果:無聲卡

  • 資策會:教研所
    應徵工作:Internet 程式設計師
    有別於聯合甄選,他們是自己放消息出來要找人,所以我是自行投遞履歷進行應徵的。所以這是我應徵資策會裡相關的工作裡面,最早跟我聯絡的部門,也是有不一樣的要求,先是請我做一個投影片,從自我介紹,論文以及自我個人作品都放進去,面試時進行介紹,面試我的是一位組長。所以我也按照這個流程報告結束之後,開始聽他們目前在做的事情,教研所目前是在做有關於與教育相關的結合,所以大多跟學校有合作,目的是開發出一些應用系統與教育科技產業相關做結合。
    二面也是事後與他聯絡,並將投影片寄給他。

結果:二面無聲卡

  • KKBOX
    應徵工作:軟體工程師
    也是另類的大魔王,跟 PTT 科技板所講的一樣,從去年開始改成使用 codility 的服務來作為第一階段測驗面試者,這個服務就是企業付錢讓應試者考試,來判斷應試者的程式能力,雖然我在事前有做了有關於 codility 上面的練習題,不過考出來的跟我練習的內容與方向有些許的落差,所以考起來很鳥……

結果:感謝函

  • 甲尚科技
    應徵工作:前端工程師
    第一次面試有前端小測驗,主要是考一些像是前端的基本概念,還有 Bootstrap Layout 呈現是什麼樣子,請畫出來,考 Grid 的概念,以及 jQuery 的使用等等。我覺得蠻簡單的,所以大概 10 分鐘左右的時間就把測驗卷寫完了。接著就開始面試了,也是只有第一階段,直接進來兩位工程師跟我面談,大多內容也是跟自我介紹和過去的經歷進行提問,最後再問我想知道公司的一些事情。
    目前他們最主要產品以動畫軟體開發與販售為主,目前正在推出線上編輯動畫的網頁版,以及進行官方網站的首業改版,所以需要招一些會前端相關技術的人來開發公司所內需的網站以及產品網站。
    目前前端技術最主要是使用:AngularJS 與 jQuery 這兩個框架為主,還有 Grunt 等自動化測試做為輔助的工具。

結果:感謝函

  • 和沛科技
    應徵工作:後端工程師
    我是看到 PTT 科技板上有和沛的徵才相關的心得,因此我就抱著值得一試的心情投看看,接著就安排了第一階段的電話訪談。電話訪談就是有兩位工程師會先請你自我介紹之後,再輪番問你很多技術面的問題,以及就你開發的作品裡面題出問題請你試著去解決,有些我回答得不是很好,所以某些地方都卡有點久。
    最後就是讓你問想知道有關於公司的事情,我剛好有問一題,因為公司是很多的產品線,那有沒有可能產品結束被收起來?
    結果他跟我說他們做的都是長久產品線,不會說收就收。(我是在裁員風暴之前去面試的)然後就一語成讖惹 QAQ

結果:感謝函

  • 工研院
    應徵工作:資通所_光通訊網路技術部(K組)  資通所_資料中心架構與雲端應用軟體組(X組) 資通所_資料中心系統軟體組(F組) 以及資科中心
    這是我遇過最神奇的,我投了兩間有關工研院的工作,結果有面試邀約居然是這兩間以外的….而且人資還把 K 跟 X 組都排在同一天……..冏。
    K組,進行自我介紹之後,認為我還可以,所以就沒有進行筆試惹 0.0,接著進到二面,最後到跟組長面談,總共有三面(真漫長) 。
    結果 → offer getX組,原來我高中同學在這部門實習@@,開始前先進行一段筆試,接著三個階段面試,第一是主管,第二與第三都是資深工程師,時間老實說不是給得很好,一下面試又一下子筆試,因為安排的問題…..冏。
    結果→無聲卡不過友給交通費還送一個隨身碟紀念品,感覺挺不錯的(?F組,我事先不知道,原來這部門是我學姐的部門@@,一樣前面先筆試,考試卷可以選 C 或 JAVA ,接著一小時之後開始面試,分為兩階段,二個階段基本上都是注重在作品跟自我介紹裡面,要開發什麼以及問一些情境的問題等。
    二個階段中我覺得是答得還可以。反而是考卷我覺得有些差強人意就是了…….

    結果→無聲卡 (聽學姐說沒上 QQ)

    資科中心,本來是請我約個時間來進行視訊面談即可,不過剛好我那天有 F 組的面試,
    所以我就把面試排在同一天惹。

    面試大概是在講你曾經修課的內容,還有從你的自我介紹之中,提出問題,在團隊
    開發中有沒有遇到什麼困難等,最後問一些問題之後就結束了,資科中心大概就是工研院
    裡的 MIS 部門,負責整個院裡所有的機房 server 等設備維護以及維運。編制算是在整
    個資通所中最少的一個部門。

    結果→無聲卡

  • 聖洋科技
    應徵工作:PHP 全端工程師
    這家就是大河馬大大所開的公司,公司內容是廣告代理商,工作地點在新竹,開發基本上都是集中在新竹。
    面試分成兩個階段,第一階段是填寫基本邏輯測驗,性向測驗,英文測驗以及 PHP 相關的程式小測驗,可以上網查@@
    筆試結束之後,開始二階段的面試,第一階段就是資深工程師,最主要是說明因為愾了我自己的部落格還有我在 Github 上面的創作。覺得很有興趣,所以就請我來面試惹0.0
    所以面試就在愉快的氣氛下結束,接著下一階段是主管面試,基本上問了一下關於論文內容還有自我介紹之外,還有 offer 和上工時間,就差不多結束了,本來主管她是跟我說二個禮拜之後再問我下禮拜的意願,我就說好,沒想到隔天就打電話給我惹 0.0要我進行下一階段的主管面試,地點在台北,所以就先約了下禮拜進行面試。到了台北的分部,發現原來是新的公司,主要是銷售為主,也有少許的開發在台北的分部。
    這一次面試也見到人資姐接,並帶我去面試主管的房間進行最後一次面試,內容大概就是自我介紹還有人格特質等。

結果:offer get

  • 中華電信
    應徵工作:軟體工程師 (應徵有關於大型系統開發與設計以及前後端工程師),部門我是選數據分公司
    就聯合甄選,我以為會進到第二階段,結果書面就掰了 QAQ

結果:感謝函

  • 台積電
    應徵工作:軟體工程師,其實是投好玩的,大概就收感謝函吧。

結果:感謝函

 

[綜合心得]

最後我要感謝我學長,時常關心一些我們的動態,還有我做了什麼事也會給我一些建議。要感謝人太多了,還是謝天吧!

覺得找工作就是這樣,幾家歡樂幾家家愁,只有把自己準備好,剩下就靠運氣和實力惹,謝謝大家觀看!

PHPConf Taiwan 2016 第一天心得

過了一個禮拜終於要打這篇心得了,經過一個禮拜沉澱之後,來看看文筆會不會比較好一點(?

起先是學長揪我的,也很感謝學長的邀請讓我有機會參加道精彩的議程之外,也可以認識一些新的朋友,還有小插曲XD

第一天報到之後,在會場轉了一下,發現其實輔大的會議廳並不大,而且只有兩個會議廳,不過小而美,有麻雀雖小,五臟俱全。

在進場之前,還稍微逛了一下 Gandi 的攤位,所以也得到了他們的潮 T。

  1. 很快第一個 key note 就開始了,這次第一個大會演講邀請的是 Slim framework 的作者,同時也是 Modern PHP 與 PHP: The Right Way 的作者,網路上的代號是 codeguy 雖然小有名氣,不過一開始接觸的框架還真的是從他的框架開始學起的,所以榮幸聽到他本人的演講,我也是很開心的。內容是在講述他從 junior 到 senior PHP developer 的過程,中間還偷婊了一下台灣的工時 XD
  2. 第二場的 key note 是邀請到了 PHPUnit 的作者,作者本身是一個德國人,所以開場就說他的 code 都很 strict XD 過程中也偶有歡笑跟有趣的對談,比較偏向的是介紹 PHP 7.1 的時候有什麼改變與 PHPUnit 新版有什麼樣的變動,還有目前 PHPUnit 的版本 features. 最後給了一個有關於 PHP7.1 電子書的 coupon,我回家之後二話不說就先買了 XDD
  3. Rebuild flyingV with Laravel:這是後來第一個聽的議程,內容是在講述這個募資平台從以前到目前系統開發到改版過程,這方面還蠻有興趣的,因為跟重構有關,而且經歷很多的版本改變。可見技術長也是很強大的,能夠帶領開發團隊在經歷多次的系統改版之後越趨完整與穩定性。
  4.  Refactoring to Collections – 從陣列重構談物件導向程式設計:本議程是圍繞在對陣列的存取,以往我們要對陣列做修改值,通常都是走訪陣列再將值一個個取出並修改值再存回去,如果迴圈裡面還有一些 if….else 的條件判斷,簡單的還好,複雜的話會變成義大利麵條式的寫法導致 code 混亂不堪。不過若是使用 array_map 與 array_reduce 的話,在 code 的可讀性來說,會變得較容易理解,相對的這種寫法目的就是要提高可讀性並以不考慮效能為前提下。
    若是在 Laravel 下,有提供 map 與 reduce helper functions 可以使用,達到的效果是一樣的。
  5. 用 Laravel + Vue.js 打造即時資訊看板連續兩個議程都是 KKBOX 的工程師,真心覺得 KKBOX 很強大阿,這個是在介紹如何打造 real time 的看板,所以用到很多有關背景服務相關的工具,像是 queue 和 supervisor 等。

後面因為閉幕的時間間隔太久所以就先跟學長先走了,也這樣結束了第一天。

這天收穫主要就兩個,一個是見到之前面試我的 developer 順便幫我問問現在情況,結果忘記申請研替缺 QQ,看來只好再去找其他工作了。

另外一個就是透過學長去認識到另外一位有十年經驗的大大(? 希望可以切磋與交流技術之餘,能有得到工作面試的機會了….

[各議程的 slides]

Lately in PHP(Unit)

https://thephp.cc/dates/2016/10/phpconf-taiwan/lately-in-phpunit

Rebuild flyingV with Laravel

Refactoring to Collections – 從陣列重構談物件導向程式設計

https://hackmd.io/s/SJEH1KZgx

使用 Laravel & Vue.js

https://docs.google.com/presentation/d/1PN4Ou1b3_gnPyki9JfU3fp9sSeavk0rAvkZptxF2yFc/edit#slide=id.p