將自己的履歷升級-接Travis 和EmailJS、Particles

最近自己無聊開了很多坑….開了line bot 的坑,寫了關於Bible 的line bot 也寫了關於玩味性質的line bot ,學習Angular Ng-rx (這個好難啊!)。。。 最近做比較多的是修復我履歷頁的TravisCI 花了超多時間一直無法把gulp deploy 和 travis 做整合,後來索性就不用gulp deploy 指令了,直接將資料夾push 到github page 當中啦!

如果想要知道之前怎麼寫的可以看看我這篇文章:利用Gulp 製作自己的履歷

後來才發現原來我不是原創… NPM 的市場已經有一個Gulp-Resume 套件… 哈哈,我幹嘛那麼辛苦刻這麼久呢….不過也藉這個機會把整個履歷大改寫,調整了很大幅度的功能,也在過程中學習不少,以下也筆記一下讓大家可以參考看看

串接 Travis CI

這次我的履歷Project 原本是用指令gulp deploy ,而加入travis.yml 也只是幫我呼叫這個指令而已…. 而在前面文章也有談到我將remote git 作出調整,直接以username/password 做為登入….. 然而這一切在我開啟github 2-factor 機制及改密碼後就各種失敗…有一段時間我的Travis 貼紙都是紅色的failed 呢…. 試了上千百萬次,仍舊失敗,無法解決問題就只好解決問問題的人(大誤!),所以最後改成github page… 意外發現的好簡單啊XD 然後現在的travis 貼紙都是可愛的綠色呢!

先簡介一下什麼是Travis CI 好了,他就是一個可以讓你自動化部屬的工具,有點像是gitlab CI , 或 Jenkins,你可以預先定義一大堆的指令在.travis.yml 這個檔案當中,然後travis CI 就會幫你自動化這些指令喔….之所以要使用Travis 是因為我覺得他似乎對Github 還蠻友善的,而且我發現他超厲害的,可以部署github page 以外也可以玩FTP ,只要你 script 寫對就好囉!接下來就讓我講講怎麼用travis 部署到github page branch吧!

首先Travis 官方其實就提供你關於github page 的範例,其實你就可以好好的研究好好的拿去玩了…

簡單來說你先設定給travis 用的github token , 這部分你可以用去github 的後台 ->Setting -> Developer settings -> Personal access tokens ,然後你記得要給他關於gist 和 repo 的權限,得到token之後就貼在.travis.yml 裡面…(你問我明碼這很不安全?放心,Travis 可以讓你加密喔)

首先將travis 安裝在你的電腦當中,總之安裝travis 的流程我懶得講,自己去Google 吧,我把寶藏都放在那裡了XD 安裝完之後你只要確認以下指令有沒有正確回傳數字就好~

$ travis --version
$ 1.8.10 #什麼數字不重要,只要是數字就好:)

你可以使用這個指令加密你的token,記得你目前是在你放.travis.yml 的目錄下喔

$ travis encrypt GITHUB_TOKEN="你剛剛在後台設定的github token" --add
# 其實你的GITHUB_TOKEN 可以替換成任何的名字 舉例來說Joanne之類的,Joanne是誰?這不好說啦......

然後你就在你的.travis.yml 看到多了一行,我不知道你的secrue 後面會接啥,總之就是我們無法直接一眼看穿的內容…..

env:
  global:
    secure: (.....)

加密之後然後呢?其實你就可以在你的script 直接用你剛剛定義的名字,以剛剛的案例來說你就可以使用GITHUB_TOKEN,是不是很神奇海螺呢?Magic !

好啦,一切萬事俱備只欠東風,到底怎麼樣可以push 到github page 呢?範例給他抄下去就對了!

deploy:
  skip_cleanup: true
  email: r567tw@gmail.com
  name: r567tw
  provider: pages
  github_token: "$GITHUB_TOKEN"
  local_dir: "public"
  on:
    branch: master

