nitronium.dev
Teknik, hukuk, startup ve AI öğrenme notları.
Teknik
⌨ Teknik2026-06-30
Next.js `next.config.ts` içindeki `afterFiles` rewrite'lar backend'e proxy yaparken SSE (Server-Sent Events) response body'sini buffer'lıyor. Sonuç: client gerçek zamanlı event almıyor, bağlantı sanki…
⌨ Teknik2026-06-30
SSE akışı çalışmıyor mu? Önce bağlantının backend'e gerçekten ulaşıp ulaşmadığını doğrula. Next.js rewrite, nginx proxy veya Tailscale katmanlarından herhangi biri isteği bloke edebilir.
```bash
pm2 …
⌨ Teknik2026-06-30
Raw `fetch()` ile SSE başlatırken `Authorization` veya `X-CSRF-Token` header'ı eksik bırakılırsa backend 401 döndürüyor ama client tarafında görünür bir hata yok. `EventSource` API'si zaten custom hea…
⌨ Teknik2026-06-25
`gold-mine` projesinin `vault.py` dosyası her rapor sonunda `gbrain sync --source gold-mine` çağırıyordu. Hata mesajı hiç görünmemişti çünkü kod `FileNotFoundError`'ı yakalayıp `"gbrain CLI bulunamadı…
⌨ Teknik2026-06-25
Git reposundaki dosyaları klasöre taşırken `git mv` kullanmak gerekiyor — aksi halde git eski dosyayı silindi, yenisini untracked olarak görüyor ve history kopmaya başlıyor.
Sorun: untracked dosyalar…
⌨ Teknik2026-06-25
Backend'de `GET /api/tasks/{taskId}/trace/stream` SSE endpoint'i vardı — 500ms DB poll, 15s keepalive ping, terminal'de `done` event. Ama frontend buna bağlı değildi; tek seferlik REST çağrısı yapıyor…
⌨ Teknik2026-06-25
macOS'ta varsayılan shell zsh. Bash scriptleri için yazılan array sözdizimi zsh'da hata üretiyor.
Sorun: git vault'undaki dosyaları döngüyle taşımak için bu kodu yazdım:
```bash
for f in *.md; do
…
⌨ Teknik2026-06-24
`cdn.tailwindcss.com` bir statik dosya sunmaz. HTML içeriğini okuyup hangi utility class'ların kullanıldığını tespit eder, CSS'i runtime'da dinamik olarak üretir. Bu nedenle her sayfa yüklemesinde far…
⌨ Teknik2026-06-20
PM2'nin `ecosystem.config.cjs` dosyasına credentials yazmak hem güvenlik riski hem de `.gitignore` ile çelişir. PM2'nin native `env_file` desteği versiyona göre güvenilmez, `dotenv` paketi de her proj…
⌨ Teknik2026-06-20
SQL INSERT içine uzun metin blokları yazarken tek tırnak (`'`) karakterleri her şeyi bozar. Özellikle agent talimatları, markdown içerik veya kod parçaları içeren kayıtlarda bu sorun kaçınılmaz.
Post…
⌨ Teknik2026-06-20
SQLAlchemy'de `on_conflict_do_update(index_elements=["tescil_no"])` kullanırken dikkat edilmesi gereken bir davranış: PostgreSQL'de unique constraint, NULL değerleri birbirinden farklı sayar. Yani `te…
⌨ Teknik2026-06-20
Birden fazla işlemi sırayla yapan bir döngüde SQLAlchemy session kullanırken, bir iterasyonda exception fırlarsa session bozuk durumda kalır. Sonraki iterasyon aynı session'ı kullanmaya çalışınca şu h…
⌨ Teknik2026-06-20
MCP health check bazen Telegram plugin'ini `Module not found "server.ts"` hatasıyla bloke ediyor. Plugin restart etmeden de dosya göndermek mümkün.
İki şeyi bilmek yeterli: doğru token nerede, ve `cu…
⌨ Teknik2026-06-19
`git status` çalıştırınca `fatal: not a git repository` hatası geldi. Ama `.git/` klasörü mevcuttu.
İçine bakınca tek bir `sdd` dosyası vardı — geçerli git yapısından hiçbir iz yok.
```bash
ls /proj…
⌨ Teknik2026-06-19
Ana repo içinde kendi `.git/` klasörü olan bir alt klasör varken `git add -A` yapılınca şu uyarı çıkar:
```
warning: adding embedded git repository: alt-klasor
hint: Clones of the outer repository wi…
⌨ Teknik2026-06-19
`<script>` bloğu içine PHP verisi gömmek için sık kullanılan pattern:
```php
const raw = <?= json_encode($body, JSON_UNESCAPED_UNICODE) ?>;
```
Eğer `$body` içinde `</script>` geçiyorsa tarayıcı scr…
⌨ Teknik2026-06-18
`brew services stop postgresql@15` başarılı mesajı verdi ama `pg_isready` hâlâ `accepting connections` dedi.
`lsof -i :5432` ile baktım: process 9 Haziran'dan beri çalışıyor, `brew services` onu durd…
⌨ Teknik2026-06-18
Vault'lardaki 300+ markdown dosyasını her oturumda Claude'a erişilebilir kılmak için minimal bir MCP sunucusu yazdım. Dış bağımlılık yok, sadece `@modelcontextprotocol/sdk` ve Bun'ın built-in SQLite'ı…
⌨ Teknik2026-06-18
`bun:sqlite` ile veritabanı açarken okuma/yazma modunu açıkça belirtmeye çalışınca `SQLITE_MISUSE` hatası aldım:
```typescript
// HATA
const db = new Database('/path/to/db', { readonly: false });
// …
⌨ Teknik2026-06-18
Telegram'dan dosya indirip vault'a kaydederken, büyük dosyaları belleğe almadan direkt diske yazmak istedim. Bun'ın `Bun.write()` fonksiyonu `Response` nesnesini doğrudan kabul ediyor:
```typescript
…
⌨ Teknik2026-06-18
claude-mem'i PM2'ye eklemeye çalışırken `worker-service.cjs`'in sürekli crash ettiğini gördüm. Loglarda şu dönüyordu:
```
[wrapper] Inner exited with code=0, signal=null
[wrapper] Inner exited unexpe…
⌨ Teknik2026-06-18
Drizzle ORM tabanlı bir Next.js projesini PostgreSQL'den SQLite'a taşırken adımlar şunlardı:
**1. Paket değişimi**
```bash
npm uninstall pg
npm install better-sqlite3
npm install -D @types/better-sq…
⌨ Teknik2026-06-18
Bir vault'un disk kullanımını kontrol ederken şaşırtıcı bir sonuçla karşılaştım:
```bash
du -sh ~/Documents/research-vault/*
# → toplam ~1.3MB
```
Ama vault'un gerçek boyutu 391MB'tı. Fark neredeydi…
⌨ Teknik2026-06-18
GBrain MCP aracından istatistik çekince 3.664 sayfa görüyordum. SQL'den sorduğumda ise 4.630 çıkıyordu. Aynı veritabanı, farklı sayılar.
Neden? `pages` tablosunda bir `deleted_at` sütunu var. GBrain …
⌨ Teknik2026-06-18
Sistemden bir aracı kaldırdığınızda (bizim durumumuzda GBrain), skill/agent dosyalarında kalan referanslar iki tipe ayrılıyor:
**Broken** — komut artık çalışmıyor, skill işlevsiz hale gelmiş. Örnek: …
⌨ Teknik2026-06-18
PM2 yönetilen tüm süreçlerin log dosyalarını tek seferde boşaltmak için:
```bash
pm2 flush
```
Her servisin `out.log` ve `error.log` dosyasını sıfırlar. Servisler çalışmaya devam eder, sadece log iç…
⌨ Teknik2026-06-18
Birden fazla tabloyu JOIN eden bir sorguda sayfa sayısını kontrol ederken beklenmedik sonuç aldım:
```sql
SELECT source_id, COUNT(p.id) as sayfa_sayisi
FROM sources s
LEFT JOIN pages p ON p.source_id…
⌨ Teknik2026-06-18
Dosya yazma izinlerini kontrol eden bir fonksiyonda `..` içeriyor mu diye string kontrolü yapmak yeterli değil. `path.resolve()` `..` segmentlerini çözse de symlink'leri çözmez. Saldırgan `allowed_dir…
⌨ Teknik2026-06-18
`~/.claude/settings.json` içindeki SessionStart hook'ları oturum açılışında otomatik çalışır. Bu hook'lardan biri skill dosyalarını "güncelleme" amacıyla yazıyorsa tehlike var.
Bu oturumda `gunluk-oz…
⌨ Teknik2026-06-18
SQLite'ta JSON olarak saklanan bir alanın içindeki değeri sorgularken LIKE kullanmak hem güvensiz hem hatalı eşleşmelere açık:
```sql
-- KÖTÜ: injection riski + yanlış eşleşme
SELECT * FROM tasks WHE…
⌨ Teknik2026-06-18
PostgreSQL JSONB operatörlerini SQLite'a taşırken her birinin karşılığını bulmak gerekiyor. SQLite'ta bunların tamamı `json_extract()` ile yapılır.
| PostgreSQL | SQLite |
|---|---|
| `context->>'key…
⌨ Teknik2026-06-17
Crontab satırında komuttan önce `PATH=...` yazmak, environment değişkenini komuta aktarmaz:
```
# Çalışmaz gibi görünse de PATH subprocess'e geçmez
0 9 * * * PATH=/opt/homebrew/bin:/usr/local/bin:/us…
⌨ Teknik2026-06-17
GBrain'de "orphan" sayfa, kendisine hiçbir başka sayfanın link vermediği sayfa demek. Yüzlerce orphan varsa tek tek uğraşmak yerine SQL ile toplu çözülür.
Strateji: her kategori için bir `_index-*` s…
⌨ Teknik2026-06-17
PM2'de `cron_restart` ile zamanlanan bir process, belirli aralıklarla restart sinyali alır. Eğer bu process içinde `subprocess.run(...)` gibi bloklayan bir çağrı varsa ve bu çağrı restart aralığından …
⌨ Teknik2026-06-16
`~/.claude/skills/` altına bir subdirectory eklersen Claude Code içindeki skill'leri otomatik keşfeder.
133 adet scientific skill'i `~/.claude/skills/scientific/` içine koyduğumda hepsi sistem remind…
⌨ Teknik2026-06-16
Claude Code hook'larından kullanıcı promptu işlenmeden önce Claude'un context'ine metin enjekte edebilirsin.
Hook stdout'a şu JSON'ı yaz:
```json
{
"hookSpecificOutput": {
"hookEventName": "Us…
⌨ Teknik2026-06-16
macOS bilgisayar uyku modundan çıktıktan hemen sonra DNS çözümlemesi birkaç saniyeliğine başarısız olabiliyor. Bu sırada ağ bağlantısı gerektiren bir servis çalışıyorsa şu hatayla karşılaşılıyor:
```…
⌨ Teknik2026-06-16
1720 markdown dosyasında üç şeyi temizlemek gerekti: frontmatter `related` alanı, `*İlgili:*` satırı ve `[[slug]]` wikilink sözdizimi.
```python
import os, re
def process(content):
# Frontmatter…
⌨ Teknik2026-06-16
PM2 bir process'in kaç kez yeniden başlatıldığını sayar. Ama "yeniden başlatma" dışarıdan bakınca iki farklı şey olabilir.
Eğer Python kodu şöyle yazılmışsa:
```python
if __name__ == "__main__":
…
⌨ Teknik2026-06-16
`python-telegram-bot` v20+ ile bot yazarken `app.add_error_handler(...)` ile eklenen handler sadece komut ve mesaj handler'larındaki hataları yakalar. `get_updates` polling döngüsündeki `NetworkError`…
⌨ Teknik2026-06-16
Vault dosyalarındaki wikilink'lerin nereden geldiğini araştırırken `pm2 list` çıktısında `vault-linker` adlı bir servis gördüm. 110MB bellek tüketiyordu, 22 saattir çalışıyordu.
Kaynak kodu inceleyin…
⌨ Teknik2026-06-15
`gbrain dream --phase eval_takes` çalıştırınca şu mesaj geldi:
```
Skipped: another cycle is already running. (locked)
```
PM2'de `gbrain-dream-nightly` durdurulmuş, ortada çalışan bir process yok. …
⌨ Teknik2026-06-15
Dosya yazma yetkisi kontrol ederken sık yapılan hata: normalize etmeden `startsWith()` kullanmak.
```ts
// YANLIŞ — bypass'a açık
function isPathAllowed(p: string) {
return ROOTS.some(root => p.sta…
⌨ Teknik2026-06-15
Bugün bir PM2 servisi (evaluator) 216 restart biriktimiyle durmuş buldum. Hata şuydu:
```
Fatal Python error: init_import_site: Failed to import the site module
KeyboardInterrupt
File ".../sitecust…
⌨ Teknik2026-06-15
PM2 listesinde bir servisin `waiting` durumunda görmek ilk bakışta endişe verici. Ama `autorestart: false` + `cron_restart` ikilisiyle yapılandırılmış servislerde bu tamamen normaldir.
Ne anlama geli…
⌨ Teknik2026-06-14
`gbrain search <sorgu>` içerik ve başlık üzerinden çalışır, tag'e göre filtrelemez. Tag'li sayfaları bulmak için:
```bash
gbrain list --tag <tag>
```
Çıktı formatı tab-separated:
```
slug\ttype\tda…
⌨ Teknik2026-06-14
Goals tablosuna shell action eklerken `cwd` alanını atlamak kolayca gözden kaçan bir hata. Komut çalışır ama bulunduğu dizin yanlış olduğu için `venv/bin/gold-mine` gibi relative path'ler bulunamaz.
…
⌨ Teknik2026-06-13
`gbrain sources remove <kaynak>` komutu tek başına çalışmıyor. Kaç sayfa, chunk ve embedding silineceğini gösteren bir önizleme ekranı açıp duruyor.
Silmek için `--confirm-destructive` flag'i şart:
…
⌨ Teknik2026-06-13
github-scout, repo analizini OpenRouter üzerinden gpt-4o-mini'ye gönderiyordu. API key geçersizleşince her çalışmada `401 User not found` hatası vermeye başladı; fallback olarak heuristic skora düşüyo…
⌨ Teknik2026-06-12
vault-linker servisi 19 vault'u `chokidar.watch(path + "**/*.md")` ile izliyordu. Üç gün sonra PM2 1.3 GB RSS raporladı. Restart yok, memory leak değil; chokidar izlenen her dosya için inode/mtime sta…
⌨ Teknik2026-06-12
Python'dan `claude -p "prompt"` çağrısı yaparken şöyle yazılmıştı:
```python
result = subprocess.run(
["claude", "-p", prompt],
capture_output=True, text=True, timeout=90
)
```
Terminal'de ç…
⌨ Teknik2026-06-12
`~/.claude/settings.json`'daki `mcpServers` tanımları her Claude Code session'ında yüklenir. Domain-spesifik sunucular (hukuk, patent, yargi gibi) genel oturumlarda gereksiz bellek ve bağlantı açar.
…
⌨ Teknik2026-06-12
`git ls-files <dosya>` komutunun çıkış kodu dosya tracked olsa da olmasa da 0. Bu yüzden şu kontrol her zaman "TRACKED!" yazar:
```bash
git ls-files .env 2>/dev/null && echo "TRACKED!" || echo "değil…
⌨ Teknik2026-06-12
Hardcoded `if domain === "hukuk" → hukukAgent` yerine routing kararını LLM'e ver. AutoGen'in SelectorGroupChat'inden gelen fikir.
```typescript
const AGENT_POOL = [
{ name: "hukuk", description: "…
⌨ Teknik2026-06-12
PM2'de bazı servisler şu pattern ile çalışıyor:
```bash
script.sh
while [[ $? -eq 0 ]]; do
sleep 2
script.sh
done
```
Mantık şu: script başarısız olursa dur, başarılıysa tekrar çalıştır. Ama bu …
⌨ Teknik2026-06-11
TypeScript projesinde `@anthropic-ai/sdk` ile yapılan LLM çağrıları `ANTHROPIC_API_KEY` gerektirir. Bu key ayrı faturalanır ve CI/batch ortamlarında yönetmesi zahmetlidir.
## Ne Gördüm
`judgeSignifi…
⌨ Teknik2026-06-11
`claude -p --output-format stream-json` kullanırken Telegram bot'tan şu hata geldi:
```
Separator is found, but chunk is longer than limit
```
Hatanın kaynağı Python'un `asyncio/streams.py` içindeki…
⌨ Teknik2026-06-11
`cadpy` pipeline'ı üzerinden STEP üretmeye çalışırken şu hatayı aldım:
```
AttributeError: 'OCP.OCP.TopoDS.TopoDS_Shape' object has no attribute 'HashCode'
```
`build123d 0.7.0` ve `cadquery-ocp 7.9…
⌨ Teknik2026-06-11
Üçüncü parti bir Docker Compose servisini test ederken `MEMORY_SALT` gibi bir değişkenin asıl `docker-compose.yml`'de tanımlı olmadığını gördüm. Dosyayı düzenlemek istemiyordum çünkü upstream ile senk…
⌨ Teknik2026-06-11
Bir iş akışı hem job submit edip hem de o job'un tamamlanmasını bekliyorsa, işleyici değiştiğinde (ör. senkron worker'dan async cron'a geçiş) bloklanma süresi faydasız hale gelir.
## Ne Gördüm
`patt…
⌨ Teknik2026-06-09
`npx ecc-agentshield scan` komutunu ilk çalıştırdığımda şu hatayı aldım:
```
Error: ENOENT: no such file or directory, stat '~/.claude/skills/customize'
at statSync (node:fs:1710:25)
at scanC…
⌨ Teknik2026-06-09
## Ne Gördüm
`/harita` sayfası HTTP 200 dönüyordu ama grafik yüklenmiyordu. Browser console'da sessiz hata vardı.
## Neden
`graph.php` içindeki Sigma.js kodu şunu çekiyordu:
```js
const res = awai…
⌨ Teknik2026-06-09
Claude Code, stdio tipindeki MCP server'ı session başında spawn eder:
```json
"gbrain": {
"type": "stdio",
"command": "bun",
"args": ["run", "src/mcp-wrapper.ts"]
}
```
`bun run` TypeScript do…
⌨ Teknik2026-06-09
`settings.json`'daki `Stop` hook listesi yukarıdan aşağıya çalışır. Bir hook'un yazdığı dosya, aynı listedeki önceki bir hook tarafından işlenemez.
## Somut Örnek
```json
"Stop": [
{ "command": "g…
⌨ Teknik2026-06-09
Claude Code her session'ı bir JSONL dosyasına kaydeder. Stop hook `transcript_path` ile bu dosyanın yolunu alır.
## Dosya Konumu
```
~/.claude/projects/<proje-hash>/<session-uuid>.jsonl
```
Her sat…
⌨ Teknik2026-06-09
Claude Code iki farklı config dosyası okuyor ve ikisinde aynı MCP server tanımlıysa hangisi kazanıyor?
**Dosyalar:**
- `~/.claude.json` (eski format, `mcpServers` key'i ile)
- `~/.claude/settings.jso…
⌨ Teknik2026-06-09
Kullanıcı veya DB'den gelen bir değeri `Content-Disposition` header'ına yazarsan header injection riski var. `\r\n` içeren bir değer yeni header satırı ekleyebilir.
**Tehlikeli:**
```typescript
'Cont…
⌨ Teknik2026-06-09
FastMCP sunucusunu Python'dan değil HTTP üzerinden (Next.js API route gibi) çağırmak istersen basit bir POST yetmiyor. Streamable HTTP transport şu sırayı zorunlu kılıyor:
**1. Initialize — session a…
⌨ Teknik2026-06-09
Graf node'larını küre yüzeyine dağıtmak için Fibonacci (altın açı) algoritması kullanılır. Ama bu dağılımı 2D'ye düz projekte edince node'lar yatay bantlar halinde hizalanır, etiketler üst üste biner.…
⌨ Teknik2026-06-09
## Ne Gördüm
`transcript-discovery.ts`'yi düzelttim, doğrudan `bun src/cli.ts` ile test ettim. Çalıştı. Ama `gbrain` komutuyla çalıştırınca hala eski davranış.
## Neden
```bash
ls -la /opt/homebrew…
⌨ Teknik2026-06-09
## Ne Gördüm
`gbrain dream --phase synthesize --date 2026-06-09` çalıştırınca 0 transcript buldu. Ama dizinde 9 tane `session_2026_06_09_*.md` dosyası vardı.
## Kök Neden
`transcript-discovery.ts` …
⌨ Teknik2026-06-09
## Ne Gördüm
```bash
gbrain dream --phase synthesize --date 2026-06-09 --dry-run
# Brain is healthy. 1 phase(s) checked in 0.0s
```
"Brain is healthy" mesajı başarılı gibi görünüyor. Ama transcript …
⌨ Teknik2026-06-09
GBrain'de kaç sayfa indexli olduğunu değil, o sayfaların gerçekten kullanılıp kullanılmadığını bilmek istiyorsan doğru yer `mcp_request_log` tablosu.
## Ne gördüm
1.500 içtihat kararı hukuk vault'un…
⌨ Teknik2026-06-09
GBrain veritabanında `pages` tablosunda `source` adında bir kolon yok. Kolon adı `source_id`.
## Ne gördüm
```sql
SELECT source, COUNT(*) FROM pages GROUP BY source;
-- ERROR: column "source" does n…
⌨ Teknik2026-06-09
Bir sigma.js grafında circular layout yerine ForceAtlas2 kullanmak için `graphology-layout-forceatlas2` paketini CDN'den eklemeye çalıştım:
```html
<script src="https://cdn.jsdelivr.net/npm/grapholog…
⌨ Teknik2026-06-09
gstack browse skill ile sayfa test ederken WebGL kullanan kütüphaneler (sigma.js, three.js vb.) render etmiyor. Kontrol etmek için:
```js
$B js "!!document.createElement('canvas').getContext('webgl')…
⌨ Teknik2026-06-09
Sunucu üzerinde `curl http://localhost/dosya.html` ile test yaparken sürekli 404 aldım. Sorun dosyada değil, `.htaccess` kuralında.
## Sorun
`.htaccess`'te şu kural varsa:
```apache
RewriteCond %{H…
⌨ Teknik2026-06-09
LiteSpeed (ve çoğu web sunucusu) dosyaları `nobody` veya `www-data` kullanıcısı olarak okur. `sudo cp` ile kopyalanan dosyalar `root:root` sahipliğiyle gelir; web sunucusu bu dosyaları okuyamaz ve 404…
⌨ Teknik2026-06-09
GBrain gibi Streamable HTTP transport kullanan MCP server'lara doğrudan HTTP isteği atarken `Accept` header zorunlu:
```bash
# YanlIş - 406 döner
curl -X POST http://127.0.0.1:4444/mcp \
-H 'Conten…
⌨ Teknik2026-06-09
`~/.claude/skills/customize` zaten vardı, bir symlink'ti. Ama şunu çalıştırınca hata aldım:
```bash
mkdir ~/.claude/skills/customize
# mkdir: ~/.claude/skills/customize: No such file or directory
```…
⌨ Teknik2026-06-09
PDF kitaplar markdown'a çevrildiğinde bölüm başlıkları, alt başlıklar ve bazı kelimeler `[[The]]`, `[[cover]]`, `[[Part]]`, `[[Introduction]]` gibi wikilink'e dönüşüyor. Obsidian bunları ayrı notlara …
⌨ Teknik2026-06-09
Mac yeniden başlamasından sonra PostgreSQL başlamıyorsa iki ayrı sorun birlikte yaşanıyor olabilir.
**Sorun 1: Eski kilit dosyası**
`postmaster.pid` var ama içindeki PID başka bir sürece ait. Postgr…
⌨ Teknik2026-06-09
Bun `fetch().text()` varsayılan olarak UTF-8 ile decode eder. Ancak resmigazete.gov.tr'nin Yönetmelik sayfaları (`/eskiler/.../YYYYMMDD-N.htm`) Microsoft Word 11'den export edilmiş HTML belgelerdir ve…
⌨ Teknik2026-06-09
## Ne Gördüm
nitronium.dev'e `rsync --delete` ile deploy yapınca sayfada pagination kayboldu, harita butonu gitti, bazı not içerikleri silindi.
## Neden
Local vault (`nitronium-dev/`) sunucu ile se…
⌨ Teknik2026-06-09
Sigma.js v2.4.0 ile çalışan bir graf sayfasını gstack browse skill ile test ederken canvas tamamen boştu. JS konsolu hata vermiyordu, API'den 45 node + 51 edge geliyordu, graphology ve sigma CDN'den y…
⌨ Teknik2026-06-09
Microsoft Word 11'den HTML olarak kaydedilen belgeler `<!--[if gte mso 9]>...<![endif]-->` şeklinde conditional comments içerir. Bu bloklar içinde Word metadata XML'i bulunur (`<w:View>Print</w:View>`…
⌨ Teknik2026-06-08
Python async botları PM2 ile çalıştırırken yaygın bir hata: iç `while True` + `asyncio.run()` döngüsü kurmak.
```python
# YANLIŞ
if __name__ == "__main__":
while True:
try:
as…
⌨ Teknik2026-06-07
Türkiye, ABD ve Avrupa piyasalarını, değerli emtiaları ve kripto varlıkları izleyen, Reddit sentiment'ini entegre eden, Telegram alert'i gönderen bir pipeline kurdum. Notlar burada.
## Mimari
```
Ya…
⌨ Teknik2026-06-07
`graphology-layout-forceatlas2` paketini jsdelivr veya unpkg üzerinden tarayıcıya yüklemek mümkün değil. Paket yalnızca CommonJS (`index.js`) olarak ship ediliyor, `dist/graphology-layout-forceatlas2.…
⌨ Teknik2026-06-07
LiteSpeed'de `RewriteRule ^harita$ /graph.php [L]` tek başına 404 veriyor. Apache'de çalışan bu kural LiteSpeed'de işe yaramıyor.
Çözüm: `RewriteCond !-f` ve `!-d` koşulları zorunlu.
```apache
Rewri…
⌨ Teknik2026-06-06
SQL allowlist'i regex ile uyguluyorsan CTE isimleri kör noktandır.
```sql
-- Allowed tables: pages, content_chunks, links ...
-- Blocked tables: access_tokens, oauth_clients ...
-- Sıradan bypass:
W…
⌨ Teknik2026-06-06
[[nitronium.dev]]'in arkasında veritabanı yok. Notlar düz `.md` dosyası, PHP bunları okuyup JSON'a çeviriyor.
Yapı:
```
notes/
AI/
prompt-cache-ne-zaman-kullan.md
Teknik/
rsync-ile-deplo…
⌨ Teknik2026-06-06
LLM'in ürettiği SQL'i regex ile kontrol etmek cazip çünkü kolay. Ama regex SQL'in yapısını anlamaz, sadece metni görür. Bu yüzden her ciddi kısıtlamanın bir bypass yolu var.
**Subquery bypass**
`FRO…
⌨ Teknik2026-06-06
Bir pain-point tarama sistemi kurarken Twitter'ı veri kaynağı olarak eklemeye çalıştım. Kısa özet: çalışmıyor.
**Denenilen yöntemler:**
- Üçüncü taraf scraper araçları: ya `noResults` döndürüyor, ya…
⌨ Teknik2026-06-05
CyberPanel 2.4 build 4 ve 5'te `loginSystem/views.py` dosyasında debug print satırları kalmış:
```python
print(f"Login attempt - Username: {username}, Password length: {len(password) if password else…
⌨ Teknik2026-06-04
LiteSpeed'de `headerOps remove X-Powered-By` direktifi, CyberPanel OLS modülü tarafından override ediliyor. Modül `SEND_RESP_HEADER` hook'unda priority `-15`'te çalışıyor — `headerOps`'tan sonra heade…
⌨ Teknik2026-06-04
CyberPanel'de yeni site oluşturulunca `public_html` dizini `750` izniyle geliyor. LiteSpeed `nobody` user'ı olarak çalıştığında bu dizine giremez — site 404 döner, dosyalar yerinde olsa bile.
```bash…
⌨ Teknik2026-06-04
`X-Forwarded-For` header'ı istemci tarafından serbestçe set edilebilir. Her istekte farklı bir IP göndererek dosya tabanlı rate limiter'ı kolayca bypass etmek mümkün.
```php
// Yanlış
$ip = $_SERVER[…
⌨ Teknik2026-06-04
`rsync` ile sunucuya dosya göndermek `scp`'den çok daha hızlı — sadece değişen dosyaları gönderir.
```bash
rsync -avz --delete ./dist/ user@host:/var/www/site/
```
`--delete` bayrağı: yerel dizinde …
AI
◆ AI2026-06-28
Multica üzerinden Hermes'e atanan task'lar "hermes initialize failed: hermes process exited" hatasıyla başarısız oluyordu.
`hermes acp --check` komutu "ACP dependencies not installed. Install them wi…
◆ AI2026-06-28
Multica üzerinden atanan bir task, workdir'e hiç yazma yapmadan "running" durumunda dakikalarca takılı kalabilir. Process ayaktadır, status running görünür ama çıktı yoktur.
Kontrol için workdir'de A…
◆ AI2026-06-28
Multica üzerinden Wrongstack'a atanan task'lar workdir'e hiç yazma yapmadan running durumunda takılı kalıyordu. Process çalışıyor görünüyordu ama ağ bağlantısı yoktu.
`wrongstack auth list` komutu "N…
◆ AI2026-06-25
`refetchInterval` sabit bir sayı yerine callback olarak verilirse `query.state.data`'ya bakarak dinamik davranış sağlanabilir.
Senaryo: task transcript sayfası, çalışan görevler için sürekli güncelle…
◆ AI2026-06-24
ACP (Agent Communication Protocol) başlangıçta IBM'in bee-ai projesiydi, sonra Linux Foundation bünyesine alındı ve Google'ın A2A protokolüyle birleşti. Şu an agent-to-agent iletişim için açık bir sta…
◆ AI2026-06-24
Claude'dan yapılandırılmış JSON çıktısı isterken yalnızca metin alanları değil, makine-okunabilir skor alanları da istemek mümkün. Downstream kod bu alanları doğrudan karşılaştırabilir, insan yorumuna…
◆ AI2026-06-23
DeerFlow'un `/runs/stream` endpoint'i SSE (Server-Sent Events) ile cevap veriyor. Kısa sorgularda sorun yok, ama subagent'lı araştırmalar 3-10 dakika sürebiliyor. Bu kadar uzun süren stream bağlantıla…
◆ AI2026-06-23
DeerFlow'da Minimax M3 modeliyle çalışırken bir run hatayla biterse thread içinde yarım kalmış tool_call/tool_result çiftleri kalıyor. Aynı thread'e yeni bir human mesajı gönderildiğinde Minimax şu ha…
◆ AI2026-06-23
Multica agent task'larında çalışan Claude Code oturumunda context-mode hook aktif. Bu hook curl ve wget komutlarını keserek sandboxa yönlendiriyor; HTTP isteği doğrudan ağa gitmiyor.
Dışa HTTP istek …
◆ AI2026-06-20
Multica'da agent oluşturmanın iki yolu var: web UI'daki template picker, ya da direkt PostgreSQL INSERT. Çok sayıda agent eklenecekse DB yolu çok daha hızlı.
Gerekli ID'leri bulmak için önce sorgula:…
◆ AI2026-06-18
Agent sistemlerinde aynı tip görev tekrar tekrar aynı aşamada patladığında bu bilgi genellikle log'a düşüp kayboluyor. Bunun yerine SQLite'a yazmak yeterli.
`task_outcomes` adında bir tablo açtım: `t…
◆ AI2026-06-18
Telegram botu için Claude CLI'yi headless modda çalıştırırken, yalnızca yanıt üretmesini değil gerçek iş yapmasını istedim. `--allowedTools` bayrağı bunu mümkün kılıyor:
```typescript
const { stdout …
◆ AI2026-06-18
GBrain'i durdurduğumuzda gerçekten ne kaybettiğimizi analiz ettim. Teorik kapasitesi etkileyiciydi: cross-session bellek, vault indexleme, `think` ile çapraz sayfa reasoning, `eval` döngüsü, `skillify…
◆ AI2026-06-18
gstack (Garry Tan'ın Claude Code skill paketi), içindeki ~50 skill'de GBrain entegrasyonu içeriyor. `grep -i gbrain` çalıştırınca neredeyse her dosyada bir şeyler çıkıyor.
Ama bu referansların tamamı…
◆ AI2026-06-16
GBrain'de sayfalar arası bağlantının semantic similarity ile otomatik oluştuğunu varsaydım, ama öyle değil.
Kaynak koda bakınca `links` tablosundaki her edge'in ya markdown içinde `[[slug]]` yazılara…
◆ AI2026-06-16
133 adet scientific skill'i Claude'un uygun olanda otomatik bulması için bir hook yazdım.
Her prompt geldiğinde `skill-selector.py` çalışıyor: tüm `SKILL.md` description'larını numpy TF-IDF ile vektö…
◆ AI2026-06-15
Agent sistemlerinde `claude -p` ile subprocess çalıştırırken harici dizinlere yazma gerekebilir (örn. `~/.claude/skills/`). İlk akla gelen seçenek:
```ts
// YANLIŞ — her tür izni atlar
['claude', '-p…
◆ AI2026-06-15
GBrain dream cycle'da `eval_takes` fazı 5.6/10 verdi. AI jürisi "signal density düşük, trivial entries fazla" diyordu.
Sebebi beklenmedik bir yerden çıktı: takes tablosunda 1002 kayıt var, 856'sı ina…
◆ AI2026-06-15
GBrain'de 4429 sayfa indeksli ama bunların 4222'si yani %95'i hiç aranmamış. `salience_touched_at` sütunu bir sayfa arama sonucunda döndüğünde güncelleniyor; `NULL` ise o sayfa hiçbir sorgunun yüzeyin…
◆ AI2026-06-15
GBrain MCP'den `get_page` ile bir sayfayı okumaya çalıştım, `page_not_found` hatası aldım. Oysa aynı slug PostgreSQL'de `deleted_at IS NULL` ile açıkça mevcuttu.
Sebep: GBrain MCP token'ları `takesHo…
◆ AI2026-06-15
GBrain'de bir take'i çözümlenmiş olarak işaretlemek için `resolve_take` MCP aracını çağırdım. Araç başarılı döndü ama take hâlâ aktif listede çıkmaya devam etti.
Sebebi: `resolve_take` sadece `resolv…
◆ AI2026-06-15
`portfolyo_monitor.py`'de şöyle bir satır vardı:
```python
f"MORE-DILIGENCE: {len(s for s in startups if 'MORE-DILIGENCE' in s.get('karar',''))}"
```
Çalışırken `TypeError: object of type 'generator…
◆ AI2026-06-14
Her task sonunda `/task-retro` çalıştırarak öğrenilen şeyleri atomik kural olarak GBrain'e kaydediyorum. Kural formatı: `[BAĞLAM] durumunda [EYLEM] yapma/yap, çünkü [NEDEN].`
Kaydetme `gbrain put "go…
◆ AI2026-06-14
Andrej Karpathy'nin metodolojisindeki iki kritik eksik katmanı CLAUDE.md'ye bölüm olarak ekledim.
**`## 0. Task Intake`** -- Göreve başlamadan bilinmeyen sayısını ölçer ve buna göre soru açar:
- 0 b…
◆ AI2026-06-13
GBrain'in `eval_takes` fazı rastgele 50 take örnekliyor ve bunları `signal_density` dahil 5 boyutta değerlendiriyor. Eşik: her boyutun ortalaması ≥7. Bu eşiği geçemeyince Telegram'a uyarı düşüyor.
So…
◆ AI2026-06-13
GBrain takes tablosunda noise birikiyor ve `eval_takes` fazı bunları örnekleyince kalite skoru düşüyor. Anlık temizlik için LENGTH filtresi çalışıyor:
```sql
UPDATE takes SET active=false
WHERE activ…
◆ AI2026-06-13
gold-mine pipeline'ında PAIN_PATTERNS listesi tamamen İngilizce: `"wish there was"`, `"can't find"`, `"looking for a tool"` gibi. Şikayet.com RSS'inden 1000 post çekildi, filtre 0 eşleşme döndürdü.
S…
◆ AI2026-06-12
AutoGen artık yeni özellik almıyor. Microsoft, yeni projeler için [agent-framework](https://github.com/microsoft/agent-framework)'e geçmeyi öneriyor. Mevcut projeler için migration guide var.
Microso…
◆ AI2026-06-12
OpenRouter key'in güncel harcamasını ve spending limitini tek curl ile okumak mümkün:
```bash
curl -s -H "Authorization: Bearer $OPENROUTER_API_KEY" \
https://openrouter.ai/api/v1/auth/key
```
Yan…
◆ AI2026-06-12
Karmaşık bir analiz görevi için tek büyük Sonnet prompt yazmak yerine sorumlulukları 3 agent'a bölebilirsin:
```
[Haiku] filtrele → [Sonnet] uzman analiz → [Haiku] sentez + kullanıcı dili
```…
◆ AI2026-06-11
Claude CLI (`claude -p`) subscription planında günlük session limiti var. Arka planda çok sayıda job işlemek gerektiğinde bu limit dolabiliyor.
## Ne Gördüm
`gbrain-job-runner` 100 job'u tek seferde…
◆ AI2026-06-11
Claude Code için resmi bir Telegram entegrasyonu yok. Ama `claude -p` CLI'ı subprocess olarak çağırarak tam Claude Code yeteneklerini Telegram'a taşımak mümkün.
Temel pattern:
```python
cmd = [
…
◆ AI2026-06-09
Claude Code hook'larında PreToolUse çıktısı normalde kullanıcıya görünmez — sadece araç çağrısını bloklamak (exit 1) veya geçirmek (exit 0) için kullanılır. Ama ECC'nin `strategic-compact` hook'unda f…
◆ AI2026-06-09
Haiku'ya `system: "Yalnızca geçerli JSON döndür, başka metin ekleme"` desen bile yanıtı zaman zaman şöyle geliyor:
```
```json
{
"risk": "high",
...
}
```
```
Bu durumda `JSON.parse()` doğrudan …
◆ AI2026-06-09
Claude Code transcript'inden otomatik session notu üretmek mümkün — Stop hook'ta JSONL okuyup `session-vault`'a markdown yazabilirsin. Ama bu notun değeri sınırlı.
## Ne Yakalar
- Kullanıcı prompt l…
◆ AI2026-06-09
Bir arama sonucunun keyword mi yoksa vektör aramasından mı geldiğini anlamak için skora bak:
**ts_rank (keyword search):**
- `tsvector @@ tsquery` eşleşmesine göre hesaplanır
- Genellikle `0.01 - 0.1…
◆ AI2026-06-09
AgentShield scan sonucunda iki agent dosyasında kritik bulgu çıktı:
```
● Hidden soft hyphen detected (1 occurrences)
agents/engineering-mobile-app-builder.md:440
Evidence: 1x soft hyphen
```
##…
◆ AI2026-06-08
Anthropic API key gerektiren bir işi yaparken fark ettim: ayrı API key yerine Claude Code'daki Agent/Workflow tool'u kullanmak hem ücretsiz hem çok daha hızlı.
## Ne Yaptık
94 session transcript'ini…
◆ AI2026-06-08
Google'un resmi agent skills reposu: [github.com/google/skills](https://github.com/google/skills). 12.2k star, aktif geliştirme.
## Ne var
`agentskills.io` platformu üzerinde çalışan skill koleksiyo…
◆ AI2026-06-07
# Kişisel AI Altyapısına 4 Özellik Ekledik
Daniel Miessler'ın [Personal AI Infrastructure](https://github.com/danielmiessler/Personal_AI_Infrastructure) (PAI) reposunu inceledik. Tüm sistemi kurmak y…
◆ AI2026-06-06
PM2 cron ile çalışan otonom görevlerde klasik yaklaşım şöyle: shell komutu çalıştır, exit code 0 ise başarılı say, değilse Telegram'a bildir. Sorun şu: exit code 0 döndüğünde aslında ne kadar "iyi" ol…
◆ AI2026-06-06
`llms.txt` AI modellerin siteyi anlaması için yazılmış bir rehber dosyası. `robots.txt` botların neye erişeceğini söyler; `llms.txt` ise sitenin ne olduğunu açıklar.
[[nitronium.dev]]'e şunları yazdı…
◆ AI2026-06-06
Kullanıcıya (veya AI agent'a) doğal dil sorusu yazıp SQL döndüren bir tool açıyorsan:
**1. `localOnly: true` flag'i koy**
HTTP üzerinden OAuth token'la erişilebilen bir endpoint olmamalı. Tool sadec…
◆ AI2026-06-04
Anthropic API'de `cache_control: ephemeral` ile uzun sistem promptlarını cache'e alabilirsin.
Cache 5 dakika boyunca geçerli. Avantajı: cache hit'te token maliyeti %90 düşüyor, gecikme de azalıyor.
…
◆ AI2026-06-04
`User-agent: *` kuralı AI crawler'ların davranışını belirsiz bırakır. Her bot kendi yorumuyla hareket eder.
Explicit direktiflerle davranışı sabitle:
```
User-agent: GPTBot
Allow: /api.php?action=no…
◆ AI2026-06-04
`llms.txt`'te AI crawler'lara önerdiğin endpoint'i `robots.txt`'te `Disallow` edersen crawler'lar erişemez — llms.txt'in tamamı etkisiz kalır.
```
# robots.txt — YANLIŞ
Disallow: /api.php?action=note…