diff --git a/README.md b/README.md index f49deb1..c4a51e7 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,9 @@ ## 🧭 Table of Contents - [✨ Features Added](#-features-added) +- [⚡ Run Locally](#-run-locally) - [📝 Add a New Article](#-add-a-new-article) +- [🏞️ Add a New Album](#-add-a-new-album) - [🤝 Contributing](#-contributing) --- @@ -24,6 +26,15 @@ +--- + +## ⚡ Run Locally + +```bash +npm install +npm run start +``` + --- ## 📝 Add a New Article @@ -36,7 +47,7 @@ To add a new article: --- -## 📝 Add a New Album +## 🏞️ Add a New Album To add a new album: @@ -52,6 +63,6 @@ To add a new album: ## 🤝 Contributing Have cool ideas or spotted something to improve? -Feel free to [open an issue](https://github.com/truethari/reactfolio/issues) or fork the project and make it your own! +Feel free to [open an issue](https://github.com/stanleyshen2003/me/issues) or fork the project and make it your own! > Let’s build something awesome together 💡 diff --git a/public/albums/dragon/49.jpg b/public/albums/dragon/49.jpg index 00987c3..7937ad5 100644 Binary files a/public/albums/dragon/49.jpg and b/public/albums/dragon/49.jpg differ diff --git a/public/albums/dragon/61.jpg b/public/albums/dragon/61.jpg index 7937ad5..58ad0da 100644 Binary files a/public/albums/dragon/61.jpg and b/public/albums/dragon/61.jpg differ diff --git a/public/articles/ASML/architecture.png b/public/articles/ASML/architecture.png new file mode 100644 index 0000000..d7dce4f Binary files /dev/null and b/public/articles/ASML/architecture.png differ diff --git a/public/articles/ASML/johnnyesther.jpg b/public/articles/ASML/johnnyesther.jpg new file mode 100644 index 0000000..a0a7148 Binary files /dev/null and b/public/articles/ASML/johnnyesther.jpg differ diff --git a/public/articles/ASML/johnnyhenry.jpg b/public/articles/ASML/johnnyhenry.jpg new file mode 100644 index 0000000..cc363c8 Binary files /dev/null and b/public/articles/ASML/johnnyhenry.jpg differ diff --git a/public/articles/ASML/pastaio.jpg b/public/articles/ASML/pastaio.jpg new file mode 100644 index 0000000..514b943 Binary files /dev/null and b/public/articles/ASML/pastaio.jpg differ diff --git a/public/articles/ASML/pipeline.png b/public/articles/ASML/pipeline.png new file mode 100644 index 0000000..2f90885 Binary files /dev/null and b/public/articles/ASML/pipeline.png differ diff --git a/src/components/common/footer.jsx b/src/components/common/footer.jsx index e92253a..a705abd 100644 --- a/src/components/common/footer.jsx +++ b/src/components/common/footer.jsx @@ -22,7 +22,7 @@ const Footer = () => { Articles
  • - Album + Albums
  • diff --git a/src/data/articles.js b/src/data/articles.js index 2971ba1..9fcec42 100644 --- a/src/data/articles.js +++ b/src/data/articles.js @@ -1,9 +1,9 @@ import computerAssembly from "./myArticles/computerAssembly"; +import ASML from "./myArticles/asml"; - -const myArticles = [computerAssembly]; +const myArticles = [computerAssembly, ASML]; export default myArticles; diff --git a/src/data/myArticles/asml.js b/src/data/myArticles/asml.js new file mode 100644 index 0000000..b62745b --- /dev/null +++ b/src/data/myArticles/asml.js @@ -0,0 +1,245 @@ +import React from "react"; +import notion_styles from "../notion"; + +function ASML() { + const basedir = process.env.PUBLIC_URL || "/me"; + + return { + date: "26 June 2025", + title: "ASML Intern 之旅", + description: + "這算是真外商初體驗,公司內部的氣氛真的很好~ 有機會的話會想回來正職😍", + type: "Work", + style: notion_styles, + keywords: [ + "Internship", + "ASML", + "Stanley", + "Stanley Shen", + ], + body: ( + +
    +
    +

    這算是真外商初體驗,可以感受到公司內部的氣氛真的還不錯 🤸‍♂️

    +

    +

    Some information

    +
      +
    • Intern Period - Jan. 2025 ~ Jun. 2025
    • +
    +
      +
    • Location - Linkuo
    • +
    +
      +
    • Position - Software Engineer Intern
    • +
    +

    +

    Table of contents

    +

    + +

    Application

    +

    我大概是在 10 月底申請的,差不多在 Linkedin 職缺 post 之後 10 天。主要面試流程有

    +
      +
    1. HR 電話 - 告知一些事項&跟你用英文聊一聊
    2. +
    +
      +
    1. Online test - 主要考 OOP 和一些程式基本常識,有一題 coding 題,我那時候拿的是 O(n) 就可以的 Fibonacci
    2. +
    +
      +
    1. Onsite 面 - 主要分兩場,一場是 team lead Jerry 先來聊一些非技術話題,另外一場是 team member Jeff & Randy 聊一些技術 (做過哪些東西,OOP 觀念,design pattern) 和一題白板題 (簡單的那種)
    2. +
    +

    大概 D20 就 offer get,在眾多公司中算是效率派

    +

    Team

    +

    On-board 之後可以看到 Teams 上有一串部門名稱,我的是 BL-Apps MPC D&E PWD PS ACE ,其中 BL-Apps = Business Level Apps,D&E = Development & Engineering,其他都不確定是什麼意思。跟其他部門溝通的時候,通常就說 D&E 他們就知道了 (他們也不會知道你後面那串是啥)。

    +

    +

    下面的訊息是我理解的,不保證全對 😅

    +

    D&E 內部也有很多部門,我接觸的到的有 YieldStar 相關的部門 *3、VCP (Virtual Computing Platform)、Litho Insight (我的 team,以下簡稱 Litho),平常都跟他們換再一起坐,所以認識了一些他們的人 (Link: 我們的大老闆 Charles)。我的 team 做的是機台上執行的程式,可以想像成是機台按一個按鈕後,機台就會跑我們寫的一些 function,他們把這些 function 稱為 job,台灣 team own 大概 8 個 job。Team 內有在敏捷開發,大概是三個月(not sure),屬於 PI (Program Increment),每天早上 10. 固定 daily scrum (10 min),大概講一下昨天做了什麼和今天打算做什麼,是一個可以了解誰跟誰在合作&在做的好機會。

    +

    +

    Team member 有 (照順序) Jerry, Jimmy, Ethan, Randy, Jeff, (me), Pei-Yi, Pei-Yi, Bart, York。

    +
    my role models
    +

    他們都是我的 role model,工作認真溝通效率高,氣氛歡樂又持續有產出,也給了我很多職涯、學業、生活 (這個最多,吃飯常聽他們的帶娃日常) 的建議。

    +

    Mentor

    +

    我的 mentor 有兩個 - Jerry & Jeff。兩位 mentor 平常都挺忙,不是在開會就是要準備開會了,我有問題的話都是問 Jeff,每次打開 teams 的時候他幾乎都是紅圈圈 XD。

    +

    一開始剛進來的時候真的非常感謝 Jeff 給了很多支援,不管是 maven settings 不 work 或是遇到各種 compilation or VDI error 他都會陪我一起找問題,總之 Jeff 給人一種 so polite so patience 的感覺,如果以後有機會跟他一起工作一定很快樂 😂

    +

    Jerry 是 Litho team 的 group lead + scrum master,感謝他常常來非常慈祥的來關心我的身心健康,然後每次聚餐完他都會很 man 的跟我說學生不用付錢,嗚嗚嗚 Jerry 你是懂窮學生的ㄚㄚㄚㄚ謝謝老闆🤧

    +

    Tasks

    +

    大概講一下我做了什麼,純 tech 區,但由於一些 privacy issue,我好像也不能寫太 detail,就大概寫吧~

    +

    Java Migration

    +

    會有這個 task 是因為 Java 8 LTS 只到 2030,公司一直有在說要從 Java 8 到 Java 11,但畢竟這件事真的很麻煩,也怕會出現一些預料之外的 impact,所以到現在都還沒做。我主要做的是研究 OpenRewrite 和遷 Java 11 的 possible effect。

    +

    OpenRewrite 算是很好的 refactor 工具,有 support maven,也有負責做 migration 到 Java 11 的 recipe。實際把他裝上去 & 跑下去之後發現有很多 dependency 的東西沒有處理好,最主要的問題是這個 recipe 只會改一些 public & well-known 的 package,但公司內很多的 package 都是公司自己 build 的,如果真的要用的話,需要從最底層的 function 開始遷,遷完還要順便把更新好的部分加進 recipe,總之不是我一個小小 intern 能做到的,最後研究 migration 這件事就交給其他部門了。

    +

    這邊要感謝 Jeff for all the support,我在試著 compile src code 的時候平均 1hr 就去 ping 他一次問他該怎麼辦,最後也成功 compile 了 🥂

    +

    Performance Tool

    +

    這部分有點複雜,簡單來說我做了一個讓測試流程更加快速的工具。一個 job 從編譯到測試的流程有以下幾步

    +
      +
    1. trigger build with bamboo
    2. +
    +
      +
    1. pull, retag, and push the image to the correct repository on repo node
    2. +
    +
      +
    1. change running image on management node
    2. +
    +
      +
    1. trigger the job with http requests and several documents as input
    2. +
    +
      +
    1. query log in splunk
    2. +
    +

    當更新新的版本的 image 時,其他 team 會做 performance test,分析這次更新有沒有造成哪個部分變慢或用超過限制的 cpu/mem。

    +

    這邊先介紹三個 tool

    +
      +
    1. + Automated Job Testing Framework (AJTF) (for step 4) +

      這是其他 team 測試我們的時候用的工具,透過設定要跑的 image,提供自動設定 input documents & trigger job 的功能

      +
    2. +
    +
      +
    1. + Performance Analysis (for step 5) +

      Litho team 做的工具,可以用來撈 log 並 compare 兩個 image 跑的結果

      +
    2. +
    +
      +
    1. + Performance Runner (for step 4 (partial)) +

      Litho team 做的工具,用來自動 trigger job,但要先把 document 設定好

      +
    2. +
    +

    我的目標是要把 step 3, 4, 5 串成一個工具

    +

    最後成品的功能有

    +
      +
    • run images given a list [image 1, image 2, image 3…]
    • +
    +
      +
    • run two images & compare with Performance Analysis (tool 2)
    • +
    +

    Technical detail 不敢多說,放個圖自己體悟

    +
      +
    • + Architecture +
      architecture
      +
    • +
    +
      +
    • + Pipeline +
      pipeline
      +
    • +
    +

    這份主要對接人是 Pei-Yi & Jeff,感謝 Pei-Yi 在裝 AJTF 時候給了很多幫助,也感謝其他給了很多 tool enhancement 的建議 or feature request。

    +

    Disclaimer - 這圖是我用自己電腦畫完傳進公司電腦的,希望沒有 privacy issue。

    +

    Graph Creation

    +

    我老闆給我了一個 request - 希望可以有一個 platform 可以透過拉 block 畫流程圖,並讓 block 有某些功能 (點下去執行 code / 打 HTTP request)。參考了 KNIMEJavaFX w. Springboot,結論是做得到但很麻煩要自己刻,所以最後沒有做。

    +

    心得

    +

    Company Culture

    +
      +
    • + Speak up +

      ASML 是荷蘭商,作為一個注重人權的歐洲商,他們非常鼓勵 “Speak up”。我覺得這件事真的是很難在其他一些公司見到,我有夢到過在一些公司只要 speak up 後員工第二天馬上被搞,主管 HR 什麼的全部關心你,所以能真的看到有些人 speak up 對我來說其實真的很酷。在我入職的第一天,我收到了 ~10 封相同 title 的信,內容是關於一個討論串 “Why is it so hard for you guys to clean up after lunch”,就是一個外國人看不下去有人不收盤子直接在公開討論群理性討論 (開嗆),下面其他人也開始跟著討論 (陰陽怪氣),或許在某些公司這些行為會被認為太出風頭,但在 ASML 他們真的會 respect 敢於發表自己想法的人 (其他人不知道但高層會 & 我會),雖然有些東西 speak up 可能不會有人理,但一定不會有人因為你發表了自己的看法就搞你。

      +
    • +
    +
      +
    • + Working style +

      這東西其實跟公司 & team 的風氣有很大的關係,在事情都做完的時候,工程師們會

      +
        +
      1. 硬要裝忙怕被其他人講閒話
      2. +
      +
        +
      1. 聊天吃餅乾喝茶,想做啥就做啥
      2. +
      +

      ASML 很明顯的是 2,可能是因為有 daily scrum 所以每個人每天做啥大家都心裡有數,知道每個人做了啥就不會覺得其他人過太爽 …?

      +

      我其實很喜歡我的 team 的工作狀態,該認真的時候超級認真,該放鬆的時候超級放鬆,每天都過的還算快樂,Jira 上的 task 每天會都往前移,工作累了就請個假去放鬆一下,這樣的狀態大概是我心中最有效率的工程師的狀態吧~

      +
    • +
    +

    Shuttle Bus

    +

    因為公司在林口,然後我住新竹 or 台北,所以去上班都搭交通車。平均一趟要 2hr,所以當天來會大概就要花 4hr。我通常在新竹的話都會搭 6. 的車,在台北搭 8. 的車,然後固定都搭 5. 的車回家。這個經驗告訴我絕對要選離家近的公司,either 換公司 or 換房子,不要再挑戰自己的睡眠極限了, 😡 ← 這我的肝

    +

    Job Description = 計畫趕不上變化

    +

    當時在 apply 這個 position 的時候,JD 寫說需要會 Python + TypeScript,HR 甚至跑來確認我會,但我其實根本沒自己寫過 TypeScript (大概是一個只 trace 過別人的 code 的程度,所以我大概花了 30 分鐘看了 TypeScript crash course,然後回 HR 說我看過但沒寫過,然後 HR: OK 你跟 engineer 們聊吧~ 大概到實體關的時候,正職們就說其實他們還沒進入 planning 階段所以也還沒想好要讓 intern 做啥,結果 TypeScript 最後根本沒出現過 XD。

    +

    Key takeaways

    +
      +
    1. 看到 JD 不要怕,不管會或不會,都可以試著投投看,畢竟有些東西只是經驗而已,來了就會了,小 intern 就是來學東西的~
    2. +
    +
      +
    1. 公司真的很忙,task 有時候做一做上面的人算一算會發現這事不該做,簡單來說就是 … 計畫趕不上變化
    2. +
    +
      +
    1. + 面試小技巧 +
        +
      1. + HR 問 +
          +
        • 我很熟 → 我做這個 … 年
        • +
        +
          +
        • 我會 → 我有很多經驗
        • +
        +
          +
        • 會一點 → 我會
        • +
        +
          +
        • 聽過但不會→ 我聽過,是 … 嗎,我有碰過一點
        • +
        +
          +
        • 完全沒聽過 → 說掰掰
        • +
        +
      2. +
      +
        +
      1. + Engineer 問 +
          +
        • 會 → 拿 project 出來
        • +
        +
          +
        • 不會 → 想一些類似的經驗拿出來講
        • +
        +
          +
        • 完全沒聽過 → 開問
        • +
        +
      2. +
      +
    2. +
    +

    Disclaimer for 3.

    +

    講這個不是說鼓勵大家欺負 HR 不懂所以開始膨脹,主要是因為

    +
      +
    1. 你的競爭對手也會膨脹 … 而且 HR 不會問 detail 所以也聽不出來,這些回答有時候會給面試者一種高下立判的感覺
    2. +
    +
      +
    1. 其實這種會不會的自我認知因人而異。當我升大學時,有人問我會不會 Python 的時候,我會毫不猶豫的跟他說我會,現在我 Python 用的很多,但我發現自己競程題目用 Python 打還需要查 reference,所以有人問我會不會我反而只會說會一點點。這個就類似 Dunning-Kruger effect,有興趣的可以自己 google 一下~ 所以會不會這種事就交給專業的去 evaluate 吧,HR 那種只是單純問會不會的就自信的說會吧~
    2. +
    +

    Special Thanks

    +

    Esther

    +

    感謝你讓我想起還有 ASML 這個公司可以投,感謝 apply 時的各種幫助,感謝 ASML 大前輩帶我們去打桌球,總之感謝 all the support!

    +

    Johnny

    +

    感謝你每天都陪我打桌球 (其實是 Esther 走之後才每天打的),感謝平常陪我聊天講屁話抱怨 (我講真 ASML 少了 Johnny 我真的會無聊死)。我跟 Johnny 算是校友,但我是真的沒想到跑去林口還是能遇到陽明的 bro,總之很高興認識你,我下次依舊會用桌球打爆你,祝 everything 一切順利!

    +

    Henry

    +

    感謝你會在要搭車的時候等我,感謝你在 ASML 認出我 (btw 我一開始真的沒認出他,應該說我根本不知道這人 … 我以為我在實驗室是個小透明),總之跟這人的緣分挺奇妙的,祝你接下來一切順利嘍~ (2025 Fall 繼續交大見)

    +
    Johnny & Esther
    +
    Johnny & Henry
    +
    +
    +
    + ), + }; +} + +export default ASML; diff --git a/src/data/myArticles/computerAssembly.js b/src/data/myArticles/computerAssembly.js index 75ea64a..9961032 100644 --- a/src/data/myArticles/computerAssembly.js +++ b/src/data/myArticles/computerAssembly.js @@ -26,16 +26,16 @@ function computerAssembly() {

    Table of contents

    Components

    以下是我買的元件,總計 $33210

    diff --git a/src/data/notion.js b/src/data/notion.js index 938a1c0..bd236e4 100644 --- a/src/data/notion.js +++ b/src/data/notion.js @@ -387,7 +387,29 @@ const notion_styles = { fontSize: '0.75em', marginTop: '0.25em', }, - '.sans': { fontFamily: 'ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI Variable Display", "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"' }, + '.img60-100': { + width: '60%', + }, + '.img70-100': { + width: '70%', + }, + '.img80-100': { + width: '80%', + }, + // media queries + '@media (max-width: 1200px)': { + '.img60-100': { + width: '100%', + }, + '.img70-100': { + width: '100%', + }, + '.img80-100': { + width: '100%', + }, + }, + '.p': {marginTop: '1em', marginBottom: '1em'}, + '.sans': { fontFamily: '"Lato", "Noto Sans TC", "PingFang TC", "Helvetica Neue", "SF Pro TC", "Helvetica", "arial", "Microsoft JhengHei", "Microsoft YaHei", sans-serif;' }, '.serif': { fontFamily: 'Lyon-Text, Georgia, ui-serif, serif' }, '.mono': { fontFamily: 'iawriter-mono, Nitti, Menlo, Courier, monospace' }, '.pdf .sans': { fontFamily: 'Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI Variable Display", "Segoe UI", Helvetica, "Apple Color Emoji", Arial, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol", "Twemoji", "Noto Color Emoji", "Noto Sans CJK JP"' },