Dmilx9viwyj43gjntuxv

林源韋

厭倦原本一成不變的實驗室生活,因緣際會下一頭摘進了程式當中,喜歡學習新技術,嘗試各種可能。

開發後端主要rails前端主要以Angular為主,也碰過react,也玩過一點solidity,對於效能的調效上也有一些經驗。

 [email protected]

Special Experiences
  1. 參加區塊鍊Tron dapp比賽獲得優選(Pixel Painter) --> 需要下載tron的錢包TronLink
    這個專案從無到有花了約三個禮拜,其中solidity(智能合約)跟React都是第一次接觸的東西,在這個專案不只學習了React,還對智能合約有了深一步的認識,在開發途中也經歷了三次tron測試鍊全部重置的狀況。

  2. 使用rails開發區塊鍊ico服務
    一般的ico通常都是直接在以太鍊上以正能合約的方式進行(流程為將要購買的以太幣量轉入合約中,合約自動發放相等值token給該帳戶),這個專案主要是能夠以不同幣種購買ico所發的token,客戶可以決定要開放使用哪一種方式購買,會自動抓取各種不同鍊的區塊,確認是否有新的交易,並將轉入的貨幣轉換成穩定貨幣轉給客戶,麻煩的地方在於各個鍊同步跟發送的方式都不盡相同,需要研究每種不同貨幣的轉換方式。

  3. 使用onesignal設計類似FB跟Ig的推播機制
    這個是當作app(android跟ios)的server串接onesignal來接收app的使用者資料,做分類,控管,做成類似FB跟ig那樣的推播機制,像是使用者訂閱或購買的文章有新文章上線或有人對你發文發言表達情緒時,會推播給該使用者,三日未上限會推播給使用者他喜愛的文章,並將這些功能包裝成一個service object,方便後續維護修改。

  4. 更新rails版本,且一併更新所有gem
    當時我們rails預計從4.1.11~4.2.9算是一個小版本的更新,當時專案裡面的gem有些版本蠻舊了,就想說順便一起更新,當時的專案已經開始快10年左右,累積的gem已經超過了80個,當時我們一個一個gem去看他各個版本的差別,有些可以完全無痛升級,有些花了非常多的時間去更新,像是cells這個gem,他的寫法完全需要重寫,且原本使用時不需要特別宣告載入的helper,後面該gem的作者認為這樣太過肥大,改成需要宣告載入的helper,最後花在更新gem的時間反而遠遠超過了更新rails的時間。

  5. 使用schell script開發同步更新遠端server小工具(github)
    會開發這個工具主要是因為在工作上常常會有需求需要同時刪除七個網站的使用者(七個網站都有使用rake 來刪除使用者),每次都會需要到每個網站的server執行一次相當浪費時間,就上網學習schell script開發了這個小工具,也順便做了refactor,這個小工具後續可以在優化將要執行的function跟網站都變成動態輸入。

Experience


Lestar 後端工程師: 2022年9月 ~ 2023年7月

在這邊對於效能的要求比較高,當時這個網站每天的下注紀錄會到千萬級別,需要對大量數據去做query,並要能夠匯出query的資料,有用到的技術像是:
  1. AWS自動擴展AUTO scaling
  2. 對postgres做partition並在query時去搜尋相對應的table
  3. 使用Celluloid::Future去做多線程query
  4. 建立排程每天固定時間建立像是user daily或是channel daily的資料
  5. 匯出資料時以不同分頁的方式分批抓取資料匯入s3,並能夠單獨重新抓取失敗頁面

  • 遊戲數據後台:使用rails建立遊戲數據後台api,這個網站是用來紀錄並分析使用者的行為,讓運維能夠依據資訊去做後續的行銷調整,並能夠建立跟設定無限階層代理。
  • 使用aws lambda去同步資料庫,有另一個網站的資料需要同步到我們網站上,並且資料表跟我們這邊不同,且不能直接拿database來使用,只能透過api的方式同步更新,我們用nodejs 使用AWS lambda來同步更新資料。


新愛世科技: 2019年6月 ~ 2022年9月
  在新愛世科技主要一個人負責了以下幾個網站

  • AlphaLoan這個網站是利用數據分析,分析出使用者申請各家信貸會拿到的額度,利率跟過件率,在這個網站主要負責前後端還有分析跟第三方銀行程式的串接。自己設計了一套流程優化了CRM幫助使用者申貸的流程,簡化了約70%的時間,並幫助CRM快速找到使用者需求。
  • 來一張:這個是信用卡的比較網站,這個案子比較特別的是有參與了蠻大部分的商業邏輯的設計,包括一開始分析條件的確立,分析結果的評選,跟後續UIUX的改動,本身負責了前端(Angular)後端(rails)跟server還有跟PM討論產品的發想。
  • 貸先生:這個網站主要是彌補AlphaLoan流失客群的問題,是使用來一張的基本架構來做,在3個禮拜裡面從確認需求到實際上線。
  • 信用管理指南:這個網站是使用了wordpress來架站,主要負責維運,需要做UIUX的更動,seo優化,並能夠完成寫手的需求。

