update codebase from upstream + add cv content
This commit is contained in:
parent
8fe498cd98
commit
989077b327
241
NETCONNECT_RESUME.md
Normal file
241
NETCONNECT_RESUME.md
Normal file
@ -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.
|
||||||
BIN
cv.png
BIN
cv.png
Binary file not shown.
|
Before Width: | Height: | Size: 539 KiB After Width: | Height: | Size: 67 KiB |
@ -48,13 +48,14 @@
|
|||||||
%-------------------------------------------------------------------------------
|
%-------------------------------------------------------------------------------
|
||||||
% Needed to make fixed length table
|
% Needed to make fixed length table
|
||||||
\RequirePackage{array}
|
\RequirePackage{array}
|
||||||
|
\RequirePackage{tabularx}
|
||||||
% Needed to handle list environment
|
% Needed to handle list environment
|
||||||
\RequirePackage{enumitem}
|
\RequirePackage{enumitem}
|
||||||
% Needed to handle text alignment
|
% Needed to handle text alignment
|
||||||
\RequirePackage{ragged2e}
|
\RequirePackage{ragged2e}
|
||||||
% Needed to configure page layout
|
% Needed to configure page layout
|
||||||
\RequirePackage{geometry}
|
\RequirePackage{geometry}
|
||||||
% Needed to make header & footer effeciently
|
% Needed to make header & footer efficiently
|
||||||
\RequirePackage{fancyhdr}
|
\RequirePackage{fancyhdr}
|
||||||
% Needed to manage colors
|
% Needed to manage colors
|
||||||
\RequirePackage{xcolor}
|
\RequirePackage{xcolor}
|
||||||
@ -62,6 +63,8 @@
|
|||||||
\RequirePackage{ifxetex}
|
\RequirePackage{ifxetex}
|
||||||
% Needed to use \if-\then-\else statement
|
% Needed to use \if-\then-\else statement
|
||||||
\RequirePackage{xifthen}
|
\RequirePackage{xifthen}
|
||||||
|
% Needed to strip chars from telephone number
|
||||||
|
\RequirePackage{xstring}
|
||||||
% Needed to use a toolbox of programming tools
|
% Needed to use a toolbox of programming tools
|
||||||
\RequirePackage{etoolbox}
|
\RequirePackage{etoolbox}
|
||||||
% Needed to change line spacing in specific environment
|
% Needed to change line spacing in specific environment
|
||||||
@ -76,27 +79,54 @@
|
|||||||
% (https://github.com/posquit0/latex-fontawesome)
|
% (https://github.com/posquit0/latex-fontawesome)
|
||||||
\RequirePackage{fontawesome}
|
\RequirePackage{fontawesome}
|
||||||
\RequirePackage[default,opentype]{sourcesanspro}
|
\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
|
% 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}}
|
\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
|
% Configuration for layout
|
||||||
@ -136,6 +166,7 @@
|
|||||||
\colorlet{text}{darkgray}
|
\colorlet{text}{darkgray}
|
||||||
\colorlet{graytext}{gray}
|
\colorlet{graytext}{gray}
|
||||||
\colorlet{lighttext}{lightgray}
|
\colorlet{lighttext}{lightgray}
|
||||||
|
\colorlet{sectiondivider}{gray}
|
||||||
% Awesome colors
|
% Awesome colors
|
||||||
\definecolor{awesome-emerald}{HTML}{00A388}
|
\definecolor{awesome-emerald}{HTML}{00A388}
|
||||||
\definecolor{awesome-skyblue}{HTML}{0395DE}
|
\definecolor{awesome-skyblue}{HTML}{0395DE}
|
||||||
@ -151,39 +182,12 @@
|
|||||||
\newbool{acvSectionColorHighlight}
|
\newbool{acvSectionColorHighlight}
|
||||||
\setbool{acvSectionColorHighlight}{true}
|
\setbool{acvSectionColorHighlight}{true}
|
||||||
|
|
||||||
% Awesome section color
|
|
||||||
\def\@sectioncolor#1#2#3{%
|
|
||||||
\ifbool{acvSectionColorHighlight}{{\color{awesome}#1#2#3}}{#1#2#3}%
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
%-------------------------------------------------------------------------------
|
%-------------------------------------------------------------------------------
|
||||||
% Configuration for fonts
|
% Configuration for fonts
|
||||||
%-------------------------------------------------------------------------------
|
%-------------------------------------------------------------------------------
|
||||||
% Set the FontAwesome font to be up-to-date.
|
\newcommand*{\headerfont}{\roboto\selectfont}
|
||||||
\newfontfamily\FA[
|
\newcommand*{\headerfontlight}{\roboto\fontseries{l}\selectfont}
|
||||||
Path=\@fontdir
|
\newcommand*{\footerfont}{\sffamily}
|
||||||
]{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}
|
|
||||||
|
|
||||||
%-------------------------------------------------------------------------------
|
%-------------------------------------------------------------------------------
|
||||||
% Configuration for styles
|
% Configuration for styles
|
||||||
@ -197,7 +201,14 @@
|
|||||||
\newcommand*{\headersocialstyle}[1]{{\fontsize{6.8pt}{1em}\headerfont\color{text} #1}}
|
\newcommand*{\headersocialstyle}[1]{{\fontsize{6.8pt}{1em}\headerfont\color{text} #1}}
|
||||||
\newcommand*{\headerquotestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\itshape\color{darktext} #1}}
|
\newcommand*{\headerquotestyle}[1]{{\fontsize{9pt}{1em}\bodyfont\itshape\color{darktext} #1}}
|
||||||
\newcommand*{\footerstyle}[1]{{\fontsize{8pt}{1em}\footerfont\scshape\color{lighttext} #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*{\subsectionstyle}[1]{{\fontsize{12pt}{1em}\bodyfont\scshape\textcolor{text}{#1}}}
|
||||||
\newcommand*{\paragraphstyle}{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text}}
|
\newcommand*{\paragraphstyle}{\fontsize{9pt}{1em}\bodyfontlight\upshape\color{text}}
|
||||||
|
|
||||||
@ -226,7 +237,14 @@
|
|||||||
\newcommand*{\skillsetstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\color{text} #1}}
|
\newcommand*{\skillsetstyle}[1]{{\fontsize{9pt}{1em}\bodyfontlight\color{text} #1}}
|
||||||
|
|
||||||
% For elements of the cover letter
|
% 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*{\recipientaddressstyle}[1]{{\fontsize{9pt}{1em}\bodyfont\scshape\color{graytext} #1}}
|
||||||
\newcommand*{\recipienttitlestyle}[1]{{\fontsize{11pt}{1em}\bodyfont\bfseries\color{darktext} #1}}
|
\newcommand*{\recipienttitlestyle}[1]{{\fontsize{11pt}{1em}\bodyfont\bfseries\color{darktext} #1}}
|
||||||
\newcommand*{\lettertitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\bfseries\color{darktext} \underline{#1}}}
|
\newcommand*{\lettertitlestyle}[1]{{\fontsize{10pt}{1em}\bodyfontlight\bfseries\color{darktext} \underline{#1}}}
|
||||||
@ -277,12 +295,25 @@
|
|||||||
|
|
||||||
% Defines writer's mobile (optional)
|
% Defines writer's mobile (optional)
|
||||||
% Usage: \mobile{<mobile number>}
|
% Usage: \mobile{<mobile number>}
|
||||||
\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)
|
% Defines writer's email (optional)
|
||||||
% Usage: \email{<email address>}
|
% Usage: \email{<email address>}
|
||||||
\newcommand*{\email}[1]{\def\@email{#1}}
|
\newcommand*{\email}[1]{\def\@email{#1}}
|
||||||
|
|
||||||
|
% Defines writer's date of birth (optional)
|
||||||
|
% Usage: \dateofbirth{<date>}
|
||||||
|
\newcommand*{\dateofbirth}[1]{\def\@dateofbirth{#1}}
|
||||||
|
|
||||||
% Defines writer's homepage (optional)
|
% Defines writer's homepage (optional)
|
||||||
% Usage: \homepage{<url>}
|
% Usage: \homepage{<url>}
|
||||||
\newcommand*{\homepage}[1]{\def\@homepage{#1}}
|
\newcommand*{\homepage}[1]{\def\@homepage{#1}}
|
||||||
@ -299,6 +330,10 @@
|
|||||||
% Usage: \gitlab{<gitlab-nick>}
|
% Usage: \gitlab{<gitlab-nick>}
|
||||||
\newcommand*{\gitlab}[1]{\def\@gitlab{#1}}
|
\newcommand*{\gitlab}[1]{\def\@gitlab{#1}}
|
||||||
|
|
||||||
|
% Defines writer's bitbucket (optional)
|
||||||
|
% Usage: \bitbucket{<bitbucket-nick>}
|
||||||
|
\newcommand*{\bitbucket}[1]{\def\@bitbucket{#1}}
|
||||||
|
|
||||||
% Defines writer's stackoverflow profile (optional)
|
% Defines writer's stackoverflow profile (optional)
|
||||||
% Usage: \stackoverflow{<so userid>}{<so username>}
|
% Usage: \stackoverflow{<so userid>}{<so username>}
|
||||||
% e.g.https://stackoverflow.com/users/123456/sam-smith
|
% e.g.https://stackoverflow.com/users/123456/sam-smith
|
||||||
@ -309,10 +344,26 @@
|
|||||||
% Usage: \linkedin{<linked-in-nick>}
|
% Usage: \linkedin{<linked-in-nick>}
|
||||||
\newcommand*{\linkedin}[1]{\def\@linkedin{#1}}
|
\newcommand*{\linkedin}[1]{\def\@linkedin{#1}}
|
||||||
|
|
||||||
|
% Defines writer's orcid (optional)
|
||||||
|
% Usage: \orcid{<orcid-num>}
|
||||||
|
\newcommand*{\orcid}[1]{\def\@orcid{#1}}
|
||||||
|
|
||||||
% Defines writer's twitter (optional)
|
% Defines writer's twitter (optional)
|
||||||
% Usage: \twitter{<twitter handle>}
|
% Usage: \twitter{<twitter handle>}
|
||||||
\newcommand*{\twitter}[1]{\def\@twitter{#1}}
|
\newcommand*{\twitter}[1]{\def\@twitter{#1}}
|
||||||
|
|
||||||
|
% Defines writer's x (formerly twitter) (optional)
|
||||||
|
% Usage: \x{<x account>}
|
||||||
|
\newcommand*{\x}[1]{\def\@x{#1}}
|
||||||
|
|
||||||
|
% Defines writer's Mastodon (optional)
|
||||||
|
% Usage: \mastodon{<instance>}{<mastodon-nick>}
|
||||||
|
\newcommand*{\mastodon}[2]{\def\@mastodoninstance{#1}\def\@mastodonname{#2}}
|
||||||
|
|
||||||
|
% Defines writer's resarchgate (optional)
|
||||||
|
% Usage: \researchgate{<researchgate-account>}
|
||||||
|
\newcommand*{\researchgate}[1]{\def\@researchgate{#1}}
|
||||||
|
|
||||||
% Defines writer's skype (optional)
|
% Defines writer's skype (optional)
|
||||||
% Usage: \skype{<skype account>}
|
% Usage: \skype{<skype account>}
|
||||||
\newcommand*{\skype}[1]{\def\@skype{#1}}
|
\newcommand*{\skype}[1]{\def\@skype{#1}}
|
||||||
@ -329,6 +380,18 @@
|
|||||||
% Usage: \medium{<medium account>}
|
% Usage: \medium{<medium account>}
|
||||||
\newcommand*{\medium}[1]{\def\@medium{#1}}
|
\newcommand*{\medium}[1]{\def\@medium{#1}}
|
||||||
|
|
||||||
|
% Defines writer's kaggle (optional)
|
||||||
|
% Usage: \kaggle{<kaggle handle>}
|
||||||
|
\newcommand*{\kaggle}[1]{\def\@kaggle{#1}}
|
||||||
|
|
||||||
|
% Defines writer's Hackerrank (optional)
|
||||||
|
% Usage: \hackerrank{<Hackerrank profile name>}
|
||||||
|
\newcommand*{\hackerrank}[1]{\def\@hackerrank{#1}}
|
||||||
|
|
||||||
|
% Defines writer's Telegram (optional)
|
||||||
|
% Usage: \telegram{<Telegram username>}
|
||||||
|
\newcommand*{\telegram}[1]{\def\@telegram{#1}}
|
||||||
|
|
||||||
% Defines writer's google scholar profile (optional)
|
% Defines writer's google scholar profile (optional)
|
||||||
% Usage: \googlescholar{<googlescholar userid>}{<googlescholar username>}
|
% Usage: \googlescholar{<googlescholar userid>}{<googlescholar username>}
|
||||||
% e.g.https://scholar.google.co.uk/citations?user=wpZDx1cAAAAJ
|
% e.g.https://scholar.google.co.uk/citations?user=wpZDx1cAAAAJ
|
||||||
@ -344,8 +407,8 @@
|
|||||||
}%
|
}%
|
||||||
}
|
}
|
||||||
|
|
||||||
% Defines writer's extra informations (optional)
|
% Defines writer's extra information (optional)
|
||||||
% Usage: \extrainfo{<extra informations>}
|
% Usage: \extrainfo{<extra information>}
|
||||||
\newcommand*{\extrainfo}[1]{\def\@extrainfo{#1}}
|
\newcommand*{\extrainfo}[1]{\def\@extrainfo{#1}}
|
||||||
|
|
||||||
% Defines writer's quote (optional)
|
% Defines writer's quote (optional)
|
||||||
@ -396,7 +459,7 @@
|
|||||||
\newcommand{\acvHeaderAfterPositionSkip}{.4mm}
|
\newcommand{\acvHeaderAfterPositionSkip}{.4mm}
|
||||||
\newcommand{\acvHeaderAfterAddressSkip}{-.5mm}
|
\newcommand{\acvHeaderAfterAddressSkip}{-.5mm}
|
||||||
\newcommand{\acvHeaderIconSep}{\space}
|
\newcommand{\acvHeaderIconSep}{\space}
|
||||||
\newcommand{\acvHeaderSocialSep}{\quad\textbar\quad}
|
\newcommand{\acvHeaderSocialSep}{\BeginAccSupp{ActualText={}}\quad\textbar\quad\EndAccSupp{}}
|
||||||
\newcommand{\acvHeaderAfterSocialSkip}{6mm}
|
\newcommand{\acvHeaderAfterSocialSkip}{6mm}
|
||||||
\newcommand{\acvHeaderAfterQuoteSkip}{5mm}
|
\newcommand{\acvHeaderAfterQuoteSkip}{5mm}
|
||||||
|
|
||||||
@ -409,6 +472,7 @@
|
|||||||
% Commands for utilities
|
% Commands for utilities
|
||||||
%-------------------------------------------------------------------------------
|
%-------------------------------------------------------------------------------
|
||||||
% Use to align an element of tabular table
|
% Use to align an element of tabular table
|
||||||
|
\renewcommand{\tabularxcolumn}{p}
|
||||||
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
|
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
|
||||||
\newcolumntype{C}[1]{>{\centering\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}}
|
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
|
||||||
@ -419,6 +483,11 @@
|
|||||||
% Use to execute conditional statements by checking empty string
|
% Use to execute conditional statements by checking empty string
|
||||||
\newcommand*{\ifempty}[3]{\ifthenelse{\isempty{#1}}{#2}{#3}}
|
\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
|
% Commands for elements of CV structure
|
||||||
@ -464,86 +533,140 @@
|
|||||||
\ifthenelse{\isundefined{\@mobile}}%
|
\ifthenelse{\isundefined{\@mobile}}%
|
||||||
{}%
|
{}%
|
||||||
{%
|
{%
|
||||||
\faMobile\acvHeaderIconSep\@mobile%
|
\href{\@teluri}{\faAlt{tel:\@mobile}{\faMobile}{\@mobile}}%
|
||||||
\setbool{isstart}{false}%
|
\setbool{isstart}{false}%
|
||||||
}%
|
}%
|
||||||
\ifthenelse{\isundefined{\@email}}%
|
\ifthenelse{\isundefined{\@email}}%
|
||||||
{}%
|
{}%
|
||||||
{%
|
{%
|
||||||
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
|
\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}}%
|
\ifthenelse{\isundefined{\@homepage}}%
|
||||||
{}%
|
{}%
|
||||||
{%
|
{%
|
||||||
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
|
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
|
||||||
\href{http://\@homepage}{\faHome\acvHeaderIconSep\@homepage}%
|
\href{\@homepage}{\faAlt{homepage: \@homepage}{\faHouseChimney}{\@homepage}}%
|
||||||
}%
|
}%
|
||||||
\ifthenelse{\isundefined{\@ciolagit}}%
|
\ifthenelse{\isundefined{\@ciolagit}}%
|
||||||
{}%
|
{}%
|
||||||
{%
|
{%
|
||||||
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
|
\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}}%
|
\ifthenelse{\isundefined{\@github}}%
|
||||||
{}%
|
{}%
|
||||||
{%
|
{%
|
||||||
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
|
\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}}%
|
\ifthenelse{\isundefined{\@gitlab}}%
|
||||||
{}%
|
{}%
|
||||||
{%
|
{%
|
||||||
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
|
\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}}%
|
\ifthenelse{\isundefined{\@stackoverflowid}}%
|
||||||
{}%
|
{}%
|
||||||
{%
|
{%
|
||||||
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
|
\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}}%
|
\ifthenelse{\isundefined{\@linkedin}}%
|
||||||
{}%
|
{}%
|
||||||
{%
|
{%
|
||||||
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
|
\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}}%
|
\ifthenelse{\isundefined{\@twitter}}%
|
||||||
{}%
|
{}%
|
||||||
{%
|
{%
|
||||||
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
|
\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}}%
|
\ifthenelse{\isundefined{\@skype}}%
|
||||||
{}%
|
{}%
|
||||||
{%
|
{%
|
||||||
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
|
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
|
||||||
\faSkype\acvHeaderIconSep\@skype%
|
\faAlt{Skype: \@skype}{\faSkype}{\@skype}%
|
||||||
}%
|
}%
|
||||||
\ifthenelse{\isundefined{\@reddit}}%
|
\ifthenelse{\isundefined{\@reddit}}%
|
||||||
{}%
|
{}%
|
||||||
{%
|
{%
|
||||||
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
|
\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}}%
|
\ifthenelse{\isundefined{\@xing}}%
|
||||||
{}%
|
{}%
|
||||||
{%
|
{%
|
||||||
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
|
\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}}%
|
\ifthenelse{\isundefined{\@medium}}%
|
||||||
{}%
|
{}%
|
||||||
{%
|
{%
|
||||||
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
|
\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}}%
|
\ifthenelse{\isundefined{\@googlescholarid}}%
|
||||||
{}%
|
{}%
|
||||||
{%
|
{%
|
||||||
\ifbool{isstart}{\setbool{isstart}{false}}{\acvHeaderSocialSep}%
|
\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}}%
|
\ifthenelse{\isundefined{\@extrainfo}}%
|
||||||
{}%
|
{}%
|
||||||
@ -576,7 +699,7 @@
|
|||||||
\vspace{\acvSectionTopSkip}
|
\vspace{\acvSectionTopSkip}
|
||||||
\sectionstyle{#1}
|
\sectionstyle{#1}
|
||||||
\phantomsection
|
\phantomsection
|
||||||
\color{gray}\vhrulefill{0.9pt}
|
\color{sectiondivider}\vhrulefill{0.9pt}
|
||||||
}
|
}
|
||||||
|
|
||||||
% Define a subsection for CV
|
% Define a subsection for CV
|
||||||
@ -616,7 +739,9 @@
|
|||||||
{\entrypositionstyle{#1} & \entrydatestyle{#4} \\}
|
{\entrypositionstyle{#1} & \entrydatestyle{#4} \\}
|
||||||
{\entrytitlestyle{#2} & \entrylocationstyle{#3} \\
|
{\entrytitlestyle{#2} & \entrylocationstyle{#3} \\
|
||||||
\entrypositionstyle{#1} & \entrydatestyle{#4} \\}
|
\entrypositionstyle{#1} & \entrydatestyle{#4} \\}
|
||||||
\multicolumn{2}{L{\textwidth}}{\descriptionstyle{#5}}
|
\ifstrempty{#5}
|
||||||
|
{}
|
||||||
|
{\multicolumn{2}{L{\textwidth}}{\descriptionstyle{#5}} \\}
|
||||||
\end{tabular*}%
|
\end{tabular*}%
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -659,25 +784,24 @@
|
|||||||
% Define a line of cv information(honor, award or something else)
|
% Define a line of cv information(honor, award or something else)
|
||||||
% Usage: \cvhonor{<position>}{<title>}{<location>}{<date>}
|
% Usage: \cvhonor{<position>}{<title>}{<location>}{<date>}
|
||||||
\newcommand*{\cvhonor}[4]{%
|
\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
|
% Define an environment for cvskill
|
||||||
\newenvironment{cvskills}{%
|
\newenvironment{cvskills}{%
|
||||||
\vspace{\acvSectionContentTopSkip}
|
\vspace{\acvSectionContentTopSkip}
|
||||||
\vspace{-2.0mm}
|
\vspace{-2.0mm}
|
||||||
\begin{center}
|
|
||||||
\setlength\tabcolsep{1ex}
|
\setlength\tabcolsep{1ex}
|
||||||
\setlength{\extrarowheight}{0pt}
|
\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*}
|
\endtabularx\par
|
||||||
\end{center}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
% Define a line of cv information(skill)
|
% Define a line of cv information(skill)
|
||||||
% Usage: \cvskill{<type>}{<skillset>}
|
% Usage: \cvskill{<type>}{<skillset>}
|
||||||
\newcommand*{\cvskill}[2]{%
|
\newcommand*{\cvskill}[2]{%
|
||||||
\skilltypestyle{#1} & \skillsetstyle{#2} \\
|
\skilltypestyle{#1} & \leavevmode\skillsetstyle{#2} \\
|
||||||
}
|
}
|
||||||
|
|
||||||
% Define an environment for cvitems(for cventry)
|
% Define an environment for cvitems(for cventry)
|
||||||
@ -690,7 +814,7 @@
|
|||||||
}{%
|
}{%
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
\end{justify}
|
\end{justify}
|
||||||
\vspace{-4.0mm}
|
\vspace{1.0mm}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -709,8 +833,9 @@
|
|||||||
\par\addvspace{2.5ex}
|
\par\addvspace{2.5ex}
|
||||||
\phantomsection{}
|
\phantomsection{}
|
||||||
\lettersectionstyle{#1}
|
\lettersectionstyle{#1}
|
||||||
\color{gray}\vhrulefill{0.9pt}
|
\color{sectiondivider}\vhrulefill{0.9pt}
|
||||||
\par\nobreak\addvspace{0.4ex}
|
\par\nobreak\addvspace{0.4ex}
|
||||||
|
\lettertextstyle
|
||||||
}
|
}
|
||||||
|
|
||||||
% Define a title of the cover letter
|
% Define a title of the cover letter
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
{Master Studies in Cyber Security} % Degree
|
{Master Studies in Cyber Security} % Degree
|
||||||
{„Titu Maiorescu” University} % Institution
|
{„Titu Maiorescu” University} % Institution
|
||||||
{Bucharest, Romania} % Location
|
{Bucharest, Romania} % Location
|
||||||
{In progress...} % Date(s)
|
{Jul. 2025} % Date(s)
|
||||||
{} % Description(s) of tasks/responsibilities
|
{} % Description(s) of tasks/responsibilities
|
||||||
%---------------------------------------------------------
|
%---------------------------------------------------------
|
||||||
%---------------------------------------------------------
|
%---------------------------------------------------------
|
||||||
|
|||||||
@ -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
|
\cventry
|
||||||
{System / Network Administrator} % Job title
|
{System / Network Administrator} % Job title
|
||||||
{RnD Software Group} % Organization
|
{RnD Software Group} % Organization
|
||||||
{Bucharest, Romania} % Location
|
{Bucharest, Romania} % Location
|
||||||
{Apr. 2021 - Present} % Period
|
{Apr. 2021 - Mar. 2024} % Period
|
||||||
{\begin{cvitems} % Description(s) of tasks/responsibilities
|
{\begin{cvitems} % Description(s) of tasks/responsibilities
|
||||||
\item{System \ Network Administration
|
\item{Infrastructure \& Virtualization
|
||||||
\begin{itemize}
|
\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}
|
\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}}
|
\end{cvitems}}
|
||||||
|
|
||||||
%---------------------------------------------------------
|
%---------------------------------------------------------
|
||||||
@ -89,7 +127,7 @@
|
|||||||
{Software Implementation and Support Specialist} % Job title
|
{Software Implementation and Support Specialist} % Job title
|
||||||
{UTI GRUP} % Organization
|
{UTI GRUP} % Organization
|
||||||
{Bucharest, Romania} % Location
|
{Bucharest, Romania} % Location
|
||||||
{Apr. 2014 - Jul. 2014} % Period
|
{Apr. 2014 - Apr. 2015} % Period
|
||||||
{\begin{cvitems} % Description(s) of tasks/responsibilities
|
{\begin{cvitems} % Description(s) of tasks/responsibilities
|
||||||
\item{Installing and maintaining software on UTI equipments for RATB (now STB - Bucharest Transport Company).
|
\item{Installing and maintaining software on UTI equipments for RATB (now STB - Bucharest Transport Company).
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
@ -106,25 +144,18 @@
|
|||||||
|
|
||||||
%---------------------------------------------------------
|
%---------------------------------------------------------
|
||||||
\cventry
|
\cventry
|
||||||
{Freelancer during studies on Spiru Haret Music University and 2 years after} % Job title
|
{Freelancer} % Job title
|
||||||
{Self-employed} % Organization
|
{Self-employed} % Organization
|
||||||
{Bucharest, Romania} % Location
|
{Bucharest, Romania} % Location
|
||||||
{Jan. 2010 - Apr. 2014} % Period
|
{Jan. 2010 - Apr. 2014} % Period
|
||||||
{\begin{cvitems} % Description(s) of tasks/responsibilities
|
{\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}
|
\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{Server configurations: apache, postfix, bind, ftp, openvpn, firewall, sshd}
|
||||||
\item{Linux server configurations (apache, postfix, bind, ftp, openvpn, firewall, sshd)}
|
\item{NAS configurations and network infrastructure setups}
|
||||||
\item{NAS configurations based on linux and/or embedded linux}
|
\item{Web development and system integration projects}
|
||||||
\item{Network setups (cabling, routers setup, switches installations)}
|
|
||||||
\item{Web Development}
|
|
||||||
\end{itemize}
|
\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}}
|
\end{cvitems}}
|
||||||
|
|
||||||
%---------------------------------------------------------
|
%---------------------------------------------------------
|
||||||
@ -136,19 +167,7 @@
|
|||||||
{Bucharest, Romania} % Location
|
{Bucharest, Romania} % Location
|
||||||
{Jun. 2008 - Sep. 2009} % Period
|
{Jun. 2008 - Sep. 2009} % Period
|
||||||
{\begin{cvitems} % Description(s) of tasks/responsibilities
|
{\begin{cvitems} % Description(s) of tasks/responsibilities
|
||||||
\item{System Administration for Windows server 2008
|
\item{Windows Server 2008 administration (Domain/User Management), workstation support, VoIP equipment setup and maintenance}
|
||||||
\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}
|
|
||||||
\end{cvitems}}
|
\end{cvitems}}
|
||||||
|
|
||||||
%---------------------------------------------------------
|
%---------------------------------------------------------
|
||||||
@ -160,26 +179,8 @@
|
|||||||
{Bucharest, Romania} % Location
|
{Bucharest, Romania} % Location
|
||||||
{Oct. 2005 - May. 2008} % Period
|
{Oct. 2005 - May. 2008} % Period
|
||||||
{\begin{cvitems} % Description(s) of tasks/responsibilities
|
{\begin{cvitems} % Description(s) of tasks/responsibilities
|
||||||
\item{Managing network infrastructure teams on projects for UPC (Astral Telecom)
|
\item{Led network infrastructure teams for UPC (Astral Telecom) projects: task organization, workflow management, quality control, and technical escalation}
|
||||||
\begin{itemize}
|
\item{Hands-on network deployment: Optical Fiber soldering, CATV/UTP cabling, multi-OS client setups, Linux server configuration (DHCP, iptables)}
|
||||||
\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}
|
|
||||||
}
|
|
||||||
\end{cvitems}}
|
\end{cvitems}}
|
||||||
|
|
||||||
%---------------------------------------------------------
|
%---------------------------------------------------------
|
||||||
|
|||||||
@ -11,34 +11,40 @@
|
|||||||
% Skills
|
% Skills
|
||||||
%---------------------------------------------------------
|
%---------------------------------------------------------
|
||||||
\cvskill{Comfortable Linux Distros} % Category
|
\cvskill{Comfortable Linux Distros} % Category
|
||||||
{ArchLinux, Debian, RedHat}
|
{ArchLinux, Debian}
|
||||||
%---------------------------------------------------------
|
%---------------------------------------------------------
|
||||||
\cvskill{Shells} % Category
|
\cvskill{Shells} % Category
|
||||||
{Bash, Zsh, Fish} % Skills
|
{Bash, Zsh, Fish} % Skills
|
||||||
%---------------------------------------------------------
|
%---------------------------------------------------------
|
||||||
\cvskill{Scripting} % Category
|
\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
|
\cvskill{Monitoring} % Category
|
||||||
{Nagios, Monit, Zabbix} % Skills
|
{Zabbix, Nagios, Monit} % Skills
|
||||||
%---------------------------------------------------------
|
%---------------------------------------------------------
|
||||||
\cvskill{DevOps Tools} % Category
|
\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
|
\cvskill{Markup} % Category
|
||||||
{Markdown, HTML, CSS, {\fontfamily{lmr}\selectfont{\LaTeX}}} % Skills
|
{Markdown, HTML, CSS, {\fontfamily{lmr}\selectfont{\LaTeX}}} % Skills
|
||||||
%---------------------------------------------------------
|
%---------------------------------------------------------
|
||||||
\cvskill{Virtualization} % Category
|
\cvskill{Virtualization} % Category
|
||||||
{KVM, Citrix-Xen, VmWare, Proxmox} % Skills
|
{Proxmox, KVM, Citrix-Xen, VmWare} % Skills
|
||||||
%---------------------------------------------------------
|
%---------------------------------------------------------
|
||||||
\cvskill{2D Graphics} % Category
|
\cvskill{Cloud \& Hosting} % Category
|
||||||
{Krita, Inkscape, Adobe Photoshop, Adobe Illustrator, Corel Draw} % Skills
|
{Hetzner, Azure, AWS} % Skills
|
||||||
%---------------------------------------------------------
|
|
||||||
\cvskill{3D Graphics} % Category
|
|
||||||
{Blender} % Skills
|
|
||||||
%---------------------------------------------------------
|
|
||||||
\cvskill{CADesign} % Category
|
|
||||||
{FreeCAD, KiCad} % Skills
|
|
||||||
%---------------------------------------------------------
|
%---------------------------------------------------------
|
||||||
\cvskill{Spoken} % Category
|
\cvskill{Spoken} % Category
|
||||||
{Romanian, English} % Skills
|
{Romanian, English} % Skills
|
||||||
|
|||||||
Loading…
Reference in New Issue
user.block.title