aboutsummaryrefslogtreecommitdiffstats
path: root/terminaldweller.com
diff options
context:
space:
mode:
Diffstat (limited to 'terminaldweller.com')
-rw-r--r--terminaldweller.com/lounge/docker-compose.yml29
-rw-r--r--terminaldweller.com/main/srv/cv/CV_Abridged.html316
-rw-r--r--terminaldweller.com/main/srv/index.html17
-rw-r--r--terminaldweller.com/traefik/traefik.yml97
4 files changed, 452 insertions, 7 deletions
diff --git a/terminaldweller.com/lounge/docker-compose.yml b/terminaldweller.com/lounge/docker-compose.yml
new file mode 100644
index 0000000..e755935
--- /dev/null
+++ b/terminaldweller.com/lounge/docker-compose.yml
@@ -0,0 +1,29 @@
+version: '3'
+services:
+ app:
+ image: thelounge/thelounge:4.3.1
+ volumes:
+ - thelounge-data:/var/opt/thelounge
+ networks:
+ - traefik-public
+ deploy:
+ placement:
+ constraints:
+ - node.labels.thelounge.thelounge-data == true
+ labels:
+ - traefik.enable=true
+ - traefik.docker.network=traefik-public
+ - traefik.constraint-label=traefik-public
+ - traefik.http.routers.thelounge-http.rule=Host(`lounge.terminaldweller.com`)
+ - traefik.http.routers.thelounge-http.entrypoints=http
+ - traefik.http.routers.thelounge-http.middlewares=https-redirect
+ - traefik.http.routers.thelounge-https.rule=Host(`lounge.terminaldweller.com`)
+ - traefik.http.routers.thelounge-https.entrypoints=https
+ - traefik.http.routers.thelounge-https.tls=true
+ - traefik.http.routers.thelounge-https.tls.certresolver=le
+ - traefik.http.services.thelounge.loadbalancer.server.port=9000
+networks:
+ traefik-public:
+ external: true
+volumes:
+ thelounge-data:
diff --git a/terminaldweller.com/main/srv/cv/CV_Abridged.html b/terminaldweller.com/main/srv/cv/CV_Abridged.html
new file mode 100644
index 0000000..c254de3
--- /dev/null
+++ b/terminaldweller.com/main/srv/cv/CV_Abridged.html
@@ -0,0 +1,316 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="generator" content="pandoc" />
+ <meta
+ name="viewport"
+ content="width=device-width, initial-scale=1.0, user-scalable=yes"
+ />
+ <title>Farzad Sadeghi</title>
+ <style>
+ code {
+ white-space: pre-wrap;
+ }
+ span.smallcaps {
+ font-variant: small-caps;
+ }
+ span.underline {
+ text-decoration: underline;
+ }
+ div.column {
+ display: inline-block;
+ vertical-align: top;
+ width: 50%;
+ }
+ div.hanging-indent {
+ margin-left: 1.5em;
+ text-indent: -1.5em;
+ }
+ ul.task-list {
+ list-style: none;
+ }
+ </style>
+ </head>
+ <body
+ style="
+ color: #005f87;
+ background: #000000;
+ text-align: left;
+ padding: 0px;
+ border: 0px;
+ margin: 0px;
+ "
+ >
+ <header id="title-block-header">
+ <h1 class="title"><strong>Farzad Sadeghi</strong></h1>
+ <p class="date">2023/01/28</p>
+ </header>
+ <p>
+ <span
+ ><a href="https://terminaldweller.com"
+ >https://terminaldweller.com</a
+ ></span
+ ><br />
+ devi@terminaldweller.com<br />
+ thabogre@gmail.com<br />
+ Tehran, Iran<br />
+ +989125802283
+ </p>
+ <h1 class="unnumbered" id="professional-experience">
+ Professional Experience
+ </h1>
+ <p>
+ <strong
+ >Zharfpouyan Tous (Tehran, Iran)<br />
+ March 2021–June 2022<br />
+ 14 months<br />
+ Developing/Maintaining code for a network device running on a unix-like
+ operating system(openssh,linux-pam,busybox).Mostly C and shell
+ scripts.<br />
+ <br />
+ <strong
+ >Erfan Salamat (Tehran, Iran)<br />
+ Nov. 2020–Feb. 2021<br />
+ 4 months<br />
+ Backened Developer. Developed a GIS and Notification microservice
+ using Golang. Containerized the entire required stack for the said
+ microservices with Docker.<br />
+ <br />
+ <strong
+ >Maharan International (Tehran, Iran)<br />
+ Feb. 2019–Oct. 2020<br />
+ 19 months<br />
+ Requirement manager, designer and developer for ERTMS/ETCS DMI for a
+ safety-ciritcal system written in C.<br />
+ <br />
+ <strong
+ >Truebit (Remote, 3 time-zones)<br />
+ July 2017–Nov. 2017<br />
+ 5 months<br />
+ developed Truebit’s WASM interpreter and smart contracts. Also
+ managed the CI for the repositories.<br />
+ <div></div>
+ <strong
+ >NEAT (Rome, Italy)<br />
+ May 2016–July 2016<br />
+ 3 months<br />
+ Wrote an automatic refactoring tool using Clang(Libtooling) in
+ C++. The tool would be the last piece of an automated
+ model-driven development process for safety-critical systems.<br />
+ <div></div>
+ <strong
+ >Crouse (Tehran, Iran)<br />
+ July 2014–March 2016<br />
+ 21 months<br />
+ Embedded software developer, Safety-critical applications:
+ Design, implementation and automation. The Software team’s ISO
+ 26262 representative.<br />
+ <div></div>
+ <strong
+ >Safir Language Academy (Tehran, Iran)<br />
+ August 2010–March 2012<br />
+ 20 months<br />
+ English Teacher - Later on specifically IELTS teacher.<br /> </strong></strong></strong></strong></strong></strong
+ ></strong>
+ </p>
+ <h1 class="unnumbered" id="skills">Skills</h1>
+ <p>
+ <strong
+ >Programming Languages: C, Python, C++, Go<br />
+ <strong>Other: Linux, docker<br /> </strong
+ ></strong>
+ </p>
+ <h1 class="unnumbered" id="hobby">Hobby</h1>
+ <p>
+ I maintain my own local kubernetes cluster with k3s on my raspberry pis
+ along with a bunch of VPSs that I run my services on(Docker, not
+ swarm)).<br />
+ </p>
+ <h1 class="unnumbered" id="languages">Languages</h1>
+ <p>
+ <strong
+ >Persian: <span>Native</span><br />
+ <strong
+ >English: <span>Native-like</span><br />
+ German: Beginner<br /> </strong
+ ></strong>
+ </p>
+ <h1 class="unnumbered" id="education">Education</h1>
+ <p>
+ 2021–Now Master’s in Computer Science, Azad University, Science and
+ Research Branch, Tehran, Iran. Currently working on my thesis<br />
+ 2007–2013 Bachelor’s in Electrical Engineering, Iran University of Science
+ and Technology, Tehran, Iran.<br />
+ <strong
+ >Thesis: Determining the frequency of an audio signal using phase
+ derivation in real time, design and implementation using an
+ FPGA.</strong
+ >
+ </p>
+ <h1 class="unnumbered" id="role-breakdown">Role Breakdown</h1>
+ <p>
+ <strong
+ >Backend Developer<br />
+ Developed a GIS microservice based on the OSM stack. Containerized an
+ entire geoserver stack (geoserver, tile server, static image server, DB)
+ so that we could rely on our own stack. Developed a notification
+ microservice using golang and Mongodb(with Percona memory engine).<br />
+ <br />
+ <strong
+ >ERTMS / ETCS DMI Development<br />
+ Split the DMI into two subsystems. Designed and implemented the
+ software for the component on the "kernel" side. Wrote a tool that
+ made the requirements’ traceability files by gathering special
+ comments from the C source files. Wrote a tool that determines all the
+ sub-fields of aggregate types used in the function and the functions
+ it calls(required for testing).<br />
+ <br />
+ <strong
+ >Embedded Safety-Critical Development<br />
+ Wrote the SRS and the SDD for the DSP algorithm, then implemented
+ the DSP algorithm for a safety-critical hard real-time embedded
+ system.<br />
+ <br />
+ <strong>Code Generation<br /> </strong></strong></strong
+ ></strong>
+ </p>
+ <ul>
+ <li>
+ <p>Wrote A tool that generates binary file (WASM, ...) parsers in C.</p>
+ </li>
+ <li>
+ <p>
+ Wrote another tool that generates the C code necessary to add a C
+ structure to Lua as a Lua table.
+ </p>
+ </li>
+ </ul>
+ <p>
+ <strong>Automation and Tooling<br /> </strong>
+ </p>
+ <ul>
+ <li>
+ <p>
+ Developed a Misra-C:2004 rule checker(open-source project) using
+ Clang’s Libtooling.
+ </p>
+ </li>
+ <li>
+ <p>
+ Developed a source code obfuscation tool(open-source project) using
+ Clang’s Libtooling.
+ </p>
+ </li>
+ <li>
+ <p>
+ Developed an interactive CLI tool aimed at object code
+ manipulation(open-source project) in C++/C with Lua as it’s scripting
+ language. The tool also has Python embedded in it for rapid
+ prototyping.
+ </p>
+ </li>
+ <li>
+ <p>
+ Automated the traceability matrix generation using libclang’s Python
+ bindings.
+ </p>
+ </li>
+ <li>
+ <p>Automated the regression testing for a project I was involved in.</p>
+ </li>
+ <li>
+ <p>
+ Automated the calculation of the WCET for all implemented functions
+ through the use of of a Python script and an XML description file.
+ </p>
+ </li>
+ </ul>
+ <p>
+ <strong
+ >Automatic Refactoring<br />
+ Wrote an automatic refactoring tool using Clang’s Libtooling for C.<br />
+ <br />
+ <strong
+ >Defensive Programming / Safety-Aware Software Design<br />
+ Studied/Implemented defensive programming practices, coding style and
+ guidelines. Explored the use of FMEA and FTA for the software
+ domain.<br />
+ <br />
+ <strong
+ >AUTOSAR<br />
+ Studied AUTOSAR SWC and RTE.<br />
+ <br />
+ <strong
+ >ISO 26262<br />
+ Studied the software section of the standard. I was also the
+ software group’s representative for the study/review meetings held
+ with the hardware and system teams on ISO 26262.<br /> </strong></strong></strong
+ ></strong>
+ </p>
+ <h1 class="unnumbered" id="links">Links</h1>
+ <p>
+ <span
+ ><strong
+ ><a href="https://terminaldweller.com">terminaldweller.com</a></strong
+ ></span
+ >
+ My personal web page.<br />
+ <span
+ ><strong
+ ><a href="https://github.com/terminaldweller">Github</a></strong
+ ></span
+ >
+ My Github page.<br />
+ <span
+ ><strong
+ ><a href="https://github.com/terminaldweller/hived/tree/arbitrage"
+ >hived</a
+ ></strong
+ ></span
+ >
+ A tiny and fast crypto API server.<br />
+ <span
+ ><strong
+ ><a href="https://github.com/terminaldweller/magni">magni</a></strong
+ ></span
+ >
+ Upscales the images in a webpage and serves them back locally.<br />
+ <span
+ ><strong
+ ><a href="https://github.com/terminaldweller/cgrep">cgrep</a></strong
+ ></span
+ >
+ Grep for C-family source files.<br />
+ <span
+ ><strong
+ ><a href="https://github.com/terminaldweller/devourer"
+ >devourer</a
+ ></strong
+ ></span
+ >
+ A little helper API server. Extracts, summarizes and vocalizes articles on
+ the web.<br />
+ <span
+ ><strong
+ ><a href="https://github.com/terminaldweller/mdrtl">mdrtl</a></strong
+ ></span
+ >
+ A minimal RTL markdown editor.<br />
+ <span
+ ><strong
+ ><a href="https://github.com/terminaldweller/blog">blog</a></strong
+ ></span
+ >
+ Source code for my blog.<br />
+ <span
+ ><strong
+ ><a href="https://www.linkedin.com/in/farzad-sadeghi/"
+ >Linkedin</a
+ ></strong
+ ></span
+ >
+ My Linkedin page.<br />
+ </p>
+ </body>
+</html>
diff --git a/terminaldweller.com/main/srv/index.html b/terminaldweller.com/main/srv/index.html
index 8677d84..9d403dc 100644
--- a/terminaldweller.com/main/srv/index.html
+++ b/terminaldweller.com/main/srv/index.html
@@ -2,8 +2,8 @@
<html>
<head>
<meta charset="utf-8" />
- <meta name="viewport" content="width=device-width" />
- <meta http-equiv="onion-location" content="http://dqunl5rzlv6skqfklqr4dwi4zph2vqoaennc7qoinqs5mlug4docq2yd.onion" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <meta http-equiv="onion-location" content="http://dqunl5rzlv6skqfklqr4dwi4zph2vqoaennc7qoinqs5mlug4docq2yd.onion"/>
<title>main</title>
<style>
a:link {
@@ -14,7 +14,7 @@
}
</style>
</head>
- <body style="color:#005f87;background:#000000;text-align:center;">
+ <body style="color:#005f87;background:#000000;text-align:center;padding:0px;border:0px;margin:0px;">
<p style="font-size:20px;font-weight:bold">This is a list of links:</p>
<p>
<div>This page is available on:</div>
@@ -26,7 +26,7 @@
<p>WKD direct and advanced are setup on/for the domain.</p>
<p>
<div><a href="https://keyoxide.org/hkp/9e20464f1ccf3b103249fa93a6a0f5158b3881df">keyoxide</a></div>
- <div>I don't use all the accounts listed on keyoxide regularly. The preferred methods of contacting me are the ones that are listed here, IRC, XMPP and email (The order is not significant).</div>
+ <div>I don't use all the accounts listed on keyoxide regularly. The preferred methods of contacting me are the ones that are listed here, IRC, email and XMPP (The order is not significant).</div>
</p>
<div>
<div>PGP FP: 9E20464F1CCF3B103249FA93A6A0F5158B3881DF - <a href="https://github.com/terminaldweller.gpg">here</a> and <a href="keys/gpg_pubkey">here</a></div>
@@ -45,11 +45,14 @@
<div>XMPP: devi@jabber.terminaldweller.com</div>
</p>
<p>
- <div>The order is significant:</div>
+ <div style="font-weight:bold;">The order is significant:</div>
<div>Email: devi@terminaldweller.com</div>
<div>Email: thabogre@gmail.com</div>
<div>Email: farzadsadeghi@protonmail.ch</div>
- <div>All emails have the ssh and pgp key fingerprints as signature.</div>
+ <div>All emails have the ssh and pgp key fingerprints as signature. You can ask for one.</div>
+ </p>
+ <p>
+ <div>OpenID: <a href="https://launchpad.net/~terminaldweller">https://launchpad.net/~terminaldweller</a></div>
</p>
<p>Github: <a href="https://github.com/terminaldweller">terminaldweller</a></p>
<p>
@@ -60,7 +63,7 @@
<p>Blog: <a href="https://blog.terminaldweller.com">Blog</a> <a href="https://blog.terminaldweller.com/rss/feed">RSS</a></p>
<p><a href="https://www.linkedin.com/in/farzad-sadeghi/">Linkedin</a></p>
<div>
- <p>Services: N/A</p>
+ <div>Services: N/A</div>
</div>
</body>
</html>
diff --git a/terminaldweller.com/traefik/traefik.yml b/terminaldweller.com/traefik/traefik.yml
new file mode 100644
index 0000000..a034111
--- /dev/null
+++ b/terminaldweller.com/traefik/traefik.yml
@@ -0,0 +1,97 @@
+version: '3.7'
+services:
+ traefik:
+ image: traefik:v3.0
+ ports:
+ - target: 80
+ published: 80
+ mode: host
+ - target: 443
+ published: 443
+ mode: host
+ deploy:
+ placement:
+ constraints:
+ # Make the traefik service run only on the node with this label
+ # as the node with it has the volume for the certificates
+ - node.labels.traefik-public.traefik-public-certificates == true
+ labels:
+ # Enable Traefik for this service, to make it available in the public network
+ - traefik.enable=true
+ # Use the traefik-public network (declared below)
+ - traefik.docker.network=traefik-public
+ # Use the custom label "traefik.constraint-label=traefik-public"
+ # This public Traefik will only use services with this label
+ # That way you can add other internal Traefik instances per stack if needed
+ - traefik.constraint-label=traefik-public
+ # admin-auth middleware with HTTP Basic auth
+ # Using the environment variables USERNAME and HASHED_PASSWORD
+ - traefik.http.middlewares.admin-auth.basicauth.users=
+ # https-redirect middleware to redirect HTTP to HTTPS
+ # It can be re-used by other stacks in other Docker Compose files
+ - traefik.http.middlewares.https-redirect.redirectscheme.scheme=https
+ - traefik.http.middlewares.https-redirect.redirectscheme.permanent=true
+ # traefik-http set up only to use the middleware to redirect to https
+ # Uses the environment variable DOMAIN
+ - traefik.http.routers.traefik-public-http.rule=Host(`traefik.terminaldweller.com`)
+ - traefik.http.routers.traefik-public-http.entrypoints=http
+ - traefik.http.routers.traefik-public-http.middlewares=https-redirect
+ # traefik-https the actual router using HTTPS
+ # Uses the environment variable DOMAIN
+ - traefik.http.routers.traefik-public-https.rule=Host(`traefik.terminaldweller.com`)
+ - traefik.http.routers.traefik-public-https.entrypoints=https
+ - traefik.http.routers.traefik-public-https.tls=true
+ # Use the special Traefik service api@internal with the web UI/Dashboard
+ - traefik.http.routers.traefik-public-https.service=api@internal
+ # Use the "le" (Let's Encrypt) resolver created below
+ - traefik.http.routers.traefik-public-https.tls.certresolver=le
+ # Enable HTTP Basic auth, using the middleware created above
+ - traefik.http.routers.traefik-public-https.middlewares=admin-auth
+ # Define the port inside of the Docker service to use
+ - traefik.http.services.traefik-public.loadbalancer.server.port=8080
+ volumes:
+ # Add Docker as a mounted volume, so that Traefik can read the labels of other services
+ - /var/run/docker.sock:/var/run/docker.sock:ro
+ # Mount the volume to store the certificates
+ - traefik-public-certificates:/certificates
+ command:
+ # Enable Docker in Traefik, so that it reads labels from Docker services
+ - --providers.docker
+ # Add a constraint to only use services with the label "traefik.constraint-label=traefik-public"
+ - --providers.docker.constraints=Label(`traefik.constraint-label`, `traefik-public`)
+ # Do not expose all Docker services, only the ones explicitly exposed
+ - --providers.docker.exposedbydefault=false
+ # Enable Docker Swarm mode
+ - --providers.docker.swarmmode
+ # Create an entrypoint "http" listening on port 80
+ - --entrypoints.http.address=:80
+ # Create an entrypoint "https" listening on port 443
+ - --entrypoints.https.address=:443
+ # Create the certificate resolver "le" for Let's Encrypt, uses the environment variable EMAIL
+ - --certificatesresolvers.le.acme.email=devi+trf@terminaldweller.com
+ # Store the Let's Encrypt certificates in the mounted volume
+ - --certificatesresolvers.le.acme.storage=/certificates/acme.json
+ # Use the TLS Challenge for Let's Encrypt
+ - --certificatesresolvers.le.acme.tlschallenge=true
+ # Enable the access log, with HTTP requests
+ - --accesslog
+ # Enable the Traefik log, for configurations and errors
+ - --log
+ # Enable the Dashboard and API
+ - --api
+ networks:
+ # Use the public network created to be shared between Traefik and
+ # any other service that needs to be publicly available with HTTPS
+ - traefik-public
+ env_file:
+ - ./.env
+volumes:
+ # Create a volume to store the certificates, there is a constraint to make sure
+ # Traefik is always deployed to the same Docker node with the same volume containing
+ # the HTTPS certificates
+ traefik-public-certificates:
+networks:
+ # Use the previously created public network "traefik-public", shared with other
+ # services that need to be publicly available via this Traefik
+ traefik-public:
+ external: true