TsungYing Lu (Webb)

Technical Project Manager / New Employee Mentor / Senior Software Developer @ Wistron Crop.

Taipei, Taiwan


Experience

Wistron Corp. / Sep. 2014 - Present (3 year, 9 month)

Wistron is a leading ODM company in Taiwan. My department focus on the software and internet area, seeking the innovation opportunities to assist our company to transform the industry to a high-value business model.

Technical Project Manager / Principal Engineer / April 2017 - Present (1 year)

  • Job Description
    • Provide technical guidance and coaching developers
    • Design the system architecture according to the requirements
    • Estimate project duration and human resources
    • Collaborate with PM, handle the tasks of technical side
    • Implement the sample code, boilerplate or prototype to help junior developer focus on implementation of functionality
    • Code Review
    • Ensure the on-time and on-quality delivery
  • Project experiences
    • Improvement of Internal DevOps Flow proposal  (Jan 2018 - Present)
      • GItlabCI / Kubernetes / Docker-composer
    • The Suggestion System for Kidney Dialysis (April 2017 - Dec 2017)


New Employee Mentor / Nov 2016 - Present (1 year, 5 month)

  • Job Description
    • New employee recruit and interview
      • Use S.T.A.R method to interview candidates
      • Analyze the benefits if they join our company
    • Design the training material
      • For fullstack developer
      • Two or three month training duration
    • Build relationship with mentees, help them have better know about their job
    • Assist the mentees to accomplish their training tasks
    • Feedback their weakness to the mentees
    • Assist mentees to show their accomplishments to higher-ups
  • Experience
    • Three graduate mentees so far

Senior Software Engineer / Apr. 2016 - May 2018 (2 years)

  • Job Description
    • Follow Technical Projecct Management to implement functionality in frontend
    • Programming well-designed, testable, efficient code
    • Code Review
    • Assist the junior developers
    • Survey new technical that request from the supervisiors
    • Hold workshop or seminar to share experience
  • Project experiences
    • Docker registry auth system  (Mar. 2018) 
      • using AzureAD as authN source
      • using Gitlab namespaces as authZ source
      • coding by Golang
    • The Suggestion System for Kidney Dialysis (Apr. 2016 - Apr. 2017)
      • Collaborate with UI designer, implement frontend layout
      • Collaborate with Data analysts, implement the information graphics / charts
  • Internal workshop and sharing
    • Using Electron to build a Single page application with React.js (Oct. 2017)
    • AWS Serverless service and DevOps (Apr. 2017)
      • S3 / API Gateway / Lambda
      • CodePipeline / CloudFormation
      • Router53 / CloudFront
    • AWS DevOps (Feb. 2017)
      • CodePipeline / CodeBuild / ECS / CloudFormation
    • The modern frontend web design (Dec. 2016)
      • from static web page to single page application

Software Engineer / Sep. 2014 - Apr. 2016 (1 year, 8 month) 

  • Job Description
    • Follow Technical Projecct Management to implement functionality both frontend and backend
    • Programming well-designed, testable, efficient code
  • Project experiences
    • IoT hub Dashboard
      • Set up the ActiveMQ as MQTT broker, and Sitewhere as IotHub
      • Implement the dashboard
      • Implement Android app as the IoT sensors for demo scenario
    • Running tracker system dashboard
      • Fetch the tracking data from restful API
      • Using Google Map to show the path


Experiences 00 00@2x 504900dc09d82f711fdb54cf5763251cab5193a844856da978b2b8f3907ecd5a

ASUS / July 2012 - Aug 2014 (2 year, 1 month)

ASUS is a leading computer company in Taiwan. My position was a Firmware engineer. As an Embedded controller (EC) engineer, we were using 8051 (MCS-51) assembly and C to programming on embedded controller (MCU).


Firmware Engineer

  • Job Descriptions
    • Developing and debuging of Embedded controller firmware for the latest generation platform.
    • Control the peripherals such as bettery charger current, fan speed, keyboard scan code, ambient light sensor...etc
    • Writing utilities application to improve development performance.
    • Asstisting Hardware engineer (EE) to identify the problem root cause.
  • Project experiences
    • Writing the firmware of a ARM based board, which is used for writing EC firmare into the ROM on mother board.
    • Refactor the original assembly codebase to C language.
    • Developing and maintaining laptop projects.

