Mpi9a9wjn8tpgoxdc8gw

吳政賢

嗨,我叫吳政賢,78 年次,因為很喜歡完成一項作品的成就感,所以喜歡上寫程式。


畢業於淡江大學,在學時期主修資訊工程學系,所以大學時就有 C 語言、Java 的程式基礎,因為專題還接觸了 Arduino 與 PHP 網頁開發。


因為大學相關科系關係,畢業後就先以 C 語言、組合語言為環境的筆電 BIOS 工作進入職場,但最後因為還是喜歡完成應用程式的快感,於是選擇自己所愛的興趣,回到應用程式層面的工作。


很喜愛開發出一項專案或產品的成就感,也很喜愛分享經驗,所以我也把所有我個人研究的專案公開在 GitHub 上,也不時的寫寫 Blog 心得文章,以下就分幾個大項目介紹我自己吧!

資深全端工程師   新北市,TW
[email protected]・0987370300

基本簡介


目前都專職於網頁、網站相關的工作,無論是後端、前端、接案相關都有專職過的經驗,以下大致說明一下: 


  • 後端:從系統架設到程式撰寫都有獨立經驗,也有與 APP 合作串接 API 的經驗。 
  • 前端:目前主要撰寫的前端框架為 Vue.js,也寫過許多 jQuery extend Lib 套件。 
  • 接案:基本上都為全端經驗,從系統架設、後臺撰寫、前端刻板都熟悉的技術。 


若想更了解詳細介紹可以至下列查看: 


2017 年高雄 MOPCON 講者

直播寫程式



工作經驗

資深全端工程師 - 愛上新鮮股份有限公司,2019 年 03 月 - 現今

  • 公司主要為生鮮、海鮮 電商平台
  • 職位為管理職,組織下有三位工程師共同開發專案,皆為全端,但主力主要在後端
  • 在職期間主要致力於公司內部系統
  • 倉庫出貨系統
    • 製作倉庫出貨系統,合併多張訂單方便撿貨
    • 使用 Node.js 實作 WebSocket 連線,即時更新出貨分配進度
    • 利用 Node.js 製作雨貨架硬體 TCP 連線,並且串接與網頁 Socket 來達成即時管控出貨進度
  • 轉址系統
    • 根據行銷需求,需要大量發送簡訊,並且含有追蹤碼
    • 大量流量衝擊,紀錄與分析點擊概況
  • 公司專案技術
    • 後端採用 LaravelNode.js
    • 系統採用 AWS EC2S3RDSCloudFront
    • 前端 Vue.js,皆有使用 Cli 與 CND


資深全端工程師 - 瑪樂愛迪科技,2018 年 03 月 - 2018 年 11 月 

  • 產品為影音廣告平台,名稱為 AD POST,主要功能是藉由素人拍攝有趣的影音廣告後上傳至平台,以達到廣告收入賺錢。 
  • 當時團隊剛成立,所以必須獨力完成後端、前端、系統端的工作。 
  • 最初為外包團隊製作,承接後發現很多錯誤,所以打掉重做,一個月內完成兩項專案。 
  • 起初為網站全端工程,從捕夢網搬至 AWS 系統,從零開始,申請 AWS 帳號、架設 EC2、S3、RDS… 等。 
  • 規劃實作切版後台,前台 切版套版,效能優化、SEO 調整。 
  • 後期產品方向改變為 APP 導向,於是改著重後台後端與 iOS、Android,所以加強針對 API 的管理與優化。 
  • 在 Side Project 上,也遇過效能問題,採用 Pre Build HTML 的方式,上傳至 S3。
  •  加強使用 CloudFront 與 Certificate Manager 來做 CDN,來解決流量問題。