共識科技(Joyso): 2018年5月 ~2019年6月

  1. 開發維護交易所功能(joyso),主要是負責開發後端(Rails)api,有時會開發前端(Angular)功能處理跟後端有關的業務邏輯。
  2. 處理交易所撮合的lock機制。
  3. 參加區塊鍊Tron dapp比賽獲得優選。
  4. 擅於使用SQL撈取資料,像是使用select搭配SQL語法或是subquery,來有效降低query次數跟速度,大幅提升效能。
  5. 使用ActiveModel::Validations驗證相對應路徑的api參數
    新增一個validators資料夾用ActiveModel::Validations驗證相對應路徑的api應帶入參數,產生一制的callback。
  6. 使用Action Cable做WebSocket,即時更新交易所訊息。
  7. 使用rails開發區塊鍊ico api,同步各種區塊鍊(目前同步比特幣跟以太幣,後續有需求可再擴充),處理區塊鍊fork問題,自動化購買,轉幣流程。

T客邦: 2016年12月 ~ 2018年5月

  1. 開發維護 7 個以上月流量百萬以上產品,負責網站的所有事物,重開發網站的前後端,到AWS規劃設定,到nginx設定部署,負責網站所有大小事務。
  2. 持續研究seo跟效能優化,當時有使用google Data structure跟amp,加強seo。
  3. 研究新技術,適時導入網站。
  4. 半年以上的帶人經驗,協助指導新進員工。
  5. 跟第三方工具的廠商接洽,串接第三方工具,將第三方EDM系統整合進後台。
  6. 自學開發tools,方便業務流程 。
  7. 使用chef 管理15台aws server。
  8. 內部 Gem 的擴充與維護。

來一張

這是一個信用卡的比較網站,負責了前後端的開發跟一部分商業邏輯的發想,前端使用angular後端使用rails,前端使用universal跟pm2來做SSR,這個網站參考了國內國外的網站去設計資料庫。

主要的部分在於如何計算信用卡的回饋金額,因為信用卡的回饋項目跟分類較多,後端設計出用一個sql query就可以計算出不同回饋條件的信用卡。

這個網站用了8個月時間從虧損到損益兩平在到每個月有穩定獲利並能夠放大,跟pm一起發想整個網站的走向跟設計,並快速測試是否work。

Paragraph image 00 00@2x
Paragraph image 01 00@2x

二手車商後台前端

這是第一個使用angular的案子,主要是串接工程師傳過來的api,這個案子頁面共有100多頁,花了差不多兩個月上手angular並完成這個案子。



防疫旅館小幫手

這是防疫旅館媒合的網站,使用rails做前後端,這個案子的時間非常趕,花了3天的時間快速上線,後續也一直幫忙調整優化,跟配合行銷優化使用者體驗。

Paragraph image 00 00@2x
Paragraph image 01 00@2x

lovedoll

這是一個成人娃娃共享的網站,這個案子題目蠻有趣的,也是使用rails架站,快速上線,並配合行銷優化使用者體驗。


行腳沖繩

這個專案是日本旅遊電商平台,販售日本旅遊所需的服務,像是票卷,租車,訂房,等等,這個網站是跟另一位夥伴共同開發,另一位夥伴主要負責畫面的設計跟切版,我負責資料庫設計規劃,跟前端的串接。

Paragraph image 00 00@2x
Paragraph image 01 00@2x

聽說

這個案子主要是當做app的server兼作官方網站,是共同開發,前端差不多佔20% 後端佔35%左右,這個案子印象比較深刻的功能是使用api串接onesignal做推播app的功能,設計成像fb跟ig一樣的推播機制。



Pixel Painter

這個程式是在Tron上面的dapp開發,主要用到的技術有React跟solidity(這個是開發智能合約用) ,這兩個都是第一次使用,這個專案算是蠻緊湊的,這個案子最大的收穫是在短時間內學會使用新的技術,因為參加比賽的關係,只有三個禮拜左右的時間開發。


Paragraph image 00 00@2x
Paragraph image 01 00@2x

C&D台灣批發鞋城

這個專案是從中間接手,主要負責前後台規劃設計,原本的架構設計的過於複雜,接手後簡化資料庫設計跟前端畫面,重構code,排除bug,從寫撈資料querry,讓速度提升約60%以上。

讚爾藝術

這個網站是共同開發,後續業主找認識的朋友接手,做過印象比較深刻的功能有:

  • 使用plupload製作媒體庫 ,方便業主管理資料
  • 將CSV文件導入數據庫(使用媒體庫的圖像和視頻)
  • 判斷使用者ip屬於的國家顯示不同的前端畫面
  • 使用rubyzip壓縮下載媒體庫。

Paragraph image 00 00@2x
Skills