Experiences 00 02@2x d08cb731546334ac3e784c5845e368719bba256a127be86e720a634d798b8bb9

Education

National Taiwan Normal University, Jul 2010 - Jul 2012

Master of Engineering Degree

Major: Computer Sciencce

Experiences 00 00@2x 504900dc09d82f711fdb54cf5763251cab5193a844856da978b2b8f3907ecd5a

National Kaohsiung University of Science and Applied, Sep 2004 - Jun 2008

Bachelor of Engineering Degree 

Major: Mechanical Engineering

Experiences 00 01@2x 6daa47d1df70d315f129dcecdd562003831581c4cdd8f9c819aa22d4a24ae150

Certification


  • AWS Certified Solutions Architect - Associate Level (Apr 2017 – Apr 2019 License AWS-ASA-35173)
  • TOEIC - 710 (May 2014)

Skills / Tool


Frontend

  • React / Redux stacks
    • Immutable.js / reselect (selector)
      • Force the redux store immutable
      • Filter the props from redux store
      • Memoization (cache) the select function result
      • Reduce unnecessary re-rendering
    • Fetch API / Redux Sagas
      • Use Fetch API instead of traditional XHR API or other library, because it's natived and the syntax is more compatible with Generator or Async Await syntax .
      • Use Generator to control async function instead of Promise API to prevent callback hell
      • Use Put and Take API to integrate those side-effect flow into redux lifecycle
    • Pure Component
      • Reduce any unnecessary component re-rendering
    • Server Side Render (SSR)
      • Reduce the first loading time
      • Prefetch data by server, reduce the HTTP request in client device.
      • Integrate Server side router and React router to replace hash URL.
  • CSS
    • PostCSS / CSS Modules
      • Use postcss for more fine grained control of CSS relative plugins or preprocessors.
      • Use new CSS features before browser natively support it. (e.g. NextCSS, Sass, Less)
      • Use CSS Modules to force each CSS rule only available in each corresponding react components, prevent conflict and !important
      • Autoprefixer auto add the prefix for different browser such as -moz, -webkit and -ms
    • Flexbox and MediaQuery (RWD)
      • Use Flexbox as layout system instead of tables or float.
      • Integrate flexbox and media query to design for different resolution devices 
  • Webpack
    • Development mode
      • Hot Module Reload exchange (HMRe)
        • Update module's content when edit source files and keep react / redux states
    • Production mode
      • Code-Splitting
        • Separate source code and vendor code ,such as react and redux..., into different JavaScript file.
        • browser will cache the vendor js file to reduce fetch time.
      • Uglify
        • Replace the variable and function name by short characters to minify the bundle size.
        • Reduce the readability of production code 
      • Compression
        • Generate gzip files of web assets
        • Serve as static files and gzip in compiler time instead dynamically generate each time when server receive request.
    • General setting
      • Source map
        • Show the debug / error messages with original line number and file name in the source code, instead of the information in production code.
      • Use common setting as based config, then merge it with Dev or Prod configs
  • Babel 
    • Preset-env
      • Replace the preset-es201x, for latest features.
      • Dynamic scan the source code and fine grained control the installation of polyfill 
  • Coding Style
    • Eslint / stylelint
      • highlight the source code which conflict with coding style of team
    • Prettier
      • auto formating when saving source code
    • editorconfig
  • End to End testing
    • Puppeteer (Headless Chrome) + Jest (Runner)
  • Authentication / Authorziation
    • JSON-Web-Token(JWT)
    • pass by cookie or bearer header
  • InfoGraphic
    • D3.js and SVG
      • Using D3.js to calculate the scale and using SVG to implement graphic and charts from UI design.
  • Websocket
    • Ability of using websocket to send notification through mqtt protocal
  • Web Progressive Application
    • Limited knowledge of CacheStorage API for offline application.