資深 PHP 後端工程師 - 時間軸科技,2015 年 08 月 - 2018 年 02 月

  • 產品為美食平台,名稱為 巷弄 APP,主要功能是藉由在平台上購買便宜餐卷,讓使用者可以便宜用餐,而店家可以得到在 APP 上曝光的廣告的三方共立平台。
  •  當時專職於產品後台的開發與效能調整,從零開始的建置後台,到 API 龐大時的效能調整。 
  • 當時建制後台需考量到如何方便於後端團隊的功能開發。 
  • 為了開發速度提升,當時使用的後端框架為 CodeIgniter,於是在不影響線上功能情況下,加入 ORM 相關套件,以提升工程師的開發效率。
  •  在職期間也使用過 Redis 來調整效能。
  •  專案亦使用 ElasticSearch 做模糊搜尋。 
  • 當時專案後期也拆分成多項小專案,例如:商家後台等。 
  • 專案後期皆採用 scrum 方式管理開發。

前端工程師 - 雲永科技,2014 年 08 月 - 2015 年 08 月

  • 產品為影音平台,名稱為 miiiTV,主要功能是讓素人可以將自喜所喜愛的線上影音(Youtube、Dailymotion)彙整至我們的平台,建立屬於自己的跨平台的影音頻道。
  • 當時採用前後端分離的方式開發。
  • 前端採用 JavaScript、jQuery、Angular.js,切版工具則為 scss,藉由 Gulp 來編譯 Scss。
  • 產品開發中剛好遇到 Angular.js 改版,但因為專案時程在即,故後期只採用 JavaScript、jQuery 在開發。
  • 切版上皆採用自己切版的方式來實作 Producer 的需求。
  • 產品後期,因為人力縮減,故也被調配輔助後端,所以也碰了當時的 Laravel 4.2 的版本。 

PHP 後端工程師 - 風尚科技,2013 年 07 月 - 2014 年 08 月

  • 產品社群平台,名稱為 STYLEWALL 美圖牆,主要功能是素人上傳自拍的穿搭照片的社群 APP。 
  • 產品有網站的前後台、雙平台的 APP,甚至後期還有劃分八個國家六個語系的開發經驗。 
  • 當時後端前期採用 Ruby on Rails,後期則改採用 PHP,框架為 CodeIgniter。 
  • 產品開發期間也遇過效能問題,當時就有採用 Redis 當暫存工具的開發經驗了。 
  • 而產品的搜尋功能,為了個人化搜尋的功能,當時也採用了 ElasticSearch 來輔助,不過當時是有專職人員在針對 ElasticSearch 做管理。

BIOS 助理工程師 - 和碩聯合科技股份有限公司,2012 年 07 月 - 2013 年 07 月

  • 產品主要是作為系統廠的 BIOS 開發工程部門。 
  • 根據公司所承接的品牌廠商需求,在 BIOS 上做開發。 
  • 根據需求功能將當年度公版 BIOS 作修改。

專業技能

- 系統端 -


主要皆是使用 AWS,個人最常使用到的服務有 EC2、S3、RDS、CloudFront、Certificate Manager,以下針對我對各個服務的熟悉度做說明。


EC2

  • 基於 ubuntu 系統上架設 Apache。 
  • 使用 vhost,在同一台機器下可以讓不同網域下可以對應不同目錄。 
  • 並且利用 let’s encrypt 產生免費 ssl 憑證。 
  • 架設 MySQL,在流量不高並且不開啟 RDS 服務之下,我會採用 Apache 與 MySQL 共存一台機器的方法。 
  • 排程 Cron job 的設定,因專案功能,需要固定時間下去做相關資料處理,故會搭配 PHP 語言處理資料。


S3

  • 放置靜態檔案,搭配 EC2 伺服器使用下,將圖片相關檔案做存放的位置。
  • 有時候也會直接將 html 上傳當靜態伺服器。


RDS

  • 當機器流量高達一定時,或者效能相關問題,我會開啟 RDS 的資料庫服務以分擔 EC2 的負擔。


CloudFront

  • 主要是配合 S3,將靜態網址的檔案實作 CDN,以加快網頁對於靜態檔案(圖檔)的下載。


Certificate Manager

  • 配合 CloudFront,來取得 AWS 所提供的免費 SSL 服務

- 後端 -


後端主要熟悉語言為 PHP、MySQL、Redis、ElasticSearch,對於 Node.js 主要是撰寫套件,所以未在專案上實際使用,而框架則是 CodeIgniter、自製框架 Maple,對於 Laravel 則是自我練習上使用,在專案上也不多經驗,