back-end

  • 登入功能
    登入功能有做過使用session的登入(devise),也有使用jwt方式交換token登入,也做過像FB,google的第三方登入。
  • 權限劃分
    有使用rolify來做使用者多權限的規劃
  • 權限控管
    這邊通常專案我習慣使用cancancan這個gem,但也自己手動做過一個類似cancancan的權限控管功能
  • twillo來發送簡訊認證
  • Nokogiri網路爬蟲
  • Ransack搜尋功能
  • 串接FB api跟sdk
  • 使用第三方email服務(Mailgun / Mailchimp / aws-ses)
    第三方email通常我會選用Mailgun,Mailchimp比較會使用在訂閱電子報時,使用者輸入資料使用
  • 使用gem製作會員後台(rails_admin / activeadmin)
  • 檔案上傳串接aws s3(Carrierwave / Paperclip)
  • server cache跟html cache機制(使用cells)
  • 資料庫欄位i18n多國語系(globalize)
  • 第三方金流串接(智付寶 / 智付通 / 綠界)
  • 串接Google Map查詢飯店地址
  • 使用paper_trail記錄物件更改紀錄
  • 統一api的回傳格式
    (jbuilder /active_model_serializers)
  • 第三方工具串接(Rollbar / Slack / newrelic / airbrake)
    實作過同步各個第三方工具的訊息到slack,可以方便觀察server狀態
  • 用aasm做有限狀態機
  • 物件導向(services / 抽象化物件)
  • 熟悉Rspec測試
  • 使用case server整合7個網站的會員資料


 

  • 串接google聯播網託播廣告並修改dfp製作gem(dfp)
  • Sidekiq使用
  • 靜態ruby框架middleman使用串接google表單當作資料庫
  • 訊息推播FCM(service work)
    這邊有使用過原生service work做網站推播,也有使用過onesignal的服務推播手機app,方便控管。
  • 使用rubyzip跟FileUtils製作動態生成的html
  • 網站SEO設定(Metatag / friendly_id / Sitemap / google structured data)
  • 使用google amp來加快內容是網站速度跟SEO排名
  • 使用PWA來製作仿app網站
  • 升級rails從4.1.11到4.2.9並更新相關gem
  • 使用asset_sync來設定不同環境上傳檔案路境
  • 批次寫入資料庫,簡短資料上傳時間
    當需要批次新增修改的功能,檔案量大時會花費相當長的一段時間,有使用過activerecord-import gem,也使用過原生的sql語法,來做批次寫入資料庫的功能。
  • 熟悉固定排程
    有使用過whenever,sidekiq-cron,rufus-scheduler來做固定排成的功能。
  • 熟悉非同步事項處理(active job)
  • 使用Action Cable做WebSocket

  • 使用python selenium 來做爬蟲,動態爬FB資料

  • postgres使用partition,優化query效能

  • 使用Celluloid::Future做多線程query



front-end

  • 熟悉Angular並且使用universal做SSR
  • jquery/javascript/html/css
  • Bootstrap 
  • Ajax 
  • Semantic-Ui
  • RESTful API 串接前端資料
  • 使用Lazy load方式做資料或圖片延後抓取
    有用過js自己做了一個類似jquery lazy load套件。
  • 使用Cropper讓使用者能在後台裁切圖片並同步顯示
  • 製作驗證碼機制(gooel驗證 / Geetest)
    會從gooel驗證換到Geetest是因為在大陸google的服務很多都會被擋掉,才使用Geetest當作第二方案。
  • 圖片輪播機制(carousel / Lightbox)
  • Sortable對物件做任意排序,並回傳排序順序
    這個有使用過js套件跟rails的gem,在使用gem的時候因為客戶需求更改,希望能夠將新增的物件的排序更改為第一個,有把gem拉回來做客製化更改。
  • google AMP網站製作
    amp主要是會使用內容網站上,是依據google提供的amp api去建構網站,在amp網站中不能使用任何js,只能使用amp api提供的js,在使用上會限制蠻多。


git

  • 熟悉git flow跟github flow流程
  • 熟悉git add、branch、checkout、merge、rebase、 reset、stash、push、cherry-pick、pull、init、tag、fetch、--force


Server

  • 熟悉 Nginx / Passenger / Capistrano 自動化部署 (曾經網站被ddos,有設定黑名單機制跟每秒同ip可造訪次數)
    因為前公司是使用chef同步server的套件,在ngix的設定上,會比較熟悉,之前遇到ddos時,是設定每分鐘能對網站發送request次數,來判斷使否為ddos,且設定白名單機制,排除特定對象。
  • 熟悉AWS(EC2 / ELB / Load balance / RDS / S3 / AMI / IAM / AWS cloudfront)
  • 熟悉Google Cloud Server
  • 熟悉 Cloud Flare 設定 及SSL


Tools
  • 使用Chef同步管理遠端server套件
  • 用swap釋放記憶體解決staging server內存不夠問題
  • 自製shell-script同步7個網站15台server會員資料
  • 使用Docker管理不同專案