diff --git a/NETCONNECT_RESUME.md b/NETCONNECT_RESUME.md new file mode 100644 index 0000000..c917467 --- /dev/null +++ b/NETCONNECT_RESUME.md @@ -0,0 +1,241 @@ +# NetConnect Experience Summary (Mar 2024 - Present) + +## Position: System/Network Administrator & DevOps Engineer +**Company:** NetConnect Group +**Period:** Martie 2024 - Prezent (aprox. 22 luni) +**Location:** Remote + +--- + +## Major Projects & Achievements + +### 1. PowerDNS High Availability Cluster (pdns, pdns2-6) 🎯 +**Timeline:** Nov 2023 - Dec 2025 (ongoing) +**Current Version:** v2.4.0-stable → v2.5.0 (in development) + +**Architecture:** +- Master-Slave MySQL replication cluster +- Keepalived VIP failover (automatic failback) +- PowerDNS Authoritative servers (NS1: .214, NS2: .215) +- Cloudflare API integration (20 zones, 581 records sync) +- Custom CF-Sync v2.4.0 (Docker-based) + +**Key Achievements:** +- Designed and deployed production HA DNS infrastructure +- Implemented automatic failover/failback mechanism +- Created comprehensive automation scripts (Bash, Python) +- Cloud-init deployment automation +- Extreme load testing and optimization +- Production endpoint: `pdns.infra.netconnect.ro` + +**Technologies:** PowerDNS, MySQL/MariaDB, Keepalived, Docker, Bash, Python, Cloud-init, Ansible + +--- + +### 2. InfraManager - Dynamic Infrastructure Management Tool +**Timeline:** Ongoing development +**Purpose:** Lightweight infrastructure orchestration + +**Features:** +- Dynamic service/node management via CLI +- YAML-based state tracking +- Template generation for configs +- Future integrations: Ansible, Terraform, Proxmox API + +**Technologies:** Python, YAML, CLI development + +--- + +### 3. ncTesseract - Nextcloud OCR & Elasticsearch Indexing +**Timeline:** Dec 2024 +**Problem:** Traditional Nextcloud indexing was extremely slow (350k files = 77 days!) + +**Solution:** +- Custom Python parallel indexer with 48+ workers +- Tesseract OCR integration +- Direct Elasticsearch indexing in Nextcloud-compatible format +- Massive performance improvement (single-threaded PHP → multiprocessing) + +**Technologies:** Python, Multiprocessing, Tesseract OCR, Elasticsearch, Nextcloud + +--- + +### 4. Certificate Management Automation (certbotAuto) +**Timeline:** Sep 2024 - Dec 2024 + +**Features:** +- Automated SSL/TLS certificate management +- Multi-server deployment via Ansible +- Let's Encrypt integration (certbot) +- Centralized secrets management +- Automated renewal and deployment + +**Technologies:** Bash, Certbot, Ansible, YAML + +--- + +### 5. CDR Processing System (cdr2sql) +**Timeline:** Feb 2024 - Jul 2025 + +**Purpose:** Call Detail Records processing and SQL integration + +**Components:** +- PHP backend for CDR parsing +- Node.js/Gulp build system +- Database integration for telecom billing + +**Technologies:** PHP, Node.js, Gulp, MySQL + +--- + +### 6. Xen to KVM/Proxmox Migration Tools (xen2lxc, xenserver_to_xen) +**Timeline:** Sep-Nov 2024 + +**Purpose:** Automated VM migration from legacy Xen infrastructure + +**Features:** +- XVA image extraction and conversion +- Disk preparation for QEMU/KVM +- Automated boot scripts +- Proxmox integration + +**Technologies:** Python, Bash, QEMU, Proxmox, Xen + +--- + +### 7. Cataleya Integration (cataleya2db) +**Timeline:** Oct 2024 + +**Purpose:** Telecom data integration with Cataleya platform + +**Technologies:** PHP, Database integration + +--- + +### 8. Laravel Development Environment with SQL Anywhere +**Timeline:** Aug-Sep 2024 + +**Purpose:** Custom Docker-based development environment + +**Features:** +- Laravel + SQL Anywhere integration +- Nginx + PHP-FPM stack +- Docker Compose orchestration + +**Technologies:** Docker, Laravel, PHP, Nginx, SQL Anywhere + +--- + +### 9. Portability System - Czech Republic (portabilitateCehia.org) +**Timeline:** Ongoing maintenance + +**Purpose:** Automated portability data download from Czech telecom portal + +**Challenges Solved:** +- SSL certificate renewal for client authentication +- Wildcard certificate management (*.netconnect.ro) +- HTTPS client certificate authentication + +**Technologies:** OpenSSL, wget, SSL/TLS, Bash + +--- + +### 10. Infrastructure Services +**Timeline:** Ongoing + +**Deployed/Maintained:** +- **Zabbix Monitoring:** Docker-based monitoring stack +- **FreeSWITCH:** VoIP infrastructure (Docker) +- **Traefik:** Reverse proxy and load balancer +- **Infrastructure automation:** Various supporting services + +--- + +## Core Competencies Demonstrated + +### DevOps & Automation +- CI/CD pipeline development +- Infrastructure as Code (Ansible, Terraform concepts) +- Docker containerization +- Cloud-init automation +- Custom automation tooling (Bash, Python, Perl) + +### System Administration +- High Availability cluster design and deployment +- MySQL/MariaDB replication and failover +- DNS infrastructure (PowerDNS) +- Load balancing (Keepalived) +- SSL/TLS certificate management + +### Development +- Python (multiprocessing, CLI tools, automation) +- Bash scripting (complex automation) +- PHP (backend services, integrations) +- Perl (legacy support, migration) +- JavaScript/Node.js (build systems) + +### Networking +- DNS management and troubleshooting +- VIP failover mechanisms +- Firewall configuration +- VPN integration concepts +- Network troubleshooting (tcpdump, netstat, ss) + +### Virtualization & Cloud +- Proxmox management +- Xen → KVM migration +- Docker (multi-service orchestration) +- Cloud-init deployment +- VM provisioning and management + +### Databases +- MySQL Master-Slave replication +- Elasticsearch integration +- SQL Anywhere (legacy support) +- Database optimization and monitoring + +--- + +## Key Technologies Used + +**Operating Systems:** Debian, Ubuntu, CentOS, Alpine Linux +**Scripting:** Bash, Python, Perl, PHP +**Orchestration:** Docker, Docker Compose, Ansible (planned) +**Databases:** MySQL/MariaDB, PostgreSQL, Elasticsearch, SQL Anywhere +**Web Stack:** Nginx, Apache, PHP-FPM, Tomcat (limited) +**Monitoring:** Zabbix, Systemd journaling +**Version Control:** Git +**Networking:** PowerDNS, Keepalived, Cloudflare API, OpenSSL +**Other:** Tesseract OCR, FreeSWITCH, Traefik + +--- + +## Soft Skills Demonstrated + +- **Problem Solving:** Reduced Nextcloud indexing from 77 days to hours +- **Architecture Design:** Built production HA DNS from scratch +- **Documentation:** Comprehensive guides for all major projects +- **Automation Focus:** Consistently automated manual processes +- **Tool Development:** Created custom tools when needed (InfraManager, CF-Sync) +- **Migration Expertise:** Successfully migrated legacy Xen infrastructure + +--- + +## For CV Update + +**Replace RnD Software Group entry (Apr 2021 - Present) with:** + +### NetConnect Group | Bucharest, Romania (Remote) +**SYSTEM/NETWORK ADMINISTRATOR & DEVOPS ENGINEER** +*Mar 2024 - Present* + +- Designed and deployed production High Availability DNS infrastructure using PowerDNS, MySQL Master-Slave replication, and Keepalived VIP failover serving 20+ zones with automatic failover/failback +- Developed custom automation tools including parallel OCR indexing system (48+ workers) reducing Nextcloud indexing time from 77 days to hours, and infrastructure management CLI tool (Python) +- Automated SSL/TLS certificate management across multiple servers using certbot, Ansible, and custom bash orchestration +- Migrated legacy Xen virtual infrastructure to Proxmox/KVM using custom Python/Bash tooling +- Maintained and integrated telecom services including CDR processing, portability systems, and FreeSWITCH VoIP infrastructure +- Technologies: PowerDNS, MySQL/MariaDB, Keepalived, Docker, Python, Bash, Ansible, Elasticsearch, Proxmox, Zabbix + +--- + +**Note:** Această experiență arată o evoluție clară de la sysadmin tradițional (RnD) către DevOps modern cu focus pe automation, HA, și custom tooling development. diff --git a/cv.pdf b/cv.pdf index b313672..b987cb0 100644 Binary files a/cv.pdf and b/cv.pdf differ diff --git a/cv.png b/cv.png index 7ce63f7..14f03a9 100644 Binary files a/cv.png and b/cv.png differ diff --git a/src/awesome-cv.cls b/src/awesome-cv.cls index 8fb21ea..9fd23f0 100644 --- a/src/awesome-cv.cls +++ b/src/awesome-cv.cls @@ -48,13 +48,14 @@ %------------------------------------------------------------------------------- % Needed to make fixed length table \RequirePackage{array} +\RequirePackage{tabularx} % Needed to handle list environment \RequirePackage{enumitem} % Needed to handle text alignment \RequirePackage{ragged2e} % Needed to configure page layout \RequirePackage{geometry} -% Needed to make header & footer effeciently +% Needed to make header & footer efficiently \RequirePackage{fancyhdr} % Needed to manage colors \RequirePackage{xcolor} @@ -62,6 +63,8 @@ \RequirePackage{ifxetex} % Needed to use \if-\then-\else statement \RequirePackage{xifthen} +% Needed to strip chars from telephone number +\RequirePackage{xstring} % Needed to use a toolbox of programming tools \RequirePackage{etoolbox} % Needed to change line spacing in specific environment @@ -76,27 +79,54 @@ % (https://github.com/posquit0/latex-fontawesome) \RequirePackage{fontawesome} \RequirePackage[default,opentype]{sourcesanspro} -% Needed for the photo ID -\RequirePackage[skins]{tcolorbox} -% Needed to deal a paragraphs -\RequirePackage{parskip} -% Needed to deal hyperlink -\RequirePackage[hidelinks,unicode]{hyperref} -\hypersetup{% - pdftitle={}, - pdfauthor={}, - pdfsubject={}, - pdfkeywords={} -} - %------------------------------------------------------------------------------- % Configuration for directory locations %------------------------------------------------------------------------------- -% Configure a directory location for fonts(default: 'fonts/') +% Configure an optional directory location for fonts(default: 'fonts/') +% Not required anymore but left in place for backward compatability. \newcommand*{\fontdir}[1][fonts/]{\def\@fontdir{#1}} -\fontdir +%------------------------------------------------------------------------------- +% Configuration for fonts +%------------------------------------------------------------------------------- +% Set the FontAwesome font to be up-to-date. +\newfontfamily\FA[ + Path=\@fontdir + ]{FontAwesome.ttf} +% Set font for header (default is Roboto) +\newfontfamily\headerfont[ + Path=\@fontdir, + UprightFont=*-Regular, + ItalicFont=*-Italic, + BoldFont=*-Bold, + BoldItalicFont=*-BoldItalic, +]{Roboto} + +\newfontfamily\headerfontlight[ + Path=\@fontdir, + UprightFont=*-Thin, + ItalicFont=*-ThinItalic, + BoldFont=*-Medium, + BoldItalicFont=*-MediumItalic, +]{Roboto} + +\newfontfamily\roboto{Roboto}[ + Path=\@fontdir, + UprightFont=*-Regular, + ItalicFont=*-Italic, + BoldFont=*-Bold, + BoldItalicFont=*-BoldItalic, + FontFace={l}{n}{Font=*-Light}, + FontFace={l}{it}{Font=*-LightItalic}, +] + +\newcommand*{\footerfont}{\sourcesanspro} +\newcommand*{\bodyfont}{\sourcesanspro} +\newcommand*{\bodyfontlight}{\sourcesansprolight} + +% Compatibility shim for faAlt (fontawesome6 feature) +\newcommand*{\faAlt}[3]{#2\acvHeaderIconSep#3} %------------------------------------------------------------------------------- % Configuration for layout @@ -136,6 +166,7 @@ \colorlet{text}{darkgray} \colorlet{graytext}{gray} \colorlet{lighttext}{lightgray} +\colorlet{sectiondivider}{gray} % Awesome colors \definecolor{awesome-emerald}{HTML}{00A388} \definecolor{awesome-skyblue}{HTML}{0395DE} @@ -151,39 +182,12 @@ \newbool{acvSectionColorHighlight} \setbool{acvSectionColorHighlight}{true} -% Awesome section color -\def\@sectioncolor#1#2#3{% - \ifbool{acvSectionColorHighlight}{{\color{awesome}#1#2#3}}{#1#2#3}% -} - - %------------------------------------------------------------------------------- % Configuration for fonts %------------------------------------------------------------------------------- -% Set the FontAwesome font to be up-to-date. -\newfontfamily\FA[ - Path=\@fontdir - ]{FontAwesome.ttf} -% Set font for header (default is Roboto) -\newfontfamily\headerfont[ - Path=\@fontdir, - UprightFont=*-Regular, - ItalicFont=*-Italic, - BoldFont=*-Bold, - BoldItalicFont=*-BoldItalic, -]{Roboto} - -\newfontfamily\headerfontlight[ - Path=\@fontdir, - UprightFont=*-Thin, - ItalicFont=*-ThinItalic, - BoldFont=*-Medium, - BoldItalicFont=*-MediumItalic, -]{Roboto} - -\newcommand*{\footerfont}{\sourcesanspro} -\newcommand*{\bodyfont}{\sourcesanspro} -\newcommand*{\bodyfontlight}{\sourcesansprolight} +\newcommand*{\headerfont}{\roboto\selectfont} +\newcommand*{\headerfontlight}{\roboto\fontseries{l}\selectfont} +\newcommand*{\footerfont}{\sffamily} %------------------------------------------------------------------------------- % Configuration for styles @@ -197,7 +201,14 @@ \newcommand*{\headersocialstyle}[1]{{\fontsize{6.8pt}{1em}\headerfont\color{text} #1}} \newcommand*{\headerquotestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\itshape\color{darktext} #1}} \newcommand*{\footerstyle}[1]{{\fontsize{8pt}{1em}\footerfont\scshape\color{lighttext} #1}} -\newcommand*{\sectionstyle}[1]{{\fontsize{16pt}{1em}\bodyfont\bfseries\color{text}\@sectioncolor #1}} +\newcommand*{\sectionstyleface}[1]{{\fontsize{16pt}{1em}\bodyfont\bfseries #1}} +\newcommand*{\sectionstyle}[1]{% + \def\@acvSectionTmp{#1} + \ifthenelse{\boolean{acvSectionColorHighlight}}{% + \StrSplit{\@acvSectionTmp}{3}{\acvSectionStringAwesome}{\acvSectionStringPlain}% + \color{awesome}\sectionstyleface{\acvSectionStringAwesome% + \color{text}{\acvSectionStringPlain}}}% + {\color{text}\sectionstyleface{\@acvSectionTmp}}} \newcommand*{\subsectionstyle}[1]{{\fontsize{12pt}{1em}\bodyfont\scshape\textcolor{text}{#1}}} \newcommand*{\paragraphstyle}{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text}} @@ -226,7 +237,14 @@ \newcommand*{\skillsetstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\color{text} #1}} % For elements of the cover letter -\newcommand*{\lettersectionstyle}[1]{{\fontsize{14pt}{1em}\bodyfont\bfseries\color{text}\@sectioncolor #1}} +\newcommand*{\lettersectionstyleface}[1]{{\fontsize{14pt}{1em}\bodyfont\bfseries #1}} +\newcommand*{\lettersectionstyle}[1]{% + \def\@acvLetterSectionTmp{#1} + \ifthenelse{\boolean{acvSectionColorHighlight}}{% + \StrSplit{\@acvLetterSectionTmp}{3}{\acvLetterSectionStringAwesome}{\acvLetterSectionStringPlain}% + \color{awesome}\sectionstyleface{\acvLetterSectionStringAwesome% + \color{text}{\acvLetterSectionStringPlain}}}% + {\color{text}\lettersectionstyleface{\@acvLetterSectionTmp}}} \newcommand*{\recipientaddressstyle}[1]{{\fontsize{9pt}{1em}\bodyfont\scshape\color{graytext} #1}} \newcommand*{\recipienttitlestyle}[1]{{\fontsize{11pt}{1em}\bodyfont\bfseries\color{darktext} #1}} \newcommand*{\lettertitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\bfseries\color{darktext} \underline{#1}}} @@ -277,12 +295,25 @@ % Defines writer's mobile (optional) % Usage: \mobile{} -\newcommand*{\mobile}[1]{\def\@mobile{#1}} +\newcommand*{\mobile}[1] +{ + \def\@mobile{#1} + \def\@teluri{tel:\@mobile} + % Strip unwanted characters + \StrDel{\@teluri}{ }[\@teluri]% + \StrDel{\@teluri}{-}[\@teluri]% + \StrDel{\@teluri}{(}[\@teluri]% + \StrDel{\@teluri}{)}[\@teluri]% +} % Defines writer's email (optional) % Usage: \email{} \newcommand*{\email}[1]{\def\@email{#1}} +% Defines writer's date of birth (optional) +% Usage: \dateofbirth{} +\newcommand*{\dateofbirth}[1]{\def\@dateofbirth{#1}} + % Defines writer's homepage (optional) % Usage: \homepage{} \newcommand*{\homepage}[1]{\def\@homepage{#1}} @@ -299,6 +330,10 @@ % Usage: \gitlab{} \newcommand*{\gitlab}[1]{\def\@gitlab{#1}} +% Defines writer's bitbucket (optional) +% Usage: \bitbucket{} +\newcommand*{\bitbucket}[1]{\def\@bitbucket{#1}} + % Defines writer's stackoverflow profile (optional) % Usage: \stackoverflow{}{} % e.g.https://stackoverflow.com/users/123456/sam-smith @@ -309,10 +344,26 @@ % Usage: \linkedin{} \newcommand*{\linkedin}[1]{\def\@linkedin{#1}} +% Defines writer's orcid (optional) +% Usage: \orcid{} +\newcommand*{\orcid}[1]{\def\@orcid{#1}} + % Defines writer's twitter (optional) % Usage: \twitter{} \newcommand*{\twitter}[1]{\def\@twitter{#1}} +% Defines writer's x (formerly twitter) (optional) +% Usage: \x{} +\newcommand*{\x}[1]{\def\@x{#1}} + +% Defines writer's Mastodon (optional) +% Usage: \mastodon{}{} +\newcommand*{\mastodon}[2]{\def\@mastodoninstance{#1}\def\@mastodonname{#2}} + +% Defines writer's resarchgate (optional) +% Usage: \researchgate{} +\newcommand*{\researchgate}[1]{\def\@researchgate{#1}} + % Defines writer's skype (optional) % Usage: \skype{} \newcommand*{\skype}[1]{\def\@skype{#1}} @@ -329,6 +380,18 @@ % Usage: \medium{} \newcommand*{\medium}[1]{\def\@medium{#1}} +% Defines writer's kaggle (optional) +% Usage: \kaggle{} +\newcommand*{\kaggle}[1]{\def\@kaggle{#1}} + +% Defines writer's Hackerrank (optional) +% Usage: \hackerrank{} +\newcommand*{\hackerrank}[1]{\def\@hackerrank{#1}} + +% Defines writer's Telegram (optional) +% Usage: \telegram{} +\newcommand*{\telegram}[1]{\def\@telegram{#1}} + % Defines writer's google scholar profile (optional) % Usage: \googlescholar{}{} % e.g.https://scholar.google.co.uk/citations?user=wpZDx1cAAAAJ @@ -344,8 +407,8 @@ }% } -% Defines writer's extra informations (optional) -% Usage: \extrainfo{} +% Defines writer's extra information (optional) +% Usage: \extrainfo{} \newcommand*{\extrainfo}[1]{\def\@extrainfo{#1}} % Defines writer's quote (optional) @@ -396,7 +459,7 @@ \newcommand{\acvHeaderAfterPositionSkip}{.4mm} \newcommand{\acvHeaderAfterAddressSkip}{-.5mm} \newcommand{\acvHeaderIconSep}{\space} -\newcommand{\acvHeaderSocialSep}{\quad\textbar\quad} +\newcommand{\acvHeaderSocialSep}{\BeginAccSupp{ActualText={}}\quad\textbar\quad\EndAccSupp{}} \newcommand{\acvHeaderAfterSocialSkip}{6mm} \newcommand{\acvHeaderAfterQuoteSkip}{5mm} @@ -409,6 +472,7 @@ % Commands for utilities %------------------------------------------------------------------------------- % Use to align an element of tabular table +\renewcommand{\tabularxcolumn}{p} \newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} \newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} \newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} @@ -419,6 +483,11 @@ % Use to execute conditional statements by checking empty string \newcommand*{\ifempty}[3]{\ifthenelse{\isempty{#1}}{#2}{#3}} +\newcommand{\faAlt}[3]{% + \BeginAccSupp{ActualText={#1}}% + \mbox{#2\acvHeaderIconSep#3}% + \EndAccSupp{}% +} %------------------------------------------------------------------------------- % Commands for elements of CV structure @@ -464,86 +533,140 @@ \ifthenelse{\isundefined{\@mobile}}% {}% {% - \faMobile\acvHeaderIconSep\@mobile% + \href{\@teluri}{\faAlt{tel:\@mobile}{\faMobile}{\@mobile}}% \setbool{isstart}{false}% }% \ifthenelse{\isundefined{\@email}}% {}% {% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{mailto:\@email}{\faEnvelope\acvHeaderIconSep\@email}% + \href{mailto:\@email}{\faAlt{mailto:\@email}{\faEnvelope}{\@email}}% + }% + \ifthenelse{\isundefined{\@dateofbirth}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \faAlt{DoB: \@dateofbirth}{\faCakeCandles}{\@dateofbirth}% }% \ifthenelse{\isundefined{\@homepage}}% {}% {% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{http://\@homepage}{\faHome\acvHeaderIconSep\@homepage}% + \href{\@homepage}{\faAlt{homepage: \@homepage}{\faHouseChimney}{\@homepage}}% }% \ifthenelse{\isundefined{\@ciolagit}}% {}% {% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://git.ciolan.net/\@ciolagit}{\faGit\acvHeaderIconSep\@ciolagit}% + \href{https://git.ciolan.net/\@ciolagit}{\faAlt{Git: \@ciolagit}{\faGit}{\@ciolagit}}% }% \ifthenelse{\isundefined{\@github}}% {}% {% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://github.com/\@github}{\faGithubSquare\acvHeaderIconSep\@github}% + \href{https://github.com/\@github}{\faAlt{GitHub: @\@github}{\faSquareGithub}{\@github}}% }% \ifthenelse{\isundefined{\@gitlab}}% {}% {% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://gitlab.com/\@gitlab}{\faGitlab\acvHeaderIconSep\@gitlab}% + \href{https://gitlab.com/\@gitlab}{\faAlt{GitLab: @\@gitlab}{\faGitlab}{\@gitlab}}% + }% + \ifthenelse{\isundefined{\@bitbucket}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://bitbucket.com/\@bitbucket}{\faAlt{BitBucket: @\@bitbucket}{\faBitbucket}{\@bitbucket}}% }% \ifthenelse{\isundefined{\@stackoverflowid}}% {}% {% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://stackoverflow.com/users/\@stackoverflowid}{\faStackOverflow\acvHeaderIconSep\@stackoverflowname}% + \href{https://stackoverflow.com/users/\@stackoverflowid}{\faAlt{StackOverflow: @\@stackoverflowname}{\faStackOverflow}{\@stackoverflowname}}% }% \ifthenelse{\isundefined{\@linkedin}}% {}% {% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://www.linkedin.com/in/\@linkedin}{\faLinkedinSquare\acvHeaderIconSep\@linkedin}% + \href{https://www.linkedin.com/in/\@linkedin}{\faAlt{LinkedIn: /in/\@linkedin}{\faLinkedin}{\@linkedin}}% + }% + \ifthenelse{\isundefined{\@orcid}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://orcid.org/\@orcid}{\faAlt{OrcID: \@orcid}{\faOrcid}{\@orcid}}% }% \ifthenelse{\isundefined{\@twitter}}% {}% {% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://twitter.com/\@twitter}{\faTwitter\acvHeaderIconSep\@twitter}% + \href{https://twitter.com/\@twitter}{\faAlt{Twitter: @\@twitter}{\faTwitter}{\@twitter}}% + }% + \ifthenelse{\isundefined{\@x}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://x.com/\@x}{\faAlt{X: @\@x}{\faXTwitter}{\@x}}% + }% + \ifthenelse{\isundefined{\@mastodonname}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://\@mastodoninstance/@\@mastodonname}{\faAlt{Mastodon: \@mastodonname{}@\@mastodoninstance}{\faMastodon}{\@mastodonname}}% }% \ifthenelse{\isundefined{\@skype}}% {}% {% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \faSkype\acvHeaderIconSep\@skype% + \faAlt{Skype: \@skype}{\faSkype}{\@skype}% }% \ifthenelse{\isundefined{\@reddit}}% {}% {% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://www.reddit.com/user/\@reddit}{\faReddit\acvHeaderIconSep\@reddit}% + \href{https://www.reddit.com/user/\@reddit}{\faAlt{Reddit: /u/\@reddit}{\faReddit}{\@reddit}}% + }% + \ifthenelse{\isundefined{\@researchgate}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://www.researchgate.net/profile/\@researchgate}{\faAlt{ResearchGate: \@researchgate}{\faResearchgate}{\@researchgate}}% }% \ifthenelse{\isundefined{\@xing}}% {}% {% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://www.xing.com/profile/\@xing}{\faXingSquare\acvHeaderIconSep\@xing} + \href{https://www.xing.com/profile/\@xing}{\faAlt{Xing: \@xing}{\faSquareXing}{\@xing}} }% \ifthenelse{\isundefined{\@medium}}% {}% {% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://medium.com/@\@medium}{\faMedium\acvHeaderIconSep\@medium}% + \href{https://medium.com/@\@medium}{\faAlt{Medium: @\@medium}{\faMedium}{\@medium}}% + }% + \ifthenelse{\isundefined{\@kaggle}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://kaggle.com/\@kaggle}{\faAlt{Kaggle: \@kaggle}{\faKaggle}{\@kaggle}}% + }% + \ifthenelse{\isundefined{\@hackerrank}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://www.hackerrank.com/\@hackerrank}{\faAlt{HackerRank: \@hackerrank}{\faHackerrank}{\@hackerrank}}% + }% + \ifthenelse{\isundefined{\@telegram}}% + {}% + {% + \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% + \href{https://t.me/\@telegram}{\faAlt{Telegram: \@telegram}{\faTelegram}{\@telegram}}% }% \ifthenelse{\isundefined{\@googlescholarid}}% {}% {% \ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}% - \href{https://scholar.google.com/citations?user=\@googlescholarid}{\faGraduationCap\acvHeaderIconSep\@googlescholarname}% + \href{https://scholar.google.com/citations?user=\@googlescholarid}{\faAlt{Google Scholar: \@googlescholarid}{\faGraduationCap}{\@googlescholarname}}% }% \ifthenelse{\isundefined{\@extrainfo}}% {}% @@ -576,7 +699,7 @@ \vspace{\acvSectionTopSkip} \sectionstyle{#1} \phantomsection - \color{gray}\vhrulefill{0.9pt} + \color{sectiondivider}\vhrulefill{0.9pt} } % Define a subsection for CV @@ -616,7 +739,9 @@ {\entrypositionstyle{#1} & \entrydatestyle{#4} \\} {\entrytitlestyle{#2} & \entrylocationstyle{#3} \\ \entrypositionstyle{#1} & \entrydatestyle{#4} \\} - \multicolumn{2}{L{\textwidth}}{\descriptionstyle{#5}} + \ifstrempty{#5} + {} + {\multicolumn{2}{L{\textwidth}}{\descriptionstyle{#5}} \\} \end{tabular*}% } @@ -659,25 +784,24 @@ % Define a line of cv information(honor, award or something else) % Usage: \cvhonor{}{}{<location>}{<date>} \newcommand*{\cvhonor}[4]{% - \honordatestyle{#4} & \honorpositionstyle{#1}, \honortitlestyle{#2} & \honorlocationstyle{#3} \\ + \honordatestyle{#4} & \honorpositionstyle{#1}\ifempty{#2}{}{,} \honortitlestyle{#2} & \honorlocationstyle{#3} \\ } % Define an environment for cvskill \newenvironment{cvskills}{% \vspace{\acvSectionContentTopSkip} \vspace{-2.0mm} - \begin{center} \setlength\tabcolsep{1ex} \setlength{\extrarowheight}{0pt} - \begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} r L{\textwidth * \real{0.9}}} + \tabularx{\textwidth}{r>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}X} }{% - \end{tabular*} - \end{center} +\endtabularx\par } + % Define a line of cv information(skill) % Usage: \cvskill{<type>}{<skillset>} \newcommand*{\cvskill}[2]{% - \skilltypestyle{#1} & \skillsetstyle{#2} \\ + \skilltypestyle{#1} & \leavevmode\skillsetstyle{#2} \\ } % Define an environment for cvitems(for cventry) @@ -690,7 +814,7 @@ }{% \end{itemize} \end{justify} - \vspace{-4.0mm} + \vspace{1.0mm} } @@ -709,8 +833,9 @@ \par\addvspace{2.5ex} \phantomsection{} \lettersectionstyle{#1} - \color{gray}\vhrulefill{0.9pt} + \color{sectiondivider}\vhrulefill{0.9pt} \par\nobreak\addvspace{0.4ex} + \lettertextstyle } % Define a title of the cover letter diff --git a/src/cv/education.tex b/src/cv/education.tex index bdb77a5..9c0757a 100644 --- a/src/cv/education.tex +++ b/src/cv/education.tex @@ -13,7 +13,7 @@ {Master Studies in Cyber Security} % Degree {„Titu Maiorescu” University} % Institution {Bucharest, Romania} % Location - {In progress...} % Date(s) + {Jul. 2025} % Date(s) {} % Description(s) of tasks/responsibilities %--------------------------------------------------------- %--------------------------------------------------------- diff --git a/src/cv/experience.tex b/src/cv/experience.tex index 41165be..cacef03 100644 --- a/src/cv/experience.tex +++ b/src/cv/experience.tex @@ -30,18 +30,56 @@ % %%--------------------------------------------------------- +%--------------------------------------------------------- + \cventry + {System/Network Administrator \& DevOps Engineer} % Job title + {NetConnect Group} % Organization + {Bucharest, Romania (Remote)} % Location + {Mar. 2024 - Present} % Period + {\begin{cvitems} % Description(s) of tasks/responsibilities + \item{Infrastructure \& Automation + \begin{itemize} + \item{Designed and deployed production High Availability DNS infrastructure using PowerDNS, MySQL Master-Slave replication, and Keepalived VIP failover serving 20+ zones with automatic failover/failback mechanism} + \item{Developed custom automation tools including parallel OCR indexing system (48+ workers) reducing Nextcloud indexing time from 77 days to hours using Python multiprocessing and Tesseract OCR} + \item{Built infrastructure management CLI tool (InfraManager) for dynamic service/node orchestration with YAML-based state tracking} + \item{Automated SSL/TLS certificate management across multiple servers using certbot, Ansible, and custom bash orchestration} + \end{itemize} + } + \item{Migration \& Integration + \begin{itemize} + \item{Migrated legacy Xen virtual infrastructure to Proxmox/KVM using custom Python/Bash tooling} + \item{Maintained and integrated telecom services: CDR processing, portability systems, FreeSWITCH VoIP infrastructure} + \item{Implemented Elasticsearch indexing with Nextcloud-compatible format for full-text search} + \end{itemize} + } + \item{\textbf{Technologies:} PowerDNS, MySQL/MariaDB, Keepalived, Docker, Python, Bash, Ansible, Elasticsearch, Proxmox, Zabbix} + \end{cvitems}} + +%--------------------------------------------------------- + %--------------------------------------------------------- \cventry {System / Network Administrator} % Job title {RnD Software Group} % Organization {Bucharest, Romania} % Location - {Apr. 2021 - Present} % Period + {Apr. 2021 - Mar. 2024} % Period {\begin{cvitems} % Description(s) of tasks/responsibilities - \item{System \ Network Administration + \item{Infrastructure \& Virtualization \begin{itemize} - \item{The same kind of job as with mySMTP, only using maybe slightly different tools - Zabbix instead of Nagios / monit, mostly KVM / Proxmox for virtualization, but overall the same System Administrator job} + \item{Deployed and managed Proxmox KVM clusters on Hetzner bare-metal infrastructure with ZFS RAID1 storage} + \item{Designed multi-tier networking: VLANs (10.249.0.0/16), NAT networks (10.248.x.x/24), centralized DHCP} + \item{Built Debian VM templates with automated provisioning (LVM, qemu-agent, Docker pre-installed)} + \item{Migrated legacy virtual infrastructure to newer Proxmox clusters with minimal downtime} \end{itemize} } + \item{Monitoring \& Automation + \begin{itemize} + \item{Deployed Zabbix monitoring infrastructure with Ansible automation (agent deployment, configuration management)} + \item{Created custom automation scripts: PostgreSQL backups, integrity checks, system maintenance} + \item{Managed multi-site VPN infrastructure: OpenVPN (multi-port routing), Tinc VPN for site-to-site connectivity} + \end{itemize} + } + \item{\textbf{Technologies:} Proxmox, KVM, ZFS, Ansible, Zabbix, OpenVPN, Tinc, Docker, PostgreSQL, Debian Linux, Hetzner Cloud} \end{cvitems}} %--------------------------------------------------------- @@ -89,7 +127,7 @@ {Software Implementation and Support Specialist} % Job title {UTI GRUP} % Organization {Bucharest, Romania} % Location - {Apr. 2014 - Jul. 2014} % Period + {Apr. 2014 - Apr. 2015} % Period {\begin{cvitems} % Description(s) of tasks/responsibilities \item{Installing and maintaining software on UTI equipments for RATB (now STB - Bucharest Transport Company). \begin{itemize} @@ -106,25 +144,18 @@ %--------------------------------------------------------- \cventry - {Freelancer during studies on Spiru Haret Music University and 2 years after} % Job title + {Freelancer} % Job title {Self-employed} % Organization {Bucharest, Romania} % Location {Jan. 2010 - Apr. 2014} % Period {\begin{cvitems} % Description(s) of tasks/responsibilities - \item{Projects for personal usage and small businesses (real estate firms, computer shops, etc) including: + \item{Linux system and network administration for small businesses \begin{itemize} - \item{Linux desktop configurations (DE, WM installation / configuration) for clients wanting to migrate on linux but keep a traditional interface look to make the transition smoother} - \item{Linux server configurations (apache, postfix, bind, ftp, openvpn, firewall, sshd)} - \item{NAS configurations based on linux and/or embedded linux} - \item{Network setups (cabling, routers setup, switches installations)} - \item{Web Development} + \item{Server configurations: apache, postfix, bind, ftp, openvpn, firewall, sshd} + \item{NAS configurations and network infrastructure setups} + \item{Web development and system integration projects} \end{itemize} } - \item{DTP work for various small advertising firms (most relevant: Complete Image, Brasov)} - \begin{itemize} - \item{graphics for: business cards, flyers, meshes /banners, logos, catalogs / brochures, posters, etc} - \end{itemize} - \item{Music transcription for various projects including the "LearnToPlay" app (not available on AppStore anymore)} \end{cvitems}} %--------------------------------------------------------- @@ -136,19 +167,7 @@ {Bucharest, Romania} % Location {Jun. 2008 - Sep. 2009} % Period {\begin{cvitems} % Description(s) of tasks/responsibilities - \item{System Administration for Windows server 2008 - \begin{itemize} - \item{Domain Management} - \item{User Management} - \end{itemize} - } - \item{System Administration for Windows workstation} - \begin{itemize} - \item{users setup on client side (user deploy enrollment)} - \item{data backup, restore and recovery} - \end{itemize} - \item{Computers and other office equipment repair and maintainance (printers, print servers, copy machines)} - \item{VoIP equipment setup and maintenance for internal communication} + \item{Windows Server 2008 administration (Domain/User Management), workstation support, VoIP equipment setup and maintenance} \end{cvitems}} %--------------------------------------------------------- @@ -160,26 +179,8 @@ {Bucharest, Romania} % Location {Oct. 2005 - May. 2008} % Period {\begin{cvitems} % Description(s) of tasks/responsibilities - \item{Managing network infrastructure teams on projects for UPC (Astral Telecom) - \begin{itemize} - \item{Receiving project tasks from UPC} - \item{Organising tasks among the specialised teams} - \item{Managing the workflow for high efficiency} - \item{Quality control after each task was completed} - \item{Reporting back to UPC about both completed and in progress tasks} - \item{Analysing (system/technological) situations which exceed the competence of the team and forwarding the issues towards the relevant higher level departments} - \item{Managing working materials for the teams} - \item{Participating in meetings concerning the infrastructure expansion and our role in it} - \end{itemize} - } - \item{Hands-on cabling and network configuration for UPC and own clients of Macsys-Conectix - \begin{itemize} - \item{Optical Fiber soldering, Cabling CATV, UTP} - \item{Client side network setup for different OSes (Windows, Linux, MacOS)} - \item{Server side network setup for Linux (DHCP, iptables)} - \item{Network Troubleshooting} - \end{itemize} - } + \item{Led network infrastructure teams for UPC (Astral Telecom) projects: task organization, workflow management, quality control, and technical escalation} + \item{Hands-on network deployment: Optical Fiber soldering, CATV/UTP cabling, multi-OS client setups, Linux server configuration (DHCP, iptables)} \end{cvitems}} %--------------------------------------------------------- diff --git a/src/cv/skills.tex b/src/cv/skills.tex index 910e177..7c5d70f 100644 --- a/src/cv/skills.tex +++ b/src/cv/skills.tex @@ -11,34 +11,40 @@ % Skills %--------------------------------------------------------- \cvskill{Comfortable Linux Distros} % Category - {ArchLinux, Debian, RedHat} + {ArchLinux, Debian} %--------------------------------------------------------- \cvskill{Shells} % Category {Bash, Zsh, Fish} % Skills %--------------------------------------------------------- \cvskill{Scripting} % Category - {Perl, Shell, JavaScript} % Skills + {Bash, Python, Perl, JavaScript} % Skills +%--------------------------------------------------------- + \cvskill{Databases} % Category + {MySQL/MariaDB, PostgreSQL, Elasticsearch} % Skills +%--------------------------------------------------------- + \cvskill{Networking \& VPN} % Category + {OpenVPN, Tinc VPN, PowerDNS, BIND, VLANs, DHCP} % Skills +%--------------------------------------------------------- + \cvskill{Storage \& Filesystems} % Category + {ZFS, LVM, RAID} % Skills %--------------------------------------------------------- \cvskill{Monitoring} % Category - {Nagios, Monit, Zabbix} % Skills + {Zabbix, Nagios, Monit} % Skills %--------------------------------------------------------- \cvskill{DevOps Tools} % Category - {Docker, Git, .deb Packaging} % Skills + {Docker, Git, Ansible, .deb/.rpm Packaging} % Skills +%--------------------------------------------------------- + \cvskill{High Availability} % Category + {Keepalived, MySQL Replication, Failover} % Skills %--------------------------------------------------------- \cvskill{Markup} % Category {Markdown, HTML, CSS, {\fontfamily{lmr}\selectfont{\LaTeX}}} % Skills %--------------------------------------------------------- \cvskill{Virtualization} % Category - {KVM, Citrix-Xen, VmWare, Proxmox} % Skills + {Proxmox, KVM, Citrix-Xen, VmWare} % Skills %--------------------------------------------------------- - \cvskill{2D Graphics} % Category - {Krita, Inkscape, Adobe Photoshop, Adobe Illustrator, Corel Draw} % Skills -%--------------------------------------------------------- - \cvskill{3D Graphics} % Category - {Blender} % Skills -%--------------------------------------------------------- - \cvskill{CADesign} % Category - {FreeCAD, KiCad} % Skills + \cvskill{Cloud \& Hosting} % Category + {Hetzner, Azure, AWS} % Skills %--------------------------------------------------------- \cvskill{Spoken} % Category {Romanian, English} % Skills