digital garden: 3 aktif varyant (v4 defter, v5 gazete, v6 katalog) + yillik
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.DS_Store
|
||||
17
README.md
Normal file
17
README.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# tunapro-garden
|
||||
|
||||
tunapro.xyz ana sayfası için digital garden. 3 aktif varyant + yıllık sayfası.
|
||||
|
||||
- `v4/` defter (wiki tarzı, sidebar'lı)
|
||||
- `v5/` gazete (broadsheet)
|
||||
- `v6/` katalog (arşiv fişi)
|
||||
- `v1/ v2/ v3/` eski tur, arşiv
|
||||
- `yillik/` yıllıktaki QR'ın indiği sayfa
|
||||
- `index.html` varyant seçici (sadece önizleme için, prod'a KOYULMAYACAK)
|
||||
|
||||
## deploy notu (server-main için)
|
||||
|
||||
- Statik dosyalar, build yok. Seçilen varyantın içeriği tunapro.xyz köküne,
|
||||
`yillik/` aynen `/yillik/` path'ine gider.
|
||||
- Tuna hangi varyantı seçtiğini söyleyene kadar SERVE ETME. Hazırlık tamam,
|
||||
nginx'e bağlamak için onay bekleniyor.
|
||||
47
index.html
Normal file
47
index.html
Normal file
@@ -0,0 +1,47 @@
|
||||
<!doctype html>
|
||||
<html lang="tr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>tunapro garden — varyant seçici</title>
|
||||
<style>
|
||||
:root{--bg:#111;--fg:#eee;--dim:#888;--mono:ui-monospace,Menlo,monospace}
|
||||
*{box-sizing:border-box;margin:0;padding:0}
|
||||
body{background:var(--bg);color:var(--fg);font-family:var(--mono);min-height:100vh;
|
||||
display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:30px}
|
||||
h1{font-size:16px;margin-bottom:6px}
|
||||
p{color:var(--dim);font-size:13px;margin-bottom:24px;text-align:center}
|
||||
h2{font-size:12px;color:var(--dim);letter-spacing:.2em;text-transform:uppercase;margin:18px 0 10px;align-self:flex-start;max-width:900px;width:100%;margin-left:auto;margin-right:auto}
|
||||
.v{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;width:min(900px,100%)}
|
||||
a.card{border:1px solid #333;border-radius:10px;padding:22px;text-decoration:none;color:var(--fg);
|
||||
transition:border-color .15s,transform .15s}
|
||||
a.card:hover{border-color:#d63c2f;transform:translateY(-3px)}
|
||||
a.card b{display:block;font-size:15px;margin-bottom:8px;color:#d63c2f}
|
||||
a.card span{color:var(--dim);font-size:12.5px;line-height:1.5;display:block}
|
||||
a.card.old{opacity:.45}
|
||||
a.card.old b{color:#666}
|
||||
a.extra{margin-top:22px;color:var(--dim);font-size:12.5px;text-decoration:none}
|
||||
a.extra:hover{color:#e8c46a}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>tunapro.xyz — dijital bahçe</h1>
|
||||
<p>yeni tur: v3 tarzı baz alınarak 3 yeni varyant. hepsi bölümlü, derin içerikli, senin ağzından yazıldı.</p>
|
||||
<h2>yeni — 2. tur</h2>
|
||||
<div class="v">
|
||||
<a class="card" href="/v4/"><b>v4 · Defter</b>
|
||||
<span>wiki tarzı: soldan kategori indeksi, notlar tek sayfada, bkz-linkleri, durum etiketleri. en derin olan.</span></a>
|
||||
<a class="card" href="/v5/"><b>v5 · Gazete</b>
|
||||
<span>broadsheet parodi: manşet, sütunlar, telgraf hattı, arşivden alıntılar ve küçük ilanlar.</span></a>
|
||||
<a class="card" href="/v6/"><b>v6 · Katalog</b>
|
||||
<span>arşiv fişi estetiği: damgalı kartlar (kazandık / arşiv / şifreli), yıllara göre 2020→2026 dizilim.</span></a>
|
||||
</div>
|
||||
<h2>eski — 1. tur</h2>
|
||||
<div class="v">
|
||||
<a class="card old" href="/v3/"><b>v3 · Fihrist</b><span>2. turun temeli. bölümlü brutalist indeks.</span></a>
|
||||
<a class="card old" href="/v1/"><b>v1 · Kâğıt Bahçe</b><span>beğenilmedi, arşiv.</span></a>
|
||||
<a class="card old" href="/v2/"><b>v2 · Gece Bahçesi</b><span>beğenilmedi, arşiv.</span></a>
|
||||
</div>
|
||||
<a class="extra" href="/yillik/">+ /yillik — yıllıktaki QR'ın indiği özel sayfa</a>
|
||||
</body>
|
||||
</html>
|
||||
246
v1/index.html
Normal file
246
v1/index.html
Normal file
@@ -0,0 +1,246 @@
|
||||
<!doctype html>
|
||||
<html lang="tr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>tunapro — dijital bahçe</title>
|
||||
<meta name="description" content="Tuna Gül'ün dijital bahçesi: robotik, AI agent'lar, self-host edilen her şey. Bitmiş yazılar değil, büyüyen notlar.">
|
||||
<style>
|
||||
:root{
|
||||
--paper:#faf6ee; --paper-2:#f3ecdd; --ink:#2b2620; --ink-soft:#6b6156;
|
||||
--green:#3e6b4f; --green-soft:#e4ede4; --amber:#b0752b; --line:#e0d6c3;
|
||||
--link:#3e6b4f;
|
||||
}
|
||||
*{box-sizing:border-box;margin:0;padding:0}
|
||||
html{scroll-behavior:smooth}
|
||||
body{
|
||||
background:var(--paper); color:var(--ink);
|
||||
font-family:"Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;
|
||||
line-height:1.65; font-size:17px;
|
||||
background-image:radial-gradient(circle at 1px 1px, rgba(62,107,79,.06) 1px, transparent 0);
|
||||
background-size:26px 26px;
|
||||
}
|
||||
a{color:var(--link)}
|
||||
.wrap{max-width:1060px;margin:0 auto;padding:0 24px}
|
||||
header{padding:64px 0 34px;border-bottom:1px solid var(--line)}
|
||||
.kicker{font-family:ui-monospace,Menlo,monospace;font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--amber)}
|
||||
h1{font-size:clamp(34px,6vw,52px);font-weight:600;letter-spacing:-.01em;margin:10px 0 14px}
|
||||
h1 .tilde{color:var(--green)}
|
||||
.lede{max-width:62ch;color:var(--ink-soft);font-size:18.5px}
|
||||
.lede strong{color:var(--ink)}
|
||||
.season{margin-top:18px;font-family:ui-monospace,Menlo,monospace;font-size:13px;color:var(--ink-soft)}
|
||||
.season b{color:var(--green);font-weight:600}
|
||||
nav.legend{display:flex;gap:22px;flex-wrap:wrap;padding:16px 0;border-bottom:1px solid var(--line);
|
||||
font-family:ui-monospace,Menlo,monospace;font-size:13px;color:var(--ink-soft);position:sticky;top:0;
|
||||
background:color-mix(in srgb, var(--paper) 92%, transparent);backdrop-filter:blur(6px);z-index:5}
|
||||
nav.legend .item{cursor:default}
|
||||
nav.legend a{text-decoration:none;color:var(--ink-soft)}
|
||||
nav.legend a:hover{color:var(--green)}
|
||||
main{display:grid;grid-template-columns:1fr;gap:0}
|
||||
.garden{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:20px;padding:38px 0 10px}
|
||||
.note{
|
||||
background:#fffdf7;border:1px solid var(--line);border-radius:10px;padding:22px 22px 18px;
|
||||
position:relative;display:flex;flex-direction:column;gap:10px;
|
||||
box-shadow:0 1px 2px rgba(43,38,32,.05);
|
||||
transition:transform .18s ease, box-shadow .18s ease;
|
||||
}
|
||||
.note:hover{transform:translateY(-3px);box-shadow:0 10px 24px rgba(43,38,32,.10)}
|
||||
.note.wide{grid-column:span 2}
|
||||
@media(max-width:720px){.note.wide{grid-column:span 1}}
|
||||
.stage{font-family:ui-monospace,Menlo,monospace;font-size:12px;color:var(--ink-soft);display:flex;justify-content:space-between;align-items:center}
|
||||
.stage .s{color:var(--green)}
|
||||
.note h2{font-size:21px;font-weight:600;letter-spacing:-.005em}
|
||||
.note h2 a{text-decoration:none;color:var(--ink)}
|
||||
.note h2 a:hover{color:var(--green)}
|
||||
.note p{font-size:15.5px;color:#463f36}
|
||||
.note p a{text-decoration:underline;text-decoration-color:#bcd0bf;text-underline-offset:3px}
|
||||
.note p a:hover{text-decoration-color:var(--green)}
|
||||
.roots{margin-top:auto;padding-top:10px;border-top:1px dashed var(--line);display:flex;gap:14px;flex-wrap:wrap;
|
||||
font-family:ui-monospace,Menlo,monospace;font-size:12.5px}
|
||||
.roots a{text-decoration:none;color:var(--ink-soft)}
|
||||
.roots a:hover{color:var(--green)}
|
||||
.roots a::before{content:"↳ ";color:var(--amber)}
|
||||
.wiki{background:var(--green-soft);border-radius:4px;padding:0 4px;text-decoration:none !important;color:var(--green);white-space:nowrap}
|
||||
.wiki::before{content:"[["}.wiki::after{content:"]]"}
|
||||
.wiki::before,.wiki::after{opacity:.45}
|
||||
.curio{background:linear-gradient(180deg,#fffdf7, #fdf7ea)}
|
||||
.curio .stage .s{color:var(--amber)}
|
||||
section.about{margin:44px 0;padding:30px;border:1px solid var(--line);border-radius:12px;background:var(--paper-2);
|
||||
display:grid;grid-template-columns:1.4fr 1fr;gap:30px}
|
||||
@media(max-width:720px){section.about{grid-template-columns:1fr}}
|
||||
section.about h3{font-size:14px;font-family:ui-monospace,Menlo,monospace;letter-spacing:.12em;text-transform:uppercase;color:var(--amber);margin-bottom:12px}
|
||||
section.about p{color:#463f36;font-size:15.5px;margin-bottom:10px}
|
||||
.paths{list-style:none;font-size:15px}
|
||||
.paths li{padding:7px 0;border-bottom:1px dashed var(--line)}
|
||||
.paths li:last-child{border-bottom:none}
|
||||
.paths a{text-decoration:none}
|
||||
.paths .where{font-family:ui-monospace,Menlo,monospace;font-size:12.5px;color:var(--ink-soft);float:right}
|
||||
footer{padding:34px 0 60px;border-top:1px solid var(--line);margin-top:20px;
|
||||
display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;
|
||||
font-family:ui-monospace,Menlo,monospace;font-size:13px;color:var(--ink-soft)}
|
||||
footer a{color:var(--ink-soft);text-decoration:none}
|
||||
footer a:hover{color:var(--green)}
|
||||
.gate{font-size:12.5px}
|
||||
.gate a{color:var(--amber)}
|
||||
@media (prefers-reduced-motion: reduce){.note{transition:none}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
|
||||
<header>
|
||||
<div class="kicker">tunapro.xyz · dijital bahçe</div>
|
||||
<h1>Tuna'nın bahçesi<span class="tilde">.</span></h1>
|
||||
<p class="lede">Burası bir blog değil, bir <strong>bahçe</strong>: robotlar, AI agent'lar ve
|
||||
kendi sunucumda yaşattığım sikko-ama-sevimli projeler hakkında <strong>büyüyen notlar</strong>.
|
||||
Hiçbiri bitmiş sayılmaz — kimi daha fide, kimi çınar. Kronolojiye değil, meraka göre gez.</p>
|
||||
<p class="season">mevsim: <b>yaz 2026</b> · bahçıvan: Tuna Gül · en son sulama: bugün</p>
|
||||
</header>
|
||||
|
||||
<nav class="legend" aria-label="büyüme aşamaları">
|
||||
<span class="item">🌱 fide — yeni dikildi, kırılgan</span>
|
||||
<span class="item">🌿 filiz — büyüyor, düzenli sulanıyor</span>
|
||||
<span class="item">🌳 çınar — köklendi, gölgesinde oturulur</span>
|
||||
<a href="#hakkinda">bahçıvan kim? ↓</a>
|
||||
</nav>
|
||||
|
||||
<main>
|
||||
<div class="garden">
|
||||
|
||||
<article class="note wide" id="blueprint">
|
||||
<div class="stage"><span class="s">🌳 çınar</span><span>dikim 2025 · son sulama tem 2026</span></div>
|
||||
<h2><a href="https://bp.tunapro.xyz">blueprint (bp)</a></h2>
|
||||
<p>tmux içinde bir AI agent <em>filosunu</em> yöneten orkestrasyon aracı. Paketler
|
||||
<code>BLUEPRINT.yaml</code> ile tasarlanıyor, snapshot tabanlı versiyonlama ve symlink'le
|
||||
sabitlenmiş bağımlılıklarla büyüyor. Go ile yazdım; bu bahçedeki çoğu şey gibi
|
||||
<a class="wiki" href="#homelab">homelab</a>'de kendi kendini barındırıyor.
|
||||
<a class="wiki" href="#replicant">replicant</a> ve <a class="wiki" href="#outpost">outpost</a>
|
||||
bu düzenin içinde filizlendi.</p>
|
||||
<div class="roots">
|
||||
<a href="https://bp.tunapro.xyz">bp.tunapro.xyz</a>
|
||||
<a href="https://github.com/tunapro1234/blueprint">github/blueprint</a>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="note" id="outpost">
|
||||
<div class="stage"><span class="s">🌿 filiz</span><span>son sulama: bugün</span></div>
|
||||
<h2><a href="https://github.com/tunapro1234/outpost">outpost</a></h2>
|
||||
<p>Graph-merkezli bir outreach aracı: insanlar, bağlantılar ve konuşmalar birer düğüm.
|
||||
Şu an bahçenin kilitli serası — <a href="https://outpost.tunapro.xyz">canlı hali</a> parola
|
||||
istiyor, çünkü içinde gerçek insanlar var. En sık sulanan fidan bu.</p>
|
||||
<div class="roots">
|
||||
<a href="https://github.com/tunapro1234/outpost">github/outpost</a>
|
||||
<a href="https://outpost.tunapro.xyz">outpost.tunapro.xyz 🔒</a>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="note" id="probot">
|
||||
<div class="stage"><span class="s">🌳 çınar</span><span>MIT · 9★</span></div>
|
||||
<h2><a href="https://probotstudio.com">Probot Studio</a></h2>
|
||||
<p><em>«Bir kit, sonsuz robot.»</em> Arduino tabanlı robot yarışmaları için geliştirdiğimiz
|
||||
kütüphane ve kit ekosistemi. Çekirdeği açık: <code>probot-core</code>, sahada denenmiş
|
||||
embedded control middleware. <a class="wiki" href="#frc">FRC yıllarımın</a> toprağında yetişti.</p>
|
||||
<div class="roots">
|
||||
<a href="https://probotstudio.com">probotstudio.com</a>
|
||||
<a href="https://github.com/probot-studio/probot-core">github/probot-core</a>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="note" id="homelab">
|
||||
<div class="stage"><span class="s">🌿 filiz</span><span>7/24 vızıldıyor</span></div>
|
||||
<h2>homelab: *.tunapro.xyz</h2>
|
||||
<p>Self-host etmediğim şey kalmasın: kod <a href="https://git.tunapro.xyz">Gitea</a>'da,
|
||||
medya kendi video sunucumda, Minecraft sunucusunun paneli <code>mcdash</code>'te, mail bile
|
||||
burada. Bu bahçe de dahil — okuduğun sayfa benim demirimde dönüyor.
|
||||
<a class="wiki" href="#blueprint">blueprint</a> bu makinelerde yaşar.</p>
|
||||
<div class="roots">
|
||||
<a href="https://git.tunapro.xyz">git.tunapro.xyz</a>
|
||||
<a href="https://video.tunapro.xyz">video</a>
|
||||
<a href="https://mcdash.tunapro.xyz">mcdash</a>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article class="note" id="replicant">
|
||||
<div class="stage"><span class="s">🌱 fide</span><span>dikim may 2026</span></div>
|
||||
<h2><a href="https://github.com/tunapro1234/replicant">replicant</a></h2>
|
||||
<p>AI agent deneyleri: bir agent'ın kendini ve iş arkadaşlarını kopyalayıp çoğaltması üzerine
|
||||
Python karalamaları. Adı tesadüf değil. Büyüyünce ne olacağını ben de bilmiyorum — fidelerin
|
||||
güzelliği bu. Kardeşi: <a class="wiki" href="#metron">metron</a>.</p>
|
||||
<div class="roots"><a href="https://github.com/tunapro1234/replicant">github/replicant</a></div>
|
||||
</article>
|
||||
|
||||
<article class="note" id="metron">
|
||||
<div class="stage"><span class="s">🌱 fide</span><span>1★</span></div>
|
||||
<h2><a href="https://github.com/tunapro1234/metron">metron</a></h2>
|
||||
<p>Ölçmediğin şeyi yönetemezsin: agent'lar ve sistemler için Python'da metrik/ölçüm katmanı.
|
||||
<a class="wiki" href="#replicant">replicant</a> koşarken metron sayar.</p>
|
||||
<div class="roots"><a href="https://github.com/tunapro1234/metron">github/metron</a></div>
|
||||
</article>
|
||||
|
||||
<article class="note" id="sims">
|
||||
<div class="stage"><span class="s">🌱 fide</span><span>okuma listesi büyüyor</span></div>
|
||||
<h2>LLM'lerle toplum simülasyonu</h2>
|
||||
<p>AI agent'larla toplum kurma merakım: <a href="https://github.com/tunapro1234/hallucinating-splines">hallucinating-splines</a>'ta
|
||||
agent'lar headless SimCity'de şehir kuruyor; <a href="https://github.com/tunapro1234/edsl-test">EDSL</a> ile
|
||||
AI destekli anket/deney tasarımını kurcalıyorum. Not defteri:
|
||||
<a href="https://github.com/tunapro1234/awesome-llm-social-simulation">awesome-llm-social-simulation</a>.</p>
|
||||
<div class="roots"><a href="https://github.com/tunapro1234/awesome-llm-social-simulation">github/awesome-llm-social-simulation</a></div>
|
||||
</article>
|
||||
|
||||
<article class="note" id="frc">
|
||||
<div class="stage"><span class="s">🌳 çınar</span><span>kökler burada</span></div>
|
||||
<h2>FRC 7839 & 9029 → NFR Products</h2>
|
||||
<p>Robotikle FRC sahasında tanıştım (7839 ve 9029). O sahadan bir dönem donanım işine de
|
||||
girdik; benim payıma düşen kökler bugün <a class="wiki" href="#probot">Probot Studio</a>'da —
|
||||
yarış robotlarından yarışma kitlerine.</p>
|
||||
<div class="roots"><a href="https://github.com/team-nf">github/team-nf</a></div>
|
||||
</article>
|
||||
|
||||
<article class="note" id="elevator">
|
||||
<div class="stage"><span class="s">🌱 fide</span><span>Rust · 1★</span></div>
|
||||
<h2><a href="https://github.com/tunapro1234/elevator_optimization">elevator_optimization</a></h2>
|
||||
<p>Asansör çizelgelemesi ne kadar optimize edilebilir? Rust'la yazılmış küçük bir saplantı.
|
||||
Beklerken düşünülen her şey proje olabilir.</p>
|
||||
<div class="roots"><a href="https://github.com/tunapro1234/elevator_optimization">github/elevator_optimization</a></div>
|
||||
</article>
|
||||
|
||||
<article class="note curio" id="canbitirici">
|
||||
<div class="stage"><span class="s">🍄 mantar</span><span>hakemli değil, kesin doğru</span></div>
|
||||
<h2><a href="https://canbitirici.tunapro.xyz">Can neden iş bitirici değil?</a></h2>
|
||||
<p>Bahçenin gölgesinde kendiliğinden biten tür: titiz metodolojiyle hazırlanmış(!) bir
|
||||
araştırma raporu. Bilim böyle bir şey olmalı — kişisel, kindar ve grafikli.</p>
|
||||
<div class="roots"><a href="https://canbitirici.tunapro.xyz">canbitirici.tunapro.xyz</a></div>
|
||||
</article>
|
||||
|
||||
</div>
|
||||
|
||||
<section class="about" id="hakkinda">
|
||||
<div>
|
||||
<h3>Bahçıvan</h3>
|
||||
<p>Ben <strong>Tuna Gül</strong> — Türkiye'de mühendislik öğrencisi; robotik, AI agent'lar ve
|
||||
sistem mimarisiyle uğraşıyorum. İnancım basit: bir sistem <em>kurulabiliyorsa</em>, kurulacak.
|
||||
O yüzden izlemek yerine kurmayı seçiyorum.</p>
|
||||
<p>Bu bahçedeki notlar bitmiş metinler değil; yarım fikirler, çalışan prototipler, birkaç şaka.
|
||||
Hepsi kendi toprağımda (kendi sunucularımda) duruyor. Bir not sana yarım geldiyse, doğru
|
||||
gelmiştir — geri gel, büyümüş olur.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Patikalar</h3>
|
||||
<ul class="paths">
|
||||
<li><a href="https://github.com/tunapro1234">GitHub</a><span class="where">@tunapro1234</span></li>
|
||||
<li><a href="https://git.tunapro.xyz">Kendi Gitea'm</a><span class="where">git.tunapro.xyz</span></li>
|
||||
<li><a href="https://probotstudio.com">Probot Studio</a><span class="where">probotstudio.com</span></li>
|
||||
<li><a href="https://stackoverflow.com/users/tunapro1234">Neredeyse her yerde</a><span class="where">@tunapro1234</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<span>© 2026 Tuna Gül · bahçe kendi sunucusunda büyür</span>
|
||||
<span class="gate">yıllıktaki QR'dan mı geldin? <a href="/yillik/">senin için ayrı bir köşe var →</a></span>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
307
v2/index.html
Normal file
307
v2/index.html
Normal file
@@ -0,0 +1,307 @@
|
||||
<!doctype html>
|
||||
<html lang="tr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>tunapro — gece bahçesi</title>
|
||||
<meta name="description" content="Tuna Gül'ün dijital bahçesi, gece modu: projeler bir graf, notlar birer düğüm. tmux'ta yaşayan biri için doğal habitat.">
|
||||
<style>
|
||||
:root{
|
||||
--bg:#0b0f0d; --panel:#10161200; --panel-solid:#101612; --line:#1e2b23;
|
||||
--fg:#c9d6cc; --dim:#6d7f73; --green:#5dd39e; --amber:#e8b45a; --red:#e06c75;
|
||||
--mono:ui-monospace,"JetBrains Mono","Fira Code",Menlo,Consolas,monospace;
|
||||
}
|
||||
*{box-sizing:border-box;margin:0;padding:0}
|
||||
html,body{height:100%}
|
||||
body{background:var(--bg);color:var(--fg);font-family:var(--mono);font-size:15px;line-height:1.6;overflow:hidden}
|
||||
a{color:var(--green)}
|
||||
#sky{position:fixed;inset:0;display:block;cursor:grab}
|
||||
#sky.dragging{cursor:grabbing}
|
||||
.hud{position:fixed;left:0;right:0;pointer-events:none;z-index:10}
|
||||
.hud *{pointer-events:auto}
|
||||
header.hud{top:0;padding:22px 26px;display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}
|
||||
.brand h1{font-size:18px;font-weight:600;color:var(--fg)}
|
||||
.brand h1 .p{color:var(--green)}
|
||||
.brand .sub{font-size:12.5px;color:var(--dim);max-width:52ch;margin-top:6px}
|
||||
.legend{font-size:12px;color:var(--dim);text-align:right;line-height:1.9}
|
||||
.legend .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:1px}
|
||||
.legend .d1{background:var(--green)} .legend .d2{background:var(--amber)} .legend .d3{background:#7aa2f7}
|
||||
footer.hud{bottom:0;background:var(--panel-solid);border-top:1px solid var(--line);
|
||||
display:flex;align-items:center;gap:0;font-size:12.5px;height:34px;overflow:hidden}
|
||||
footer .seg{padding:0 14px;display:flex;align-items:center;height:100%;white-space:nowrap}
|
||||
footer .seg.g{background:var(--green);color:#08130d;font-weight:600}
|
||||
footer .seg.dim{color:var(--dim)}
|
||||
footer .grow{flex:1}
|
||||
footer a{color:var(--fg);text-decoration:none;padding:0 10px;height:100%;display:flex;align-items:center}
|
||||
footer a:hover{background:var(--line);color:var(--green)}
|
||||
#card{
|
||||
position:fixed;top:0;right:0;bottom:34px;width:min(460px,100vw);z-index:20;
|
||||
background:rgba(13,19,15,.97);border-left:1px solid var(--line);
|
||||
transform:translateX(105%);transition:transform .25s ease;
|
||||
padding:28px;overflow-y:auto;backdrop-filter:blur(8px);
|
||||
}
|
||||
#card.open{transform:translateX(0)}
|
||||
#card .close{position:absolute;top:16px;right:18px;background:none;border:1px solid var(--line);
|
||||
color:var(--dim);font-family:var(--mono);font-size:13px;padding:3px 10px;cursor:pointer;border-radius:4px}
|
||||
#card .close:hover{color:var(--red);border-color:var(--red)}
|
||||
#card .stage{font-size:12px;color:var(--amber);letter-spacing:.08em;text-transform:uppercase}
|
||||
#card h2{margin:10px 0 4px;font-size:22px;color:#fff}
|
||||
#card .meta{font-size:12px;color:var(--dim);margin-bottom:16px}
|
||||
#card .body{font-size:14px;color:var(--fg)}
|
||||
#card .body p{margin-bottom:12px}
|
||||
#card .body .cmt{color:var(--dim)}
|
||||
#card .links{margin-top:18px;border-top:1px dashed var(--line);padding-top:14px;display:flex;flex-direction:column;gap:8px;font-size:13px}
|
||||
#card .links a{text-decoration:none}
|
||||
#card .links a:hover{text-decoration:underline}
|
||||
#card .links a::before{content:"$ open ";color:var(--dim)}
|
||||
#card .also{margin-top:18px;font-size:12.5px;color:var(--dim)}
|
||||
#card .also button{background:var(--line);border:none;color:var(--green);font-family:var(--mono);
|
||||
font-size:12px;padding:2px 8px;margin:2px 4px 2px 0;border-radius:3px;cursor:pointer}
|
||||
#card .also button:hover{background:var(--green);color:#08130d}
|
||||
#hint{position:fixed;left:50%;bottom:52px;transform:translateX(-50%);z-index:9;
|
||||
font-size:12px;color:var(--dim);background:var(--panel-solid);border:1px solid var(--line);
|
||||
padding:6px 14px;border-radius:20px;transition:opacity .5s}
|
||||
#hint.hide{opacity:0}
|
||||
@media(max-width:700px){.legend{display:none}}
|
||||
@media (prefers-reduced-motion: reduce){ /* JS de yavaşlatır */ }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<canvas id="sky" aria-label="proje grafı: her yıldız bir not"></canvas>
|
||||
|
||||
<header class="hud">
|
||||
<div class="brand">
|
||||
<h1><span class="p">tuna@tunapro</span>:~/bahce $ <span style="color:var(--amber)">ls --graph</span></h1>
|
||||
<div class="sub">Gece bahçesi. Her yıldız bir proje-notu, çizgiler fikirler arası kök bağlantıları.
|
||||
Bir yıldıza tıkla; sürükleyip kurcalayabilirsin — bahçeler kurcalanmak içindir.</div>
|
||||
</div>
|
||||
<div class="legend">
|
||||
<div><span class="dot d1"></span>🌳 köklendi — çalışıyor, yaşıyor</div>
|
||||
<div><span class="dot d2"></span>🌿 büyüyor — düzenli commit alıyor</div>
|
||||
<div><span class="dot d3"></span>🌱 fide — yarım fikir, taze toprak</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div id="hint">bir yıldıza tıkla ✦</div>
|
||||
|
||||
<aside id="card" aria-live="polite">
|
||||
<button class="close" onclick="closeCard()">esc</button>
|
||||
<div class="stage" id="c-stage"></div>
|
||||
<h2 id="c-title"></h2>
|
||||
<div class="meta" id="c-meta"></div>
|
||||
<div class="body" id="c-body"></div>
|
||||
<div class="links" id="c-links"></div>
|
||||
<div class="also" id="c-also"></div>
|
||||
</aside>
|
||||
|
||||
<footer class="hud">
|
||||
<span class="seg g">[bahce]</span>
|
||||
<span class="seg">0:graf*</span>
|
||||
<span class="seg dim">1:hakkımda</span>
|
||||
<span class="grow"></span>
|
||||
<a href="https://github.com/tunapro1234">github</a>
|
||||
<a href="https://git.tunapro.xyz">gitea</a>
|
||||
<a href="https://probotstudio.com">probot</a>
|
||||
<a href="/yillik/">yıllık→</a>
|
||||
<span class="seg dim" id="clock"></span>
|
||||
<span class="seg dim">tunapro.xyz</span>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
const NOTES = {
|
||||
ben: {
|
||||
title:"tuna gül", stage:"çekirdek", tier:0, meta:"bahçıvan · mühendislik öğrencisi · TR",
|
||||
body:`<p>Robotik, AI agent'lar, sistem mimarisi. İlkem: bir sistem <b>kurulabiliyorsa</b>, kurulacak — o yüzden izleyen değil kuran taraftayım.</p>
|
||||
<p class="cmt"># bu graf benim kafamın içi; düğümler proje, kenarlar kök.</p>
|
||||
<p>Her yerde <b>@tunapro1234</b>. Bu site dahil her şey kendi demirimde dönüyor.</p>`,
|
||||
links:[["github.com/tunapro1234","https://github.com/tunapro1234"],["git.tunapro.xyz","https://git.tunapro.xyz"]],
|
||||
edges:["blueprint","probot","homelab","frc","sims"]
|
||||
},
|
||||
blueprint: {
|
||||
title:"blueprint (bp)", stage:"🌳 köklendi", tier:1, meta:"Go · tmux · dikim 2025, hâlâ sulanıyor",
|
||||
body:`<p>tmux içinde bir AI agent <b>filosunu</b> yöneten orkestrasyon aracı. Paketler <code>BLUEPRINT.yaml</code> ile tanımlanır; snapshot tabanlı versiyonlama, symlink'le sabitlenen bağımlılıklar.</p>
|
||||
<p class="cmt"># agent'lar tmux pane'lerinde yaşar. ben sadece bahçıvanım.</p>`,
|
||||
links:[["bp.tunapro.xyz","https://bp.tunapro.xyz"],["github.com/tunapro1234/blueprint","https://github.com/tunapro1234/blueprint"]],
|
||||
edges:["replicant","outpost","homelab"]
|
||||
},
|
||||
outpost: {
|
||||
title:"outpost", stage:"🌿 büyüyor", tier:2, meta:"JavaScript · son push: bugün",
|
||||
body:`<p>Graf-merkezli outreach aracı: insanlar, bağlantılar ve konuşmalar düğüm olarak tutulur. (Evet, bu sayfayla aynı fikir — grafları seviyorum.)</p>
|
||||
<p>Canlı hali kilitli sera 🔒 — içinde gerçek insanlar var.</p>`,
|
||||
links:[["github.com/tunapro1234/outpost","https://github.com/tunapro1234/outpost"],["outpost.tunapro.xyz (🔒)","https://outpost.tunapro.xyz"]],
|
||||
edges:["metron"]
|
||||
},
|
||||
probot: {
|
||||
title:"probot studio", stage:"🌳 köklendi", tier:1, meta:"C++ / Arduino · MIT · 9★",
|
||||
body:`<p><i>«Bir kit, sonsuz robot.»</i> Arduino tabanlı robot yarışmaları için kütüphane + kit ekosistemi. Çekirdeği açık kaynak: <code>probot-core</code>, sahada denenmiş embedded control middleware.</p>`,
|
||||
links:[["probotstudio.com","https://probotstudio.com"],["github.com/probot-studio/probot-core","https://github.com/probot-studio/probot-core"]],
|
||||
edges:["frc"]
|
||||
},
|
||||
homelab: {
|
||||
title:"homelab: *.tunapro.xyz", stage:"🌿 büyüyor", tier:2, meta:"7/24 vızıldıyor · self-host her şey",
|
||||
body:`<p>Kod <a href="https://git.tunapro.xyz">Gitea</a>'da, medya kendi video sunucumda, Minecraft paneli <code>mcdash</code>'te, mail bile burada. Okuduğun sayfa da bu makinelerde.</p>
|
||||
<p class="cmt"># bulut diye bir şey yok, başkasının bilgisayarı var.</p>`,
|
||||
links:[["git.tunapro.xyz","https://git.tunapro.xyz"],["video.tunapro.xyz","https://video.tunapro.xyz"],["mcdash.tunapro.xyz","https://mcdash.tunapro.xyz"]],
|
||||
edges:["blueprint"]
|
||||
},
|
||||
replicant: {
|
||||
title:"replicant", stage:"🌱 fide", tier:3, meta:"Python · dikim may 2026",
|
||||
body:`<p>Agent'ların kendini ve iş arkadaşlarını kopyalayıp çoğaltması üzerine deneyler. Adı tesadüf değil. Ne olacağını ben de bilmiyorum; fidelerin güzelliği bu.</p>`,
|
||||
links:[["github.com/tunapro1234/replicant","https://github.com/tunapro1234/replicant"]],
|
||||
edges:["metron","sims"]
|
||||
},
|
||||
metron: {
|
||||
title:"metron", stage:"🌱 fide", tier:3, meta:"Python · 1★",
|
||||
body:`<p>Ölçmediğin şeyi yönetemezsin: agent'lar ve sistemler için metrik/ölçüm katmanı. replicant koşar, metron sayar.</p>`,
|
||||
links:[["github.com/tunapro1234/metron","https://github.com/tunapro1234/metron"]],
|
||||
edges:[]
|
||||
},
|
||||
sims: {
|
||||
title:"llm toplum simülasyonları", stage:"🌱 fide", tier:3, meta:"okuma listesi + deneyler",
|
||||
body:`<p>AI agent'larla toplum kurma merakı: <b>hallucinating-splines</b>'ta agent'lar headless SimCity'de şehir kuruyor; <b>EDSL</b> ile AI destekli anket/deney tasarımı.</p>`,
|
||||
links:[["awesome-llm-social-simulation","https://github.com/tunapro1234/awesome-llm-social-simulation"],["hallucinating-splines","https://github.com/tunapro1234/hallucinating-splines"]],
|
||||
edges:["replicant"]
|
||||
},
|
||||
frc: {
|
||||
title:"frc 7839 & 9029 → nfr", stage:"🌳 kökler", tier:1, meta:"robotiğe giriş kapım",
|
||||
body:`<p>Robotikle FRC sahasında tanıştım (7839 ve 9029). O sahadan bir dönem donanım işine de girdik; benim payıma düşen kökler bugün Probot Studio'da yaşıyor.</p>`,
|
||||
links:[["github.com/team-nf","https://github.com/team-nf"]],
|
||||
edges:["probot"]
|
||||
},
|
||||
elevator: {
|
||||
title:"elevator_optimization", stage:"🌱 fide", tier:3, meta:"Rust · 1★",
|
||||
body:`<p>Asansör çizelgelemesi ne kadar optimize edilebilir? Rust'la yazılmış küçük bir saplantı. Beklerken düşünülen her şey proje olabilir.</p>`,
|
||||
links:[["github.com/tunapro1234/elevator_optimization","https://github.com/tunapro1234/elevator_optimization"]],
|
||||
edges:["ben"]
|
||||
},
|
||||
canbitirici: {
|
||||
title:"can neden iş bitirici değil?", stage:"🍄 mantar", tier:4, meta:"hakemli değil ama kesin doğru",
|
||||
body:`<p>Bahçenin gölgesinde kendiliğinden biten tür: titiz metodolojiyle(!) hazırlanmış araştırma raporu. Bilim kişisel, kindar ve grafikli olmalı.</p>`,
|
||||
links:[["canbitirici.tunapro.xyz","https://canbitirici.tunapro.xyz"]],
|
||||
edges:["ben"]
|
||||
},
|
||||
};
|
||||
|
||||
const COLORS = {0:"#ffffff",1:"#5dd39e",2:"#e8b45a",3:"#7aa2f7",4:"#e06c75"};
|
||||
const RADII = {0:9,1:7,2:6,3:5,4:5};
|
||||
|
||||
const cv = document.getElementById("sky"), ctx = cv.getContext("2d");
|
||||
let W,H,DPR; const nodes=[], edges=[];
|
||||
const reduced = matchMedia("(prefers-reduced-motion: reduce)").matches;
|
||||
|
||||
function resize(){DPR=devicePixelRatio||1;W=innerWidth;H=innerHeight;cv.width=W*DPR;cv.height=H*DPR;cv.style.width=W+"px";cv.style.height=H+"px";ctx.setTransform(DPR,0,0,DPR,0,0);}
|
||||
resize(); addEventListener("resize",resize);
|
||||
|
||||
const ids = Object.keys(NOTES);
|
||||
ids.forEach((id,i)=>{
|
||||
const a = (i/ids.length)*Math.PI*2;
|
||||
const r = NOTES[id].tier===0?0:(120+NOTES[id].tier*60);
|
||||
nodes.push({id,x:W/2+Math.cos(a)*r+(Math.random()*40-20),y:H/2+Math.sin(a)*r*0.7+(Math.random()*40-20),vx:0,vy:0,fixed:false});
|
||||
});
|
||||
ids.forEach(id=>NOTES[id].edges.forEach(t=>{ if(NOTES[t]) edges.push([id,t]); }));
|
||||
const byId = id=>nodes.find(n=>n.id===id);
|
||||
|
||||
let selected=null, hover=null, drag=null, t=0;
|
||||
|
||||
function step(){
|
||||
// hafif force layout
|
||||
for(const n of nodes){
|
||||
if(n.fixed||n===drag) continue;
|
||||
let fx=0, fy=0;
|
||||
for(const m of nodes){ if(m===n) continue;
|
||||
const dx=n.x-m.x, dy=n.y-m.y, d2=dx*dx+dy*dy+0.01, d=Math.sqrt(d2);
|
||||
const rep=Math.min(9000/d2,3); fx+=dx/d*rep; fy+=dy/d*rep;
|
||||
}
|
||||
for(const [a,b] of edges){
|
||||
let o=null; if(a===n.id) o=byId(b); else if(b===n.id) o=byId(a);
|
||||
if(!o) continue;
|
||||
const dx=o.x-n.x, dy=o.y-n.y, d=Math.hypot(dx,dy)||1, pull=(d-140)*0.004;
|
||||
fx+=dx/d*pull*d*0.02; fy+=dy/d*pull*d*0.02;
|
||||
}
|
||||
fx+=(W/2-n.x)*0.0012; fy+=(H/2-n.y)*0.0012;
|
||||
n.vx=(n.vx+fx)*0.86; n.vy=(n.vy+fy)*0.86;
|
||||
n.x+=n.vx; n.y+=n.vy;
|
||||
n.x=Math.max(50,Math.min(W-50,n.x)); n.y=Math.max(90,Math.min(H-70,n.y));
|
||||
}
|
||||
}
|
||||
|
||||
function draw(){
|
||||
t+=reduced?0:0.008;
|
||||
ctx.clearRect(0,0,W,H);
|
||||
// arka plan yıldız tozu
|
||||
ctx.fillStyle="rgba(120,150,130,.25)";
|
||||
for(let i=0;i<70;i++){
|
||||
const x=(i*137.5)%W, y=(i*89.7)%H;
|
||||
const tw=reduced?0.5:(Math.sin(t*2+i)*0.5+0.5);
|
||||
ctx.globalAlpha=0.08+tw*0.12; ctx.fillRect(x,y,1.5,1.5);
|
||||
}
|
||||
ctx.globalAlpha=1;
|
||||
// kenarlar
|
||||
for(const [a,b] of edges){
|
||||
const n1=byId(a), n2=byId(b);
|
||||
const active = selected && (a===selected||b===selected);
|
||||
ctx.strokeStyle = active? "rgba(93,211,158,.65)":"rgba(93,211,158,.14)";
|
||||
ctx.lineWidth = active?1.6:1;
|
||||
ctx.beginPath(); ctx.moveTo(n1.x,n1.y); ctx.lineTo(n2.x,n2.y); ctx.stroke();
|
||||
}
|
||||
// düğümler
|
||||
for(const n of nodes){
|
||||
const note=NOTES[n.id], r=RADII[note.tier], c=COLORS[note.tier];
|
||||
const isSel=n.id===selected, isHov=n.id===hover;
|
||||
const pulse = reduced?0:Math.sin(t*3+n.x)*1.2;
|
||||
ctx.beginPath(); ctx.arc(n.x,n.y,r+(isSel?4:isHov?2:0)+ (note.tier===2?pulse*0.5:0),0,7);
|
||||
ctx.fillStyle=c; ctx.shadowColor=c; ctx.shadowBlur=isSel||isHov?22:10; ctx.fill(); ctx.shadowBlur=0;
|
||||
ctx.fillStyle = isSel||isHov ? "#e9f5ec" : "rgba(201,214,204,.75)";
|
||||
ctx.font="12.5px ui-monospace,Menlo,monospace"; ctx.textAlign="center";
|
||||
ctx.fillText(note.title, n.x, n.y+r+18);
|
||||
}
|
||||
step();
|
||||
requestAnimationFrame(draw);
|
||||
}
|
||||
requestAnimationFrame(draw);
|
||||
|
||||
function pick(x,y){
|
||||
for(const n of nodes){ if(Math.hypot(n.x-x,n.y-y)<22) return n; }
|
||||
return null;
|
||||
}
|
||||
cv.addEventListener("pointermove",e=>{
|
||||
if(drag){drag.x=e.clientX;drag.y=e.clientY;drag.vx=drag.vy=0;return;}
|
||||
hover=pick(e.clientX,e.clientY)?.id||null;
|
||||
cv.style.cursor=hover?"pointer":"grab";
|
||||
});
|
||||
let downAt=null;
|
||||
cv.addEventListener("pointerdown",e=>{
|
||||
const n=pick(e.clientX,e.clientY);
|
||||
if(n){drag=n;cv.classList.add("dragging");downAt=[e.clientX,e.clientY];cv.setPointerCapture(e.pointerId);}
|
||||
});
|
||||
cv.addEventListener("pointerup",e=>{
|
||||
cv.classList.remove("dragging");
|
||||
if(drag&&downAt&&Math.hypot(e.clientX-downAt[0],e.clientY-downAt[1])<6) openCard(drag.id);
|
||||
drag=null;downAt=null;
|
||||
});
|
||||
|
||||
function openCard(id){
|
||||
const n=NOTES[id]; selected=id;
|
||||
document.getElementById("hint").classList.add("hide");
|
||||
document.getElementById("c-stage").textContent=n.stage;
|
||||
document.getElementById("c-title").textContent=n.title;
|
||||
document.getElementById("c-meta").textContent=n.meta;
|
||||
document.getElementById("c-body").innerHTML=n.body;
|
||||
document.getElementById("c-links").innerHTML=n.links.map(([t,u])=>`<a href="${u}" target="_blank" rel="noopener">${t}</a>`).join("");
|
||||
const also=n.edges.filter(e=>NOTES[e]);
|
||||
document.getElementById("c-also").innerHTML = also.length?
|
||||
"kökleri şuraya uzanıyor: "+also.map(e=>`<button onclick="openCard('${e}')">${NOTES[e].title}</button>`).join(""):"";
|
||||
document.getElementById("card").classList.add("open");
|
||||
}
|
||||
function closeCard(){document.getElementById("card").classList.remove("open");selected=null;}
|
||||
addEventListener("keydown",e=>{if(e.key==="Escape")closeCard();});
|
||||
|
||||
// tmux saati
|
||||
const clock=document.getElementById("clock");
|
||||
setInterval(()=>{const d=new Date();clock.textContent=d.toLocaleTimeString("tr-TR",{hour:"2-digit",minute:"2-digit"});},1000);
|
||||
// açılışta merkezi ipucu
|
||||
setTimeout(()=>{ if(!selected) openCard("ben"); }, 1400);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
417
v3/index.html
Normal file
417
v3/index.html
Normal file
@@ -0,0 +1,417 @@
|
||||
<!doctype html>
|
||||
<html lang="tr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>TUNAPRO.XYZ — fihrist</title>
|
||||
<meta name="description" content="Tuna Gül'ün dijital bahçesi, fihrist düzeni: robotik, AI agent'ları ve self-host edilen her şey. Her satır bir proje, her proje yarım — ve bundan gurur duyuyoruz.">
|
||||
<style>
|
||||
:root{
|
||||
--bg:#f4f1ea; --ink:#141412; --red:#d63c2f; --dim:#8a857a; --line:#141412;
|
||||
--serif:"Iowan Old Style",Palatino,Georgia,serif;
|
||||
--sans:-apple-system,"Inter","Helvetica Neue",Arial,sans-serif;
|
||||
--mono:ui-monospace,Menlo,Consolas,monospace;
|
||||
}
|
||||
*{box-sizing:border-box;margin:0;padding:0}
|
||||
::selection{background:var(--red);color:#fff}
|
||||
body{background:var(--bg);color:var(--ink);font-family:var(--sans);line-height:1.5}
|
||||
a{color:inherit}
|
||||
img{max-width:100%}
|
||||
.wrap{max-width:1180px;margin:0 auto;padding:0 22px}
|
||||
|
||||
/* masthead */
|
||||
.mast{border-bottom:3px solid var(--line);padding:26px 0 18px;display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:10px}
|
||||
.mast .logo{font-family:var(--mono);font-weight:700;font-size:15px;letter-spacing:.1em}
|
||||
.mast .logo span{color:var(--red)}
|
||||
.mast nav{font-family:var(--mono);font-size:12px;display:flex;gap:18px}
|
||||
.mast nav a{text-decoration:none;color:var(--dim)}
|
||||
.mast nav a:hover{color:var(--red)}
|
||||
.mast .date{font-family:var(--mono);font-size:12px;color:var(--dim)}
|
||||
|
||||
/* hero */
|
||||
.hero{padding:54px 0 44px;border-bottom:3px solid var(--line);display:grid;grid-template-columns:1.6fr 1fr;gap:40px;align-items:end}
|
||||
@media(max-width:860px){.hero{grid-template-columns:1fr}}
|
||||
.hero h1{font-family:var(--serif);font-weight:600;font-size:clamp(42px,8vw,92px);line-height:1.02;letter-spacing:-.02em}
|
||||
.hero h1 em{font-style:italic;color:var(--red)}
|
||||
.hero p{max-width:58ch;margin-top:22px;font-size:17px;color:#3a382f}
|
||||
.hero .rules{margin-top:18px;font-family:var(--mono);font-size:12.5px;color:var(--dim);display:flex;gap:20px;flex-wrap:wrap}
|
||||
.hero .rules b{color:var(--red);font-weight:700}
|
||||
.hero figure{position:relative}
|
||||
.hero figure svg{width:100%;height:auto;display:block}
|
||||
.hero figcaption{font-family:var(--mono);font-size:11px;color:var(--dim);margin-top:8px;text-align:right}
|
||||
|
||||
/* ticker */
|
||||
.ticker{border-bottom:3px solid var(--line);overflow:hidden;background:var(--ink);color:var(--bg)}
|
||||
.ticker .tape{display:flex;white-space:nowrap;animation:roll 28s linear infinite;width:max-content;padding:8px 0;font-family:var(--mono);font-size:12.5px}
|
||||
.ticker .tape span{padding:0 26px}
|
||||
.ticker .tape span::after{content:"✦";color:var(--red);margin-left:26px}
|
||||
@keyframes roll{to{transform:translateX(-50%)}}
|
||||
@media (prefers-reduced-motion: reduce){.ticker .tape{animation:none}}
|
||||
|
||||
/* bölüm başlıkları */
|
||||
.chapter{display:grid;grid-template-columns:1fr auto;gap:26px;align-items:end;
|
||||
padding:64px 0 18px;border-bottom:3px solid var(--line)}
|
||||
@media(max-width:640px){.chapter{grid-template-columns:1fr}.chapter svg{display:none}}
|
||||
.chapter .roman{font-family:var(--mono);font-size:12px;letter-spacing:.24em;text-transform:uppercase;color:var(--red)}
|
||||
.chapter h2{font-family:var(--serif);font-size:clamp(30px,5vw,54px);font-weight:600;letter-spacing:-.015em;margin-top:8px}
|
||||
.chapter .desc{font-size:14.5px;color:var(--dim);margin-top:8px;max-width:58ch}
|
||||
.chapter svg{height:92px;width:auto}
|
||||
|
||||
/* fihrist satırları */
|
||||
.row{border-bottom:1px solid #c9c3b4}
|
||||
.row summary{
|
||||
list-style:none;cursor:pointer;display:grid;
|
||||
grid-template-columns:56px 1fr auto auto;gap:18px;align-items:baseline;
|
||||
padding:20px 0;transition:padding .15s ease;
|
||||
}
|
||||
.row summary::-webkit-details-marker{display:none}
|
||||
.row summary:hover{padding-left:12px}
|
||||
.row .no{font-family:var(--mono);font-size:13px;color:var(--dim)}
|
||||
.row .name{font-family:var(--serif);font-size:clamp(22px,3.4vw,34px);font-weight:600;letter-spacing:-.01em}
|
||||
.row[open] .name, .row summary:hover .name{color:var(--red);font-style:italic}
|
||||
.row .tag{font-family:var(--mono);font-size:12px;color:var(--dim);text-align:right}
|
||||
.row .stage{font-size:16px}
|
||||
.row .inner{display:grid;grid-template-columns:56px 1.5fr 1fr;gap:18px 28px;padding:0 0 30px}
|
||||
.row .inner p{font-size:16px;color:#33312a;margin-bottom:10px;max-width:62ch}
|
||||
.row .inner p a{color:var(--red);text-decoration-thickness:1px;text-underline-offset:3px}
|
||||
.row .fig{grid-column:3}
|
||||
.row .fig img{width:100%;border:2px solid var(--line);filter:grayscale(1) contrast(1.08);
|
||||
transition:filter .25s ease;display:block;background:#fff}
|
||||
.row .fig:hover img{filter:grayscale(0)}
|
||||
.row .fig .cap{font-family:var(--mono);font-size:11px;color:var(--dim);margin-top:6px}
|
||||
.row .go{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}
|
||||
.row .go a{
|
||||
font-family:var(--mono);font-size:12.5px;text-decoration:none;
|
||||
border:1.5px solid var(--ink);padding:6px 12px;border-radius:999px;
|
||||
transition:background .12s,color .12s;
|
||||
}
|
||||
.row .go a:hover{background:var(--ink);color:var(--bg)}
|
||||
.row .go a.hot:hover{background:var(--red);border-color:var(--red)}
|
||||
@media(max-width:820px){
|
||||
.row .inner{grid-template-columns:56px 1fr}
|
||||
.row .fig{grid-column:2;max-width:420px}
|
||||
}
|
||||
@media(max-width:640px){
|
||||
.row summary{grid-template-columns:36px 1fr auto}
|
||||
.row .tag{display:none}
|
||||
.row .inner{grid-template-columns:1fr}
|
||||
.row .inner>.sp{display:none}
|
||||
.row .fig{grid-column:auto}
|
||||
}
|
||||
|
||||
/* bahçıvan */
|
||||
.duo{display:grid;grid-template-columns:auto 1.3fr 1fr;border-bottom:3px solid var(--line);border-top:3px solid var(--line);margin-top:70px}
|
||||
@media(max-width:860px){.duo{grid-template-columns:1fr}}
|
||||
.duo>div{padding:36px 26px}
|
||||
.duo>div:not(:last-child){border-right:3px solid var(--line)}
|
||||
@media(max-width:860px){.duo>div:not(:last-child){border-right:none;border-bottom:3px solid var(--line)}}
|
||||
.duo h3{font-family:var(--mono);font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--red);margin-bottom:14px}
|
||||
.duo p{font-size:15.5px;color:#33312a;margin-bottom:10px;max-width:52ch}
|
||||
.duo .big{font-family:var(--serif);font-size:23px;line-height:1.35;font-weight:500}
|
||||
.portrait{display:flex;flex-direction:column;gap:10px;align-items:center;justify-content:center}
|
||||
.portrait img{width:170px;height:170px;object-fit:cover;border:3px solid var(--line);
|
||||
filter:grayscale(1) contrast(1.1);transition:filter .25s ease}
|
||||
.portrait img:hover{filter:grayscale(0)}
|
||||
.portrait .cap{font-family:var(--mono);font-size:11px;color:var(--dim);text-align:center}
|
||||
.socials{list-style:none;font-family:var(--mono);font-size:14px}
|
||||
.socials li{padding:9px 0;border-bottom:1px dashed #c9c3b4;display:flex;justify-content:space-between;gap:10px}
|
||||
.socials li:last-child{border:none}
|
||||
.socials a{text-decoration:none}
|
||||
.socials a:hover{color:var(--red)}
|
||||
.socials .at{color:var(--dim);font-size:12.5px}
|
||||
|
||||
footer{padding:30px 0 70px;font-family:var(--mono);font-size:12.5px;color:var(--dim);display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px}
|
||||
footer a{color:var(--red);text-decoration:none}
|
||||
footer a:hover{text-decoration:underline}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
<div class="mast">
|
||||
<div class="logo">TUNAPRO<span>.</span>XYZ — DİJİTAL BAHÇE FİHRİSTİ</div>
|
||||
<nav>
|
||||
<a href="#robotik">I·robotik</a>
|
||||
<a href="#ai">II·ai</a>
|
||||
<a href="#sera">III·sera</a>
|
||||
<a href="#bahcivan">bahçıvan</a>
|
||||
</nav>
|
||||
<div class="date">cilt 1 · yaz 2026 · kendi sunucusunda basılmıştır</div>
|
||||
</div>
|
||||
|
||||
<section class="hero">
|
||||
<div>
|
||||
<h1>Yarım işler,<br><em>tam niyetler</em>.</h1>
|
||||
<p>Burası Tuna Gül'ün dijital bahçesinin fihristi: robotlar, AI agent'ları ve
|
||||
self-host edilen her şeyin kayıt defteri. Hiçbir madde "bitti" diye kapanmaz;
|
||||
bahçede öyle bir mevsim yok. Bir satıra tıkla, kökünü gör.</p>
|
||||
<div class="rules">
|
||||
<span><b>🌳</b> köklendi</span>
|
||||
<span><b>🌿</b> büyüyor</span>
|
||||
<span><b>🌱</b> fide</span>
|
||||
<span><b>🍄</b> kendiliğinden bitti</span>
|
||||
</div>
|
||||
</div>
|
||||
<figure>
|
||||
<!-- editoryal çizim: saksıda filizlenen devre -->
|
||||
<svg viewBox="0 0 320 260" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="saksıdan filizlenen devre çizimi">
|
||||
<g stroke="#141412" stroke-width="3" stroke-linecap="round">
|
||||
<path d="M100 200 h120 l-14 44 h-92 z"/>
|
||||
<path d="M160 200 v-70"/>
|
||||
<path d="M160 156 c-34 -6 -50 -30 -52 -56 26 2 48 18 52 44"/>
|
||||
<path d="M160 138 c34 -8 46 -32 46 -58 -28 4 -46 22 -46 46"/>
|
||||
</g>
|
||||
<g stroke="#d63c2f" stroke-width="2.5" stroke-linecap="round">
|
||||
<path d="M160 130 v-60 h44"/>
|
||||
<path d="M160 96 h-52 v-34"/>
|
||||
<circle cx="204" cy="70" r="6"/>
|
||||
<circle cx="108" cy="62" r="6"/>
|
||||
<path d="M160 70 v-40"/>
|
||||
<rect x="152" y="14" width="16" height="16"/>
|
||||
</g>
|
||||
<g fill="#141412" font-family="ui-monospace,Menlo,monospace" font-size="10">
|
||||
<text x="216" y="74">sinyal</text>
|
||||
<text x="60" y="56">kök</text>
|
||||
</g>
|
||||
</svg>
|
||||
<figcaption>şek. 1 — bahçenin çalışma prensibi</figcaption>
|
||||
</figure>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class="ticker" aria-hidden="true">
|
||||
<div class="tape">
|
||||
<span>bulut yok, başkasının bilgisayarı var</span><span>bir kit, sonsuz robot</span><span>agent'lar tmux'ta yaşar</span><span>ölçmediğini yönetemezsin</span><span>her yerde @tunapro1234</span>
|
||||
<span>bulut yok, başkasının bilgisayarı var</span><span>bir kit, sonsuz robot</span><span>agent'lar tmux'ta yaşar</span><span>ölçmediğini yönetemezsin</span><span>her yerde @tunapro1234</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="wrap">
|
||||
|
||||
<!-- ============ BÖLÜM I: ROBOTİK ============ -->
|
||||
<section class="chapter" id="robotik">
|
||||
<div>
|
||||
<div class="roman">Bölüm I</div>
|
||||
<h2>Robotik</h2>
|
||||
<div class="desc">Her şeyin başladığı yer: FRC sahası, lehim dumanı, son gece sürücü kodu.
|
||||
Buradaki maddeler ellerimle tuttuğum şeyler.</div>
|
||||
</div>
|
||||
<!-- çizim: diferansiyel sürüşlü robot -->
|
||||
<svg viewBox="0 0 220 110" fill="none" aria-hidden="true">
|
||||
<g stroke="#141412" stroke-width="3" stroke-linecap="round">
|
||||
<rect x="40" y="34" width="120" height="42" rx="6"/>
|
||||
<circle cx="66" cy="86" r="16"/><circle cx="134" cy="86" r="16"/>
|
||||
<path d="M160 50 l30 -22"/><circle cx="194" cy="24" r="5" stroke="#d63c2f"/>
|
||||
</g>
|
||||
<g stroke="#d63c2f" stroke-width="2.5"><path d="M56 34 v-14 h24"/><circle cx="86" cy="20" r="4"/></g>
|
||||
</svg>
|
||||
</section>
|
||||
|
||||
<details class="row" open>
|
||||
<summary><span class="no">I.1</span><span class="name">Probot Studio</span><span class="stage">🌳</span><span class="tag">c++ · arduino · mit · 9★</span></summary>
|
||||
<div class="inner"><div class="sp"></div><div>
|
||||
<p><em>«Bir kit, sonsuz robot.»</em> Arduino tabanlı robot yarışmaları için kütüphane ve kit
|
||||
ekosistemi. Çekirdeği açık kaynak: <code>probot-core</code>, sahada denenmiş embedded control
|
||||
middleware. FRC yıllarının toprağında yetişti (bkz. I.2) — yarış robotlarından yarışma kitlerine.</p>
|
||||
<div class="go">
|
||||
<a class="hot" href="https://probotstudio.com">probotstudio.com ↗</a>
|
||||
<a href="https://github.com/probot-studio/probot-core">github/probot-core ↗</a>
|
||||
</div>
|
||||
</div>
|
||||
<figure class="fig">
|
||||
<a href="https://github.com/probot-studio/probot-core"><img src="https://opengraph.githubassets.com/garden/probot-studio/probot-core" alt="probot-core repo kartı" loading="lazy"></a>
|
||||
<div class="cap">fig. I.1 — probot-core; renk için imleci tut</div>
|
||||
</figure></div>
|
||||
</details>
|
||||
|
||||
<details class="row">
|
||||
<summary><span class="no">I.2</span><span class="name">FRC 7839 & 9029</span><span class="stage">🌳</span><span class="tag">kökler · team-nf</span></summary>
|
||||
<div class="inner"><div class="sp"></div><div>
|
||||
<p>Lisede FRC 7839'daydım. Lise bitince Mali'yle NF'yi kurduk, FRC 9029. 2023'te NFR
|
||||
Products'ı kurduk, şirket devam ediyor. Geçen sene Zağanos'taydım, 2025 ve 2026'da da
|
||||
FIRST Championship'teydik. Altı haftada robot bitiyor çünkü bitmek zorunda, o refleks
|
||||
hâlâ bende.</p>
|
||||
<div class="go"><a href="https://github.com/team-nf">github/team-nf ↗</a></div>
|
||||
</div>
|
||||
<figure class="fig">
|
||||
<a href="https://github.com/team-nf"><img src="https://avatars.githubusercontent.com/team-nf?s=400" alt="team-nf logosu" loading="lazy"></a>
|
||||
<div class="cap">fig. I.2 — team-nf</div>
|
||||
</figure></div>
|
||||
</details>
|
||||
|
||||
<!-- ============ BÖLÜM II: AI & AGENT'LAR ============ -->
|
||||
<section class="chapter" id="ai">
|
||||
<div>
|
||||
<div class="roman">Bölüm II</div>
|
||||
<h2>AI & Agent'lar</h2>
|
||||
<div class="desc">Bahçenin en hızlı büyüyen tarhı: agent filoları, orkestrasyon,
|
||||
ölçüm ve toplum simülasyonları. Çoğu tmux'ta yaşar.</div>
|
||||
</div>
|
||||
<!-- çizim: düğüm grafı -->
|
||||
<svg viewBox="0 0 220 110" fill="none" aria-hidden="true">
|
||||
<g stroke="#141412" stroke-width="2.5">
|
||||
<path d="M40 80 L110 30 L180 76 M110 30 V90 M40 80 L110 90 L180 76"/>
|
||||
</g>
|
||||
<g fill="#f4f1ea" stroke="#d63c2f" stroke-width="3">
|
||||
<circle cx="40" cy="80" r="10"/><circle cx="110" cy="30" r="12"/>
|
||||
<circle cx="180" cy="76" r="10"/><circle cx="110" cy="90" r="8"/>
|
||||
</g>
|
||||
</svg>
|
||||
</section>
|
||||
|
||||
<details class="row" open>
|
||||
<summary><span class="no">II.1</span><span class="name">blueprint (bp)</span><span class="stage">🌳</span><span class="tag">go · tmux · orkestrasyon</span></summary>
|
||||
<div class="inner"><div class="sp"></div><div>
|
||||
<p>tmux içinde bir AI agent <em>filosunu</em> yöneten orkestrasyon aracı. Paketler
|
||||
<code>BLUEPRINT.yaml</code> ile tasarlanır; snapshot tabanlı versiyonlama, symlink'le
|
||||
sabitlenmiş bağımlılıklar. Bu bölümün en yaşlı ağacı — fidelerin çoğu onun gölgesinde çıktı.</p>
|
||||
<div class="go">
|
||||
<a class="hot" href="https://bp.tunapro.xyz">bp.tunapro.xyz ↗</a>
|
||||
<a href="https://github.com/tunapro1234/blueprint">github ↗</a>
|
||||
</div>
|
||||
</div>
|
||||
<figure class="fig">
|
||||
<a href="https://github.com/tunapro1234/blueprint"><img src="https://opengraph.githubassets.com/garden/tunapro1234/blueprint" alt="blueprint repo kartı" loading="lazy"></a>
|
||||
<div class="cap">fig. II.1 — blueprint</div>
|
||||
</figure></div>
|
||||
</details>
|
||||
|
||||
<details class="row">
|
||||
<summary><span class="no">II.2</span><span class="name">outpost</span><span class="stage">🌿</span><span class="tag">js · graf · son push: bugün</span></summary>
|
||||
<div class="inner"><div class="sp"></div><div>
|
||||
<p>Graf-merkezli outreach aracı: insanlar, bağlantılar ve konuşmalar birer düğüm.
|
||||
Canlı hali kilitli sera 🔒 — içinde gerçek insanlar var. Şu sıralar en sık sulanan madde.</p>
|
||||
<div class="go">
|
||||
<a href="https://github.com/tunapro1234/outpost">github ↗</a>
|
||||
<a href="https://outpost.tunapro.xyz">outpost.tunapro.xyz 🔒</a>
|
||||
</div>
|
||||
</div>
|
||||
<figure class="fig">
|
||||
<a href="https://github.com/tunapro1234/outpost"><img src="https://opengraph.githubassets.com/garden/tunapro1234/outpost" alt="outpost repo kartı" loading="lazy"></a>
|
||||
<div class="cap">fig. II.2 — outpost</div>
|
||||
</figure></div>
|
||||
</details>
|
||||
|
||||
<details class="row">
|
||||
<summary><span class="no">II.3</span><span class="name">replicant & metron</span><span class="stage">🌱</span><span class="tag">python · ikiz fideler</span></summary>
|
||||
<div class="inner"><div class="sp"></div><div>
|
||||
<p><strong>replicant:</strong> agent'ların kendini ve iş arkadaşlarını kopyalayıp çoğaltması
|
||||
üzerine deneyler. Adı tesadüf değil; ne olacağını ben de bilmiyorum — fidelerin güzelliği bu.</p>
|
||||
<p><strong>metron:</strong> ölçmediğin şeyi yönetemezsin. Agent'lar ve sistemler için
|
||||
metrik/ölçüm katmanı. replicant koşar, metron sayar.</p>
|
||||
<div class="go">
|
||||
<a href="https://github.com/tunapro1234/replicant">github/replicant ↗</a>
|
||||
<a href="https://github.com/tunapro1234/metron">github/metron ↗</a>
|
||||
</div>
|
||||
</div>
|
||||
<figure class="fig">
|
||||
<a href="https://github.com/tunapro1234/replicant"><img src="https://opengraph.githubassets.com/garden/tunapro1234/replicant" alt="replicant repo kartı" loading="lazy"></a>
|
||||
<div class="cap">fig. II.3 — replicant</div>
|
||||
</figure></div>
|
||||
</details>
|
||||
|
||||
<details class="row">
|
||||
<summary><span class="no">II.4</span><span class="name">LLM toplum simülasyonları</span><span class="stage">🌱</span><span class="tag">araştırma defteri</span></summary>
|
||||
<div class="inner"><div class="sp"></div><div>
|
||||
<p>AI agent'larla toplum kurma merakı: <a href="https://github.com/tunapro1234/hallucinating-splines">hallucinating-splines</a>'ta
|
||||
agent'lar headless SimCity'de şehir kuruyor; <a href="https://github.com/tunapro1234/edsl-test">EDSL</a> ile AI
|
||||
destekli anket/deney tasarımını kurcalıyorum. Okuma listesi de fihristte:
|
||||
<a href="https://github.com/tunapro1234/awesome-llm-social-simulation">awesome-llm-social-simulation</a>.</p>
|
||||
<div class="go"><a href="https://github.com/tunapro1234/awesome-llm-social-simulation">okuma listesi ↗</a></div>
|
||||
</div>
|
||||
<figure class="fig">
|
||||
<a href="https://github.com/tunapro1234/hallucinating-splines"><img src="https://opengraph.githubassets.com/garden/tunapro1234/hallucinating-splines" alt="hallucinating-splines repo kartı" loading="lazy"></a>
|
||||
<div class="cap">fig. II.4 — agent'lar şehir kurar</div>
|
||||
</figure></div>
|
||||
</details>
|
||||
|
||||
<!-- ============ BÖLÜM III: SERA ============ -->
|
||||
<section class="chapter" id="sera">
|
||||
<div>
|
||||
<div class="roman">Bölüm III</div>
|
||||
<h2>Sera & tuhaflıklar</h2>
|
||||
<div class="desc">Kategoriye sığmayanlar: kendi demirinde dönen altyapı, küçük saplantılar
|
||||
ve gölgede kendiliğinden biten türler.</div>
|
||||
</div>
|
||||
<!-- çizim: sera / sunucu rafı -->
|
||||
<svg viewBox="0 0 220 110" fill="none" aria-hidden="true">
|
||||
<g stroke="#141412" stroke-width="3" stroke-linecap="round">
|
||||
<path d="M40 96 V46 L86 20 L132 46 V96 z"/>
|
||||
<path d="M40 46 H132"/>
|
||||
<rect x="150" y="30" width="40" height="66" rx="4"/>
|
||||
</g>
|
||||
<g stroke="#d63c2f" stroke-width="2.5">
|
||||
<path d="M158 44 h24 M158 58 h24 M158 72 h24"/>
|
||||
<circle cx="86" cy="70" r="10"/><path d="M86 80 v16"/>
|
||||
</g>
|
||||
</svg>
|
||||
</section>
|
||||
|
||||
<details class="row" open>
|
||||
<summary><span class="no">III.1</span><span class="name">homelab</span><span class="stage">🌿</span><span class="tag">*.tunapro.xyz · 7/24</span></summary>
|
||||
<div class="inner"><div class="sp"></div><div>
|
||||
<p>Self-host etmediğim şey kalmasın: kod <a href="https://git.tunapro.xyz">Gitea</a>'da, medya kendi
|
||||
video sunucumda, Minecraft'ın paneli <code>mcdash</code>'te, mail bile burada. Bu fihrist de
|
||||
dahil — okuduğun sayfa benim demirimde dönüyor.</p>
|
||||
<div class="go">
|
||||
<a href="https://git.tunapro.xyz">git ↗</a>
|
||||
<a href="https://video.tunapro.xyz">video ↗</a>
|
||||
<a href="https://mcdash.tunapro.xyz">mcdash ↗</a>
|
||||
</div>
|
||||
</div>
|
||||
<figure class="fig">
|
||||
<a href="https://git.tunapro.xyz"><img src="https://git.tunapro.xyz/assets/img/logo.svg" alt="git.tunapro.xyz — Gitea" loading="lazy" style="padding:26px;background:#fff"></a>
|
||||
<div class="cap">fig. III.1 — kendi gitea'm</div>
|
||||
</figure></div>
|
||||
</details>
|
||||
|
||||
<details class="row">
|
||||
<summary><span class="no">III.2</span><span class="name">elevator_optimization</span><span class="stage">🌱</span><span class="tag">rust · 1★ · saplantı</span></summary>
|
||||
<div class="inner"><div class="sp"></div><div>
|
||||
<p>Asansör çizelgelemesi ne kadar optimize edilebilir? Rust'la yazılmış küçük bir saplantı.
|
||||
Beklerken düşünülen her şey proje olabilir.</p>
|
||||
<div class="go"><a href="https://github.com/tunapro1234/elevator_optimization">github ↗</a></div>
|
||||
</div>
|
||||
<figure class="fig">
|
||||
<a href="https://github.com/tunapro1234/elevator_optimization"><img src="https://opengraph.githubassets.com/garden/tunapro1234/elevator_optimization" alt="elevator_optimization repo kartı" loading="lazy"></a>
|
||||
<div class="cap">fig. III.2 — bekleme süresi ∇</div>
|
||||
</figure></div>
|
||||
</details>
|
||||
|
||||
<details class="row">
|
||||
<summary><span class="no">III.3</span><span class="name">Can neden iş bitirici değil?</span><span class="stage">🍄</span><span class="tag">hakemli değil, kesin doğru</span></summary>
|
||||
<div class="inner"><div class="sp"></div><div>
|
||||
<p>Bahçenin gölgesinde kendiliğinden biten tür: titiz metodolojiyle(!) hazırlanmış bir
|
||||
araştırma raporu. Bilim böyle olmalı — kişisel, kindar ve grafikli.</p>
|
||||
<div class="go"><a class="hot" href="https://canbitirici.tunapro.xyz">raporu oku ↗</a></div>
|
||||
</div></div>
|
||||
</details>
|
||||
|
||||
<!-- ============ BAHÇIVAN ============ -->
|
||||
<div class="duo" id="bahcivan">
|
||||
<div class="portrait">
|
||||
<img src="https://github.com/tunapro1234.png?size=400" alt="Tuna Gül" loading="lazy">
|
||||
<div class="cap">bahçıvan, doğal ortamında<br>renk için imleci tut</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Bahçıvan</h3>
|
||||
<p class="big">Tuna Gül — mühendislik öğrencisi. Robotik, AI agent'lar, sistem mimarisi.</p>
|
||||
<p style="margin-top:12px">Buradaki notların çoğu yarım, bilerek öyle. Sonra gelirsen büyümüş olur.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Patikalar</h3>
|
||||
<ul class="socials">
|
||||
<li><a href="https://github.com/tunapro1234">github</a><span class="at">@tunapro1234</span></li>
|
||||
<li><a href="https://git.tunapro.xyz">kendi gitea'm</a><span class="at">git.tunapro.xyz</span></li>
|
||||
<li><a href="https://probotstudio.com">probot studio</a><span class="at">probotstudio.com</span></li>
|
||||
<li><a href="https://stackoverflow.com/users/tunapro1234">neredeyse her yer</a><span class="at">@tunapro1234</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<span>© 2026 tuna gül — bahçe kendi sunucusunda büyür</span>
|
||||
<span>yıllıktaki QR'dan mı geldin? <a href="/yillik/">senin için ayrı sayfa var →</a></span>
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
403
v4/index.html
Normal file
403
v4/index.html
Normal file
@@ -0,0 +1,403 @@
|
||||
<!doctype html>
|
||||
<html lang="tr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>tunapro.xyz · defter</title>
|
||||
<meta name="description" content="tuna gül'ün dijital bahçesi. robotlar, agent'lar, eski projeler. gevşek bakılan bir bahçe.">
|
||||
<style>
|
||||
:root{
|
||||
--bg:#f4f1ea; --ink:#141412; --red:#d63c2f; --dim:#8a857a; --faint:#c9c3b4;
|
||||
--serif:"Iowan Old Style",Palatino,Georgia,serif;
|
||||
--mono:ui-monospace,Menlo,Consolas,monospace;
|
||||
--sans:-apple-system,"Inter","Helvetica Neue",Arial,sans-serif;
|
||||
}
|
||||
*{box-sizing:border-box;margin:0;padding:0}
|
||||
::selection{background:var(--red);color:#fff}
|
||||
html{scroll-behavior:smooth;scroll-padding-top:20px}
|
||||
body{background:var(--bg);color:var(--ink);font-family:var(--sans);line-height:1.55}
|
||||
a{color:inherit}
|
||||
img{max-width:100%}
|
||||
.layout{display:grid;grid-template-columns:280px 1fr;max-width:1240px;margin:0 auto;min-height:100vh}
|
||||
@media(max-width:900px){.layout{grid-template-columns:1fr}}
|
||||
|
||||
/* ---------- sidebar ---------- */
|
||||
aside{
|
||||
border-right:3px solid var(--ink);padding:30px 24px 60px;
|
||||
position:sticky;top:0;height:100vh;overflow-y:auto;
|
||||
font-family:var(--mono);font-size:13px;
|
||||
}
|
||||
@media(max-width:900px){aside{position:static;height:auto;border-right:none;border-bottom:3px solid var(--ink)}}
|
||||
aside .logo{font-weight:700;font-size:14px;letter-spacing:.08em;margin-bottom:4px}
|
||||
aside .logo span{color:var(--red)}
|
||||
aside .sub{color:var(--dim);font-size:11.5px;margin-bottom:26px}
|
||||
aside .cat{margin-bottom:22px}
|
||||
aside .cat h4{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--red);margin-bottom:8px;font-weight:600}
|
||||
aside ul{list-style:none}
|
||||
aside li{padding:3px 0}
|
||||
aside li a{text-decoration:none;color:var(--ink)}
|
||||
aside li a:hover{color:var(--red)}
|
||||
aside li .st{color:var(--dim);font-size:11px;margin-left:6px}
|
||||
aside .foot{margin-top:34px;padding-top:16px;border-top:1px dashed var(--faint);color:var(--dim);font-size:11.5px;line-height:1.8}
|
||||
aside .foot a{color:var(--ink);text-decoration:none}
|
||||
aside .foot a:hover{color:var(--red)}
|
||||
|
||||
/* ---------- içerik ---------- */
|
||||
main{padding:44px 48px 90px;max-width:820px}
|
||||
@media(max-width:640px){main{padding:30px 20px 70px}}
|
||||
.hero .intro{font-size:16.5px;color:#33312a;max-width:60ch}
|
||||
.hero .meta{margin-top:16px;font-family:var(--mono);font-size:12px;color:var(--dim)}
|
||||
.hero .meta b{color:var(--red);font-weight:600}
|
||||
|
||||
.chapter{margin-top:64px;padding-top:14px;border-top:3px solid var(--ink)}
|
||||
.chapter>.label{font-family:var(--mono);font-size:11.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--red)}
|
||||
.chapter>h2{font-family:var(--serif);font-size:clamp(26px,4vw,40px);font-weight:600;margin:6px 0 4px;letter-spacing:-.01em}
|
||||
.chapter>.desc{color:var(--dim);font-size:14px;max-width:58ch}
|
||||
|
||||
article{margin-top:38px;padding-top:22px;border-top:1px solid var(--faint)}
|
||||
article:target{background:linear-gradient(90deg,rgba(214,60,47,.06),transparent 70%);outline:none}
|
||||
article h3{font-family:var(--serif);font-size:clamp(21px,3vw,28px);font-weight:600;letter-spacing:-.008em}
|
||||
article h3 a{text-decoration:none}
|
||||
article h3 a:hover{color:var(--red);font-style:italic}
|
||||
article .meta{font-family:var(--mono);font-size:11.5px;color:var(--dim);margin:6px 0 14px;display:flex;gap:16px;flex-wrap:wrap}
|
||||
article .meta .st{color:var(--red)}
|
||||
article p{font-size:15.5px;color:#2e2c25;margin-bottom:11px;max-width:64ch}
|
||||
article p a{color:var(--red);text-decoration-thickness:1px;text-underline-offset:3px}
|
||||
article code{font-family:var(--mono);font-size:.88em;background:#eae5d8;padding:1px 5px;border-radius:3px}
|
||||
article .fig{margin:16px 0;max-width:440px}
|
||||
article .fig img{border:2px solid var(--ink);display:block;background:#fff;filter:grayscale(1) contrast(1.06);transition:filter .25s}
|
||||
article .fig:hover img{filter:grayscale(0)}
|
||||
article .fig .cap{font-family:var(--mono);font-size:10.5px;color:var(--dim);margin-top:5px}
|
||||
.go{display:flex;gap:9px;flex-wrap:wrap;margin-top:12px}
|
||||
.go a{font-family:var(--mono);font-size:12px;text-decoration:none;border:1.5px solid var(--ink);
|
||||
padding:5px 11px;border-radius:999px;transition:background .12s,color .12s}
|
||||
.go a:hover{background:var(--ink);color:var(--bg)}
|
||||
.go a.hot:hover{background:var(--red);border-color:var(--red)}
|
||||
.bkz{margin-top:12px;font-family:var(--mono);font-size:11.5px;color:var(--dim)}
|
||||
.bkz a{color:var(--ink);text-decoration:none;border-bottom:1px dashed var(--dim)}
|
||||
.bkz a:hover{color:var(--red);border-color:var(--red)}
|
||||
|
||||
.pathnote{margin-top:70px;border:2px solid var(--ink);padding:24px;font-size:15px;max-width:64ch}
|
||||
.pathnote h3{font-family:var(--mono);font-size:11.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--red);margin-bottom:10px}
|
||||
.pathnote p{color:#2e2c25}
|
||||
footer{margin-top:50px;font-family:var(--mono);font-size:12px;color:var(--dim)}
|
||||
footer a{color:var(--red);text-decoration:none}
|
||||
footer a:hover{text-decoration:underline}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="layout">
|
||||
|
||||
<aside>
|
||||
<div class="logo">TUNAPRO<span>.</span>XYZ</div>
|
||||
<div class="sub">defter · gevşek bakılan bahçe</div>
|
||||
|
||||
<div class="cat">
|
||||
<h4>ai & agent'lar</h4>
|
||||
<ul>
|
||||
<li><a href="#blueprint">blueprint (bp)</a><span class="st">canlı</span></li>
|
||||
<li><a href="#outpost">outpost</a><span class="st">büyüyor</span></li>
|
||||
<li><a href="#abm">llm ile toplum simülasyonu</a><span class="st">merak</span></li>
|
||||
<li><a href="#trasumanar">trasumanar</a><span class="st">şemsiye</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<h4>robotik</h4>
|
||||
<ul>
|
||||
<li><a href="#probot">probot studio</a><span class="st">satışta</span></li>
|
||||
<li><a href="#impact">impact</a><span class="st">canlı</span></li>
|
||||
<li><a href="#first">first yılları</a><span class="st">kökler</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<h4>makine dairesi</h4>
|
||||
<ul>
|
||||
<li><a href="#homelab">homelab</a><span class="st">7/24</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<h4>eski defter</h4>
|
||||
<ul>
|
||||
<li><a href="#elevator">elevator_optimization</a><span class="st">kazandık</span></li>
|
||||
<li><a href="#dbex">dbex</a><span class="st">2020</span></li>
|
||||
<li><a href="#megaboi">megaboi</a><span class="st">2020</span></li>
|
||||
<li><a href="#cdonem">c dönemi</a><span class="st">2021</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<h4>tuhaflıklar</h4>
|
||||
<ul>
|
||||
<li><a href="#canbitirici">can raporu</a><span class="st">🍄</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="foot">
|
||||
her yerde @tunapro1234<br>
|
||||
<a href="https://github.com/tunapro1234">github</a> ·
|
||||
<a href="https://git.tunapro.xyz">gitea</a> ·
|
||||
<a href="https://probotstudio.com">probot</a><br>
|
||||
<a href="/yillik/">yıllıktan gelenler →</a>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<main>
|
||||
<section class="hero">
|
||||
<p class="intro">yaptığım şeylerin kayıt defteri. bi kısmı hâlâ çalışıyor, bi kısmı arşivde
|
||||
duruyor. 11. sınıfta yazdığım readme'ler de dahil, silmiyorum, hepsi benim. blog değil bu,
|
||||
tarih sırası yok, soldan istediğin yere atla. yarım not görürsen bil ki bilerek yarım,
|
||||
sonra gelirsen büyümüş olur (umarım).</p>
|
||||
<div class="meta">durumlar: <b>canlı</b> çalışıyor · <b>büyüyor</b> commit alıyor · <b>arşiv</b> dokunmuyorum ama seviyorum</div>
|
||||
</section>
|
||||
|
||||
<!-- ================= AI ================= -->
|
||||
<section class="chapter" id="ai">
|
||||
<div class="label">bölüm 1</div>
|
||||
<h2>ai & agent'lar</h2>
|
||||
<div class="desc">sunucumda bir agent filosu yaşıyor. bunlar onları yönetmek için yazdığım
|
||||
ve onlar hakkında düşünmek için yazdığım şeyler.</div>
|
||||
</section>
|
||||
|
||||
<article id="blueprint">
|
||||
<h3><a href="https://bp.tunapro.xyz">blueprint (bp)</a></h3>
|
||||
<div class="meta"><span class="st">canlı</span><span>go</span><span>ekildi 2026</span><span>her gün elliyorum</span></div>
|
||||
<p>sunucudaki agent'ları yönetmek için kullandığım tool. tmux oturumları, message queue,
|
||||
usage policy, whatsapp client. hepsi tek go binary'sinde. <code>bp daemon</code> eski
|
||||
python/node job'larını süperviz ediyor, onları yeniden yazmadım çünkü çalışıyorlar ve
|
||||
çalışan şeye dokunulmaz.</p>
|
||||
<p><code>bp monitor</code> ile dashboard'u terminalden izliyorum. agent'lara izole branch
|
||||
lazım olunca worktree'leri de bp açıyor. şu an hayatımın işletim sistemi gibi bi şey.
|
||||
bu site bile onun baktığı makinede duruyor.</p>
|
||||
<div class="fig">
|
||||
<a href="https://github.com/tunapro1234/blueprint"><img src="https://opengraph.githubassets.com/garden/tunapro1234/blueprint" alt="blueprint reposu" loading="lazy"></a>
|
||||
<div class="cap">şek. 1.1 · bp. renk için imleci tut.</div>
|
||||
</div>
|
||||
<div class="go">
|
||||
<a class="hot" href="https://bp.tunapro.xyz">bp.tunapro.xyz ↗</a>
|
||||
<a href="https://github.com/tunapro1234/blueprint">github ↗</a>
|
||||
</div>
|
||||
<div class="bkz">bkz: <a href="#homelab">homelab</a>, <a href="#trasumanar">trasumanar</a></div>
|
||||
</article>
|
||||
|
||||
<article id="outpost">
|
||||
<h3><a href="https://github.com/tunapro1234/outpost">outpost</a></h3>
|
||||
<div class="meta"><span class="st">büyüyor</span><span>javascript</span><span>son push: bugün</span></div>
|
||||
<p>insanlarla iletişimi unutuyorum, o yüzden bunu yaptım. herkes obsidian uyumlu bir
|
||||
vault'ta birer <code>.md</code> dosyası. outpost o vault'un üstüne ilişki grafını çiziyor.
|
||||
kimle konuşmuşum, kimi unutmuşum, kim kimi tanıyor.</p>
|
||||
<p>gather tarafında araştırma agent'ları var, yeni insan buluyorlar ama ben onaylamadan
|
||||
vault'a hiçbir şey giremiyor. mail sadece okunuyor, gönderme yok. agent'lara o kadar da
|
||||
güvenmiyorum. canlı hali şifreli çünkü içinde gerçek insanlar var.</p>
|
||||
<div class="fig">
|
||||
<a href="https://github.com/tunapro1234/outpost"><img src="https://opengraph.githubassets.com/garden/tunapro1234/outpost" alt="outpost reposu" loading="lazy"></a>
|
||||
<div class="cap">şek. 1.2 · outpost</div>
|
||||
</div>
|
||||
<div class="go">
|
||||
<a href="https://github.com/tunapro1234/outpost">github ↗</a>
|
||||
<a href="https://outpost.tunapro.xyz">outpost.tunapro.xyz 🔒</a>
|
||||
</div>
|
||||
<div class="bkz">bkz: <a href="#blueprint">blueprint</a></div>
|
||||
</article>
|
||||
|
||||
<article id="abm">
|
||||
<h3>llm ile toplum simülasyonu</h3>
|
||||
<div class="meta"><span class="st">merak · uzun vadeli</span><span>python çoğunlukla</span></div>
|
||||
<p>abm (agent-based modeling) tarzı makro llm işlerine ilgim var: deney katılımcısının
|
||||
yerine kişilikli llm agent koyunca ne oluyor, bini bir araya gelince topluma benziyor mu.
|
||||
bu merak birkaç repoya dağıldı:</p>
|
||||
<p><a href="https://github.com/tunapro1234/replicant">replicant</a> otree deneylerine
|
||||
big five kişilikli llm agent'lar sokuyor. pypi'da <code>pyreplicant</code> diye duruyor.
|
||||
ilk replike ettiğim paper Ertan-Page-Putterman 2009, free rider cezalandırma deneyi.
|
||||
isim hem replikasyondan hem blade runner'dan geliyor, ikisi de kasıtlı.</p>
|
||||
<p><a href="https://github.com/tunapro1234/metron">metron</a> kendine "sociology for
|
||||
AI agents" diyor. ortalıkta yüz binlerce deploy edilmiş agent var ve kimse onları
|
||||
popülasyon olarak incelemiyor. metron bunu deniyor: kişilik testleri, davranış
|
||||
profilleri, kümeleme. ne tür zihinler seri üretiyoruz sorusu bence sorulmayı hak ediyor.</p>
|
||||
<p>omega iktisat simülasyonu tarafı, <a href="#trasumanar">trasumanar</a>'ın altında
|
||||
yaşıyor ve şu an aktif yeniden yazımda. bir de <a href="https://github.com/tunapro1234/hallucinating-splines">hallucinating-splines</a>
|
||||
fork'um var, agent'lar headless simcity'de şehir kuruyor. okuma listesi:
|
||||
<a href="https://github.com/tunapro1234/awesome-llm-social-simulation">awesome-llm-social-simulation</a>.</p>
|
||||
<div class="fig">
|
||||
<a href="https://github.com/tunapro1234/replicant"><img src="https://opengraph.githubassets.com/garden/tunapro1234/replicant" alt="replicant reposu" loading="lazy"></a>
|
||||
<div class="cap">şek. 1.3 · replicant, pypi'da gerçek bir paket</div>
|
||||
</div>
|
||||
<div class="go">
|
||||
<a href="https://github.com/tunapro1234/replicant">replicant ↗</a>
|
||||
<a href="https://github.com/tunapro1234/metron">metron ↗</a>
|
||||
<a href="https://github.com/tunapro1234/awesome-llm-social-simulation">okuma listesi ↗</a>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article id="trasumanar">
|
||||
<h3><a href="https://github.com/trasumanar-ai">trasumanar</a></h3>
|
||||
<div class="meta"><span class="st">şemsiye</span><span>eski ama duruyor</span></div>
|
||||
<p>ai işlerimi topladığım çatı. isim dante'den geliyor, insan ötesine geçmeyi
|
||||
kelimelerle anlatamazsın diyor adam. iddialı isim, biliyorum, o yüzden altında mütevazı
|
||||
şeyler tutuyorum: omega (iktisat simülasyonu), arşivde hive-five, bir de bp'nin
|
||||
install script'i oradan servis ediliyor.</p>
|
||||
<div class="go"><a href="https://github.com/trasumanar-ai">github/trasumanar-ai ↗</a></div>
|
||||
<div class="bkz">bkz: <a href="#abm">toplum simülasyonu</a>, <a href="#blueprint">blueprint</a></div>
|
||||
</article>
|
||||
|
||||
<!-- ================= ROBOTİK ================= -->
|
||||
<section class="chapter" id="robotik">
|
||||
<div class="label">bölüm 2</div>
|
||||
<h2>robotik</h2>
|
||||
<div class="desc">her şey buradan başladı. hâlâ da bitmedi: parça satıyorum,
|
||||
yarışma düzenliyorum.</div>
|
||||
</section>
|
||||
|
||||
<article id="probot">
|
||||
<h3><a href="https://probotstudio.com">probot studio</a></h3>
|
||||
<div class="meta"><span class="st">satışta</span><span>c++ / arduino</span><span>mit · 9★</span></div>
|
||||
<p>"bir kit, sonsuz robot." lise robot yarışmaları için kit ve kütüphane. hâlâ buradan
|
||||
parça satıyorum. çekirdek açık kaynak: <code>probot-core</code>, arduino tabanlı
|
||||
yarışmalarda sahada denenmiş embedded control middleware'i.</p>
|
||||
<p>fikir <a href="#first">first yıllarından</a> geliyor. altı haftada robot yapmayı
|
||||
öğrendikten sonra "bunu kit yapsak herkes yapar" dedim, yapıyoruz.</p>
|
||||
<div class="fig">
|
||||
<a href="https://github.com/probot-studio/probot-core"><img src="https://opengraph.githubassets.com/garden/probot-studio/probot-core" alt="probot-core reposu" loading="lazy"></a>
|
||||
<div class="cap">şek. 2.1 · probot-core</div>
|
||||
</div>
|
||||
<div class="go">
|
||||
<a class="hot" href="https://probotstudio.com">probotstudio.com ↗</a>
|
||||
<a href="https://github.com/probot-studio/probot-core">github ↗</a>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<article id="impact">
|
||||
<h3><a href="https://impact.tr">impact</a></h3>
|
||||
<div class="meta"><span class="st">canlı</span><span>impact.tr</span></div>
|
||||
<p>impact.tr ile robot yarışmaları düzenliyoruz. formatlar: hands-on challenge (iki gün
|
||||
durmadan robot üretme, esp32'yle), ideathon, bir de robo soccer (otonom robot futbolu,
|
||||
şehir şehir yayılıyor). nisan 2026'daki çemberlitaş bölgeselinde 16 takım ve 150'den
|
||||
fazla katılımcı vardı.</p>
|
||||
<p>yarışmaya katılan çocuk olmaktan yarışma düzenleyen adam olmaya geçiş garip bi his,
|
||||
tavsiye ederim. sitenin kodu da <a href="https://git.tunapro.xyz/tunapro/impact-site">kendi gitea'mda</a>.</p>
|
||||
<div class="go">
|
||||
<a class="hot" href="https://impact.tr">impact.tr ↗</a>
|
||||
<a href="https://git.tunapro.xyz/tunapro/impact-site">gitea/impact-site ↗</a>
|
||||
</div>
|
||||
<div class="bkz">bkz: <a href="#probot">probot studio</a>, <a href="#homelab">homelab</a></div>
|
||||
</article>
|
||||
|
||||
<article id="first">
|
||||
<h3>first yılları</h3>
|
||||
<div class="meta"><span class="st">kökler</span><span>7839 → 9029</span><span>championship 2025 & 2026</span></div>
|
||||
<p>lisede frc'deydim, 7839'da. lise bitince mali'yle nf'yi kurduk, 9029. 2023'te de
|
||||
nfr products'ı kurduk, şirket hâlâ dönüyor. geçen sene zağanos'taydım. 2025 ve 2026'da
|
||||
first championship'teydik, houston'a iki kere gitmiş olmak hâlâ hoşuma gidiyor.</p>
|
||||
<p>first'ün bana öğrettiği şey kod değil. teslim tarihi gerçek olunca nasıl çalışıldığını
|
||||
öğrendim. altı haftada robot bitiyor çünkü bitmek zorunda. o refleks hâlâ bende.</p>
|
||||
<div class="fig">
|
||||
<a href="https://github.com/team-nf"><img src="https://avatars.githubusercontent.com/team-nf?s=400" alt="team-nf" loading="lazy"></a>
|
||||
<div class="cap">şek. 2.2 · team-nf</div>
|
||||
</div>
|
||||
<div class="go">
|
||||
<a href="https://github.com/team-nf">github/team-nf ↗</a>
|
||||
<a href="https://github.com/tunapro1234/FRC7839">frc7839 arşivi ↗</a>
|
||||
</div>
|
||||
<div class="bkz">bkz: <a href="#probot">probot studio</a>, <a href="#impact">impact</a></div>
|
||||
</article>
|
||||
|
||||
<!-- ================= MAKİNE DAİRESİ ================= -->
|
||||
<section class="chapter" id="makine">
|
||||
<div class="label">bölüm 3</div>
|
||||
<h2>makine dairesi</h2>
|
||||
<div class="desc">bulut kullanmıyorum. her şey kendi demirimde ve bu bana huzur veriyor.</div>
|
||||
</section>
|
||||
|
||||
<article id="homelab">
|
||||
<h3>homelab: *.tunapro.xyz</h3>
|
||||
<div class="meta"><span class="st">7/24</span><span>self-host her şey</span></div>
|
||||
<p>kod <a href="https://git.tunapro.xyz">gitea</a>'da, medya kendi video sunucumda,
|
||||
minecraft sunucusunun paneli <code>mcdash</code>'te, mail bile burada. okuduğun sayfa da
|
||||
aynı makinelerde dönüyor ve makinelere <a href="#blueprint">bp</a> bakıyor.</p>
|
||||
<p>arada bir şeyler patlıyor tabii. gece 2'de mail sunucusu debug'lamak kimseye
|
||||
tavsiye edeceğim bi hobi değil ama kendi verine sahip olmanın bedeli bu, ödüyorum.</p>
|
||||
<div class="go">
|
||||
<a href="https://git.tunapro.xyz">git ↗</a>
|
||||
<a href="https://video.tunapro.xyz">video ↗</a>
|
||||
<a href="https://mcdash.tunapro.xyz">mcdash ↗</a>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<!-- ================= ESKİ DEFTER ================= -->
|
||||
<section class="chapter" id="eski">
|
||||
<div class="label">bölüm 4</div>
|
||||
<h2>eski defter</h2>
|
||||
<div class="desc">github arkeolojisi, 2020-2024. hepsi arşivde duruyor, hepsini
|
||||
seviyorum.</div>
|
||||
</section>
|
||||
|
||||
<article id="elevator">
|
||||
<h3><a href="https://github.com/tunapro1234/elevator_optimization">elevator_optimization</a></h3>
|
||||
<div class="meta"><span class="st">kazandık</span><span>rust</span><span>2024</span></div>
|
||||
<p>boğaziçi'nin ai yarışması için yazdık ve kazandık. asansör çizelgeleme problemi,
|
||||
rust'la. repo o günkü haliyle duruyor, dokunmuyorum. kazanan koda dokunulmaz.</p>
|
||||
<div class="go"><a href="https://github.com/tunapro1234/elevator_optimization">github ↗</a></div>
|
||||
</article>
|
||||
|
||||
<article id="dbex">
|
||||
<h3><a href="https://github.com/tunapro1234/DBEX">dbex</a></h3>
|
||||
<div class="meta"><span class="st">arşiv</span><span>python</span><span>2020 · 11. sınıf</span></div>
|
||||
<p>python'un json kütüphanesini generator olarak yeniden yazmışım. readme'de aynen şu
|
||||
cümle var: "json kütüphanesine yetişebilmem için eklemem gereken çok fazla özellik var
|
||||
ama maalesef ben 11. sınıfım." kod yorumları da öyle: "çalışır herhalde / umarım."
|
||||
haklıymışım, çalışıyormuş.</p>
|
||||
<div class="go"><a href="https://github.com/tunapro1234/DBEX">github ↗</a></div>
|
||||
</article>
|
||||
|
||||
<article id="megaboi">
|
||||
<h3><a href="https://github.com/tunapro1234/MEGABOI">megaboi</a></h3>
|
||||
<div class="meta"><span class="st">arşiv</span><span>c++ · arduino mega</span><span>2020</span></div>
|
||||
<p>arduino mega + lcd shield + 6 butondan el yapımı konsol. readme'den: "neden ekranın
|
||||
yediği serial0'ı kullandın diyebilirsiniz, cevap çok basit: bilmiyorum." lityum pil ve
|
||||
yükseltici devreyle taşınabilir de yapmışım, şemaları paylaşacağım demişim (sanmıyorum
|
||||
diye not düşmüşüm, haklı çıktım).</p>
|
||||
<div class="go"><a href="https://github.com/tunapro1234/MEGABOI">github ↗</a></div>
|
||||
</article>
|
||||
|
||||
<article id="cdonem">
|
||||
<h3>c dönemi: vector-h & cygnus</h3>
|
||||
<div class="meta"><span class="st">arşiv</span><span>c89 / c</span><span>2021</span></div>
|
||||
<p>c yazdığım dönem. <a href="https://github.com/tunapro1234/vector-h">vector-h</a>:
|
||||
c89'da basit bir vektör implementasyonu. <a href="https://github.com/tunapro1234/cygnus">cygnus</a>
|
||||
daha ilginç, embed cihazlar için ai kütüphanesi gibi bi şeydi. o ara nnfs okuyordum,
|
||||
matrix makroları oradan geliyor. kitap bitince düzenli bi şekilde baştan başlayacaktım.
|
||||
kitap bitti, başlamadım. olsun.</p>
|
||||
<div class="go">
|
||||
<a href="https://github.com/tunapro1234/vector-h">vector-h ↗</a>
|
||||
<a href="https://github.com/tunapro1234/cygnus">cygnus ↗</a>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
<!-- ================= TUHAFLIKLAR ================= -->
|
||||
<section class="chapter" id="tuhaf">
|
||||
<div class="label">bölüm 5</div>
|
||||
<h2>tuhaflıklar</h2>
|
||||
<div class="desc">kategorisi olmayan şeyler.</div>
|
||||
</section>
|
||||
|
||||
<article id="canbitirici">
|
||||
<h3><a href="https://canbitirici.tunapro.xyz">can neden iş bitirici değil?</a></h3>
|
||||
<div class="meta"><span class="st">🍄 hakemli değil</span><span>araştırma raporu</span></div>
|
||||
<p>arkadaş grubu içi bir şaka aşırı ciddiye alınırsa ne olur sorusunun cevabı: başlığı,
|
||||
metodolojisi ve grafikleri olan bir araştırma raporu olur. can'a sevgilerimle.</p>
|
||||
<div class="go"><a class="hot" href="https://canbitirici.tunapro.xyz">raporu oku ↗</a></div>
|
||||
</article>
|
||||
|
||||
<div class="pathnote">
|
||||
<h3>bana ulaşmak</h3>
|
||||
<p>neredeyse her platformda <strong>@tunapro1234</strong>'üm.
|
||||
<a href="https://github.com/tunapro1234" style="color:var(--red)">github</a> en garantisi;
|
||||
<a href="https://stackoverflow.com/users/tunapro1234" style="color:var(--red)">stack overflow</a>'da
|
||||
da aynı isim. kod görmek istersen <a href="https://git.tunapro.xyz" style="color:var(--red)">kendi gitea'm</a> da açık.</p>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
© 2026 tuna gül · yıllıktaki qr'dan geldiysen <a href="/yillik/">senin sayfan ayrı →</a>
|
||||
</footer>
|
||||
</main>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
309
v5/index.html
Normal file
309
v5/index.html
Normal file
@@ -0,0 +1,309 @@
|
||||
<!doctype html>
|
||||
<html lang="tr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>tunapro postası · kendi sunucusunda basılır</title>
|
||||
<meta name="description" content="tuna gül'ün dijital bahçesi, gazete baskısı. agent haberleri, robotik sayfası, arşivden ve küçük ilanlar.">
|
||||
<style>
|
||||
:root{
|
||||
--bg:#f4f1ea; --ink:#141412; --red:#c22f23; --dim:#8a857a; --faint:#c9c3b4;
|
||||
--serif:"Iowan Old Style",Palatino,Georgia,serif;
|
||||
--mono:ui-monospace,Menlo,Consolas,monospace;
|
||||
}
|
||||
*{box-sizing:border-box;margin:0;padding:0}
|
||||
::selection{background:var(--red);color:#fff}
|
||||
body{background:var(--bg);color:var(--ink);font-family:var(--serif);line-height:1.5}
|
||||
a{color:inherit}
|
||||
img{max-width:100%}
|
||||
.sheet{max-width:1180px;margin:0 auto;padding:0 22px 80px}
|
||||
|
||||
/* masthead */
|
||||
.mast{text-align:center;padding:30px 0 14px;border-bottom:4px double var(--ink)}
|
||||
.mast .over{font-family:var(--mono);font-size:11px;letter-spacing:.28em;text-transform:uppercase;color:var(--dim)}
|
||||
.mast h1{font-size:clamp(44px,9vw,96px);font-weight:700;letter-spacing:-.01em;line-height:1;margin:8px 0 10px}
|
||||
.mast h1 span{color:var(--red)}
|
||||
.mast .bar{display:flex;justify-content:space-between;font-family:var(--mono);font-size:11.5px;color:var(--dim);
|
||||
border-top:1.5px solid var(--ink);margin-top:8px;padding:7px 4px 0;flex-wrap:wrap;gap:6px}
|
||||
.mast .bar b{color:var(--ink);font-weight:600}
|
||||
|
||||
/* telgraf hattı */
|
||||
.wire{border-bottom:1.5px solid var(--ink);padding:7px 0;font-family:var(--mono);font-size:11.5px;
|
||||
color:var(--dim);white-space:nowrap;overflow:hidden}
|
||||
.wire .tape{display:inline-block;animation:wire 34s linear infinite;padding-left:0}
|
||||
.wire b{color:var(--red)}
|
||||
@keyframes wire{from{transform:translateX(0)}to{transform:translateX(-50%)}}
|
||||
@media(prefers-reduced-motion:reduce){.wire .tape{animation:none}}
|
||||
|
||||
/* grid */
|
||||
.front{display:grid;grid-template-columns:2.1fr 1.1fr;gap:0;border-bottom:3px solid var(--ink)}
|
||||
@media(max-width:860px){.front{grid-template-columns:1fr}}
|
||||
.lead{padding:26px 26px 30px;border-right:1.5px solid var(--ink)}
|
||||
@media(max-width:860px){.lead{border-right:none;border-bottom:1.5px solid var(--ink)}}
|
||||
.side{display:flex;flex-direction:column}
|
||||
|
||||
.kick{font-family:var(--mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--red)}
|
||||
h2.head{font-size:clamp(28px,4.6vw,52px);font-weight:700;line-height:1.06;letter-spacing:-.015em;margin:8px 0 6px}
|
||||
h3.head{font-size:clamp(20px,2.6vw,27px);font-weight:700;line-height:1.15;margin:6px 0 4px}
|
||||
.byline{font-family:var(--mono);font-size:11px;color:var(--dim);margin-bottom:12px}
|
||||
.cols{column-count:2;column-gap:26px;column-rule:1px solid var(--faint);font-size:15px;color:#2c2a24;text-align:justify;hyphens:auto}
|
||||
@media(max-width:640px){.cols{column-count:1}}
|
||||
.cols p, .body p{margin-bottom:10px}
|
||||
.body{font-size:14.5px;color:#2c2a24}
|
||||
p .r{color:var(--red);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}
|
||||
.figure{margin:14px 0;border:2px solid var(--ink);background:#fff}
|
||||
.figure img{display:block;filter:grayscale(1) contrast(1.05);transition:filter .25s;width:100%}
|
||||
.figure:hover img{filter:grayscale(0)}
|
||||
.figcap{font-family:var(--mono);font-size:10.5px;color:var(--dim);padding:6px 8px;border-top:1.5px solid var(--ink);background:var(--bg)}
|
||||
.box{padding:22px 24px;border-bottom:1.5px solid var(--ink)}
|
||||
.box:last-child{border-bottom:none}
|
||||
.links{margin-top:10px;font-family:var(--mono);font-size:11.5px;display:flex;gap:8px;flex-wrap:wrap}
|
||||
.links a{text-decoration:none;border:1.5px solid var(--ink);border-radius:999px;padding:4px 10px}
|
||||
.links a:hover{background:var(--ink);color:var(--bg)}
|
||||
|
||||
/* iç sayfalar */
|
||||
.section-head{display:flex;align-items:baseline;gap:14px;border-bottom:3px solid var(--ink);padding:34px 0 8px}
|
||||
.section-head .roman{font-family:var(--mono);font-size:11px;letter-spacing:.24em;color:var(--red);text-transform:uppercase}
|
||||
.section-head h2{font-size:clamp(24px,3.6vw,38px);font-weight:700;letter-spacing:-.012em}
|
||||
.section-head .fill{flex:1;border-bottom:1px solid var(--faint)}
|
||||
.trio{display:grid;grid-template-columns:1fr 1fr 1fr;border-bottom:3px solid var(--ink)}
|
||||
@media(max-width:860px){.trio{grid-template-columns:1fr}}
|
||||
.trio>.box{border-bottom:none;border-right:1.5px solid var(--ink)}
|
||||
.trio>.box:last-child{border-right:none}
|
||||
@media(max-width:860px){.trio>.box{border-right:none;border-bottom:1.5px solid var(--ink)}.trio>.box:last-child{border-bottom:none}}
|
||||
.duo{display:grid;grid-template-columns:1.4fr 1fr;border-bottom:3px solid var(--ink)}
|
||||
@media(max-width:860px){.duo{grid-template-columns:1fr}}
|
||||
.duo>.box{border-bottom:none;border-right:1.5px solid var(--ink)}
|
||||
.duo>.box:last-child{border-right:none}
|
||||
@media(max-width:860px){.duo>.box{border-right:none;border-bottom:1.5px solid var(--ink)}.duo>.box:last-child{border-bottom:none}}
|
||||
|
||||
/* ilanlar & arşiv */
|
||||
.classifieds{font-size:13.5px}
|
||||
.classifieds .ad{padding:10px 0;border-bottom:1px dashed var(--faint)}
|
||||
.classifieds .ad:last-child{border:none}
|
||||
.classifieds .ad b{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--red);display:block;margin-bottom:2px}
|
||||
.quote{border-left:3px solid var(--red);padding:6px 0 6px 14px;font-style:italic;font-size:15px;margin:10px 0;color:#2c2a24}
|
||||
.quote .who{display:block;font-style:normal;font-family:var(--mono);font-size:10.5px;color:var(--dim);margin-top:4px}
|
||||
|
||||
footer{padding-top:22px;font-family:var(--mono);font-size:11.5px;color:var(--dim);display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}
|
||||
footer a{color:var(--red);text-decoration:none}
|
||||
footer a:hover{text-decoration:underline}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="sheet">
|
||||
|
||||
<header class="mast">
|
||||
<div class="over">blog değildir · portfolyo hiç değildir · bahçedir</div>
|
||||
<h1>TUNAPRO<span>.</span>POSTASI</h1>
|
||||
<div class="bar">
|
||||
<span>cilt 1, sayı 1 · <b>yaz 2026</b></span>
|
||||
<span>sahibi ve tek yazarı: <b>tuna gül</b></span>
|
||||
<span>fiyatı: <b>ücretsiz</b> (zaten self-host)</span>
|
||||
<span>her yerde <b>@tunapro1234</b></span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="wire" aria-hidden="true">
|
||||
<span class="tape"><b>SON DAKİKA:</b> outpost'a bugün de push atıldı ··· replicant pypi'da: pip install pyreplicant ··· impact çemberlitaş bölgeseli 16 takımla tamamlandı ··· mail sunucusu bu hafta hiç patlamadı (nazar değmesin) ··· <b>SON DAKİKA:</b> outpost'a bugün de push atıldı ··· replicant pypi'da: pip install pyreplicant ··· impact çemberlitaş bölgeseli 16 takımla tamamlandı ··· mail sunucusu bu hafta hiç patlamadı (nazar değmesin) ··· </span>
|
||||
</div>
|
||||
|
||||
<!-- ============ ÖN SAYFA ============ -->
|
||||
<div class="front">
|
||||
<div class="lead">
|
||||
<div class="kick">manşet · ai servisi</div>
|
||||
<h2 class="head">Sunucudaki agent filosu tek binary'den yönetiliyor</h2>
|
||||
<div class="byline">bp.tunapro.xyz muhabirimizden</div>
|
||||
<div class="cols">
|
||||
<p><a class="r" href="https://bp.tunapro.xyz">blueprint (bp)</a>, muhabirimizin sunucusunda
|
||||
yaşayan agent'ları yönetmek için kullandığı araç. tmux oturumları, message queue, usage
|
||||
policy ve whatsapp client'ı tek go binary'sinde topluyor. <code style="font-family:var(--mono);font-size:.9em">bp daemon</code>
|
||||
eski python ve node job'larını süperviz ediyor. yazarımız bunları yeniden yazmadığını,
|
||||
çünkü çalıştıklarını ve çalışan şeye dokunulmadığını beyan etti.</p>
|
||||
<p>dashboard'un terminal hali <code style="font-family:var(--mono);font-size:.9em">bp monitor</code> ile
|
||||
geliyor. usage, cost, agents, projects ayrı ekranlar. agent'lara izole git branch'i
|
||||
gerektiğinde worktree'leri de bp açıyor, kirli worktree'yi silmeyi reddediyor.
|
||||
"hayatımın işletim sistemi gibi bi şey" diyor yazar, "okuduğunuz gazete bile onun
|
||||
baktığı makinede basılıyor."</p>
|
||||
</div>
|
||||
<div class="figure">
|
||||
<a href="https://github.com/tunapro1234/blueprint"><img src="https://opengraph.githubassets.com/garden/tunapro1234/blueprint" alt="blueprint reposu" loading="lazy"></a>
|
||||
<div class="figcap">bp'nin github kartı. fotoğraf renklidir, mürekkep masrafından siyah-beyaz basılmıştır (imleci tutunca renklenir).</div>
|
||||
</div>
|
||||
<div class="links">
|
||||
<a href="https://bp.tunapro.xyz">bp.tunapro.xyz ↗</a>
|
||||
<a href="https://github.com/tunapro1234/blueprint">github ↗</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="side">
|
||||
<div class="box">
|
||||
<div class="kick">bugünün ikinci haberi</div>
|
||||
<h3 class="head">İnsan ilişkileri artık graf: outpost yayında ama şifreli</h3>
|
||||
<div class="body">
|
||||
<p>herkes obsidian uyumlu bir vault'ta birer .md dosyası. <a class="r" href="https://github.com/tunapro1234/outpost">outpost</a>
|
||||
üstüne ilişki grafını çiziyor. araştırma agent'ları yeni insan öneriyor fakat vault'a
|
||||
giriş insan onayına tabi. mail yalnızca okunuyor, gönderim yetkisi agent'lara verilmedi.
|
||||
"o kadar da güvenmiyorum" dedi geliştirici.</p>
|
||||
</div>
|
||||
<div class="links"><a href="https://github.com/tunapro1234/outpost">github ↗</a></div>
|
||||
</div>
|
||||
<div class="box">
|
||||
<div class="kick">hava durumu yerine: bahçe durumu</div>
|
||||
<div class="body classifieds">
|
||||
<div class="ad"><b>canlı</b> bp, impact, probot studio, homelab</div>
|
||||
<div class="ad"><b>büyüyor</b> outpost (bugün de push yedi)</div>
|
||||
<div class="ad"><b>kuluçkada</b> replicant, metron, omega</div>
|
||||
<div class="ad"><b>arşivde ama sevgiyle</b> dbex, megaboi, cygnus, vector-h</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ============ AI SAYFASI ============ -->
|
||||
<div class="section-head"><span class="roman">sayfa 2</span><h2>Araştırma Eki</h2><span class="fill"></span></div>
|
||||
<div class="duo">
|
||||
<div class="box">
|
||||
<div class="kick">dosya konusu</div>
|
||||
<h3 class="head">Deneklerin yerini LLM'ler alırsa: yazarımızın ABM merakı</h3>
|
||||
<div class="byline">toplum simülasyonu masası</div>
|
||||
<div class="body">
|
||||
<p>abm (agent-based modeling) tarzı makro llm işleri bu gazetenin uzun vadeli saplantısı.
|
||||
soru şu: deney katılımcısının yerine kişilikli bir llm agent koyarsan insan davranışı
|
||||
çıkıyor mu, bini bir araya gelince topluma benziyor mu.</p>
|
||||
<p><a class="r" href="https://github.com/tunapro1234/replicant">replicant</a> bu sorunun deney tarafı:
|
||||
oTree deneylerine big five kişilikli agent'lar sokuyor (pypi'da <span style="font-family:var(--mono);font-size:.9em">pyreplicant</span>).
|
||||
ilk replike edilen paper Ertan-Page-Putterman 2009, free rider cezalandırma deneyi.
|
||||
isim hem replikasyondan hem blade runner'dan geliyor, ikisi de kasıtlı.</p>
|
||||
<p><a class="r" href="https://github.com/tunapro1234/metron">metron</a> ise sosyoloji tarafı:
|
||||
"sociology for AI agents." dünyada yüz binlerce deploy edilmiş agent var ve kimse
|
||||
bunları popülasyon olarak incelemiyor. kişilik testleri, davranış profilleri, kümeleme.
|
||||
ne tür zihinler seri üretiyoruz, birinin sorması lazımdı.</p>
|
||||
<p>iktisat simülasyonu tarafı omega, <a class="r" href="https://github.com/trasumanar-ai">trasumanar</a>
|
||||
çatısında aktif yeniden yazımda. trasumanar'ın adı dante'den: insan ötesine geçmeyi
|
||||
kelimelerle anlatamazsın. iddialı isim, altında mütevazı repolar.</p>
|
||||
</div>
|
||||
<div class="links">
|
||||
<a href="https://github.com/tunapro1234/replicant">replicant ↗</a>
|
||||
<a href="https://github.com/tunapro1234/metron">metron ↗</a>
|
||||
<a href="https://github.com/trasumanar-ai">trasumanar ↗</a>
|
||||
<a href="https://github.com/tunapro1234/awesome-llm-social-simulation">okuma listesi ↗</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box">
|
||||
<div class="kick">kısa kısa</div>
|
||||
<div class="body">
|
||||
<p><strong>simcity'de mesai.</strong> <a class="r" href="https://github.com/tunapro1234/hallucinating-splines">hallucinating-splines</a>
|
||||
fork'unda agent'lar headless micropolis motorunda şehir kuruyor. şehircilik anlayışları
|
||||
tartışmalı bulundu.</p>
|
||||
<p><strong>anket doldurtan adam.</strong> <a class="r" href="https://github.com/tunapro1234/edsl-test">edsl</a>
|
||||
ile ai destekli anket ve deney tasarımı kurcalanıyor, ilk izlenimler dosyada.</p>
|
||||
</div>
|
||||
<div class="figure">
|
||||
<a href="https://github.com/tunapro1234/replicant"><img src="https://opengraph.githubassets.com/garden/tunapro1234/replicant" alt="replicant reposu" loading="lazy"></a>
|
||||
<div class="figcap">replicant: pypi'da gerçek bir paket, gazetemiz gurur duyar.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ============ ROBOTİK SAYFASI ============ -->
|
||||
<div class="section-head"><span class="roman">sayfa 3</span><h2>Robotik & Saha</h2><span class="fill"></span></div>
|
||||
<div class="trio">
|
||||
<div class="box">
|
||||
<div class="kick">ticaret</div>
|
||||
<h3 class="head">"Bir kit, sonsuz robot": parça satışı sürüyor</h3>
|
||||
<div class="body">
|
||||
<p><a class="r" href="https://probotstudio.com">probot studio</a>, lise robot yarışmaları
|
||||
için kit ve kütüphane işi. çekirdek açık kaynak: probot-core (mit, 9★), arduino tabanlı
|
||||
yarışmalarda sahada denenmiş. yazarımız buradan parça satmaya devam ettiğini,
|
||||
slogandan hâlâ memnun olduğunu bildirdi.</p>
|
||||
</div>
|
||||
<div class="links">
|
||||
<a href="https://probotstudio.com">probotstudio.com ↗</a>
|
||||
<a href="https://github.com/probot-studio/probot-core">probot-core ↗</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box">
|
||||
<div class="kick">organizasyon</div>
|
||||
<h3 class="head">Yarışan çocuk yarışma düzenleyen adam oldu</h3>
|
||||
<div class="body">
|
||||
<p><a class="r" href="https://impact.tr">impact.tr</a> çatısında robot yarışmaları:
|
||||
hands-on challenge (iki gün durmadan esp32'yle robot üretme), ideathon ve şehir şehir
|
||||
yayılan robo soccer. nisan 2026 çemberlitaş bölgeselinde 16 takım, 150+ katılımcı.
|
||||
sitenin kodu yazarın <a class="r" href="https://git.tunapro.xyz/tunapro/impact-site">kendi gitea'sında</a>.</p>
|
||||
</div>
|
||||
<div class="links"><a href="https://impact.tr">impact.tr ↗</a></div>
|
||||
</div>
|
||||
<div class="box">
|
||||
<div class="kick">tarih servisi</div>
|
||||
<h3 class="head">Lisede 7839, mezun olunca kendi takımı: Houston'a iki sefer</h3>
|
||||
<div class="body">
|
||||
<p>yazarımız lisede frc 7839'da yarıştı. mezun olunca mali'yle nf'yi kurdular, frc
|
||||
9029. takımdan 2023'te nfr products çıktı, şirket devam ediyor. geçen sene zağanos'ta
|
||||
görev aldı. 2025 ve 2026'da first championship'e gidildi. "first'ün öğrettiği kod
|
||||
değil" diyor, "teslim tarihi gerçek olunca nasıl çalışıldığı. altı haftada robot
|
||||
bitiyor çünkü bitmek zorunda."</p>
|
||||
</div>
|
||||
<div class="links">
|
||||
<a href="https://github.com/team-nf">team-nf ↗</a>
|
||||
<a href="https://github.com/tunapro1234/FRC7839">frc7839 arşivi ↗</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ============ ARŞİV + İLANLAR ============ -->
|
||||
<div class="section-head"><span class="roman">sayfa 4</span><h2>Arşivden & Küçük İlanlar</h2><span class="fill"></span></div>
|
||||
<div class="duo">
|
||||
<div class="box">
|
||||
<div class="kick">github arkeolojisi · 2020-2024</div>
|
||||
<div class="body">
|
||||
<p><strong><a class="r" href="https://github.com/tunapro1234/DBEX">dbex</a> (2020).</strong>
|
||||
python'un json kütüphanesinin generator hali, 11. sınıf işi. readme arşivimizin en
|
||||
değerli belgesi:</p>
|
||||
<div class="quote">"json kütüphanesine yetişebilmem için eklemem gereken çok fazla
|
||||
özellik var ama maalesef ben 11. sınıfım."
|
||||
<span class="who"> dbex readme'si, 2020</span></div>
|
||||
<p><strong><a class="r" href="https://github.com/tunapro1234/MEGABOI">megaboi</a> (2020).</strong>
|
||||
arduino mega + lcd shield + 6 butondan el yapımı konsol.</p>
|
||||
<div class="quote">"neden ekranın yediği serial0'ı kullandın diyebilirsiniz, cevap çok
|
||||
basit: bilmiyorum."
|
||||
<span class="who"> megaboi readme'si, 2020</span></div>
|
||||
<p><strong>c dönemi (2021).</strong>
|
||||
<a class="r" href="https://github.com/tunapro1234/vector-h">vector-h</a> (c89'da vektör) ve
|
||||
<a class="r" href="https://github.com/tunapro1234/cygnus">cygnus</a>. cygnus embed
|
||||
cihazlar için ai kütüphanesi denemesiydi, yazar o sıra nnfs okuyordu ve "kitap bitince
|
||||
düzenli baştan başlayacağım" notunu düşmüştü. kitap bitmiş, başlanmamıştır.</p>
|
||||
<p><strong><a class="r" href="https://github.com/tunapro1234/elevator_optimization">elevator_optimization</a> (2024).</strong>
|
||||
boğaziçi'nin ai yarışması için rust'la yazıldı ve kazandı. repo o günkü haliyle korunuyor.
|
||||
kazanan koda dokunulmaz.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box">
|
||||
<div class="kick">küçük ilanlar</div>
|
||||
<div class="body classifieds">
|
||||
<div class="ad"><b>satılık</b> probot kitleri ve parçaları. yarışmada denenmiştir,
|
||||
garantisi sloganıdır: bir kit, sonsuz robot. <a class="r" href="https://probotstudio.com">probotstudio.com</a></div>
|
||||
<div class="ad"><b>kayıp</b> can'ın iş bitiriciliği. bulan olursa
|
||||
<a class="r" href="https://canbitirici.tunapro.xyz">rapora</a> baksın, orada da yok ama
|
||||
neden olmadığı grafiklerle açıklanmıştır.</div>
|
||||
<div class="ad"><b>eleman aranıyor</b> gece 2'de mail sunucusuna bakacak gönüllü.
|
||||
maaş yok, huzur var. başvuru: yazarın kendisi zaten, ilan formalite.</div>
|
||||
<div class="ad"><b>duyuru</b> bu gazete <a class="r" href="https://git.tunapro.xyz">git.tunapro.xyz</a>,
|
||||
video sunucusu, mcdash ve mail ile aynı makinelerde basılmaktadır. bulut kullanılmamıştır.</div>
|
||||
<div class="ad"><b>yıllık okurlarına</b> qr'dan gelenlere ayrı sayfa açılmıştır:
|
||||
<a class="r" href="/yillik/">tunapro.xyz/yillik</a></div>
|
||||
</div>
|
||||
<div class="figure" style="margin-top:16px">
|
||||
<a href="https://github.com/probot-studio/probot-core"><img src="https://opengraph.githubassets.com/garden/probot-studio/probot-core" alt="probot-core reposu" loading="lazy"></a>
|
||||
<div class="figcap">reklam: probot-core, açık kaynak. mit lisansı, 9 yıldız.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<span>© 2026 tunapro postası · tüm hakları yazarına aittir, zaten başka çalışanı yoktur</span>
|
||||
<span><a href="https://github.com/tunapro1234">github</a> · <a href="https://git.tunapro.xyz">gitea</a> · <a href="https://stackoverflow.com/users/tunapro1234">stack overflow</a></span>
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
344
v6/index.html
Normal file
344
v6/index.html
Normal file
@@ -0,0 +1,344 @@
|
||||
<!doctype html>
|
||||
<html lang="tr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>tunapro.xyz · katalog</title>
|
||||
<meta name="description" content="tuna gül'ün dijital bahçesi, arşiv katalogu baskısı: 2020'den bugüne fişlenmiş projeler, damgalı ve tarihli.">
|
||||
<style>
|
||||
:root{
|
||||
--bg:#f4f1ea; --card:#faf8f2; --ink:#141412; --red:#c22f23; --dim:#8a857a; --faint:#c9c3b4;
|
||||
--serif:"Iowan Old Style",Palatino,Georgia,serif;
|
||||
--mono:ui-monospace,Menlo,Consolas,monospace;
|
||||
--sans:-apple-system,"Inter","Helvetica Neue",Arial,sans-serif;
|
||||
}
|
||||
*{box-sizing:border-box;margin:0;padding:0}
|
||||
::selection{background:var(--red);color:#fff}
|
||||
body{background:var(--bg);color:var(--ink);font-family:var(--sans);line-height:1.5;
|
||||
background-image:repeating-linear-gradient(0deg,transparent,transparent 31px,rgba(20,20,18,.035) 31px,rgba(20,20,18,.035) 32px)}
|
||||
a{color:inherit}
|
||||
img{max-width:100%}
|
||||
.wrap{max-width:1180px;margin:0 auto;padding:0 22px 90px}
|
||||
|
||||
/* kapak */
|
||||
header{padding:44px 0 26px;border-bottom:3px solid var(--ink);display:grid;grid-template-columns:1fr auto;gap:24px;align-items:end}
|
||||
@media(max-width:760px){header{grid-template-columns:1fr}}
|
||||
.h-label{font-family:var(--mono);font-size:11.5px;letter-spacing:.26em;text-transform:uppercase;color:var(--red)}
|
||||
header .intro{margin-top:12px;max-width:60ch;font-size:16px;color:#33312a}
|
||||
.file-tag{font-family:var(--mono);font-size:11.5px;border:2px solid var(--ink);padding:14px 16px;line-height:2;background:var(--card);
|
||||
box-shadow:4px 4px 0 rgba(20,20,18,.15)}
|
||||
.file-tag b{color:var(--red);font-weight:600}
|
||||
|
||||
/* dönem başlığı */
|
||||
.era{display:flex;align-items:baseline;gap:16px;margin:52px 0 6px;border-bottom:2px solid var(--ink);padding-bottom:8px}
|
||||
.era .yr{font-family:var(--serif);font-size:clamp(28px,4.4vw,46px);font-weight:600;font-style:italic;color:var(--red)}
|
||||
.era .nm{font-family:var(--mono);font-size:11.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--dim)}
|
||||
.era .fill{flex:1;border-bottom:1px dashed var(--faint)}
|
||||
|
||||
/* kart ızgarası */
|
||||
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:26px;padding-top:22px}
|
||||
.kart{background:var(--card);border:2px solid var(--ink);position:relative;
|
||||
box-shadow:5px 5px 0 rgba(20,20,18,.12);transition:transform .15s ease, box-shadow .15s ease}
|
||||
.kart:hover{transform:translate(-2px,-2px);box-shadow:8px 8px 0 rgba(20,20,18,.16)}
|
||||
.kart.wide{grid-column:span 2}
|
||||
@media(max-width:760px){.kart.wide{grid-column:span 1}}
|
||||
.kart .head{border-bottom:2px solid var(--ink);padding:12px 16px;display:flex;justify-content:space-between;align-items:baseline;gap:10px}
|
||||
.kart .head .no{font-family:var(--mono);font-size:11px;color:var(--dim)}
|
||||
.kart .head .ad{font-family:var(--serif);font-size:22px;font-weight:600;letter-spacing:-.008em}
|
||||
.kart .head .ad a{text-decoration:none}
|
||||
.kart .head .ad a:hover{color:var(--red);font-style:italic}
|
||||
.kart .fields{font-family:var(--mono);font-size:11px;color:var(--dim);display:flex;gap:14px;flex-wrap:wrap;
|
||||
padding:9px 16px;border-bottom:1px dashed var(--faint)}
|
||||
.kart .fields b{color:var(--ink);font-weight:600}
|
||||
.kart .body{padding:14px 16px 16px;font-size:14.5px;color:#2e2c25}
|
||||
.kart .body p{margin-bottom:9px;max-width:64ch}
|
||||
.kart .body p a{color:var(--red);text-decoration-thickness:1px;text-underline-offset:3px}
|
||||
.kart .body code{font-family:var(--mono);font-size:.88em;background:#ece7da;padding:1px 5px;border-radius:3px}
|
||||
.kart .quote{border-left:3px solid var(--red);padding-left:12px;font-family:var(--serif);font-style:italic;font-size:14.5px;margin:10px 0;color:#33312a}
|
||||
.kart .quote .who{display:block;font-style:normal;font-family:var(--mono);font-size:10px;color:var(--dim);margin-top:3px}
|
||||
.kart .go{display:flex;gap:8px;flex-wrap:wrap;padding:0 16px 16px}
|
||||
.kart .go a{font-family:var(--mono);font-size:11.5px;text-decoration:none;border:1.5px solid var(--ink);
|
||||
padding:4px 10px;border-radius:999px}
|
||||
.kart .go a:hover{background:var(--ink);color:var(--bg)}
|
||||
.kart .fig{margin:4px 16px 14px;border:1.5px solid var(--ink);background:#fff;max-width:400px}
|
||||
.kart .fig img{display:block;filter:grayscale(1) contrast(1.06);transition:filter .25s;width:100%}
|
||||
.kart .fig:hover img{filter:grayscale(0)}
|
||||
.kart .figcap{font-family:var(--mono);font-size:10px;color:var(--dim);padding:5px 8px;border-top:1.5px solid var(--ink);background:var(--card)}
|
||||
|
||||
/* damgalar */
|
||||
.stamp{position:absolute;top:10px;right:12px;font-family:var(--mono);font-size:11px;font-weight:700;
|
||||
letter-spacing:.14em;text-transform:uppercase;color:var(--red);border:2.5px solid var(--red);
|
||||
border-radius:4px;padding:3px 9px;transform:rotate(6deg);opacity:.85;pointer-events:none;background:rgba(250,248,242,.7)}
|
||||
.stamp.ink{color:var(--ink);border-color:var(--ink);transform:rotate(-5deg)}
|
||||
.stamp.dim{color:var(--dim);border-color:var(--dim);transform:rotate(-7deg)}
|
||||
|
||||
/* alt not */
|
||||
.endnote{margin-top:64px;border:2px solid var(--ink);background:var(--card);padding:26px;
|
||||
box-shadow:5px 5px 0 rgba(20,20,18,.12);display:grid;grid-template-columns:1.5fr 1fr;gap:28px}
|
||||
@media(max-width:760px){.endnote{grid-template-columns:1fr}}
|
||||
.endnote h3{font-family:var(--mono);font-size:11.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--red);margin-bottom:10px}
|
||||
.endnote p{font-size:15px;color:#2e2c25;margin-bottom:8px;max-width:56ch}
|
||||
.endnote p a{color:var(--red)}
|
||||
.endnote ul{list-style:none;font-family:var(--mono);font-size:13px}
|
||||
.endnote li{padding:7px 0;border-bottom:1px dashed var(--faint);display:flex;justify-content:space-between}
|
||||
.endnote li:last-child{border:none}
|
||||
.endnote li a{text-decoration:none}
|
||||
.endnote li a:hover{color:var(--red)}
|
||||
.endnote li .at{color:var(--dim);font-size:11.5px}
|
||||
footer{margin-top:26px;font-family:var(--mono);font-size:11.5px;color:var(--dim);display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}
|
||||
footer a{color:var(--red);text-decoration:none}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
|
||||
<header>
|
||||
<div>
|
||||
<div class="h-label">tunapro.xyz · proje katalogu · dosya no: 1234</div>
|
||||
<p class="intro">2020'den bugüne yaptığım şeylerin katalogu. sildiğim proje yok. 11. sınıfta
|
||||
yazdığım readme ile bugün sunucumu yöneten tool aynı dolapta duruyor, ikisini de seviyorum.
|
||||
kartlar yıla göre dizili, damgalara güvenebilirsin.</p>
|
||||
</div>
|
||||
<div class="file-tag">
|
||||
ARŞİVLEYEN: <b>tuna gül</b><br>
|
||||
KONUM: <b>kendi sunucusu</b><br>
|
||||
HER YERDE: <b>@tunapro1234</b><br>
|
||||
SON GÜNCELLEME: <b>bugün</b>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- ============ 2026 ============ -->
|
||||
<div class="era"><span class="yr">2026 →</span><span class="nm">şu an masada olanlar</span><span class="fill"></span></div>
|
||||
<div class="grid">
|
||||
|
||||
<div class="kart wide">
|
||||
<span class="stamp">canlı</span>
|
||||
<div class="head"><span class="ad"><a href="https://bp.tunapro.xyz">blueprint (bp)</a></span><span class="no">FİŞ 26-01</span></div>
|
||||
<div class="fields"><span>DİL <b>go</b></span><span>TÜR <b>agent orkestrasyonu</b></span><span>BAKIM <b>her gün</b></span></div>
|
||||
<div class="body">
|
||||
<p>sunucudaki agent'ları yönetmek için kullandığım tool. tmux oturumları, message queue,
|
||||
usage policy, whatsapp client. hepsi tek binary'de. <code>bp daemon</code> eski
|
||||
python/node job'larını süperviz ediyor. onları yeniden yazmadım çünkü çalışıyorlar
|
||||
ve çalışan şeye dokunulmaz.</p>
|
||||
<p><code>bp monitor</code> dashboard'u terminale getiriyor, worktree'leri de bp açıyor.
|
||||
hayatımın işletim sistemi gibi bi şey. bu katalog bile onun baktığı makinede duruyor.</p>
|
||||
</div>
|
||||
<div class="fig">
|
||||
<a href="https://github.com/tunapro1234/blueprint"><img src="https://opengraph.githubassets.com/garden/tunapro1234/blueprint" alt="blueprint reposu" loading="lazy"></a>
|
||||
<div class="figcap">ek 26-01/a · renk için imleci tut</div>
|
||||
</div>
|
||||
<div class="go">
|
||||
<a href="https://bp.tunapro.xyz">bp.tunapro.xyz ↗</a>
|
||||
<a href="https://github.com/tunapro1234/blueprint">github ↗</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="kart">
|
||||
<span class="stamp ink">şifreli</span>
|
||||
<div class="head"><span class="ad"><a href="https://github.com/tunapro1234/outpost">outpost</a></span><span class="no">FİŞ 26-02</span></div>
|
||||
<div class="fields"><span>DİL <b>javascript</b></span><span>SON PUSH <b>bugün</b></span></div>
|
||||
<div class="body">
|
||||
<p>insanlarla iletişimi unutuyorum diye yaptım. herkes obsidian uyumlu vault'ta birer
|
||||
<code>.md</code> dosyası. outpost üstüne ilişki grafını çiziyor. gather agent'ları insan
|
||||
buluyor ama ben onaylamadan vault'a giremiyorlar, mail de sadece okunuyor. agent'lara
|
||||
o kadar da güvenmiyorum. canlı hali şifreli çünkü içinde gerçek insanlar var.</p>
|
||||
</div>
|
||||
<div class="go">
|
||||
<a href="https://github.com/tunapro1234/outpost">github ↗</a>
|
||||
<a href="https://outpost.tunapro.xyz">canlı 🔒</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="kart">
|
||||
<span class="stamp">kuluçkada</span>
|
||||
<div class="head"><span class="ad">abm / makro-llm rafı</span><span class="no">FİŞ 26-03</span></div>
|
||||
<div class="fields"><span>DİL <b>python</b></span><span>TÜR <b>uzun vadeli merak</b></span></div>
|
||||
<div class="body">
|
||||
<p>deneklerin yerine kişilikli llm agent koyunca ne oluyor? <a href="https://github.com/tunapro1234/replicant">replicant</a>
|
||||
otree deneylerine big five kişilikli agent'lar sokuyor (pypi'da <code>pyreplicant</code>,
|
||||
ilk replikasyon Ertan-Page-Putterman 2009). <a href="https://github.com/tunapro1234/metron">metron</a>
|
||||
"sociology for AI agents": deploy edilmiş agent popülasyonlarını sosyolog gibi inceleme.
|
||||
iktisat tarafı omega, <a href="https://github.com/trasumanar-ai">trasumanar</a> çatısında.
|
||||
isim dante'den, iddialı olduğunun farkındayım.</p>
|
||||
<p>yan raflar: <a href="https://github.com/tunapro1234/hallucinating-splines">hallucinating-splines</a>
|
||||
(agent'lar simcity kuruyor) ve <a href="https://github.com/tunapro1234/awesome-llm-social-simulation">okuma listem</a>.</p>
|
||||
</div>
|
||||
<div class="go">
|
||||
<a href="https://github.com/tunapro1234/replicant">replicant ↗</a>
|
||||
<a href="https://github.com/tunapro1234/metron">metron ↗</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- ============ 2024-25 ============ -->
|
||||
<div class="era"><span class="yr">2024-25</span><span class="nm">saha yılları</span><span class="fill"></span></div>
|
||||
<div class="grid">
|
||||
|
||||
<div class="kart">
|
||||
<span class="stamp">satışta</span>
|
||||
<div class="head"><span class="ad"><a href="https://probotstudio.com">probot studio</a></span><span class="no">FİŞ 24-01</span></div>
|
||||
<div class="fields"><span>DİL <b>c++ / arduino</b></span><span>LİSANS <b>mit</b></span><span>YILDIZ <b>9</b></span></div>
|
||||
<div class="body">
|
||||
<p>"bir kit, sonsuz robot." lise robot yarışmaları için kit ve kütüphane. hâlâ buradan
|
||||
parça satıyorum. çekirdek açık: <code>probot-core</code>, sahada denenmiş embedded
|
||||
control middleware. fikir first yıllarından (bkz. fiş 20-01).</p>
|
||||
</div>
|
||||
<div class="fig">
|
||||
<a href="https://github.com/probot-studio/probot-core"><img src="https://opengraph.githubassets.com/garden/probot-studio/probot-core" alt="probot-core reposu" loading="lazy"></a>
|
||||
<div class="figcap">ek 24-01/a · probot-core</div>
|
||||
</div>
|
||||
<div class="go">
|
||||
<a href="https://probotstudio.com">probotstudio.com ↗</a>
|
||||
<a href="https://github.com/probot-studio/probot-core">github ↗</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="kart">
|
||||
<span class="stamp">canlı</span>
|
||||
<div class="head"><span class="ad"><a href="https://impact.tr">impact</a></span><span class="no">FİŞ 25-01</span></div>
|
||||
<div class="fields"><span>TÜR <b>yarışma organizasyonu</b></span><span>ADRES <b>impact.tr</b></span></div>
|
||||
<div class="body">
|
||||
<p>impact.tr ile robot yarışmaları düzenliyoruz: hands-on challenge (iki gün durmadan
|
||||
esp32'yle robot), ideathon, robo soccer. nisan 2026 çemberlitaş bölgeselinde 16 takım,
|
||||
150+ katılımcı. yarışan çocuktan yarışma düzenleyen adama geçiş garip bi his, tavsiye
|
||||
ederim. site kodu <a href="https://git.tunapro.xyz/tunapro/impact-site">kendi gitea'mda</a>.</p>
|
||||
</div>
|
||||
<div class="go">
|
||||
<a href="https://impact.tr">impact.tr ↗</a>
|
||||
<a href="https://git.tunapro.xyz/tunapro/impact-site">gitea ↗</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="kart">
|
||||
<span class="stamp">kazandık</span>
|
||||
<div class="head"><span class="ad"><a href="https://github.com/tunapro1234/elevator_optimization">elevator_optimization</a></span><span class="no">FİŞ 24-02</span></div>
|
||||
<div class="fields"><span>DİL <b>rust</b></span><span>YIL <b>2024</b></span></div>
|
||||
<div class="body">
|
||||
<p>boğaziçi'nin ai yarışması için yazdık ve kazandık. asansör çizelgeleme problemi.
|
||||
repo o günkü haliyle duruyor, dokunmuyorum. kazanan koda dokunulmaz.</p>
|
||||
</div>
|
||||
<div class="go"><a href="https://github.com/tunapro1234/elevator_optimization">github ↗</a></div>
|
||||
</div>
|
||||
|
||||
<div class="kart">
|
||||
<span class="stamp">7/24</span>
|
||||
<div class="head"><span class="ad">homelab</span><span class="no">FİŞ 24-03</span></div>
|
||||
<div class="fields"><span>KAPSAM <b>*.tunapro.xyz</b></span><span>BULUT <b>yok</b></span></div>
|
||||
<div class="body">
|
||||
<p>kod <a href="https://git.tunapro.xyz">gitea</a>'da, medya kendi video sunucumda,
|
||||
minecraft paneli <code>mcdash</code>'te, mail bile burada. bu katalog da aynı
|
||||
makinelerde. gece 2'de mail sunucusu debug'lamak hobi sayılmaz ama kendi verine sahip
|
||||
olmanın bedeli bu, ödüyorum.</p>
|
||||
</div>
|
||||
<div class="go">
|
||||
<a href="https://git.tunapro.xyz">git ↗</a>
|
||||
<a href="https://video.tunapro.xyz">video ↗</a>
|
||||
<a href="https://mcdash.tunapro.xyz">mcdash ↗</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- ============ 2020-23 ============ -->
|
||||
<div class="era"><span class="yr">2020-23</span><span class="nm">arkeoloji katı, dokunma bak</span><span class="fill"></span></div>
|
||||
<div class="grid">
|
||||
|
||||
<div class="kart">
|
||||
<span class="stamp dim">arşiv</span>
|
||||
<div class="head"><span class="ad"><a href="https://github.com/tunapro1234/DBEX">dbex</a></span><span class="no">FİŞ 20-02</span></div>
|
||||
<div class="fields"><span>DİL <b>python</b></span><span>SINIF <b>11</b></span></div>
|
||||
<div class="body">
|
||||
<p>python'un json kütüphanesini generator olarak yeniden yazmışım. arşivin en değerli belgesi readme'sidir:</p>
|
||||
<div class="quote">"json kütüphanesine yetişebilmem için eklemem gereken çok fazla özellik
|
||||
var ama maalesef ben 11. sınıfım."<span class="who"> dbex readme, 2020</span></div>
|
||||
</div>
|
||||
<div class="go"><a href="https://github.com/tunapro1234/DBEX">github ↗</a></div>
|
||||
</div>
|
||||
|
||||
<div class="kart">
|
||||
<span class="stamp dim">arşiv</span>
|
||||
<div class="head"><span class="ad"><a href="https://github.com/tunapro1234/MEGABOI">megaboi</a></span><span class="no">FİŞ 20-03</span></div>
|
||||
<div class="fields"><span>DİL <b>c++</b></span><span>DONANIM <b>arduino mega + lcd</b></span></div>
|
||||
<div class="body">
|
||||
<p>mega + lcd shield + 6 butondan el yapımı konsol. lityumlu taşınabilir versiyonu bile var.</p>
|
||||
<div class="quote">"neden ekranın yediği serial0'ı kullandın diyebilirsiniz, cevap çok
|
||||
basit: bilmiyorum."<span class="who"> megaboi readme, 2020</span></div>
|
||||
</div>
|
||||
<div class="go"><a href="https://github.com/tunapro1234/MEGABOI">github ↗</a></div>
|
||||
</div>
|
||||
|
||||
<div class="kart">
|
||||
<span class="stamp dim">arşiv</span>
|
||||
<div class="head"><span class="ad">c dönemi</span><span class="no">FİŞ 21-01</span></div>
|
||||
<div class="fields"><span>DİL <b>c89 / c</b></span><span>YIL <b>2021</b></span></div>
|
||||
<div class="body">
|
||||
<p><a href="https://github.com/tunapro1234/vector-h">vector-h</a>: c89'da basit vektör
|
||||
implementasyonu. <a href="https://github.com/tunapro1234/cygnus">cygnus</a> daha ilginç,
|
||||
embed cihazlar için ai kütüphanesi gibi bi şeydi. o ara nnfs okuyordum, matrix makroları
|
||||
oradan. kitap bitince düzenli baştan başlayacaktım. kitap bitti, başlamadım. olsun.</p>
|
||||
</div>
|
||||
<div class="go">
|
||||
<a href="https://github.com/tunapro1234/vector-h">vector-h ↗</a>
|
||||
<a href="https://github.com/tunapro1234/cygnus">cygnus ↗</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="kart">
|
||||
<span class="stamp ink">kökler</span>
|
||||
<div class="head"><span class="ad">first yılları</span><span class="no">FİŞ 20-01</span></div>
|
||||
<div class="fields"><span>LİSE <b>frc 7839</b></span><span>SONRA <b>nf / frc 9029</b></span><span>NFR <b>2023</b></span><span>CHAMPIONSHIP <b>2025 & 2026</b></span></div>
|
||||
<div class="body">
|
||||
<p>lisede frc'deydim, 7839'da. lise bitince mali'yle nf'yi kurduk, 9029. 2023'te de
|
||||
nfr products'ı kurduk, şirket hâlâ dönüyor. geçen sene zağanos'taydım. 2025 ve 2026'da
|
||||
first championship'teydik, houston'a iki kere gitmiş olmak hâlâ hoşuma gidiyor.</p>
|
||||
<p>first'ün bana öğrettiği şey kod değil. teslim tarihi gerçek olunca nasıl çalışıldığını
|
||||
öğrendim. altı haftada robot bitiyor çünkü bitmek zorunda. o refleks hâlâ bende.</p>
|
||||
</div>
|
||||
<div class="go">
|
||||
<a href="https://github.com/team-nf">team-nf ↗</a>
|
||||
<a href="https://github.com/tunapro1234/FRC7839">frc7839 arşivi ↗</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="kart">
|
||||
<span class="stamp">🍄 tuhaf</span>
|
||||
<div class="head"><span class="ad"><a href="https://canbitirici.tunapro.xyz">can raporu</a></span><span class="no">FİŞ ??-??</span></div>
|
||||
<div class="fields"><span>TÜR <b>araştırma(!)</b></span><span>HAKEM <b>yok, gerek de yok</b></span></div>
|
||||
<div class="body">
|
||||
<p>arkadaş grubu içi bir şaka aşırı ciddiye alınırsa ne olur: başlığı, metodolojisi ve
|
||||
grafikleri olan bir rapor olur. "can neden iş bitirici değil?" · can'a sevgilerimle.</p>
|
||||
</div>
|
||||
<div class="go"><a href="https://canbitirici.tunapro.xyz">raporu oku ↗</a></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="endnote">
|
||||
<div>
|
||||
<h3>arşivcinin notu</h3>
|
||||
<p>bu katalog bitmiş işlerin listesi değil, çoğu kart hâlâ değişiyor. yarım gördüğün
|
||||
bir fiş sonra geldiğinde büyümüş olabilir, ya da tamamen başka bir şeye dönüşmüş olabilir,
|
||||
ikisi de oluyor.</p>
|
||||
<p>eski kartları güzel göstermeye çalışmadım. 2020'nin readme'leri neyse o. arşivci
|
||||
belgeyi düzeltmez, saklar.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h3>ulaşım fişi</h3>
|
||||
<ul>
|
||||
<li><a href="https://github.com/tunapro1234">github</a><span class="at">@tunapro1234</span></li>
|
||||
<li><a href="https://git.tunapro.xyz">kendi gitea'm</a><span class="at">git.tunapro.xyz</span></li>
|
||||
<li><a href="https://probotstudio.com">probot studio</a><span class="at">probotstudio.com</span></li>
|
||||
<li><a href="https://stackoverflow.com/users/tunapro1234">stack overflow</a><span class="at">@tunapro1234</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<span>© 2026 tuna gül · katalog kendi sunucusunda saklanır</span>
|
||||
<span>yıllıktaki qr'dan geldiysen: <a href="/yillik/">senin fişin ayrı →</a></span>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
91
yillik/index.html
Normal file
91
yillik/index.html
Normal file
@@ -0,0 +1,91 @@
|
||||
<!doctype html>
|
||||
<html lang="tr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>yıllıktan geldin · tunapro.xyz</title>
|
||||
<meta name="description" content="2026 yıllığındaki qr kodun çıkışı. kâğıt sararır, bu sayfa kalır.">
|
||||
<style>
|
||||
:root{
|
||||
--bg:#f4f1ea; --card:#faf8f2; --ink:#141412; --red:#c22f23; --dim:#8a857a; --faint:#c9c3b4;
|
||||
--serif:"Iowan Old Style",Palatino,Georgia,serif;
|
||||
--mono:ui-monospace,Menlo,Consolas,monospace;
|
||||
}
|
||||
*{box-sizing:border-box;margin:0;padding:0}
|
||||
::selection{background:var(--red);color:#fff}
|
||||
body{
|
||||
background:var(--bg);color:var(--ink);font-family:var(--serif);line-height:1.65;
|
||||
min-height:100vh;display:flex;align-items:center;justify-content:center;padding:34px 18px;
|
||||
background-image:repeating-linear-gradient(0deg,transparent,transparent 31px,rgba(20,20,18,.035) 31px,rgba(20,20,18,.035) 32px);
|
||||
}
|
||||
.card{
|
||||
max-width:620px;background:var(--card);border:2px solid var(--ink);
|
||||
box-shadow:6px 6px 0 rgba(20,20,18,.14);padding:38px 40px 30px;position:relative;
|
||||
}
|
||||
@media(max-width:560px){.card{padding:28px 22px 24px}}
|
||||
.stamp{
|
||||
position:absolute;top:16px;right:18px;font-family:var(--mono);font-size:10.5px;font-weight:700;
|
||||
letter-spacing:.14em;text-transform:uppercase;color:var(--red);border:2.5px solid var(--red);
|
||||
border-radius:4px;padding:3px 9px;transform:rotate(7deg);opacity:.85;
|
||||
}
|
||||
.kicker{font-family:var(--mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--red)}
|
||||
h1{font-size:clamp(30px,6vw,44px);font-weight:600;line-height:1.08;letter-spacing:-.015em;margin:14px 0 20px}
|
||||
h1 em{font-style:italic;color:var(--red)}
|
||||
p{font-size:16.5px;color:#2e2c25;margin-bottom:14px}
|
||||
.age{font-family:var(--mono);font-size:12px;color:var(--dim);border:1.5px dashed var(--faint);
|
||||
padding:8px 12px;margin:18px 0;background:var(--bg)}
|
||||
.age b{color:var(--red);font-weight:600}
|
||||
.sig{margin-top:22px;text-align:right}
|
||||
.sig .name{font-style:italic;font-size:26px;color:var(--ink)}
|
||||
.sig .at{font-family:var(--mono);font-size:11.5px;color:var(--dim);display:block;margin-top:2px}
|
||||
.actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:26px;padding-top:20px;border-top:1.5px solid var(--ink);
|
||||
font-family:var(--mono);font-size:12.5px}
|
||||
.actions a{text-decoration:none;color:var(--ink);border:1.5px solid var(--ink);padding:8px 15px;border-radius:999px;
|
||||
transition:background .12s,color .12s}
|
||||
.actions a:hover{background:var(--ink);color:var(--bg)}
|
||||
.actions a.main{background:var(--red);border-color:var(--red);color:#fff}
|
||||
.actions a.main:hover{background:var(--ink);border-color:var(--ink)}
|
||||
footer{margin-top:18px;font-family:var(--mono);font-size:10.5px;color:var(--dim)}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="card">
|
||||
<span class="stamp">sayfalar arasında bulundu</span>
|
||||
<div class="kicker">tunapro.xyz/yillik · 2026 yıllığı</div>
|
||||
|
||||
<p style="margin-top:18px">demek gerçekten okuttun qr'ı. aynı kitaba sıkıştık madem, buyur.
|
||||
herkes yıllığa bi şeyler yazdı, ben de buraya bi kapı koydum. kâğıt sararıyor ama bu adres
|
||||
benim sunucumda döndüğü sürece açık.</p>
|
||||
|
||||
<p>beni hatırlıyorsundur, köşede robot parçaları ve terminal pencereleriyle uğraşan
|
||||
çocuk. o uğraşlar büyüdü. hâlâ robot yapıyorum, artık yarışma da düzenliyorum, sunucumda
|
||||
agent'lar çalışıyor. hepsinin kaydı bahçede duruyor, aşağıdaki kapıdan girebilirsin.</p>
|
||||
|
||||
<p>sen de kendi tuhaf şeyini yapıyorsundur umarım. yapmıyorsan yap. kimse senden
|
||||
beklemiyor zaten, o yüzden tamamen serbestsin.</p>
|
||||
|
||||
<div class="age" id="age">bu sayfa 2026'da yazıldı.</div>
|
||||
|
||||
<p>bu kod hâlâ çalışıyorsa ben hâlâ bi şeyler kuruyorum demektir. yolun açık olsun.</p>
|
||||
|
||||
<div class="sig">
|
||||
<div class="name">tuna</div>
|
||||
<span class="at">her yerde @tunapro1234</span>
|
||||
</div>
|
||||
|
||||
<div class="actions">
|
||||
<a class="main" href="/">bahçeye gir →</a>
|
||||
<a href="https://github.com/tunapro1234">github</a>
|
||||
</div>
|
||||
|
||||
<footer>kendi sunucumda basıldı. yıllığın kâğıdından uzun yaşar, plan bu.</footer>
|
||||
</main>
|
||||
<script>
|
||||
(function(){
|
||||
var y=new Date().getFullYear(), d=y-2026, el=document.getElementById("age");
|
||||
if(d===1){ el.innerHTML="bu sayfa 2026'da yazıldı. sen okuyana kadar <b>1 yıl</b> geçmiş. hâlâ ayaktayız."; }
|
||||
else if(d>1){ el.innerHTML="bu sayfa 2026'da yazıldı. sen okuyana kadar <b>"+d+" yıl</b> geçmiş. hâlâ ayaktayız, fena değil."; }
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user