diff --git a/package-lock.json b/package-lock.json index dbcc0ba..d6c738d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "antd": "^5.18.0", "bootstrap": "^5.3.3", "react": "^18.2.0", - "react-bootstrap": "^2.10.2", + "react-bootstrap": "^2.10.10", "react-dom": "^18.2.0", "react-router-dom": "^6.23.1" }, @@ -94,12 +94,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", - "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -816,9 +814,10 @@ } }, "node_modules/@react-aria/ssr": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.4.tgz", - "integrity": "sha512-4jmAigVq409qcJvQyuorsmBR4+9r3+JEC60wC+Y0MZV0HCtTmm8D9guYXlJMdx0SSkgj0hHAyFm/HvPNFofCoQ==", + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.10.tgz", + "integrity": "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==", + "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0" }, @@ -826,7 +825,7 @@ "node": ">= 12" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "node_modules/@remix-run/router": { @@ -841,6 +840,7 @@ "version": "0.4.16", "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz", "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==", + "license": "MIT", "dependencies": { "dequal": "^2.0.3" }, @@ -849,18 +849,19 @@ } }, "node_modules/@restart/ui": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.6.9.tgz", - "integrity": "sha512-mUbygUsJcRurjZCt1f77gg4DpheD1D+Sc7J3JjAkysUj7t8m4EBJVOqWC9788Qtbc69cJ+HlJc6jBguKwS8Mcw==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.9.4.tgz", + "integrity": "sha512-N4C7haUc3vn4LTwVUPlkJN8Ach/+yIMvRuTVIhjilNHqegY60SGLrzud6errOMNJwSnmYFnt1J0H/k8FE3A4KA==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.21.0", - "@popperjs/core": "^2.11.6", + "@babel/runtime": "^7.26.0", + "@popperjs/core": "^2.11.8", "@react-aria/ssr": "^3.5.0", - "@restart/hooks": "^0.4.9", - "@types/warning": "^3.0.0", + "@restart/hooks": "^0.5.0", + "@types/warning": "^3.0.3", "dequal": "^2.0.3", "dom-helpers": "^5.2.0", - "uncontrollable": "^8.0.1", + "uncontrollable": "^8.0.4", "warning": "^4.0.3" }, "peerDependencies": { @@ -868,10 +869,23 @@ "react-dom": ">=16.14.0" } }, + "node_modules/@restart/ui/node_modules/@restart/hooks": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.5.1.tgz", + "integrity": "sha512-EMoH04NHS1pbn07iLTjIjgttuqb7qu4+/EyhAx27MHpoENcB2ZdSsLTNxmKD+WEPnZigo62Qc8zjGnNxoSE/5Q==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/@restart/ui/node_modules/uncontrollable": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==", + "license": "MIT", "peerDependencies": { "react": ">=16.14.0" } @@ -1404,7 +1418,8 @@ "node_modules/@types/warning": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", - "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==" + "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==", + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "7.13.0", @@ -1917,6 +1932,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -3518,13 +3534,15 @@ } }, "node_modules/react-bootstrap": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.2.tgz", - "integrity": "sha512-UvB7mRqQjivdZNxJNEA2yOQRB7L9N43nBnKc33K47+cH90/ujmnMwatTCwQLu83gLhrzAl8fsa6Lqig/KLghaA==", + "version": "2.10.10", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.10.tgz", + "integrity": "sha512-gMckKUqn8aK/vCnfwoBpBVFUGT9SVQxwsYrp9yDHt0arXMamxALerliKBxr1TPbntirK/HGrUAHYbAeQTa9GHQ==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.22.5", + "@babel/runtime": "^7.24.7", "@restart/hooks": "^0.4.9", - "@restart/ui": "^1.6.8", + "@restart/ui": "^1.9.4", + "@types/prop-types": "^15.7.12", "@types/react-transition-group": "^4.4.6", "classnames": "^2.3.2", "dom-helpers": "^5.2.1", @@ -3613,11 +3631,6 @@ "react-dom": ">=16.6.0" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", diff --git a/package.json b/package.json index c48eda8..fdf2e6b 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "antd": "^5.18.0", "bootstrap": "^5.3.3", "react": "^18.2.0", - "react-bootstrap": "^2.10.2", + "react-bootstrap": "^2.10.10", "react-dom": "^18.2.0", "react-router-dom": "^6.23.1" }, diff --git a/src/assets/member/Jason.jpeg b/src/assets/member/Jason.jpeg deleted file mode 100644 index c7f0e02..0000000 Binary files a/src/assets/member/Jason.jpeg and /dev/null differ diff --git a/src/assets/member/Win.jpg b/src/assets/member/Win.jpg new file mode 100644 index 0000000..efdad4b Binary files /dev/null and b/src/assets/member/Win.jpg differ diff --git a/src/main.tsx b/src/main.tsx index 67b6258..0207b42 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -32,7 +32,7 @@ import { WIFIMemberPage } from "./member/2024/WIFI.tsx"; import { YPPMemberPage } from "./member/2024/ypp.tsx"; import { YoungMemberPage } from "./member/2024/Young.tsx"; import { PaulWangMemberPage } from "./member/2024/PaulWang.tsx"; -import { JasonMemberPage } from "./member/2024/Jason.tsx"; +import { WinMemberPage } from "./member/2024/Win.tsx"; import { JoeMemberPage } from "./member/2024/Joe.tsx"; import { EasonMemberPage } from "./member/2023/Eason.tsx"; import { BoboMemberPage } from "./member/2023/Bobo.tsx"; @@ -72,7 +72,7 @@ const router = createHashRouter( }> }> }> - }> + }> }> { + const bio = +
+
+
+ + + +
+ bio.txt +
+
+ +
+ {/* whoami */} +