以下列出各個項目說明熟悉度:  


PHP

  • 從大三開始接觸,至今也有 8 年左右的經驗了,記得當時開發時版本為 5.4。
  • 畢業後開始專職工作時接觸的事 5.6 版本,目前所有專案也都支援到 7.0 以上。
  • 在對於自己的框架上,也使用 PHP 來開發 Command Line 工具,來達到有效管理。
  • 系統排程上也會使用 PHP 來實作相關 Log 備份等功能。


MySQL

  • 主要用來配合 PHP 做資料存取的功能。
  • 相關的 SQLite 也接觸過,但仍以 MySQL 為主。
  • 基本上都是使用 5.6 版本以上。 


Redis

  • 主要作為 Cache 是在解決效能問題上使用。
  • 當後端有大量存取時,預設都會先以 File Cache 來減少對於 MySQL 的資料庫存取,但需要調高效率時,則採用 Redis,因為對於硬碟讀取,Redis 是採用記憶體存取,所以效能會高一點。
  • 工作專案上有三個專案皆使用過 Redis 來配合調整暫存問題。 


ElasticSearch

  • 主要運用上專案的搜尋功能上,加強模糊搜尋的能力,另外也適當的減緩對於 MySQL 的讀取數。
  • 工作專案上有兩個專案皆使用過 ElasticSearch 來實作模糊搜尋。


Node.js

  • 主要皆是在前端套件上運用,所以後面「前端」會做說明。


CodeIgniter

  • 因為工作關係,基本上整個框架從頭至尾都熟悉過,所以後面延伸了很多自己的專屬框架,都會是基於 CodeIgniter 開發的。
  • 工作專案上有兩個專案皆使用過 CodeIgniter 框架,而在外包接案上也都蠻常使用此框架。 


OACI

  • 第一個自製的 PHP 後端框架,基於 CodeIgniter 所開發的,上面綁定了很多功能,如 PHP ActiveRecord 的 ORM、固定規則的 View,前端 Scss… 等。 
  • 外包接案上,皆是採用此框架。
  • 在工作專案上有兩個專案採用過此框架。 


Maple

  • 第二個自製的 PHP 後端框架,基於 CodeIgniter、OACI 所開發的,其中拿掉了 OACI 上多餘不必要的功能,以及採用最版本的 CodeIgniter 的內容,將其提升至 PHP 5.6 以上,故去除了多數不必要的判斷。
  • 此版本可以配合安裝 Maple 指令來達到專案管理,可以針對專案快速部署、建制檔案… 功能。
  • 自己開發 ORM 以取代 PHP ActiveRecord,將其不必要的功能拿掉,並且依據效能調整至符合需求。
  • 在工作專案上有兩個專案採用過此框架。


Laravel

  • 公司專案上使用,基本應用如 Router、ORM、Middleware。

- 前端 -


專任過一年的專職前端工程師,所以對切版學習較多,使用的工具主要有 JavaScript、jQuery、Node.js、Gulp、Compass、Scss,先前也持續半年每週在 Youtube 平台上直播寫程式,多數皆是在演繹切版的實作!


因為專案也未遇到效能問題,固皆以 jQuery 可以解決問題的狀況,所以才尚未學習近年流行的 Vue.js,另一部分是想在 SEO 做加強,所以就未學習 js Render 的方式開發,而自己切版的方式正好可以讓我對 HTML 結構有所掌握!


對於 webpack 則有練習過,在 React.js 與 Angular.js 則因專案未使用所以尚未熟悉,對於自己前端工具,主要有兩個 OAF2E 與 Ginkgo,兩者都是針對個人接案需求上所開發的,主功能就是快速切版。 

 以下列出各個項目說明熟悉度:


JavaScript

  • 除了 Selector 會使用 jQuery 外,對於 js 的處理,都會採用原生的 JavaScript 去實作。


jQuery

  • 從大學時期就開始使用,目前可以自己實作相關的 extend function,在外包接案上皆採用 jQuery 來實作前端功能。


