diff options
Diffstat (limited to 'app')
27 files changed, 0 insertions, 1103 deletions
diff --git a/app/assets/android-chrome-192x192.png b/app/assets/android-chrome-192x192.png Binary files differdeleted file mode 100644 index 0abde99..0000000 --- a/app/assets/android-chrome-192x192.png +++ /dev/null diff --git a/app/assets/apple-touch-icon.png b/app/assets/apple-touch-icon.png Binary files differdeleted file mode 100644 index 56687f2..0000000 --- a/app/assets/apple-touch-icon.png +++ /dev/null diff --git a/app/assets/browserconfig.xml b/app/assets/browserconfig.xml deleted file mode 100644 index b3930d0..0000000 --- a/app/assets/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<browserconfig> - <msapplication> - <tile> - <square150x150logo src="/mstile-150x150.png"/> - <TileColor>#da532c</TileColor> - </tile> - </msapplication> -</browserconfig> diff --git a/app/assets/de.html b/app/assets/de.html deleted file mode 100644 index 37f4b9a..0000000 --- a/app/assets/de.html +++ /dev/null @@ -1,310 +0,0 @@ -<!DOCTYPE html> -<html lang="de"> - <head> - <meta charset="utf-8" /> - <title>A14M</title> - <link href="/web.css" rel="stylesheet" media="all" /> - <link href="/print.css" rel="stylesheet" media="print" /> - <link rel="shortcut icon" href="/favicon.ico" /> - <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" /> - <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" /> - <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" /> - <link rel="manifest" href="/site.webmanifest" /> - <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#000" /> - <meta name="msapplication-TileColor" content="#da532c" /> - <meta name="theme-color" content="#ffffff" /> - - <meta name="author" content="Ahmed AbdelHalim" /> - <meta name="description" content="A14M · Platform Engineer/DevOps" /> - <meta name="keywords" content="DevOps, go, docker, ansible, python, bash, CI, CD, TDD, BDD, AWS, terraform, GCP, k8s, kubernetes, grafana, prometheus, loki, ELK" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <meta name="color-scheme" content="dark light" /> - </head> - - <body> - <main> - <header class="header"> - <a class="header__language" lang="en" href="/">[EN]</a> - <h1 class="header__name">Ahmed AbdelHalim</h1> - <em class="header__job-title">Plattform-Ingenieur · DevOps</em> - <address class="header__contact-info"> - <div class="header__location">Berlin, Deutschland</div> - <div class="header__tel"><a href="tel:+491770126386">+49 177 912 6386</a></div> - <div class="header__email"><a href="mailto:[email protected]">[email protected]</a></div> - <div class="header__website"><a href="https://a14m.me">website</a></div> - <div class="header__srht"><a href="https://git.sr.ht/~a14m">sr.ht</a></div> - <div class="header__github"><a href="https://github.com/a14m">Github</a></div> - <div class="header__stackoverflow"> - <a href="https://stackoverflow.com/users/1769515/a14m">StackOverflow</a> - </div> - <div class="header__linkedin"><a href="https://www.linkedin.com/in/a14m">LinkedIn</a></div> - <div class="header__pgp"><a href="/key.asc">PGP</a></div> - </address> - </header> - - <article class="summary"> - <h2 class="summary__header section-header">Summary</h2> - <p class="summary__content"> - Plattform-Ingenieur mit - 10+ Jahre Erfahrung in der Software-Entwicklung (Backend/API-fokussiert), - 5+ Jahre Erfahrung in Infrastruktur-Automatisierung und DevOps, - Hobby-Sicherheitsanalytiker und -tester. - Ein begeisterter Fan von Automatisierung, Nachhaltigkeit, Design Patterns und sauberem Code. - Immer daran interessiert, eine bessere Problemlösungsmethode für anspruchsvolle Aufgaben zu finden, - und sinnvolle neue Technologien und Tools zu erlernen (wenn die Notwendigkeit besteht). - </p> - </article> - <article class="skills"> - <h2 class="skills__header section-header">Kenntnisse</h2> - <dl class="skills__content"> - <dt class="skills__title">DevOps</dt> - <dd class="skills__items">Kubernetes, Terraform, Docker, Ansible, CloudFoundry, Helm, Fastly, Vault, - Concourse, Artifactory, ... - </dd> - - <dt class="skills__title">Telemetrie</dt> - <dd class="skills__items">Grafana, Prometheus, Loki, <abbr title="Elasticsearch Logstash Kibana">ELK</abbr>, - Sentry, Tempo. - </dd> - - <dt class="skills__title">Kodierung</dt> - <dd class="skills__items">Go, Ruby, Python, Bash, Rust.</dd> - - <dt class="skills__title">Paradigmen</dt> - <dd class="skills__items"> - Design Patterns, Test Driven Development (<abbr>TDD</abbr>), Behavior Driven Development (<abbr>BDD</abbr>), - Continuous Integration and Delivery (<abbr>CI/CD</abbr>), Infrastructure as Code (<abbr>IaC</abbr>), - Configuration as Code, RESTful APIs, Micro-Services. - </dd> - - <dt class="skills__title">Tools</dt> - <dd class="skills__items"> - vim, git, tmux, ssh, bash, kubectl, kubevela, ansible, helmfile, vagrant, docker, certbot, dig, bosh, vault, - nc, nmap, curl, ffuf, gobuster, sqlmap, xxd, searchsploit, meta-sploit, commix, gdb, ltrace, ... - </dd> - - <dt class="skills__title">Plattformen</dt> - <dd class="skills__items"> - Amazon Web Services (<abbr>AWS</abbr>), DigitalOcean, Heroku, Google Cloud Platform (<abbr>GCP</abbr>), - Linux. - </dd> - - <dt class="skills__title">Sprachen</dt> - <dd class="skills__items">Englisch (C2), Deutsch (B1), Arabisch (Muttersprache).</dd> - </dl> - </article> - - <article class="work"> - <h2 class="work__header section-header">Berufserfahrungen</h2> - <article class="work__experience"> - <div class="job-position"> - <h2 class="job-position__company"> - <a href="https://group.springernature.com/gp/group">Springer Nature AG & Co. KGaA</a> - </h2> - <em class="job-position__title">Platform Engineer</em> - <em class="job-position__duration">Feb. 2022 - Aug. 2022</em> - <em class="job-position__location">Berlin, Germany</em> - </div> - <p class="note">Arbeiten als Teil des <b>Engineering Enablement</b>-Teams, das Infrastruktur bereitstellt, - interne Tools, Dokumente, CloudFoundry-Plattform und Kubernetes-Cluster, - um die Entwicklungsteams bei ihren täglichen Aufgaben zu unterstützen.</p> - <ul class="tasks"> - <li>Arbeitete an interner <a href="https://github.com/springernature/halfpipe">(Halfpipe)</a> - Tools zum Erstellen von CI/CD-Pipelines auf Github-Aktionen und Concourse.</li> - <li>Implementierte wiederverwendbare GitHub Actions-Workflows für die Bereitstellung in CloudFoundry, Kubernetes und - Docker-Registrierungen.</li> - <li>Implementierte Tools zum Anzeigen und Melden des Kubernetes-Bereitstellungsstatus (von CI/CD) an die jeweiligen Teams, - und benachrichtigen Sie sie bei Fehlern. - </li> - <li> Implementierter Alert-Routing-Service zur Integration mit Prometheus - <a href="https://prometheus.io/docs/alerting/latest/alertmanager/">Alert-Manager</a>. - Und sendet Benachrichtigungen an verschiedene Teams/Projekte und vorkonfigurierte Slack-Kanäle oder E-Mails.</li> - <li>Gepflegte Teamdokumente, die von anderen Entwicklungsteams verwendet werden, um sie in interne Plattformen zu integrieren und zu verwenden.</li> - <li>Wartung der von Terraform bereitgestellten Infrastruktur verschiedener Teile der Plattformen.</li> - </ul> - </article> - <article class="work__experience"> - <div class="job-position"> - <h2 class="job-position__company"><a href="https://sapera.com/">Sapera GmbH.</a></h2> - <em class="job-position__title">Senior Developer/DevOps</em> - <em class="job-position__duration">Apr. 2018 - Nov. 2021</em> - <em class="job-position__location">Berlin, Germany</em> - </div> - <ul class="tasks"> - <li> - Implementierte Infrastruktur als Code (<abbr>IaC</abbr>) für verschiedene Projekte mit Terraform und Ansible. - </li> - <li>Standardisierung des Bereitstellungsprozesses (und Pflege der Prozessdokumentation).</li> - <li>Erstellte Vorlagen zur Bereitstellung von Infrastruktur auf verschiedenen Cloud-Anbietern und in Entwicklungsstadien.</li> - <li> - Aufbau standardisierter Workflows mit CircleCI zur Automatisierung von Bereitstellungen (für interne und externe Projekte). - </li> - <li> - Implementierung und Wartung der (Rails 5) JSON-API für unsere - <a href="#note1"> Infografik-Portal[1]</a>. - </li> - <li> - Gepflegt 99+% Dokumentationsabdeckung des <a href="#note1"> Infografik-Portals[1]</a>. API - und 90+% Testabdeckung. - </li> - <li>Arbeitete mit Docker zusammen, um Ergebnisse für einige unserer externen Projekte bereitzustellen.</li> - <li> - Unterstützung und Anleitung zur Arbeit mit unseren standardmäßigen Bereitstellungsworkflows (intern und extern). - </li> - <li>Arbeitete eng mit unserem Systemingenieur zusammen, um ihn bei verschiedenen DevOps-Aufgaben zu unterstützen.</li> - <li> - Einige der Datenpipelines wurden neu geschrieben, gewartet und bereitgestellt, um bessere Sicherheitsstandards einzuhalten. - </li> - </ul> - <p class="note"> - <a id="note1" href="#note1">[1]</a> Eine funktionierende Version des Infografik-Portals wurde erworben von - <a href="https://scrollytelling.net/">Scrolly Telling GmbH</a> und noch von ihnen bearbeitet wie gesehen bei - <a href="https://five-times.com/">Five-Times</a>. - </p> - </article> - <article class="work__experience"> - <div class="job-position"> - <h2 class="job-position__company"><a href="https://liqid.de/">LIQID GmbH.</a></h2> - <em class="job-position__title">Senior Backend Developer</em> - <em class="job-position__duration">Mar. 2016 - Dec. 2017</em> - <em class="job-position__location">Berlin, Germany</em> - </div> - <ul class="tasks"> - <li>Wartung der RESTful-API (von Administratoren und Front-End verwendet).</li> - <li>Umsetzung und Pflege der Integration mit der Deutschen Bank.</li> - <li> - Implementierung und Wartung der Integration mit Intercom - <abbr title="Kundenbeziehungsmanagement">CRM.</abbr> - </li> - <li>Implementierung und Wartung des Rechnungssystems.</li> - <li> - Implementiert die neue Authentifizierungsschicht mit - <a href="https://tools.ietf.org/html/rfc7519">(RFC7519: JWT)</a>. - </li> - <li>Die Zwei-Faktor-Authentifizierung (<abbr>2FA</abbr>) für die Benutzer-/Client-Anmeldung implementiert.</li> - <li>Integrierte andere Dienste wie DocuSign, PostIdent,...</li> - <li>Umgesetzte tägliche Geschäfts-/Marketing-/technische Anforderungen.</li> - </ul> - </article> - <article class="work__experience"> - <div class="job-position"> - <h2 class="job-position__company">PrioriData GmbH.</h2> - <em class="job-position__title">Full Stack Developer</em> - <em class="job-position__duration">Jul. 2015 - Feb. 2016</em> - <em class="job-position__location">Berlin, Germany</em> - </div> - <p class="note">Wurde von <a href="https://airnow.com/">Airnow Data Ltd.</a> übernommen.</p> - <ul class="tasks"> - <li>Wartung der Rails-Web-App (Dashboard).</li> - <li>Der Scraping-Prozess zum Abrufen der Daten aus Apple- und GooglePlay-Stores wurde optimiert.</li> - <li>Warteschlangen und Überwachung rund um die Scraper neu implementiert.</li> - <li>Migrierte erfasste Daten aus verschiedenen Ressourcen zu Google BigQuery.</li> - <li> - Wartung und Bereitstellung von <abbr title="Virtual Machines">VM</abbr>-Instanzen für verschiedene Zwecke bei Google - Cloud-Plattform (mit chef). - </li> - <li> - “Extract” Schritt in die - <abbr title="Extract, Transform, Load">ETL</abbr>-Prozess (unter Verwendung eines API-basierten Crawlers anstelle von phantomJS - Browser). - </li> - </ul> - </article> - <article class="work__experience"> - <div class="job-position"> - <h2 class="job-position__company">AskNative</h2> - <em class="job-position__title">Backend Developer/DevOps</em> - <em class="job-position__duration">May. 2013 - Jul. 2015</em> - <em class="job-position__location">Remote, Egypt</em> - </div> - <ul class="tasks"> - <li>Implementierte die Testsuite für die API.</li> - <li>Veranstaltungsbuchungsfunktion über Stripe implementiert.</li> - <li>Neu implementiertes Caching für bessere Antwortzeiten.</li> - <li>Wartung der Heroku-Stacks für Staging/Produktion.</li> - <li> - Große Teile der API neu implementiert, um besseren Designmustern zu folgen - (Sechseckige Architektur und <abbr title="Publish-Subscribe">Pub/Sub</abbr>-Muster). - </li> - </ul> - </article> - </article> - - <article class="projects"> - <h2 class="projects_header section-header">Schreiben</h2> - <article class="project"> - <h2 class="project__title">The Publish/Subscribe Pattern on Rails</h2> - <p class="project__content"> - Ein - <a href="https://www.toptal.com/ruby-on-rails/the-publish-subscribe-pattern-on-rails"> - Toptal veröffentlichter Blogbeitrag - </a> - zur Implementierung des <abbr title="Publish-Subscribe">Pub/Sub</abbr>-Musters in der Praxis von Rails-Anwendungen. - </p> - </article> - <article class="project"> - <h2 class="project__title">Clean Code and the Art of Exception Handling</h2> - <p class="project__content"> - Ein - <a href="https://www.toptal.com/abap/clean-code-and-the-art-of-exception-handling"> - Toptal veröffentlichter Blogbeitrag - </a> - über verschiedene Taktiken und Strategien für die Ausnahmebehandlung und wie man sie einsetzt, um saubereren Code zu schreiben. - </p> - </article> - <article class="project"> - <h2 class="project__title"> - <a href="https://git.sr.ht/~a14m/OTW"> Over The Wire Lösungen</a> - </h2> - <p class="project__content"> - Lösungen für einige der <a href="https://overthewire.org/wargames/">OTW-Kriegsspiele</a> - in einem README-Dateiformat dokumentiert. - </p> - </article> - <article class="project"> - <h2 class="project__title"> - <a href="https://git.sr.ht/~a14m/HTB"> Hack The Box Lösungen</a> - </h2> - <p class="project__content"> - Lernsicherheitsanalyse durch Dokumentieren der Lösungen für einige der - <a href="https://hackthebox.eu">HTB-Maschinen</a> - in einem README-Dateiformat. - </p> - </article> - </article> - - <article class="projects"> - <h2 class="projects__header section-header">Projekte</h2> - <article class="project"> - <h2 class="project__title"> - <a href="https://git.sr.ht/~a14m/game-of-life"> Conway's Game of Life </a> - </h2> - <p class="project__content"> - Ein Mono-Repo mit verschiedenen Implementierungen der Befehlszeilenschnittstelle (<abbr>CLI</abbr>) für die - <a href="https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Spiel des Lebens</a> in mehreren Sprachen - (derzeit Ruby/Rust), mit der Automatisierung zum Veröffentlichen von Updates für verschiedene Paketmanager mit a - Gitarrischer Workflow. - </p> - </article> - <article class="project"> - <h2 class="project__title"> - <a href="https://git.sr.ht/~a14m/a14m.srht.site"> a14m.srht.site </a> - </h2> - <p class="project__content">Der Quellcode und die Bereitstellungsskripte für diese Website/diesen Lebenslauf.</p> - </article> - </article> - - <article class="education"> - <h2 class="education__header section-header">Ausbildung</h2> - <article class="education__details"> - <h2 class="education__degree">B.E. in Computer Science and Engineering</h2> - <p class="education__university">Arab Academy for Science and Technology</p> - <p class="education__gpa">GPA 3.1/4.0 (B - Sehr Gut)</p> - <em class="education__location">Alexandria, Egypt</em> - <em class="education__duration">Sep. 2005 - Jan. 2011</em> - </article> - </article> - </main> - <footer></footer> - </body> -</html> diff --git a/app/assets/favicon-16x16.png b/app/assets/favicon-16x16.png Binary files differdeleted file mode 100644 index fdf8171..0000000 --- a/app/assets/favicon-16x16.png +++ /dev/null diff --git a/app/assets/favicon-32x32.png b/app/assets/favicon-32x32.png Binary files differdeleted file mode 100644 index a321a58..0000000 --- a/app/assets/favicon-32x32.png +++ /dev/null diff --git a/app/assets/favicon.ico b/app/assets/favicon.ico Binary files differdeleted file mode 100644 index a81b32b..0000000 --- a/app/assets/favicon.ico +++ /dev/null diff --git a/app/assets/index.html b/app/assets/index.html deleted file mode 100644 index f40a7bc..0000000 --- a/app/assets/index.html +++ /dev/null @@ -1,310 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8" /> - <title>A14M</title> - <link href="/web.css" rel="stylesheet" media="all" /> - <link href="/print.css" rel="stylesheet" media="print" /> - <link rel="shortcut icon" href="/favicon.ico" /> - <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" /> - <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" /> - <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" /> - <link rel="manifest" href="/site.webmanifest" /> - <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#000" /> - <meta name="msapplication-TileColor" content="#da532c" /> - <meta name="theme-color" content="#ffffff" /> - - <meta name="author" content="Ahmed AbdelHalim" /> - <meta name="description" content="A14M · Platform Engineer/DevOps" /> - <meta name="keywords" content="DevOps, go, docker, ansible, python, bash, CI, CD, TDD, BDD, AWS, terraform, GCP, k8s, kubernetes, grafana, prometheus, loki, ELK" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <meta name="color-scheme" content="dark light" /> - </head> - - <body> - <main> - <header class="header"> - <a class="header__language" lang="de" href="/de.html">[DE]</a> - <h1 class="header__name">Ahmed AbdelHalim</h1> - <em class="header__job-title">Platform Engineer · DevOps</em> - <address class="header__contact-info"> - <div class="header__location">Berlin, Germany</div> - <div class="header__tel"><a href="tel:+491770126386">+49 177 912 6386</a></div> - <div class="header__email"><a href="mailto:[email protected]">[email protected]</a></div> - <div class="header__website"><a href="https://a14m.me">website</a></div> - <div class="header__srht"><a href="https://git.sr.ht/~a14m">sr.ht</a></div> - <div class="header__github"><a href="https://github.com/a14m">Github</a></div> - <div class="header__stackoverflow"> - <a href="https://stackoverflow.com/users/1769515/a14m">StackOverflow</a> - </div> - <div class="header__linkedin"><a href="https://www.linkedin.com/in/a14m">LinkedIn</a></div> - <div class="header__pgp"><a href="/key.asc">PGP</a></div> - </address> - </header> - - <article class="summary"> - <h2 class="summary__header section-header">Summary</h2> - <p class="summary__content"> - Platform engineer with - 10+ years of experience in software development (backend/API focused), - 5+ years in infrastructure automation and DevOps, - hobbyist security analyst and tester. - An avid fan of automation, sustainability, design patterns, and clean code. - Always interested in deriving a better problem-solving method for challenging tasks, - and learning sensible new technologies and tools (when the need arises). - </p> - </article> - <article class="skills"> - <h2 class="skills__header section-header">Skills</h2> - <dl class="skills__content"> - <dt class="skills__title">DevOps</dt> - <dd class="skills__items">Kubernetes, Terraform, Docker, Ansible, CloudFoundry, Helm, Fastly, Vault, - Concourse, Artifactory, ... - </dd> - - <dt class="skills__title">Telemetry</dt> - <dd class="skills__items">Grafana, Prometheus, Loki, <abbr title="Elasticsearch Logstash Kibana">ELK</abbr>, - Sentry, Tempo. - </dd> - - <dt class="skills__title">Coding</dt> - <dd class="skills__items">Go, Ruby, Python, Bash, Rust.</dd> - - <dt class="skills__title">Paradigms</dt> - <dd class="skills__items"> - Design Patterns, Test Driven Development (<abbr>TDD</abbr>), Behavior Driven Development (<abbr>BDD</abbr>), - Continuous Integration and Delivery (<abbr>CI/CD</abbr>), Infrastructure as Code (<abbr>IaC</abbr>), - Configuration as Code, RESTful APIs, Micro-Services. - </dd> - - <dt class="skills__title">Tools</dt> - <dd class="skills__items"> - vim, git, tmux, ssh, bash, kubectl, kubevela, ansible, helmfile, vagrant, docker, certbot, dig, bosh, vault, - nc, nmap, curl, ffuf, gobuster, sqlmap, xxd, searchsploit, meta-sploit, commix, gdb, ltrace, ... - </dd> - - <dt class="skills__title">Platforms</dt> - <dd class="skills__items"> - Amazon Web Services (<abbr>AWS</abbr>), DigitalOcean, Heroku, Google Cloud Platform (<abbr>GCP</abbr>), - Linux. - </dd> - - <dt class="skills__title">Languages</dt> - <dd class="skills__items">English (Professional), German (Basic), Arabic (Native).</dd> - </dl> - </article> - - <article class="work"> - <h2 class="work__header section-header">Work Experience</h2> - <article class="work__experience"> - <div class="job-position"> - <h2 class="job-position__company"> - <a href="https://group.springernature.com/gp/group">Springer Nature AG & Co. KGaA</a> - </h2> - <em class="job-position__title">Platform Engineer</em> - <em class="job-position__duration">Feb. 2022 - Aug. 2022</em> - <em class="job-position__location">Berlin, Germany</em> - </div> - <p class="note">Working as part of the <b>Engineering Enablement</b> team, that provides infrastructure, - internal tooling, docs, CloudFoundry platform, and Kubernetes clusters, - to help the development teams with their daily tasks.</p> - <ul class="tasks"> - <li>Worked on internal <a href="https://github.com/springernature/halfpipe">(halfpipe)</a> - tooling for building CI/CD pipelines on Github actions and Concourse.</li> - <li>Implemented reusable GitHub Actions workflows for deploying to CloudFoundry, Kubernetes, and - Docker Registries.</li> - <li>Implemented tooling to show and report Kubernetes deployment status (from CI/CD) to respective teams, - and notify them on failure. - </li> - <li> Implemented alert-routing service, to integrate with Prometheus - <a href="https://prometheus.io/docs/alerting/latest/alertmanager/">alert-manager</a>. - And sends alerts to different teams/projects, and preconfigured Slack channels or emails.</li> - <li>Maintained team docs used by other development teams, to integrate with and use internal platforms.</li> - <li>Maintained terraform-provisioned infrastructure of different parts of the platforms.</li> - </ul> - </article> - <article class="work__experience"> - <div class="job-position"> - <h2 class="job-position__company"><a href="https://sapera.com/">Sapera GmbH.</a></h2> - <em class="job-position__title">Senior Developer/DevOps</em> - <em class="job-position__duration">Apr. 2018 - Nov. 2021</em> - <em class="job-position__location">Berlin, Germany</em> - </div> - <ul class="tasks"> - <li> - Implemented infrastructure as code (<abbr>IaC</abbr>) for different projects using Terraform and Ansible. - </li> - <li>Standardized the deployment process (and maintained the process documentation).</li> - <li>Built templates to provision infrastructure on different cloud providers and development stages.</li> - <li> - Built standardized workflows using CircleCI to automate deployments (for internal and external projects). - </li> - <li> - Implemented and maintained the (Rails 5) JSON API serving our - <a href="#note1"> infographics portal[1]</a>. - </li> - <li> - Maintained 99+% documentation coverage of the <a href="#note1"> infographics portal[1]</a>. API - and 90+% test coverage. - </li> - <li>Worked with Docker to provide deliverables for some of our external projects.</li> - <li> - Provided support and tutoring to work with our standard deployment workflows (internally and externally). - </li> - <li>Worked closely with our Systems Engineer to support with various DevOps tasks.</li> - <li> - Rewrote, maintained and provisioned some of the data pipelines to adhere to a better security standards. - </li> - </ul> - <p class="note"> - <a id="note1" href="#note1">[1]</a> A working version of the infographics portal was acquired by - <a href="https://scrollytelling.net/"> Scrolly Telling GmbH</a> and still worked on by them as seen at - <a href="https://five-times.com/"> Five-Times</a>. - </p> - </article> - <article class="work__experience"> - <div class="job-position"> - <h2 class="job-position__company"><a href="https://liqid.de/">LIQID GmbH.</a></h2> - <em class="job-position__title">Senior Backend Developer</em> - <em class="job-position__duration">Mar. 2016 - Dec. 2017</em> - <em class="job-position__location">Berlin, Germany</em> - </div> - <ul class="tasks"> - <li>Maintained the RESTful API (used by admins and front-end).</li> - <li>Implemented and maintained the integration with Deutsche Bank.</li> - <li> - Implemented and maintained the integration with Intercom - <abbr title="Customer Relationship Management">CRM.</abbr> - </li> - <li>Implemented and maintained the Invoicing system.</li> - <li> - Implemented the new authentication layer using - <a href="https://tools.ietf.org/html/rfc7519">(RFC7519: JWT)</a>. - </li> - <li>Implemented the Two-Factor Authentication (<abbr>2FA</abbr>) for user/client login.</li> - <li>Integrated other services like DocuSign, PostIdent,...</li> - <li>Implemented day to day business/marketing/technical requirements.</li> - </ul> - </article> - <article class="work__experience"> - <div class="job-position"> - <h2 class="job-position__company">PrioriData GmbH.</h2> - <em class="job-position__title">Full Stack Developer</em> - <em class="job-position__duration">Jul. 2015 - Feb. 2016</em> - <em class="job-position__location">Berlin, Germany</em> - </div> - <p class="note">Was acquired by <a href="https://airnow.com/">Airnow Data Ltd.</a></p> - <ul class="tasks"> - <li>Maintained the Rails web (dashboard) app.</li> - <li>Optimized the scraping process of getting the data from Apple and GooglePlay stores.</li> - <li>Reimplemented the queueing and monitoring around the scrapers.</li> - <li>Migrated acquired data from different resources to Google BigQuery.</li> - <li> - Maintained and provisioned different purpose <abbr title="Virtual Machines">VM</abbr> instances on Google - Cloud Platform (using chef). - </li> - <li> - Reimplemented the “Extract” step in the - <abbr title="Extract, Transform, Load">ETL</abbr> process (using an API based crawler instead of phantomJS - browser). - </li> - </ul> - </article> - <article class="work__experience"> - <div class="job-position"> - <h2 class="job-position__company">AskNative</h2> - <em class="job-position__title">Backend Developer/DevOps</em> - <em class="job-position__duration">May. 2013 - Jul. 2015</em> - <em class="job-position__location">Remote, Egypt</em> - </div> - <ul class="tasks"> - <li>Implemented the test suite for the API.</li> - <li>Implemented events booking feature via Stripe.</li> - <li>Reimplemented caching for better response times.</li> - <li>Maintained the Heroku stacks for staging/production.</li> - <li> - Reimplemented large portions of the API to follow better design patterns - (Hexagonal Architecture, and <abbr title="Publish-Subscribe">Pub/Sub</abbr> pattern). - </li> - </ul> - </article> - </article> - - <article class="projects"> - <h2 class="projects_header section-header">Writing</h2> - <article class="project"> - <h2 class="project__title">The Publish/Subscribe Pattern on Rails</h2> - <p class="project__content"> - A - <a href="https://www.toptal.com/ruby-on-rails/the-publish-subscribe-pattern-on-rails"> - Toptal published blog post - </a> - on implementing the <abbr title="Publish-Subscribe">Pub/Sub</abbr> pattern in practice in Rails apps. - </p> - </article> - <article class="project"> - <h2 class="project__title">Clean Code and the Art of Exception Handling</h2> - <p class="project__content"> - A - <a href="https://www.toptal.com/abap/clean-code-and-the-art-of-exception-handling"> - Toptal published blog post - </a> - on different tactics and strategies for exception handling and how to employ them to write cleaner code. - </p> - </article> - <article class="project"> - <h2 class="project__title"> - <a href="https://git.sr.ht/~a14m/OTW"> Over The Wire Solutions </a> - </h2> - <p class="project__content"> - Solutions for some of the <a href="https://overthewire.org/wargames/">OTW wargames</a> - documented in a README files format. - </p> - </article> - <article class="project"> - <h2 class="project__title"> - <a href="https://git.sr.ht/~a14m/HTB"> Hack The Box Solutions </a> - </h2> - <p class="project__content"> - Learning security analysis via documenting the solutions for some of the - <a href="https://hackthebox.eu">HTB machines</a> - in a README files format. - </p> - </article> - </article> - - <article class="projects"> - <h2 class="projects__header section-header">Projects</h2> - <article class="project"> - <h2 class="project__title"> - <a href="https://git.sr.ht/~a14m/game-of-life"> Conway's Game of Life </a> - </h2> - <p class="project__content"> - A mono-repo with different command line interface (<abbr>CLI</abbr>) implementations for the - <a href="https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Game of Life</a> in multiple languages - (currently Ruby/Rust), with the automation for publishing updates to different package managers using a - git-ish workflow. - </p> - </article> - <article class="project"> - <h2 class="project__title"> - <a href="https://git.sr.ht/~a14m/a14m.srht.site"> a14m.srht.site </a> - </h2> - <p class="project__content">The source code, and deployment scripts for this website/CV.</p> - </article> - </article> - - <article class="education"> - <h2 class="education__header section-header">Education</h2> - <article class="education__details"> - <h2 class="education__degree">B.E. in Computer Science and Engineering</h2> - <p class="education__university">Arab Academy for Science and Technology</p> - <p class="education__gpa">GPA 3.1/4.0 (B - Very Good)</p> - <em class="education__location">Alexandria, Egypt</em> - <em class="education__duration">Sep. 2005 - Jan. 2011</em> - </article> - </article> - </main> - <footer></footer> - </body> -</html> diff --git a/app/assets/key.asc b/app/assets/key.asc deleted file mode 100644 index 9ff0781..0000000 --- a/app/assets/key.asc +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -mDMEZBDEPxYJKwYBBAHaRw8BAQdAMQDR6x4wOUF/16fEy0A+f4K0YkFYwLrKH7f6 -tOCh9gG0HUFobWVkIEFiZGVsSGFsaW0gPHBtQGExNG0ubWU+iJMEExYKADsCGwMF -CwkIBwMFFQoJCAsFFgIDAQACHgECF4AWIQSDeGtI9zTE98LO7DDZ/dKd4epkBQUC -ZBDEhgIZAQAKCRDZ/dKd4epkBXgJAP9NwuudTDOTA8pJIP1NBbbWBciwqZPOxo+4 -VktU8EHyhwD9G0lRbrH2aapTKuQyHWbngxCQn110vbMr369D2gkAVQS0HUFobWVk -IEFiZGVsSGFsaW0gPGExNG1AcG0ubWU+iJAEExYKADgWIQSDeGtI9zTE98LO7DDZ -/dKd4epkBQUCZBDEeAIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRDZ/dKd -4epkBeCYAQD5wXKyF2d3qiiKnJ+CO5Yg3oBZo8V1C89bfBM6RA27IQD/bsFyqmUY -vQCZAGtPgUk/F7ZaJLm7vs02ndplkyPFDwC4OARkEMQ/EgorBgEEAZdVAQUBAQdA -Z6mZwv5y+thLJn6SNQDkBoked0gGVKAjdgX1qo5ydjADAQgHiHgEGBYKACAWIQSD -eGtI9zTE98LO7DDZ/dKd4epkBQUCZBDEPwIbDAAKCRDZ/dKd4epkBQEtAP9RLo0I -uz+o9l42vMV/f8ed91uHCFUlgM+x8RifyDkrvQEAm5JCgXV5AZVCN3jvj5NnaQpM -qG24V0Gqh4RXtnO/HAG4MwRkEMSPFgkrBgEEAdpHDwEBB0CPyTphZb5jUR9FPCqB -M8FvwhthJ90+z0USyI8KQwX424h4BBgWCgAgFiEEg3hrSPc0xPfCzuww2f3SneHq -ZAUFAmQQxI8CGyAACgkQ2f3SneHqZAWinAEAnmvc20NnEnzo+ex6d3LFknv4W0nt -RFPfX3ptbzOHJ8YA/jUYRLKGHekJRrJM7kE+ihUFXS3sNpU7KOQthW0DpgwH -=pdo1 ------END PGP PUBLIC KEY BLOCK----- diff --git a/app/assets/key.ssh b/app/assets/key.ssh deleted file mode 100644 index 1a338cf..0000000 --- a/app/assets/key.ssh +++ /dev/null @@ -1 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/JOmFlvmNRH0U8KoEzwW/CG2En3T7PRRLIjwpDBfjb cardno:19_707_974 diff --git a/app/assets/mstile-150x150.png b/app/assets/mstile-150x150.png Binary files differdeleted file mode 100644 index 350bca4..0000000 --- a/app/assets/mstile-150x150.png +++ /dev/null diff --git a/app/assets/safari-pinned-tab.svg b/app/assets/safari-pinned-tab.svg deleted file mode 100644 index be8fc4f..0000000 --- a/app/assets/safari-pinned-tab.svg +++ /dev/null @@ -1,35 +0,0 @@ -<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" - "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> -<svg version="1.0" xmlns="http://www.w3.org/2000/svg" - width="254.000000pt" height="254.000000pt" viewBox="0 0 254.000000 254.000000" - preserveAspectRatio="xMidYMid meet"> -<metadata> -Created by potrace 1.14, written by Peter Selinger 2001-2017 -</metadata> -<g transform="translate(0.000000,254.000000) scale(0.100000,-0.100000)" -fill="#000000" stroke="none"> -<path d="M82 2458 c-17 -17 -17 -2359 0 -2376 17 -17 2359 -17 2376 0 17 17 -17 2359 0 2376 -17 17 -2359 17 -2376 0z m778 -398 l0 -380 -375 0 -375 0 0 -380 0 380 375 0 375 0 0 -380z m790 0 l0 -380 -380 0 -380 0 0 380 0 380 380 -0 380 0 0 -380z m790 0 l0 -380 -380 0 -380 0 0 380 0 380 380 0 380 0 0 -380z -m-1580 -790 l0 -380 -375 0 -375 0 0 380 0 380 375 0 375 0 0 -380z m790 0 l0 --380 -380 0 -380 0 0 380 0 380 380 0 380 0 0 -380z m790 0 l0 -380 -380 0 --380 0 0 380 0 380 380 0 380 0 0 -380z m-1580 -785 l0 -375 -375 0 -375 0 0 -375 0 375 375 0 375 0 0 -375z m790 0 l0 -375 -380 0 -380 0 0 375 0 375 380 -0 380 0 0 -375z m790 0 l0 -375 -380 0 -380 0 0 375 0 375 380 0 380 0 0 -375z"/> -<path d="M1180 2381 c-89 -29 -174 -101 -211 -180 -33 -69 -37 -189 -9 -263 -65 -173 277 -262 441 -186 108 50 175 134 199 251 28 138 -52 293 -185 357 --53 26 -185 38 -235 21z"/> -<path d="M1984 1596 c-207 -52 -317 -272 -230 -461 35 -77 108 -147 184 -175 -74 -28 194 -24 263 9 59 28 124 93 157 156 24 44 27 62 27 145 0 81 -4 103 --25 145 -67 138 -232 218 -376 181z"/> -<path d="M404 809 c-153 -37 -263 -188 -252 -348 9 -122 78 -225 187 -278 49 --24 68 -28 146 -28 73 0 99 5 136 23 75 37 125 87 161 160 29 59 33 76 33 147 --1 60 -6 92 -22 127 -29 64 -105 142 -167 173 -59 29 -158 40 -222 24z"/> -<path d="M1183 805 c-106 -33 -187 -107 -224 -204 -29 -78 -23 -195 14 -267 -77 -152 265 -223 419 -160 233 96 286 387 101 556 -85 78 -207 108 -310 75z"/> -<path d="M1953 800 c-74 -24 -161 -98 -192 -163 -38 -78 -46 -148 -27 -225 40 --164 179 -270 343 -260 340 21 433 478 128 629 -84 41 -165 47 -252 19z"/> -</g> -</svg> diff --git a/app/assets/site.webmanifest b/app/assets/site.webmanifest deleted file mode 100644 index e532fa7..0000000 --- a/app/assets/site.webmanifest +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "A14m", - "short_name": "A14m", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/app/print.styl b/app/print.styl deleted file mode 100644 index 41ca616..0000000 --- a/app/print.styl +++ /dev/null @@ -1,25 +0,0 @@ -@page { - margin-left: 1cm - margin-right: 1cm -} - -body { - font-size: 9pt - line-height: 1.3 -} - -a:link, a:visited, a:hover, a:active { - text-decoration-thickness: 1px -} - -.section-header { - font-size: 18pt - margin-bottom: -0.6em -} - -@require "stylesheets/print/header.styl" -@require "stylesheets/print/summary.styl" -@require "stylesheets/print/skills.styl" -@require "stylesheets/print/work.styl" -@require "stylesheets/print/projects.styl" -@require "stylesheets/print/education.styl" diff --git a/app/stylesheets/print/education.styl b/app/stylesheets/print/education.styl deleted file mode 100644 index ebefd27..0000000 --- a/app/stylesheets/print/education.styl +++ /dev/null @@ -1,11 +0,0 @@ -.education { - // avoid page breaks inside the education section - page-break-inside: avoid - margin-top: 75px - // remove the extra space added for the website - margin-bottom: 0 -} - -.education__details { - margin-top: 0.3em -} diff --git a/app/stylesheets/print/header.styl b/app/stylesheets/print/header.styl deleted file mode 100644 index 7b982c2..0000000 --- a/app/stylesheets/print/header.styl +++ /dev/null @@ -1,21 +0,0 @@ -.header__name { - margin-bottom: 0.1em -} - -.header__language { - display: none -} - -.header__tel -.header__website -.header__email -.header__srht -.header__github -.header__stackoverflow -.header__linkedin { - display: inline -} - -.header__pgp { - display: none -} diff --git a/app/stylesheets/print/projects.styl b/app/stylesheets/print/projects.styl deleted file mode 100644 index be9dd75..0000000 --- a/app/stylesheets/print/projects.styl +++ /dev/null @@ -1,7 +0,0 @@ -.projects { - margin-top: 75px - page-break-inside: avoid -} - -.project { -} diff --git a/app/stylesheets/print/skills.styl b/app/stylesheets/print/skills.styl deleted file mode 100644 index e5bba67..0000000 --- a/app/stylesheets/print/skills.styl +++ /dev/null @@ -1,17 +0,0 @@ -.skills { - margin-top: 75px -} - -.skills__content { - margin-top: 1.5em -} - -.skills__title { - min-width: 12% - margin-left: 15px -} - -.skills__items { - margin-bottom: 0.1em - margin-left: 15px -} diff --git a/app/stylesheets/print/summary.styl b/app/stylesheets/print/summary.styl deleted file mode 100644 index e69de29..0000000 --- a/app/stylesheets/print/summary.styl +++ /dev/null diff --git a/app/stylesheets/print/work.styl b/app/stylesheets/print/work.styl deleted file mode 100644 index 63368ae..0000000 --- a/app/stylesheets/print/work.styl +++ /dev/null @@ -1,14 +0,0 @@ -.work { - margin-top: 75px -} - -.work__experience { - page-break-inside: avoid -} - -// Style the Company name links in the PDF with thicker underline -.job-position__company { - a:link, a:visited, a:hover, a:active { - text-decoration-thickness: 2px - } -} diff --git a/app/stylesheets/web/education.styl b/app/stylesheets/web/education.styl deleted file mode 100644 index cf54f19..0000000 --- a/app/stylesheets/web/education.styl +++ /dev/null @@ -1,58 +0,0 @@ -.education { - // add empty space to the end of page (as big as the header) - margin-bottom: 150px -} - -.education__details { - display: flex - flex-flow: row wrap - justify-content: space-between - @media screen and (max-width: 780px) { - flex-flow: column wrap - } -} - -.education__degree { - min-width: 100% - align-self: center - font-size: 1.1em - margin-bottom: 0 -} - -.education__university -.education__gpa -.education__duration -.education__location { - min-width: 50% - margin: 0 -} - -.education__university { -} - -.education__gpa { - order: 3 - @media screen and (max-width: 780px) { - order: 2 - } -} - -.education__duration { - order: 2 - text-align: right - align-self: flex-end - @media screen and (max-width: 780px) { - text-align: left - align-self: flex-start - } -} - -.education__location { - order: 4 - text-align: right - align-self: flex-end - @media screen and (max-width: 780px) { - text-align: left - align-self: flex-start - } -} diff --git a/app/stylesheets/web/header.styl b/app/stylesheets/web/header.styl deleted file mode 100644 index 056db86..0000000 --- a/app/stylesheets/web/header.styl +++ /dev/null @@ -1,45 +0,0 @@ -.header { - text-align: center - font-style: normal -} - -.header__language { - float: right - margin-top: 1em - margin-bottom: -0.3em -} - -.header__name { - font-size: 3.3em - margin-bottom: -0.2em - clear: right -} - -.header__job-title { - font-style: italic -} - -.header__contact-info { - font-style: normal -} - -.header__location { - display: block - font-style: italic - margin-bottom: 1em -} - -.header__tel -.header__website { - display: none -} - -.header__email -.header__srht -.header__github -.header__stackoverflow -.header__pgp -.header__linkedin { - display: inline-block - margin: 8px; -} diff --git a/app/stylesheets/web/projects.styl b/app/stylesheets/web/projects.styl deleted file mode 100644 index f3889af..0000000 --- a/app/stylesheets/web/projects.styl +++ /dev/null @@ -1,21 +0,0 @@ -.projects { -} - -.projects__header { -} - -.project { -} - -.project__title { - margin-bottom: 0 - font-size: 1.1em - -} - -.project__content { - margin-left: 1.2em - margin-right: 1.2em - margin-top: 0.3em - margin-bottom: 1.5em -} diff --git a/app/stylesheets/web/skills.styl b/app/stylesheets/web/skills.styl deleted file mode 100644 index 29e9fd3..0000000 --- a/app/stylesheets/web/skills.styl +++ /dev/null @@ -1,31 +0,0 @@ -.skills { -} - -.skills__header { -} - -.skills__content { - display: flex - flex-flow: row wrap - -} - -.skills__title { - min-width: 14% - text-align: right - font-weight: 900 - @media screen and (max-width: 780px) { - text-align: left - } -} - -.skills__items { - width: 80% - margin-bottom: 0.1em - margin-left: 25px - - @media screen and (max-width: 780px) { - margin-bottom: 1em - width: 100% - } -} diff --git a/app/stylesheets/web/summary.styl b/app/stylesheets/web/summary.styl deleted file mode 100644 index dfcb412..0000000 --- a/app/stylesheets/web/summary.styl +++ /dev/null @@ -1,8 +0,0 @@ -.section-header.summary__header { - display: none -} - -.summary__content { - text-align: justify - margin-top: 1.5em -} diff --git a/app/stylesheets/web/work.styl b/app/stylesheets/web/work.styl deleted file mode 100644 index a989349..0000000 --- a/app/stylesheets/web/work.styl +++ /dev/null @@ -1,81 +0,0 @@ -.work { -} - -.work__header { -} - -.work__experience { -} - -.work__experience { - &:after { - display: flex - content: "" - border-bottom: 1px solid - margin: auto - max-width: 30% - } - &:last-of-type:after { - // remove the extra horizontal line after the last work__experience - display: none - } -} - -.job-position { - display: flex - flex-flow: row wrap - justify-content: space-between - @media screen and (max-width: 780px) { - flex-flow: column wrap - } -} - -.job-position__company -.job-position__title -.job-position__duration -.job-position__location { - min-width: 50% -} - -.job-position__company { - order: 0 - margin-bottom: 0 - font-size: 1.4em -} - -.job-position__title { - order: 2 - @media screen and (max-width: 780px) { - order: 1 - } -} - -.job-position__duration { - order: 1 - text-align: right - align-self: flex-end - @media screen and (max-width: 780px) { - order: 2 - text-align: left - align-self: flex-start - } -} - -.job-position__location { - order: 3 - text-align: right - align-self: flex-end - @media screen and (max-width: 780px) { - text-align: left - align-self: flex-start - } -} - -.note { - margin-top: 0.4em - margin-bottom: 0.4em -} - -.tasks { - margin-top: 0.4em -} diff --git a/app/web.styl b/app/web.styl deleted file mode 100644 index 7320840..0000000 --- a/app/web.styl +++ /dev/null @@ -1,65 +0,0 @@ -secondaryColor = #DB0A16 - -@media (prefers-color-scheme: dark) { - html { - color: #FFFFFF - background-color: #181818 - } -} - -@media (prefers-color-scheme: light) { - html { - color: #000000 - background-color: #FFFFFF - } -} - -body { - font-family: "PT Sans", "Kohinoor Bangla", sans-serif - max-width: 1024px - min-width: 375px - margin: 0 auto - float: none - line-height: 1.5 -} - -main { - margin-left: 1cm - margin-right: 1cm -} - -a:link, a:visited, a:hover, a:active { - text-decoration-color: secondaryColor - text-decoration-thickness: 2px - text-underline-offset: 2px - color: inherit -} - -.section-header { - display: flex - flex-direction: row - margin-bottom: -0.3em - - &:before { - content: ""; - border-bottom: 1px solid - margin: auto; - margin-right: 0.5em - flex: 5 5; - } - - &:after { - content: ""; - border-bottom: 1px solid - margin: auto; - margin-left: 0.5em - flex: 100 0; - } -} - -@require "stylesheets/web/header.styl" -@require "stylesheets/web/summary.styl" -@require "stylesheets/web/skills.styl" -@require "stylesheets/web/work.styl" -@require "stylesheets/web/projects.styl" -@require "stylesheets/web/education.styl" |
