mysite/public-onion/about/index.html

600 lines
28 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="noindex, nofollow">
<title>About | AlipourIm journeys</title>
<meta name="keywords" content="">
<meta name="description" content="Iman Alipour — PhD candidate at MPI-INF. Human-centered security &amp; privacy, usable security, and security measurement. Loves CTFs, hiking, coffee experiments, and making everyday gadgets smart.">
<meta name="author" content="Iman Alipour">
<link rel="canonical" href="http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/about/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.31b150d909186c48d6dbbf653acc2489945fa9ac2c8f8cd3fe8448e89e40fccf.css" integrity="sha256-MbFQ2QkYbEjW279lOswkiZRfqawsj4zT/oRI6J5A/M8=" rel="preload stylesheet" as="style">
<link rel="icon" href="http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/favicon-32x32.png">
<link rel="apple-touch-icon" href="http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/apple-touch-icon.png">
<link rel="mask-icon" href="http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/about/index.xml">
<link rel="alternate" hreflang="en" href="http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/about/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
<style>
@media (prefers-color-scheme: dark) {
:root {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--code-block-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
}
.list {
background: var(--theme);
}
.list:not(.dark)::-webkit-scrollbar-track {
background: 0 0;
}
.list:not(.dark)::-webkit-scrollbar-thumb {
border-color: var(--theme);
}
}
</style>
</noscript><script>
(function () {
window.goatcounter = { endpoint: "/count" };
const s = document.createElement("script");
s.async = true;
s.src = "/js/count.js";
document.head.appendChild(s);
})();
</script>
<script>
(function () {
const GC = "";
const nf = new Intl.NumberFormat();
const SING = "visit";
const PLUR = "visits";
function ready(fn) {
if (document.readyState === "complete" || document.readyState === "interactive") setTimeout(fn, 0);
else document.addEventListener("DOMContentLoaded", fn);
}
function gcPath() {
try {
return window.goatcounter && window.goatcounter.get_data
? window.goatcounter.get_data().p
: location.pathname;
} catch (_) {
return location.pathname;
}
}
async function fetchCount(path, period) {
try {
const q = new URLSearchParams({ t: String(Date.now()) });
if (period) q.set("start", period);
const url = `${GC}/counter/${encodeURIComponent(path)}.json?${q}`;
const r = await fetch(url, { credentials: "omit" });
if (r.status === 404) return 0;
if (!r.ok) throw 0;
const j = await r.json();
const n = Number(String(j.count).replace(/,/g, ""));
return Number.isFinite(n) ? n : 0;
} catch {
return null;
}
}
const labelVisits = (n) =>
n === null ? "—" : `${nf.format(n)} ${n === 1 ? SING : PLUR}`;
ready(async function () {
const post = document.querySelector(".post-single");
if (post) {
const meta = post.querySelector(
".post-header .post-meta, .post-header .entry-meta, .post-meta"
);
const visits = await fetchCount(gcPath());
if (meta) {
let span = meta.querySelector(".post-views");
if (!span) {
span = document.createElement("span");
span.className = "post-views";
meta.appendChild(span);
}
span.textContent = labelVisits(visits ?? 0);
}
}
const cards = document.querySelectorAll("article.post-entry");
await Promise.all(
Array.from(cards).map(async (card) => {
const meta = card.querySelector(".entry-footer, .post-meta");
const link = card.querySelector("a.entry-link, h2 a, .entry-title a");
if (!meta || !link) return;
try {
const u = new URL(link.getAttribute("href"), location.origin);
if (u.origin !== location.origin) return;
let span = meta.querySelector(".post-views");
if (!span) {
span = document.createElement("span");
span.className = "post-views";
meta.appendChild(span);
}
span.textContent = labelVisits((await fetchCount(u.pathname)) ?? 0);
} catch {}
})
);
const uvEl = document.getElementById("gc_site_visitors_week");
if (uvEl) {
const n = await fetchCount("TOTAL", "week");
uvEl.textContent = n === null ? "—" : nf.format(n);
}
});
})();
</script>
</head>
<body class="list" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
} else if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/" accesskey="h" title="AlipourIm journeys (Alt + H)">AlipourIm journeys</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)" aria-label="Toggle theme">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/posts/" title="Posts">
<span>Posts</span>
</a>
</li>
<li>
<a href="http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/phd_journey/" title="PhD_journey">
<span>PhD_journey</span>
</a>
</li>
<li>
<a href="http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/about/" title="About">
<span class="active">About</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title entry-hint-parent">
About
</h1>
<div class="post-description">
Iman Alipour — PhD candidate at MPI-INF. Human-centered security &amp; privacy, usable security, and security measurement. Loves CTFs, hiking, coffee experiments, and making everyday gadgets smart.
</div>
</header>
<figure class="entry-cover">
<img loading="eager" src="http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/about/pfp.jpeg" alt="Iman Alipour">
</figure>
<div class="post-content"><h1 id="hey-im-iman-">Hey, Im Iman 👋<a hidden class="anchor" aria-hidden="true" href="#hey-im-iman-">#</a></h1>
<p>Im a PhD candidate at the <strong>Max Planck Institute for Informatics (MPI-INF)</strong> in the <strong>Internet Architecture</strong> group. Im broadly fascinated by how people actually experience security and privacy online—and how we can design systems that protect them without asking for expert knowledge. My current work explores how emerging and existing technologies shape everyday users privacy and threaten their security, and how usable defenses can make a real difference.</p>
<p>I finished my <strong>B.Sc. in Computer Engineering</strong> at <strong>Sharif University of Technology</strong> in 2024, where I explored a mix of <strong>Machine Learning, Systems, Security, HCI, CPS, and IoT</strong>. For my bachelor thesis, I studied <strong>client selection in federated learning</strong> and proposed a reinforcement-learningbased method that balances <strong>accuracy, efficiency, and fairness</strong> while considering data quality and <strong>energy consumption</strong>.</p>
<h2 id="what-im-into-research">What Im into (research)<a hidden class="anchor" aria-hidden="true" href="#what-im-into-research">#</a></h2>
<ul>
<li><em><strong>Censorship Circumvention</strong></em></li>
<li><strong>Human-centered Security &amp; Privacy</strong></li>
<li><strong>Usable Security</strong></li>
<li><strong>Security Measurement</strong></li>
<li><strong>Emerging technologies and their effects on user privacy</strong></li>
</ul>
<h2 id="a-few-things-ive-worked-on">A few things Ive worked on<a hidden class="anchor" aria-hidden="true" href="#a-few-things-ive-worked-on">#</a></h2>
<ul>
<li><strong>Federated learning client selection (B.Sc. thesis):</strong> A reinforcement-learning approach to optimize accuracy, efficiency, and fairness; accounts for end-user data quality and aims to reduce energy use.</li>
<li><strong>Security &amp; privacy perceptions of messaging platforms in Iran:</strong> Investigated trust and distrust in local platforms, identified root causes, and contrasted Iranian vs. non-Iranian platforms.</li>
</ul>
<h2 id="hobbies--off-screen-life">Hobbies &amp; off-screen life<a hidden class="anchor" aria-hidden="true" href="#hobbies--off-screen-life">#</a></h2>
<p>When Im not chasing down research questions, youll likely find me:</p>
<ul>
<li>🎧 <strong>Listening to music</strong> and 🧩 <strong>playing CTFs</strong></li>
<li>📰 <strong>Reading the news</strong> and keeping active—<strong>any sport is fair game</strong></li>
<li>🥾 <strong>Hiking</strong> and 🌄 <strong>sight-seeing</strong></li>
<li><strong>Experimenting with coffee</strong> and 🍳 <strong>cooking</strong></li>
<li>🎲 <strong>Playing board games</strong></li>
<li>🔧 <strong>Fiddling with electronics</strong>: making everyday tools <strong>smart</strong> and remotely controllable with <strong>micro-controllers</strong>, sensors, and actuators</li>
<li>📚 <strong>Reading books</strong> and happily getting lost in <strong>math &amp; physics</strong> problems</li>
</ul>
<h2 id="quick-timeline">Quick timeline<a hidden class="anchor" aria-hidden="true" href="#quick-timeline">#</a></h2>
<ul>
<li><strong>Aug 2024 present:</strong> PhD candidate, MPI-INF, Internet Architecture group (Saarbrücken, Germany)</li>
<li><strong>Jun 2023 Jul 2024:</strong> Volunteer remote Research Assistant, InSPIRe Lab, Duke University</li>
<li><strong>Sep 2023 Feb 2024:</strong> Volunteer Research Assistant, CPS Lab, Sharif University of Technology</li>
<li><strong>Feb 2023 Sep 2023:</strong> Volunteer Research Assistant, RADIAN Lab, Sharif University of Technology</li>
<li><strong>Jul 2022 Sep 2022:</strong> Summer Intern, Rasta Scientific Group</li>
</ul>
<h2 id="teaching-ive-helped-with">Teaching Ive helped with<a hidden class="anchor" aria-hidden="true" href="#teaching-ive-helped-with">#</a></h2>
<p>Advanced Programming (2021) · Probabilities &amp; Statistics (2022) · Operating Systems (2023) · Embedded Systems (2023) · Computer Simulation (two offerings, 2023)</p>
<h2 id="honors">Honors<a hidden class="anchor" aria-hidden="true" href="#honors">#</a></h2>
<ul>
<li>Silver medal, <strong>Paya Math &amp; Physics League</strong> — Tehran, Iran (Sep 2017)</li>
<li><strong>2nd place</strong>, Water Rocket Design Competition — Isfahans Math House (Sep 2015)</li>
</ul>
<h2 id="contact">Contact<a hidden class="anchor" aria-hidden="true" href="#contact">#</a></h2>
<p>Max-Planck-Institut für Informatik<br>
Saarland Informatics Campus — <strong>Campus E1 4</strong>, 66123 Saarbrücken<br>
<strong>Office:</strong> E1 4 514 · <strong>Phone:</strong> +49 681 9325 3548</p>
<hr>
<h2 id="links">Links<a hidden class="anchor" aria-hidden="true" href="#links">#</a></h2>
<ul>
<li>🔗 <strong>LinkedIn:</strong> <a href="https://de.linkedin.com/in/iman-alipour-b9234723a">https://de.linkedin.com/in/iman-alipour-b9234723a</a></li>
<li>🐙 <strong>GitHub:</strong> <a href="https://github.com/AlipourIm">https://github.com/AlipourIm</a></li>
<li>🧩 <strong>TryHackMe:</strong> <a href="https://tryhackme.com/p/curiousNF">https://tryhackme.com/p/curiousNF</a></li>
<li>💼 <strong>Work page:</strong> <a href="https://www.mpi-inf.mpg.de/departments/inet/people/iman-alipour">https://www.mpi-inf.mpg.de/departments/inet/people/iman-alipour</a></li>
<li>🔑 <strong>OpenPGP public key (download):</strong> <a href="/keys/iman-alipour-pgp.asc">pgp_public_key</a></li>
</ul>
<h2 id="openpgp">OpenPGP<a hidden class="anchor" aria-hidden="true" href="#openpgp">#</a></h2>
<p><strong>Fingerprint:</strong> <code>55A2 A5DE 8479 2BAC C6CA EE3F B588 2850 E04C 8D2A</code></p>
<details>
<summary>Show ASCII-armored key</summary>
<pre style="font-size:0.85em; overflow-x:auto; padding:0.75rem;">-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGc9jFUBEADCXf0isAbrJSKp8tH0qF2OuCRSWuYcPyAuOUg1NCbzNhce6QML
EFxafaD6THeJZ0XUEh5o5BaCnDaWRUHq495Z84Y/7cU5HGsrYDARs&#43;zUVXiJap1E
5xMeFCPDIa0/ItaoMLpLJWeor11UG/Fs&#43;fDoeQhWIYIKfab84fXjMvdq9v6MWs4L
rv0/xLZocU/rHjhc2409UMtpPlnI3C1ZbuBEAYJo/rMVKks&#43;Kp&#43;N2VnoyiaNW7O0
O5TwObRz/Q7r0AP5WCvL/NrDwO1C7An8u827bIMh1gZKTZ4&#43;XGVJApW7j20abm&#43;r
zk7k4CSUoB3rut020I3&#43;GJtJmk2Wf&#43;vb0y8Jimmzf6jfEP7knRwVTF6IdwW23ZGr
RizS5xuxqQqHPAF7Js2lTEONhM6Zi&#43;pvuqbGI2J9VGJg/Q8PhA26dKbY1HDprIId
qBzQnsHZ8YTEACloRNwCysM&#43;x1snqZPMZdjXMUpEVXIlBbwXOFpkpZnz/uaPReOI
tg2fOb9pui1wCy4PDBmog3FshD&#43;fzF1E3FK/0tCVGXujbGqw7aFUQMxF4O0Ikt9E
NC1aOlUZIlo9hcDL3tN/QZHzOHEWGE6SnNTtnNMfbU6zxYcjG0EaGxkAGGkH2kQQ
qKCjDexannAjUmSdsql0uB0qeSGsTOPvx&#43;LlLLjWiukXEZRNlr3/6BEfGQARAQAB
tCZJbWFuIEFsaXBvdXIgPGltYW4uYWxpcDIwMDFAZ21haWwuY29tPokCRwQTAQgA
MRYhBFWipd6EeSusxsruP7WIKFDgTI0qBQJnPYxWAhsDBAsJCAcFFQgJCgsFFgID
AQAACgkQtYgoUOBMjSoOaw//dco0eCc1FAChHlMpPC9R06Y2ihfCYD7F6VfqoosU
WBM0b/wxPrbUVSu5quW038nnr1Q&#43;yOK&#43;fWSHxDicIVEgmEgX3NhXFRSt6tRH5FSC
7kaW0KxAx7JsZs4uZ0dCVXf8txAaLs5W3L0VmkiLNintWWCNV7QWDvrn7mg&#43;lzuv
4A8dy0BeARoYq9462J4SCyqnWLr80UHAgQ1StzhReBK8oEdLQ5VyXBXDZzL7i/W6
XXQqekle1npMGpUF9ICwU7Tgt0vWGMmfnAaJIq3qkHhyj7PkXASpe8dAWphUV3Aw
t01Hi6/B25P1&#43;Yx7s8zU6qSjRqeNSih7cY1MfSintF/YK/WJo1PjNRUzPL0QwS2B
2dA&#43;QHLKq2pzRTf29cvKE8frgHl5xnfWGrVmHs4JyS4x5Y7JkOMNU1bWTMehkVCJ
HtWJEnTy&#43;4ya392qfzWSdKm&#43;GJMkxPjyQeK/PhTwV&#43;jmIfZ&#43;8BUMyDN&#43;WvSb8/B&#43;
BbV88HAtxPvloswPk/YhAcuutBq6SeZSePQuCGUqtuEJkw22rXjxy5edskrJAGNh
cGhH5cfXa7AQhe4BKwCs4nNSiZryfUFtJ0q2FuWFg0b6gBzFMvWiDOAF&#43;z7p0Uav
jT4TeT1I0bclhWJIYb4tCqCd0USWXNbSt5P8DnbkVA5kZvxxSDXCeFUZNl9mvgc&#43;
PU65Ag0EZz2MVgEQAOGsXC1MrVeKCKFd3RVZHGy8WmcuMiN&#43;iT3&#43;/T1VcXUO7vGk
GQIkpYmJnxJkgmJp2VsRTL&#43;Ie/sScPg75UIyc/VsmUCsbEiiYNy/9/g9/8OAhqMV
BYBEook6t2jnK1&#43;2Qf71VlZNYVFHTbCDAhwkDTgd0xSPjB7Yp6OvywQhqv62ja2y
FTQk0pGukuyGCCzwZx&#43;uGykv3LluLbKwBqpfbvDHdptb2/etsTAra4kGV3qYbePI
EreTHN8OcboDzsIs2cnphU0tdeZEUqmc5QHIGlCve/pieGnOp7ccWwfwQQAxaJh&#43;
2gcEwoyCWY8uRwDPrgIc/oqEkK5rGU1hfin7UPkl7Ow0EdEVxhQBSYLh3UhupZxS
/4Dob0aTpR8rjlC0Wz8IPR5XJl9rdon4Cgi6W7XwVcuE1/1NVCraoRT2BQGTiwIm
3ICHmQZmN1NiO211IyDDEI/eKHBAjm0Fn6D&#43;LOvePUaKxmY6kAlpjnpHIOX98hPN
0uvZUreefviiyheBOEUh9lln3uRaNlCqVrPoJV2vyx/hGyk9tjGA3vZpfSmDnOXy
ukLpVX9SukT6W6jEjL5Wc2DH9BfY63vVvDWxODueWExJ6CIerZvkmWV/k/rQqsqY
DAhRR0dixoRLy&#43;7i5oaP8duOOnbubBDD9bO8b8GsrgtkNc8oAFdhrpTUlAG9ABEB
AAGJAjYEGAEIACAWIQRVoqXehHkrrMbK7j&#43;1iChQ4EyNKgUCZz2MVwIbDAAKCRC1
iChQ4EyNKonED/4uixRWRcL&#43;Uh9gj4s5bJ8WKYoQFZmaI/kc6DqT/9&#43;d3nalYCzp
l8H9TFyuNsOi0DEOwQXp/maBVsELZInbVrxiNb6F7jPNNjYSXAJViLarmxc0u0Th
yujCN6cgZFqhxynkEV6&#43;VqBIy7beeIDCIfinups6G94mSqG5CqwRDBCytF/P3XIG
U6yOoPJUOgVsmc4wGT5k0EKSOlJ/lU4nQM5oCY5y6AbkampAPQpth07ucS7ld2aC
N5xyaL/P8R4FOurGthF1zL9dDUl9xRcOuxobn&#43;wJgy8/8wZ/X786/unHeH5Q/Vni
hpxHrRUCI&#43;4R2nJtA9LMcDH1MkPJW0gT2RBDnLJuQaVQhu374snFXv0mI52gYVEI
4bipi0Mzc4YixSElgX0ZJWVB0Xsv4e18B/jfGYtjEF1v/fEOzy&#43;qiBNke1LFfRrP
akRHlREXU&#43;d8LV2oWS52XPkHSruG7l30uocejjiIa1kLm6neeQ&#43;uz9JmAiHw4pEV
WWwlf4AVvy2kpk/TomFl83Nen/NOi7FzPw6N4VJe1fimfRRPetOx3jnZrLScYUWp
G81NTYbFbQPXQb823dC2UJRxLiZxMhqAKj3J7nXJg2Krk8ahUmre7xFTY/wvepOQ
uOF&#43;1xz2LXDeGUiH9IXqrbfx&#43;nWlznKYr86EHF&#43;&#43;hTxlV6dr6iELr8XFEg==
=mAs8
-----END PGP PUBLIC KEY BLOCK-----
</pre>
</details>
<h3 id="verify-a-post">Verify a post<a hidden class="anchor" aria-hidden="true" href="#verify-a-post">#</a></h3>
<ol>
<li>Import my key once:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -O https://blog.alipourimjourneys.ir/keys/iman-alipour-pgp.asc
</span></span><span style="display:flex;"><span>gpg --import iman-alipour-pgp.asc
</span></span></code></pre></div></li>
<li>Download the post and its signature (each post links them):
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -O https://blog.alipourimjourneys.ir/sources/posts/hello-world.md
</span></span><span style="display:flex;"><span>curl -O https://blog.alipourimjourneys.ir/sources/posts/hello-world.md.asc
</span></span></code></pre></div></li>
<li>Verify:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>gpg --verify hello-world.md.asc hello-world.md
</span></span></code></pre></div></li>
</ol>
<hr>
<div class="signature-block" style="margin-top:1rem">
<p><strong>Downloads:</strong>
<a href="/sources/about.md">Markdown</a> ·
<a href="/sources/about.md.asc">Signature (.asc)</a>
</p><p><em>Verify locally:</em></p>
<pre style="font-size:0.85em; overflow-x:auto; padding:0.75rem;">torsocks curl -fSLO http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/sources/about.md
torsocks curl -fSLO http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/sources/about.md.asc
gpg --verify about.md.asc about.md
</pre>
</div>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
</footer><div class="comments-switch" style="display:flex;gap:.5rem;margin:.5rem 0 1rem;">
<button id="btn-isso" type="button" aria-pressed="true">Anonymous (Isso)</button>
<button id="btn-giscus" type="button" aria-pressed="false">GitHub (Giscus)</button>
<a href="https://github.com/AlipourIm/blog-comments/discussions/categories/comments" target="_blank" rel="noopener">Open on GitHub ↗</a>
</div>
<div id="panel-giscus" style="display:none">
<section id="giscus-thread"></section>
</div>
<div id="panel-isso">
<section id="isso-thread"
data-isso-id="/about/"
data-title="About">
<noscript>Javascript needs to be activated to view comments.</noscript>
</section>
<script
src="/isso/js/embed.min.js"
data-isso="/isso/"
data-isso-css="false"
data-isso-lang="en"
data-isso-max-comments-nested="5"
data-isso-sorting="newest"
async>
</script>
<small class="isso-powered" style="display:block;margin:.5rem 0;color:var(--secondary,#888)">
Comments powered by <a href="https://isso-comments.de" target="_blank" rel="noopener">Isso</a>
</small>
</div>
<script>
(function () {
var panelIsso = document.getElementById('panel-isso');
var panelGisc = document.getElementById('panel-giscus');
var issoBtn = document.getElementById('btn-isso');
var giscBtn = document.getElementById('btn-giscus');
var gLoaded = false;
function isDark() {
var pref = localStorage.getItem('pref-theme');
if (pref === 'dark') return true;
if (pref === 'light') return false;
var html = document.documentElement, body = document.body;
if (
(html.classList && html.classList.contains('dark')) ||
(body.classList && body.classList.contains('dark')) ||
html.getAttribute('data-theme') === 'dark' ||
body.getAttribute('data-theme') === 'dark' ||
(html.classList && html.classList.contains('theme-dark')) ||
(body.classList && body.classList.contains('theme-dark'))
) return true;
return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
}
function gTheme(){ return isDark() ? 'dark_dimmed' : 'noborder_light'; }
function loadGiscus() {
if (gLoaded) return;
var s = document.createElement('script');
s.src = 'https://giscus.app/client.js';
s.async = true;
s.crossOrigin = 'anonymous';
s.setAttribute('data-repo','AlipourIm/blog-comments');
s.setAttribute('data-repo-id','R_kgDOQGARyA');
s.setAttribute('data-category','Comments');
s.setAttribute('data-category-id','DIC_kwDOQGARyM4Cw3x-');
s.setAttribute('data-mapping','pathname');
s.setAttribute('data-strict','0');
s.setAttribute('data-reactions-enabled','1');
s.setAttribute('data-emit-metadata','0');
s.setAttribute('data-input-position','bottom');
s.setAttribute('data-lang','en');
s.setAttribute('data-theme', gTheme());
document.getElementById('giscus-thread').appendChild(s);
function reTheme(){
var iframe = document.querySelector('iframe.giscus-frame');
if (iframe && iframe.contentWindow) {
iframe.contentWindow.postMessage(
{ giscus: { setConfig: { theme: gTheme() } } },
'https://giscus.app'
);
}
}
var tbtn = document.getElementById('theme-toggle');
if (tbtn) tbtn.addEventListener('click', function(){ setTimeout(reTheme, 0); });
var mo = new MutationObserver(function(){ reTheme(); });
mo.observe(document.documentElement, { attributes:true, attributeFilter:['class','data-theme'] });
mo.observe(document.body, { attributes:true, attributeFilter:['class','data-theme'] });
gLoaded = true;
}
function show(which) {
var showIsso = which === 'isso';
panelIsso.style.display = showIsso ? 'block' : 'none';
panelGisc.style.display = showIsso ? 'none' : 'block';
if (issoBtn) issoBtn.setAttribute('aria-pressed', showIsso ? 'true' : 'false');
if (giscBtn) giscBtn.setAttribute('aria-pressed', showIsso ? 'false' : 'true');
if (!showIsso) loadGiscus();
}
if (issoBtn) issoBtn.addEventListener('click', function(e){ e.preventDefault(); show('isso'); });
if (giscBtn) giscBtn.addEventListener('click', function(e){ e.preventDefault(); show('giscus'); });
show('isso');
})();
</script>
</article>
</main>
<footer class="footer">
<span>&copy; 2026 <a href="http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/">AlipourIm journeys</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script src="/isso/js/count.min.js" data-isso="/isso" async></script>
<div class="site-meta-row" style="display:flex;align-items:center;gap:.75rem;flex-wrap:wrap;">
<a href="/index.xml" rel="alternate" type="application/rss+xml" title="RSS"
class="rss-link" style="display:inline-flex;align-items:center;gap:.35rem;">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round">
<path d="M4 11a9 9 0 0 1 9 9" />
<path d="M4 4a16 16 0 0 1 16 16" />
<circle cx="5" cy="19" r="1" />
</svg>
<span>RSS</span>
</a>
<span aria-hidden="true">·</span>
<span>Visitors this week: <span id="gc_site_visitors_week"></span></span>
</div>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body>
</html>