Node.js

  • 後端的練習主要就是官方的文件練習。
  • 目前都拿來做 Npm 套件相關開發。
  • 套件目前主要用在個人前端工具 Ginkgo 上。


Gulp

  • 主要拿來做前端開發時的自動化處理工具。
  • 使用 Livereload 來監聽專案是否改變,並通知瀏覽器重新整理畫面。 
  • 配合 Gulp-Compass 來編譯 scss 檔案,不過後期改用獨立的 Compass。 


Compass、Scss

  • 主要是編譯 Scss 語言,將其 .scss 檔案轉換成 .css。
  • 目前個人前端切版皆採用 scss 切版。 


OAF2E

  • 外包切版專案皆是採用此前端框架。
  • 框架內沒有 bootstrap 等前端框架。
  • 主要採用 Scss jQuery 以及 HTML 來時做切版。
  • 採用 Gulp 來監聽專案,並作 Livereload
  • 採用 Compass 來編譯 Scss 檔案。
  • 利用 PHP,實作完成後部署至 AWS S3 的功能。


Ginkgo

  • 主要針對 OAF2E 做修改,簡化開發前的環境建置。
  • 使用 Node.js 取代 Gulp。
  • 利用 Node.js,實作完成後部署至 Github pageAWS S3 的功能。
  • 目前前端專案上皆使用此框架。

個人專案

基本上作品我皆有放在部落格上分享,這邊列舉比較大項目的 Side Project 出來,若想看更多作品可至我的部落格 ( https://www.ioa.tw/ ) 查看。

聊天地圖 LiveMaps

  • 這是一款可以在地圖上顯示線上使用者分別在哪邊,並且即時顯示他目前動態的作品。
  • 使用 Google Maps 呈現位置,再藉由瀏覽器的 navigator.geolocation 來取得用戶端位置。
  • 使用 Firebase,所以全部皆為前端工具完成,同時因為使用 Firebase,故訊息、座標、上下線皆是即時更新。
  • 版型自己從 Scss 一步一步實作刻畫出來的,使用 JavaScript、jQuery、Firebase js SDK 將畫面資料串接與呈現。

Paragraph image 06 00@2x
Paragraph image 06 01@2x
Paragraph image 06 02@2x

白沙屯媽祖 GPS  

  • 這是一款使用 GPS 回報座標,並在網頁上使用 Google Maps 呈現目前位置的作品。
  • 使用 GPS 裝置將經緯度座標回傳至伺服器。
  • 為了解決效能問題,大量使用 AWS S3 分散流量
  • 將路徑座標製作成 .json 檔案,並且上傳至 S3,網頁 Ajax 再去 S3 上取得最新的 .json 路徑檔案。
  • 網頁 .html 檔案亦可放在 S3 上,以減緩客戶端的 Request 量。
  • GA(Google Analytics)記錄到最高同時上線紀錄 5,343 人同時在網站上瀏覽。
  • 活動單日最高流量 117,258 人,當時後端機器是使用的機器為 AWS EC2 t2.micro 的機器,主要都是靠 S3 與相關服務。

Paragraph image 06 00@2x
Paragraph image 06 01@2x
Paragraph image 06 02@2x

Pokémon Go 補給站地圖

  • 使用 Android 再配合網頁開發的工具掃完全台灣的補給站。
  • 將補給站座標存至前端網頁的 LocalStorage,以減緩後端傳輸成本。
  • 使用 Google Sheets 試算表當 API https://goo.gl/yTdvmQ ),開放給網友們做管理巢穴資訊。

Paragraph image 06 00@2x
Paragraph image 06 01@2x
Paragraph image 06 02@2x

天氣地圖 Weather Maps

  • 爬取中央氣象局網站資訊。
  • 將全台灣各鄉鎮資訊與維基百科資訊作結合。
  • 講全台資訊先編譯出 .html 檔案,在丟至 S3,以減緩後端傳輸成本。
  • 固定時間爬取資訊,然後再更新 S3 上的檔案即可完成最新資料呈現。

Paragraph image 06 00@2x
Paragraph image 06 01@2x
Paragraph image 06 02@2x