From b1f129fb6583e19768cc76d697938dad588efa6a Mon Sep 17 00:00:00 2001 From: Orestis Date: Sat, 2 Nov 2024 15:13:47 +0100 Subject: [PATCH] update --- full/compileResume.js | 39 ++++++++ full/compileResumePlain.js | 4 + full/cv.js | 178 +++++++++++++++++++++++++++++++++++++ index.js | 11 +-- main/compileResume.js | 1 + main/compileResumePlain.js | 4 +- main/cv.js | 56 ++++++++---- 7 files changed, 267 insertions(+), 26 deletions(-) create mode 100644 full/compileResume.js create mode 100644 full/compileResumePlain.js create mode 100644 full/cv.js diff --git a/full/compileResume.js b/full/compileResume.js new file mode 100644 index 0000000..6ca31db --- /dev/null +++ b/full/compileResume.js @@ -0,0 +1,39 @@ +import resumeCompiler from "../index.js"; +import cv, { profile } from "./cv.js"; + +const fonts = { + defaultFont: { + // normal: "example/fonts/SalvoSans-Light2.ttf", + // italics: "example/fonts/SalvoSans-Light-Italic.ttf", + // bold: "example/fonts/SalvoSans-Medium2.ttf", + normal: "example/fonts/OpenSans-Regular.ttf", + italics: "example/fonts/OpenSans-Italic.ttf", + bold: "example/fonts/OpenSans-Bold.ttf", + }, + childTitleFont: { + bold: "example/fonts/Roboto-Bold.ttf", + }, + headerFont: { + bold: "example/fonts/Roboto-Bold.ttf", + bolditalics: "example/fonts/Roboto-BoldItalic.ttf", + }, +}; + +const factor = 0.95 + +resumeCompiler({ + cv, + profile, + fonts, + lineHeight: 1.1, + mainTitleSize: 17.8, + subtitleSize: 9.2, + headerSize: 13, + fontSize: 8.7, + paragraphFactor: 0.8, + pageMargins: [60 * factor, 68 * factor, 60 * factor, 68 * factor], + unbreakableChildren: true, + google: true, + separator: " · ", + linkColor: "#0044CC" +}); diff --git a/full/compileResumePlain.js b/full/compileResumePlain.js new file mode 100644 index 0000000..c5465ac --- /dev/null +++ b/full/compileResumePlain.js @@ -0,0 +1,4 @@ +import { resumeCompilerPlain } from "../index.js"; +import cv, { profile } from "./cv.js"; + +console.log(resumeCompilerPlain(cv, profile)); diff --git a/full/cv.js b/full/cv.js new file mode 100644 index 0000000..31264c3 --- /dev/null +++ b/full/cv.js @@ -0,0 +1,178 @@ +import { cvChild } from "../utils.js"; + +export const profile = { + name: "Orestis Zambounis", + title: "MSc ETH Robotics Engineer", + birthdate: "10.7.1991", + address: "CH-4103 Bottmingen", + phone: "+41 78 637 35 91", + email: "[me@orestisz.com](mailto:me@orestisz.com)", + permit: "Swiss Citizen", + programmingLanguages: + "[GitHub](https://github.com/orestis-z) [LinkedIn](https://linkedin.com/in/orestis-z)\n\nDeep Learning, Computer Vision, Robotics, Mobile App Development, Full-Stack Development", +}; + +export default [ + { + title: "Experience", + children: [ + cvChild({ + title: "Senior Machine Learning Engineer", + subtitles: ["(QSC, acq. by Acuity Brands)", "Zurich, CH", "Remote"], + date: "2023 - Present (1 yr 6 mos)", + body: "* " + [ + "Ported vision ML models to ONNX and TensorRT, __tripling__ speed and reducing VRAM usage by __15%.__", + "Increased system speed by __30%__ on resource-constrained hardware through batched inference implementation.", + "Led CV/ML prototyping in detection, tracking, embeddings, and VLMs with state-of-the-art methods.", + "Redesigned ML architecture for modularity and flexibility, and led efforts to clean up technical debt.", + "Co-managed and mentored the ML team, integrated teams, enforced best practices, and led the hiring process.", + "Technologies: __Python__, __PyTorch__, __TensorRT__, __ONNX__, __Weights & Biases__, __Grafana__, __ROS__, __Docker__, __GCP__.", + ].join("\n* "), + }), + cvChild({ + title: "Machine Learning Engineer", + subtitles: [ + "Seervision (ETHZ Spin-off, acq. by QSC)", + "Zurich, CH", + "Remote", + ], + date: "2021 - 2023 (2 yrs)", + body: "* " + [ + "Optimized real-time detection pipeline, reduced latency by __24%__, VRAM by __45%__, and increased accuracy by __10%__.", + "Designed, prototyped, tuned, and deployed a face recognition system with a false-positive rate below __5%__.", + "Drove real-time inference optimization efforts, __tripling__ the number of supported clients per hardware unit.", + "Collaborated with the product team to prototype and experiment with CV/ML systems for novel user experiences.", + "Technologies: __Python__, __C++__, __PyTorch__, __TensorFlow__, __OpenCV__, __CUDA__, __ROS__, __Docker__, __GitLab CI/CD__, __GCP__.", + ].join("\n* "), + }), + cvChild({ + title: "MLOps Engineer", + subtitles: [ + "benshi.ai (funded by BMGF)", + "Barcelona, ES", + "Hybrid", + ], + date: "2020 - 2021 (6 mos)", + body: "* " + [ + "Built and maintained scalable data pipelines for ML models in production, from data ingestion to deployment.", + "Technologies: __Python__, __Pandas__, __PySpark__, __Databricks__, __MLflow__, __Docker__, __Kubernetes__, __Azure__, __GitHub Actions__.", + ].join("\n* "), + }), + cvChild({ + title: "Web App Developer", + subtitles: [ + "Civil service", + "Kantonsspital St. Gallen, CH", + "On-site", + ], + date: "2020 (3 mos)", + body: "* " + [ + "Developed and maintained a web application, implemented web analytics, SEO.", + "Technologies: __Vue.js__, __TestCafe__.", + ].join("\n* "), + }), + cvChild({ + title: "Full-Stack & Machine Learning Engineer", + subtitles: ["Freelancer", "Remote"], + date: "2019 - 2020 (1 yr 3 mos)", + body: "* " + [ + "Developed a CNN-based face predictor with an __18%__ accuracy improvement, optimized for low-latency inference.", + "Developed full-stack application with cross-platform frontend and microservice-based cloud architecture.", + "Technologies: __Python__, __TensorFlow__, __scikit-learn__, __Flask__, __React__, __PostgreSQL__, __AWS__.", + ].join("\n* "), + }), + cvChild({ + title: "Co-Founder, Product, Tech Lead", + subtitles: ["Kimata Networks", "Basel, CH", "Part-time", "Remote"], + date: "2018 - 2019 (1 yr 3 mos)", + body: "* " + [ + "Managed a team of 5 developers (frontend and backend), iterated on user feedback, analyzed competitors, and crafted specifications and roadmaps.", + "Raised CHF 10k through Venture Kick, gaining experience in company founding, business planning, IP, outsourcing, and strategic decision-making..", + "Technologies: __Java__, __Android__, __React Native__, __libGDX__, __OpenGL__.", + ].join("\n* "), + }), + cvChild({ + title: "Mobile App Developer", + subtitles: ["Nextron internet team GmbH", "Basel, CH", "Part-time", "Remote"], + date: "2016 - 2017 (6 mos)", + body: "* " + [ + "Developed a cross-platform mobile app for explora.ch.", + "Achieved over 2,000 downloads and maintained a __5.0-star__ rating.", + "Technologies: __React Native__.", + ].join("\n* "), + }), + cvChild({ + title: "Junior Mobile App Developer", + subtitles: ["ETH juniors", "Zurich, CH", "Part-time", "Remote"], + date: "2016 - 2017 (6 mos)", + body: "* " + [ + "Developed a React Native mobile app with Firebase.", + "Technologies: __React Native__, __Firebase__.", + ].join("\n* "), + }), + cvChild({ + title: "Control Systems Engineer, Intern", + subtitles: ["Rapyuta Robotics (ETHZ Spin-off)", "Tokyo, JP", "On-site"], + date: "2016 - 2017 (1 yr)", + body: "* " + [ + "Achieved a __55x speedup__ of NumPy-heavy simulation iterations and open-sourced the Python package PyJet.", + "Designed energy estimators using a Kalman Filter, enhanced tracking controller and performed sensor tests.", + "Technologies: __Python__, __C++__, __NumPy__, __SciPy__, __ROS__.", + ].join("\n* "), + }), + ], + }, + { + title: "Education", + children: [ + cvChild({ + title: "MSc Robotics, Systems & Control", + subtitles: ["5.25/6.0", "ETH", "Zurich, CH"], + date: "2017 - 2019 (2 yrs)", + body: "* " + [ + "Developed an online deep learning architecture for object instance prediction, pose estimation, and tracking.", + "Showed that an additional depth input channel improved the segmentation accuracy of Mask R-CNN by __31%__.", + "Technologies: __Python__, __CUDA C/C++__, __TensorFlow__, __Keras__, __Caffe2__, __OpenCV__.", + ].join("\n* "), + }), + cvChild({ + title: "BSc Mechanical Engineering", + subtitles: ["5.51/6.0", "ETH", "Zurich, CH"], + date: "2012 - 2016 (3 yrs 6 mos)", + body: "* " + [ + "Developed balancing algorithms for a 6DoF [omnicopter](https://www.youtube.com/watch?v=sIi80LMLJSY) using non-linear control methods.", + "Technologies: __C++__, __MATLAB__, __Simulink__.", + ].join("\n* "), + }), + ], + }, + { + title: "Projects", + mini: true, + children: [ + cvChild({ + title: "[Beachin' Rentals](https://g.co/kgs/B73qiZx)", + date: "2023 - Present", + body: + "Self-service kiosk built using __Flask__, __Stripe__, __Shopify__, __RasPi__, __RS-485__.", + }), + cvChild({ + title: "[Trap the Cat](https://play.google.com/store/apps/details/Chat_Noir_Hexagon?id=com.kima.chatnoirhex)", + date: "2023 - 2024", + body: + "App built with __JavaScript__, __CapacitorJS__ and __Firebase__, with __100k+__ downloads.", + }), + cvChild({ + title: "[Anti CryptoPunks](https://anticryptopunks.com)", + date: "2022", + body: + "NFT project built on the __Polygon__ blockchain, with __6 ETH__ traded.", + }), + cvChild({ + title: "[PyJet](https://github.com/wolfv/pyjet)", + date: "2015", + body: "Python library converting __Python/NumPy__ operations to __C++__, achieving a __55x__ speedup.", + }), + ], + }, +]; diff --git a/index.js b/index.js index 06cf385..0227f29 100644 --- a/index.js +++ b/index.js @@ -95,7 +95,7 @@ export default function resumeCompiler(props) { margin: [0, 0, 0, 0], }, ul: { margin: [0, 0, 0, 0] }, - a: { color: linkColor }, + a: { color: linkColor, decoration: null}, ...style, }, }); @@ -133,7 +133,7 @@ export default function resumeCompiler(props) { // text: child.date, // }, { - text: markdownToPdfMakeUnstyledLink( + text: markdownToPdfMake( `${child.date}${separator}${child.title}${(child.subtitles ? separator + child.subtitles.join(separator) : "")}${(mini ? " " + child.body : "")}`, ), // bold: true, @@ -202,7 +202,7 @@ export default function resumeCompiler(props) { { stack: [ [{ text: profile.name, style: "title" }], - [markdownToPdfMakeUnstyledLink(profile.email + (profile.permit ? separator + profile.permit : ""))], + [markdownToPdfMake(profile.email + (profile.permit ? separator + profile.permit : ""))], ], lineHeight: largeLineHeight, @@ -374,8 +374,8 @@ export default function resumeCompiler(props) { console.log(`Saved to ${path}`); } -function resumeCompilerPlain(cv) { - const str = cv +function resumeCompilerPlain(cv, profile) { + let str = cv .map((cvPart) => { const children = cvPart.children .map( @@ -388,6 +388,7 @@ function resumeCompilerPlain(cv) { return `${cvPart.title}\n\n${children}`; }) .join("\n\n"); + str = profile.name + "\n" + profile.email + "\n" + profile.phone + "\n" + profile.address + "\n" + profile.programmingLanguages + "\n\n" + str; return removeMd(str, { stripListLeaders: false }).replaceAll("\n* ", "\n- "); } diff --git a/main/compileResume.js b/main/compileResume.js index 7b3669e..6ca31db 100644 --- a/main/compileResume.js +++ b/main/compileResume.js @@ -35,4 +35,5 @@ resumeCompiler({ unbreakableChildren: true, google: true, separator: " · ", + linkColor: "#0044CC" }); diff --git a/main/compileResumePlain.js b/main/compileResumePlain.js index 37457c0..c5465ac 100644 --- a/main/compileResumePlain.js +++ b/main/compileResumePlain.js @@ -1,4 +1,4 @@ import { resumeCompilerPlain } from "../index.js"; -import cv from "./cv.js"; +import cv, { profile } from "./cv.js"; -console.log(resumeCompilerPlain(cv)); +console.log(resumeCompilerPlain(cv, profile)); diff --git a/main/cv.js b/main/cv.js index bcfbc36..7c4f9f9 100644 --- a/main/cv.js +++ b/main/cv.js @@ -9,7 +9,7 @@ export const profile = { email: "[me@orestisz.com](mailto:me@orestisz.com)", permit: "Swiss Citizen", programmingLanguages: - "[github.com/orestis-z](https://github.com/orestis-z), [linkedin.com/in/orestis-z](https://linkedin.com/in/orestis-z)\n\nDeep Learning, Computer Vision, Robotics, Systems & Control, Distributed Systems", + "[GitHub](https://github.com/orestis-z) [LinkedIn](https://linkedin.com/in/orestis-z)\n\nDeep Learning, Computer Vision, Robotics, Mobile App Development, Full-Stack Development", }; export default [ @@ -84,35 +84,53 @@ export default [ title: "Education", children: [ cvChild({ - title: "Imperial College London", - subtitles: ["Master's Thesis", "London, UK"], - date: "2018 - 2019 (6 mos)", - body: "* " + [ - "Developed an online multi-task deep learning architecture for object instance prediction, pose estimation, and multi-person tracking.", - "Trained the Siamese network for visual cue matching on MOT dataset using Mask R-CNN outputs.", - "Technologies: __Python__, __CUDA C/C++__, __Caffe2__.", - ].join("\n* "), - }), - cvChild({ - title: "ETH Zurich", - subtitles: ["MSc Robotics, Systems & Control", "Zurich, CH"], + title: "MSc Robotics, Systems & Control", + subtitles: ["5.25/6.0", "ETH", "Zurich, CH"], date: "2017 - 2019 (2 yrs)", body: "* " + [ - "Showed that an additional depth input channel improved the segmentation accuracy of Mask R-CNN by __31%__; submitted paper to CoRL.", - "Designed a time-efficient training strategy using data augmentation, synthetic RGB-D and real-world data.", - "Technologies: __Python__, __TensorFlow__, __Keras__, __OpenCV__.", + "Developed an online deep learning architecture for object instance prediction, pose estimation, and tracking.", + "Showed that an additional depth input channel improved the segmentation accuracy of Mask R-CNN by __31%__.", + "Technologies: __Python__, __CUDA C/C++__, __TensorFlow__, __Keras__, __Caffe2__, __OpenCV__.", ].join("\n* "), }), cvChild({ - title: "ETH Zurich", - subtitles: ["BSc Mechanical Engineering", "Zurich, CH"], + title: "BSc Mechanical Engineering", + subtitles: ["5.51/6.0", "ETH", "Zurich, CH"], date: "2012 - 2016 (3 yrs 6 mos)", body: "* " + [ - "Graduated __top 5%__ of the class.", "Developed balancing algorithms for a 6DoF [omnicopter](https://www.youtube.com/watch?v=sIi80LMLJSY) using non-linear control methods.", "Technologies: __C++__, __MATLAB__, __Simulink__.", ].join("\n* "), }), ], }, + { + title: "Projects", + mini: true, + children: [ + cvChild({ + title: "[Beachin' Rentals](https://g.co/kgs/B73qiZx)", + date: "2023 - Present", + body: + "Self-service kiosk built using __Flask__, __Stripe__, __Shopify__, __RasPi__, __RS-485__.", + }), + cvChild({ + title: "[Trap the Cat](https://play.google.com/store/apps/details/Chat_Noir_Hexagon?id=com.kima.chatnoirhex)", + date: "2023 - 2024", + body: + "App built with __JavaScript__, __CapacitorJS__ and __Firebase__, with __100k+__ downloads.", + }), + cvChild({ + title: "[Anti CryptoPunks](https://anticryptopunks.com)", + date: "2022", + body: + "NFT project built on the __Polygon__ blockchain, with __6 ETH__ traded.", + }), + cvChild({ + title: "[PyJet](https://github.com/wolfv/pyjet)", + date: "2015", + body: "Python library converting __Python/NumPy__ operations to __C++__, achieving a __55x__ speedup.", + }), + ], + }, ];