說明文件底下有個 Further configuration ,那就是你可以客製化的東西,以我用這個履歷專案來串travis 的例子說明,當我執行script 裡面的gulp 之後,會有一個public 資料夾,那其實就是我們要放在github page 的資料夾,github page 只讀靜態檔案嘛! 你丟給他php , rb , jade 他都吃不下去的!!!

所以local_dir 設定為public , github_token 帶上我們剛剛加密的github token ,記得要加$字號喔,然後你可以設定email 和name …我是設定我自己的啦,當然你也可以設定別人的陷害別人(誤?

整個.travis.yml 就長下面這樣!

language: node.js
node.js: -"7" -"8"
install:
- npm install
- npm install --global gulp-cli
- npm install -g bower
- bower install
script:
- gulp
deploy:
  skip_cleanup: true
  email: r567tw@gmail.com
  name: r567tw
  provider: pages
  github_token: "$GITHUB_TOKEN"
  local_dir: "public"
  on:
    branch: master
env:
  global:
    secure: (......)

前面就是設定我們本機之前會設定的那些東西麻,因為travis 一開始deploy一定是一個超級空白的機器,所以你要餵給他一些可以讓我們專案運行的工具與軟體…..然後gulp完之後會有個public 資料夾,deploy 就push 這個資料夾到github page 就打完收工!

調整layout 與內容、Refactor

沒想到紀錄Travis 這麼麻煩….. 讓這個文章落落長了… 所以後面不多說,就是各種調整resume.json 的架構,然後調整layout ,原本index.jade 長達一百多行的code 被硬生生拆分到content 資料夾底下,把那個點往下的按鈕做成Mixin ,好讓這份code 可以重複使用…是不知道自己會不會改天黑白來又把content 底下的jade 全部合併哈哈XD,另外更加上聯絡的表單(等等我會說明這個連絡表單怎麼做的,他是真的可以寄信給我的喔!!)以及原本白白的背景改成使用炫炮功能極高的particles.js ,真的很炫炮!如何使用particles.js 可以參考他的文件,或者你也可以翻翻我的履歷專案打開source/js/all.js,然後一開始particles.js 會製作成一個canvas,但我希望particles.js 當作我的背景啊,所以我就參考了這個stackoverflow 的方式修改我的css…,打完收工!

聯絡我們的表單

這部分原本我是想使用IFTTT的服務,但我發現到他只能給3個Value 而且Value 還不能有客制的Name ,所以後來找到有人寫的文章討論如何只用前端寄信,便選擇了EmailJs 這個服務串接。雖然免費方案只允許使用一個月兩百封,但我想也夠用了啦! 我最好會有兩百個人會來找我啦XD

首先先是設定一下emailJS 引入CDN 後加入自己的 user_id 初始化它,你可以再EmailJS 的後台-> installation 找到這段類似的code

<script type="text/javascript" src="https://cdn.emailjs.com/sdk/2.3.2/email.min.js"></script>
<script type="text/javascript">
  $(document).ready(function(){
      emailjs.init("{USER_ID}");
   });
</script>

最後就是開始寄信啦,找你EmailJS 後台-> Email Template 然後修改成你要的內容,使用’Copy Code’ 這個部分,你會看到類似底下的code

var template_params = {
   "name": "aaa_value",
   "sender": "bbb_value",
   "subject": "ccc_value",
   "body": "ddd_value"
}

var service_id = "default_service";
var template_id = "{template_id}";
emailjs.send(service_id, template_id, template_params);

之後將這段js code 和預備好的連絡表單整合起來就好啦,你可以使用than 接下emailJs 回傳回來的response 藉此提醒使用者寄送成功或寄送失敗 (因為emailjs.send 其實是一個promise )如下

  var template_params = {
      "name": document.ContactForm.name.value,
      "sender": document.ContactForm.sender.value,
      "subject": document.ContactForm.subject.value,
      "body": document.ContactForm.body.value
  }
  
  var service_id = "default_service";
  var template_id = "{template_id}";

  emailjs.send(service_id, template_id, template_params)
    .then(
        function(response) {
            alert('寄送成功喔!請靜候回覆');
            document.ContactForm.reset();
        },
        function(error) {
            console.log("FAILED", error);
            alert('寄送失敗,如有問題請直接以信箱聯絡我');
        }
  );

總結

第一次寫這麼長的文章…好累….很久沒寫技術文章了….未來計畫要寫關於Magento 系列及python web 系列的文章,最近說也寫關於line bot 的project ,改天或許我也可以談談串接他的這個部分,希望自己寫越來越多side project XDD

然後其實我這個專案因為放在github ,因此我也歡迎大家來修改或者拿我的resume.json 改成自己的內容發佈自己的履歷喔!(但要記得知會一下作者我啊!)

小君曰:使用炫炮的particles.js 讓我的履歷看起來好潮喔XDD

利用Gulp 製作自己的履歷

之前六角學院出了一堂課程:使用 gulp 進行網頁前端自動化,相當推薦!

說真的,在畢業前我就大概知道gulp 的大名,自己的印象就是類似前端的工具……但始終沒有特別著墨這一塊,直到我最近關注六角學院出了這門課,恰巧手上又有一些閒錢,就發憤買了這門課,藉此做為好好學習gulp的機會和理由。

Gulp 是甚麼?

Gulp 在我目前的使用與理解上就是一個可以將前端工作流程(前端工程)給與”自動化”的一項工具,藉由”gulpfile.js” 定義出各式各樣的”工作任務”,加上gulp 的一些配合外掛與套件,可以進行壓縮js 和css 、scss 或搬移檔案的動作。詳情可以請問 wiki 大神甚麼是gulp

話不多說,先做一個簡單的範例吧,這是一個可以把html copy 到指定地方的工作任務

PS: 請先預備好工作環境,npm 還有souce 資料夾,(當然你也可以定義您的資料夾名稱)等,如果可以,再多裝個yarn (比npm還快的npm,但不是npm 請看介紹阿 npm 只是拿來安裝yarn 的XD ) 先npm install 或者yarn install  之後在資料夾裡新增一個新檔案:gulpfile.js

說明:

接下來使用gulp 後面接你所定義的task name 即可執行,如上範例 就是在CMD Key “gulp copyHTML” ,就可以將source 資料夾裡所有.html 檔名的檔案搬到 public資料夾下(如果沒有public 他會幫你建一個!! )。

如果你只想key gulp 就可以執行也可,只要在gulpfile.js 定義gulp.task(‘default’, [/後面接task 陣列/]); 就可以,如上所示就是 gulp.task(‘default’, [“copyHTML”]);

當然啦,gulp 如果只能拿來做搬檔案,其實用python 也可以阿! 幹嘛需要用gulp?  gulp 真正的妙處是在可以利用各式各樣的外掛套件 多樣化並豐富前端工作,像是gulp-sass 可以將sass的檔案轉成css、用gulp-concat合併css 和js ,甚至也可以利用套件壓縮css 和js 的檔案大小、gulp-jade 更能將 jade 的檔案轉譯成.html,別在這裡問我jade 是甚麼? jade 就是 html 前置的樣板語言,和scss/sass 之於css 有點像,不知道jade 是甚麼請由此進。 對了 如果你直接在google 搜尋打”jade” 會搜尋到”玉”,因為它改名為 “pug” 了阿XDDDD

如果很認真沒錢的同學,歡迎去自行google 搜尋 “gulp 教學”,和我一同進入 gulp 的世界,如果有點閒錢,還不用1000元,歡迎來六角學院和我一起當同學喔! 老師教得都很詳細、而且每個禮拜有問答會,可以把你碰到的問題提出來(不過或許是工程師性格使然,我都沒有問甚麼問題,自行google 比較多……)

為甚麼用Gulp 來做履歷?

a.工程師就應該要有不被104 和其他找工作網站所限制履歷的權利阿(誤?!

b.工程師就應該要有自己的工程師履歷阿,像我很喜歡和崇拜的Robby Leonardi 大神的履歷(大誤?!

好啦,因為六角學院的老師在課程上有介紹了gulp-data 的套件,我個人相當喜歡,可以說是愛上這個東西,可以先將預先寫好的json 檔串接,傳到前端的jade 去渲染出html 。 這真得是很酷! 另外,近來在許多的研討會或課程中老師或講者很多都用所謂的json 來顯示自己是誰,於是讓我就有這個用gulp 來做履歷的project 和 idea。並且我有著後端工程師的一個基本素養,未來的作品和經歷是會越來越多的,如果使用寫死的”html”呈現自己的履歷實在是”太白癡”? 重複的html code 太多,為何不用jade 的each 呢?

做法與想法:

我是個很懶的後端工程師,所以我並沒有想要像Robby 大神用畫圖阿、客製化強大的css 和js 去製作他的履歷(覺得他也很用心的花很多時間),當然也是我目前還沒達成這樣的境界?!(希望未來可以達到 😎 ) ,所以我的頁面很簡單,就是一些自己寫的一些小js 和 scss 檔(用gulp 把scss 轉為css), 然後用gulp-concat 和main-bower-files 這個可以將bower 和 gulp 對接的工具將bower 引入的”boostrap”、”jquery”、”animate.css”、”font-awesome”、”wow.js” 與我自己客製的包起來並壓縮。

最後,用gulp-data 和jade 語法相互配合把自己的履歷網頁刻出來,在這裡,我只想示範 gulp-data 的那段code 而已

接下來,就是jade 檔的事情了,想辦法將收到的data 整理出來寫在網頁上, 如果要看code 請至此

遇上gulp-ghPages 的雷

在 gulp 的課程中,講師有講到 gulp-ghPages 這個外掛,這讓我的眼睛為之一亮,因為我只要用gulp 就能簡單部屬我的履歷,就不用打一堆git 指令之類bla bla 的 讓開發與發布可以分得乾乾淨淨的,附帶一提,gh-page 就是github 可以提供給”靜態網頁”的空間。 可以做為一個簡單的預覽。

然而,我卻遇上了”fatal: could not read Username for ‘https://github.com’: ”  ,或許是因為我不止開發了這個resume 的小專案,另外我還有開發了一些東西,我使用的是 vs code,在git global的設定上,好像我沒有設定github 的設定,記得每一次我在git-push 都會出現視窗問我github 的帳號與密碼……。 呵呵 卡關了一陣子….最後Goolge 到這個解答 。雖然不是gulp-ghpage的關係,但其實狀況有點像,大概都是git 的設定上問題,看著他們的討論串,看到這一段

The detail step:
1, go to your local git project directory, open ".git/config" file and delete the "[remote "origin"]" section.
2, go to git bash and input "git remote add origin https://{username}:{password}@github.com/{username}/project.git"
3, input git push to check if it works.

意思是說,

首先第一步,將.git/config檔案裡有關於 [remote “origin”] 的區塊砍掉(windows 用戶請將資料夾選項->顯示隱藏的資料夾、檔案和磁碟機,你就會看到.git 資料夾了 )

第二步 key 上 “git remote add origin https://{username}:{password}@github.com/{username}/project.git” (username和password 是你的github 的username 和password 以及project 是你目前所做的project name )

當然啦,我也是可以去修改git 的設定,只是小弟搜尋了很久都找不太到怎麼修改(有點忘了),所以就換了這個奇怪解法。

心得與收穫

終於,歷經了快一個月(含學習時間)?! 將這個夢想中我想做的side project “工程師履歷”做出來,之後除非是要新增甚麼區塊,總之我只要修改 我設計的 json 檔 and gulp 和 gulp deploy 就可以自動化我的履歷拉(尤其對於作品和經歷、專長等大大有幫助 )! 這大大方便以後的履歷更新。 如果各位有關於此類相關更好的建議或做法歡迎再下面與我討論XD

小君曰:人生中能做出多少個 side project 呢?