Backend

  • Node.js
    • Web Server Framework 
      • Koa.js
        • Support yield or async await to control async behavior instead of callback hell from Promise API.
      • Express.js 
    • Router
      • Restful style routing
    • Static file serving
    • Secure HTTP Header
      • Using tools like Helmet to setting secure headers such as CSP, HSTS ... etc
    • Live Reload Server
      • Auto restart server when edit source code
      • tool: nodemon 
    • Package Management
      • npm / yarn 
    • Coding Style Checking
      • Node.js
        • ESlint
        • Prettier
        • editor config
    • Unit test
      • Use jest as tast runner
      • Writing mock function when the function have side-effect
    • API test
      • Use jest to write auto api test
      • Use Postman and Curl to manual test
  • Golang
    • Web Server Framework 
      • Gin 
    • Live Restart Server
      • air
    • Package Management
      • govendor (golang)
        • Project specific package manager, instead of using `go get` all the package store in global scope (gopath workspace)
    • Coding Style Checking
      • go fmt
    • Integrate AzureAD and fetch user info by Graph API, to implement the auth process of docker registry
  • CORS knowledge
    • Share credentials cookies cross different domain
      • the root domain should be the same such as api.example.com and www.example.com
      • setting Access-Control-Allow-Credentials header
      • origin should be the root domain, not  *, 
      • setting credentials header in request side
  • HTTPs / HTTP2
    • use LetEncrypt to sign certification
    • self-sign certification
  • Database
    • Database Normalization
    • Basic CURD skill
  • AAA server
    • FreeRADIUS
      • Integrate with AD
      • Integrate with CAS
      • Integrate with local database
  • MQTT
    • use Mosiqutto and ActiveMQ as broker


DevOps

  • Docker
    • Able to set up a Docker Private Repo, using company authentication.
    • Able to set up authorization so user can only use the images store in the namespace which they have permission to access.
    • Use node-alpine as base image to minimalize the  image size of Node.js production
    • Use Docker Multi-stage and scratch image as base image to minimalize the image size of Golang production
  • Jenkins
    • Able to use jenkinsfile to control pipeline job
    • Able to integrate jenkins pipeline stage with Gitlab pipeline
    • Trigger Jenkins to run unit test whenever someone push code to source branch
    • Trigger Jenkins to run integration testing, API testing, end to end testing whenever someone launch a merge request
    • Trigger Jenkins to build production image when the merge request have been accepted 
  • Proxy Server
    • Tools I have use:
      • Nginx
      • HA Proxy
      • Caddy
    • Reverse Proxy Server
      • Multi Service Share the same port on IP address
    • Load Balance
  • DNS Setting
  • Kubernetes Deploy
    • Using Kubectl deploy pod, service and ingresses

AWS Cloud Service

  • Serverless Service
    • S3
      • Web / static file host
    • API Gateway
      • API router
      • redirect to lambda function or other service 
    • Lambda
      • Integrate with API Gateway as API handler function
  • CloudFormation
    • Writing yaml file to auto provision the AWS infra
  • Code Pipeline
    • CI / CD service for AWS service
    • Source stage: Github / S3 / CodeCommit
    • Build stage: Jenkins on EC2 or CodeBuild
      • Run unit test / API test / end2end testing
    • Deploy stage: CloudFormation + ECS
  • Router53 (DNS)

Side Project


Crawling data from Taiwan Stock Exchange, and send notification by email when the condition is true. (2015)


Tool: Python, Mongo

Language


Mandarin

Native


Hokkien

Proficient


English

Intermediate (writing, reading)

Basic (speaking)

Competition Award


Taiwan Hackathon
@Shenzhen, China (Oct 2015)

  • Project: Using Mobile Camera and Matlab Algorithm to detect glaucoma probability
  • Role: Fullstack developer
  • Award: Best Presentation


Taiwan Hackathon
@Taipei (Dec 2015)

  • Project: Taipei Art and Culture Events Guided Tour App Using AR tech 
  • Role: Backend API developer
  • Award: Best Presentation