$ whoami

+

{'{'}

+

+ Name = '黃廷翰' +

+

+ RealName_en = 'Ting-Han Huang' +

+

+ NickName_en = 'Win' +

+

+ CTF_ID = 'VV1N' +

+

{'}'}

+ +
+ + {/* interest */} +

$ cat /home/vv1n/interest

+

{'{'}

+

+ CyberSecurity, +

+

+ CTF, +

+

+ WebHacking, +

+

+ PenetrationTesting, +

+

+ Sleeping +

+

{'}'}

+ +
+ + {/* blog */} +

$ cat /home/vv1n/blog

+

{'{'}

+

+ https://blog.vv1n.me - Coming Soon... +

+

{'}'}

+
+
; + + + const certificates: MemberCertificateType[] = [ + { + title: "iPAS 資訊安全工程師-初級能力鑑定", + datetime: "2025.06" + }, + { + title: "Google Cybersecurity Certificate", + datetime: "2025.06" + } + ] + + const competitionExperiences: MemberCompetitionExperienceType[] = [ + { + title: "WHYCTF 2025", + result: "188/1806 Team(Name: NTUT_Is1ab)", + datetime: "2025.08.09 - 2025.08.12" + }, + { + title: "AIS3 Pre-exam 2025", + result: "55/344 Individual(Name: VV1N)", + datetime: "2025.05.24 - 2025.05.26" + }, + { + title: "BYUCTF 2025", + result: "477/1074 Team(Name: NTUT_Is1ab)", + datetime: "2025.05.17 - 2025.05.18" + }, + { + title: " DEF CON CTF Qualifier 2025", + result: "31/195 Team(Name: 星爆牛炒竹狐)", + datetime: "2025.04.12 - 2025.04.14" + }, + { + title: "squ1rrel CTF 2025", + result: "227/611 Team(Name: NTUT_Is1ab)", + datetime: "2025.04.05 - 2025.04.07" + }, + { + title: "SwampCTF 2025", + result: "219/751 Team(Name: NTUT_Is1ab)", + datetime: "2025.03.29 - 2025.03.31" + }, + { + title: "Cyber Apocalypse CTF 2025: Tales from Eldoria", + result: "715/8129 Team(Name: NTUT_Is1ab)", + datetime: "2025.03.21 - 2025.03.26" + }, + { + title: "picoCTF 2025", + result: "305/10460 Team(Name: NTUT Is1ab)", + datetime: "2025.03.08 - 2025.03.18" + }, + { + title: "PwnMe CTF Quals 2025", + result: "349/955 Team(Name: NTUT_Is1ab)", + datetime: "2025.03.01 - 2025.03.03" + }, + { + title: "TUCTF 2024", + result: "153/485 Team(Name: NTUT_Is1ab)", + datetime: "2025.01.25 - 2025.01.27" + }, + { + title: "x3CTF 2025 (feat. mvm)", + result: "320/528 Team(Name: NTUT_Is1ab)", + datetime: "2025.01.25 - 2025.01.27" + }, + { + title: "Srdnlen CTF 2025", + result: "117/848 Team(Name: NTUT_Is1ab)", + datetime: "2025.01.19 - 2025.01.20" + }, + { + title: "Platypwn 2024", + result: "195/328 Team(Name: NTUT_Is1ab)", + datetime: "2024.12.07 - 2024.12.08" + }, + { + title: "CTF 種子培訓工作坊", + result: "金獎", + datetime: "2024.11.23" + }, + { + title: "N1CTF 2024", + result: "199/260", + datetime: "2024.11.09" + }, + { + title: "CGGC 2024", + result: "19/64 Team(Name: CGGC一日遊)", + datetime: "2024.11.02 - 2024.11.03" + }, + { + title: "2024 AEGIS 神盾盃", + result: "N/A", + datetime: "2024.09" + }, + ] + + const participates: MemberParticipateType[] = [ + { + title: "SITCON 2024 - 會眾", + datetime: "2024.03.09" + }, + { + title: "CYBERSEC 2024 臺灣資安大會 - 會眾", + datetime: "2024.05.14" + }, + { + title: "HITCON CMT 2024 - 會眾", + datetime: "2024.08.23 - 2024.08.24" + }, + { + title: "CTF 種子培訓工作坊 - 臺北場", + datetime: "2024.11.23" + }, + { + title: "HITCON CTF X 菁英人才交流活動", + datetime: "2024.11.09" + }, + { + title: "Google 資安人才培育計畫 - 學員", + datetime: "2025.02.01 - 2025.06.30" + }, + { + title: "SITCON 2025 - 會眾", + datetime: "2025.03.08" + }, + { + title: "AIS3 CLUB 北區黑客松 2025 - 助教", + datetime: "2025.05.03 - 2025.05.04" + }, + { + title: "11th AIS3 新型態資安實務暑期課程 進階資安攻防競技組 - 學員", + datetime: "2025.07.28 - 2025.08.03" + }, + { + title: "HITCON CMT 2025 - 會眾", + datetime: "2025.08.15 - 2025.08.16" + }, + { + title: "CYBERSEC 2025 臺灣資安大會 - 會眾", + datetime: "2025.04.15 - 2025.04.17" + }, + { + title: "10th AIS3 好厲駭(高階培訓 & 導師深度輔導)- 學員", + datetime: "2025.08.22 - now" + } + ] + + const internExperiences: MemberInternType[] = [ + { + company: "國立臺北科技大學 推廣教育中心", + info: "設備網路維護,Python助教", + datetime: "2020.08 - now" + }, + { + company: "康和綜合證券股份有限公司", + info: "Full Stack Engineer Intern", + datetime: "2024.02.19 - 2024.08.31" + } + ] + const journals: MemberArticleType[] = [] + const conferences: MemberArticleType[] = [] + const techConfs: MemberArticleType[] = [] + return ( + + ) +} + diff --git a/src/page/Member.tsx b/src/page/Member.tsx index b33ea36..6108d30 100644 --- a/src/page/Member.tsx +++ b/src/page/Member.tsx @@ -73,7 +73,7 @@ export function Member(){ coAdvisor: '', experience: "", certificate: "iPAS 資訊安全工程師檢定(初級)", - website: "/#/Member/2024/Jason" + website: "/#/Member/2024/Win" }, { key: '5',