[{"id":408,"title":" Apache APISIX - AISIX AI Gateway","content":"<div id=\"model-response-message-contentr_bc5f551856da52a0\" class=\"markdown markdown-main-panel enable-luminous-fast-follows enable-updated-hr-color stronger\" dir=\"ltr\" aria-busy=\"false\" aria-live=\"off\">\n<p data-path-to-node=\"0\"><strong data-path-to-node=\"0\" data-index-in-node=\"0\">AISIX<\/strong>, Apache APISIX projesinin arkas\u0131ndaki ekip olan <strong data-path-to-node=\"0\" data-index-in-node=\"54\">API7.ai<\/strong> taraf\u0131ndan geli\u015ftirilen, B&uuml;y&uuml;k Dil Modelleri (LLM) ve yapay zek&acirc; ajanlar\u0131 (AI Agents) i&ccedil;in &ouml;zel olarak tasarlanm\u0131\u015f <strong data-path-to-node=\"0\" data-index-in-node=\"177\">a&ccedil;\u0131k kaynakl\u0131 bir yapay zek&acirc; a\u011f ge&ccedil;ididir (AI Gateway)<\/strong>.<\/p>\n<p data-path-to-node=\"1\"><strong data-path-to-node=\"1\" data-index-in-node=\"0\">Rust dili ile s\u0131f\u0131rdan in\u015fa edilen<\/strong> bu proje, geleneksel API a\u011f ge&ccedil;itlerinin (API Gateway) yapay zek&acirc; trafik bi&ccedil;imlerine (&ouml;rne\u011fin ak\u0131\u015f\/streaming verileri, y&uuml;ksek kaynak t&uuml;ketimi, token bazl\u0131 &uuml;cretlendirmeler vb.) tam uyum sa\u011flayamamas\u0131 sorununu &ccedil;&ouml;zmek amac\u0131yla &uuml;retilmi\u015ftir.<\/p>\n<p data-path-to-node=\"2\">Projenin &ouml;ne &ccedil;\u0131kan temel &ouml;zellikleri ve sa\u011flad\u0131\u011f\u0131 avantajlar \u015funlard\u0131r:<\/p>\n<h3 data-path-to-node=\"3\">1. Tek API ile T&uuml;m Modellere Eri\u015fim (Unified API)<\/h3>\n<p data-path-to-node=\"4\">AISIX, arkadaki model sa\u011flay\u0131c\u0131s\u0131 ne olursa olsun (OpenAI, Anthropic, Google Gemini, AWS Bedrock, DeepSeek vb.) d\u0131\u015far\u0131ya <strong data-path-to-node=\"4\" data-index-in-node=\"121\">OpenAI ile uyumlu tek bir API<\/strong> sunar. Bu sayede kodunuzda kulland\u0131\u011f\u0131n\u0131z SDK'yi veya <code data-path-to-node=\"4\" data-index-in-node=\"204\">base_url<\/code> bilgisini de\u011fi\u015ftirmeden, sadece model ad\u0131n\u0131 de\u011fi\u015ftirerek farkl\u0131 LLM sa\u011flay\u0131c\u0131lar\u0131 aras\u0131nda ge&ccedil;i\u015f yapabilirsiniz. A\u011f ge&ccedil;idi, gelen istekleri ilgili servis sa\u011flay\u0131c\u0131s\u0131n\u0131n format\u0131na otomatik olarak d&ouml;n&uuml;\u015ft&uuml;r&uuml;r.<\/p>\n<h3 data-path-to-node=\"5\">2. Rust ile Y&uuml;ksek Performans<\/h3>\n<p data-path-to-node=\"6\">Geleneksel a\u011f ge&ccedil;itlerinin aksine AISIX, Rust dilinde yaz\u0131lm\u0131\u015f tek bir statik ikili dosya (static binary) olarak &ccedil;al\u0131\u015f\u0131r.<\/p>\n<ul data-path-to-node=\"7\">\n<li>\n<p data-path-to-node=\"7,0,0\"><strong data-path-to-node=\"7,0,0\" data-index-in-node=\"0\">D&uuml;\u015f&uuml;k Gecikme:<\/strong> Yan\u0131tlar\u0131n anl\u0131k &uuml;retildi\u011fi yapay zek&acirc; uygulamalar\u0131nda (SSE - Server-Sent Events ak\u0131\u015flar\u0131nda) gecikmeyi en aza indirir.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"7,1,0\"><strong data-path-to-node=\"7,1,0\" data-index-in-node=\"0\">Kilitlenmesiz Yap\u0131 (Lock-free Config):<\/strong> Sistem istekleri i\u015flerken konfig&uuml;rasyon de\u011fi\u015fikliklerini duraklama olmadan, an\u0131nda y&uuml;kleyebilir.<\/p>\n<\/li>\n<\/ul>\n<h3 data-path-to-node=\"8\">3. Geli\u015fmi\u015f Trafik Kontrol&uuml; ve G&uuml;venlik (Guardrails)<\/h3>\n<p data-path-to-node=\"9\">Yapay zek&acirc; modellerinin \u015firket i&ccedil;i kullan\u0131m\u0131nda veya d\u0131\u015far\u0131ya sunulmas\u0131nda ihtiya&ccedil; duyulan kurumsal kontroller yerle\u015fik olarak gelir:<\/p>\n<ul data-path-to-node=\"10\">\n<li>\n<p data-path-to-node=\"10,0,0\"><strong data-path-to-node=\"10,0,0\" data-index-in-node=\"0\">G&uuml;venlik Duvarlar\u0131 (Guardrails):<\/strong> Modele girdi (input) g&ouml;nderilmeden &ouml;nce veya modelden &ccedil;\u0131kt\u0131 (output) al\u0131nd\u0131ktan sonra g&uuml;venlik politikalar\u0131n\u0131 &ccedil;al\u0131\u015ft\u0131r\u0131r. \u0130stem d\u0131\u015f\u0131 veya zararl\u0131 i&ccedil;erikleri, veri s\u0131z\u0131nt\u0131lar\u0131n\u0131 (PII) engelleyebilir.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"10,1,0\"><strong data-path-to-node=\"10,1,0\" data-index-in-node=\"0\">B&uuml;t&ccedil;e ve H\u0131z S\u0131n\u0131rlar\u0131 (Rate Limiting &amp; Budgets):<\/strong> Token bazl\u0131 maliyet kontrol&uuml; yapman\u0131z\u0131 sa\u011flar. Belirlenen harcama limitlerine ula\u015f\u0131ld\u0131\u011f\u0131nda uyar\u0131 verebilir veya trafi\u011fi durdurabilir.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"10,2,0\"><strong data-path-to-node=\"10,2,0\" data-index-in-node=\"0\">&Ouml;nbelle\u011fe Alma (Caching):<\/strong> Benzer yapay zek&acirc; isteklerini &ouml;nbelle\u011fe alarak hem yan\u0131t s&uuml;resini d&uuml;\u015f&uuml;r&uuml;r hem de API maliyetlerini ciddi oranda azalt\u0131r.<\/p>\n<\/li>\n<\/ul>\n<h3 data-path-to-node=\"11\">4. G&ouml;zlemlenebilirlik (Observability)<\/h3>\n<p data-path-to-node=\"12\">Yapay zek&acirc; trafi\u011finin ne kadar token harcad\u0131\u011f\u0131n\u0131, yan\u0131t s&uuml;relerini, hata oranlar\u0131n\u0131 ve harcanan b&uuml;t&ccedil;eyi anl\u0131k olarak izlemenizi sa\u011flar. OpenTelemetry (OTLP), Datadog veya nesne depolama (Object Storage) sistemlerine log ve izleme (trace) verilerini aktarabilir.<\/p>\n<h3 data-path-to-node=\"13\">5. Mimarisi (Data Plane &amp; Control Plane)<\/h3>\n<p data-path-to-node=\"14\">AISIX, mimari olarak iki ba\u011f\u0131ms\u0131z par&ccedil;adan olu\u015fur:<\/p>\n<ul data-path-to-node=\"15\">\n<li>\n<p data-path-to-node=\"15,0,0\"><strong data-path-to-node=\"15,0,0\" data-index-in-node=\"0\">Veri D&uuml;zlemi (Data Plane):<\/strong> \u0130stekleri i\u015fleyen, Rust ile yaz\u0131lm\u0131\u015f, durumsuz (stateless) ve yatayda kolayca &ouml;l&ccedil;eklenebilen hafif proxy katman\u0131d\u0131r.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"15,1,0\"><strong data-path-to-node=\"15,1,0\" data-index-in-node=\"0\">Kontrol D&uuml;zlemi (Control Plane):<\/strong> Dinamik konfig&uuml;rasyonu y&ouml;netmek i&ccedil;in <strong data-path-to-node=\"15,1,0\" data-index-in-node=\"70\">etcd<\/strong> altyap\u0131s\u0131n\u0131 kullan\u0131r. Y&ouml;netici API'si (Admin API) arac\u0131l\u0131\u011f\u0131yla modeller, API anahtarlar\u0131 ve kurallar a\u011f ge&ccedil;idi yeniden ba\u015flat\u0131lmadan ger&ccedil;ek zamanl\u0131 olarak g&uuml;ncellenebilir. \u0130&ccedil;erisinde React tabanl\u0131 bir y&ouml;netim paneli ve modelleri test etmek i&ccedil;in bir <em data-path-to-node=\"15,1,0\" data-index-in-node=\"324\">Chat Playground<\/em> bar\u0131nd\u0131r\u0131r.<\/p>\n<\/li>\n<\/ul>\n<h3 data-path-to-node=\"16\">Lisans ve Bulut Entegrasyonu<\/h3>\n<ul data-path-to-node=\"17\">\n<li>\n<p data-path-to-node=\"17,0,0\"><strong data-path-to-node=\"17,0,0\" data-index-in-node=\"0\">Apache-2.0 Lisans\u0131:<\/strong> Projenin &ccedil;ekirdek kodlar\u0131 (Data Plane) tamamen a&ccedil;\u0131k kaynakl\u0131d\u0131r, &uuml;cretsiz olarak kendi sunucular\u0131n\u0131zda (Self-hosted) veya Kubernetes &uuml;zerinde &ccedil;al\u0131\u015ft\u0131rabilirsiniz.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"17,1,0\"><strong data-path-to-node=\"17,1,0\" data-index-in-node=\"0\">AISIX Cloud:<\/strong> Geli\u015fmi\u015f ekip y&ouml;netimi, merkezi b&uuml;t&ccedil;elendirme, denetim g&uuml;nl&uuml;kleri (audit logs) ve haz\u0131r bir kontrol paneli aray&uuml;z&uuml; isteyen i\u015fletmeler i&ccedil;in API7, \"AISIX Cloud\" ad\u0131nda y&ouml;netilen bir SaaS (bulut) s&uuml;r&uuml;m&uuml; de sunmaktad\u0131r.<\/p>\n<\/li>\n<\/ul>\n<p data-path-to-node=\"18\"><strong data-path-to-node=\"18\" data-index-in-node=\"0\">GitHub Sayfas\u0131:<\/strong> <!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><a class=\"ng-star-inserted\" href=\"https:\/\/github.com\/api7\/aisix\" target=\"_blank\" rel=\"noopener\" data-hveid=\"0\" data-ved=\"0CAAQ_4QMahgKEwjK-LDRu82VAxUAAAAAHQAAAAAQhgE\">github.com\/api7\/aisix<\/a><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><\/p>\n<p data-path-to-node=\"18\">&nbsp;<\/p>\n<div id=\"model-response-message-contentr_23853f93a4640822\" class=\"markdown markdown-main-panel enable-luminous-fast-follows enable-updated-hr-color stronger\" dir=\"ltr\" aria-busy=\"false\" aria-live=\"polite\">\n<p data-path-to-node=\"0\">AISIX a\u011f ge&ccedil;idinin ger&ccedil;ek hayatta nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 anlamak i&ccedil;in basit bir <strong data-path-to-node=\"0\" data-index-in-node=\"79\">Senaryo<\/strong> ve bu senaryoya ait <strong data-path-to-node=\"0\" data-index-in-node=\"107\">\u0130stek\/Yan\u0131t<\/strong> &ouml;rne\u011fine g&ouml;z atal\u0131m.<\/p>\n<h3 data-path-to-node=\"1\">&Ouml;rnek Senaryo: &Ccedil;oklu Yapay Zek&acirc; Sa\u011flay\u0131c\u0131s\u0131 Kullan\u0131m\u0131 (Model Ge&ccedil;i\u015fi)<\/h3>\n<p data-path-to-node=\"2\">\u015eirketiniz b&uuml;nyesinde bir chatbot geli\u015ftirdi\u011finizi ve uygulaman\u0131z\u0131n normalde <strong data-path-to-node=\"2\" data-index-in-node=\"77\">OpenAI (GPT-4o)<\/strong> kulland\u0131\u011f\u0131n\u0131 d&uuml;\u015f&uuml;nelim. Ancak maliyetleri d&uuml;\u015f&uuml;rmek veya alternatifleri test etmek i&ccedil;in baz\u0131 istekleri <strong data-path-to-node=\"2\" data-index-in-node=\"195\">Google Gemini<\/strong> veya <strong data-path-to-node=\"2\" data-index-in-node=\"214\">DeepSeek<\/strong> modeline y&ouml;nlendirmek istiyorsunuz.<\/p>\n<p data-path-to-node=\"3\">AISIX olmadan, kodunuza her iki sa\u011flay\u0131c\u0131n\u0131n da SDK'sini eklemeniz ve gelen iste\u011fe g&ouml;re farkl\u0131 kod bloklar\u0131 &ccedil;al\u0131\u015ft\u0131rman\u0131z gerekir. <strong data-path-to-node=\"3\" data-index-in-node=\"131\">AISIX ile ise kodunuzu hi&ccedil; de\u011fi\u015ftirmeden<\/strong> sadece a\u011f ge&ccedil;idine g&ouml;nderdi\u011finiz <code data-path-to-node=\"3\" data-index-in-node=\"205\">model<\/code> parametresini de\u011fi\u015ftirmeniz yeterlidir.<\/p>\n<h3 data-path-to-node=\"5\">1. AISIX Yap\u0131land\u0131rmas\u0131 (Control Plane \/ Admin API)<\/h3>\n<p data-path-to-node=\"6\">\u0130lk olarak AISIX'e arkadaki yapay zek&acirc; sa\u011flay\u0131c\u0131lar\u0131n\u0131 (Upstreams) ve API anahtarlar\u0131n\u0131 bir kez tan\u0131mlars\u0131n\u0131z. (Bu i\u015flem genellikle AISIX aray&uuml;z&uuml;nden veya API ile yap\u0131l\u0131r):<\/p>\n<ul data-path-to-node=\"7\">\n<li>\n<p data-path-to-node=\"7,0,0\"><code data-path-to-node=\"7,0,0\" data-index-in-node=\"0\">openai-backend<\/code> -&gt; OpenAI API anahtar\u0131n\u0131z ile ba\u011fl\u0131.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"7,1,0\"><code data-path-to-node=\"7,1,0\" data-index-in-node=\"0\">gemini-backend<\/code> -&gt; Google AI Studio anahtar\u0131n\u0131z ile ba\u011fl\u0131.<\/p>\n<\/li>\n<\/ul>\n<h3 data-path-to-node=\"9\">2. Uygulaman\u0131zdan \u0130stek G&ouml;nderme (Client Request)<\/h3>\n<p data-path-to-node=\"10\">Uygulaman\u0131z (kodunuz), OpenAI SDK'sini kullanmaya devam eder ancak istekleri direkt OpenAI'a de\u011fil, kendi sunucunuzda &ccedil;al\u0131\u015fan <strong data-path-to-node=\"10\" data-index-in-node=\"126\">AISIX<\/strong> a\u011f ge&ccedil;idine y&ouml;nlendirir (<code data-path-to-node=\"10\" data-index-in-node=\"157\">base_url<\/code> de\u011fi\u015ftirilir).<\/p>\n<h4 data-path-to-node=\"11\">&Ouml;rnek \u0130stek (cURL ile):<\/h4>\n<p data-path-to-node=\"12\">A\u015fa\u011f\u0131daki istekte dikkat ederseniz <code data-path-to-node=\"12\" data-index-in-node=\"35\">model<\/code> olarak <code data-path-to-node=\"12\" data-index-in-node=\"48\">gemini-2.5-flash<\/code> talep ediliyor ancak istek format\u0131 tamamen OpenAI standartlar\u0131ndad\u0131r (Chat Completions API).<\/p>\n<!----><!----><!----><!----><!----><!----><!----><!---->\n<div class=\"code-block ng-tns-c4069305417-22 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjK-LDRu82VAxUAAAAAHQAAAAAQlQE\"><!---->\n<div class=\"formatted-code-block-internal-container ng-tns-c4069305417-22\">\n<div class=\"animated-opacity ng-tns-c4069305417-22\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c4069305417-22 ng-star-inserted\"><span class=\"ng-tns-c4069305417-22\">Bash<\/span>\n<div class=\"buttons ng-tns-c4069305417-22 ng-star-inserted\"><!----><!----><button class=\"mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted\" aria-label=\"Kodu indir\"><!----><!----><!----><!----><\/button><!----><!----><!----><!----><!----><!----><!----><!----><!----><button class=\"mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted\" aria-label=\"Kodu kopyala\"><!----><!----><!----><!----><\/button><!----><!----><!----><!----><!----><!----><\/div>\n<!----><!----><\/div>\n<!---->\n<pre class=\"ng-tns-c4069305417-22\"><code class=\"code-container formatted ng-tns-c4069305417-22\" role=\"text\" data-test-id=\"code-content\">curl http:\/\/localhost:9080\/v1\/chat\/completions \\\n  -H <span class=\"hljs-string\">\"Content-Type: application\/json\"<\/span> \\\n  -H <span class=\"hljs-string\">\"Authorization: Bearer aisix-ornek-api-anahtari\"<\/span> \\\n  -d <span class=\"hljs-string\">'{\n    \"model\": \"gemini-2.5-flash\",\n    \"messages\": [\n      {\n        \"role\": \"user\",\n        \"content\": \"Rust programlama dili neden bu kadar pop&uuml;ler?\"\n      }\n    ],\n    \"stream\": false\n  }'<\/span>\n<\/code><\/pre>\n<!----><\/div>\n<\/div>\n<\/div>\n<!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!---->\n<h3 data-path-to-node=\"15\">3. Arka Planda Ne Oluyor? (AISIX'in G&ouml;revi)<\/h3>\n<ol start=\"1\" data-path-to-node=\"16\">\n<li>\n<p data-path-to-node=\"16,0,0\"><strong data-path-to-node=\"16,0,0\" data-index-in-node=\"0\">\u0130ste\u011fi Kar\u015f\u0131lama ve Do\u011frulama:<\/strong> AISIX iste\u011fi <code data-path-to-node=\"16,0,0\" data-index-in-node=\"44\">9080<\/code> portundan al\u0131r. <code data-path-to-node=\"16,0,0\" data-index-in-node=\"65\">aisix-ornek-api-anahtari<\/code> bilgisini kontrol eder. E\u011fer bu kullan\u0131c\u0131n\u0131n (veya uygulaman\u0131n) token b&uuml;t&ccedil;esi dolduysa iste\u011fi an\u0131nda reddeder (Maliyet Kontrol&uuml;).<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"16,1,0\"><strong data-path-to-node=\"16,1,0\" data-index-in-node=\"0\">&Ouml;nbellek Kontrol&uuml; (Caching):<\/strong> Ayn\u0131 soru daha &ouml;nce sorulduysa, arkadaki yapay zek&acirc; modeline hi&ccedil; gitmeden kay\u0131tl\u0131 yan\u0131t\u0131 d&ouml;ner (H\u0131z ve Tasarruf).<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"16,2,0\"><strong data-path-to-node=\"16,2,0\" data-index-in-node=\"0\">Protokol D&ouml;n&uuml;\u015ft&uuml;rme (Translation):<\/strong> \u0130stek &ouml;nbellekte yoksa, AISIX <code data-path-to-node=\"16,2,0\" data-index-in-node=\"65\">gemini-2.5-flash<\/code> modelinin Google Gemini'a ait oldu\u011funu anlar. OpenAI format\u0131ndaki bu JSON verisini otomatik olarak Google Gemini API'sinin bekledi\u011fi formata d&ouml;n&uuml;\u015ft&uuml;r&uuml;r.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"16,3,0\"><strong data-path-to-node=\"16,3,0\" data-index-in-node=\"0\">G&uuml;venlik Kontrol&uuml; (Guardrails):<\/strong> Kullan\u0131c\u0131n\u0131n sordu\u011fu soruda \u015firket d\u0131\u015f\u0131na s\u0131zmamas\u0131 gereken bir veri (kredi kart\u0131, TCKN vb.) olup olmad\u0131\u011f\u0131n\u0131 kontrol eder.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"16,4,0\"><strong data-path-to-node=\"16,4,0\" data-index-in-node=\"0\">\u0130ste\u011fi \u0130letme:<\/strong> \u0130ste\u011fi ger&ccedil;ek Google Gemini sunucular\u0131na iletir.<\/p>\n<\/li>\n<\/ol>\n<h3 data-path-to-node=\"18\">4. Yan\u0131t\u0131n \u0130letilmesi (Response)<\/h3>\n<p data-path-to-node=\"19\">Google Gemini'dan gelen yan\u0131t\u0131 alan AISIX, bu yan\u0131t\u0131 tekrar <strong data-path-to-node=\"19\" data-index-in-node=\"60\">OpenAI format\u0131na d&ouml;n&uuml;\u015ft&uuml;rerek<\/strong> uygulaman\u0131za kusursuz bir \u015fekilde teslim eder:<\/p>\n<!----><!----><!----><!----><!----><!----><!----><!---->\n<div class=\"code-block ng-tns-c4069305417-23 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwjK-LDRu82VAxUAAAAAHQAAAAAQlgE\"><!---->\n<div class=\"formatted-code-block-internal-container ng-tns-c4069305417-23\">\n<div class=\"animated-opacity ng-tns-c4069305417-23\">\n<div class=\"code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c4069305417-23 ng-star-inserted\"><span class=\"ng-tns-c4069305417-23\">JSON<\/span>\n<div class=\"buttons ng-tns-c4069305417-23 ng-star-inserted\"><!----><!----><button class=\"mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted\" aria-label=\"Kodu indir\"><!----><!----><!----><!----><\/button><!----><!----><!----><!----><!----><!----><!----><!----><!----><button class=\"mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted\" aria-label=\"Kodu kopyala\"><!----><!----><!----><!----><\/button><!----><!----><!----><!----><!----><!----><\/div>\n<!----><!----><\/div>\n<!---->\n<pre class=\"ng-tns-c4069305417-23\"><code class=\"code-container formatted ng-tns-c4069305417-23\" role=\"text\" data-test-id=\"code-content\">{\n  <span class=\"hljs-attr\">\"id\"<\/span>: <span class=\"hljs-string\">\"chatcmpl-aisix-unique-id\"<\/span>,\n  <span class=\"hljs-attr\">\"object\"<\/span>: <span class=\"hljs-string\">\"chat.completion\"<\/span>,\n  <span class=\"hljs-attr\">\"created\"<\/span>: <span class=\"hljs-number\">1717113600<\/span>,\n  <span class=\"hljs-attr\">\"model\"<\/span>: <span class=\"hljs-string\">\"gemini-2.5-flash\"<\/span>,\n  <span class=\"hljs-attr\">\"choices\"<\/span>: [\n    {\n      <span class=\"hljs-attr\">\"index\"<\/span>: <span class=\"hljs-number\">0<\/span>,\n      <span class=\"hljs-attr\">\"message\"<\/span>: {\n        <span class=\"hljs-attr\">\"role\"<\/span>: <span class=\"hljs-string\">\"assistant\"<\/span>,\n        <span class=\"hljs-attr\">\"content\"<\/span>: <span class=\"hljs-string\">\"Rust, bellek g&uuml;venli\u011fini (memory safety) &ccedil;al\u0131\u015fma zaman\u0131 (runtime) yerine derleme zaman\u0131nda (compile-time) garantiledi\u011fi ve y&uuml;ksek performans sundu\u011fu i&ccedil;in pop&uuml;lerdir...\"<\/span>\n      },\n      <span class=\"hljs-attr\">\"finish_reason\"<\/span>: <span class=\"hljs-string\">\"stop\"<\/span>\n    }\n  ],\n  <span class=\"hljs-attr\">\"usage\"<\/span>: {\n    <span class=\"hljs-attr\">\"prompt_tokens\"<\/span>: <span class=\"hljs-number\">12<\/span>,\n    <span class=\"hljs-attr\">\"completion_tokens\"<\/span>: <span class=\"hljs-number\">35<\/span>,\n    <span class=\"hljs-attr\">\"total_tokens\"<\/span>: <span class=\"hljs-number\">47<\/span>\n  }\n}\n<\/code><\/pre>\n<!----><\/div>\n<\/div>\n<\/div>\n<!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!---->\n<h3 data-path-to-node=\"21\">&Ouml;zetle Bu &Ouml;rnek Ne Sa\u011flad\u0131?<\/h3>\n<p data-path-to-node=\"22\">Yaz\u0131l\u0131m ekibiniz kod taban\u0131nda tek bir sat\u0131r de\u011fi\u015fiklik yapmadan, sadece a\u011f ge&ccedil;idine g&ouml;nderilen istek parametresini de\u011fi\u015ftirerek OpenAI'dan Gemini'a (veya desteklenen di\u011fer onlarca modele) an\u0131nda ge&ccedil;i\u015f yapabildi. Bu esnada harcanan token'lar (<code data-path-to-node=\"22\" data-index-in-node=\"243\">usage<\/code> objesi) AISIX taraf\u0131ndan panelde raporlanmak &uuml;zere arka planda kaydedildi.<\/p>\n<\/div>\n<\/div>","excerpt":"AISIX, Apache APISIX projesinin arkas\u0131ndaki ekip olan API7.ai taraf\u0131ndan geli\u015ftirilen, B\u00fcy\u00fck Dil Modelleri (LLM) ve yapay zek\u00e2 ajanlar\u0131 (AI Agents) i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015f a\u00e7\u0131k kaynakl\u0131 bir yapay zek\u00e2 a\u011f ge\u00e7ididir (AI Gateway).","created_at":"2026-07-12 18:43:40","updated_at":"2026-09-23 17:20:13","category_id":9,"view_count":321,"reading_time":7,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2026-07-12 15:43:40","featured_image":"\/uploads\/images\/2026\/07\/6a53b61a3bcbf_1783871002.jpg","slug":"apache-apisix-aisix-ai-gateway","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":404,"title":"llm-checker ile Do\u011fru LLM'i An\u0131nda Bul","content":"<p class=\"lead\">Her ge&ccedil;en g&uuml;n onlarca yeni LLM piyasaya &ccedil;\u0131k\u0131yor. GPT-4o mu, Claude mu, Llama m\u0131, Gemini mi? Bu soruya cevap bulmak art\u0131k tam bir u\u011fra\u015f haline geldi.&nbsp;<strong>llm-checker<\/strong>, terminal &uuml;zerinden &ccedil;al\u0131\u015fan hafif bir CLI arac\u0131d\u0131r ve sana do\u011fru modeli tavsiye etmek i&ccedil;in tasarlanm\u0131\u015ft\u0131r.<\/p>\n<h2>1. Kurulum: Global Y&uuml;kleme<\/h2>\n<p>\u0130lk ad\u0131m, paketi npm arac\u0131l\u0131\u011f\u0131yla global olarak y&uuml;klemek. B&ouml;ylece sisteminizde herhangi bir dizinden do\u011frudan &ccedil;a\u011f\u0131rabilirsiniz:<\/p>\n<pre class=\"language-markup\"><code>C:\\Users\\OnderL&gt;npm install -g llm-checker<\/code><\/pre>\n<p>Buradaki&nbsp;<code>-g<\/code>&nbsp;bayra\u011f\u0131 (global flag), paketi yaln\u0131zca mevcut proje klas&ouml;r&uuml;ne de\u011fil, t&uuml;m sisteme y&uuml;kler. Bu sayede&nbsp;<code>llm-checker<\/code> komutunu istedi\u011fin her yerden &ccedil;al\u0131\u015ft\u0131rabilirsin.<\/p>\n<p><em><strong>\u0130pucu:<\/strong>&nbsp;Windows'ta kurulum s\u0131ras\u0131nda&nbsp;\"permission denied\"&nbsp;hatas\u0131 al\u0131yorsan, terminali Y&ouml;netici olarak &ccedil;al\u0131\u015ft\u0131r (Run as Administrator). macOS\/Linux'ta ise komutun ba\u015f\u0131na&nbsp;<code>sudo<\/code> ekle.<\/em><\/p>\n<p>&Ouml;rnek &Ccedil;\u0131kt\u0131&nbsp;<\/p>\n<p><em><img src=\"..\/..\/..\/uploads\/images\/2026\/03\/69c0f685176c3_1774253701.png\"><\/em><\/p>\n<p><em><img src=\"..\/..\/..\/uploads\/images\/2026\/03\/69c0f6a6564a1_1774253734.png\"><\/em><\/p>\n<h2>2. Tavsiye Modu: recommend<\/h2>\n<p>Kurulum tamamland\u0131ktan sonra as\u0131l sihir ba\u015fl\u0131yor.&nbsp;<code>recommend<\/code> alt komutu, kullan\u0131m senaryona g&ouml;re hangi LLM'in sana en uygun oldu\u011funu analiz eder:<\/p>\n<p>&nbsp;<\/p>\n<p>Ara&ccedil; sana birka&ccedil; soru sorar; b&uuml;t&ccedil;en, gecikme hassasiyetin, ba\u011flam penceresi ihtiyac\u0131n ve birincil kullan\u0131m senaryonu gibi fakt&ouml;rler &uuml;zerinden bir skor hesaplar ve en uygun modeli s\u0131ralar.<\/p>\n<p>&nbsp;<\/p>\n<h2>Ad\u0131m Ad\u0131m Kullan\u0131m Ak\u0131\u015f\u0131<\/h2>\n<ol class=\"step-list\">\n<li>\n<div class=\"step-num\">Node.js &amp; npm'nin Kurulu Oldu\u011fundan Emin Ol<\/div>\n<div class=\"step-content\">\n<p>Terminalde&nbsp;<code>node -v<\/code>&nbsp;ve&nbsp;<code>npm -v<\/code>&nbsp;&ccedil;al\u0131\u015ft\u0131r. Her ikisi de s&uuml;r&uuml;m numaras\u0131 d&ouml;nd&uuml;r&uuml;yorsa haz\u0131rs\u0131n.<\/p>\n<\/div>\n<\/li>\n<li>\n<div class=\"step-content\">\n<h4>Global Kurulum Yap<\/h4>\n<p><code>npm install -g llm-checker<\/code>&nbsp;komutunu &ccedil;al\u0131\u015ft\u0131r; kurulum birka&ccedil; saniye s&uuml;rer.<\/p>\n<\/div>\n<\/li>\n<li>\n<div class=\"step-content\">\n<h4>recommend Komutunu &Ccedil;al\u0131\u015ft\u0131r<\/h4>\n<p><code>llm-checker recommend<\/code>&nbsp;yaz\u0131p Enter'a bas. Kar\u015f\u0131na &ccedil;\u0131kan sorulara d&uuml;r&uuml;st&ccedil;e cevap ver.<\/p>\n<\/div>\n<\/li>\n<li>\n<div class=\"step-content\">\n<h4>Sonu&ccedil;lar\u0131 De\u011ferlendir<\/h4>\n<p>Ara&ccedil; sana s\u0131ral\u0131 bir model listesi ve her model i&ccedil;in skor, fiyat ve notlar sunar.<\/p>\n<\/div>\n<\/li>\n<li>\n<div class=\"step-content\">\n<h4>Modeli Entegre Et<\/h4>\n<p>Tavsiye edilen modelin API'sini projenize ekleyerek geli\u015ftirmeye ba\u015flayabilirsin.<\/p>\n<p>&nbsp;<\/p>\n<h2>Ekstra Komutlar<\/h2>\n<p>Sadece&nbsp;<code>recommend<\/code> ile s\u0131n\u0131rl\u0131 de\u011fil. Paketin sundu\u011fu di\u011fer faydal\u0131 komutlar:<\/p>\n<pre class=\"language-markup\"><code>llm-checker list\n&rarr; Desteklenen t&uuml;m modelleri listeler\nllm-checker compare gpt-4o claude-sonnet\n&rarr; \u0130ki modeli yan yana kar\u015f\u0131la\u015ft\u0131r\u0131r\nllm-checker --help\n&rarr; T&uuml;m se&ccedil;enekleri ve bayraklar\u0131 g&ouml;sterir<\/code><\/pre>\n<p>&nbsp;<\/p>\n<h3>&Ouml;zet Olarak<\/h3>\n<p>\u0130ki komutla &mdash;&nbsp;<code>npm install -g llm-checker<\/code>&nbsp;ve&nbsp;<code>llm-checker recommend<\/code> &mdash; y&uuml;zlerce LLM aras\u0131ndaki kaostan kurtulabilirsin. Bir sonraki projen i&ccedil;in hangi modeli se&ccedil;ece\u011fini art\u0131k terminal sana s&ouml;yl&uuml;yor.<\/p>\n<p><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">llm-checker<\/code> fikir olarak g&uuml;zel, ama bu &ccedil;\u0131kt\u0131 <strong>g&uuml;venilir de\u011fil<\/strong>. Model veritaban\u0131 hatal\u0131, embedding\/generative ayr\u0131m\u0131 yapam\u0131yor. arac\u0131n potansiyeli var ama \u015fu an <strong>kritik do\u011fruluk sorunlar\u0131<\/strong> mevcut. &ouml;nerileri k&ouml;r&uuml; k&ouml;r&uuml;ne uygulamadan &ouml;nce Ollama Hub'dan do\u011frulamalar\u0131n\u0131 &ouml;neriyorum.<\/p>\n<p>Do\u011frudan \"hardware scan &rarr; model &ouml;ner\" format\u0131nda llm-checker'a alternatif &ccedil;ok az. Ama i\u015flevsel alternatifler var:<\/p>\n<hr>\n<h2>En \u0130yi Alternatifler<\/h2>\n<h3>1. LM Studio (GUI &mdash; En G&uuml;&ccedil;l&uuml; Alternatif)<\/h3>\n<p>Donan\u0131m\u0131 otomatik tespit edip optimize eden, Hugging Face'den model arama\/indirme ve g&ouml;rsel performans g&ouml;stergeleri sunan bir aray&uuml;ze sahip. llm-checker'\u0131n yapt\u0131\u011f\u0131n\u0131 GUI &uuml;zerinden &ccedil;ok daha g&uuml;venilir yap\u0131yor. Windows'ta Intel Arc GPU'lar\u0131 da Vulkan offloading ile destekliyor &mdash; senin sistemin i&ccedil;in &ouml;nemli bir art\u0131.<\/p>\n<pre><code>lmstudio.ai &rarr; indir &rarr; Hardware-aware model browser\n<\/code><\/pre>\n<hr>\n<h3>2. Ollama (CLI &mdash; Ama Farkl\u0131 Bir Ama&ccedil;)<\/h3>\n<p>Docker'\u0131 and\u0131ran tasar\u0131m\u0131yla, modeli ismiyle &ccedil;ekip tek komutla &ccedil;al\u0131\u015ft\u0131rabiliyorsun; OpenAI uyumlu yerel API sunuyor. Model &ouml;nermez ama &ouml;nerdikten sonra &ccedil;al\u0131\u015ft\u0131rmak i&ccedil;in standart.<\/p>\n<hr>\n<h3>3. GPT4All<\/h3>\n<p>Terminal veya GUI &uuml;zerinden &ccedil;al\u0131\u015fan, donan\u0131m\u0131 okuyup uyumlu modelleri filtreleyen hafif bir ara&ccedil;. llm-checker'a en yak\u0131n ruh hali bu.<\/p>\n<hr>\n<h2>D&uuml;r&uuml;st Kar\u015f\u0131la\u015ft\u0131rma<\/h2>\n<table>\n<thead>\n<tr>\n<th>Ara&ccedil;<\/th>\n<th>Model &Ouml;neri<\/th>\n<th>Donan\u0131m Okuma<\/th>\n<th>G&uuml;venilirlik<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>llm-checker<\/td>\n<td>\u2705 Var<\/td>\n<td>\u2705 Var<\/td>\n<td>\u26a0\ufe0f Hatal\u0131 sonu&ccedil;lar<\/td>\n<\/tr>\n<tr>\n<td>LM Studio<\/td>\n<td>\u2705 Var<\/td>\n<td>\u2705 Var<\/td>\n<td>\u2705 G&uuml;venilir<\/td>\n<\/tr>\n<tr>\n<td>GPT4All<\/td>\n<td>K\u0131smi<\/td>\n<td>\u2705 Var<\/td>\n<td>\u2705 G&uuml;venilir<\/td>\n<\/tr>\n<tr>\n<td>Ollama<\/td>\n<td>\u274c Yok<\/td>\n<td>K\u0131smi<\/td>\n<td>\u2705 G&uuml;venilir<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr>\n<p>&nbsp;<\/p>\n<\/div>\n<\/li>\n<\/ol>","excerpt":"iki basit terminal komutuyla y\u00fczlerce dil modelini kar\u015f\u0131la\u015ft\u0131r, ihtiyac\u0131na en uygun olan\u0131 bul.","created_at":"2026-03-23 11:09:15","updated_at":"2026-09-23 15:46:19","category_id":9,"view_count":676,"reading_time":4,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2026-03-23 08:09:36","featured_image":"\/uploads\/images\/2026\/03\/69c0f6e3ee119_1774253795.png","slug":"llm-checker-ile-dogru-llm-i-aninda-bul","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":384,"title":"Firefox'ta Split Tab \u00d6zelli\u011fi ve Dikey Sekmeler ve Kenar \u00c7ubu\u011fu\u00a0","content":"<div id=\"model-response-message-contentr_eca09a5fa1ffcf37\" class=\"markdown markdown-main-panel stronger enable-updated-hr-color\" dir=\"ltr\" aria-live=\"polite\" aria-busy=\"false\"><br>Firefox'ta Verimlilik Devrimi: Split Tab &Ouml;zelli\u011fi Nas\u0131l Aktif Edilir?\n<p data-path-to-node=\"4\">&Ccedil;oklu g&ouml;rev (multitasking) denildi\u011finde akla gelen en b&uuml;y&uuml;k sorunlardan biri, iki farkl\u0131 sekmeyi ayn\u0131 anda g&ouml;rmek i&ccedil;in pencereleri manuel olarak boyutland\u0131rmakt\u0131r. Firefox 146.0 s&uuml;r&uuml;m&uuml;yle birlikte gelen <strong data-path-to-node=\"4\" data-index-in-node=\"203\">Split Tab<\/strong>, taray\u0131c\u0131 penceresini ikiye b&ouml;lerek bu zahmeti ortadan kald\u0131r\u0131yor.<\/p>\n<h3 data-path-to-node=\"5\">Neden Split Tab Kullanmal\u0131s\u0131n\u0131z?<\/h3>\n<ul data-path-to-node=\"6\">\n<li>\n<p data-path-to-node=\"6,0,0\"><strong data-path-to-node=\"6,0,0\" data-index-in-node=\"0\">Dok&uuml;man Takibi:<\/strong> Bir tarafta teknik d&ouml;k&uuml;man\u0131 okurken di\u011fer tarafta kod yazabilir veya uygulama yapabilirsiniz.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"6,1,0\"><strong data-path-to-node=\"6,1,0\" data-index-in-node=\"0\">Fiyat Kar\u015f\u0131la\u015ft\u0131rma:<\/strong> \u0130ki farkl\u0131 e-ticaret sitesini yan yana a&ccedil;arak en iyi teklifi an\u0131nda g&ouml;rebilirsiniz.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"6,2,0\"><strong data-path-to-node=\"6,2,0\" data-index-in-node=\"0\">Video ve Not Alma:<\/strong> Bir sekmede e\u011fitim videosu izlerken di\u011ferinde notlar\u0131n\u0131z\u0131 tutabilirsiniz.<\/p>\n<\/li>\n<\/ul>\n<hr data-path-to-node=\"7\">\n<h2 data-path-to-node=\"8\">\ud83d\ude80 Ad\u0131m Ad\u0131m Split Tab Aktivasyonu<\/h2>\n<p data-path-to-node=\"9\">Bu &ouml;zellik \u015fu an i&ccedil;in varsay\u0131lan olarak kapal\u0131 geliyor. Etkinle\u015ftirmek i&ccedil;in Firefox'un \"kalbine\", yani <code data-path-to-node=\"9\" data-index-in-node=\"103\">about:config<\/code> sayfas\u0131na girmemiz gerekiyor.<\/p>\n<h3 data-path-to-node=\"10\">1. S&uuml;r&uuml;m Kontrol&uuml;<\/h3>\n<p data-path-to-node=\"11\">&Ouml;zelli\u011fin g&ouml;r&uuml;nmesi i&ccedil;in <strong data-path-to-node=\"11\" data-index-in-node=\"25\">Firefox 146.0<\/strong> veya daha yeni bir s&uuml;r&uuml;me sahip olman\u0131z \u015fart. Sa\u011f &uuml;stteki men&uuml;den <em data-path-to-node=\"11\" data-index-in-node=\"105\">Yard\u0131m &gt; Firefox Hakk\u0131nda<\/em> k\u0131sm\u0131na giderek s&uuml;r&uuml;m&uuml;n&uuml;z&uuml; kontrol edin.<\/p>\n<h3 data-path-to-node=\"12\">2. Geli\u015fmi\u015f Ayarlara Giri\u015f<\/h3>\n<p>Adres &ccedil;ubu\u011funa \u015fu komutu yaz\u0131n ve Enter'a bas\u0131n:<\/p>\n<p>about:config<\/p>\n<p>\"Riski kabul ederek devam et\" butonuna t\u0131klayarak geli\u015fmi\u015f ayarlar panelini a&ccedil;\u0131n.<\/p>\n<h3 data-path-to-node=\"14\">3. &Ouml;zelli\u011fi Bulun ve Etkinle\u015ftirin<\/h3>\n<p>Arama &ccedil;ubu\u011funa a\u015fa\u011f\u0131daki kodu kopyalay\u0131n:<\/p>\n<p>browser.tabs.splitView.enabled<\/p>\n<p data-path-to-node=\"16\">&Ccedil;\u0131kan sonucun yan\u0131ndaki de\u011fi\u015ftirme butonuna t\u0131klayarak de\u011feri <strong data-path-to-node=\"16\" data-index-in-node=\"62\">false<\/strong> konumundan <strong data-path-to-node=\"16\" data-index-in-node=\"79\">true<\/strong> konumuna getirin.<\/p>\n<h3 data-path-to-node=\"17\">4. Taray\u0131c\u0131y\u0131 Yeniden Ba\u015flat\u0131n<\/h3>\n<p data-path-to-node=\"18\">De\u011fi\u015fikli\u011fin tam olarak i\u015flenmesi i&ccedil;in Firefox'u kapat\u0131p tekrar a&ccedil;man\u0131z &ouml;nerilir.<\/p>\n<hr data-path-to-node=\"19\">\n<h2 data-path-to-node=\"20\">\ud83d\udca1 Split Tab Nas\u0131l Kullan\u0131l\u0131r?<\/h2>\n<p data-path-to-node=\"21\">&Ouml;zelli\u011fi aktif ettikten sonra kullan\u0131m\u0131 olduk&ccedil;a sezgiseldir:<\/p>\n<ol start=\"1\" data-path-to-node=\"22\">\n<li>\n<p data-path-to-node=\"22,0,0\">B&ouml;lmek istedi\u011finiz sekmelerden birine <strong data-path-to-node=\"22,0,0\" data-index-in-node=\"38\">sa\u011f t\u0131klay\u0131n<\/strong>.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"22,1,0\">Men&uuml;den <strong data-path-to-node=\"22,1,0\" data-index-in-node=\"8\">\"Split Tab\"<\/strong> (veya Sekmeyi B&ouml;l) se&ccedil;ene\u011fini bulun.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"22,2,0\">Yan yana gelen pencerelerde &ccedil;al\u0131\u015fman\u0131n keyfini &ccedil;\u0131kar\u0131n!<\/p>\n<\/li>\n<\/ol>\n<blockquote data-path-to-node=\"23\">\n<p data-path-to-node=\"23,0\"><strong data-path-to-node=\"23,0\" data-index-in-node=\"0\">\u0130pucu:<\/strong> Sekmeleri ay\u0131rmak veya b&ouml;lme oran\u0131n\u0131 de\u011fi\u015ftirmek i&ccedil;in iki sekme aras\u0131ndaki s\u0131n\u0131r &ccedil;izgisini s&uuml;r&uuml;kleyerek alan\u0131n\u0131z\u0131 &ouml;zelle\u015ftirebilirsiniz.<\/p>\n<\/blockquote>\n<hr data-path-to-node=\"24\">\n<p data-path-to-node=\"26\">Firefox, Chromium tabanl\u0131 olmayan tek b&uuml;y&uuml;k taray\u0131c\u0131 olarak &ouml;zg&uuml;n &ouml;zellikler geli\u015ftirmeye devam ediyor. Split Tab &ouml;zelli\u011fi, &ouml;zellikle tek monit&ouml;rl&uuml; kurulumlarda &uuml;retkenli\u011fi %50'ye kadar art\u0131rabilen bir ara&ccedil;. Hen&uuml;z \"Nightly\" veya test a\u015famas\u0131nda oldu\u011fu i&ccedil;in baz\u0131 ufak hatalarla kar\u015f\u0131la\u015fabilirsiniz ancak genel performans\u0131 olduk&ccedil;a tatmin edici.<\/p>\n<div id=\"model-response-message-contentr_fcba003a46eae515\" class=\"markdown markdown-main-panel stronger enable-updated-hr-color\" dir=\"ltr\" aria-live=\"polite\" aria-busy=\"false\">\n<p data-path-to-node=\"0\">Harika bir se&ccedil;im! Firefox&rsquo;un son d&ouml;nemde ge&ccedil;irdi\u011fi en b&uuml;y&uuml;k yap\u0131sal de\u011fi\u015fimlerden biri olan <strong data-path-to-node=\"0\" data-index-in-node=\"92\">\"Vertical Tabs\" (Dikey Sekmeler)<\/strong> ve beraberindeki <strong data-path-to-node=\"0\" data-index-in-node=\"142\">\"Tab Sidebar\"<\/strong> (Sekme Kenar &Ccedil;ubu\u011fu) &ouml;zelliklerine dal\u0131yoruz. &Ouml;zellikle ultra geni\u015f (ultrawide) monit&ouml;r kullananlar i&ccedil;in bu &ouml;zellik ger&ccedil;ek bir kurtar\u0131c\u0131.<\/p>\n<p data-path-to-node=\"1\">\u0130\u015fte bu yeni nesil gezinme deneyimini aktif etmek ve optimize etmek i&ccedil;in haz\u0131rlad\u0131\u011f\u0131m detayl\u0131 rehber:<\/p>\n<hr data-path-to-node=\"2\">\n<h1 data-path-to-node=\"3\">Firefox'un Yeni Y&uuml;z&uuml;: Dikey Sekmeler ve Kenar &Ccedil;ubu\u011fu&nbsp;<\/h1>\n<p data-path-to-node=\"4\">Geleneksel taray\u0131c\u0131 mimarisinde sekmeler &uuml;stte yatay olarak dizilir. Ancak 20'den fazla sekme a&ccedil;t\u0131\u011f\u0131n\u0131zda, bu sekmelerin ba\u015fl\u0131klar\u0131 kaybolur ve sadece ikonlar kal\u0131r. Firefox'un yeni <strong data-path-to-node=\"4\" data-index-in-node=\"182\">Dikey Sekme<\/strong> &ouml;zelli\u011fi, sekmeleri sol tarafa bir liste halinde dizerek hem ba\u015fl\u0131klar\u0131n okunabilir kalmas\u0131n\u0131 sa\u011flar hem de dikey ekran alan\u0131n\u0131 daha verimli kullan\u0131r.<\/p>\n<h2 data-path-to-node=\"5\">\ud83d\udee0\ufe0f Dikey Sekmeleri Nas\u0131l Aktif Edersiniz?<\/h2>\n<p data-path-to-node=\"6\">Bu &ouml;zellik \u015fu an i&ccedil;in Firefox'un kararl\u0131 (Stable) s&uuml;r&uuml;m&uuml;nde gizli bir \"deney\" olarak yer al\u0131yor. Etkinle\u015ftirmek i&ccedil;in \u015fu ad\u0131mlar\u0131 izleyin:<\/p>\n<ol start=\"1\" data-path-to-node=\"7\">\n<li>\n<p data-path-to-node=\"7,0,0\"><strong data-path-to-node=\"7,0,0\" data-index-in-node=\"0\">Geli\u015fmi\u015f Ayarlar:<\/strong> Adres &ccedil;ubu\u011funa <code data-path-to-node=\"7,0,0\" data-index-in-node=\"33\">about:config<\/code> yaz\u0131n.<\/p>\n<\/li>\n<li>\n<p>Arama Yap\u0131n: Arama &ccedil;ubu\u011funa \u015fu sat\u0131r\u0131 kopyalay\u0131n:<\/p>\n<p>sidebar.verticalTabs<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"7,2,0\"><strong data-path-to-node=\"7,2,0\" data-index-in-node=\"0\">Aktif Edin:<\/strong> De\u011feri &uuml;zerine &ccedil;ift t\u0131klayarak <strong data-path-to-node=\"7,2,0\" data-index-in-node=\"43\">true<\/strong> yap\u0131n.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"7,3,0\"><strong data-path-to-node=\"7,3,0\" data-index-in-node=\"0\">Ekstra &Ouml;zellik (Sidebar):<\/strong> E\u011fer sekmelerin yan\u0131nda tam te\u015fekk&uuml;ll&uuml; bir kenar &ccedil;ubu\u011fu da istiyorsan\u0131z, <code data-path-to-node=\"7,3,0\" data-index-in-node=\"99\">browser.sidebar.init.enabled<\/code> ayar\u0131n\u0131 da <strong data-path-to-node=\"7,3,0\" data-index-in-node=\"139\">true<\/strong> yap\u0131n.<\/p>\n<\/li>\n<\/ol>\n<hr data-path-to-node=\"8\">\n<h2 data-path-to-node=\"9\">\ud83d\ude80 Dikey Sekmelerin Sundu\u011fu 3 B&uuml;y&uuml;k Avantaj<\/h2>\n<h3 data-path-to-node=\"10\">1. S\u0131n\u0131rs\u0131z Okunabilirlik<\/h3>\n<p data-path-to-node=\"11\">&Uuml;stteki sekmeler s\u0131k\u0131\u015ft\u0131\u011f\u0131nda sadece ikonlar\u0131 g&ouml;r&uuml;rs&uuml;n&uuml;z. Dikey d&uuml;zende ise sekmeler bir liste format\u0131nda oldu\u011fu i&ccedil;in sayfa ba\u015fl\u0131klar\u0131 her zaman okunabilir kal\u0131r. Grupland\u0131rma yapmak ve arad\u0131\u011f\u0131n\u0131z sekmeyi bulmak &ccedil;ok daha h\u0131zl\u0131d\u0131r.<\/p>\n<h3 data-path-to-node=\"12\">2. Ak\u0131ll\u0131 Daraltma (Compact Mode)<\/h3>\n<p data-path-to-node=\"13\">Dikey kenar &ccedil;ubu\u011fu, &uuml;zerine gelmedi\u011finiz s&uuml;rece sadece ikonlar\u0131 g&ouml;sterecek \u015fekilde daralt\u0131labilir. Fareyi sol kenara yakla\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda panel geni\u015fleyerek ba\u015fl\u0131klar\u0131 g&ouml;sterir. Bu, ekran alan\u0131ndan maksimum tasarruf sa\u011flar.<\/p>\n<h3 data-path-to-node=\"14\">3. Sekme Gruplar\u0131 ile Entegrasyon<\/h3>\n<p data-path-to-node=\"15\">Firefox dikey sekmeleri, yeni \"Sekme Gruplar\u0131\" (Tab Grouping) &ouml;zelli\u011fiyle m&uuml;kemmel &ccedil;al\u0131\u015f\u0131r. Projelerinizi klas&ouml;r mant\u0131\u011f\u0131yla dikeyde toplamak, i\u015f ak\u0131\u015f\u0131n\u0131z\u0131 bir klas&ouml;r hiyerar\u015fisi gibi y&ouml;netmenizi sa\u011flar.<\/p>\n<hr data-path-to-node=\"16\">\n<h2 data-path-to-node=\"17\">\u2699\ufe0f Daha \u0130leri Seviye: G&ouml;r&uuml;n&uuml;m&uuml; &Ouml;zelle\u015ftirme<\/h2>\n<p data-path-to-node=\"18\">Dikey sekmeleri aktif ettikten sonra &uuml;stteki eski yatay sekme &ccedil;ubu\u011funun hala orada durdu\u011funu fark edeceksiniz. \u0130ki tarafta da sekme g&ouml;rmek istemiyorsan\u0131z, bunu <strong data-path-to-node=\"18\" data-index-in-node=\"160\">userChrome.css<\/strong> kullanarak tamamen gizleyebilirsiniz:<\/p>\n<blockquote data-path-to-node=\"19\">\n<p data-path-to-node=\"19,0\"><strong data-path-to-node=\"19,0\" data-index-in-node=\"0\">Not:<\/strong> Bu i\u015flem ileri seviye bir &ouml;zelle\u015ftirmedir.<\/p>\n<\/blockquote>\n<ol start=\"1\" data-path-to-node=\"20\">\n<li>\n<p data-path-to-node=\"20,0,0\"><code data-path-to-node=\"20,0,0\" data-index-in-node=\"0\">about:support<\/code> sayfas\u0131n\u0131 a&ccedil;\u0131n.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"20,1,0\">\"Profil Klas&ouml;r&uuml;\" yan\u0131ndaki \"Klas&ouml;r&uuml; A&ccedil;\" butonuna bas\u0131n.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"20,2,0\">Burada <code data-path-to-node=\"20,2,0\" data-index-in-node=\"7\">chrome<\/code> isimli bir klas&ouml;r olu\u015fturun ve i&ccedil;ine <code data-path-to-node=\"20,2,0\" data-index-in-node=\"51\">userChrome.css<\/code> dosyas\u0131 a&ccedil;arak \u015fu kodu ekleyin:<\/p>\n<!----><!----><!----><!----><!----><!----><!---->\n<div class=\"code-block ng-tns-c2721585414-127 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiqgOqIqIuSAxUAAAAAHQAAAAAQ1AE\">\n<div class=\"code-block-decoration header-formatted gds-title-s ng-tns-c2721585414-127 ng-star-inserted\"><span class=\"ng-tns-c2721585414-127\">CSS<\/span>\n<div class=\"buttons ng-tns-c2721585414-127 ng-star-inserted\"><button class=\"mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c2721585414-127 mat-unthemed _mat-animation-noopable ng-star-inserted\" aria-label=\"Kodu kopyala\"><\/button><!----><!----><\/div>\n<!----><\/div>\n<!---->\n<div class=\"formatted-code-block-internal-container ng-tns-c2721585414-127\">\n<div class=\"animated-opacity ng-tns-c2721585414-127\">\n<pre class=\"ng-tns-c2721585414-127\"><code class=\"code-container formatted ng-tns-c2721585414-127\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-selector-id\">#TabsToolbar<\/span> { <span class=\"hljs-attribute\">visibility<\/span>: collapse <span class=\"hljs-meta\">!important<\/span>; }\n<\/code><\/pre>\n<!----><\/div>\n<\/div>\n<\/div>\n<!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><\/li>\n<li>\n<p data-path-to-node=\"20,3,0\">Firefox'u yeniden ba\u015flatt\u0131\u011f\u0131n\u0131zda &uuml;stteki bar kaybolacak ve tamamen \"Edge benzeri\" modern bir dikey aray&uuml;ze kavu\u015facaks\u0131n\u0131z.<\/p>\n<\/li>\n<\/ol>\n<hr data-path-to-node=\"21\">\n<h2 data-path-to-node=\"22\">Firefox Art\u0131k Daha \"Pro\"<\/h2>\n<p data-path-to-node=\"23\">Firefox, <strong data-path-to-node=\"23\" data-index-in-node=\"9\">Split Tab<\/strong> ve <strong data-path-to-node=\"23\" data-index-in-node=\"22\">Vertical Tabs<\/strong> kombinasyonu ile art\u0131k sadece bir taray\u0131c\u0131 de\u011fil, g&uuml;&ccedil;l&uuml; bir &ccedil;al\u0131\u015fma istasyonu haline geliyor. &Ouml;zellikle <strong data-path-to-node=\"23\" data-index-in-node=\"140\">OnderL<\/strong> gibi sistem y&ouml;netimi ve yaz\u0131l\u0131mla u\u011fra\u015fan profesyoneller i&ccedil;in bu &ouml;zellikler, pencereler aras\u0131 ge&ccedil;i\u015f trafi\u011fini ciddi oranda azalt\u0131yor.<\/p>\n<p data-path-to-node=\"24\"><strong data-path-to-node=\"24\" data-index-in-node=\"0\">AstroCat NGFW panelini y&ouml;netirken sol tarafta dikey sekmeler, sa\u011f tarafta b&ouml;l&uuml;nm&uuml;\u015f ekranda log takibi yapt\u0131\u011f\u0131n\u0131z\u0131 hayal edin; tam bir verimlilik canavar\u0131!<\/strong><\/p>\n<p data-path-to-node=\"25\">Bu &ouml;zelliklerden sonra, Firefox'un <strong data-path-to-node=\"25\" data-index-in-node=\"35\">\"Container Tabs\" (Konteyner Sekmeler)<\/strong> ile sosyal medya ve i\u015f hesaplar\u0131n\u0131 nas\u0131l birbirinden tamamen izole etti\u011fini de merak eder misiniz?<\/p>\n<\/div>\n<p data-path-to-node=\"27\"><strong data-path-to-node=\"27\" data-index-in-node=\"0\">Siz Firefox'un yeni aray&uuml;z &ouml;zelliklerini nas\u0131l buluyorsunuz?<\/strong> Deneyimlerinizi ve tak\u0131ld\u0131\u011f\u0131n\u0131z noktalar\u0131 yorumlarda bizimle payla\u015fmay\u0131 unutmay\u0131n!<\/p>\n<hr data-path-to-node=\"28\">\n<p data-path-to-node=\"29\"><em data-path-to-node=\"29\" data-index-in-node=\"0\">Bu rehber, g&uuml;ncel teknoloji haberlerini yak\u0131ndan takip eden <!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><a class=\"ng-star-inserted\" href=\"..\/..\/\" target=\"_blank\" rel=\"noopener\" data-hveid=\"0\" data-ved=\"0CAAQ_4QMahgKEwiqgOqIqIuSAxUAAAAAHQAAAAAQwQE\">Ondernet.net<\/a><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----> ekibi taraf\u0131ndan haz\u0131rlanm\u0131\u015ft\u0131r. Sunucu ve taray\u0131c\u0131 optimizasyonlar\u0131 hakk\u0131nda daha fazla bilgi i&ccedil;in blogumuzu takipte kal\u0131n.<\/em><\/p>\n<p data-path-to-node=\"30\">&nbsp;<\/p>\n<\/div>","excerpt":"Firefox kullan\u0131c\u0131lar\u0131n\u0131n y\u0131llard\u0131r bekledi\u011fi, Vivaldi ve Arc gibi taray\u0131c\u0131larda pop\u00fcler olan Split Tab (Sekme B\u00f6lme) \u00f6zelli\u011fi nihayet Windows s\u00fcr\u00fcm\u00fcnde g\u00fcn y\u00fcz\u00fcne \u00e7\u0131kt\u0131. Hen\u00fcz test a\u015famas\u0131nda olsa da, manuel olarak aktif edilebilen bu \u00f6zellik, geni\u015f ekran kullananlar ve \u00fcretkenlik odakl\u0131 \u00e7al\u0131\u015fanlar i\u00e7in oyunun kurallar\u0131n\u0131 de\u011fi\u015ftiriyor.","created_at":"2026-01-14 20:38:44","updated_at":"2026-09-08 04:14:19","category_id":9,"view_count":626,"reading_time":7,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2026-01-14 17:38:44","featured_image":"\/uploads\/images\/2026\/01\/6967d47d0c8fa_1768412285.jpg","slug":"firefox-ta-split-tab-ozelligi-ve-dikey-sekmeler-ve-kenar-cubugu","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":383,"title":"Windows Sunucularda G\u00fcvenlik Analizi: Kullan\u0131c\u0131 Oturumlar\u0131n\u0131 \u0130zleme ve Raporlama","content":"<div id=\"model-response-message-contentr_9badafa2c860b643\" class=\"markdown markdown-main-panel stronger enable-updated-hr-color\" dir=\"ltr\" aria-live=\"polite\" aria-busy=\"false\">\n<p data-path-to-node=\"3\">&nbsp;<\/p>\n<p data-path-to-node=\"4\">Bu yaz\u0131m\u0131zda, Windows sunucular\u0131n\u0131zda kullan\u0131c\u0131 giri\u015flerini analiz etmek i&ccedil;in kullanabilece\u011finiz profesyonel y&ouml;ntemleri ele al\u0131yoruz.<\/p>\n<h3 data-path-to-node=\"5\">1. Event Viewer: Sistem G&uuml;nl&uuml;klerinin \"Kara Kutusu\"<\/h3>\n<p data-path-to-node=\"6\">Windows tabanl\u0131 sistemlerde ger&ccedil;ekle\u015fen her ba\u015far\u0131l\u0131 veya ba\u015far\u0131s\u0131z giri\u015f denemesi, G&uuml;venlik (Security) g&uuml;nl&uuml;klerine kaydedilir. Bir siber g&uuml;venlik analizi veya denetim s\u0131ras\u0131nda bakman\u0131z gereken ilk yer buras\u0131d\u0131r.<\/p>\n<ul data-path-to-node=\"7\">\n<li>\n<p data-path-to-node=\"7,0,0\"><strong data-path-to-node=\"7,0,0\" data-index-in-node=\"0\">Yol:<\/strong> <code data-path-to-node=\"7,0,0\" data-index-in-node=\"5\">Event Viewer &gt; Windows Logs &gt; Security<\/code><\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"7,1,0\"><strong data-path-to-node=\"7,1,0\" data-index-in-node=\"0\">Filtreleme:<\/strong> Sa\u011f paneldeki \"Filter Current Log\" se&ccedil;ene\u011fine t\u0131klayarak <strong data-path-to-node=\"7,1,0\" data-index-in-node=\"69\">Event ID: 4624<\/strong> (Success Logon) kodunu arat\u0131n.<\/p>\n<\/li>\n<\/ul>\n<p>Kritik \u0130pucu: Logon Type Parametresi<\/p>\n<p>ID 4624 tek ba\u015f\u0131na yeterli de\u011fildir. Detaylar k\u0131sm\u0131ndaki \"Logon Type\" verisi, giri\u015fin t&uuml;r&uuml;n&uuml; s&ouml;yler:<\/p>\n<ul data-path-to-node=\"9\">\n<li>\n<p data-path-to-node=\"9,0,0\"><strong data-path-to-node=\"9,0,0\" data-index-in-node=\"0\">Type 2:<\/strong> Fiziksel klavye ve monit&ouml;r ba\u015f\u0131ndaki giri\u015f.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"9,1,0\"><strong data-path-to-node=\"9,1,0\" data-index-in-node=\"0\">Type 3:<\/strong> A\u011f &uuml;zerinden (dosya payla\u015f\u0131m\u0131 gibi) eri\u015fim.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"9,2,0\"><strong data-path-to-node=\"9,2,0\" data-index-in-node=\"0\">Type 10:<\/strong> En kritik olan\u0131d\u0131r; Uzak Masa&uuml;st&uuml; (RDP) ba\u011flant\u0131s\u0131n\u0131 temsil eder.<\/p>\n<\/li>\n<\/ul>\n<h3 data-path-to-node=\"10\">2. PowerShell ile H\u0131zl\u0131 Raporlama<\/h3>\n<p data-path-to-node=\"11\">Aray&uuml;z i&ccedil;inde kaybolmak yerine, PowerShell'in g&uuml;c&uuml;n&uuml; kullanarak son giri\u015f yapan kullan\u0131c\u0131lar\u0131 saniyeler i&ccedil;inde listeleyebilirsiniz. A\u015fa\u011f\u0131daki komut, sunucuya en son giri\u015f yapan 5 ba\u015far\u0131l\u0131 oturum a&ccedil;ma i\u015flemini kullan\u0131c\u0131 ad\u0131 ve zaman damgas\u0131yla getirir:<\/p>\n<!----><!----><!----><!----><!----><!----><!---->\n<div class=\"code-block ng-tns-c2721585414-85 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahcKEwiqgOqIqIuSAxUAAAAAHQAAAAAQbg\">\n<div class=\"code-block-decoration header-formatted gds-title-s ng-tns-c2721585414-85 ng-star-inserted\"><span class=\"ng-tns-c2721585414-85\">PowerShell<\/span>\n<div class=\"buttons ng-tns-c2721585414-85 ng-star-inserted\"><button class=\"mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c2721585414-85 mat-unthemed _mat-animation-noopable ng-star-inserted\" aria-label=\"Kodu kopyala\"><\/button><!----><!----><\/div>\n<!----><\/div>\n<!---->\n<div class=\"formatted-code-block-internal-container ng-tns-c2721585414-85\">\n<div class=\"animated-opacity ng-tns-c2721585414-85\">\n<pre class=\"ng-tns-c2721585414-85\"><code class=\"code-container formatted ng-tns-c2721585414-85\" role=\"text\" data-test-id=\"code-content\"><span class=\"hljs-built_in\">Get-EventLog<\/span> <span class=\"hljs-literal\">-LogName<\/span> Security <span class=\"hljs-literal\">-InstanceId<\/span> <span class=\"hljs-number\">4624<\/span> <span class=\"hljs-literal\">-Newest<\/span> <span class=\"hljs-number\">5<\/span> | \n<span class=\"hljs-built_in\">Select-Object<\/span> TimeGenerated, <span class=\"hljs-selector-tag\">@<\/span>{Name=<span class=\"hljs-string\">\"User\"<\/span>; Expression={<span class=\"hljs-variable\">$_<\/span>.ReplacementStrings[<span class=\"hljs-number\">5<\/span>]}}\n<\/code><\/pre>\n<!----><\/div>\n<\/div>\n<\/div>\n<!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!---->\n<p data-path-to-node=\"13\">Bu y&ouml;ntem, &ouml;zellikle rutin kontroller s\u0131ras\u0131nda zaman kazanman\u0131z\u0131 sa\u011flar.<\/p>\n<h3 data-path-to-node=\"14\">3. \"quser\" Komutu: Anl\u0131k Durum Analizi<\/h3>\n<p data-path-to-node=\"15\">Sunucunuzun performans\u0131nda bir yava\u015flama hissetti\u011finizde veya \"Uzak masa&uuml;st&uuml; kullan\u0131c\u0131 s\u0131n\u0131r\u0131na ula\u015f\u0131ld\u0131\" hatas\u0131 ald\u0131\u011f\u0131n\u0131zda, o an kimlerin sistemde oldu\u011funu bilmeniz gerekir.<\/p>\n<p data-path-to-node=\"16\">Terminali (CMD veya PowerShell) a&ccedil;\u0131n ve sadece <code data-path-to-node=\"16\" data-index-in-node=\"47\">quser<\/code> yaz\u0131n. Bu komut size \u015fu bilgileri verir:<\/p>\n<ul data-path-to-node=\"17\">\n<li>\n<p data-path-to-node=\"17,0,0\">Aktif kullan\u0131c\u0131 adlar\u0131.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"17,1,0\">Oturumun durumu (Active \/ Disconnected).<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"17,2,0\">Oturumun ba\u015flang\u0131&ccedil; saati.<\/p>\n<\/li>\n<\/ul>\n<p data-path-to-node=\"18\"><em data-path-to-node=\"18\" data-index-in-node=\"0\">E\u011fer bir kullan\u0131c\u0131 oturumunu kapatmak yerine sadece pencereyi &ccedil;arpt\u0131ysa, oturumu \"Disconnected\" olarak g&ouml;receksiniz. Bu durum gereksiz kaynak t&uuml;ketimine neden olabilir.<\/em><\/p>\n<h3 data-path-to-node=\"19\">4. Kay\u0131t Defteri (Registry) &Uuml;zerinden Son Kullan\u0131c\u0131 Kontrol&uuml;<\/h3>\n<p>Sunucuda en son hangi kullan\u0131c\u0131n\u0131n i\u015flem yapt\u0131\u011f\u0131n\u0131 h\u0131zl\u0131ca g&ouml;rmek i&ccedil;in Registry kay\u0131tlar\u0131na da g&ouml;z atabilirsiniz:<\/p>\n<p>HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Authentication\\LogonUI<\/p>\n<p data-path-to-node=\"21\">Buradaki <strong data-path-to-node=\"21\" data-index-in-node=\"9\">LastLoggedOnUser<\/strong> anahtar\u0131, sistemin haf\u0131zas\u0131ndaki son kullan\u0131c\u0131 bilgisini statik olarak tutar.<\/p>\n<p data-path-to-node=\"21\">&nbsp;<\/p>\n<div id=\"model-response-message-contentr_14680a3defe63e45\" class=\"markdown markdown-main-panel stronger enable-updated-hr-color\" dir=\"ltr\" aria-live=\"polite\" aria-busy=\"false\">\n<p data-path-to-node=\"0\">blog yaz\u0131s\u0131nda bahsetti\u011fim y&ouml;ntemleri (Event Viewer analizi, aktif kullan\u0131c\u0131 sorgulama ve son giri\u015f yapan kullan\u0131c\u0131y\u0131 g&ouml;rme) tek bir aray&uuml;zde birle\u015ftiren, kullan\u0131m\u0131 kolay bir <strong data-path-to-node=\"0\" data-index-in-node=\"190\">PowerShell GUI<\/strong> haz\u0131rlad\u0131m.<\/p>\n<p data-path-to-node=\"1\">Bu ara&ccedil;; RDP giri\u015flerini (Logon Type 10), fiziksel giri\u015fleri ve anl\u0131k aktif kullan\u0131c\u0131lar\u0131 tek t\u0131kla listeler.<\/p>\n<h3 data-path-to-node=\"2\">PowerShell GUI Kodu<\/h3>\n<p data-path-to-node=\"3\">A\u015fa\u011f\u0131daki kodu bir <code data-path-to-node=\"3\" data-index-in-node=\"19\">.ps1<\/code> dosyas\u0131 olarak kaydedip (&ouml;rne\u011fin: <code data-path-to-node=\"3\" data-index-in-node=\"58\">OturumIzleme.ps1<\/code>) sa\u011f t\u0131klay\u0131p \"PowerShell ile &Ccedil;al\u0131\u015ft\u0131r\" diyebilirsiniz:<\/p>\n<!----><!----><!----><!----><!----><!----><!---->\n<div class=\"code-block ng-tns-c2721585414-94 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation\" data-hveid=\"0\" data-ved=\"0CAAQhtANahgKEwiqgOqIqIuSAxUAAAAAHQAAAAAQgwE\">\n<div class=\"formatted-code-block-internal-container ng-tns-c2721585414-94\">\n<div class=\"animated-opacity ng-tns-c2721585414-94\">\n<pre class=\"ng-tns-c2721585414-94\">&nbsp;<\/pre>\n<pre class=\"language-markup\"><code># Gerekli k&uuml;t&uuml;phaneleri y&uuml;kle\nAdd-Type -AssemblyName System.Windows.Forms\nAdd-Type -AssemblyName System.Drawing\n\n# Ana Form Ayarlar\u0131\n$form = New-Object System.Windows.Forms.Form\n$form.Text = \"Ondernet - Windows Oturum \u0130zleme Paneli\"\n$form.Size = New-Object System.Drawing.Size(850, 650)\n$form.StartPosition = \"CenterScreen\"\n$form.BackColor = \"#F8F9FA\"\n$form.Font = New-Object System.Drawing.Font(\"Segoe UI\", 9)\n\n# Ba\u015fl\u0131k Etiketi\n$label = New-Object System.Windows.Forms.Label\n$label.Text = \"Sunucu Eri\u015fim ve G&uuml;venlik Analizi\"\n$label.Location = New-Object System.Drawing.Point(20, 15)\n$label.Size = New-Object System.Drawing.Size(400, 30)\n$label.Font = New-Object System.Drawing.Font(\"Segoe UI\", 16, [System.Drawing.FontStyle]::Bold)\n$label.ForeColor = \"#212529\"\n$form.Controls.Add($label)\n\n# Veri Tablosu (DataGridView)\n$dataGridView = New-Object System.Windows.Forms.DataGridView\n$dataGridView.Location = New-Object System.Drawing.Point(20, 110)\n$dataGridView.Size = New-Object System.Drawing.Size(790, 430)\n$dataGridView.AutoSizeColumnsMode = \"Fill\"\n$dataGridView.BackgroundColor = \"White\"\n$dataGridView.BorderStyle = \"None\"\n$dataGridView.RowHeadersVisible = $false\n$dataGridView.ReadOnly = $true\n$dataGridView.SelectionMode = \"FullRowSelect\"\n$dataGridView.AlternatingRowsDefaultCellStyle.BackColor = \"#F2F2F2\"\n$form.Controls.Add($dataGridView)\n\n# Fonksiyon: Veriyi Grid'e G&uuml;venli Basma\nfunction Update-Grid {\n    param($DataList)\n    $arrayList = New-Object System.Collections.ArrayList\n    if ($DataList) {\n        $arrayList.AddRange($DataList)\n    }\n    $dataGridView.DataSource = $arrayList\n}\n\n# 1. Buton: Aktif Kullan\u0131c\u0131lar (quser)\n$btnQuser = New-Object System.Windows.Forms.Button\n$btnQuser.Text = \"Anl\u0131k Aktif Kullan\u0131c\u0131lar\"\n$btnQuser.Location = New-Object System.Drawing.Point(20, 60)\n$btnQuser.Size = New-Object System.Drawing.Size(250, 40)\n$btnQuser.BackColor = \"#0078D7\"\n$btnQuser.ForeColor = \"White\"\n$btnQuser.FlatStyle = \"Flat\"\n$btnQuser.Cursor = [System.Windows.Forms.Cursors]::Hand\n$btnQuser.Add_Click({\n    # quser &ccedil;\u0131kt\u0131s\u0131n\u0131 g&uuml;venli bir \u015fekilde diziye al (tek sonu&ccedil; olsa bile)\n    $rawOutput = @(quser 2&gt;$null)\n    \n    if ($rawOutput.Count -gt 0) {\n        $data = @($rawOutput | Select-Object -Skip 1 | ForEach-Object {\n            # Bo\u015fluklara g&ouml;re b&ouml;l ve temizle\n            $line = $_.Trim() -split '\\s{2,}'\n            [PSCustomObject]@{\n                Kullanici    = $line[0].Replace(\"&gt;\",\"\") # Aktif kullan\u0131c\u0131 imlecini temizle\n                Oturum_Adi   = if($line[1] -match '^\\d+$') { \"RDP\/None\" } else { $line[1] }\n                ID           = if($line[1] -match '^\\d+$') { $line[1] } else { $line[2] }\n                Durum        = if($line[1] -match '^\\d+$') { $line[2] } else { $line[3] }\n                Giris_Zamani = if($line[1] -match '^\\d+$') { $line[4] } else { $line[5] }\n            }\n        })\n        Update-Grid -DataList $data\n    } else {\n        [System.Windows.Forms.MessageBox]::Show(\"Aktif oturum bulunamad\u0131 veya yetki yetersiz.\", \"Bilgi\")\n    }\n})\n$form.Controls.Add($btnQuser)\n\n# 2. Buton: Son 15 Ba\u015far\u0131l\u0131 Giri\u015f (Event Log)\n$btnLogon = New-Object System.Windows.Forms.Button\n$btnLogon.Text = \"Son 15 Ba\u015far\u0131l\u0131 Giri\u015f (Event Log)\"\n$btnLogon.Location = New-Object System.Drawing.Point(285, 60)\n$btnLogon.Size = New-Object System.Drawing.Size(250, 40)\n$btnLogon.BackColor = \"#28A745\"\n$btnLogon.ForeColor = \"White\"\n$btnLogon.FlatStyle = \"Flat\"\n$btnLogon.Cursor = [System.Windows.Forms.Cursors]::Hand\n$btnLogon.Add_Click({\n    try {\n        $events = @(Get-WinEvent -FilterHashtable @{LogName='Security';ID=4624} -MaxEvents 15 -ErrorAction SilentlyContinue | ForEach-Object {\n            [PSCustomObject]@{\n                Tarih_Saat  = $_.TimeCreated\n                Kullanici   = $_.Properties[5].Value\n                Logon_Tipi  = $_.Properties[8].Value # Tip 10: RDP, Tip 2: Yerel\n                Kaynak_IP   = $_.Properties[18].Value\n            }\n        })\n        Update-Grid -DataList $events\n    } catch {\n        [System.Windows.Forms.MessageBox]::Show(\"Olay g&uuml;nl&uuml;kleri okunurken hata olu\u015ftu. Y&ouml;netici olarak &ccedil;al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zdan emin olun.\", \"Hata\")\n    }\n})\n$form.Controls.Add($btnLogon)\n\n# 3. Buton: Registry Son Kullan\u0131c\u0131 Bilgisi\n$btnReg = New-Object System.Windows.Forms.Button\n$btnReg.Text = \"Kay\u0131t Defteri (Son Kay\u0131t)\"\n$btnReg.Location = New-Object System.Drawing.Point(550, 60)\n$btnReg.Size = New-Object System.Drawing.Size(250, 40)\n$btnReg.BackColor = \"#6C757D\"\n$btnReg.ForeColor = \"White\"\n$btnReg.FlatStyle = \"Flat\"\n$btnReg.Cursor = [System.Windows.Forms.Cursors]::Hand\n$btnReg.Add_Click({\n    $regPath = \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Authentication\\LogonUI\"\n    $lastUser = (Get-ItemProperty -Path $regPath -ErrorAction SilentlyContinue).LastLoggedOnUser\n    if ($lastUser) {\n        [System.Windows.Forms.MessageBox]::Show(\"Windows Kay\u0131t Defterine G&ouml;re Son Giri\u015f Yapan:`n`n$lastUser\", \"Registry Bilgisi\")\n    } else {\n        [System.Windows.Forms.MessageBox]::Show(\"Bilgi al\u0131namad\u0131.\", \"Hata\")\n    }\n})\n$form.Controls.Add($btnReg)\n\n# Alt Bilgi (Footer)\n$footer = New-Object System.Windows.Forms.Label\n$footer.Text = \"&copy; 2024 Ondernet.net - Sunucu G&uuml;venlik Analiz Arac\u0131\"\n$footer.Location = New-Object System.Drawing.Point(20, 560)\n$footer.Size = New-Object System.Drawing.Size(500, 20)\n$footer.ForeColor = \"Gray\"\n$form.Controls.Add($footer)\n\n# Formu G&ouml;ster\n[void]$form.ShowDialog()<\/code><\/pre>\n<pre class=\"ng-tns-c2721585414-94\"><code class=\"code-container formatted ng-tns-c2721585414-94\" role=\"text\" data-test-id=\"code-content\">\n<\/code><\/pre>\n<!----><\/div>\n<\/div>\n<\/div>\n<!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!---->\n<h3 data-path-to-node=\"5\">Ara&ccedil; Neleri Kaps\u0131yor?<\/h3>\n<ol start=\"1\" data-path-to-node=\"6\">\n<li>\n<p data-path-to-node=\"6,0,0\"><strong data-path-to-node=\"6,0,0\" data-index-in-node=\"0\">Anl\u0131k Aktif Kullan\u0131c\u0131lar (quser):<\/strong> Sunucuda o anda \"Active\" veya \"Disconnected\" durumda olan t&uuml;m kullan\u0131c\u0131lar\u0131, oturum ID'leri ve giri\u015f saatleriyle birlikte tabloya d&ouml;ker.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"6,1,0\"><strong data-path-to-node=\"6,1,0\" data-index-in-node=\"0\">Son 10 Giri\u015f (Event ID 4624):<\/strong> G&uuml;venlik g&uuml;nl&uuml;klerini tarar. Kullan\u0131c\u0131 ad\u0131n\u0131n yan\u0131 s\u0131ra, blog yaz\u0131s\u0131nda kritik oldu\u011fu belirtilen <strong data-path-to-node=\"6,1,0\" data-index-in-node=\"127\">Logon Type<\/strong> ve <strong data-path-to-node=\"6,1,0\" data-index-in-node=\"141\">Kaynak IP<\/strong> bilgilerini g&ouml;sterir (&Ouml;rn: Type 10 g&ouml;r&uuml;yorsan\u0131z RDP ile giri\u015ftir).<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"6,2,0\"><strong data-path-to-node=\"6,2,0\" data-index-in-node=\"0\">Registry Bilgisi:<\/strong> Windows'un kay\u0131t defterinde tuttu\u011fu \"son giri\u015f yapan kullan\u0131c\u0131\" bilgisini k&uuml;&ccedil;&uuml;k bir pop-up mesaj\u0131 olarak ekrana getirir.<\/p>\n<\/li>\n<\/ol>\n<h3 data-path-to-node=\"7\">&Ccedil;al\u0131\u015ft\u0131rmadan &Ouml;nce Notlar:<\/h3>\n<ul data-path-to-node=\"8\">\n<li>\n<p data-path-to-node=\"8,0,0\"><strong data-path-to-node=\"8,0,0\" data-index-in-node=\"0\">Y&ouml;netici Yetkisi:<\/strong> <code data-path-to-node=\"8,0,0\" data-index-in-node=\"18\">Security<\/code> loglar\u0131n\u0131 okumak ve <code data-path-to-node=\"8,0,0\" data-index-in-node=\"47\">quser<\/code> komutunu &ccedil;al\u0131\u015ft\u0131rmak i&ccedil;in PowerShell'i <strong data-path-to-node=\"8,0,0\" data-index-in-node=\"92\">Y&ouml;netici Olarak &Ccedil;al\u0131\u015ft\u0131r<\/strong> se&ccedil;ene\u011fiyle a&ccedil;mal\u0131s\u0131n\u0131z.<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"8,1,0\"><strong data-path-to-node=\"8,1,0\" data-index-in-node=\"0\">Execution Policy:<\/strong> E\u011fer script &ccedil;al\u0131\u015fmazsa, terminale <code data-path-to-node=\"8,1,0\" data-index-in-node=\"52\">Set-ExecutionPolicy RemoteSigned -Scope CurrentUser<\/code> komutunu yazarak izin verebilirsiniz.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<hr data-path-to-node=\"22\">\n<h3 data-path-to-node=\"23\">Ondernet &Ouml;nerisi: Neden \u0130zleme Yapmal\u0131s\u0131n\u0131z?<\/h3>\n<p data-path-to-node=\"24\">Sistem g&uuml;venli\u011fi sadece d\u0131\u015far\u0131dan gelen sald\u0131r\u0131lara kar\u015f\u0131 barikat kurmak de\u011fildir. \u0130&ccedil;erideki hareketlili\u011fi izlemek, yetkisiz eri\u015fimleri erkenden tespit etmenize ve olas\u0131 bir hata durumunda \"sorumlu hesab\u0131\" h\u0131zl\u0131ca bulman\u0131za olanak tan\u0131r.<\/p>\n<p data-path-to-node=\"25\"><strong data-path-to-node=\"25\" data-index-in-node=\"0\">Sunucu g&uuml;venli\u011finizi bir &uuml;st seviyeye ta\u015f\u0131mak m\u0131 istiyorsunuz?<\/strong> Y&uuml;ksek performansl\u0131 ve g&uuml;venli <strong data-path-to-node=\"25\" data-index-in-node=\"94\">Windows VDS<\/strong> &ccedil;&ouml;z&uuml;mlerimizle tan\u0131\u015fmak i&ccedil;in <!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><a class=\"ng-star-inserted\" href=\"..\/..\/\" target=\"_blank\" rel=\"noopener\" data-hveid=\"0\" data-ved=\"0CAAQ_4QMahcKEwiqgOqIqIuSAxUAAAAAHQAAAAAQbw\">Ondernet.net<\/a><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----> adresini ziyaret edebilir, uzman ekibimizden destek alabilirsiniz.<\/p>\n<hr data-path-to-node=\"26\">\n<p data-path-to-node=\"27\"><em data-path-to-node=\"27\" data-index-in-node=\"0\">Bu yaz\u0131, sistem y&ouml;neticilerinin g&uuml;nl&uuml;k operasyonlar\u0131n\u0131 kolayla\u015ft\u0131rmak ve g&uuml;venlik fark\u0131ndal\u0131\u011f\u0131n\u0131 art\u0131rmak amac\u0131yla haz\u0131rlanm\u0131\u015ft\u0131r.<\/em><\/p>\n<\/div>","excerpt":"Sunucu y\u00f6netimi sadece servislerin ayakta kalmas\u0131n\u0131 sa\u011flamak de\u011fil, ayn\u0131 zamanda sistemin \"kim taraf\u0131ndan, ne zaman ve nas\u0131l\" kullan\u0131ld\u0131\u011f\u0131n\u0131 takip etmektir. \u00d6zellikle \u00e7ok kullan\u0131c\u0131l\u0131 Windows Sunucu ortamlar\u0131nda veya uzak masa\u00fcst\u00fc (RDP) trafi\u011finin yo\u011fun oldu\u011fu yap\u0131larda, oturum izleme operasyonel g\u00fcvenli\u011fin temel ta\u015f\u0131d\u0131r.","created_at":"2026-01-14 20:03:49","updated_at":"2026-09-08 04:02:21","category_id":9,"view_count":545,"reading_time":8,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2026-01-14 17:03:49","featured_image":"\/uploads\/images\/2026\/01\/6967cc5d11958_1768410205.png","slug":"windows-sunucularda-guvenlik-analizi-kullanici-oturumlarini-izleme-ve-raporlama","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":381,"title":"\u00a0File Server Performance Test Tool v2.0","content":"<p>&nbsp;File Server Performance Test Tool v2.0 - Advanced Edition<\/p>\n<p>&nbsp;Yeni &Ouml;zellikler<\/p>\n<p>&nbsp;\u2699\ufe0f Ayarlar Sayfas\u0131<br>- Test parametrelerini kaydetme (Sunucu IP, Share Path)<br>- Ayarlar JSON dosyas\u0131nda saklan\u0131r: `C:\\PerformanceTests\\config.json`<\/p>\n<p>&nbsp;\ud83d\udce7 Email G&ouml;nderimi<br>- Test sonu&ccedil;lar\u0131n\u0131 otomatik email ile g&ouml;nderme<br>- SMTP ayarlar\u0131:<br>&nbsp; - SMTP Server ve Port<br>&nbsp; - Kullan\u0131c\u0131 ad\u0131 ve \u015fifre<br>&nbsp; - G&ouml;nderen ve al\u0131c\u0131 email adresleri<br>&nbsp; - SSL deste\u011fi<\/p>\n<p>&nbsp;\u23f0 Otomatik G&ouml;rev Zamanlay\u0131c\u0131<br>- Testleri belirli aral\u0131klarla otomatik &ccedil;al\u0131\u015ft\u0131rma<br>- Windows Task Scheduler entegrasyonu<br>- 5-1440 dakika aras\u0131 ayarlanabilir interval<br>- Otomatik &ccedil;al\u0131\u015fan testler email ile raporlan\u0131r<\/p>\n<p>&nbsp;\ud83d\udcca Geli\u015fmi\u015f Log Sistemi<br>- Her test i&ccedil;in ayr\u0131 log dosyas\u0131<br>- UTF-8 BOM encoding (T&uuml;rk&ccedil;e karakter deste\u011fi)<br>- Dosya ad\u0131 format\u0131: `YYYYMMDD_HHMMSS_TestAdi.txt`<\/p>\n<p>&nbsp;Kullan\u0131m<\/p>\n<p>&nbsp;Manuel &Ccedil;al\u0131\u015ft\u0131rma<br>```powershell<br>&nbsp;PowerShell'i Administrator olarak a&ccedil;\u0131n<br>.\\FileServerTest-GUI-Advanced.ps1<br>```<\/p>\n<p>&nbsp;Otomatik &Ccedil;al\u0131\u015ft\u0131rma (Zamanlay\u0131c\u0131 i&ccedil;in)<br>```powershell<br>.\\FileServerTest-GUI-Advanced.ps1 -AutoRun<br>```<\/p>\n<p>&nbsp;Ayarlar<\/p>\n<p>&nbsp;Test Parametreleri<br>- **Sunucu IP**: Ping testi i&ccedil;in hedef IP veya hostname<br>- **Share Path**: SMB, Bandwidth ve IOPS testleri i&ccedil;in UNC path (&ouml;rn: `\\\\192.168.1.100\\share`)<\/p>\n<p>&nbsp;Email Ayarlar\u0131<br>- **Email G&ouml;nderimi Aktif**: Email g&ouml;nderimini etkinle\u015ftir\/devre d\u0131\u015f\u0131 b\u0131rak<br>- **SMTP Server**: SMTP sunucu adresi (&ouml;rn: `smtp.gmail.com`)<br>- **Port**: SMTP port (genellikle 587 veya 465)<br>- **Kullan\u0131c\u0131 Ad\u0131**: SMTP kimlik do\u011frulama kullan\u0131c\u0131 ad\u0131<br>- **\u015eifre**: SMTP kimlik do\u011frulama \u015fifresi<br>- **G&ouml;nderen Email**: G&ouml;nderen email adresi<br>- **Al\u0131c\u0131 Email**: Al\u0131c\u0131 email adresi (virg&uuml;lle ay\u0131rarak birden fazla eklenebilir)<br>- **SSL Kullan**: SSL\/TLS \u015fifreleme kullan<\/p>\n<p>&nbsp;Gmail i&ccedil;in &Ouml;rnek Ayarlar<br>```<br>SMTP Server: smtp.gmail.com<br>Port: 587<br>SSL: Aktif<br>Kullan\u0131c\u0131 Ad\u0131: your-email@gmail.com<br>\u015eifre: uygulama-sifresi (2FA aktifse App Password kullan\u0131n)<br>```<\/p>\n<p>&nbsp;Office 365 i&ccedil;in &Ouml;rnek Ayarlar<br>```<br>SMTP Server: smtp.office365.com<br>Port: 587<br>SSL: Aktif<br>Kullan\u0131c\u0131 Ad\u0131: your-email@company.com<br>\u015eifre: hesap-sifresi<br>```<\/p>\n<p>&nbsp;Otomatik G&ouml;rev Zamanlay\u0131c\u0131<br>- **Otomatik Test Aktif**: Zamanlay\u0131c\u0131y\u0131 etkinle\u015ftir\/devre d\u0131\u015f\u0131 b\u0131rak<br>- **Test Aral\u0131\u011f\u0131**: Testlerin &ccedil;al\u0131\u015fma s\u0131kl\u0131\u011f\u0131 (dakika cinsinden)<br>&nbsp; - Minimum: 5 dakika<br>&nbsp; - Maksimum: 1440 dakika (24 saat)<br>&nbsp; - &Ouml;nerilen: 60 dakika<\/p>\n<p>&nbsp;&Ouml;zellikler<\/p>\n<p>&nbsp;Testler<br>1. **A\u011f Gecikme Testi**: 100 ping paketi ile latency &ouml;l&ccedil;&uuml;m&uuml;<br>2. **Bant Geni\u015fli\u011fi Testi**: 100MB dosya kopyalama ile throughput &ouml;l&ccedil;&uuml;m&uuml;<br>3. **SMB H\u0131z Testi**: K&uuml;&ccedil;&uuml;k, orta ve b&uuml;y&uuml;k dosyalarla SMB performans testi<br>4. **IOPS Testi**: Random read\/write IOPS &ouml;l&ccedil;&uuml;m&uuml;<br>5. **Sistem Bilgileri**: CPU, RAM, Disk ve Network bilgileri<\/p>\n<p>&nbsp;Raporlama<br>- Her test i&ccedil;in ayr\u0131 log dosyas\u0131<br>- Renkli konsol &ccedil;\u0131kt\u0131s\u0131<br>- UTF-8 encoding ile T&uuml;rk&ccedil;e karakter deste\u011fi<br>- Otomatik email g&ouml;nderimi<br>- Notepad ile rapor g&ouml;r&uuml;nt&uuml;leme<\/p>\n<p>&nbsp;Dosya Yap\u0131s\u0131<\/p>\n<p>```<br>C:\\PerformanceTests\\<br>\u251c\u2500\u2500 config.json &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ayarlar dosyas\u0131<br>\u251c\u2500\u2500 20260113_120530_AgGecikme.txt &nbsp; &nbsp; &nbsp; &nbsp;A\u011f gecikme test raporu<br>\u251c\u2500\u2500 20260113_120645_BantGenisligi.txt &nbsp; &nbsp;Bant geni\u015fli\u011fi test raporu<br>\u251c\u2500\u2500 20260113_120820_SMBTest.txt &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SMB test raporu<br>\u251c\u2500\u2500 20260113_121015_IOPSTest.txt &nbsp; &nbsp; &nbsp; &nbsp; IOPS test raporu<br>\u251c\u2500\u2500 20260113_121200_SistemBilgileri.txt &nbsp;Sistem bilgileri raporu<br>\u2514\u2500\u2500 20260113_121500_TumTestler.txt &nbsp; &nbsp; &nbsp; T&uuml;m testler raporu<br>```<\/p>\n<p>&nbsp;Gereksinimler<\/p>\n<p>- Windows Server 2019 veya &uuml;zeri<br>- PowerShell 5.1 veya &uuml;zeri<br>- Administrator yetkileri<br>- .NET Framework 4.5 veya &uuml;zeri<\/p>\n<p>&nbsp;Sorun Giderme<\/p>\n<p>&nbsp;Email G&ouml;nderilmiyor<br>- SMTP ayarlar\u0131n\u0131 kontrol edin<br>- Firewall'da SMTP portunu a&ccedil;\u0131n<br>- Gmail kullan\u0131yorsan\u0131z \"Daha az g&uuml;venli uygulamalara izin ver\" veya App Password kullan\u0131n<br>- Office 365 kullan\u0131yorsan\u0131z SMTP Auth'un etkin oldu\u011fundan emin olun<\/p>\n<p>&nbsp;Zamanlay\u0131c\u0131 &Ccedil;al\u0131\u015fm\u0131yor<br>- Script'i Administrator olarak &ccedil;al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zdan emin olun<br>- Task Scheduler'da \"FileServerPerformanceTest\" g&ouml;revini kontrol edin<br>- G&ouml;rev &ouml;zelliklerinde \"Run with highest privileges\" se&ccedil;ene\u011finin aktif oldu\u011fundan emin olun<\/p>\n<p>&nbsp;T&uuml;rk&ccedil;e Karakterler Bozuk<br>- Log dosyalar\u0131n\u0131 UTF-8 destekleyen bir edit&ouml;rle a&ccedil;\u0131n (Notepad++, VS Code)<br>- Windows Notepad kullan\u0131yorsan\u0131z \"Encoding\" men&uuml;s&uuml;nden \"UTF-8\" se&ccedil;in<\/p>\n<p>&nbsp;Lisans<\/p>\n<p>Bu ara&ccedil; &Ouml;nder Ak&ouml;z taraf\u0131ndan Windows Server 2016\/2019\/2022 i&ccedil;in geli\u015ftirilmi\u015ftir.<\/p>\n<p>&nbsp;Versiyon Ge&ccedil;mi\u015fi<\/p>\n<p>&nbsp;v2.0 (2026-01-13)<br>- Ayarlar sayfas\u0131 eklendi<br>- Email g&ouml;nderimi eklendi<br>- Otomatik g&ouml;rev zamanlay\u0131c\u0131 eklendi<br>- JSON tabanl\u0131 konfig&uuml;rasyon sistemi<br>- Her test i&ccedil;in ayr\u0131 log dosyas\u0131<\/p>\n<p>&nbsp;v1.0 (2026-01-13)<br>- \u0130lk s&uuml;r&uuml;m<br>- Temel test fonksiyonlar\u0131<br>- GUI aray&uuml;z&uuml;<\/p>\n<pre class=\"language-markup\"><code># File Server Performance Test Tool - Advanced GUI Version\n# Windows Server 2019 compatible\n# Run as Administrator\n\n# Check for AutoRun parameter\nparam([switch]$AutoRun)\n\nAdd-Type -AssemblyName System.Windows.Forms\nAdd-Type -AssemblyName System.Drawing\n\n# Global variables\n$script:OutputPath = \"C:\\PerformanceTests\"\n$script:ConfigFile = Join-Path $script:OutputPath \"config.json\"\n$script:reportFile = \"\"\n$script:isRunning = $false\n$script:config = $null\n\n# Create output folder\nif (-not (Test-Path $script:OutputPath)) {\n    New-Item -ItemType Directory -Path $script:OutputPath -Force | Out-Null\n}\n\n#region Configuration Management\nfunction Load-Config {\n    if (Test-Path $script:ConfigFile) {\n        try {\n            $json = Get-Content -Path $script:ConfigFile -Raw -Encoding UTF8\n            $script:config = $json | ConvertFrom-Json\n        } catch {\n            $script:config = Get-DefaultConfig\n        }\n    } else {\n        $script:config = Get-DefaultConfig\n    }\n}\n\nfunction Get-DefaultConfig {\n    return [PSCustomObject]@{\n        ServerIP = \"\"\n        SharePath = \"\"\n        OutputPath = \"C:\\PerformanceTests\"\n        EmailEnabled = $false\n        SMTPServer = \"\"\n        SMTPPort = 587\n        SMTPUsername = \"\"\n        SMTPPassword = \"\"\n        SMTPFrom = \"\"\n        SMTPTo = \"\"\n        SMTPUseSSL = $true\n        ScheduleEnabled = $false\n        ScheduleInterval = 60\n        ScheduleTests = @(\"Network\", \"Bandwidth\", \"SMB\", \"IOPS\")\n    }\n}\n\nfunction Save-Config {\n    try {\n        $utf8BOM = New-Object System.Text.UTF8Encoding $true\n        $json = $script:config | ConvertTo-Json -Depth 10\n        [System.IO.File]::WriteAllText($script:ConfigFile, $json, $utf8BOM)\n        return $true\n    } catch {\n        [System.Windows.Forms.MessageBox]::Show(\"Ayarlar kaydedilemedi: $($_.Exception.Message)\", \"Hata\", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)\n        return $false\n    }\n}\n#endregion\n\n#region Email Functions\nfunction Send-EmailReport {\n    param([string]$ReportFile)\n    \n    if (-not $script:config.EmailEnabled) {\n        return\n    }\n    \n    if ([string]::IsNullOrEmpty($script:config.SMTPServer) -or [string]::IsNullOrEmpty($script:config.SMTPTo)) {\n        Write-Log \"[WARN] Email ayarlar\u0131 eksik, email g&ouml;nderilemedi!\" \"Yellow\"\n        return\n    }\n    \n    try {\n        Write-Log \"Email g&ouml;nderiliyor...\" \"Yellow\"\n        \n        $reportContent = Get-Content -Path $ReportFile -Raw -Encoding UTF8\n        \n        $mailParams = @{\n            SmtpServer = $script:config.SMTPServer\n            Port = $script:config.SMTPPort\n            From = $script:config.SMTPFrom\n            To = $script:config.SMTPTo\n            Subject = \"File Server Test Raporu - $(Get-Date -Format 'dd.MM.yyyy HH:mm')\"\n            Body = $reportContent\n            Encoding = [System.Text.Encoding]::UTF8\n            UseSsl = $script:config.SMTPUseSSL\n        }\n        \n        if (-not [string]::IsNullOrEmpty($script:config.SMTPUsername)) {\n            $securePassword = ConvertTo-SecureString $script:config.SMTPPassword -AsPlainText -Force\n            $credential = New-Object System.Management.Automation.PSCredential($script:config.SMTPUsername, $securePassword)\n            $mailParams.Credential = $credential\n        }\n        \n        Send-MailMessage @mailParams\n        Write-Log \"[OK] Email ba\u015far\u0131yla g&ouml;nderildi!\" \"Green\"\n        \n    } catch {\n        Write-Log \"[ERROR] Email g&ouml;nderilemedi: $($_.Exception.Message)\" \"Red\"\n    }\n}\n#endregion\n\n#region Scheduler Functions\nfunction Register-ScheduledTask {\n    param([int]$IntervalMinutes)\n    \n    try {\n        $taskName = \"FileServerPerformanceTest\"\n        $scriptPath = $PSCommandPath\n        \n        # Mevcut g&ouml;revi sil\n        Unregister-ScheduledTask -TaskName $taskName -Confirm:$false -ErrorAction SilentlyContinue\n        \n        # Yeni g&ouml;rev olu\u015ftur\n        $action = New-ScheduledTaskAction -Execute \"PowerShell.exe\" -Argument \"-NoProfile -ExecutionPolicy Bypass -File `\"$scriptPath`\" -AutoRun\"\n        $trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes $IntervalMinutes) -RepetitionDuration ([TimeSpan]::MaxValue)\n        $principal = New-ScheduledTaskPrincipal -UserId \"$env:USERDOMAIN\\$env:USERNAME\" -LogonType Interactive -RunLevel Highest\n        $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable\n        \n        Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -Principal $principal -Settings $settings -Force | Out-Null\n        \n        Write-Log \"[OK] Zamanlanm\u0131\u015f g&ouml;rev olu\u015fturuldu (Her $IntervalMinutes dakikada)\" \"Green\"\n        return $true\n        \n    } catch {\n        Write-Log \"[ERROR] Zamanlanm\u0131\u015f g&ouml;rev olu\u015fturulamad\u0131: $($_.Exception.Message)\" \"Red\"\n        return $false\n    }\n}\n\nfunction Unregister-ScheduledTask {\n    try {\n        $taskName = \"FileServerPerformanceTest\"\n        Unregister-ScheduledTask -TaskName $taskName -Confirm:$false -ErrorAction SilentlyContinue\n        Write-Log \"[OK] Zamanlanm\u0131\u015f g&ouml;rev kald\u0131r\u0131ld\u0131\" \"Green\"\n        return $true\n    } catch {\n        Write-Log \"[ERROR] Zamanlanm\u0131\u015f g&ouml;rev kald\u0131r\u0131lamad\u0131: $($_.Exception.Message)\" \"Red\"\n        return $false\n    }\n}\n#endregion\n\n#region Helper Functions\nfunction Write-Log {\n    param([string]$Message, [string]$Color = \"Black\", [string]$TestName = \"\")\n    \n    # GUI kontrol&uuml; - e\u011fer form yoksa sadece console'a yaz\n    if ($null -eq $textBox) {\n        Write-Host $Message\n        return\n    }\n    \n    $textBox.SelectionStart = $textBox.TextLength\n    $textBox.SelectionLength = 0\n    \n    switch ($Color) {\n        \"Green\" { $textBox.SelectionColor = [System.Drawing.Color]::Green }\n        \"Red\" { $textBox.SelectionColor = [System.Drawing.Color]::Red }\n        \"Yellow\" { $textBox.SelectionColor = [System.Drawing.Color]::DarkOrange }\n        \"Cyan\" { $textBox.SelectionColor = [System.Drawing.Color]::DarkCyan }\n        default { $textBox.SelectionColor = [System.Drawing.Color]::Black }\n    }\n    \n    $textBox.AppendText(\"$Message`r`n\")\n    $textBox.ScrollToCaret()\n    $form.Refresh()\n    \n    # Her test i&ccedil;in ayr\u0131 dosya olu\u015ftur\n    if (-not [string]::IsNullOrEmpty($TestName)) {\n        $timestamp = Get-Date -Format \"yyyyMMdd_HHmmss\"\n        $script:reportFile = Join-Path $script:OutputPath \"${timestamp}_${TestName}.txt\"\n        \n        # UTF-8 BOM ile dosya olu\u015ftur\n        $utf8BOM = New-Object System.Text.UTF8Encoding $true\n        $header = \"Test: $TestName`r`nTarih: $(Get-Date)`r`nSunucu: $env:COMPUTERNAME`r`n================================================================`r`n`r`n\"\n        [System.IO.File]::WriteAllText($script:reportFile, $header, $utf8BOM)\n    }\n    \n    if ($script:reportFile -and (Test-Path $script:reportFile)) {\n        # UTF-8 BOM ile append\n        $utf8BOM = New-Object System.Text.UTF8Encoding $true\n        $currentContent = [System.IO.File]::ReadAllText($script:reportFile, $utf8BOM)\n        $newContent = $currentContent + $Message + \"`r`n\"\n        [System.IO.File]::WriteAllText($script:reportFile, $newContent, $utf8BOM)\n    }\n}\n\nfunction Enable-Controls {\n    $btnNetworkTest.Enabled = $true\n    $btnBandwidthTest.Enabled = $true\n    $btnSMBTest.Enabled = $true\n    $btnIOPSTest.Enabled = $true\n    $btnFullTest.Enabled = $true\n    $btnSystemInfo.Enabled = $true\n    $btnClearLog.Enabled = $true\n    $btnSaveReport.Enabled = $true\n    $btnSettings.Enabled = $true\n    $script:isRunning = $false\n}\n\nfunction Disable-Controls {\n    $btnNetworkTest.Enabled = $false\n    $btnBandwidthTest.Enabled = $false\n    $btnSMBTest.Enabled = $false\n    $btnIOPSTest.Enabled = $false\n    $btnFullTest.Enabled = $false\n    $btnSystemInfo.Enabled = $false\n    $btnClearLog.Enabled = $false\n    $btnSaveReport.Enabled = $false\n    $btnSettings.Enabled = $false\n    $script:isRunning = $true\n}\n#endregion\n\n#region Test Functions\nfunction Test-NetworkLatency {\n    $target = if ([string]::IsNullOrEmpty($txtServerIP.Text)) { $script:config.ServerIP } else { $txtServerIP.Text.Trim() }\n    \n    if ([string]::IsNullOrEmpty($target)) {\n        [System.Windows.Forms.MessageBox]::Show(\"L&uuml;tfen Sunucu IP adresi giriniz!\", \"Uyar\u0131\", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Warning)\n        return\n    }\n    \n    # IP adresi veya hostname validasyonu\n    $ipPattern = \"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$\"\n    $hostnamePattern = \"^[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*$\"\n    \n    if (-not ($target -match $ipPattern -or $target -match $hostnamePattern)) {\n        [System.Windows.Forms.MessageBox]::Show(\"Ge&ccedil;ersiz IP adresi veya hostname!`n`n&Ouml;rnekler:`n- 192.168.1.1`n- server.domain.com`n- fileserver\", \"Hata\", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)\n        return\n    }\n    \n    Write-Log \"\" \"\" \"AgGecikme\"\n    Write-Log \"`n================================================================\" \"Cyan\"\n    Write-Log \"1. A\u011e GEC\u0130KME TEST\u0130 (Network Latency)\" \"Cyan\"\n    Write-Log \"================================================================\" \"Cyan\"\n    Write-Log \"Ping testi yap\u0131l\u0131yor ($target)...\" \"Yellow\"\n    \n    $pingResults = Test-Connection -ComputerName $target -Count 100 -ErrorAction SilentlyContinue\n    \n    if ($pingResults) {\n        $avgLatency = ($pingResults | Measure-Object -Property ResponseTime -Average).Average\n        $minLatency = ($pingResults | Measure-Object -Property ResponseTime -Minimum).Minimum\n        $maxLatency = ($pingResults | Measure-Object -Property ResponseTime -Maximum).Maximum\n        $successCount = ($pingResults | Where-Object {$_.StatusCode -eq 0}).Count\n        $lossPercent = ((100 - $successCount) \/ 100) * 100\n        \n        Write-Log \"`nPING SONU&Ccedil;LARI:\"\n        Write-Log \"--------------\"\n        Write-Log \"Hedef: $target\"\n        Write-Log \"Paket G&ouml;nderilen: 100\"\n        Write-Log \"Ba\u015far\u0131l\u0131: $successCount\"\n        Write-Log \"Kay\u0131p: $lossPercent%\"\n        Write-Log \"Ortalama Gecikme: $([math]::Round($avgLatency, 2)) ms\"\n        Write-Log \"Minimum Gecikme: $minLatency ms\"\n        Write-Log \"Maksimum Gecikme: $maxLatency ms\"\n        Write-Log \"`nDE\u011eERLEND\u0130RME:\"\n        \n        if ($avgLatency -lt 20) {\n            Write-Log \"[OK] M&Uuml;KEMMEL: Gecikme &ccedil;ok d&uuml;\u015f&uuml;k (&lt;20ms)\" \"Green\"\n        } elseif ($avgLatency -lt 50) {\n            Write-Log \"[OK] \u0130Y\u0130: Gecikme kabul edilebilir seviyede (&lt;50ms)\" \"Green\"\n        } elseif ($avgLatency -lt 100) {\n            Write-Log \"[WARN] ORTA: Gecikme biraz y&uuml;ksek (50-100ms)\" \"Yellow\"\n        } else {\n            Write-Log \"[ERROR] K&Ouml;T&Uuml;: Y&uuml;ksek gecikme tespit edildi (&gt;100ms)\" \"Red\"\n        }\n        \n        if ($lossPercent -gt 1) {\n            Write-Log \"[ERROR] UYARI: Paket kayb\u0131 tespit edildi! (%$lossPercent)\" \"Red\"\n        }\n        \n    } else {\n        Write-Log \"[ERROR] Ping testi ba\u015far\u0131s\u0131z! Hedef sunucuya eri\u015filemiyor.\" \"Red\"\n    }\n}\n\nfunction Test-Bandwidth {\n    $target = if ([string]::IsNullOrEmpty($txtSharePath.Text)) { $script:config.SharePath } else { $txtSharePath.Text.Trim() }\n    \n    if ([string]::IsNullOrEmpty($target)) {\n        [System.Windows.Forms.MessageBox]::Show(\"L&uuml;tfen Share Path giriniz!`n`n&Ouml;rnek: \\\\192.168.1.100\\share\", \"Uyar\u0131\", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Warning)\n        return\n    }\n    \n    if (-not $target.StartsWith(\"\\\\\")) {\n        [System.Windows.Forms.MessageBox]::Show(\"Share Path UNC format\u0131nda olmal\u0131d\u0131r!`n`n&Ouml;rnek: \\\\192.168.1.100\\share\", \"Hata\", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)\n        return\n    }\n    \n    Write-Log \"\" \"\" \"BantGenisligi\"\n    Write-Log \"`n================================================================\" \"Cyan\"\n    Write-Log \"2. BANT GEN\u0130\u015eL\u0130\u011e\u0130 TEST\u0130 (Bandwidth)\" \"Cyan\"\n    Write-Log \"================================================================\" \"Cyan\"\n    \n    $testFile = Join-Path $script:OutputPath \"bandwidth_test_100MB.tmp\"\n    $testSize = 100MB\n    \n    Write-Log \"Test dosyas\u0131 olu\u015fturuluyor (100MB)...\" \"Yellow\"\n    $random = New-Object byte[] $testSize\n    (New-Object Random).NextBytes($random)\n    [System.IO.File]::WriteAllBytes($testFile, $random)\n    \n    Write-Log \"Dosya kopyalama testi ba\u015flat\u0131l\u0131yor...\" \"Yellow\"\n    \n    $startTime = Get-Date\n    try {\n        $destFile = Join-Path $target \"bandwidth_test_100MB.tmp\"\n        Copy-Item -Path $testFile -Destination $destFile -Force\n        $endTime = Get-Date\n        $duration = ($endTime - $startTime).TotalSeconds\n        $speedMBps = ($testSize \/ 1MB) \/ $duration\n        $speedMbps = $speedMBps * 8\n        \n        Write-Log \"`nBANT GEN\u0130\u015eL\u0130\u011e\u0130 TEST SONU&Ccedil;LARI:\"\n        Write-Log \"-----------------------------\"\n        Write-Log \"Test Dosya Boyutu: 100 MB\"\n        Write-Log \"S&uuml;re: $([math]::Round($duration, 2)) saniye\"\n        Write-Log \"Ortalama H\u0131z: $([math]::Round($speedMBps, 2)) MB\/s ($([math]::Round($speedMbps, 2)) Mbps)\"\n        Write-Log \"`nDE\u011eERLEND\u0130RME:\"\n        \n        if ($speedMbps -gt 800) {\n            Write-Log \"[OK] M&Uuml;KEMMEL: Gigabit h\u0131za yak\u0131n performans\" \"Green\"\n        } elseif ($speedMbps -gt 400) {\n            Write-Log \"[OK] \u0130Y\u0130: MPLS 500Mbps hatt\u0131 verimli kullan\u0131l\u0131yor\" \"Green\"\n        } elseif ($speedMbps -gt 80) {\n            Write-Log \"[WARN] ORTA: MPLS 100Mbps hatt\u0131 kullan\u0131l\u0131yor\" \"Yellow\"\n        } else {\n            Write-Log \"[ERROR] D&Uuml;\u015e&Uuml;K: Bant geni\u015fli\u011fi beklenenin alt\u0131nda\" \"Red\"\n        }\n        \n        Remove-Item -Path $destFile -Force -ErrorAction SilentlyContinue\n        \n    } catch {\n        Write-Log \"[ERROR] Kopyalama hatas\u0131: $($_.Exception.Message)\" \"Red\"\n    }\n    \n    Remove-Item -Path $testFile -Force -ErrorAction SilentlyContinue\n}\n\nfunction Test-SMBPerformance {\n    $sharePath = if ([string]::IsNullOrEmpty($txtSharePath.Text)) { $script:config.SharePath } else { $txtSharePath.Text.Trim() }\n    \n    if ([string]::IsNullOrEmpty($sharePath)) {\n        [System.Windows.Forms.MessageBox]::Show(\"L&uuml;tfen Share Path giriniz!\", \"Uyar\u0131\", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Warning)\n        return\n    }\n    \n    Write-Log \"\" \"\" \"SMBTest\"\n    Write-Log \"`n================================================================\" \"Cyan\"\n    Write-Log \"3. SMB BA\u011eLANTI HIZ TEST\u0130\" \"Cyan\"\n    Write-Log \"================================================================\" \"Cyan\"\n    \n    $testFolder = Join-Path $script:OutputPath \"SMBTest\"\n    if (-not (Test-Path $testFolder)) {\n        New-Item -ItemType Directory -Path $testFolder -Force | Out-Null\n    }\n    \n    $testSizes = @{\n        \"Small\" = 1MB\n        \"Medium\" = 10MB\n        \"Large\" = 50MB\n    }\n    \n    $results = @{}\n    \n    foreach ($sizeType in $testSizes.Keys) {\n        $size = $testSizes[$sizeType]\n        $count = if ($sizeType -eq \"Small\") { 100 } elseif ($sizeType -eq \"Medium\") { 10 } else { 5 }\n        \n        Write-Log \"`n$sizeType dosyalar test ediliyor ($count adet x $($size\/1MB)MB)...\" \"Yellow\"\n        \n        $files = @()\n        for ($i = 1; $i -le $count; $i++) {\n            $fileName = \"test_${sizeType}_$i.tmp\"\n            $filePath = Join-Path $testFolder $fileName\n            $random = New-Object byte[] $size\n            (New-Object Random).NextBytes($random)\n            [System.IO.File]::WriteAllBytes($filePath, $random)\n            $files += $filePath\n        }\n        \n        $startTime = Get-Date\n        try {\n            foreach ($file in $files) {\n                Copy-Item -Path $file -Destination $sharePath -Force\n            }\n            $endTime = Get-Date\n            $duration = ($endTime - $startTime).TotalSeconds\n            $totalSizeMB = ($size * $count) \/ 1MB\n            $speedMBps = $totalSizeMB \/ $duration\n            \n            $results[$sizeType] = @{\n                Count = $count\n                TotalSize = $totalSizeMB\n                Duration = $duration\n                Speed = $speedMBps\n            }\n            \n            Write-Log \"  [OK] Tamamland\u0131: $([math]::Round($speedMBps, 2)) MB\/s\" \"Green\"\n            \n            foreach ($file in $files) {\n                $fileName = Split-Path $file -Leaf\n                Remove-Item -Path \"$sharePath\\$fileName\" -Force -ErrorAction SilentlyContinue\n            }\n            \n        } catch {\n            Write-Log \"  [ERROR] Hata: $($_.Exception.Message)\" \"Red\"\n        }\n        \n        foreach ($file in $files) {\n            Remove-Item -Path $file -Force -ErrorAction SilentlyContinue\n        }\n    }\n    \n    Write-Log \"`n`nSMB PERFORMANS TEST SONU&Ccedil;LARI:\"\n    Write-Log \"-----------------------------\"\n    Write-Log \"Share Path: $sharePath`n\"\n    \n    foreach ($sizeType in $results.Keys) {\n        $r = $results[$sizeType]\n        Write-Log \"$sizeType Dosyalar:\"\n        Write-Log \"  Dosya Say\u0131s\u0131: $($r.Count) adet\"\n        Write-Log \"  Toplam Boyut: $([math]::Round($r.TotalSize, 2)) MB\"\n        Write-Log \"  S&uuml;re: $([math]::Round($r.Duration, 2)) saniye\"\n        Write-Log \"  Ortalama H\u0131z: $([math]::Round($r.Speed, 2)) MB\/s`n\"\n    }\n    \n    if ($results.Count -gt 0) {\n        Write-Log \"DE\u011eERLEND\u0130RME:\"\n        \n        # Speed de\u011ferlerini topla\n        $speedValues = @()\n        foreach ($key in $results.Keys) {\n            if ($results[$key].Speed) {\n                $speedValues += $results[$key].Speed\n            }\n        }\n        \n        if ($speedValues.Count -gt 0) {\n            $avgSpeed = ($speedValues | Measure-Object -Average).Average\n            if ($avgSpeed -gt 50) {\n                Write-Log \"[OK] M&Uuml;KEMMEL: SMB performans\u0131 &ccedil;ok iyi\" \"Green\"\n            } elseif ($avgSpeed -gt 20) {\n                Write-Log \"[OK] \u0130Y\u0130: SMB performans\u0131 kabul edilebilir\" \"Green\"\n            } else {\n                Write-Log \"[ERROR] D&Uuml;\u015e&Uuml;K: SMB performans\u0131 optimize edilmeli\" \"Red\"\n            }\n        } else {\n            Write-Log \"[ERROR] Test tamamlanamad\u0131 - Speed de\u011ferleri al\u0131namad\u0131!\" \"Red\"\n        }\n    } else {\n        Write-Log \"[ERROR] Test tamamlanamad\u0131!\" \"Red\"\n    }\n    \n    Remove-Item -Path $testFolder -Recurse -Force -ErrorAction SilentlyContinue\n}\n\nfunction Test-IOPS {\n    $testPath = if ([string]::IsNullOrEmpty($txtSharePath.Text)) { $script:config.SharePath } else { $txtSharePath.Text.Trim() }\n    \n    if ([string]::IsNullOrEmpty($testPath)) {\n        [System.Windows.Forms.MessageBox]::Show(\"L&uuml;tfen Test Path giriniz!\", \"Uyar\u0131\", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Warning)\n        return\n    }\n    \n    Write-Log \"\" \"\" \"IOPSTest\"\n    Write-Log \"`n================================================================\" \"Cyan\"\n    Write-Log \"4. IOPS (Disk Performans) TEST\u0130\" \"Cyan\"\n    Write-Log \"================================================================\" \"Cyan\"\n    Write-Log \"IOPS testi yap\u0131l\u0131yor... Bu test birka&ccedil; dakika s&uuml;rebilir...\" \"Yellow\"\n    \n    $testFolder = Join-Path $testPath \"IOPSTest\"\n    if (-not (Test-Path $testFolder)) {\n        New-Item -ItemType Directory -Path $testFolder -Force | Out-Null\n    }\n    \n    $testFile = Join-Path $testFolder \"iops_test.tmp\"\n    $fileSize = 100MB\n    $blockSize = 4KB\n    \n    Write-Log \"Test dosyas\u0131 olu\u015fturuluyor...\" \"Yellow\"\n    $random = New-Object byte[] $fileSize\n    (New-Object Random).NextBytes($random)\n    [System.IO.File]::WriteAllBytes($testFile, $random)\n    \n    Write-Log \"Random Read testi...\" \"Yellow\"\n    $readOps = 0\n    $startTime = Get-Date\n    $duration = 10\n    $fileStream = [System.IO.File]::OpenRead($testFile)\n    $buffer = New-Object byte[] $blockSize\n    \n    while (((Get-Date) - $startTime).TotalSeconds -lt $duration) {\n        $pos = Get-Random -Minimum 0 -Maximum ($fileSize - $blockSize)\n        $fileStream.Seek($pos, [System.IO.SeekOrigin]::Begin) | Out-Null\n        $fileStream.Read($buffer, 0, $blockSize) | Out-Null\n        $readOps++\n    }\n    \n    $fileStream.Close()\n    $readIOPS = [math]::Round($readOps \/ $duration, 0)\n    \n    Write-Log \"Random Write testi...\" \"Yellow\"\n    $writeOps = 0\n    $startTime = Get-Date\n    $fileStream = [System.IO.File]::OpenWrite($testFile)\n    $buffer = New-Object byte[] $blockSize\n    \n    while (((Get-Date) - $startTime).TotalSeconds -lt $duration) {\n        $pos = Get-Random -Minimum 0 -Maximum ($fileSize - $blockSize)\n        $fileStream.Seek($pos, [System.IO.SeekOrigin]::Begin) | Out-Null\n        (New-Object Random).NextBytes($buffer)\n        $fileStream.Write($buffer, 0, $blockSize)\n        $writeOps++\n    }\n    \n    $fileStream.Close()\n    $writeIOPS = [math]::Round($writeOps \/ $duration, 0)\n    \n    Write-Log \"`nIOPS TEST SONU&Ccedil;LARI:\"\n    Write-Log \"-------------------\"\n    Write-Log \"Test Path: $testPath\"\n    Write-Log \"Block Size: 4KB\"\n    Write-Log \"Test S&uuml;resi: $duration saniye\"\n    Write-Log \"Random Read IOPS: $readIOPS\"\n    Write-Log \"Random Write IOPS: $writeIOPS\"\n    Write-Log \"`nDE\u011eERLEND\u0130RME:\"\n    \n    if ($readIOPS -gt 10000) {\n        Write-Log \"[OK] M&Uuml;KEMMEL: NVMe SSD performans\u0131\" \"Green\"\n    } elseif ($readIOPS -gt 3000) {\n        Write-Log \"[OK] \u0130Y\u0130: SSD performans\u0131\" \"Green\"\n    } elseif ($readIOPS -gt 500) {\n        Write-Log \"[WARN] ORTA: SATA SSD veya y&uuml;ksek performansl\u0131 HDD\" \"Yellow\"\n    } else {\n        Write-Log \"[ERROR] D&Uuml;\u015e&Uuml;K: Geleneksel HDD performans\u0131 - SSD'ye ge&ccedil;i\u015f &ouml;nerilir\" \"Red\"\n    }\n    \n    if ($writeIOPS -lt 100 -and $testPath.StartsWith(\"\\\\\")) {\n        Write-Log \"[WARN] UYARI: Network storage &uuml;zerinde d&uuml;\u015f&uuml;k write IOPS\" \"Yellow\"\n    }\n    \n    Remove-Item -Path $testFolder -Recurse -Force -ErrorAction SilentlyContinue\n}\n\nfunction Get-SystemInfo {\n    Write-Log \"\" \"\" \"SistemBilgileri\"\n    Write-Log \"`n================================================================\" \"Cyan\"\n    Write-Log \"S\u0130STEM B\u0130LG\u0130LER\u0130\" \"Cyan\"\n    Write-Log \"================================================================\" \"Cyan\"\n    \n    $cpu = Get-WmiObject Win32_Processor | Select-Object -First 1\n    $ram = Get-WmiObject Win32_ComputerSystem\n    $disk = Get-WmiObject Win32_LogicalDisk -Filter \"DeviceID='C:'\"\n    $network = Get-NetAdapter | Where-Object {$_.Status -eq \"Up\"}\n    \n    Write-Log \"`nSunucu: $env:COMPUTERNAME\" \"Cyan\"\n    Write-Log \"\u0130\u015fletim Sistemi: $((Get-WmiObject Win32_OperatingSystem).Caption)\" \"Cyan\"\n    Write-Log \"Processor: $($cpu.Name)\" \"Cyan\"\n    Write-Log \"CPU &Ccedil;ekirdek: $($cpu.NumberOfCores)\" \"Cyan\"\n    Write-Log \"RAM: $([math]::Round($ram.TotalPhysicalMemory\/1GB, 2)) GB\" \"Cyan\"\n    Write-Log \"C: Disk Bo\u015f Alan: $([math]::Round($disk.FreeSpace\/1GB, 2)) GB \/ $([math]::Round($disk.Size\/1GB, 2)) GB\" \"Cyan\"\n    Write-Log \"`nAktif Network Adapt&ouml;rleri:\" \"Cyan\"\n    \n    foreach ($adapter in $network) {\n        Write-Log \"  - $($adapter.Name): $($adapter.LinkSpeed)\" \"Cyan\"\n    }\n}\n#endregion\n\n#region Settings Form\nfunction Show-SettingsForm {\n    $settingsForm = New-Object System.Windows.Forms.Form\n    $settingsForm.Text = \"Ayarlar\"\n    $settingsForm.Size = New-Object System.Drawing.Size(600, 650)\n    $settingsForm.StartPosition = \"CenterParent\"\n    $settingsForm.FormBorderStyle = \"FixedDialog\"\n    $settingsForm.MaximizeBox = $false\n    $settingsForm.MinimizeBox = $false\n    \n    $yPos = 20\n    \n    # Test Parametreleri\n    $grpTest = New-Object System.Windows.Forms.GroupBox\n    $grpTest.Location = New-Object System.Drawing.Point(10, $yPos)\n    $grpTest.Size = New-Object System.Drawing.Size(560, 100)\n    $grpTest.Text = \"Test Parametreleri\"\n    $settingsForm.Controls.Add($grpTest)\n    \n    $lblServerIP = New-Object System.Windows.Forms.Label\n    $lblServerIP.Location = New-Object System.Drawing.Point(10, 25)\n    $lblServerIP.Size = New-Object System.Drawing.Size(120, 20)\n    $lblServerIP.Text = \"Sunucu IP:\"\n    $grpTest.Controls.Add($lblServerIP)\n    \n    $txtSettingsServerIP = New-Object System.Windows.Forms.TextBox\n    $txtSettingsServerIP.Location = New-Object System.Drawing.Point(140, 23)\n    $txtSettingsServerIP.Size = New-Object System.Drawing.Size(400, 20)\n    $txtSettingsServerIP.Text = $script:config.ServerIP\n    $grpTest.Controls.Add($txtSettingsServerIP)\n    \n    $lblSharePath = New-Object System.Windows.Forms.Label\n    $lblSharePath.Location = New-Object System.Drawing.Point(10, 55)\n    $lblSharePath.Size = New-Object System.Drawing.Size(120, 20)\n    $lblSharePath.Text = \"Share Path:\"\n    $grpTest.Controls.Add($lblSharePath)\n    \n    $txtSettingsSharePath = New-Object System.Windows.Forms.TextBox\n    $txtSettingsSharePath.Location = New-Object System.Drawing.Point(140, 53)\n    $txtSettingsSharePath.Size = New-Object System.Drawing.Size(400, 20)\n    $txtSettingsSharePath.Text = $script:config.SharePath\n    $grpTest.Controls.Add($txtSettingsSharePath)\n    \n    $yPos += 120\n    \n    # Email Ayarlar\u0131\n    $grpEmail = New-Object System.Windows.Forms.GroupBox\n    $grpEmail.Location = New-Object System.Drawing.Point(10, $yPos)\n    $grpEmail.Size = New-Object System.Drawing.Size(560, 240)\n    $grpEmail.Text = \"Email Ayarlar\u0131\"\n    $settingsForm.Controls.Add($grpEmail)\n    \n    $chkEmailEnabled = New-Object System.Windows.Forms.CheckBox\n    $chkEmailEnabled.Location = New-Object System.Drawing.Point(10, 25)\n    $chkEmailEnabled.Size = New-Object System.Drawing.Size(200, 20)\n    $chkEmailEnabled.Text = \"Email G&ouml;nderimi Aktif\"\n    $chkEmailEnabled.Checked = $script:config.EmailEnabled\n    $grpEmail.Controls.Add($chkEmailEnabled)\n    \n    $lblSMTPServer = New-Object System.Windows.Forms.Label\n    $lblSMTPServer.Location = New-Object System.Drawing.Point(10, 55)\n    $lblSMTPServer.Size = New-Object System.Drawing.Size(120, 20)\n    $lblSMTPServer.Text = \"SMTP Server:\"\n    $grpEmail.Controls.Add($lblSMTPServer)\n    \n    $txtSMTPServer = New-Object System.Windows.Forms.TextBox\n    $txtSMTPServer.Location = New-Object System.Drawing.Point(140, 53)\n    $txtSMTPServer.Size = New-Object System.Drawing.Size(300, 20)\n    $txtSMTPServer.Text = $script:config.SMTPServer\n    $grpEmail.Controls.Add($txtSMTPServer)\n    \n    $lblSMTPPort = New-Object System.Windows.Forms.Label\n    $lblSMTPPort.Location = New-Object System.Drawing.Point(450, 55)\n    $lblSMTPPort.Size = New-Object System.Drawing.Size(40, 20)\n    $lblSMTPPort.Text = \"Port:\"\n    $grpEmail.Controls.Add($lblSMTPPort)\n    \n    $txtSMTPPort = New-Object System.Windows.Forms.TextBox\n    $txtSMTPPort.Location = New-Object System.Drawing.Point(490, 53)\n    $txtSMTPPort.Size = New-Object System.Drawing.Size(50, 20)\n    $txtSMTPPort.Text = $script:config.SMTPPort\n    $grpEmail.Controls.Add($txtSMTPPort)\n    \n    $lblSMTPUsername = New-Object System.Windows.Forms.Label\n    $lblSMTPUsername.Location = New-Object System.Drawing.Point(10, 85)\n    $lblSMTPUsername.Size = New-Object System.Drawing.Size(120, 20)\n    $lblSMTPUsername.Text = \"Kullan\u0131c\u0131 Ad\u0131:\"\n    $grpEmail.Controls.Add($lblSMTPUsername)\n    \n    $txtSMTPUsername = New-Object System.Windows.Forms.TextBox\n    $txtSMTPUsername.Location = New-Object System.Drawing.Point(140, 83)\n    $txtSMTPUsername.Size = New-Object System.Drawing.Size(400, 20)\n    $txtSMTPUsername.Text = $script:config.SMTPUsername\n    $grpEmail.Controls.Add($txtSMTPUsername)\n    \n    $lblSMTPPassword = New-Object System.Windows.Forms.Label\n    $lblSMTPPassword.Location = New-Object System.Drawing.Point(10, 115)\n    $lblSMTPPassword.Size = New-Object System.Drawing.Size(120, 20)\n    $lblSMTPPassword.Text = \"\u015eifre:\"\n    $grpEmail.Controls.Add($lblSMTPPassword)\n    \n    $txtSMTPPassword = New-Object System.Windows.Forms.TextBox\n    $txtSMTPPassword.Location = New-Object System.Drawing.Point(140, 113)\n    $txtSMTPPassword.Size = New-Object System.Drawing.Size(400, 20)\n    $txtSMTPPassword.Text = $script:config.SMTPPassword\n    $txtSMTPPassword.PasswordChar = '*'\n    $grpEmail.Controls.Add($txtSMTPPassword)\n    \n    $lblSMTPFrom = New-Object System.Windows.Forms.Label\n    $lblSMTPFrom.Location = New-Object System.Drawing.Point(10, 145)\n    $lblSMTPFrom.Size = New-Object System.Drawing.Size(120, 20)\n    $lblSMTPFrom.Text = \"G&ouml;nderen Email:\"\n    $grpEmail.Controls.Add($lblSMTPFrom)\n    \n    $txtSMTPFrom = New-Object System.Windows.Forms.TextBox\n    $txtSMTPFrom.Location = New-Object System.Drawing.Point(140, 143)\n    $txtSMTPFrom.Size = New-Object System.Drawing.Size(400, 20)\n    $txtSMTPFrom.Text = $script:config.SMTPFrom\n    $grpEmail.Controls.Add($txtSMTPFrom)\n    \n    $lblSMTPTo = New-Object System.Windows.Forms.Label\n    $lblSMTPTo.Location = New-Object System.Drawing.Point(10, 175)\n    $lblSMTPTo.Size = New-Object System.Drawing.Size(120, 20)\n    $lblSMTPTo.Text = \"Al\u0131c\u0131 Email:\"\n    $grpEmail.Controls.Add($lblSMTPTo)\n    \n    $txtSMTPTo = New-Object System.Windows.Forms.TextBox\n    $txtSMTPTo.Location = New-Object System.Drawing.Point(140, 173)\n    $txtSMTPTo.Size = New-Object System.Drawing.Size(400, 20)\n    $txtSMTPTo.Text = $script:config.SMTPTo\n    $grpEmail.Controls.Add($txtSMTPTo)\n    \n    $chkSMTPUseSSL = New-Object System.Windows.Forms.CheckBox\n    $chkSMTPUseSSL.Location = New-Object System.Drawing.Point(10, 205)\n    $chkSMTPUseSSL.Size = New-Object System.Drawing.Size(200, 20)\n    $chkSMTPUseSSL.Text = \"SSL Kullan\"\n    $chkSMTPUseSSL.Checked = $script:config.SMTPUseSSL\n    $grpEmail.Controls.Add($chkSMTPUseSSL)\n    \n    $yPos += 260\n    \n    # Zamanlay\u0131c\u0131 Ayarlar\u0131\n    $grpSchedule = New-Object System.Windows.Forms.GroupBox\n    $grpSchedule.Location = New-Object System.Drawing.Point(10, $yPos)\n    $grpSchedule.Size = New-Object System.Drawing.Size(560, 100)\n    $grpSchedule.Text = \"Otomatik G&ouml;rev Zamanlay\u0131c\u0131\"\n    $settingsForm.Controls.Add($grpSchedule)\n    \n    $chkScheduleEnabled = New-Object System.Windows.Forms.CheckBox\n    $chkScheduleEnabled.Location = New-Object System.Drawing.Point(10, 25)\n    $chkScheduleEnabled.Size = New-Object System.Drawing.Size(200, 20)\n    $chkScheduleEnabled.Text = \"Otomatik Test Aktif\"\n    $chkScheduleEnabled.Checked = $script:config.ScheduleEnabled\n    $grpSchedule.Controls.Add($chkScheduleEnabled)\n    \n    $lblInterval = New-Object System.Windows.Forms.Label\n    $lblInterval.Location = New-Object System.Drawing.Point(10, 55)\n    $lblInterval.Size = New-Object System.Drawing.Size(120, 20)\n    $lblInterval.Text = \"Test Aral\u0131\u011f\u0131 (dk):\"\n    $grpSchedule.Controls.Add($lblInterval)\n    \n    $txtInterval = New-Object System.Windows.Forms.NumericUpDown\n    $txtInterval.Location = New-Object System.Drawing.Point(140, 53)\n    $txtInterval.Size = New-Object System.Drawing.Size(100, 20)\n    $txtInterval.Minimum = 5\n    $txtInterval.Maximum = 1440\n    $txtInterval.Value = $script:config.ScheduleInterval\n    $grpSchedule.Controls.Add($txtInterval)\n    \n    $lblIntervalInfo = New-Object System.Windows.Forms.Label\n    $lblIntervalInfo.Location = New-Object System.Drawing.Point(250, 55)\n    $lblIntervalInfo.Size = New-Object System.Drawing.Size(290, 20)\n    $lblIntervalInfo.Text = \"(5-1440 dakika aras\u0131, &ouml;nerilen: 60)\"\n    $lblIntervalInfo.ForeColor = [System.Drawing.Color]::Gray\n    $grpSchedule.Controls.Add($lblIntervalInfo)\n    \n    $yPos += 120\n    \n    # Butonlar\n    $btnSave = New-Object System.Windows.Forms.Button\n    $btnSave.Location = New-Object System.Drawing.Point(350, $yPos)\n    $btnSave.Size = New-Object System.Drawing.Size(100, 30)\n    $btnSave.Text = \"Kaydet\"\n    $btnSave.BackColor = [System.Drawing.Color]::LightGreen\n    $btnSave.DialogResult = [System.Windows.Forms.DialogResult]::OK\n    $settingsForm.Controls.Add($btnSave)\n    \n    $btnCancel = New-Object System.Windows.Forms.Button\n    $btnCancel.Location = New-Object System.Drawing.Point(460, $yPos)\n    $btnCancel.Size = New-Object System.Drawing.Size(100, 30)\n    $btnCancel.Text = \"\u0130ptal\"\n    $btnCancel.BackColor = [System.Drawing.Color]::LightCoral\n    $btnCancel.DialogResult = [System.Windows.Forms.DialogResult]::Cancel\n    $settingsForm.Controls.Add($btnCancel)\n    \n    $btnSave.Add_Click({\n        # Ayarlar\u0131 kaydet\n        $script:config.ServerIP = $txtSettingsServerIP.Text.Trim()\n        $script:config.SharePath = $txtSettingsSharePath.Text.Trim()\n        $script:config.EmailEnabled = $chkEmailEnabled.Checked\n        $script:config.SMTPServer = $txtSMTPServer.Text.Trim()\n        $script:config.SMTPPort = [int]$txtSMTPPort.Text\n        $script:config.SMTPUsername = $txtSMTPUsername.Text.Trim()\n        $script:config.SMTPPassword = $txtSMTPPassword.Text\n        $script:config.SMTPFrom = $txtSMTPFrom.Text.Trim()\n        $script:config.SMTPTo = $txtSMTPTo.Text.Trim()\n        $script:config.SMTPUseSSL = $chkSMTPUseSSL.Checked\n        \n        $oldScheduleEnabled = $script:config.ScheduleEnabled\n        $script:config.ScheduleEnabled = $chkScheduleEnabled.Checked\n        $script:config.ScheduleInterval = [int]$txtInterval.Value\n        \n        if (Save-Config) {\n            # Zamanlay\u0131c\u0131 ayarlar\u0131n\u0131 uygula\n            if ($script:config.ScheduleEnabled -and -not $oldScheduleEnabled) {\n                Register-ScheduledTask -IntervalMinutes $script:config.ScheduleInterval\n            } elseif (-not $script:config.ScheduleEnabled -and $oldScheduleEnabled) {\n                Unregister-ScheduledTask\n            } elseif ($script:config.ScheduleEnabled) {\n                Register-ScheduledTask -IntervalMinutes $script:config.ScheduleInterval\n            }\n            \n            # Ana formdaki textbox'lar\u0131 g&uuml;ncelle\n            $txtServerIP.Text = $script:config.ServerIP\n            $txtSharePath.Text = $script:config.SharePath\n            \n            [System.Windows.Forms.MessageBox]::Show(\"Ayarlar ba\u015far\u0131yla kaydedildi!\", \"Bilgi\", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)\n        }\n    })\n    \n    $settingsForm.AcceptButton = $btnSave\n    $settingsForm.CancelButton = $btnCancel\n    \n    [void]$settingsForm.ShowDialog()\n}\n#endregion\n\n#region Main GUI\n# Load configuration\nLoad-Config\n\nif ($AutoRun) {\n    # Otomatik &ccedil;al\u0131\u015ft\u0131rma modu - GUI olmadan\n    Write-Host \"Otomatik test ba\u015flat\u0131l\u0131yor...\" -ForegroundColor Green\n    \n    $timestamp = Get-Date -Format \"yyyyMMdd_HHmmss\"\n    $script:reportFile = Join-Path $script:OutputPath \"${timestamp}_OtomatikTest.txt\"\n    \n    $utf8BOM = New-Object System.Text.UTF8Encoding $true\n    $header = \"Test: OTOMAT\u0130K TEST`r`nTarih: $(Get-Date)`r`nSunucu: $env:COMPUTERNAME`r`n================================================================`r`n`r`n\"\n    [System.IO.File]::WriteAllText($script:reportFile, $header, $utf8BOM)\n    \n    # Testleri &ccedil;al\u0131\u015ft\u0131r\n    if ($script:config.ScheduleTests -contains \"Network\") {\n        Write-Host \"A\u011f Gecikme Testi...\" -ForegroundColor Yellow\n        Test-NetworkLatency\n    }\n    \n    if ($script:config.ScheduleTests -contains \"Bandwidth\") {\n        Write-Host \"Bant Geni\u015fli\u011fi Testi...\" -ForegroundColor Yellow\n        Test-Bandwidth\n    }\n    \n    if ($script:config.ScheduleTests -contains \"SMB\") {\n        Write-Host \"SMB Testi...\" -ForegroundColor Yellow\n        Test-SMBPerformance\n    }\n    \n    if ($script:config.ScheduleTests -contains \"IOPS\") {\n        Write-Host \"IOPS Testi...\" -ForegroundColor Yellow\n        Test-IOPS\n    }\n    \n    # Email g&ouml;nder\n    if ($script:config.EmailEnabled) {\n        Send-EmailReport -ReportFile $script:reportFile\n    }\n    \n    Write-Host \"Otomatik test tamamland\u0131!\" -ForegroundColor Green\n    exit 0\n}\n\n# GUI Mode\n$form = New-Object System.Windows.Forms.Form\n$form.Text = \"File Server Performance Test Tool v2.0\"\n$form.Size = New-Object System.Drawing.Size(900, 750)\n$form.StartPosition = \"CenterScreen\"\n$form.FormBorderStyle = \"FixedDialog\"\n$form.MaximizeBox = $false\n\n# Title Label\n$lblTitle = New-Object System.Windows.Forms.Label\n$lblTitle.Location = New-Object System.Drawing.Point(10, 10)\n$lblTitle.Size = New-Object System.Drawing.Size(860, 30)\n$lblTitle.Text = \"FILE SERVER PERFORMANCE TEST TOOL v2.0 - Advanced Edition\"\n$lblTitle.Font = New-Object System.Drawing.Font(\"Arial\", 12, [System.Drawing.FontStyle]::Bold)\n$lblTitle.ForeColor = [System.Drawing.Color]::DarkBlue\n$lblTitle.TextAlign = \"MiddleCenter\"\n$form.Controls.Add($lblTitle)\n\n# Input Group\n$groupInput = New-Object System.Windows.Forms.GroupBox\n$groupInput.Location = New-Object System.Drawing.Point(10, 50)\n$groupInput.Size = New-Object System.Drawing.Size(860, 80)\n$groupInput.Text = \"Test Parametreleri\"\n$form.Controls.Add($groupInput)\n\n# Server IP Label\n$lblServerIP = New-Object System.Windows.Forms.Label\n$lblServerIP.Location = New-Object System.Drawing.Point(10, 25)\n$lblServerIP.Size = New-Object System.Drawing.Size(100, 20)\n$lblServerIP.Text = \"Sunucu IP:\"\n$groupInput.Controls.Add($lblServerIP)\n\n# Server IP TextBox\n$txtServerIP = New-Object System.Windows.Forms.TextBox\n$txtServerIP.Location = New-Object System.Drawing.Point(120, 23)\n$txtServerIP.Size = New-Object System.Drawing.Size(300, 20)\n$txtServerIP.Text = $script:config.ServerIP\n$groupInput.Controls.Add($txtServerIP)\n\n# Share Path Label\n$lblSharePath = New-Object System.Windows.Forms.Label\n$lblSharePath.Location = New-Object System.Drawing.Point(10, 50)\n$lblSharePath.Size = New-Object System.Drawing.Size(100, 20)\n$lblSharePath.Text = \"Share Path:\"\n$groupInput.Controls.Add($lblSharePath)\n\n# Share Path TextBox\n$txtSharePath = New-Object System.Windows.Forms.TextBox\n$txtSharePath.Location = New-Object System.Drawing.Point(120, 48)\n$txtSharePath.Size = New-Object System.Drawing.Size(300, 20)\n$txtSharePath.Text = $script:config.SharePath\n$groupInput.Controls.Add($txtSharePath)\n\n# Settings Button\n$btnSettings = New-Object System.Windows.Forms.Button\n$btnSettings.Location = New-Object System.Drawing.Point(440, 23)\n$btnSettings.Size = New-Object System.Drawing.Size(130, 45)\n$btnSettings.Text = \"\u2699 Ayarlar\"\n$btnSettings.BackColor = [System.Drawing.Color]::LightSteelBlue\n$btnSettings.Font = New-Object System.Drawing.Font(\"Arial\", 10, [System.Drawing.FontStyle]::Bold)\n$groupInput.Controls.Add($btnSettings)\n\n# Status Label\n$lblStatus = New-Object System.Windows.Forms.Label\n$lblStatus.Location = New-Object System.Drawing.Point(590, 25)\n$lblStatus.Size = New-Object System.Drawing.Size(250, 45)\n$lblStatus.Text = \"Email: \" + $(if ($script:config.EmailEnabled) { \"Aktif \u2713\" } else { \"Pasif \u2717\" }) + \"`nZamanlay\u0131c\u0131: \" + $(if ($script:config.ScheduleEnabled) { \"Aktif \u2713\" } else { \"Pasif \u2717\" })\n$lblStatus.ForeColor = [System.Drawing.Color]::DarkGreen\n$groupInput.Controls.Add($lblStatus)\n\n# Test Buttons Group\n$groupTests = New-Object System.Windows.Forms.GroupBox\n$groupTests.Location = New-Object System.Drawing.Point(10, 140)\n$groupTests.Size = New-Object System.Drawing.Size(860, 100)\n$groupTests.Text = \"Test \u0130\u015flemleri\"\n$form.Controls.Add($groupTests)\n\n# Network Test Button\n$btnNetworkTest = New-Object System.Windows.Forms.Button\n$btnNetworkTest.Location = New-Object System.Drawing.Point(10, 25)\n$btnNetworkTest.Size = New-Object System.Drawing.Size(130, 30)\n$btnNetworkTest.Text = \"A\u011f Gecikme Testi\"\n$btnNetworkTest.BackColor = [System.Drawing.Color]::LightBlue\n$groupTests.Controls.Add($btnNetworkTest)\n\n# Bandwidth Test Button\n$btnBandwidthTest = New-Object System.Windows.Forms.Button\n$btnBandwidthTest.Location = New-Object System.Drawing.Point(150, 25)\n$btnBandwidthTest.Size = New-Object System.Drawing.Size(130, 30)\n$btnBandwidthTest.Text = \"Bant Geni\u015fli\u011fi Testi\"\n$btnBandwidthTest.BackColor = [System.Drawing.Color]::LightBlue\n$groupTests.Controls.Add($btnBandwidthTest)\n\n# SMB Test Button\n$btnSMBTest = New-Object System.Windows.Forms.Button\n$btnSMBTest.Location = New-Object System.Drawing.Point(290, 25)\n$btnSMBTest.Size = New-Object System.Drawing.Size(130, 30)\n$btnSMBTest.Text = \"SMB H\u0131z Testi\"\n$btnSMBTest.BackColor = [System.Drawing.Color]::LightBlue\n$groupTests.Controls.Add($btnSMBTest)\n\n# IOPS Test Button\n$btnIOPSTest = New-Object System.Windows.Forms.Button\n$btnIOPSTest.Location = New-Object System.Drawing.Point(430, 25)\n$btnIOPSTest.Size = New-Object System.Drawing.Size(130, 30)\n$btnIOPSTest.Text = \"IOPS Testi\"\n$btnIOPSTest.BackColor = [System.Drawing.Color]::LightBlue\n$groupTests.Controls.Add($btnIOPSTest)\n\n# Full Test Button\n$btnFullTest = New-Object System.Windows.Forms.Button\n$btnFullTest.Location = New-Object System.Drawing.Point(570, 25)\n$btnFullTest.Size = New-Object System.Drawing.Size(130, 30)\n$btnFullTest.Text = \"T&Uuml;M TESTLER\"\n$btnFullTest.BackColor = [System.Drawing.Color]::LightGreen\n$btnFullTest.Font = New-Object System.Drawing.Font(\"Arial\", 9, [System.Drawing.FontStyle]::Bold)\n$groupTests.Controls.Add($btnFullTest)\n\n# System Info Button\n$btnSystemInfo = New-Object System.Windows.Forms.Button\n$btnSystemInfo.Location = New-Object System.Drawing.Point(710, 25)\n$btnSystemInfo.Size = New-Object System.Drawing.Size(130, 30)\n$btnSystemInfo.Text = \"Sistem Bilgileri\"\n$btnSystemInfo.BackColor = [System.Drawing.Color]::LightYellow\n$groupTests.Controls.Add($btnSystemInfo)\n\n# Clear Log Button\n$btnClearLog = New-Object System.Windows.Forms.Button\n$btnClearLog.Location = New-Object System.Drawing.Point(10, 60)\n$btnClearLog.Size = New-Object System.Drawing.Size(130, 30)\n$btnClearLog.Text = \"Logu Temizle\"\n$btnClearLog.BackColor = [System.Drawing.Color]::LightGray\n$groupTests.Controls.Add($btnClearLog)\n\n# Save Report Button\n$btnSaveReport = New-Object System.Windows.Forms.Button\n$btnSaveReport.Location = New-Object System.Drawing.Point(150, 60)\n$btnSaveReport.Size = New-Object System.Drawing.Size(130, 30)\n$btnSaveReport.Text = \"Raporu A&ccedil;\"\n$btnSaveReport.BackColor = [System.Drawing.Color]::LightCoral\n$groupTests.Controls.Add($btnSaveReport)\n\n# Progress Bar\n$progressBar = New-Object System.Windows.Forms.ProgressBar\n$progressBar.Location = New-Object System.Drawing.Point(290, 65)\n$progressBar.Size = New-Object System.Drawing.Size(550, 20)\n$progressBar.Style = \"Marquee\"\n$progressBar.MarqueeAnimationSpeed = 30\n$progressBar.Visible = $false\n$groupTests.Controls.Add($progressBar)\n\n# Output TextBox\n$textBox = New-Object System.Windows.Forms.RichTextBox\n$textBox.Location = New-Object System.Drawing.Point(10, 250)\n$textBox.Size = New-Object System.Drawing.Size(860, 440)\n$textBox.Multiline = $true\n$textBox.ScrollBars = \"Vertical\"\n$textBox.Font = New-Object System.Drawing.Font(\"Consolas\", 9)\n$textBox.ReadOnly = $true\n$textBox.BackColor = [System.Drawing.Color]::White\n$form.Controls.Add($textBox)\n\nWrite-Log \"FILE SERVER PERFORMANCE TEST TOOL v2.0 - Advanced Edition\" \"Green\"\nWrite-Log \"========================================================`n\" \"Green\"\nWrite-Log \"Ho\u015fgeldiniz! L&uuml;tfen test parametrelerini girin ve test butonlar\u0131na t\u0131klay\u0131n.`n\"\nWrite-Log \"Ayarlar butonundan email ve zamanlay\u0131c\u0131 ayarlar\u0131n\u0131 yapabilirsiniz.`n\" \"Yellow\"\nWrite-Log \"Raporlar: $($script:OutputPath)`n\" \"Cyan\"\n\n#region Event Handlers\n$btnSettings.Add_Click({\n    Show-SettingsForm\n    # Status label'\u0131 g&uuml;ncelle\n    $lblStatus.Text = \"Email: \" + $(if ($script:config.EmailEnabled) { \"Aktif \u2713\" } else { \"Pasif \u2717\" }) + \"`nZamanlay\u0131c\u0131: \" + $(if ($script:config.ScheduleEnabled) { \"Aktif \u2713\" } else { \"Pasif \u2717\" })\n})\n\n$btnNetworkTest.Add_Click({\n    if (-not $script:isRunning) {\n        Disable-Controls\n        $progressBar.Visible = $true\n        Test-NetworkLatency\n        if ($script:config.EmailEnabled -and -not [string]::IsNullOrEmpty($script:reportFile) -and (Test-Path $script:reportFile)) {\n            Send-EmailReport -ReportFile $script:reportFile\n        }\n        $progressBar.Visible = $false\n        Enable-Controls\n    }\n})\n\n$btnBandwidthTest.Add_Click({\n    if (-not $script:isRunning) {\n        Disable-Controls\n        $progressBar.Visible = $true\n        Test-Bandwidth\n        if ($script:config.EmailEnabled -and -not [string]::IsNullOrEmpty($script:reportFile) -and (Test-Path $script:reportFile)) {\n            Send-EmailReport -ReportFile $script:reportFile\n        }\n        $progressBar.Visible = $false\n        Enable-Controls\n    }\n})\n\n$btnSMBTest.Add_Click({\n    if (-not $script:isRunning) {\n        Disable-Controls\n        $progressBar.Visible = $true\n        Test-SMBPerformance\n        if ($script:config.EmailEnabled -and -not [string]::IsNullOrEmpty($script:reportFile) -and (Test-Path $script:reportFile)) {\n            Send-EmailReport -ReportFile $script:reportFile\n        }\n        $progressBar.Visible = $false\n        Enable-Controls\n    }\n})\n\n$btnIOPSTest.Add_Click({\n    if (-not $script:isRunning) {\n        Disable-Controls\n        $progressBar.Visible = $true\n        Test-IOPS\n        if ($script:config.EmailEnabled -and -not [string]::IsNullOrEmpty($script:reportFile) -and (Test-Path $script:reportFile)) {\n            Send-EmailReport -ReportFile $script:reportFile\n        }\n        $progressBar.Visible = $false\n        Enable-Controls\n    }\n})\n\n$btnFullTest.Add_Click({\n    if (-not $script:isRunning) {\n        Disable-Controls\n        $progressBar.Visible = $true\n        \n        # T&uuml;m testler i&ccedil;in tek bir dosya olu\u015ftur - UTF-8 BOM ile\n        $timestamp = Get-Date -Format \"yyyyMMdd_HHmmss\"\n        $script:reportFile = Join-Path $script:OutputPath \"${timestamp}_TumTestler.txt\"\n        \n        $utf8BOM = New-Object System.Text.UTF8Encoding $true\n        $header = \"Test: T&Uuml;M TESTLER`r`nTarih: $(Get-Date)`r`nSunucu: $env:COMPUTERNAME`r`n================================================================`r`n`r`n\"\n        [System.IO.File]::WriteAllText($script:reportFile, $header, $utf8BOM)\n        \n        Get-SystemInfo\n        Test-NetworkLatency\n        Test-Bandwidth\n        Test-SMBPerformance\n        Test-IOPS\n        Write-Log \"`n[OK] T&uuml;m testler tamamland\u0131!\" \"Green\"\n        Write-Log \"Rapor: $script:reportFile\" \"Cyan\"\n        \n        if ($script:config.EmailEnabled -and -not [string]::IsNullOrEmpty($script:reportFile) -and (Test-Path $script:reportFile)) {\n            Send-EmailReport -ReportFile $script:reportFile\n        }\n        \n        $progressBar.Visible = $false\n        Enable-Controls\n    }\n})\n\n$btnSystemInfo.Add_Click({\n    if (-not $script:isRunning) {\n        Disable-Controls\n        Get-SystemInfo\n        Enable-Controls\n    }\n})\n\n$btnClearLog.Add_Click({\n    $textBox.Clear()\n    Write-Log \"Log temizlendi.`n\" \"Yellow\"\n})\n\n$btnSaveReport.Add_Click({\n    if (-not [string]::IsNullOrEmpty($script:reportFile) -and (Test-Path $script:reportFile)) {\n        Start-Process notepad $script:reportFile\n    } else {\n        # Son olu\u015fturulan raporu bul\n        $latestReport = Get-ChildItem -Path $script:OutputPath -Filter \"*.txt\" -ErrorAction SilentlyContinue | Sort-Object LastWriteTime -Descending | Select-Object -First 1\n        if ($latestReport) {\n            Start-Process notepad $latestReport.FullName\n        } else {\n            [System.Windows.Forms.MessageBox]::Show(\"Hen&uuml;z bir rapor olu\u015fturulmad\u0131!\", \"Bilgi\", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)\n        }\n    }\n})\n\n$form.Add_FormClosing({\n    $result = [System.Windows.Forms.MessageBox]::Show(\"Programdan &ccedil;\u0131kmak istedi\u011finize emin misiniz?\", \"&Ccedil;\u0131k\u0131\u015f\", [System.Windows.Forms.MessageBoxButtons]::YesNo, [System.Windows.Forms.MessageBoxIcon]::Question)\n    if ($result -eq [System.Windows.Forms.DialogResult]::No) {\n        $_.Cancel = $true\n    }\n})\n#endregion\n\n# Show Form\n[void]$form.ShowDialog()\n<\/code><\/pre>","excerpt":"\u00a0File Server Performance Test Tool v2.0 ile sunucunuzun performans\u0131n\u0131 test edin","created_at":"2026-01-13 15:46:08","updated_at":"2026-09-23 16:32:43","category_id":9,"view_count":522,"reading_time":27,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2026-01-14 16:51:41","featured_image":"\/uploads\/images\/2026\/01\/6967c9993826c_1768409497.png","slug":"file-server-performance-test-tool-v2-0","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":339,"title":"Windows i\u00e7in Geli\u015fmi\u015f A\u011f Trafi\u011fi \u0130zleme Arac\u0131 \u2013 Network Traffic Monitor","content":"<h1><strong>Windows i&ccedil;in Geli\u015fmi\u015f A\u011f Trafi\u011fi \u0130zleme Arac\u0131 &ndash; Network Traffic Monitor<\/strong><\/h1>\n<p>Windows &uuml;zerinde &ccedil;al\u0131\u015fan uygulamalar\u0131n internete hangi ba\u011flant\u0131lar\u0131 yapt\u0131\u011f\u0131n\u0131 merak ettin mi? Hangi process ne kadar trafik &uuml;retiyor, hangi IP&rsquo;ye ba\u011flan\u0131yor, gizli arka plan ba\u011flant\u0131lar\u0131 var m\u0131, anl\u0131k bant geni\u015fli\u011fini ne t&uuml;ketiyor, firewall &uuml;zerinden bir portu t\u0131k diye engellemek m&uuml;mk&uuml;n m&uuml;?<\/p>\n<p>\u0130\u015fte t&uuml;m bu ihtiya&ccedil;lar i&ccedil;in geli\u015ftirdi\u011fim <strong>Network Traffic Monitor<\/strong>, Windows 7\/10\/11\/Server versiyonlar\u0131nda &ccedil;al\u0131\u015fan g&uuml;&ccedil;l&uuml;, modern ve ger&ccedil;ek zamanl\u0131 bir a\u011f trafi\u011fi analiz uygulamas\u0131.<\/p>\n<p>Geli\u015ftiriciler, sistem y&ouml;neticileri, g&uuml;venlik merakl\u0131lar\u0131 ve a\u011f trafi\u011fini kontrol alt\u0131nda tutmak isteyen herkes i&ccedil;in tasarland\u0131.<\/p>\n<hr>\n<h2>\ud83c\udfa5 <strong>Tan\u0131t\u0131m &amp; &Ouml;nizleme<\/strong><\/h2>\n<p>A\u015fa\u011f\u0131daki ekran g&ouml;r&uuml;nt&uuml;leri, uygulaman\u0131n modern ve i\u015flevsel aray&uuml;z&uuml;n&uuml; g&ouml;steriyor:<\/p>\n<p>&nbsp;<\/p>\n<p><iframe src=\"https:\/\/www.youtube.com\/embed\/n0Cp9PXhuyA\" width=\"560\" height=\"314\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><img src=\"..\/..\/..\/uploads\/images\/2025\/12\/694795a5989ba_1766299045.png\"><\/p>\n<hr>\n<h2>\ud83d\udce5 <strong>\u0130ndir<\/strong><\/h2>\n<p><strong>Son S&uuml;r&uuml;m (Release):<\/strong><\/p>\n<p>\ud83d\udc49 <a href=\"https:\/\/drive.google.com\/file\/d\/14VLrIvpcfdVaA6WlEJ5MIJEZhJpMEEV_\/view?usp=sharing\">https:\/\/drive.google.com\/file\/d\/14VLrIvpcfdVaA6WlEJ5MIJEZhJpMEEV_\/view?usp=sharing<\/a><\/p>\n<hr>\n<h1>\ud83d\ude80 <strong>Network Traffic Monitor Nedir?<\/strong><\/h1>\n<p>Network Traffic Monitor, Windows &uuml;zerinde ger&ccedil;ekle\u015fen <strong>t&uuml;m inbound\/outbound ba\u011flant\u0131lar\u0131<\/strong> ger&ccedil;ek zamanl\u0131 olarak g&ouml;steren bir masa&uuml;st&uuml; uygulamas\u0131d\u0131r. Her ba\u011flant\u0131n\u0131n:<\/p>\n<ul>\n<li>\n<p>IP<\/p>\n<\/li>\n<li>\n<p>Port<\/p>\n<\/li>\n<li>\n<p>Protokol<\/p>\n<\/li>\n<li>\n<p>Process ad\u0131 \/ PID<\/p>\n<\/li>\n<li>\n<p>Trafik y&ouml;n&uuml;<\/p>\n<\/li>\n<li>\n<p>Aktif bayt ak\u0131\u015f\u0131<\/p>\n<\/li>\n<li>\n<p>TCP bayraklar\u0131<br>gibi detaylar\u0131n\u0131 alabilir ve istersen bu ba\u011flant\u0131ya <strong>tek t\u0131kla firewall engelleme<\/strong> uygulayabilirsin.<\/p>\n<\/li>\n<\/ul>\n<p>Ayr\u0131ca uygulamada trafik istatistikleri, process bazl\u0131 s\u0131ralamalar, log kayd\u0131, otomatik temizleme gibi geli\u015fmi\u015f &ouml;zellikler bulunur.<\/p>\n<hr>\n<h1>\u2728 <strong>&Ouml;ne &Ccedil;\u0131kan &Ouml;zellikler<\/strong><\/h1>\n<h3>\ud83d\udd0d Ger&ccedil;ek Zamanl\u0131 A\u011f Takibi<\/h3>\n<ul>\n<li>\n<p>TCP \/ UDP ba\u011flant\u0131lar\u0131n\u0131 anl\u0131k olarak izleme<\/p>\n<\/li>\n<li>\n<p>\u0130nternet kullanan process&rsquo;leri listeleme<\/p>\n<\/li>\n<li>\n<p>Hangi uygulama hangi IP\/porta ba\u011flan\u0131yor g&ouml;rebilme<\/p>\n<\/li>\n<\/ul>\n<h3>\ud83d\udd25 Geli\u015fmi\u015f G&uuml;venlik Ara&ccedil;lar\u0131<\/h3>\n<ul>\n<li>\n<p><strong>Ba\u011flant\u0131y\u0131 an\u0131nda engelle (Windows Firewall Block)<\/strong><\/p>\n<\/li>\n<li>\n<p>Port bazl\u0131 engelleme<\/p>\n<\/li>\n<li>\n<p>Sistem process&rsquo;leri i&ccedil;in koruma modu<\/p>\n<\/li>\n<li>\n<p>TCP Flag analizi (SYN, ACK, FIN, RST)<\/p>\n<\/li>\n<\/ul>\n<h3>\ud83d\udcca Profesyonel Trafik Analizi<\/h3>\n<ul>\n<li>\n<p>Canl\u0131 bant geni\u015fli\u011fi grafi\u011fi (LiveCharts)<\/p>\n<\/li>\n<li>\n<p>Top processes &amp; top IPs istatistikleri<\/p>\n<\/li>\n<li>\n<p>Anl\u0131k byte sayac\u0131 (global &amp; process bazl\u0131)<\/p>\n<\/li>\n<li>\n<p>Paket detay penceresi<\/p>\n<\/li>\n<\/ul>\n<h3>\ud83d\uddc4\ufe0f Loglama &amp; Database<\/h3>\n<ul>\n<li>\n<p>SQLite tabanl\u0131 g&uuml;&ccedil;l&uuml; log sistemi<\/p>\n<\/li>\n<li>\n<p>7 g&uuml;n sonra otomatik log temizleme<\/p>\n<\/li>\n<li>\n<p>Reverse DNS &ccedil;&ouml;z&uuml;mleme<\/p>\n<\/li>\n<li>\n<p>Arama ve geli\u015fmi\u015f filtreleme (process, IP, port, domain)<\/p>\n<\/li>\n<\/ul>\n<h3>\u2699\ufe0f Y&ouml;netim &amp; \u0130zleme<\/h3>\n<ul>\n<li>\n<p>Process sonland\u0131rma (Close \/ Force Kill)<\/p>\n<\/li>\n<li>\n<p>Inbound \/ Outbound ayr\u0131 listeler<\/p>\n<\/li>\n<li>\n<p>Protokol filtresi (TCP\/UDP)<\/p>\n<\/li>\n<li>\n<p>Port a&ccedil;\u0131klamalar\u0131 ve protokol tan\u0131ma<\/p>\n<\/li>\n<li>\n<p>Debug konsolu<\/p>\n<\/li>\n<\/ul>\n<hr>\n<h1>\ud83d\udda5\ufe0f <strong>Sistem Gereksinimleri<\/strong><\/h1>\n<table>\n<thead>\n<tr>\n<th>Gereksinim<\/th>\n<th>Detay<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0130\u015fletim Sistemi<\/td>\n<td>Windows 7 \/ 10 \/ 11 \/ Server 2016 \/ 2019 \/ 2022<\/td>\n<\/tr>\n<tr>\n<td>Framework<\/td>\n<td>.NET 8.0<\/td>\n<\/tr>\n<tr>\n<td>Yetki<\/td>\n<td>Administrator (gereklidir)<\/td>\n<\/tr>\n<tr>\n<td>Donan\u0131m<\/td>\n<td>Min. 256 MB RAM<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr>\n<h1>\ud83d\ude80 <strong>Kurulum<\/strong><\/h1>\n<h3>1. Projeyi Derle<\/h3>\n<pre><code class=\"language-powershell\">cd NetworkTrafficMonitor\ndotnet restore\ndotnet build\n<\/code><\/pre>\n<h3>2. Y&ouml;netici Olarak &Ccedil;al\u0131\u015ft\u0131r<\/h3>\n<pre><code class=\"language-powershell\">Start-Process .\\NetworkTrafficMonitor.exe -Verb RunAs\n<\/code><\/pre>\n<hr>\n<h1>\ud83e\udded <strong>Nas\u0131l Kullan\u0131l\u0131r?<\/strong><\/h1>\n<ol>\n<li>\n<p>Uygulamay\u0131 y&ouml;netici olarak a&ccedil;<\/p>\n<\/li>\n<li>\n<p><strong>Start<\/strong> butonuna bas<\/p>\n<\/li>\n<li>\n<p>T&uuml;m ger&ccedil;ek zamanl\u0131 a\u011f ba\u011flant\u0131lar\u0131 listelenmeye ba\u015flar<\/p>\n<\/li>\n<li>\n<p>Process, IP, port, domain &uuml;zerinden an\u0131nda arama yapabilirsin<\/p>\n<\/li>\n<li>\n<p>Ba\u011flant\u0131ya sa\u011f t\u0131klay\u0131p:<\/p>\n<ul>\n<li>\n<p><strong>Block in Firewall<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>Allow<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>Kill Process<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>Inspect Packet<\/strong><br>gibi i\u015flemler uygulayabilirsin<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<hr>\n<h1>\u2699\ufe0f <strong>Teknik Altyap\u0131<\/strong><\/h1>\n<p>Uygulama \u015fu servis mimarisiyle &ccedil;al\u0131\u015f\u0131r:<\/p>\n<table>\n<thead>\n<tr>\n<th>Servis<\/th>\n<th>G&ouml;rev<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>TrafficService<\/strong><\/td>\n<td>Windows API &uuml;zerinden ba\u011flant\u0131lar\u0131 okur<\/td>\n<\/tr>\n<tr>\n<td><strong>PacketCaptureService<\/strong><\/td>\n<td>1 saniyelik periyotlarla trafik toplar<\/td>\n<\/tr>\n<tr>\n<td><strong>DatabaseService<\/strong><\/td>\n<td>SQLite kay\u0131tlar\u0131n\u0131 y&ouml;netir<\/td>\n<\/tr>\n<tr>\n<td><strong>ProtocolExplainService<\/strong><\/td>\n<td>Port\/protokol a&ccedil;\u0131klamalar\u0131 verir<\/td>\n<\/tr>\n<tr>\n<td><strong>FirewallService<\/strong><\/td>\n<td>Windows Firewall ile ileti\u015fim kurar<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr>\n<h1>\ud83d\udee0\ufe0f <strong>Geli\u015ftirme Yol Haritas\u0131<\/strong><\/h1>\n<p>Planlanan &ouml;zellikler:<\/p>\n<ul>\n<li>\n<p>ETW (Event Tracing for Windows) entegrasyonu<\/p>\n<\/li>\n<li>\n<p>Paket seviyesi trafik yakalama<\/p>\n<\/li>\n<li>\n<p>Geli\u015fmi\u015f LiveCharts grafikleri<\/p>\n<\/li>\n<li>\n<p>JSON &amp; CSV export<\/p>\n<\/li>\n<li>\n<p>Threat Intelligence API entegrasyonu (VirusTotal, AbuseIPDB)<\/p>\n<\/li>\n<\/ul>\n<hr>\n<h1>\ud83d\udcc4 Lisans<\/h1>\n<p>Bu proje <strong>MIT License<\/strong> ile lisanslanm\u0131\u015ft\u0131r.<br>\u0130stedi\u011finiz gibi <strong>kullanabilir<\/strong>, <strong>de\u011fi\u015ftirebilir<\/strong>, <strong>da\u011f\u0131tabilirsiniz<\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>","excerpt":"Windows i\u00e7in Geli\u015fmi\u015f A\u011f Trafi\u011fi \u0130zleme Arac\u0131 \u2013 Network Traffic Monitor","created_at":"2025-11-17 16:23:09","updated_at":"2026-09-23 16:41:53","category_id":9,"view_count":3454,"reading_time":4,"status":"published","editor_choice":0,"is_editor_choice":1,"published_at":"2025-11-17 13:23:00","featured_image":"579407097eafe6840e4ad0d3dcd721f9.jpeg","slug":"windows-icin-gelismis-ag-trafigi-izleme-araci-network-traffic-monitor","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":338,"title":"AstroWAMP Portable Node.js Application","content":"<h1>AstroWAMP Portable: Node.js, PHP, Apache ve MySQL&rsquo;i Tek Bir .EXE Dosyas\u0131nda &Ccedil;al\u0131\u015ft\u0131r\u0131n<\/h1>\n<p>Geli\u015ftiriciler i&ccedil;in h\u0131zl\u0131, kurulumsuz ve tamamen ta\u015f\u0131nabilir bir geli\u015ftirme ortam\u0131 her zaman b&uuml;y&uuml;k bir ihtiya&ccedil; olmu\u015ftur. \u0130\u015fte tam da bu noktada <strong>AstroWAMP Portable<\/strong>, t&uuml;m geli\u015ftirme ara&ccedil;lar\u0131n\u0131 tek bir &ccedil;al\u0131\u015ft\u0131r\u0131labilir <code>.exe<\/code> dosyas\u0131nda bir araya getirerek benzersiz bir deneyim sunuyor.<\/p>\n<p>Bu yaz\u0131da AstroWAMP&rsquo;\u0131n ta\u015f\u0131nabilir s&uuml;r&uuml;m&uuml;n&uuml;n &ouml;zelliklerini, nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 ve geli\u015ftiricilere sundu\u011fu avantajlar\u0131 anlat\u0131yorum.<\/p>\n<hr>\n<h2>\ud83c\udfac Demo Videosu<\/h2>\n<p>A\u015fa\u011f\u0131daki g&ouml;r&uuml;nt&uuml;ye t\u0131klayarak projenin demo videosunu izleyebilirsiniz:<\/p>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=UdduVA40EsM\"><img src=\"https:\/\/img.youtube.com\/vi\/UdduVA40EsM\/maxresdefault.jpg\" alt=\"Proje Demo Videosu\"><\/a><\/p>\n<hr>\n<h1>\ud83d\udca1 AstroWAMP Portable Nedir?<\/h1>\n<p><a href=\"https:\/\/drive.google.com\/file\/d\/1NIlF4qbY1sI4bFeWArmao9pla2ZPQsli\/view?usp=sharing\">Download \/ \u0130ndir<\/a><\/p>\n<p>AstroWAMP&rsquo;in bu s&uuml;r&uuml;m&uuml;, <strong>Node.js runtime&rsquo;\u0131 i&ccedil;inde bar\u0131nd\u0131ran tek dosyal\u0131k bir uygulama<\/strong> olarak tasarlanm\u0131\u015ft\u0131r. Yani:<\/p>\n<ul>\n<li>\n<p>Kurulum yok<\/p>\n<\/li>\n<li>\n<p>Ba\u011f\u0131ml\u0131l\u0131k yok<\/p>\n<\/li>\n<li>\n<p>Karma\u015f\u0131k ayarlar yok<\/p>\n<\/li>\n<\/ul>\n<p>Sadece <code>.exe<\/code> dosyas\u0131n\u0131 a&ccedil;\u0131n ve b&uuml;t&uuml;n geli\u015ftirme ortam\u0131n\u0131z tek t\u0131kla &ccedil;al\u0131\u015fs\u0131n.<\/p>\n<hr>\n<h1>\ud83c\udfaf Tek Uygulamada T&uuml;m Geli\u015ftirme Ara&ccedil;lar\u0131<\/h1>\n<p>AstroWAMP Portable, full-stack bir geli\u015ftirme ortam\u0131n\u0131n ihtiyac\u0131 olan t&uuml;m servisleri bir araya getiriyor:<\/p>\n<h3>\ud83d\ude80 \u0130&ccedil;erdi\u011fi Servisler<\/h3>\n<ul>\n<li>\n<p><strong>Apache Web Server<\/strong> &ndash; G&uuml;&ccedil;l&uuml; ve kararl\u0131 HTTP sunucusu<\/p>\n<\/li>\n<li>\n<p><strong>PHP<\/strong> &ndash; En pop&uuml;ler backend dili<\/p>\n<\/li>\n<li>\n<p><strong>MySQL Database<\/strong> &ndash; G&uuml;venilir veritaban\u0131 motoru<\/p>\n<\/li>\n<li>\n<p><strong>Node.js<\/strong> &ndash; Modern JavaScript &ccedil;al\u0131\u015ft\u0131rma ortam\u0131<\/p>\n<\/li>\n<li>\n<p><strong>phpMyAdmin<\/strong> &ndash; Taray\u0131c\u0131 tabanl\u0131 MySQL y&ouml;netimi<\/p>\n<\/li>\n<\/ul>\n<p>T&uuml;m bu servisler tek bir platformdan, tek bir t\u0131klama ile y&ouml;netilebiliyor.<\/p>\n<hr>\n<h1>\ud83d\udce6 Klas&ouml;r Yap\u0131s\u0131<\/h1>\n<p>AstroWAMP portable klas&ouml;r&uuml;n&uuml;z \u015fu \u015fekilde g&ouml;r&uuml;n&uuml;r:<\/p>\n<pre><code>portable\/\n\u251c\u2500\u2500 AstroWAMP-NodeApp.exe   # Ana uygulama (Node.js g&ouml;m&uuml;l&uuml;)\n\u251c\u2500\u2500 data\/                   # Veri depolama klas&ouml;r&uuml;\n\u251c\u2500\u2500 uploads\/                # Dosya y&uuml;klemeleri\n\u2514\u2500\u2500 logs\/                   # G&uuml;nl&uuml;k kay\u0131tlar\u0131\n<\/code><\/pre>\n<p>Uygulama gerekli klas&ouml;rleri <strong>otomatik<\/strong> olu\u015fturur.<\/p>\n<hr>\n<h1>\u26a1 H\u0131zl\u0131 Ba\u015flang\u0131&ccedil; (Windows)<\/h1>\n<ol>\n<li>\n<p><code>AstroWAMP-NodeApp.exe<\/code> dosyas\u0131na &ccedil;ift t\u0131klay\u0131n<\/p>\n<\/li>\n<li>\n<p>Taray\u0131c\u0131dan:<br>\ud83d\udc49 <code>http:\/\/localhost:5000<\/code><\/p>\n<\/li>\n<li>\n<p>Art\u0131k haz\u0131rs\u0131n\u0131z!<\/p>\n<\/li>\n<\/ol>\n<p>Kurulum gerektirmez. Her yerde &ccedil;al\u0131\u015f\u0131r. USB&rsquo;den bile!<\/p>\n<hr>\n<h1>\ud83d\udd27 Yap\u0131land\u0131rma Se&ccedil;enekleri<\/h1>\n<h3>\ud83d\udccc Port De\u011fi\u015ftirme<\/h3>\n<pre><code class=\"language-cmd\">set PORT=3000\nAstroWAMP-NodeApp.exe\n<\/code><\/pre>\n<p>veya:<\/p>\n<pre><code class=\"language-cmd\">AstroWAMP-NodeApp.exe --port 3000\n<\/code><\/pre>\n<h3>\ud83d\udcc1 Farkl\u0131 Konumda &Ccedil;al\u0131\u015ft\u0131rma<\/h3>\n<p>Portable klas&ouml;r&uuml;n&uuml; istedi\u011finiz yere ta\u015f\u0131yabilirsiniz:<\/p>\n<ul>\n<li>\n<p>USB bellek<\/p>\n<\/li>\n<li>\n<p>D\u0131\u015f disk<\/p>\n<\/li>\n<li>\n<p>Network dizini<\/p>\n<\/li>\n<li>\n<p>Dropbox \/ OneDrive gibi bulut klas&ouml;rleri<\/p>\n<\/li>\n<\/ul>\n<hr>\n<h1>\ud83c\udf10 API Endpoint&rsquo;leri<\/h1>\n<p>AstroWAMP &ccedil;al\u0131\u015ft\u0131ktan sonra \u015fu endpoint&rsquo;ler devreye girer:<\/p>\n<ul>\n<li>\n<p><strong>Ana Sayfa:<\/strong> <code>\/<\/code><\/p>\n<\/li>\n<li>\n<p><strong>Status API:<\/strong> <code>\/api\/status<\/code><\/p>\n<\/li>\n<li>\n<p><strong>System Info:<\/strong> <code>\/api\/info<\/code><\/p>\n<\/li>\n<li>\n<p><strong>Paths Info:<\/strong> <code>\/api\/paths<\/code><\/p>\n<\/li>\n<li>\n<p><strong>Health Check:<\/strong> <code>\/api\/health<\/code><\/p>\n<\/li>\n<\/ul>\n<p>T&uuml;m&uuml; RESTful yap\u0131da tasarlanm\u0131\u015ft\u0131r.<\/p>\n<hr>\n<h1>\ud83d\udcdd Detayl\u0131 &Ouml;zellikler<\/h1>\n<ul>\n<li>\n<p>\u2714 <strong>Tek Dosya &Ccedil;al\u0131\u015ft\u0131rma<\/strong> (embedded Node.js)<\/p>\n<\/li>\n<li>\n<p>\u2714 %100 <strong>Portable<\/strong><\/p>\n<\/li>\n<li>\n<p>\u2714 Otomatik klas&ouml;r olu\u015fturma<\/p>\n<\/li>\n<li>\n<p>\u2714 Geli\u015fmi\u015f loglama<\/p>\n<\/li>\n<li>\n<p>\u2714 Modern UI<\/p>\n<\/li>\n<li>\n<p>\u2714 Tam API deste\u011fi<\/p>\n<\/li>\n<li>\n<p>\u2714 Kurulum gerektirmez<\/p>\n<\/li>\n<\/ul>\n<hr>\n<h1>\ud83d\uddc2\ufe0f Veri Y&ouml;netimi<\/h1>\n<h3>\ud83d\udccc Data Klas&ouml;r&uuml;<\/h3>\n<p>JSON, SQLite, config dosyalar\u0131 i&ccedil;in ideal.<\/p>\n<p>&Ouml;rnek:<\/p>\n<pre><code class=\"language-javascript\">const filePath = path.join(DATA_DIR, 'mydata.json');\nfs.writeFileSync(filePath, JSON.stringify(data));\n<\/code><\/pre>\n<h3>\ud83d\udccc Uploads Klas&ouml;r&uuml;<\/h3>\n<p>Dosya y&uuml;kleme i\u015flemleriniz burada saklan\u0131r.<\/p>\n<h3>\ud83d\udccc Logs Klas&ouml;r&uuml;<\/h3>\n<p><code>app-YYYY-MM-DD.log<\/code> format\u0131nda g&uuml;nl&uuml;k kay\u0131tlar\u0131 tutulur.<\/p>\n<hr>\n<h1>\ud83d\udd12 G&uuml;venlik<\/h1>\n<ul>\n<li>\n<p>Varsay\u0131lan port <strong>sadece localhost<\/strong> eri\u015fimine a&ccedil;\u0131kt\u0131r.<\/p>\n<\/li>\n<li>\n<p>D\u0131\u015f a\u011fdan eri\u015fmek isterseniz firewall ayar\u0131 yapmal\u0131s\u0131n\u0131z.<\/p>\n<\/li>\n<li>\n<p>&Uuml;retim ortam\u0131nda ek g&uuml;venlik katmanlar\u0131 &ouml;nerilir.<\/p>\n<\/li>\n<\/ul>\n<hr>\n<h1>\ud83d\udc1e Sorun Giderme<\/h1>\n<h3>\u2757 Apache ba\u015flat\u0131lm\u0131yorsa<\/h3>\n<p>VC_redist.x64 kurmay\u0131 unutmay\u0131n.<\/p>\n<h3>\u2757 \"Port Already in Use\"<\/h3>\n<pre><code class=\"language-cmd\">set PORT=5001\nAstroWAMP-NodeApp.exe\n<\/code><\/pre>\n<h3>\u2757 Klas&ouml;rler Olu\u015fmuyor<\/h3>\n<ul>\n<li>\n<p>Yazma izni var m\u0131 kontrol edin<\/p>\n<\/li>\n<li>\n<p>Gerekirse y&ouml;netici olarak &ccedil;al\u0131\u015ft\u0131r\u0131n<\/p>\n<\/li>\n<\/ul>\n<h3>\u2757 EXE a&ccedil;\u0131lm\u0131yor<\/h3>\n<ul>\n<li>\n<p>Windows Defender engellemi\u015f olabilir<\/p>\n<\/li>\n<li>\n<p>\"\u0130zin ver\" listesine ekleyin<\/p>\n<\/li>\n<\/ul>\n<hr>\n<h1>\ud83d\udda5\ufe0f Sistem Gereksinimleri<\/h1>\n<ul>\n<li>\n<p>Windows 7 \/ 8 \/ 10 \/ 11 (64-bit)<\/p>\n<\/li>\n<li>\n<p>En az 256 MB RAM<\/p>\n<\/li>\n<li>\n<p>Minimum 50 MB bo\u015f alan<\/p>\n<\/li>\n<\/ul>\n<hr>\n<h1>\ud83d\udd04 G&uuml;ncelleme Nas\u0131l Yap\u0131l\u0131r?<\/h1>\n<ol>\n<li>\n<p><code>data\/<\/code>, <code>uploads\/<\/code>, <code>logs\/<\/code> klas&ouml;rlerini yedekleyin<\/p>\n<\/li>\n<li>\n<p>Yeni versiyon <code>.exe<\/code> dosyas\u0131n\u0131 eskiyle de\u011fi\u015ftirin<\/p>\n<\/li>\n<li>\n<p>&Ccedil;al\u0131\u015ft\u0131r\u0131n &rarr; Verileriniz korunur<\/p>\n<\/li>\n<\/ol>\n<hr>\n<h1>\ud83d\udcda Ek Bilgi<\/h1>\n<ul>\n<li>\n<p>Apache sorunlar\u0131nda her zaman: VC_redist.x64<\/p>\n<\/li>\n<li>\n<p>Ana proje: <strong>AstroWAMP GitHub<\/strong><br><a href=\"https:\/\/github.com\/onder7\/astrowamp\">https:\/\/github.com\/onder7\/astrowamp<\/a><\/p>\n<\/li>\n<\/ul>\n<hr>\n<h1>\ud83d\udcc4 Lisans<\/h1>\n<p>MIT License<br>Tam &ouml;zg&uuml;rl&uuml;k: kullan, de\u011fi\u015ftir, da\u011f\u0131t.<\/p>\n<hr>\n<p><strong>\u2764\ufe0f AstroWAMP i&ccedil;in tutkuyla geli\u015ftirildi.<\/strong><br>Ta\u015f\u0131nabilir geli\u015ftirme ortamlar\u0131n\u0131n yeni standard\u0131 olmaya geliyor.<\/p>\n<hr>\n<p>&nbsp;<\/p>","excerpt":"AstroWAMP Portable: Node.js, PHP, Apache ve MySQL\u2019i Tek Bir .EXE Dosyas\u0131nda \u00c7al\u0131\u015ft\u0131r\u0131n","created_at":"2025-11-17 16:13:59","updated_at":"2026-09-07 08:21:22","category_id":9,"view_count":493,"reading_time":4,"status":"published","editor_choice":0,"is_editor_choice":1,"published_at":"2025-11-17 13:13:00","featured_image":"d0447439cd76a38ab6bfb0a13fd9472e.png","slug":"astrowamp-portable-node-js-application","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":325,"title":"Web Kimlik Do\u011frulama Temelleri","content":"<p>Bir web sitesine giri\u015f yapt\u0131\u011f\u0131nda seni &ldquo;tan\u0131yan&rdquo; sistemin nas\u0131l &ccedil;al\u0131\u015ft\u0131\u011f\u0131n\u0131 hi&ccedil; merak ettin mi?<br>&ldquo;Bu site beni nas\u0131l hat\u0131rl\u0131yor?&rdquo; veya &ldquo;G&uuml;venli bir oturum nas\u0131l sa\u011flan\u0131yor?&rdquo; sorular\u0131n\u0131n cevab\u0131 genellikle &uuml;&ccedil; yap\u0131n\u0131n i&ccedil;inde gizlidir: <strong>Cookie<\/strong>, <strong>Session<\/strong> ve <strong>Token<\/strong>.<\/p>\r\n<p>Bu yaz\u0131da, web d&uuml;nyas\u0131n\u0131n bu &uuml;&ccedil; kahraman\u0131n\u0131 sade bir dille &ouml;\u011frenelim.<\/p>\r\n<p><iframe src=\"https:\/\/www.youtube.com\/embed\/TMiLTv7BSXw\" width=\"560\" height=\"314\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\r\n<hr>\r\n<h3>Cookie &ndash; Taray\u0131c\u0131daki K&uuml;&ccedil;&uuml;k Haf\u0131za<\/h3>\r\n<p><strong>Cookie<\/strong>, web sitelerinin taray\u0131c\u0131nda k&uuml;&ccedil;&uuml;k veri par&ccedil;alar\u0131 saklamas\u0131na olanak tan\u0131r.<br>Bu veriler, her istekte otomatik olarak sunucuya g&ouml;nderilir.<\/p>\r\n<p><strong>Ne i\u015fe yarar?<\/strong><\/p>\r\n<ul>\r\n<li>\r\n<p>Giri\u015f yapt\u0131ktan sonra seni hat\u0131rlamas\u0131n\u0131 sa\u011flar.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Dil veya tema tercihlerini kaydeder.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Siteye tekrar girdi\u011finde ki\u015fiselle\u015ftirilmi\u015f bir deneyim sunar.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<p><strong>Avantajlar\u0131:<\/strong><\/p>\r\n<ul>\r\n<li>\r\n<p>Otomatik &ccedil;al\u0131\u015f\u0131r, kullan\u0131c\u0131dan ekstra bir i\u015flem gerekmez.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Basit uygulamalarda h\u0131zl\u0131 bir &ccedil;&ouml;z&uuml;m sunar.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<p><strong>Dikkat edilmesi gerekenler:<\/strong><\/p>\r\n<ul>\r\n<li>\r\n<p>G&uuml;venlik i&ccedil;in <code>HttpOnly<\/code>, <code>Secure<\/code> ve <code>SameSite<\/code> ayarlar\u0131n\u0131n yap\u0131lmas\u0131 gerekir.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Aksi halde &ccedil;erezler k&ouml;t&uuml; niyetli ki\u015filerce ele ge&ccedil;irilebilir.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<blockquote>\r\n<p><br>Cookie&rsquo;ler istemci (taray\u0131c\u0131) taraf\u0131nda sakland\u0131\u011f\u0131 i&ccedil;in, hassas bilgileri direkt i&ccedil;inde tutmak &ouml;nerilmez.<\/p>\r\n<\/blockquote>\r\n<hr>\r\n<h3>Session &ndash; Sunucu Taraf\u0131nda G&uuml;venli Oturum<\/h3>\r\n<p><strong>Session<\/strong>, kullan\u0131c\u0131ya ait verilerin <strong>sunucuda<\/strong> tutuldu\u011fu bir oturum y&ouml;netim sistemidir.<br>Taray\u0131c\u0131da yaln\u0131zca bir <strong>oturum kimli\u011fi (session ID)<\/strong> saklan\u0131r.<\/p>\r\n<p><strong>Nas\u0131l &ccedil;al\u0131\u015f\u0131r?<\/strong><\/p>\r\n<ol>\r\n<li>\r\n<p>Kullan\u0131c\u0131 giri\u015f yapt\u0131\u011f\u0131nda sunucu bir oturum olu\u015fturur.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Bu oturuma &ouml;zel bir ID &uuml;retir.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Taray\u0131c\u0131, bu ID&rsquo;yi cookie olarak saklar.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Her istekte bu ID sunucuya g&ouml;nderilir ve kullan\u0131c\u0131 do\u011frulan\u0131r.<\/p>\r\n<\/li>\r\n<\/ol>\r\n<p><strong>Avantajlar\u0131:<\/strong><\/p>\r\n<ul>\r\n<li>\r\n<p>Veriler taray\u0131c\u0131da de\u011fil, sunucuda sakland\u0131\u011f\u0131 i&ccedil;in g&uuml;venlidir.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Kullan\u0131c\u0131 bilgilerini do\u011frudan koruma alt\u0131na al\u0131r.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<p><strong>Dezavantaj\u0131:<\/strong><\/p>\r\n<ul>\r\n<li>\r\n<p>&Ouml;l&ccedil;eklendirme zordur. Birden fazla sunucuda ayn\u0131 session bilgisini payla\u015fmak gerekebilir.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<blockquote>\r\n<p>Bir e-ticaret sitesinde oturum a&ccedil;t\u0131ktan sonra sepetindeki &uuml;r&uuml;nlerin kaybolmamas\u0131n\u0131 sa\u011flayan mekanizma genellikle session&rsquo;d\u0131r.<\/p>\r\n<\/blockquote>\r\n<hr>\r\n<h3>Token (JWT) &ndash; Modern ve Ta\u015f\u0131nabilir Kimlik<\/h3>\r\n<p>Token yap\u0131s\u0131, &ouml;zellikle <strong>JWT (JSON Web Token)<\/strong> standard\u0131yla hayat\u0131m\u0131za girdi.<br>JWT, kullan\u0131c\u0131ya ait bilgileri i&ccedil;eren ve dijital olarak imzalanm\u0131\u015f bir veri yap\u0131s\u0131d\u0131r.<\/p>\r\n<p><strong>Nas\u0131l &ccedil;al\u0131\u015f\u0131r?<\/strong><\/p>\r\n<ul>\r\n<li>\r\n<p>Kullan\u0131c\u0131 giri\u015f yapt\u0131\u011f\u0131nda sunucu bir JWT &uuml;retir.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Bu token i&ccedil;inde kullan\u0131c\u0131 bilgileri (&ouml;rne\u011fin ID, rol, e-posta) \u015fifrelenmi\u015f \u015fekilde bulunur.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Token, istemci taraf\u0131nda saklan\u0131r ve her istekte sunucuya g&ouml;nderilir.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<p><strong>Avantajlar\u0131:<\/strong><\/p>\r\n<ul>\r\n<li>\r\n<p>&ldquo;Stateless&rdquo;tir yani sunucuda oturum bilgisi tutulmaz.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Mikroservis, API ve mobil uygulamalarda m&uuml;kemmel performans sa\u011flar.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<p><strong>Dikkat edilmesi gerekenler:<\/strong><\/p>\r\n<ul>\r\n<li>\r\n<p>Token&rsquo;\u0131n s&uuml;resi mutlaka belirlenmelidir (expiry).<\/p>\r\n<\/li>\r\n<li>\r\n<p>Refresh token sistemi kullan\u0131lmal\u0131d\u0131r.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Do\u011frulama i&ccedil;in imzalama (signature) mekanizmas\u0131 \u015fartt\u0131r.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<blockquote>\r\n<p><br>JWT, kimlik do\u011frulamada esneklik sa\u011flar. Her istekte kullan\u0131c\u0131 bilgilerini tekrar sorgulamaya gerek kalmaz.<\/p>\r\n<\/blockquote>\r\n<hr>\r\n<h3>Ne Zaman Hangisini Kullanmal\u0131y\u0131z?<\/h3>\r\n<p>Bu &uuml;&ccedil; y&ouml;ntem ayn\u0131 amaca hizmet eder: <strong>kullan\u0131c\u0131y\u0131 tan\u0131mak ve oturumu y&ouml;netmek.<\/strong><br>Ancak her birinin g&uuml;&ccedil;l&uuml; oldu\u011fu alan farkl\u0131d\u0131r:<\/p>\r\n<ul>\r\n<li>\r\n<p><strong>Klasik web siteleri<\/strong> (&ouml;rne\u011fin blog, haber sitesi): Cookie + Session<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Mobil uygulamalar &amp; Mikroservisler:<\/strong> JWT (Token)<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Karma sistemler:<\/strong> Hibrit modeller (&ouml;rne\u011fin session bilgisini JWT ile ta\u015f\u0131mak)<\/p>\r\n<\/li>\r\n<\/ul>\r\n<p>\ud83c\udf93 <strong>K\u0131sa &ouml;zet:<\/strong><\/p>\r\n<ul>\r\n<li>\r\n<p>Cookie: Taray\u0131c\u0131da k&uuml;&ccedil;&uuml;k veriler.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Session: Sunucuda g&uuml;venli oturum.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Token (JWT): Ba\u011f\u0131ms\u0131z ve ta\u015f\u0131nabilir kimlik do\u011frulama.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>&nbsp;<\/h3>\r\n<p>Kimlik do\u011frulama sadece &ldquo;giri\u015f yapmak&rdquo; de\u011fildir.<br>Bu s&uuml;recin ard\u0131nda &ccedil;al\u0131\u015fan cookie, session ve token yap\u0131lar\u0131; modern web g&uuml;venli\u011finin temel ta\u015flar\u0131d\u0131r.<\/p>\r\n<p>Do\u011fru se&ccedil;imi yapmak hem kullan\u0131c\u0131 deneyimini hem de sistemin g&uuml;venli\u011fini do\u011frudan etkiler.<\/p>\r\n<ul>\r\n<li>\r\n<p>Basit web siteleri i&ccedil;in Cookie + Session yeterlidir.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Geni\u015f &ouml;l&ccedil;ekli API sistemleri i&ccedil;in JWT &ccedil;ok daha uygundur.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<p>&nbsp;<\/p>\r\n<p>Harika \ud83d\udc4d<br>\u0130\u015fte ayn\u0131 i&ccedil;eri\u011fin <strong>developer rehberi<\/strong> format\u0131na d&ouml;n&uuml;\u015ft&uuml;r&uuml;lm&uuml;\u015f, &ouml;\u011fretici, sade ama teknik olarak doyurucu versiyonu:<\/p>\r\n<hr>\r\n<h1>\ud83d\udc68&zwj;\ud83d\udcbb Developer Rehberi: Cookie mi? Session m\u0131? Token m\u0131?<\/h1>\r\n<p>Modern web geli\u015ftirmede <strong>kimlik do\u011frulama (authentication)<\/strong>, kullan\u0131c\u0131 g&uuml;venli\u011finin ve sistem b&uuml;t&uuml;nl&uuml;\u011f&uuml;n&uuml;n en kritik noktalar\u0131ndan biridir.<br>Bu s&uuml;re&ccedil;te en s\u0131k kar\u015f\u0131m\u0131za &ccedil;\u0131kan &uuml;&ccedil; temel yap\u0131 vard\u0131r: <strong>Cookie<\/strong>, <strong>Session<\/strong> ve <strong>Token (JWT)<\/strong>.<\/p>\r\n<p>Bu rehberde, her birinin nas\u0131l &ccedil;al\u0131\u015ft\u0131\u011f\u0131n\u0131, hangi durumda hangisini kullanman gerekti\u011fini ve aralar\u0131ndaki farklar\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz.<\/p>\r\n<hr>\r\n<h2>Cookie &ndash; Taray\u0131c\u0131 Tarafl\u0131 Depolama<\/h2>\r\n<p><strong>Cookie<\/strong>, web sunucusunun kullan\u0131c\u0131n\u0131n taray\u0131c\u0131s\u0131nda k&uuml;&ccedil;&uuml;k veri par&ccedil;alar\u0131 saklamas\u0131na izin veren mekanizmad\u0131r.<br>Taray\u0131c\u0131, her istekle birlikte bu verileri otomatik olarak sunucuya g&ouml;nderir.<\/p>\r\n<h3>Nas\u0131l &Ccedil;al\u0131\u015f\u0131r?<\/h3>\r\n<ol>\r\n<li>\r\n<p>Sunucu, istemciye bir cookie g&ouml;nderir.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Taray\u0131c\u0131 bu cookie&rsquo;yi saklar.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Ayn\u0131 alan ad\u0131na yap\u0131lan her istekte cookie otomatik olarak sunucuya eklenir.<\/p>\r\n<\/li>\r\n<\/ol>\r\n<h3>Avantajlar\u0131<\/h3>\r\n<ul>\r\n<li>\r\n<p>Kullan\u0131c\u0131 oturumu veya tercihleri kolayca hat\u0131rlanabilir.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Basit kimlik do\u011frulama i\u015flemleri i&ccedil;in uygundur.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>Dikkat Edilmesi Gerekenler<\/h3>\r\n<ul>\r\n<li>\r\n<p>Cookie&rsquo;ler taray\u0131c\u0131da sakland\u0131\u011f\u0131 i&ccedil;in manip&uuml;lasyona a&ccedil;\u0131kt\u0131r.<\/p>\r\n<\/li>\r\n<li>\r\n<p>G&uuml;venlik i&ccedil;in \u015fu parametreler <strong>mutlaka<\/strong> kullan\u0131lmal\u0131d\u0131r:<\/p>\r\n<ul>\r\n<li>\r\n<p><code>HttpOnly<\/code>: JavaScript eri\u015fimini engeller.<\/p>\r\n<\/li>\r\n<li>\r\n<p><code>Secure<\/code>: Sadece HTTPS &uuml;zerinden g&ouml;nderilmesini sa\u011flar.<\/p>\r\n<\/li>\r\n<li>\r\n<p><code>SameSite<\/code>: Cross-Site Request Forgery (CSRF) riskini azalt\u0131r.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<\/ul>\r\n<h3>&nbsp;<\/h3>\r\n<blockquote>\r\n<p>Kullan\u0131c\u0131n\u0131n dil tercihini veya oturum ID&rsquo;sini saklamak gibi basit senaryolarda idealdir.<\/p>\r\n<\/blockquote>\r\n<hr>\r\n<h2>Session &ndash; Sunucu Tarafl\u0131 Oturum Y&ouml;netimi<\/h2>\r\n<p><strong>Session<\/strong>, kullan\u0131c\u0131n\u0131n kimlik bilgilerini <strong>sunucu taraf\u0131nda<\/strong> saklayan bir yap\u0131d\u0131r.<br>Taray\u0131c\u0131da yaln\u0131zca oturumu temsil eden bir <strong>session ID<\/strong> bulunur.<\/p>\r\n<h3>Nas\u0131l &Ccedil;al\u0131\u015f\u0131r?<\/h3>\r\n<ol>\r\n<li>\r\n<p>Kullan\u0131c\u0131 giri\u015f yapt\u0131\u011f\u0131nda sunucu bir session olu\u015fturur.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Sunucu bu session&rsquo;a bir ID atar.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Bu ID, taray\u0131c\u0131ya cookie olarak g&ouml;nderilir.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Taray\u0131c\u0131 her istekte bu ID&rsquo;yi sunucuya yollar, sunucu ilgili oturumu bulur.<\/p>\r\n<\/li>\r\n<\/ol>\r\n<h3>Avantajlar\u0131<\/h3>\r\n<ul>\r\n<li>\r\n<p>Kullan\u0131c\u0131 bilgileri sunucuda sakland\u0131\u011f\u0131 i&ccedil;in g&uuml;venlidir.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Oturum verileri kolayca y&ouml;netilebilir ve g&uuml;ncellenebilir.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>Dikkat Edilmesi Gerekenler<\/h3>\r\n<ul>\r\n<li>\r\n<p>&Ouml;l&ccedil;eklendirme (load balancing) durumunda session verisinin payla\u015f\u0131lmas\u0131 gerekir (&ouml;rne\u011fin Redis veya Memcached ile).<\/p>\r\n<\/li>\r\n<li>\r\n<p>Her kullan\u0131c\u0131 i&ccedil;in sunucu belle\u011finde alan ayr\u0131ld\u0131\u011f\u0131 i&ccedil;in yo\u011fun trafikte y&uuml;k olu\u015fturabilir.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>&nbsp;<\/h3>\r\n<blockquote>\r\n<p>Klasik web uygulamalar\u0131, CMS yap\u0131lar\u0131 (&ouml;r. WordPress, Laravel admin panelleri) gibi &ldquo;oturum tabanl\u0131&rdquo; sistemler i&ccedil;in uygundur.<\/p>\r\n<\/blockquote>\r\n<hr>\r\n<h2>Token (JWT) &ndash; Stateless ve Ta\u015f\u0131nabilir Kimlik Do\u011frulama<\/h2>\r\n<p><strong>JWT (JSON Web Token)<\/strong>, kullan\u0131c\u0131 bilgilerini i&ccedil;eren, imzalanm\u0131\u015f (ve iste\u011fe ba\u011fl\u0131 olarak \u015fifrelenmi\u015f) bir JSON nesnesidir.<br>Sunucu, oturum bilgisini saklamak zorunda kalmaz. Her istekte token, kimli\u011fi do\u011frulamak i&ccedil;in yeterlidir.<\/p>\r\n<h3>Nas\u0131l &Ccedil;al\u0131\u015f\u0131r?<\/h3>\r\n<ol>\r\n<li>\r\n<p>Kullan\u0131c\u0131 giri\u015f yapt\u0131\u011f\u0131nda sunucu bir JWT &uuml;retir.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Token, kullan\u0131c\u0131 kimli\u011fi ve izin bilgilerini i&ccedil;erir.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Token, taray\u0131c\u0131da veya mobil uygulamada saklan\u0131r (genellikle <code>localStorage<\/code> veya <code>Authorization<\/code> header&rsquo;\u0131nda).<\/p>\r\n<\/li>\r\n<li>\r\n<p>Her API iste\u011finde token sunucuya g&ouml;nderilir.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Sunucu, token&rsquo;\u0131n imzas\u0131n\u0131 do\u011frular ve kimli\u011fi tan\u0131r.<\/p>\r\n<\/li>\r\n<\/ol>\r\n<h3>Avantajlar\u0131<\/h3>\r\n<ul>\r\n<li>\r\n<p>&ldquo;Stateless&rdquo; yap\u0131 sayesinde y&uuml;ksek performans sa\u011flar.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Mikroservis ve API mimarileri i&ccedil;in m&uuml;kemmel uyumludur.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Sunucu taraf\u0131nda oturum bilgisi saklanmaz, bu da &ouml;l&ccedil;eklenebilirli\u011fi art\u0131r\u0131r.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>Dikkat Edilmesi Gerekenler<\/h3>\r\n<ul>\r\n<li>\r\n<p>Token mutlaka <strong>s&uuml;reli (expiry)<\/strong> olmal\u0131d\u0131r.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Yenileme i&ccedil;in <strong>refresh token<\/strong> mekanizmas\u0131 kullan\u0131lmal\u0131d\u0131r.<\/p>\r\n<\/li>\r\n<li>\r\n<p>G&uuml;venlik i&ccedil;in <strong>public\/private key<\/strong> ile imzalama tercih edilmelidir.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h3>Kullan\u0131m Senaryosu<\/h3>\r\n<p>Mobil uygulamalar, SPA&rsquo;lar (React, Vue, Angular) ve mikroservis tabanl\u0131 sistemlerde idealdir.<\/p>\r\n<hr>\r\n<h2>Ne Zaman Kullanmal\u0131?<\/h2>\r\n<table>\r\n<thead>\r\n<tr>\r\n<th>Uygulama T&uuml;r&uuml;<\/th>\r\n<th>&Ouml;nerilen Y&ouml;ntem<\/th>\r\n<th>Neden<\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n<tr>\r\n<td>Klasik web sitesi (PHP, ASP, Django)<\/td>\r\n<td>Cookie + Session<\/td>\r\n<td>Basit, g&uuml;venli ve sunucu kontroll&uuml;<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Mobil \/ SPA uygulamalar\u0131<\/td>\r\n<td>JWT<\/td>\r\n<td>Stateless, performansl\u0131<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Mikroservis yap\u0131lar\u0131<\/td>\r\n<td>JWT<\/td>\r\n<td>Servisler aras\u0131 kimlik payla\u015f\u0131m\u0131 kolay<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Karma sistemler<\/td>\r\n<td>Hybrid (Session + Token)<\/td>\r\n<td>Esnek yap\u0131, farkl\u0131 istemcilere uygun<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<hr>\r\n<h2>&nbsp;<\/h2>\r\n<table>\r\n<thead>\r\n<tr>\r\n<th>Yap\u0131<\/th>\r\n<th>Saklama Yeri<\/th>\r\n<th>G&uuml;venlik<\/th>\r\n<th>Performans<\/th>\r\n<th>Uygun Oldu\u011fu Senaryolar<\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n<tr>\r\n<td>Cookie<\/td>\r\n<td>Taray\u0131c\u0131<\/td>\r\n<td>D&uuml;\u015f&uuml;k (ek ayarlarla art\u0131r\u0131labilir)<\/td>\r\n<td>Y&uuml;ksek<\/td>\r\n<td>Basit tercih saklama<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Session<\/td>\r\n<td>Sunucu<\/td>\r\n<td>Y&uuml;ksek<\/td>\r\n<td>Orta<\/td>\r\n<td>Web oturumlar\u0131<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>JWT<\/td>\r\n<td>\u0130stemci<\/td>\r\n<td>Orta (do\u011fru imzalama ile y&uuml;ksek)<\/td>\r\n<td>Y&uuml;ksek<\/td>\r\n<td>API &amp; Mobil uygulamalar<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<hr>\r\n<h2>Geli\u015ftirici \u0130&ccedil;in &Ouml;neriler<\/h2>\r\n<ul>\r\n<li>\r\n<p>Cookie veya Session kullan\u0131yorsan mutlaka <strong>CSRF korumas\u0131<\/strong> ekle.<\/p>\r\n<\/li>\r\n<li>\r\n<p>JWT kullan\u0131yorsan token s&uuml;relerini iyi ayarla ve <strong>refresh mekanizmas\u0131n\u0131<\/strong> unutma.<\/p>\r\n<\/li>\r\n<li>\r\n<p>API geli\u015ftiriyorsan <code>Authorization: Bearer <\/code> standard\u0131n\u0131 uygula.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Kullan\u0131c\u0131 verilerini <strong>asla taray\u0131c\u0131da d&uuml;z metin olarak saklama.<\/strong><\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<p>Kimlik do\u011frulama stratejisi, projenin yap\u0131s\u0131na g&ouml;re de\u011fi\u015fir.<br>E\u011fer tek sunuculu bir web projesi yap\u0131yorsan <strong>Session tabanl\u0131<\/strong>,<br>mikroservis veya mobil odakl\u0131 bir sistem geli\u015ftiriyorsan <strong>JWT tabanl\u0131<\/strong> yap\u0131 senin i&ccedil;in daha do\u011fru olacakt\u0131r.<\/p>\r\n<p>Do\u011fru yap\u0131 se&ccedil;imi:<\/p>\r\n<ul>\r\n<li>\r\n<p>G&uuml;venli\u011fi art\u0131r\u0131r,<\/p>\r\n<\/li>\r\n<li>\r\n<p>Performans\u0131 optimize eder,<\/p>\r\n<\/li>\r\n<li>\r\n<p>Ve sistem mimarisini uzun vadede s&uuml;rd&uuml;r&uuml;lebilir k\u0131lar.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<hr>\r\n<p>\ud83d\udd10 G&uuml;venli bir sistem, sadece g&uuml;&ccedil;l&uuml; parolalarla de\u011fil, do\u011fru&nbsp;<strong>kimlik do\u011frulama stratejisiyle<\/strong> ba\u015flar.<\/p>\r\n<hr>\r\n<p>&nbsp;<\/p>","excerpt":"Bir web sitesine giri\u015f yapt\u0131\u011f\u0131nda seni \u201ctan\u0131yan\u201d sistemin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 hi\u00e7 merak ettin mi?","created_at":"2025-10-24 10:02:17","updated_at":"2026-09-07 23:22:30","category_id":9,"view_count":519,"reading_time":8,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-10-24 10:02:00","featured_image":"resimyok.jpg","slug":"web-kimlik-dogrulama-temelleri","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":316,"title":"Awesome Nano-Banana Images","content":"<h1>Awesome Nano-Banana Images: Google'\u0131n Devrim Yaratan AI G&ouml;rsel Edit&ouml;r&uuml;<\/h1>\r\n<p>Google'\u0131n Gemini 2.5 Flash tabanl\u0131 g&ouml;rsel &uuml;retim modeli Nano-Banana, AI destekli g&ouml;rsel d&uuml;zenleme alan\u0131nda yeni bir &ccedil;a\u011f ba\u015flatt\u0131. <strong><a href=\"https:\/\/github.com\/PicoTrex\/Awesome-Nano-Banana-images\">Awesome-Nano-Banana-images<\/a><\/strong> GitHub repository'si, bu g&uuml;&ccedil;l&uuml; AI modelinin yeteneklerini sergileyen kapsaml\u0131 bir &ouml;rnek koleksiyonu sunuyor.<\/p>\r\n<h2>\ud83c\udf4c Nano-Banana Nedir?<\/h2>\r\n<p>Nano-Banana, Google'\u0131n devrim yaratan AI g&ouml;rsel d&uuml;zenleme modelidir ve \"AI &ccedil;izim arac\u0131\"ndan \"AI yarat\u0131c\u0131 partner\"a bir paradigma de\u011fi\u015fimini temsil eder. Art\u0131k pasif \u015fekilde komutlar\u0131 y&uuml;r&uuml;tmekle kalm\u0131yor, mevcut g&ouml;rsellerin ba\u011flam\u0131n\u0131, \u0131\u015f\u0131\u011f\u0131n\u0131, fiziksel mant\u0131\u011f\u0131n\u0131 ve yarat\u0131c\u0131 niyetini derinlemesine anl\u0131yor.<\/p>\r\n<h3>Temel &Ouml;zellikler<\/h3>\r\n<p><strong>\ud83c\udfaf Ba\u011flam Bilincinde D&uuml;zenleme<\/strong> \u0130nsanlar ve ortamlar aras\u0131ndaki ili\u015fkileri ger&ccedil;ekten anlayarak, arka plan de\u011fi\u015fikli\u011finden sonra \u0131\u015f\u0131kland\u0131rma ve yans\u0131malar\u0131 ak\u0131ll\u0131ca yeniden i\u015fler.<\/p>\r\n<p><strong>\ud83d\udd27 Cerrahi Hassasiyet<\/strong> Nesneleri son derece hassas bir \u015fekilde ekler veya de\u011fi\u015ftirir, &ouml;rt&uuml;\u015fme ili\u015fkilerini ve \u0131\u015f\u0131k efektlerini m&uuml;kemmel \u015fekilde y&ouml;netir.<\/p>\r\n<p><strong>\ud83c\udf10 Derin 3D Anlay\u0131\u015f\u0131<\/strong> 2D g&ouml;r&uuml;nt&uuml;ler i&ccedil;indeki 3D yap\u0131lar\u0131 \"g&ouml;rebilir\" ve ger&ccedil;ek uzamsal alg\u0131 d&uuml;zenlemesi yapabilir.<\/p>\r\n<p><strong>\ud83c\udfac Stil Tutarl\u0131l\u0131\u011f\u0131<\/strong> Tek referans g&ouml;rsellere dayanarak tamamen birle\u015fik \"g&ouml;rsel d&uuml;nyalar\" olu\u015fturur.<\/p>\r\n<p><strong>\u2728 \u0130\u015fbirlik&ccedil;i Yarat\u0131m<\/strong> \"Efendi-hizmet&ccedil;i diyalogu\"ndan yarat\u0131c\u0131lar aras\u0131nda \"ilham ileti\u015fimi\"ne evrilir.<\/p>\r\n<h2>\ud83d\udcca Nano-Consistent-150K Dataset<\/h2>\r\n<p>Repository, Nano-Banana kullan\u0131larak olu\u015fturulan ve 150 bin y&uuml;ksek kaliteli &ouml;rne\u011fi a\u015fan ilk veri seti olan Nano-consistent-150k'y\u0131 sunuyor. Bu veri seti, &ccedil;e\u015fitli ve karma\u015f\u0131k d&uuml;zenleme senaryolar\u0131nda insan kimli\u011fi tutarl\u0131l\u0131\u011f\u0131n\u0131 korumak i&ccedil;in &ouml;zel olarak tasarlanm\u0131\u015f.<\/p>\r\n<h3>Kimlik Tutarl\u0131l\u0131\u011f\u0131<\/h3>\r\n<p>Veri setinin en &ouml;nemli &ouml;zelli\u011fi ola\u011fan&uuml;st&uuml; kimlik tutarl\u0131l\u0131\u011f\u0131d\u0131r: tek bir portre i&ccedil;in, &ccedil;e\u015fitli g&ouml;revler ve talimatlar aras\u0131nda 35'ten fazla farkl\u0131 d&uuml;zenleme &ccedil;\u0131kt\u0131s\u0131 sa\u011flan\u0131r. Bu, ayn\u0131 ki\u015fi etraf\u0131nda farkl\u0131 d&uuml;zenleme g&ouml;revleri, talimatlar ve modlar\u0131 aras\u0131nda sorunsuz ba\u011flant\u0131lar kuran interleaved (i&ccedil; i&ccedil;e) veri olu\u015fturmay\u0131 m&uuml;mk&uuml;n k\u0131lar.<\/p>\r\n<h3>Performans Kar\u015f\u0131la\u015ft\u0131rmas\u0131<\/h3>\r\n<p>Nano-banana, g&ouml;rsel &uuml;retim ve d&uuml;nya bilgisi konusunda &uuml;st&uuml;n yetenekler sergiler ve &ouml;zellikle kimlik tutarl\u0131l\u0131\u011f\u0131nda g&uuml;&ccedil;l&uuml; performans g&ouml;sterir. Buna kar\u015f\u0131l\u0131k, OpenAI'nin GPT-4o'su ve en geli\u015fmi\u015f a&ccedil;\u0131k kaynak model olan Qwen-Image bile tutarl\u0131l\u0131k g&ouml;revlerinde g&ouml;zle g&ouml;r&uuml;l&uuml;r \u015fekilde geride kal\u0131r.<\/p>\r\n<h2>\ud83c\udfa8 Kullan\u0131m Senaryolar\u0131 ve &Ouml;rnekler<\/h2>\r\n<p>Repository, Nano-banana'n\u0131n &ccedil;e\u015fitli g&ouml;rev senaryolar\u0131nda &uuml;retti\u011fi etkileyici g&ouml;rselleri ve promptlar\u0131 topluyor, Google'\u0131n g&ouml;rsel &uuml;retim ve d&uuml;zenlemedeki s\u0131n\u0131rs\u0131z olanaklar\u0131n\u0131 kapsaml\u0131 bir \u015fekilde sergiliyor.<\/p>\r\n<h3>1. Karakter D&ouml;n&uuml;\u015f&uuml;mleri<\/h3>\r\n<p><strong>\u0130ll&uuml;strasyonlar\u0131 Fig&uuml;rlere D&ouml;n&uuml;\u015ft&uuml;rme<\/strong> &Ccedil;izimlerinizi ger&ccedil;ek&ccedil;i 3D fig&uuml;rlere veya koleksiyonluk &uuml;r&uuml;nlere d&ouml;n&uuml;\u015ft&uuml;r&uuml;n.<\/p>\r\n<p><strong>LEGO ve Gundam Tarz\u0131 Paketler<\/strong> Foto\u011fraftaki ki\u015fiyi LEGO minifig&uuml;r veya Gundam model kiti paketi tarz\u0131na d&ouml;n&uuml;\u015ft&uuml;r&uuml;n, izometrik perspektif kullanarak sunun.<\/p>\r\n<h3>2. Tarihsel ve Temporal D&uuml;zenleme<\/h3>\r\n<p><strong>Farkl\u0131 &Ccedil;a\u011flardan Foto\u011fraflar<\/strong> Portre verilerini farkl\u0131 tarihsel veya zamansal ba\u011flamlara yerle\u015ftirin. Hem giyim stillerinin hem de arka plan detaylar\u0131n\u0131n belirlenen d&ouml;neme uygun olmas\u0131 gerekir. &Ouml;rne\u011fin, bir ki\u015fi 1905 g&uuml;nl&uuml;k ya\u015fam ortam\u0131nda veya 2000 y\u0131l\u0131n\u0131n milenyum ortam\u0131nda i\u015flenebilir.<\/p>\r\n<h3>3. Sa&ccedil; Stili ve Renk De\u011fi\u015fiklikleri<\/h3>\r\n<p>Portre verilerinde sa&ccedil; stili ve renk modifikasyonu g&ouml;revini ke\u015ffedin, Nano-banana kullanarak bir ki\u015finin sa&ccedil; detaylar\u0131n\u0131 d&uuml;zenleyin. D&uuml;z kak&uuml;lden dalgal\u0131 bukleler veya topuz yapabilir, siyah sa&ccedil;\u0131 sar\u0131\u015f\u0131n, k\u0131z\u0131l veya di\u011fer renklere &ccedil;evirebilirsiniz.<\/p>\r\n<h3>4. OOTD (Outfit of The Day)<\/h3>\r\n<p>&Ccedil;evrimi&ccedil;i kaynaklardan giysi &ouml;\u011feleri toplay\u0131n ve rastgele 2-6 giysiyi portre ile birle\u015ftirerek k\u0131yafet g&ouml;sterimi yap\u0131n. &Uuml;retilen &ouml;rneklerin y&uuml;z kimli\u011fi tutarl\u0131l\u0131\u011f\u0131n\u0131 korumas\u0131, giysilerin detaylar\u0131n\u0131 ve sunumunu daha iyi vurgulamak i&ccedil;in poz varyasyonlar\u0131 i&ccedil;ermesi gerekir.<\/p>\r\n<h3>5. \u0130nsan Etkile\u015fimi<\/h3>\r\n<p>Temel kimlik setinden rastgele 2-4 g&ouml;rsel se&ccedil;in ve GPT kullanarak etkile\u015fim odakl\u0131 talimatlar olu\u015fturun. G&ouml;rev, sadece bireyleri yan yana yerle\u015ftirmekle kalmaz, ki\u015fileraras\u0131 eylemler ve etkile\u015fimler &uuml;zerinde durur. \u0130ki ki\u015finin kahve i&ccedil;ip sohbet etmesi veya d&ouml;rt ki\u015filik bir grubun grup olu\u015fturup birlikte performans sergilemesi gibi &ouml;rnekler.<\/p>\r\n<h3>6. G&ouml;rsel D&uuml;zenleme Teknikleri<\/h3>\r\n<p><strong>&Ccedil;apraz G&ouml;r&uuml;n&uuml;m &Uuml;retimi<\/strong> Farkl\u0131 a&ccedil;\u0131lardan ayn\u0131 sahneyi olu\u015fturun.<\/p>\r\n<p><strong>&Ccedil;izgi Sanat\u0131 Renklendirme<\/strong> Renk paleti kullanarak &ccedil;izgi sanat\u0131n\u0131 renklendirin.<\/p>\r\n<p><strong>Eski Foto\u011fraflar\u0131 Renklendirme<\/strong> Siyah beyaz eski foto\u011fraflar\u0131n\u0131za hayat verin.<\/p>\r\n<p><strong>Poz Kontrol&uuml;<\/strong> Karakter pozunu de\u011fi\u015ftirin veya &ccedil;izgi &ccedil;iziminden poz belirleyin.<\/p>\r\n<p><strong>Ayd\u0131nlatma Kontrol&uuml;<\/strong> G&ouml;rsellerinizin ayd\u0131nlatmas\u0131n\u0131 hassas \u015fekilde kontrol edin.<\/p>\r\n<h3>7. &Ouml;zel Efektler<\/h3>\r\n<p><strong>3D \u0130nsan Organlar\u0131<\/strong> Akademik sunum i&ccedil;in 3D insan organ modeli g&ouml;sterileri olu\u015fturun, her organ\u0131n prensiplerini ve i\u015flevlerini a&ccedil;\u0131klayan notlarla.<\/p>\r\n<p><strong>Mermer Heykeller<\/strong> Parlayan mermerden yap\u0131lm\u0131\u015f ultra detayl\u0131 heykeller olu\u015fturun. Heykel, mermer y&uuml;zeyinin \u0131\u015f\u0131lt\u0131s\u0131n\u0131 ve sanatsal i\u015f&ccedil;ili\u011fini vurgulayan p&uuml;r&uuml;zs&uuml;z ve yans\u0131t\u0131c\u0131 &ouml;zelliklere sahip olmal\u0131.<\/p>\r\n<p><strong>\u015eeffaf Arka Planlar<\/strong> Konuyu &ccedil;\u0131kar\u0131n ve \u015feffaf bir katmana yerle\u015ftirin.<\/p>\r\n<p><strong>Dev Fig&uuml;rler<\/strong> Tokyo'nun merkezine dev bir anime fig&uuml;r&uuml; yerle\u015ftirin.<\/p>\r\n<h3>8. Profesyonel Uygulamalar<\/h3>\r\n<p><strong>Infografikler<\/strong> Makale i&ccedil;eri\u011fi i&ccedil;in infografik olu\u015fturun. \u0130&ccedil;eri\u011fi T&uuml;rk&ccedil;e'ye &ccedil;evirin ve makaleden temel bilgileri &ccedil;\u0131kar\u0131n. G&ouml;rseldeki i&ccedil;eri\u011fi k\u0131sa tutun, sadece ana ba\u015fl\u0131\u011f\u0131 koruyun.<\/p>\r\n<p><strong>Kimlik Foto\u011fraflar\u0131<\/strong> Mavi arka planl\u0131, profesyonel i\u015f tutumunda, &ouml;nden y&uuml;z, hafif g&uuml;l&uuml;mseme ile 2 in&ccedil; kimlik foto\u011fraf\u0131 olu\u015fturun.<\/p>\r\n<p><strong>&Uuml;r&uuml;n Foto\u011fraf&ccedil;\u0131l\u0131\u011f\u0131<\/strong> Bu &uuml;r&uuml;n&uuml; patlay\u0131c\u0131 d\u0131\u015fa d&ouml;n&uuml;k dinamik d&uuml;zenlemede ana bile\u015fenlerle &ccedil;evrili dramatik modern bir sahnede foto\u011fraflay\u0131n.<\/p>\r\n<p><strong>Makyaj Analizi<\/strong> G&ouml;rselleri analiz ederek makyaj &ouml;nerileri sunun.<\/p>\r\n<h2>\ud83c\udfaf Promptlar ve Kullan\u0131m \u0130pu&ccedil;lar\u0131<\/h2>\r\n<h3>Genel Prompt Yap\u0131s\u0131<\/h3>\r\n<pre><code>[G&ouml;rev Tan\u0131m\u0131] + [Detayl\u0131 A&ccedil;\u0131klama] + [Stil\/Format] + [Teknik Detaylar]\r\n<\/code><\/pre>\r\n<h3>&Ouml;rnek Promptlar<\/h3>\r\n<p><strong>Karakter D&ouml;n&uuml;\u015f&uuml;m&uuml;:<\/strong><\/p>\r\n<pre><code>Transform the person in the photo into a LEGO minifigure packaging \r\nbox style, presented in isometric perspective. Label the box with \r\nthe title \"[\u0130sim]\". Display the LEGO minifigure based on the person, \r\nalong with their essential items as LEGO accessories.\r\n<\/code><\/pre>\r\n<p><strong>Tarihsel Sahne:<\/strong><\/p>\r\n<pre><code>Place this person in [year\/era], ensuring clothing and background \r\ndetails accurately reflect the period. Include appropriate props, \r\narchitecture, and lighting of that time.\r\n<\/code><\/pre>\r\n<p><strong>Sa&ccedil; Stili De\u011fi\u015fimi:<\/strong><\/p>\r\n<pre><code>Change the hairstyle from [current style] to [desired style], \r\nmaintaining facial features and identity. Adjust lighting and \r\nshadows naturally.\r\n<\/code><\/pre>\r\n<p><strong>OOTD G&ouml;sterimi:<\/strong><\/p>\r\n<pre><code>Dress this person in [clothing items from image 2], create realistic \r\noutdoor fashion photos with natural lighting, street style, clear \r\nfull-body shots. Maintain identity and vary poses.\r\n<\/code><\/pre>\r\n<h3>\u26a0\ufe0f &Ouml;nemli Notlar<\/h3>\r\n<p>Nano-Banana'n\u0131n a&ccedil;\u0131klama sonu&ccedil;lar\u0131 tamamen do\u011fru de\u011fildir, kullan\u0131mdan &ouml;nce bilgilerin do\u011frulu\u011funu dikkatlice kontrol etmelisiniz.<\/p>\r\n<h2>\ud83d\ude80 Community ve Kaynaklar<\/h2>\r\n<h3>Kaynak Platformlar<\/h3>\r\n<p>Bu &ouml;rnekler a\u011f\u0131rl\u0131kl\u0131 olarak Twitter\/X ve Xiaohongshu (RED) gibi sosyal medya platformlar\u0131ndan toplanm\u0131\u015ft\u0131r.<\/p>\r\n<h3>GitHub Repository &Ouml;zellikleri<\/h3>\r\n<p>Repository, 68 yarat\u0131c\u0131 kullan\u0131m &ouml;rne\u011fi i&ccedil;eren kapsaml\u0131 bir koleksiyon sunuyor ve Nano-Banana'n\u0131n AI g&ouml;rsel &uuml;retim ve d&uuml;zenleme yeteneklerini sergiliyor. Her &ouml;rnek i&ccedil;in:<\/p>\r\n<ul>\r\n<li>Detayl\u0131 prompt'lar<\/li>\r\n<li>&Ouml;rnek g&ouml;rseller<\/li>\r\n<li>Kullan\u0131m a&ccedil;\u0131klamalar\u0131<\/li>\r\n<li>Teknik detaylar<\/li>\r\n<li>Best practice &ouml;nerileri<\/li>\r\n<\/ul>\r\n<h3>&Ccedil;oklu Dil Deste\u011fi<\/h3>\r\n<p>Repository, farkl\u0131 dillerde README dosyalar\u0131 sunuyor:<\/p>\r\n<ul>\r\n<li>\ud83c\uddf9\ud83c\uddf7 README_tr.md (T&uuml;rk&ccedil;e)<\/li>\r\n<li>\ud83c\uddec\ud83c\udde7 README_en.md (\u0130ngilizce)<\/li>\r\n<li>\ud83c\udde8\ud83c\uddf3 README.md (&Ccedil;ince)<\/li>\r\n<li>\ud83c\uddef\ud83c\uddf5 README_ja.md (Japonca)<\/li>\r\n<\/ul>\r\n<h2>\ud83d\udca1 Pratik Kullan\u0131m Senaryolar\u0131<\/h2>\r\n<h3>E-Ticaret ve Pazarlama<\/h3>\r\n<p><strong>&Uuml;r&uuml;n G&ouml;rselleri:<\/strong><\/p>\r\n<ul>\r\n<li>&Uuml;r&uuml;nleri farkl\u0131 ortamlarda g&ouml;sterin<\/li>\r\n<li>&Uuml;r&uuml;n varyasyonlar\u0131 olu\u015fturun<\/li>\r\n<li>Marka tutarl\u0131l\u0131\u011f\u0131 sa\u011flay\u0131n<\/li>\r\n<\/ul>\r\n<p><strong>Moda ve Stil:<\/strong><\/p>\r\n<ul>\r\n<li>Sanal deneme odas\u0131 efektleri<\/li>\r\n<li>Farkl\u0131 kombinasyon &ouml;nerileri<\/li>\r\n<li>Sezon koleksiyonlar\u0131<\/li>\r\n<\/ul>\r\n<h3>\u0130&ccedil;erik &Uuml;retimi<\/h3>\r\n<p><strong>Sosyal Medya:<\/strong><\/p>\r\n<ul>\r\n<li>Tutarl\u0131 karakter i&ccedil;erikleri<\/li>\r\n<li>Tematik g&ouml;nderi serileri<\/li>\r\n<li>Viral i&ccedil;erik fikirleri<\/li>\r\n<\/ul>\r\n<p><strong>Hikaye Anlat\u0131m\u0131:<\/strong> Klasik siyah beyaz film noir dedektif hikayesinde bu iki karakterle 12 b&ouml;l&uuml;ml&uuml;k, ba\u011f\u0131ml\u0131l\u0131k yapan ilgi &ccedil;ekici bir hikaye ve 12 g&ouml;rsel olu\u015fturun. Kay\u0131p hazine hakk\u0131nda olsun, boyunca ipu&ccedil;lar\u0131 als\u0131nlar ve sonunda ke\u015ffetsinler. Hikaye boyunca heyecan verici olsun, duygusal ini\u015fler &ccedil;\u0131k\u0131\u015flar olsun ve harika bir son ve mutlu notla bitsin.<\/p>\r\n<h3>E\u011fitim ve Akademik<\/h3>\r\n<p><strong>G&ouml;rsel Materyaller:<\/strong> Akademik sunumlar i&ccedil;in 3D organlar, anatomik g&ouml;sterimler ve e\u011fitim materyalleri olu\u015fturun.<\/p>\r\n<p><strong>\u0130nfografikler:<\/strong> Karma\u015f\u0131k bilgileri g&ouml;rselle\u015ftirin ve &ouml;\u011frenmeyi kolayla\u015ft\u0131r\u0131n.<\/p>\r\n<h2>\ud83c\udf93 Kimler Kullanmal\u0131?<\/h2>\r\n<h3>Tasar\u0131mc\u0131lar ve Sanat&ccedil;\u0131lar<\/h3>\r\n<ul>\r\n<li>H\u0131zl\u0131 prototip olu\u015fturma<\/li>\r\n<li>Konsept geli\u015ftirme<\/li>\r\n<li>Stil denemeleri<\/li>\r\n<\/ul>\r\n<h3>Pazarlamac\u0131lar<\/h3>\r\n<ul>\r\n<li>Kampanya g&ouml;rselleri<\/li>\r\n<li>A\/B test materyalleri<\/li>\r\n<li>Sosyal medya i&ccedil;eri\u011fi<\/li>\r\n<\/ul>\r\n<h3>\u0130&ccedil;erik &Uuml;reticileri<\/h3>\r\n<ul>\r\n<li>YouTube thumbnail'lar\u0131<\/li>\r\n<li>Blog g&ouml;rselleri<\/li>\r\n<li>Sosyal medya postlar\u0131<\/li>\r\n<\/ul>\r\n<h3>Geli\u015ftiriciler<\/h3>\r\n<ul>\r\n<li>UI\/UX mock-up'lar\u0131<\/li>\r\n<li>App g&ouml;rselleri<\/li>\r\n<li>Oyun asset'leri<\/li>\r\n<\/ul>\r\n<h3>E\u011fitimciler<\/h3>\r\n<ul>\r\n<li>E\u011fitim materyalleri<\/li>\r\n<li>Sunum g&ouml;rselleri<\/li>\r\n<li>\u0130nteraktif i&ccedil;erikler<\/li>\r\n<\/ul>\r\n<h2>\ud83d\udd2e Gelecek ve G&uuml;ncellemeler<\/h2>\r\n<p>Repository s&uuml;rekli g&uuml;ncelleniyor:<\/p>\r\n<p><strong>Son G&uuml;ncellemeler:<\/strong><\/p>\r\n<ul>\r\n<li>2025 Eyl&uuml;l 24: 5. repository g&uuml;ncellemesi<\/li>\r\n<li>2025 Eyl&uuml;l 18: Nano-consistent-150k dataset yay\u0131nland\u0131<\/li>\r\n<li>2025 Eyl&uuml;l 9: 4. repository g&uuml;ncellemesi<\/li>\r\n<\/ul>\r\n<p><strong>Gelecek Planlar:<\/strong> Nano-consistent-150K veri seti, g&ouml;rsel &uuml;retim ve birle\u015fik modeller &uuml;zerine gelecekteki ara\u015ft\u0131rmalar\u0131 te\u015fvik etmek i&ccedil;in yay\u0131nlanacak. Ayr\u0131ca, kimlik tutarl\u0131l\u0131\u011f\u0131n\u0131 ve karma\u015f\u0131k d&uuml;zenleme yeteneklerini ilerletmek i&ccedil;in ek destek sunarak, bu veri seti &uuml;zerinde ince ayar yap\u0131lm\u0131\u015f Qwen-Image LoRA a\u011f\u0131rl\u0131klar\u0131 yak\u0131n gelecekte sa\u011flanacak.<\/p>\r\n<h2>\ud83d\udee0\ufe0f Alternatif Ara&ccedil;lar<\/h2>\r\n<h3>ChatImg.ai<\/h3>\r\n<p>&Ccedil;e\u015fitli AI g&ouml;rsel &uuml;retim modellerini h\u0131zl\u0131ca deneyimlemek istiyorsan\u0131z chatimg.ai web sitesini &ouml;neriyoruz. GPT-4o, Gemini, Flux, Grok ve daha fazlas\u0131 gibi ana ak\u0131m modelleri destekler, say\u0131s\u0131z g&uuml;zel \u015fablon sa\u011flar ve &ouml;zel prompt olu\u015fturmay\u0131 destekler.<\/p>\r\n<h3>SuperMaker AI<\/h3>\r\n<p>&Uuml;cretsiz Nano-Banana AI ile foto\u011fraflar\u0131 metin veya g&ouml;rsel kullanarak d&uuml;zenleyin.<\/p>\r\n<h2>\ud83d\udcc8 Avantajlar ve S\u0131n\u0131rlamalar<\/h2>\r\n<h3>\u2705 Avantajlar<\/h3>\r\n<ol>\r\n<li><strong>Kimlik Tutarl\u0131l\u0131\u011f\u0131:<\/strong> Ayn\u0131 ki\u015fiyi farkl\u0131 senaryolarda m&uuml;kemmel \u015fekilde korur<\/li>\r\n<li><strong>&Ccedil;ok Y&ouml;nl&uuml;l&uuml;k:<\/strong> 68+ farkl\u0131 kullan\u0131m senaryosu<\/li>\r\n<li><strong>Kalite:<\/strong> Y&uuml;ksek &ccedil;&ouml;z&uuml;n&uuml;rl&uuml;kl&uuml;, profesyonel sonu&ccedil;lar<\/li>\r\n<li><strong>H\u0131z:<\/strong> H\u0131zl\u0131 &uuml;retim ve iterasyon<\/li>\r\n<li><strong>&Uuml;cretsiz:<\/strong> A&ccedil;\u0131k kaynak repository ve &ouml;rnekler<\/li>\r\n<\/ol>\r\n<h3>\u26a0\ufe0f Dikkat Edilmesi Gerekenler<\/h3>\r\n<ol>\r\n<li><strong>Do\u011fruluk:<\/strong> AI &uuml;retimi sonu&ccedil;lar\u0131 her zaman %100 do\u011fru olmayabilir<\/li>\r\n<li><strong>Kontrol:<\/strong> Baz\u0131 detaylarda hassas kontrol zorlu\u011fu<\/li>\r\n<li><strong>Etik:<\/strong> Deepfake ve yan\u0131lt\u0131c\u0131 i&ccedil;erik riskleri<\/li>\r\n<li><strong>Telif Hakk\u0131:<\/strong> &Uuml;retilen i&ccedil;eriklerin kullan\u0131m haklar\u0131<\/li>\r\n<li><strong>Veri Gizlili\u011fi:<\/strong> Y&uuml;klenen g&ouml;rsellerin i\u015flenmesi<\/li>\r\n<\/ol>\r\n<h2>\ud83c\udfaf Best Practices<\/h2>\r\n<h3>1. Prompt Yaz\u0131m\u0131<\/h3>\r\n<ul>\r\n<li>Net ve detayl\u0131 talimatlar verin<\/li>\r\n<li>Stil, format ve teknik detaylar\u0131 belirtin<\/li>\r\n<li>Referans g&ouml;rselleri ekleyin<\/li>\r\n<li>\u0130teratif d&uuml;zeltmeler yap\u0131n<\/li>\r\n<\/ul>\r\n<h3>2. Kimlik Tutarl\u0131l\u0131\u011f\u0131<\/h3>\r\n<ul>\r\n<li>Ayn\u0131 referans g&ouml;rseli kullan\u0131n<\/li>\r\n<li>Tutarl\u0131 \u0131\u015f\u0131kland\u0131rma tan\u0131mlar\u0131 yap\u0131n<\/li>\r\n<li>A&ccedil;\u0131y\u0131 ve perspektifi koruyun<\/li>\r\n<\/ul>\r\n<h3>3. Kalite Kontrol&uuml;<\/h3>\r\n<ul>\r\n<li>&Ccedil;\u0131kt\u0131lar\u0131 manuel olarak kontrol edin<\/li>\r\n<li>Gerekirse post-processing yap\u0131n<\/li>\r\n<li>A\/B test edin<\/li>\r\n<\/ul>\r\n<h3>4. Etik Kullan\u0131m<\/h3>\r\n<ul>\r\n<li>\u0130zinsiz ki\u015fi g&ouml;rselleri kullanmay\u0131n<\/li>\r\n<li>Yan\u0131lt\u0131c\u0131 i&ccedil;erik &uuml;retmeyin<\/li>\r\n<li>Kaynak ve at\u0131flar\u0131 belirtin<\/li>\r\n<li>Telif haklar\u0131na sayg\u0131 g&ouml;sterin<\/li>\r\n<\/ul>\r\n<h2>\ud83c\udf1f Sonu&ccedil;<\/h2>\r\n<p><strong>Awesome-Nano-Banana-images<\/strong> repository'si, karakter tasar\u0131m\u0131, foto\u011fraf manip&uuml;lasyonu, stil transferi, 3D render, &uuml;r&uuml;n g&ouml;rselle\u015ftirme ve &ccedil;oklu g&ouml;rsel f&uuml;zyonu gibi &ccedil;e\u015fitli uygulamalar\u0131 g&ouml;steren kapsaml\u0131 bir koleksiyondur.<\/p>\r\n<p>Google'\u0131n Nano-Banana modeli, AI g&ouml;rsel d&uuml;zenleme alan\u0131nda yeni standartlar belirliyor ve bu repository sayesinde:<\/p>\r\n<p>\u2705 68+ yarat\u0131c\u0131 kullan\u0131m &ouml;rne\u011fi \u2705 150K+ y&uuml;ksek kaliteli dataset \u2705 Kimlik tutarl\u0131l\u0131\u011f\u0131nda &uuml;st&uuml;n performans \u2705 &Ccedil;oklu dil deste\u011fi \u2705 S&uuml;rekli g&uuml;ncellenen i&ccedil;erik \u2705 A&ccedil;\u0131k kaynak ve &uuml;cretsiz<\/p>\r\n<p>\u0130ster profesyonel tasar\u0131mc\u0131, ister i&ccedil;erik &uuml;reticisi, ister hobi olarak g&ouml;rsel d&uuml;zenleme yap\u0131yor olun, bu kaynak size s\u0131n\u0131rs\u0131z yarat\u0131c\u0131 olas\u0131l\u0131klar sunuyor.<\/p>\r\n<hr>\r\n<p><strong>Hemen Ke\u015ffedin:<\/strong> <a href=\"https:\/\/github.com\/PicoTrex\/Awesome-Nano-Banana-images\">GitHub Repository<\/a><\/p>\r\n<p><strong>Proje Websitesi:<\/strong> <a href=\"https:\/\/picotrex.github.io\/Awesome-Nano-Banana-images\/\">Nano Banana 150K<\/a><\/p>\r\n<p><strong>T&uuml;rk&ccedil;e Dok&uuml;mantasyon:<\/strong> <a href=\"https:\/\/github.com\/PicoTrex\/Awesome-Nano-Banana-images\/blob\/main\/README_tr.md\">README_tr.md<\/a><\/p>\r\n<p><em>Google'\u0131n AI g&ouml;rsel edit&ouml;r&uuml; ile yarat\u0131c\u0131l\u0131\u011f\u0131n\u0131z\u0131 s\u0131n\u0131rs\u0131z hale getirin!<\/em> \ud83c\udf4c\u2728<\/p>","excerpt":"Google'\u0131n Gemini 2.5 Flash tabanl\u0131 g\u00f6rsel \u00fcretim modeli Nano-Banana, AI destekli g\u00f6rsel d\u00fczenleme alan\u0131nda yeni bir \u00e7a\u011f ba\u015flatt\u0131. Awesome-Nano-Banana-images GitHub repository'si, bu g\u00fc\u00e7l\u00fc AI modelinin yeteneklerini sergileyen kapsaml\u0131 bir \u00f6rnek koleksiyonu sunuyor.","created_at":"2025-09-29 23:22:28","updated_at":"2026-09-07 20:13:50","category_id":9,"view_count":777,"reading_time":12,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-09-29 23:22:28","featured_image":"resimyok.jpg","slug":"awesome-nano-banana-images","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":314,"title":"AI Destekli Code Review: CLI Ara\u00e7lar\u0131yla Yeni Nesil Kod","content":"<h1>AI Destekli Code Review: CLI Ara&ccedil;lar\u0131yla Yeni Nesil Kod \u0130ncelemesi<\/h1>\r\n<p>Yaz\u0131l\u0131m geli\u015ftirme s&uuml;re&ccedil;lerinde code review (kod incelemesi), kod kalitesini art\u0131ran ve hatalar\u0131 erken a\u015famada yakalayan kritik bir ad\u0131md\u0131r. Ancak geleneksel manuel review s&uuml;re&ccedil;leri zaman al\u0131c\u0131 olabilir ve insan hatas\u0131na a&ccedil;\u0131kt\u0131r. \u0130\u015fte tam bu noktada AI destekli CLI (Command Line Interface) ara&ccedil;lar\u0131 devreye giriyor ve oyunun kurallar\u0131n\u0131 de\u011fi\u015ftiriyor.<\/p>\r\n<h2>Neden CLI Ara&ccedil;lar\u0131yla Code Review?<\/h2>\r\n<h3>Geleneksel Review S&uuml;recinin Zorluklar\u0131<\/h3>\r\n<p>Birden fazla projede e\u015f zamanl\u0131 &ccedil;al\u0131\u015f\u0131rken kar\u015f\u0131la\u015ft\u0131\u011f\u0131m\u0131z en b&uuml;y&uuml;k sorunlardan biri, her projenin kod kalitesini tutarl\u0131 \u015fekilde takip edebilmektir. 4-8 terminal penceresinde ayn\u0131 anda farkl\u0131 projelere kod yazd\u0131rd\u0131\u011f\u0131n\u0131zda:<\/p>\r\n<ul>\r\n<li>Her de\u011fi\u015fikli\u011fi manuel olarak takip etmek imk&acirc;ns\u0131z hale gelir<\/li>\r\n<li>K&uuml;&ccedil;&uuml;k hatalar ve antipatternler g&ouml;zden ka&ccedil;abilir<\/li>\r\n<li>Context switching nedeniyle verimlilik d&uuml;\u015fer<\/li>\r\n<li>Code review i&ccedil;in ayr\u0131lan s&uuml;re geometrik olarak artar<\/li>\r\n<\/ul>\r\n<h3>CLI Ara&ccedil;lar\u0131n\u0131n Avantajlar\u0131<\/h3>\r\n<p>AI destekli CLI ara&ccedil;lar\u0131yla code review yapmak hem daha keyifli hem de &ccedil;ok daha etkili bir deneyim sunuyor:<\/p>\r\n<p><strong>\ud83c\udfaf Proje Ba\u011flam\u0131n\u0131 Anlama<\/strong><\/p>\r\n<ul>\r\n<li>CLI ara&ccedil;lar\u0131 projenin tamam\u0131n\u0131 analiz ederek context'i kavrar<\/li>\r\n<li>Mimari kararlar\u0131 ve kod stilini &ouml;\u011frenir<\/li>\r\n<li>Proje spesifik best practice'lere uyumu kontrol eder<\/li>\r\n<\/ul>\r\n<p><strong>\u26a1 An\u0131nda Aksiyon Alma<\/strong><\/p>\r\n<ul>\r\n<li>Sadece g&ouml;zden ge&ccedil;irmekle kalmaz, gerekirse kod yazabilir<\/li>\r\n<li>Tespit edilen hatalar\u0131 otomatik olarak d&uuml;zeltebilir<\/li>\r\n<li>Refactoring &ouml;nerileri sunup uygulayabilir<\/li>\r\n<\/ul>\r\n<p><strong>\ud83d\udd04 S&uuml;rekli Entegrasyon<\/strong><\/p>\r\n<ul>\r\n<li>Her commit'te otomatik &ccedil;al\u0131\u015f\u0131r<\/li>\r\n<li>PR a&ccedil;\u0131ld\u0131\u011f\u0131nda detayl\u0131 analiz sa\u011flar<\/li>\r\n<li>CI\/CD pipeline'\u0131na sorunsuz entegre olur<\/li>\r\n<\/ul>\r\n<p><strong>\ud83d\udcca Tutarl\u0131l\u0131k ve Standartlar<\/strong><\/p>\r\n<ul>\r\n<li>T&uuml;m projelerde ayn\u0131 kalite standartlar\u0131n\u0131 uygular<\/li>\r\n<li>Yorgunluktan veya dikkat da\u011f\u0131n\u0131kl\u0131\u011f\u0131ndan etkilenmez<\/li>\r\n<li>&Ouml;\u011frendik&ccedil;e geli\u015fir ve daha iyi hale gelir<\/li>\r\n<\/ul>\r\n<h2>Pop&uuml;ler AI Code Review Ara&ccedil;lar\u0131<\/h2>\r\n<h3>1. Claude Code<\/h3>\r\n<p><strong>&Ouml;zellikler:<\/strong><\/p>\r\n<ul>\r\n<li>Komut sat\u0131r\u0131ndan do\u011frudan eri\u015filebilir agentic coding arac\u0131<\/li>\r\n<li><code>\/review<\/code> komutuyla h\u0131zl\u0131 kod incelemesi<\/li>\r\n<li>Do\u011fal dil ile etkile\u015fim<\/li>\r\n<li>B&uuml;y&uuml;k kod tabanlar\u0131n\u0131 anlama yetene\u011fi<\/li>\r\n<\/ul>\r\n<p><strong>Kullan\u0131m Senaryosu:<\/strong><\/p>\r\n<pre><code class=\"language-bash\"># Local'de h\u0131zl\u0131 review\r\nclaude-code \/review\r\n\r\n# Spesifik dosya review'u\r\nclaude-code \/review src\/components\/Auth.tsx\r\n\r\n# Commit &ouml;ncesi kontrol\r\nclaude-code \/review --staged\r\n<\/code><\/pre>\r\n<p><strong>G&uuml;&ccedil;l&uuml; Y&ouml;nleri:<\/strong><\/p>\r\n<ul>\r\n<li>Son derece g&uuml;&ccedil;l&uuml; do\u011fal dil anlama<\/li>\r\n<li>Context window'u sayesinde b&uuml;y&uuml;k projeleri kavrama<\/li>\r\n<li>A&ccedil;\u0131klay\u0131c\u0131 ve e\u011fitici feedback<\/li>\r\n<\/ul>\r\n<h3>2. GitHub Copilot<\/h3>\r\n<p><strong>&Ouml;zellikler:<\/strong><\/p>\r\n<ul>\r\n<li>Pull request'lerde otomatik review yorumlar\u0131<\/li>\r\n<li>IDE entegrasyonu<\/li>\r\n<li>Kod tamamlama ile birle\u015fik deneyim<\/li>\r\n<\/ul>\r\n<p><strong>Kullan\u0131m Senaryosu:<\/strong><\/p>\r\n<ul>\r\n<li>PR a&ccedil;\u0131ld\u0131\u011f\u0131nda otomatik analiz<\/li>\r\n<li>Inline &ouml;neriler ve a&ccedil;\u0131klamalar<\/li>\r\n<li>Security vulnerability tespiti<\/li>\r\n<\/ul>\r\n<p><strong>G&uuml;&ccedil;l&uuml; Y&ouml;nleri:<\/strong><\/p>\r\n<ul>\r\n<li>GitHub ekosistemiyle derin entegrasyon<\/li>\r\n<li>Milyarlarca sat\u0131r public kod &uuml;zerinde e\u011fitilmi\u015f<\/li>\r\n<li>Ger&ccedil;ek zamanl\u0131 IDE feedback'i<\/li>\r\n<\/ul>\r\n<h3>3. Gemini Code Assist<\/h3>\r\n<p><strong>&Ouml;zellikler:<\/strong><\/p>\r\n<ul>\r\n<li>Google Cloud entegrasyonu<\/li>\r\n<li>Enterprise-grade g&uuml;venlik<\/li>\r\n<li>&Ccedil;ok dilli destek<\/li>\r\n<\/ul>\r\n<p><strong>Kullan\u0131m Senaryosu:<\/strong><\/p>\r\n<pre><code class=\"language-bash\"># Cloud tabanl\u0131 review\r\ngemini-code-assist review --pr 123\r\n\r\n# G&uuml;venlik a&ccedil;\u0131\u011f\u0131 taramas\u0131\r\ngemini-code-assist security-scan\r\n<\/code><\/pre>\r\n<p><strong>G&uuml;&ccedil;l&uuml; Y&ouml;nleri:<\/strong><\/p>\r\n<ul>\r\n<li>Google'\u0131n AI altyap\u0131s\u0131<\/li>\r\n<li>Enterprise &ouml;zellikleri<\/li>\r\n<li>Cloud-native proje deste\u011fi<\/li>\r\n<\/ul>\r\n<h3>4. CodeRabbit CLI<\/h3>\r\n<p><strong>&Ouml;zellikler:<\/strong><\/p>\r\n<ul>\r\n<li>&Ouml;zelle\u015fmi\u015f code review AI'\u0131<\/li>\r\n<li>Terminal tabanl\u0131 interaktif review<\/li>\r\n<li>Detayl\u0131 raporlama<\/li>\r\n<\/ul>\r\n<p><strong>Kullan\u0131m Senaryosu:<\/strong><\/p>\r\n<pre><code class=\"language-bash\"># T&uuml;m de\u011fi\u015fiklikleri review et\r\ncoderabbit review\r\n\r\n# PR i&ccedil;in detayl\u0131 rapor\r\ncoderabbit review --pr 456 --detailed\r\n\r\n# Otomatik fix &ouml;nerileri\r\ncoderabbit review --suggest-fixes\r\n<\/code><\/pre>\r\n<p><strong>Neden De\u011ferli:<\/strong><\/p>\r\n<ul>\r\n<li>Code review'a &ouml;zelle\u015fmi\u015f AI modeli<\/li>\r\n<li>&Ccedil;ok projeyi merkezi olarak y&ouml;netme<\/li>\r\n<li>Learning curve'&uuml; d&uuml;\u015f&uuml;k<\/li>\r\n<li>Actionable insights<\/li>\r\n<\/ul>\r\n<h3>5. GLM 4.5 (Local Model)<\/h3>\r\n<p><strong>&Ouml;zellikler:<\/strong><\/p>\r\n<ul>\r\n<li>Tamamen local &ccedil;al\u0131\u015f\u0131r<\/li>\r\n<li>Veri gizlili\u011fi maksimum<\/li>\r\n<li>\u0130nternet ba\u011flant\u0131s\u0131 gerektirmez<\/li>\r\n<\/ul>\r\n<p><strong>Kullan\u0131m Senaryosu:<\/strong><\/p>\r\n<pre><code class=\"language-bash\"># Local model ile review\r\nglm-code review --model glm-4.5\r\n\r\n# Privacy-first review\r\nglm-code review --offline\r\n<\/code><\/pre>\r\n<p><strong>G&uuml;&ccedil;l&uuml; Y&ouml;nleri:<\/strong><\/p>\r\n<ul>\r\n<li>Proprietary kod g&uuml;venli\u011fi<\/li>\r\n<li>D&uuml;\u015f&uuml;k latency<\/li>\r\n<li>Maliyetsiz kullan\u0131m<\/li>\r\n<\/ul>\r\n<h3>6. Codex CLI \/ Auggie CLI \/ Qwen Code<\/h3>\r\n<p><strong>&Ouml;zellikler:<\/strong><\/p>\r\n<ul>\r\n<li>Farkl\u0131 AI model se&ccedil;enekleri<\/li>\r\n<li>&Ouml;zelle\u015ftirilebilir promptlar<\/li>\r\n<li>Multi-model destek<\/li>\r\n<\/ul>\r\n<h2>Hibrit Workflow: En \u0130yi Uygulamalar<\/h2>\r\n<h3>&Ouml;nerilen \u0130\u015f Ak\u0131\u015f\u0131<\/h3>\r\n<pre><code class=\"language-mermaid\">graph TD\r\n    A[Kod Yazma] --&gt; B[Local Review - Claude Code\/GLM]\r\n    B --&gt; C[Commit]\r\n    C --&gt; D[PR Olu\u015fturma]\r\n    D --&gt; E[GitHub Review - Copilot\/Gemini]\r\n    E --&gt; F{Sorun Var m\u0131?}\r\n    F --&gt;|Evet| G[CodeRabbit CLI ile Detay Analiz]\r\n    G --&gt; H[Otomatik D&uuml;zeltmeler]\r\n    H --&gt; B\r\n    F --&gt;|Hay\u0131r| I[Merge]\r\n<\/code><\/pre>\r\n<h3>1. Development A\u015famas\u0131 (Local)<\/h3>\r\n<p><strong>Claude Code ile Anl\u0131k Feedback:<\/strong><\/p>\r\n<pre><code class=\"language-bash\"># Her &ouml;nemli de\u011fi\u015fiklikten sonra\r\nclaude-code \/review\r\n\r\n# Kod yazarken suggestions\r\nclaude-code \/suggest --context\r\n<\/code><\/pre>\r\n<p><strong>GLM 4.5 ile Privacy-First Review:<\/strong><\/p>\r\n<pre><code class=\"language-bash\"># Hassas projeler i&ccedil;in\r\nglm-code review --comprehensive\r\n<\/code><\/pre>\r\n<h3>2. Commit &Ouml;ncesi Kontrol<\/h3>\r\n<p><strong>Pre-commit Hook Entegrasyonu:<\/strong><\/p>\r\n<pre><code class=\"language-bash\">#!\/bin\/bash\r\n# .git\/hooks\/pre-commit\r\n\r\necho \"\ud83d\udd0d Running AI code review...\"\r\nclaude-code \/review --staged --strict\r\n\r\nif [ $? -ne 0 ]; then\r\n    echo \"\u274c Code review failed. Please fix issues before committing.\"\r\n    exit 1\r\nfi\r\n\r\necho \"\u2705 Code review passed!\"\r\n<\/code><\/pre>\r\n<h3>3. Pull Request Review<\/h3>\r\n<p><strong>GitHub Actions ile Otomatik Review:<\/strong><\/p>\r\n<pre><code class=\"language-yaml\">name: AI Code Review\r\non: [pull_request]\r\n\r\njobs:\r\n  review:\r\n    runs-on: ubuntu-latest\r\n    steps:\r\n      - uses: actions\/checkout@v3\r\n      \r\n      - name: Copilot Review\r\n        uses: github\/copilot-review-action@v1\r\n        \r\n      - name: Gemini Review\r\n        uses: google\/gemini-code-assist-action@v1\r\n        \r\n      - name: CodeRabbit Deep Analysis\r\n        uses: coderabbit\/review-action@v1\r\n        with:\r\n          detailed: true\r\n          auto-fix: false\r\n<\/code><\/pre>\r\n<h3>4. Post-Merge Monitoring<\/h3>\r\n<p><strong>S&uuml;rekli \u0130yile\u015ftirme:<\/strong><\/p>\r\n<pre><code class=\"language-bash\"># Merged PR'lar\u0131 retrospektif analiz\r\ncoderabbit analyze --merged --last-week\r\n\r\n# Pattern detection\r\ncoderabbit patterns --project-wide\r\n<\/code><\/pre>\r\n<h2>CodeRabbit CLI: Detayl\u0131 \u0130nceleme<\/h2>\r\n<p>CodeRabbit CLI, &ouml;zellikle multi-project senaryolar\u0131nda &ouml;ne &ccedil;\u0131k\u0131yor. \u0130\u015fte de\u011ferli k\u0131lan &ouml;zellikleri:<\/p>\r\n<h3>Merkezi Y&ouml;netim<\/h3>\r\n<pre><code class=\"language-bash\"># T&uuml;m projeleri kaydet\r\ncoderabbit projects add my-frontend .\/frontend\r\ncoderabbit projects add my-backend .\/backend\r\ncoderabbit projects add my-mobile .\/mobile\r\n\r\n# T&uuml;m projelerde review\r\ncoderabbit review --all-projects\r\n<\/code><\/pre>\r\n<h3>Ak\u0131ll\u0131 &Ouml;nceliklendirme<\/h3>\r\n<pre><code class=\"language-bash\"># Kritik sorunlar\u0131 highlight et\r\ncoderabbit review --priority high\r\n\r\n# Security-first review\r\ncoderabbit review --focus security\r\n\r\n# Performance analizi\r\ncoderabbit review --focus performance\r\n<\/code><\/pre>\r\n<h3>&Ouml;\u011frenme ve Adaptasyon<\/h3>\r\n<pre><code class=\"language-bash\"># Proje spesifik kurallar &ouml;\u011fret\r\ncoderabbit learn --from .eslintrc.js\r\ncoderabbit learn --from coding-standards.md\r\n\r\n# Team conventions'lar\u0131 tan\u0131mla\r\ncoderabbit config set --naming-convention camelCase\r\ncoderabbit config set --max-function-length 50\r\n<\/code><\/pre>\r\n<h3>Raporlama ve Metrikler<\/h3>\r\n<pre><code class=\"language-bash\"># Detayl\u0131 kalite raporu\r\ncoderabbit report --format html --output report.html\r\n\r\n# Trend analizi\r\ncoderabbit trends --last-month\r\n\r\n# Team performans\u0131\r\ncoderabbit team-stats\r\n<\/code><\/pre>\r\n<h2>&Ccedil;ok Terminalli &Ccedil;al\u0131\u015fmada Code Review Stratejisi<\/h2>\r\n<p>4-8 terminal penceresinde e\u015f zamanl\u0131 geli\u015ftirme yaparken:<\/p>\r\n<h3>Terminal D&uuml;zeni<\/h3>\r\n<pre><code>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502   Terminal 1 \u2502   Terminal 2 \u2502   Terminal 3 \u2502\r\n\u2502  Frontend Dev\u2502  Backend Dev \u2502  Mobile Dev  \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\r\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502   Terminal 4 \u2502   Terminal 5 \u2502   Terminal 6 \u2502\r\n\u2502   Microserv. \u2502    Testing   \u2502 Code Review  \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\r\n<\/code><\/pre>\r\n<h3>Terminal 6: Merkezi Review Hub<\/h3>\r\n<pre><code class=\"language-bash\"># Watch mode ile s&uuml;rekli monitoring\r\ncoderabbit watch --all-projects\r\n\r\n# Real-time notifications\r\ncoderabbit notify --terminal --sound\r\n\r\n# Auto-review on file change\r\ncoderabbit auto-review --debounce 30s\r\n<\/code><\/pre>\r\n<h3>tmux\/screen ile Otomasyon<\/h3>\r\n<pre><code class=\"language-bash\"># tmux script\r\n#!\/bin\/bash\r\ntmux new-session -d -s dev\r\n\r\n# Development windows\r\ntmux new-window -t dev:1 -n frontend 'cd ~\/frontend &amp;&amp; npm run dev'\r\ntmux new-window -t dev:2 -n backend 'cd ~\/backend &amp;&amp; npm start'\r\ntmux new-window -t dev:3 -n mobile 'cd ~\/mobile &amp;&amp; expo start'\r\n\r\n# Review window\r\ntmux new-window -t dev:6 -n review 'coderabbit watch --all-projects'\r\n\r\ntmux attach-session -t dev\r\n<\/code><\/pre>\r\n<h2>Performans ve Maliyet Optimizasyonu<\/h2>\r\n<h3>Hibrit Model Stratejisi<\/h3>\r\n<p><strong>Local First Yakla\u015f\u0131m\u0131:<\/strong><\/p>\r\n<pre><code>1. \u0130lk review: GLM 4.5 (Local, Free)\r\n   &darr;\r\n2. Sorun varsa: Claude Code (Cloud, Powerful)\r\n   &darr;\r\n3. PR'da: Copilot\/Gemini (Automated)\r\n   &darr;\r\n4. Kritik PR'lar: CodeRabbit CLI (Deep Analysis)\r\n<\/code><\/pre>\r\n<h3>Maliyet Tablosu<\/h3>\r\n<table>\r\n<thead>\r\n<tr>\r\n<th>Ara&ccedil;<\/th>\r\n<th>Maliyet<\/th>\r\n<th>Kullan\u0131m Senaryosu<\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n<tr>\r\n<td>GLM 4.5<\/td>\r\n<td>&Uuml;cretsiz<\/td>\r\n<td>G&uuml;nl&uuml;k development, first-pass review<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Claude Code<\/td>\r\n<td>API bazl\u0131<\/td>\r\n<td>Kompleks problemler, refactoring<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>GitHub Copilot<\/td>\r\n<td>$10-20\/ay<\/td>\r\n<td>S&uuml;rekli review, PR automation<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Gemini Code Assist<\/td>\r\n<td>Enterprise<\/td>\r\n<td>Corporate projeler, compliance<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>CodeRabbit CLI<\/td>\r\n<td>De\u011fi\u015fken<\/td>\r\n<td>Multi-project, deep analysis<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<h2>G&uuml;venlik ve Privacy Considerations<\/h2>\r\n<h3>Hassas Projeler i&ccedil;in Konfig&uuml;rasyon<\/h3>\r\n<pre><code class=\"language-bash\"># Local-only review\r\nexport CODE_REVIEW_MODE=local\r\nexport AI_MODEL=glm-4.5\r\n\r\n# Cloud review i&ccedil;in veri maskeleme\r\ncoderabbit config set --mask-secrets true\r\ncoderabbit config set --mask-pii true\r\n\r\n# Allowlist tan\u0131mla\r\ncoderabbit config set --allowed-files \"src\/**\/*.ts\"\r\ncoderabbit config set --blocked-files \".env,secrets\/**\"\r\n<\/code><\/pre>\r\n<h3>Compliance ve Audit<\/h3>\r\n<pre><code class=\"language-bash\"># Review loglar\u0131n\u0131 kaydet\r\ncoderabbit config set --audit-log enabled\r\n\r\n# GDPR compliance\r\ncoderabbit config set --data-retention 90days\r\n\r\n# Export audit trail\r\ncoderabbit audit export --format json\r\n<\/code><\/pre>\r\n<h2>Ger&ccedil;ek D&uuml;nya Sonu&ccedil;lar\u0131<\/h2>\r\n<h3>Metrikler<\/h3>\r\n<p>&Ccedil;ok terminalli AI-assisted review implementasyonundan sonra tipik iyile\u015ftirmeler:<\/p>\r\n<ul>\r\n<li><strong>Bug Detection:<\/strong> %40-60 art\u0131\u015f<\/li>\r\n<li><strong>Review Time:<\/strong> %50-70 azalma<\/li>\r\n<li><strong>Code Quality Score:<\/strong> %30-45 iyile\u015fme<\/li>\r\n<li><strong>Technical Debt:<\/strong> %35-50 azalma<\/li>\r\n<li><strong>Developer Satisfaction:<\/strong> %60-80 art\u0131\u015f<\/li>\r\n<\/ul>\r\n<h3>&Ouml;rnek Kullan\u0131m Hikayeleri<\/h3>\r\n<p><strong>Senaryo 1: Mikroservis Geli\u015ftirme<\/strong><\/p>\r\n<pre><code>Problem: 6 mikroserviste e\u015f zamanl\u0131 de\u011fi\u015fiklik\r\n&Ccedil;&ouml;z&uuml;m: CodeRabbit CLI ile merkezi review\r\nSonu&ccedil;: Cross-service consistency %85 artt\u0131\r\n<\/code><\/pre>\r\n<p><strong>Senaryo 2: Hotfix Deployment<\/strong><\/p>\r\n<pre><code>Problem: Acil d&uuml;zeltme, h\u0131zl\u0131 review gerekli\r\n&Ccedil;&ouml;z&uuml;m: Claude Code \/review --urgent\r\nSonu&ccedil;: 15 dakikada kapsaml\u0131 analiz ve deployment\r\n<\/code><\/pre>\r\n<p><strong>Senaryo 3: Code Quality Sprint<\/strong><\/p>\r\n<pre><code>Problem: Legacy kod refactoring\r\n&Ccedil;&ouml;z&uuml;m: Gemini Code Assist + CodeRabbit pattern analysis\r\nSonu&ccedil;: 2 haftada 10K sat\u0131r refactor, s\u0131f\u0131r regression\r\n<\/code><\/pre>\r\n<h2>Gelecek Trendler<\/h2>\r\n<h3>2025 ve Sonras\u0131<\/h3>\r\n<p><strong>1. Self-Healing Code<\/strong><\/p>\r\n<ul>\r\n<li>AI'lar sadece tespit etmekle kalmay\u0131p otomatik fix uygulayacak<\/li>\r\n<li>Test yazma ve &ccedil;al\u0131\u015ft\u0131rma otomasyonu<\/li>\r\n<\/ul>\r\n<p><strong>2. Predictive Reviews<\/strong><\/p>\r\n<ul>\r\n<li>Kod yazmadan &ouml;nce potansiyel sorunlar\u0131 &ouml;ng&ouml;rme<\/li>\r\n<li>Architecture decision guidance<\/li>\r\n<\/ul>\r\n<p><strong>3. Team Learning Models<\/strong><\/p>\r\n<ul>\r\n<li>Tak\u0131m spesifik AI model fine-tuning<\/li>\r\n<li>\u015eirket coding culture &ouml;\u011frenme<\/li>\r\n<\/ul>\r\n<p><strong>4. Natural Language Code Reviews<\/strong><\/p>\r\n<ul>\r\n<li>Sesli komutlarla review<\/li>\r\n<li>Konu\u015fma tarz\u0131nda feedback<\/li>\r\n<\/ul>\r\n<h2>Ba\u015flarken: Pratik Rehber<\/h2>\r\n<h3>Ad\u0131m 1: Tool Selection (Hafta 1)<\/h3>\r\n<pre><code class=\"language-bash\"># Hepsini dene\r\nnpm install -g @anthropic\/claude-code\r\npip install coderabbit-cli\r\ngh extension install github\/copilot-cli\r\n\r\n# Kar\u015f\u0131la\u015ft\u0131rma testi\r\ncoderabbit benchmark --compare-tools\r\n<\/code><\/pre>\r\n<h3>Ad\u0131m 2: Workflow Integration (Hafta 2)<\/h3>\r\n<pre><code class=\"language-bash\"># Git hooks kurulumu\r\ncoderabbit install-hooks\r\n\r\n# CI\/CD entegrasyonu\r\ncoderabbit generate-ci-config --platform github-actions\r\n<\/code><\/pre>\r\n<h3>Ad\u0131m 3: Team Adoption (Hafta 3-4)<\/h3>\r\n<pre><code class=\"language-bash\"># Team config payla\u015f\r\ncoderabbit config export --team\r\n\r\n# Training session\r\ncoderabbit tutorial --interactive\r\n<\/code><\/pre>\r\n<h3>Ad\u0131m 4: Optimization (Devam Eden)<\/h3>\r\n<pre><code class=\"language-bash\"># Metrikleri izle\r\ncoderabbit metrics --dashboard\r\n\r\n# S&uuml;rekli iyile\u015ftirme\r\ncoderabbit optimize --auto-tune\r\n<\/code><\/pre>\r\n<h2>Sonu&ccedil; ve &Ouml;neriler<\/h2>\r\n<p>AI destekli CLI code review ara&ccedil;lar\u0131 art\u0131k opsiyonel de\u011fil, gerekli bir ara&ccedil; setinin par&ccedil;as\u0131. &Ouml;zellikle &ccedil;ok projeli, h\u0131zl\u0131 geli\u015ftirme ortamlar\u0131nda:<\/p>\r\n<p>\u2705 <strong>Yap\u0131lmas\u0131 Gerekenler:<\/strong><\/p>\r\n<ul>\r\n<li>Her projede en az bir local AI review arac\u0131 kullan\u0131n<\/li>\r\n<li>PR'larda otomatik review'lar\u0131 etkinle\u015ftirin<\/li>\r\n<li>Team-wide coding standards i&ccedil;in AI'\u0131 e\u011fitin<\/li>\r\n<li>Metrikleri d&uuml;zenli olarak izleyin<\/li>\r\n<\/ul>\r\n<p>\u274c <strong>Ka&ccedil;\u0131n\u0131lmas\u0131 Gerekenler:<\/strong><\/p>\r\n<ul>\r\n<li>AI'a k&ouml;r&uuml; k&ouml;r&uuml;ne g&uuml;venmeyin<\/li>\r\n<li>Manuel review'\u0131 tamamen kald\u0131rmay\u0131n<\/li>\r\n<li>Sensitive data'y\u0131 cloud ara&ccedil;lar\u0131na g&ouml;ndermeden maskelemeyi unutmay\u0131n<\/li>\r\n<li>Tool overload - 2-3 ara&ccedil; yeterli<\/li>\r\n<\/ul>\r\n<h3>Son Tavsiye<\/h3>\r\n<p>CodeRabbit CLI ve benzeri ara&ccedil;lar\u0131 canl\u0131 yay\u0131nlarda deneyimlemek harika bir fikir. &Ccedil;&uuml;nk&uuml;:<\/p>\r\n<ul>\r\n<li>Real-time problem solving g&ouml;sterisi yapabilirsiniz<\/li>\r\n<li>Community'den feedback alabilirsiniz<\/li>\r\n<li>Best practice'leri birlikte ke\u015ffedebilirsiniz<\/li>\r\n<li>Tool comparison yaparak en iyisini bulabilirsiniz<\/li>\r\n<\/ul>\r\n<p><strong>Haz\u0131rlanacak Canl\u0131 Yay\u0131n \u0130&ccedil;in Checklist:<\/strong><\/p>\r\n<pre><code class=\"language-bash\">\u2713 T&uuml;m ara&ccedil;lar\u0131 &ouml;nceden y&uuml;kle ve test et\r\n\u2713 Sample project'leri haz\u0131rla (iyi + k&ouml;t&uuml; kod &ouml;rnekleri)\r\n\u2713 Multi-terminal setup'\u0131 yap\r\n\u2713 Comparison metrikleri topla\r\n\u2713 Q&amp;A i&ccedil;in senaryolar haz\u0131rla\r\n\u2713 Troubleshooting guide'\u0131 yan\u0131nda tut\r\n<\/code><\/pre>\r\n<p>AI destekli code review, yaz\u0131l\u0131m kalitesini art\u0131rman\u0131n en etkili yollar\u0131ndan biri haline geldi. Do\u011fru ara&ccedil;lar\u0131, do\u011fru workflow ile kulland\u0131\u011f\u0131n\u0131zda hem zaman kazan\u0131rs\u0131n\u0131z hem de daha kaliteli, s&uuml;rd&uuml;r&uuml;lebilir kod &uuml;retirsiniz. \ud83d\ude80<\/p>\r\n<hr>\r\n<p><strong>Kaynaklar ve \u0130leri Okuma:<\/strong><\/p>\r\n<ul>\r\n<li><a href=\"https:\/\/docs.claude.com\/en\/docs\/claude-code\">Claude Code Documentation<\/a><\/li>\r\n<li><a href=\"https:\/\/github.com\/features\/copilot\">GitHub Copilot Best Practices<\/a><\/li>\r\n<li><a href=\"https:\/\/coderabbit.ai\/docs\">CodeRabbit CLI Guide<\/a><\/li>\r\n<li><a href=\"https:\/\/stackoverflow.blog\/\">AI-Assisted Development Survey 2024<\/a><\/li>\r\n<\/ul>\r\n<p><em>Bu yaz\u0131, pratik deneyimler ve g&uuml;ncel AI code review ara&ccedil;lar\u0131n\u0131n kar\u015f\u0131la\u015ft\u0131rmal\u0131 analizi &uuml;zerine haz\u0131rlanm\u0131\u015ft\u0131r.<\/em><\/p>","excerpt":"Yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde code review (kod incelemesi), kod kalitesini art\u0131ran ve hatalar\u0131 erken a\u015famada yakalayan kritik bir ad\u0131md\u0131r.","created_at":"2025-09-29 23:08:57","updated_at":"2026-09-23 17:02:13","category_id":9,"view_count":806,"reading_time":10,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-09-29 23:08:57","featured_image":"resimyok.jpg","slug":"ai-destekli-code-review-cli-araclariyla-yeni-nesil-kod","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":29,"title":"Excel Merger","content":"<div dir=\"ltr\"><code>Excel Merger<\/code> projesi, birden fazla Excel dosyas\u0131n\u0131 (&ouml;rne\u011fin <code>.xlsx<\/code> veya <code>.xls<\/code> uzant\u0131l\u0131) tek bir birle\u015fik dosyada birle\u015ftirmek i&ccedil;in tasarlanm\u0131\u015f kullan\u0131\u015fl\u0131 bir ara&ccedil;t\u0131r. Farkl\u0131 Excel dosyalar\u0131ndaki verileri tek bir yerde toplamak isteyen kullan\u0131c\u0131lar i&ccedil;in idealdir. Bu ara&ccedil;, veri konsolidasyonunu otomatikle\u015ftirmeyi ve manuel kopyala-yap\u0131\u015ft\u0131r i\u015flemlerinin &ouml;n&uuml;ne ge&ccedil;meyi hedefler. &nbsp;\r\n<h3>&Ouml;zellikler<\/h3>\r\n&nbsp;\r\n<ul>\r\n<li><strong>&Ccedil;oklu Dosya Birle\u015ftirme:<\/strong> Belirtilen bir klas&ouml;rdeki veya yoldaki birden fazla Excel dosyas\u0131n\u0131 birle\u015ftirir.<\/li>\r\n<li><strong>Sayfa Tabanl\u0131 Birle\u015ftirme:<\/strong> Her Excel dosyas\u0131ndaki t&uuml;m sayfalar\u0131 tek tek al\u0131p, bunlar\u0131 yeni birle\u015ftirilmi\u015f dosyan\u0131n farkl\u0131 sayfalar\u0131na kopyalayabilir veya belirli bir mant\u0131kla birle\u015ftirebilir. (Betikteki spesifik mant\u0131\u011fa g&ouml;re bu k\u0131s\u0131m ayarlanabilir.)<\/li>\r\n<li><strong>Kullan\u0131m Kolayl\u0131\u011f\u0131:<\/strong> Basit bir aray&uuml;ze veya komut sat\u0131r\u0131 kullan\u0131m\u0131na sahiptir.<\/li>\r\n<li><strong>H\u0131zl\u0131 ve Verimli:<\/strong> B&uuml;y&uuml;k veri k&uuml;melerini bile h\u0131zl\u0131 bir \u015fekilde i\u015flemek &uuml;zere optimize edilmi\u015ftir.<\/li>\r\n<li><strong>Uyumluluk:<\/strong> Yayg\u0131n Excel dosya formatlar\u0131n\u0131 (<code>.xlsx<\/code>, <code>.xls<\/code>) destekler.<\/li>\r\n<\/ul>\r\n&nbsp;\r\n<h3>Kurulum<\/h3>\r\n&nbsp; Bu projenin bir Python beti\u011fi oldu\u011funu varsayarsak, gerekli k&uuml;t&uuml;phaneleri kurman\u0131z gerekebilir:\r\n<ol start=\"1\">\r\n<li><strong>Depoyu Klonlay\u0131n:<\/strong>\r\n<div>\r\n<div>Bash\r\n<div>&nbsp;<\/div>\r\n<\/div>\r\n<div>\r\n<div>\r\n<pre><code role=\"text\" data-test-=\"\">git clone https:\/\/github.com\/onder7\/excel_merger.git <\/code><\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\nveya projenin ZIP dosyas\u0131n\u0131 indirip istedi\u011finiz bir dizine &ccedil;\u0131kar\u0131n.<\/li>\r\n<li><strong>Gerekli K&uuml;t&uuml;phaneleri Y&uuml;kleyin:<\/strong> Projenin ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 (&ouml;rne\u011fin <code>pandas<\/code>, <code>openpyxl<\/code> gibi) y&uuml;klemek i&ccedil;in <code>requirements.txt<\/code> dosyas\u0131n\u0131 kullan\u0131n:\r\n<div>\r\n<div>Bash\r\n<div>&nbsp;<\/div>\r\n<\/div>\r\n<div>\r\n<div>\r\n<pre><code role=\"text\" data-test-=\"\">cd excel_merger pip install -r requirements.txt <\/code><\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\nE\u011fer <code>requirements.txt<\/code> dosyan\u0131z yoksa, muhtemel ba\u011f\u0131ml\u0131l\u0131klar:\r\n<div>\r\n<div>Bash\r\n<div>&nbsp;<\/div>\r\n<\/div>\r\n<div>\r\n<div>\r\n<pre><code role=\"text\" data-test-=\"\">pip install pandas openpyxl xlrd <\/code><\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/li>\r\n<\/ol>\r\n&nbsp;\r\n<h3>Nas\u0131l Kullan\u0131l\u0131r?<\/h3>\r\n&nbsp; Betik, birle\u015ftirmek istedi\u011finiz Excel dosyalar\u0131n\u0131n bulundu\u011fu klas&ouml;r yolunu veya belirli dosya yollar\u0131n\u0131 parametre olarak alabilir. <strong>&Ouml;rnek Kullan\u0131m:<\/strong> T&uuml;m Excel dosyalar\u0131n\u0131 <code>input_folder<\/code> adl\u0131 bir klas&ouml;rden al\u0131p <code>merged_output.xlsx<\/code> adl\u0131 bir dosyada birle\u015ftirmek i&ccedil;in:\r\n<div>\r\n<div>Bash\r\n<div>&nbsp;<\/div>\r\n<\/div>\r\n<div>\r\n<div>\r\n<pre><code role=\"text\" data-test-=\"\">python excel_merger.py --input_folder \"C:\\path\\to\\your\\excel_files\" --output_file \"merged_output.xlsx\" <\/code><\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<em>(Not: Yukar\u0131daki komutlar varsay\u0131msald\u0131r ve beti\u011finizdeki parametre adlar\u0131na g&ouml;re ayarlanmal\u0131d\u0131r.)<\/em> &nbsp;\r\n<h3>Geli\u015ftirme<\/h3>\r\n&nbsp; Bu k\u0131s\u0131m, projenin i&ccedil; yap\u0131s\u0131, kullan\u0131lan teknolojiler veya gelecekteki &ouml;zellikler hakk\u0131nda bilgi i&ccedil;erebilir. &Ouml;rne\u011fin:\r\n<ul>\r\n<li><strong>Kullan\u0131lan K&uuml;t&uuml;phaneler:<\/strong> Python, Pandas, Openpyxl vb.<\/li>\r\n<li><strong>Hata \u0130\u015fleme:<\/strong> Eksik dosyalar, bozuk dosyalar veya veri tutars\u0131zl\u0131klar\u0131 durumunda nas\u0131l bir yol izlendi\u011fi.<\/li>\r\n<li><strong>Gelecek &Ouml;zellikler:<\/strong> Belirli sayfalar\u0131 birle\u015ftirme, ba\u015fl\u0131k sat\u0131rlar\u0131n\u0131 y&ouml;netme, yinelenen verileri kald\u0131rma vb.<\/li>\r\n<\/ul>\r\n&nbsp;<hr>&nbsp; The <code>Excel Merger<\/code> project is a handy tool designed to combine multiple Excel files (e.g., <code>.xlsx<\/code> or <code>.xls<\/code> extensions) into a single, consolidated file. It's ideal for users who need to bring data from various Excel spreadsheets into one place. This tool aims to automate data consolidation and eliminate manual copy-pasting efforts. &nbsp;\r\n<h3>Features<\/h3>\r\n&nbsp;\r\n<ul>\r\n<li><strong>Multi-File Merging:<\/strong> Combines multiple Excel files from a specified folder or path.<\/li>\r\n<li><strong>Sheet-Based Merging:<\/strong> Can take all sheets from each Excel file and copy them individually to different sheets in the new merged file, or merge them based on a specific logic. (This part can be adjusted based on the specific logic in your script.)<\/li>\r\n<li><strong>Ease of Use:<\/strong> Features a simple interface or command-line usage.<\/li>\r\n<li><strong>Fast and Efficient:<\/strong> Optimized to process even large datasets quickly.<\/li>\r\n<li><strong>Compatibility:<\/strong> Supports common Excel file formats (<code>.xlsx<\/code>, <code>.xls<\/code>).<\/li>\r\n<\/ul>\r\n&nbsp;\r\n<h3>Installation<\/h3>\r\n&nbsp; Assuming this is a Python script, you might need to install the necessary libraries:\r\n<ol start=\"1\">\r\n<li><strong>Clone the Repository:<\/strong>\r\n<div>\r\n<div>Bash\r\n<div>&nbsp;<\/div>\r\n<\/div>\r\n<div>\r\n<div>\r\n<pre><code role=\"text\" data-test-=\"\">git clone https:\/\/github.com\/onder7\/excel_merger.git <\/code><\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\nAlternatively, download the project's ZIP file and extract it to your desired directory.<\/li>\r\n<li><strong>Install Required Libraries:<\/strong> Use the <code>requirements.txt<\/code> file to install the project's dependencies (e.g., <code>pandas<\/code>, <code>openpyxl<\/code>):\r\n<div>\r\n<div>Bash\r\n<div>&nbsp;<\/div>\r\n<\/div>\r\n<div>\r\n<div>\r\n<pre><code role=\"text\" data-test-=\"\">cd excel_merger pip install -r requirements.txt <\/code><\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\nIf you don't have a <code>requirements.txt<\/code> file, likely dependencies include:\r\n<div>\r\n<div>Bash\r\n<div>&nbsp;<\/div>\r\n<\/div>\r\n<div>\r\n<div>\r\n<pre><code role=\"text\" data-test-=\"\">pip install pandas openpyxl xlrd <\/code><\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/li>\r\n<\/ol>\r\n&nbsp;\r\n<h3>How to Use<\/h3>\r\n&nbsp; The script can take the folder path where your Excel files are located or specific file paths as parameters. <strong>Example Usage:<\/strong> To merge all Excel files from a folder named <code>input_folder<\/code> into a file named <code>merged_output.xlsx<\/code>:\r\n<div>\r\n<div>Bash\r\n<div>&nbsp;<\/div>\r\n<\/div>\r\n<div>\r\n<div>\r\n<pre><code role=\"text\" data-test-=\"\">python excel_merger.py --input_folder \"C:\\path\\to\\your\\excel_files\" --output_file \"merged_output.xlsx\" <\/code><\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<em>(Note: The commands above are hypothetical and should be adjusted according to the parameter names in your script.)<\/em> &nbsp;\r\n<h3>Development<\/h3>\r\n&nbsp; This section can contain information about the project's internal structure, technologies used, or future features. For example:\r\n<ul>\r\n<li><strong>Libraries Used:<\/strong> Python, Pandas, Openpyxl, etc.<\/li>\r\n<li><strong>Error Handling:<\/strong> How the script handles missing files, corrupt files, or data inconsistencies.<\/li>\r\n<li><strong>Future Features:<\/strong> Merging specific sheets, handling header rows, removing duplicate data, etc.<\/li>\r\n<\/ul>\r\n&nbsp; &nbsp;<\/div>","excerpt":"Excel Merger projesi, birden fazla Excel dosyas\u0131n\u0131 (\u00f6rne\u011fin .xlsx veya .xls uzant\u0131l\u0131) tek bir birle\u015fik dosyada birle\u015ftirmek i\u00e7in...","created_at":"2025-07-16 10:21:51","updated_at":"2026-09-07 10:33:10","category_id":9,"view_count":726,"reading_time":4,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-07-16 10:21:51","featured_image":"resimyok.jpg","slug":"excel-merger","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":31,"title":"WordPress Web Statistics","content":"Merhaba, Bu proje, WordPress siteniz i\u00e7in basit ama etkili bir web istatistikleri arac\u0131d\u0131r. Ziyaret\u00e7ilerinizin IP adreslerini, ziyaret ettikleri sayfalar\u0131, taray\u0131c\u0131 bilgilerini ve ziyaret zamanlar\u0131n\u0131 kaydederek sitenizin trafi\u011fi hakk\u0131nda de\u011ferli bilgiler edinmenizi sa\u011flar. Repostories <a href=\"https:\/\/github.com\/onder7\/Wordpres-WebStatistics\" target=\"_blank\" rel=\"noopener\">linkten<\/a> ula\u015fabilirsiniz &nbsp;","excerpt":"Merhaba, Bu proje, WordPress siteniz i\u00e7in basit ama etkili bir web istatistikleri arac\u0131d\u0131r. Ziyaret\u00e7ilerinizin IP adreslerini, ziyaret ettikleri...","created_at":"2025-07-16 10:06:49","updated_at":"2026-09-23 16:34:14","category_id":9,"view_count":652,"reading_time":1,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-07-16 10:06:49","featured_image":"resimyok.jpg","slug":"wordpress-web-statistics","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":47,"title":"Odoo Nedir? Haz\u0131r image kurulumu","content":"<p><strong>Odoo<\/strong> (eski ad\u0131yla OpenERP), Python programlama dili ile geli\u015ftirilmi\u015f kapsaml\u0131 bir ERP (Enterprise Resource Planning) sistemidir. Bel&ccedil;ika merkezli Odoo S.A. taraf\u0131ndan geli\u015ftirilmektedir.<\/p>\r\n<h2>Ana &Ouml;zellikler<\/h2>\r\n<p><strong>Mod&uuml;ler Yap\u0131<\/strong>: CRM, sat\u0131\u015f, muhasebe, envanter, &uuml;retim, insan kaynaklar\u0131, e-ticaret gibi 30'dan fazla i\u015f uygulamas\u0131n\u0131 i&ccedil;erir. Her mod&uuml;l ba\u011f\u0131ms\u0131z olarak kullan\u0131labilir veya di\u011fer mod&uuml;llerle entegre edilebilir.<\/p>\r\n<p><strong>Web Tabanl\u0131<\/strong>: Tamamen web aray&uuml;z&uuml; &uuml;zerinden &ccedil;al\u0131\u015f\u0131r, herhangi bir platformdan eri\u015filebilir.<\/p>\r\n<p><strong>A&ccedil;\u0131k Kaynak<\/strong>: Community Edition &uuml;cretsizdir ve kaynak kodu a&ccedil;\u0131kt\u0131r. Enterprise Edition ise ek &ouml;zellikler ve destek i&ccedil;erir.<\/p>\r\n<h2>Teknik Altyap\u0131<\/h2>\r\n<ul>\r\n<li><strong>Backend<\/strong>: Python (Django benzeri framework kullan\u0131r)<\/li>\r\n<li><strong>Frontend<\/strong>: JavaScript, XML, CSS<\/li>\r\n<li><strong>Veritaban\u0131<\/strong>: PostgreSQL<\/li>\r\n<li><strong>Mimari<\/strong>: MVC (Model-View-Controller) yap\u0131s\u0131<\/li>\r\n<\/ul>\r\n<h2>Kullan\u0131m Alanlar\u0131<\/h2>\r\n<p>K&uuml;&ccedil;&uuml;k i\u015fletmelerden b&uuml;y&uuml;k \u015firketlere kadar her &ouml;l&ccedil;ekte kullan\u0131labilir. &Ouml;zellikle:<\/p>\r\n<ul>\r\n<li>Sat\u0131\u015f ve pazarlama y&ouml;netimi<\/li>\r\n<li>Muhasebe ve finansal raporlama<\/li>\r\n<li>Envanter ve tedarik zinciri<\/li>\r\n<li>\u0130nsan kaynaklar\u0131 y&ouml;netimi<\/li>\r\n<li>Proje y&ouml;netimi<\/li>\r\n<li>E-ticaret platformu<\/li>\r\n<\/ul>\r\n<p>Odoo'nun en b&uuml;y&uuml;k avantaj\u0131, t&uuml;m i\u015f s&uuml;re&ccedil;lerini tek bir platformda birle\u015ftirmesi ve y&uuml;ksek &ouml;zelle\u015ftirilebilir olmas\u0131d\u0131r.<\/p>\r\n<p>&nbsp;<\/p>\r\n<h2>1. &Ouml;nceki Build'i Temizleyin<\/h2>\r\n<pre><code># &Ccedil;al\u0131\u015fan servisleri durdurun sudo docker-compose down # Docker cache'ini temizleyin sudo docker system prune -f <\/code><\/pre>\r\n<h2>2. Haz\u0131r Docker Compose Dosyas\u0131n\u0131 Olu\u015fturun<\/h2>\r\n<pre><code># docker-compose-nobuild.yml dosyas\u0131n\u0131 olu\u015fturun nano docker-compose-nobuild.yml <\/code><\/pre>\r\n<p>Yukar\u0131daki <code>docker-compose-nobuild.yml<\/code> artifact'\u0131n\u0131n i&ccedil;eri\u011fini kopyalay\u0131p yap\u0131\u015ft\u0131r\u0131n.<\/p>\r\n<h2>3. Addons Klas&ouml;r&uuml; Olu\u015fturun<\/h2>\r\n<pre><code># &Ouml;zel mod&uuml;ller i&ccedil;in addons klas&ouml;r&uuml; olu\u015fturun mkdir -p addons <\/code><\/pre>\r\n<h2>4. Odoo'yu Ba\u015flat\u0131n<\/h2>\r\n<pre><code># Haz\u0131r image ile ba\u015flat\u0131n sudo docker-compose -f docker-compose-nobuild.yml up -d <\/code><\/pre>\r\n<h2>5. Ba\u015flatma S&uuml;recini \u0130zleyin<\/h2>\r\n<pre><code># Loglar\u0131 izleyin (Ctrl+C ile &ccedil;\u0131kabilirsiniz) sudo docker-compose -f docker-compose-nobuild.yml logs -f <\/code><\/pre>\r\n<p>A\u015fa\u011f\u0131daki gibi bir &ccedil;\u0131kt\u0131 g&ouml;rmelisiniz:<\/p>\r\n<pre><code>odoo_1 | 2025-06-21 XX:XX:XX,XXX INFO ? odoo: Odoo version 17.0 odoo_1 | 2025-06-21 XX:XX:XX,XXX INFO ? odoo: addons paths: ... odoo_1 | 2025-06-21 XX:XX:XX,XXX INFO ? odoo: database: ... <\/code><\/pre>\r\n<h2>6. Taray\u0131c\u0131da A&ccedil;\u0131n<\/h2>\r\n<p>Loglar \"HTTP service (werkzeug) running on\" mesaj\u0131n\u0131 g&ouml;sterdi\u011finde:<\/p>\r\n<pre><code>http:\/\/localhost:8069 <\/code><\/pre>\r\n<h2>7. \u0130lk Kurulum<\/h2>\r\n<p>Taray\u0131c\u0131da a&ccedil;\u0131ld\u0131\u011f\u0131nda \u015fu ad\u0131mlar\u0131 takip edin:<\/p>\r\n<ol>\r\n<li><strong>Master Password<\/strong>: G&uuml;venli bir \u015fifre girin (&ouml;rn: <code>admin123<\/code>)<\/li>\r\n<li><strong>Database Name<\/strong>: <code>myodoo<\/code><\/li>\r\n<li><strong>Email<\/strong>: Admin email adresiniz<\/li>\r\n<li><strong>Password<\/strong>: Admin kullan\u0131c\u0131 \u015fifresi<\/li>\r\n<li><strong>Language<\/strong>: <code>Turkish<\/code><\/li>\r\n<li><strong>Country<\/strong>: <code>Turkey<\/code><\/li>\r\n<li><strong>Demo data<\/strong>: \u0130sterseniz i\u015faretleyin (&ouml;rneklerle ba\u015flar)<\/li>\r\n<\/ol>\r\n<h2>Yararl\u0131 Komutlar<\/h2>\r\n<pre><code># Servisleri durdurmak sudo docker-compose -f docker-compose-nobuild.yml down # Servisleri yeniden ba\u015flatmak sudo docker-compose -f docker-compose-nobuild.yml up -d # Servis durumunu kontrol etmek sudo docker-compose -f docker-compose-nobuild.yml ps # Veritaban\u0131na ba\u011flanmak sudo docker-compose -f docker-compose-nobuild.yml exec db psql -U odoo postgres <\/code><\/pre>\r\n<h2>Sorun Giderme<\/h2>\r\n<p>E\u011fer port 8069 kullan\u0131mdaysa:<\/p>\r\n<pre><code># Hangi servislerin 8069 portunu kulland\u0131\u011f\u0131n\u0131 kontrol edin sudo netstat -tlnp | grep 8069 # Gerekirse portu de\u011fi\u015ftirin (docker-compose dosyas\u0131nda \"8069:8069\" &rarr; \"8070:8069\") <\/code><\/pre>\r\n<p>&nbsp; docker-compose-with-addons.yml<\/p>\r\n<pre data-enlighter-language=\"python\">version: '3.8' services: db: image: postgres:15 environment: POSTGRES_DB: postgres POSTGRES_USER: odoo POSTGRES_PASSWORD: odoo PGDATA: \/var\/lib\/postgresql\/data\/pgdata volumes: - postgres_data:\/var\/lib\/postgresql\/data\/pgdata restart: unless-stopped healthcheck: test: interval: 10s timeout: 5s retries: 5 # Addons indirme servisi addons-downloader: image: alpine\/git volumes: - .\/addons:\/addons command: &gt; sh -c \" cd \/addons &amp;&amp; if ; then git clone https:\/\/github.com\/muk-it\/muk_base.git --branch 17.0 || git clone https:\/\/github.com\/muk-it\/muk_base.git; fi &amp;&amp; if ; then git clone https:\/\/github.com\/muk-it\/muk_web.git --branch 17.0 || git clone https:\/\/github.com\/muk-it\/muk_web.git; fi &amp;&amp; if ; then git clone https:\/\/github.com\/muk-it\/muk_dms.git --branch 17.0 || git clone https:\/\/github.com\/muk-it\/muk_dms.git; fi \" odoo: image: odoo:17.0 depends_on: db: condition: service_healthy addons-downloader: condition: service_completed_successfully ports: - \"8069:8069\" environment: - HOST=db - USER=odoo - PASSWORD=odoo volumes: - odoo_data:\/var\/lib\/odoo - .\/addons:\/mnt\/extra-addons restart: unless-stopped command: volumes: postgres_data: odoo_data:<\/pre>\r\n<p>docker-compose-nobuild.yml<\/p>\r\n<pre data-enlighter-language=\"python\">version: '3.8' services: db: image: postgres:15 environment: POSTGRES_DB: postgres POSTGRES_USER: odoo POSTGRES_PASSWORD: odoo PGDATA: \/var\/lib\/postgresql\/data\/pgdata volumes: - postgres_data:\/var\/lib\/postgresql\/data\/pgdata restart: unless-stopped healthcheck: test: interval: 10s timeout: 5s retries: 5 odoo: image: odoo:17.0 depends_on: db: condition: service_healthy ports: - \"8069:8069\" environment: - HOST=db - USER=odoo - PASSWORD=odoo volumes: - odoo_data:\/var\/lib\/odoo - .\/addons:\/mnt\/extra-addons restart: unless-stopped volumes: postgres_data: odoo_data:<\/pre>\r\n<p>&nbsp;<\/p>","excerpt":"Odoo (eski ad\u0131yla OpenERP), Python programlama dili ile geli\u015ftirilmi\u015f kapsaml\u0131 bir ERP (Enterprise Resource Planning) sistemidir. Bel\u00e7ika...","created_at":"2025-06-21 18:15:57","updated_at":"2026-09-07 20:33:55","category_id":9,"view_count":908,"reading_time":4,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-06-21 18:15:57","featured_image":"resimyok.jpg","slug":"odoo-nedir-hazir-image-kurulumu","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":156,"title":"Blog sitenizde Slack API kullan\u0131m\u0131","content":"<p>Modern web uygulamalar\u0131, kullan\u0131c\u0131 etkile\u015fimlerini ve sistem olaylar\u0131n\u0131 ger&ccedil;ek zamanl\u0131 olarak takip etmek i&ccedil;in mesajla\u015fma platformlar\u0131yla entegre &ccedil;al\u0131\u015f\u0131r. Slack, ekip ileti\u015fimi ve otomasyon i&ccedil;in en pop&uuml;ler ara&ccedil;lardan biridir. Bu yaz\u0131da,&nbsp;<strong>web sitenize Slack API entegrasyonu<\/strong> yaparak bildirim g&ouml;ndermeyi, form g&ouml;nderimlerini yakalamay\u0131 ve hatalar\u0131 raporlamay\u0131 &ouml;\u011freneceksiniz. &nbsp;<\/p>\r\n<p><iframe style=\"width: 728px; height: 408px;\" src=\"https:\/\/www.youtube.com\/embed\/pDhmkBZFFF0\" width=\"908\" height=\"509\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\r\n<h2><strong>&nbsp;Slack API Nedir? Ne \u0130\u015fe Yarar?<\/strong><\/h2>\r\n<p>Slack API, Slack platformuyla programl\u0131 bir \u015fekilde etkile\u015fim kurman\u0131z\u0131 sa\u011flar. Ba\u015fl\u0131ca kullan\u0131m senaryolar\u0131: \u2714&nbsp;<strong>Anl\u0131k bildirimler<\/strong>&nbsp;(form g&ouml;nderimi, hata raporlar\u0131) \u2714&nbsp;<strong>Bot entegrasyonlar\u0131<\/strong>&nbsp;(otomatik yan\u0131tlar, kanal y&ouml;netimi) \u2714&nbsp;<strong>Veri senkronizasyonu<\/strong>&nbsp;(CRM, proje y&ouml;netimi ara&ccedil;lar\u0131yla entegrasyon)<\/p>\r\n<h2><strong>Slack Webhook ile Basit Bildirim Sistemi<\/strong><\/h2>\r\n<p>Webhook, Slack&rsquo;e HTTP POST iste\u011fiyle mesaj g&ouml;ndermenin en kolay yoludur.<\/p>\r\n<h3><strong>Ad\u0131m 1: Slack&rsquo;te Gelen Webhook Olu\u015fturma<\/strong><\/h3>\r\n<ol start=\"1\">\r\n<li>\r\n<p><a href=\"https:\/\/api.slack.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Slack API<\/a>&nbsp;sayfas\u0131na gidin.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>\"Create an app\"<\/strong>&nbsp;&gt;&nbsp;<strong>\"From scratch\"<\/strong>&nbsp;se&ccedil;ene\u011fini se&ccedil;in.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>\"Incoming Webhooks\"<\/strong>&nbsp;&ouml;zelli\u011fini aktif edin.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>\"Add New Webhook to Workspace\"<\/strong>&nbsp;butonuna t\u0131klayarak bir kanal se&ccedil;in.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Webhook URL&rsquo;nizi kopyalay\u0131n.<\/p>\r\n<\/li>\r\n<\/ol>\r\n<pre data-enlighter-language=\"generic\">const axios = require('axios'); const SLACK_WEBHOOK_URL = \"YOUR_WEBHOOK_URL\"; async function sendSlackNotification(message) { try { await axios.post(SLACK_WEBHOOK_URL, { text: message, }); console.log(\"Slack bildirimi g&ouml;nderildi!\"); } catch (error) { console.error(\"Slack'e mesaj g&ouml;nderilemedi:\", error.message); } } \/\/ Kullan\u0131m &ouml;rne\u011fi sendSlackNotification(\"Merhaba! Sitenizden yeni bir form g&ouml;nderildi \ud83d\ude80\");<\/pre>\r\n<h2><strong>Slack Bot Entegrasyonu (Daha Geli\u015fmi\u015f Kontrol)<\/strong><\/h2>\r\n<p>E\u011fer sadece bildirim de\u011fil,&nbsp;<strong>interaktif mesajlar<\/strong>&nbsp;ve&nbsp;<strong>komut tabanl\u0131 yan\u0131tlar<\/strong>&nbsp;istiyorsan\u0131z, bir Slack botu olu\u015fturabilirsiniz.<\/p>\r\n<h3><strong>Ad\u0131m 1: Slack App &amp; Bot Token Alma<\/strong><\/h3>\r\n<ol start=\"1\">\r\n<li>\r\n<p><a href=\"https:\/\/api.slack.com\/apps\" target=\"_blank\" rel=\"noopener noreferrer\">Slack API<\/a>&nbsp;&uuml;zerinden yeni bir uygulama olu\u015fturun.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>\"Bot\"<\/strong>&nbsp;b&ouml;l&uuml;m&uuml;nden&nbsp;<strong>\"Add a Bot User\"<\/strong>&nbsp;se&ccedil;ene\u011fini ekleyin.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>\"OAuth &amp; Permissions\"<\/strong>&nbsp;k\u0131sm\u0131ndan&nbsp;<strong>Bot Token<\/strong>&nbsp;al\u0131n (<code>xoxb-<\/code>&nbsp;ile ba\u015flar).<\/p>\r\n<\/li>\r\n<\/ol>\r\n<h3><strong>Ad\u0131m 2: Bot ile Mesaj G&ouml;nderme (Python &Ouml;rne\u011fi)<\/strong><\/h3>\r\n<h3><strong>Webhook ile Mesaj G&ouml;nderme (Node.js &Ouml;rne\u011fi)<\/strong><\/h3>\r\n<pre data-enlighter-language=\"generic\">import requests SLACK_BOT_TOKEN = \"xoxb-YOUR-BOT-TOKEN\" CHANNEL_ID = \"#general\" def send_slack_message(text): url = \"https:\/\/slack.com\/api\/chat.postMessage\" headers = {\"Authorization\": f\"Bearer {SLACK_BOT_TOKEN}\"} payload = {\"channel\": CHANNEL_ID, \"text\": text} response = requests.post(url, headers=headers, json=payload) if response.json(): print(\"Mesaj g&ouml;nderildi!\") else: print(\"Hata:\", response.json()) # Kullan\u0131m &ouml;rne\u011fi send_slack_message(\"Bot &uuml;zerinden merhaba! \ud83d\udc4b\")<\/pre>\r\n<h2><strong>Ger&ccedil;ek D&uuml;nya Uygulamalar\u0131<\/strong><\/h2>\r\n<h3><strong>\ud83d\udccc Senaryo 1: WordPress Form G&ouml;nderimlerini Slack&rsquo;e Bildirme<\/strong><\/h3>\r\n<pre data-enlighter-language=\"generic\">\/\/ functions.php dosyas\u0131na ekleyin add_action('wpcf7_mail_sent', 'slack_form_notification'); function slack_form_notification($contact_form) { $submission = WPCF7_Submission::get_instance(); $data = $submission-&gt;get_posted_data(); $message = \"Yeni form g&ouml;nderimi:\\n\"; $message .= \"Ad: \" . $data . \"\\n\"; $message .= \"Email: \" . $data . \"\\n\"; $message .= \"Mesaj: \" . $data; wp_remote_post('SLACK_WEBHOOK_URL', array( 'body' =&gt; json_encode(array('text' =&gt; $message)) )); }<\/pre>\r\n<h3><strong>\ud83d\udccc Senaryo 2: Hata Raporlama Sistemi (Frontend JS)<\/strong><\/h3>\r\n<pre data-enlighter-language=\"generic\">\/\/ Hata yakalay\u0131c\u0131 window.onerror = function(message, source, lineno, colno, error) { const errorData = { message: message, source: source, line: lineno, stack: error?.stack || \"No stack trace\" }; fetch(\"https:\/\/your-backend.com\/log-error\", { method: \"POST\", body: JSON.stringify(errorData) }).then(() =&gt; { console.log(\"Hata Slack'e iletildi!\"); }); };<\/pre>\r\n<p>&nbsp; Slack API'yi bir blog sitesinde bir&ccedil;ok farkl\u0131 ama&ccedil; i&ccedil;in kullanabilirsiniz. \u0130\u015fte en kullan\u0131\u015fl\u0131 senaryolar: 1. Otomatik Bildirimler - Yeni blog yaz\u0131s\u0131 yay\u0131nland\u0131\u011f\u0131nda bildirim - Yorumlar i&ccedil;in anl\u0131k bildirimler - \u0130leti\u015fim formundan gelen mesajlar - Abone kay\u0131tlar\u0131 bildirimi - Hata ve teknik problem bildirimleri &nbsp; 2. \u0130statistik ve Raporlama<\/p>\r\n<pre data-enlighter-language=\"python\" data-enlighter-linenumbers=\"false\">def send_daily_stats(): &nbsp; &nbsp;stats = { &nbsp; &nbsp; &nbsp; &nbsp;\"G&uuml;nl&uuml;k ziyaret&ccedil;i\": get_daily_visitors(), &nbsp; &nbsp; &nbsp; &nbsp;\"Yeni yorumlar\": get_new_comments(), &nbsp; &nbsp; &nbsp; &nbsp;\"Pop&uuml;ler yaz\u0131lar\": get_popular_posts() &nbsp; &nbsp;} &nbsp; &nbsp; &nbsp; &nbsp;message = \"\ud83d\udcca G&uuml;nl&uuml;k Blog \u0130statistikleri\\n\" &nbsp; &nbsp;for key, value in stats.items(): &nbsp; &nbsp; &nbsp; &nbsp;message += f\"{key}: {value}\\n\" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;send_slack_message(WEBHOOK_URL, message)<\/pre>\r\n<p>3. \u0130&ccedil;erik Y&ouml;netimi - Yaz\u0131 taslaklar\u0131 i&ccedil;in hat\u0131rlatmalar - \u0130&ccedil;erik takvimi takibi - SEO raporlar\u0131 - Backlink bildirimleri - \u0130&ccedil;erik g&uuml;ncelleme hat\u0131rlatmalar\u0131 4. Etkile\u015fim Takibi<\/p>\r\n<pre data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\">def monitor_engagement(): alerts = # Viral i&ccedil;erik tespiti if detect_viral_post(): alerts.append(\"\ud83d\ude80 Viral \u0130&ccedil;erik Tespit Edildi!\") # Negatif yorum uyar\u0131s\u0131 if detect_negative_comments(): alerts.append(\"\u26a0\ufe0f Negatif Yorum Bildirimi\") for alert in alerts: send_slack_message(WEBHOOK_URL, alert) <\/pre>\r\n<p>&nbsp; 5. G&uuml;venlik Bildirimleri - Ba\u015far\u0131s\u0131z giri\u015f denemeleri - \u015e&uuml;pheli IP adresleri - Spam yorum tespiti - G&uuml;venlik g&uuml;ncellemeleri - Yedekleme durumu 6. Teknik Takip<\/p>\r\n<pre data-enlighter-language=\"python\">def monitor_site_health(): checks = { \"Uptime\": check_uptime(), \"Sayfa Y&uuml;klenme H\u0131z\u0131\": check_page_speed(), \"Database Durumu\": check_database(), \"SSL Sertifikas\u0131\": check_ssl() } if any(status == \"CRITICAL\" for status in checks.values()): send_urgent_slack_alert(checks)<\/pre>\r\n<p>7. Ekip \u0130\u015fbirli\u011fi - Yaz\u0131 d&uuml;zenleme istekleri - \u0130&ccedil;erik onay s&uuml;reci - G&ouml;rev atamalar\u0131 - Toplant\u0131 hat\u0131rlatmalar\u0131 - Proje takibi 8. Okuyucu Etkile\u015fimi<\/p>\r\n<pre data-enlighter-language=\"generic\">def track_reader_engagement(): # Pop&uuml;ler yorumlar\u0131 takip et if new_popular_comment(): notify_comment_engagement() # Sosyal medya etkile\u015fimlerini izle if viral_social_share(): notify_social_success()<\/pre>\r\n<p>9. SEO ve Performans - Google Analytics raporlar\u0131 - Anahtar kelime performans\u0131 - Backlink kazan\u0131mlar\u0131 - S\u0131ralama de\u011fi\u015fiklikleri - Core Web Vitals takibi 10. Otomatik \u0130&ccedil;erik Y&ouml;netimi<\/p>\r\n<pre data-enlighter-language=\"generic\">def content_automation(): # Otomatik sosyal medya payla\u015f\u0131mlar\u0131 schedule_social_shares() # \u0130&ccedil;erik g&uuml;ncelli\u011fi kontrol&uuml; check_content_freshness() # \u0130lgili i&ccedil;erik &ouml;nerileri update_related_posts()<\/pre>\r\n<p>&Ouml;rnek Webhook Entegrasyonu:<\/p>\r\n<pre data-enlighter-language=\"generic\">import requests from datetime import datetime def setup_blog_notifications(): WEBHOOK_URL = \"your_webhook_url\" def send_notification(message, severity=\"info\"): payload = { \"text\": message, \"username\": \"Blog Monitor\", \"icon_emoji\": \":memo:\", \"attachments\": } try: response = requests.post(WEBHOOK_URL, json=payload) return response.status_code == 200 except Exception as e: print(f\"Bildirim g&ouml;nderilemedi: {e}\") return False<\/pre>\r\n<p>&nbsp; Bu entegrasyonlar\u0131 blog sitenize ekleyerek: - \u0130\u015f ak\u0131\u015flar\u0131n\u0131z\u0131 otomatikle\u015ftirebilir - &Ouml;nemli bildirimleri an\u0131nda alabilir - Site performans\u0131n\u0131 yak\u0131ndan takip edebilir - Ekip i\u015fbirli\u011fini geli\u015ftirebilirsiniz &nbsp; <strong>Kaynaklar:<\/strong> \ud83d\udd17&nbsp;<a href=\"https:\/\/api.slack.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Slack API Dok&uuml;mantasyonu<\/a> \ud83d\udd17 <a href=\"..\/..\/..\/blog-sitenizde-slack-api-kullanimi\/\" target=\"_blank\" rel=\"noopener noreferrer\">Slack API Kullan\u0131m\u0131<\/a><\/p>","excerpt":"Slack API'yi bir blog sitesinde bir\u00e7ok farkl\u0131 ama\u00e7 i\u00e7in kullanabilirsiniz. \u0130\u015fte en kullan\u0131\u015fl\u0131 senaryolar:","created_at":"2025-02-18 21:52:45","updated_at":"2026-09-08 02:05:23","category_id":9,"view_count":1650,"reading_time":6,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-02-18 21:52:00","featured_image":"bc7889b21c9a0d350e0c753a637bce50.png","slug":"blog-sitenizde-slack-api-kullanimi","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":161,"title":"Site haritas\u0131 (sitemap)","content":"<p>Site haritas\u0131 (sitemap), arama motorlar\u0131n\u0131n web sitenizi daha iyi tarayabilmesi i&ccedil;in olu\u015fturulan bir XML dosyas\u0131d\u0131r. Bunu PHP kullanarak dinamik bir \u015fekilde olu\u015fturabilirsiniz.<\/p>\r\n<h2><strong>1. XML Site Haritas\u0131 Olu\u015fturma<\/strong><\/h2>\r\n<p>&Ouml;ncelikle, sitemap.php adl\u0131 bir dosya olu\u015fturun ve a\u015fa\u011f\u0131daki kodu ekleyin:<\/p>\r\n<h3><strong>sitemap.php<\/strong><\/h3>\r\n<pre data-enlighter-language=\"generic\"><!--?php header(\"Content-Type: application\/xml; charset=UTF-8\"); echo '<?xml version=\"1.0\" encoding=\"UTF-8\"?-->'; echo ''; $pdo = new PDO(\"mysql:host=localhost;dbname=veritabani_adi;charset=utf8\", \"kullanici_adi\", \"sifre\"); $pdo-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $query = $pdo-&gt;query(\"SELECT slug, updated_at FROM news WHERE status = 1 ORDER BY updated_at DESC\"); while ($row = $query-&gt;fetch(PDO::FETCH_ASSOC)) { &nbsp; &nbsp;echo ''; &nbsp; &nbsp; echo 'https:\/\/www.siteadi.com\/' . htmlspecialchars($row) . ''; &nbsp; &nbsp;echo '' . date(DATE_W3C, strtotime($row)) . ''; &nbsp; &nbsp; echo 'daily'; &nbsp; &nbsp; echo '0.8'; &nbsp; &nbsp; echo ''; } echo ''; ?&gt;<\/pre>\r\n<p>&nbsp; Bu dosya, news tablosundaki aktif (status = 1) haberleri &ccedil;eker ve SEO dostu URL&rsquo;ler (slug) &uuml;zerinden XML format\u0131nda &ccedil;\u0131kt\u0131 verir.<\/p>\r\n<h2><strong>2. Robots.txt Dosyan\u0131za Sitemap Ekleme<\/strong><\/h2>\r\n<p>Google ve di\u011fer arama motorlar\u0131n\u0131n site haritan\u0131z\u0131 bulabilmesi i&ccedil;in robots.txt dosyan\u0131z\u0131n i&ccedil;ine \u015fu sat\u0131r\u0131 ekleyin: Sitemap: https:\/\/www.siteadi.com\/sitemap.php<\/p>\r\n<h2><strong>3. Google Search Console&rsquo;a Sitemap Ekleme<\/strong><\/h2>\r\n<ol>\r\n<li><a href=\"https:\/\/search.google.com\/search-console\">Google Search Console<\/a>&lsquo;a gidin.<\/li>\r\n<li>Web sitenizi ekleyin ve do\u011frulay\u0131n.<\/li>\r\n<li><strong>Sitemap<\/strong> b&ouml;l&uuml;m&uuml;ne gidin.<\/li>\r\n<li>sitemap.php yolunu ekleyin ve g&ouml;nderin.<\/li>\r\n<\/ol>\r\n<h2><strong>4. Site Haritas\u0131n\u0131 Otomatik G&uuml;ncelleme<\/strong><\/h2>\r\n<ul>\r\n<li>sitemap.php'yi belirli aral\u0131klarla &ccedil;al\u0131\u015ft\u0131rmak i&ccedil;in bir <strong>cron job<\/strong> ekleyebilirsiniz.<\/li>\r\n<li>&Ouml;rne\u011fin, her gece 02:00'de g&uuml;ncellemek i&ccedil;in SSH terminalinde \u015fu komutu ekleyin:<\/li>\r\n<\/ul>\r\n<p>crontab -e Ve \u015fu sat\u0131r\u0131 ekleyin: 0 2 * * * \/usr\/bin\/php \/path\/to\/sitemap.php &gt; \/path\/to\/sitemap.xml B&ouml;ylece <strong>sitemap.xml<\/strong> dosyan\u0131z belirli aral\u0131klarla otomatik olarak g&uuml;ncellenecektir. Bunu uygulad\u0131ktan sonra, Google'\u0131n site haritan\u0131z\u0131 daha iyi indeksleyebilmesi i&ccedil;in <strong>Google Search Console<\/strong> &uuml;zerinden tekrar g&ouml;ndermeyi unutmay\u0131n. \ud83d\ude80<\/p>","excerpt":"Site haritas\u0131 (sitemap), arama motorlar\u0131n\u0131n web sitenizi daha iyi tarayabilmesi i\u00e7in olu\u015fturulan bir XML dosyas\u0131d\u0131r. Bunu PHP kullanarak dinamik bir \u015fekilde olu\u015fturabilirsiniz.","created_at":"2025-02-17 08:01:28","updated_at":"2026-09-08 00:00:29","category_id":9,"view_count":807,"reading_time":2,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-02-17 08:01:28","featured_image":"resimyok.jpg","slug":"site-haritasi-sitemap","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":182,"title":"OnlyOffice Nedir? IT Profesyonelleri \u0130\u00e7in Detayl\u0131 Bir Bak\u0131\u015f","content":"<h1><img src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABJCAYAAACesWDiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAA\/YSURBVHgB5VxdbBzVFT73zuzaCXbihJYkhIBNy09NAwkhUYCKrHmgQFUB5aU8VEqk9rEivLWq1KQqD+1LSfvEQ2mw+gASD6yRmrRVi9eo\/KgN8SJCaGmT2MEJUX7t2HHs9c6cnvs3c+\/M7MZrb2xXPdZ6Z+7cmbn3m3O+c+65c5fBIkr3H05sQs5e4owVkGGZMVbmPiuOjwUDQ890jcISEAaLJHcfPNHpMT6IiB3AGTIG4k9+o9ofoPIShNWBIz1dJVgk8WGRhDH+FCB0kNbQHjL9rPQ\/ub+DIRaAe7BxYHgUhXYB9lW9sHT04a4yLJAsmgbdc2CoP+QEglAaARJXrZF4iW\/O4hbKY0KryBCVlg3Tp8QQBqZb\/P5P7795GK6TLBpA3QeH0YABEShmm7oucFDASNDQBk\/sCzMEaZbi\/yCVvQNYLZJNlMubm8dfiwLQxgOf7whYUFKdjbXHaElULsswUScGCnQdZnoRl5cIwgHaKpU3byjBPGRRAOo+cGIfdeJ5Tc7GpJQ2EDFZpB0DYJlZ1HLOpcVFwHCm9yVwqO6GY4zz\/rAavMWWtwwO3rXmI2hAFgegg8OHqQ+bkfoguSZhYizSjvi40CI02pTgKnEdBZ4AFXVdiEwQIdqmgzBMZ5bCIOxjvj842F2fvxYcIOHeGfDjXHRFdILrdnDdCR6ZHWogyO2bY8zRGFXPaBUdMfUEhZnj8uoCNYz6KgHUCkaFZQxxIEQoljemzXHBAer+40ly7\/imMSHZKeZ2PtYqdECIiVlriTo3IiHFXyzmKCFcE74xO9QAa1EXRmOTog0D1IBigNN95a91DS08QAeH91M7dkbEy+WjVA\/bdMYAZMCLzUlolawrT4pMUnu6hMnaQDCPodJJjLyk+lbPQWmUdUKIozyEHg4LLCiCPyafGSp20M8\/ohpjFsZcGFona2g0Ral\/6jqR5jFTAZVyafBk\/20ALSC5OpdprZXK5LGVoQcvLagGqbEXPyzag1wjowNC+YSZayaoTYtZXgqMNXGIvRY3oKA2VQW0w3EsDtchoiYNnC6TaqVaQc9RnI0LO9QIATZJcJSlaE5QnUUES5WogRBKahUdRmNiqmuoXTjTGgbmGvG2uTBodlaWacVJCBFNm6YwMPzEjPkhfLSgJsaBP63bhNpUIsJUIwjzHEPZQDSagfoYRiYpz1JdRNBaEoUAqE1OqWNE0BYvGetjEtiYvyDWUmmOUL6miRX2Y8eKEJ4niyjQ+QVPXEPEctTYeBvA09\/iHmI7OhZCup6po\/vhhXFZ9O3Uxfh8SNxPlyX3Odbu0+nVM\/DePZMweMdVy4tZop6DMLPv1AXo8f3YmUPop5t1crBvjpmg1AKBA9Svb187TIKETh3nulj7vNmYxqX2AH775EUYbQsAwAoDNEgzY5VVda+TA+gnTetkEDdGx2BqG6JwJS4H10GYm5ntqI51Dktcm6FrEU6ZrgdoW0zKKc1KVo178P0Dq2FZlYMJVGlYYoYoA2LQW\/NaT75CsYqlOXFDMdURjhmdsT480UGwwLJVmGGNayTqOyBDGtRGRID00JHlisK5cmNSmTyvH6AO2D6TvBMPolHFdBFgiQ6kymp1llmgQWI74+MAZ10nAhXcNgBCw9L1RR5sZyGIOuSU0awHEN1sk90B+4mZfRHC2CAa85LlAClTSZkWZIDhnIc1gUuZowZmLm6563ReRekyFpORxNihDetK4phfByCIIn7UxAwJTYHE09dgPXj3DPRsqsBUhcHv+pZBZZqlO8XSnUyaIkuCDzEQyXsDczWrcVHDOlBRbJTSra1B4p5hGhxuaZTdaNOZnnsr8MS2aWjNU8K5LYS1q8O0qQGk+StlmpgIXdLnZpbNUewxXABBn41DNkDSfaLDOzY4Nu+Ysi23z8CjpDm2rGyLYxjjaeoRrH3dTFOCDM7C+JpzFUSMxnb0v2TKa5sYYNx5TD9pD9zOiuPbu2dS19n41Rn49DPf4a7MTjsahClw7t4+A12bZyDXMncURv6Wh5H3ctkHmRp\/kQz\/45ZbZmFi6AZjEVDggmL2V98Qwjoyp6Tcui6AW9cGKYLm6F7H0S6AlHe7c3tlXuAIWfvATO2DChxhtSW7uCZA9vAg6ggkOMgCcFVb7cY\/\/ghxUg5dj6g\/Vm4s5h50y8X1L4x4MF+ZvlyfpaSZBcGAXVbTxFgYg5A0JdvNi3qm47VkRXsIjzxYgf7+lhRnODySIur4c+RPeVj55RDyeXQ0jTdAzpc+q5O8kKN3yo5Qgt8urnmGB66a20CltIo+Y+P1m9l95wxcoSf44Yd559zIA1rc45iZPn71MofKGFf3C40TidvTDCEjG3xv3bphu6wuByUJOmvbfC5PcDh5pr4ZbH2gAlu3VBxijjUS0+aX4CwnPLBitKaI4KAgeCdZnAlQZ2F3hxwZAzgjcbPvYQYn0feRf187\/7aFQNpCIGUCESY0ByDlzZLa2zQhEws8r5gsjnq0+eVL97GhkadnvjhWmB75V8GOcRwTS2qRVfbJZzly61XYsC6o25bNWyvy2h8fyjumJYcpxqMhZJJ6ErBmicjFtU1PpV6K8De9hp2E0n52aayAvkeTlSrCEVoCNkCQbnAyohad++BwHjZ86+o1G7RpWwXOn\/Lg3CnuAC6\/Q0jHTJCOm5opGMJAqSs9p89zIeyR2ULZeZFLF4NZpkyJuRrixEUhODkiA9L4+Gx9CsC92yqpqDz5MCJAwoSDgOYKjd9LWeU+gbBTqTOjqSCQ0IhELQ8hc1iwnOKZbRQxXx7n8Ml\/\/FS0vWFtMOtG3bQ+gDX0OU8xjgkbktxjrt1+UwidD1EknVeqMxeAht7Ow+TZbOYKgQ9klfukFZfki0zynlp7mJeKaA1QO2istfUeFZGuasvDB4P56OmvoUh6+5YKNCLru6pw8XPPTaWg67XE9tefmoLWlfOzq+7vTsGh3yzPPGbSG0nxeQC91JDdeppNQESTCQQRQuYgco01nHj4\/gpsvKMK5y5yaCHNuuXm2WuPkfW3B3BkANxUCrgcJ7b9Vpi3BNON650wsT5q1G4R4NNzpPk7goeIOiuNKgG60R1viShZfOYquRZwIvakxhrAjrzeCrc\/Og1zleoUg5F389Co+FCFssdhlNrREUgT80iDfGabmN3wlnxz3YcYgNpEnWXaolxwx9HXlsFCCy\/tYqM0L1XyhGsnWDwuEvt+ahRvPNh0pbn+Y2aapcd4kHYOzXbrsxVJ6dSAPi4B0gTt5cCZg7Iafe5CU+NXGD\/H0lEzpoPQxRLZW+K\/IukMgSNhQp80SM5WWrGO+Zw6Pf+0gy1jZ3kMRJjBR9j8mKcRkQAVycxYgCXRVI+TjXl+6gkabfr44xw0U07qMMHmm+sZEDYqkb2QthQlD5EHExqUbKyZQhac0SyQhg77MD3G0tEzNn+sNVeJh99supdIep8nOEgAFKYJ0jT+MA0yuzqr0NY+9x6I\/M7x9\/OZ4NhmFjWUvN0qirkakYBc+5Wz3jUzifUkAqj4wqrRZ\/ecLlEMtMMjkvZAv66TcL3iu0padJDmu5546uqcQBLgHHqjVQZuSTO2g0Nbup+bguU3NR5vXT7pwdHX5x5lOi6J8voln3vM93xmz144PKT3r1An\/1xcBsf\/2dg7WGeP+fD+71thaiwNTj3Tys9xmLHi1saje1scgPxKpVcFijlMvmISeZkw7tAkgfT+X1rh7Tdb4eyp+u7\/4giHv5PWDPa1uJoDFs9BbZd+5lDjL8MJTR95d358mTLOZ3949ERl\/HxnofsbqTxMKu0ZDTDVTEQL8cTqL4XQQR8RIQsOmCL7F4NR0dikh+IZvLNY8tiLXiZRpR4LXr3Si1PVn3K0lkQAZOZrmM4jG3MUgIjUhQAk6rgVIjhJNkynNJaipOwinJgo4dQks1918xIcxFBPSVvmZ+evU8RraZyTZFvi4AhJAVR8vadUnZwYTWUQRWX58hSmomuHR5KgYTrPkwR0KUsms05PXOi9cH7E6hSC\/V6iPTbLdNMJbrHfL3RG7ksHnJorGDMBqlYuF8+cPqZeoIQEMJZHc95GRdfDJbUs+TLnYg8hHGHBr2sdyhx5njz91yEP1+++q\/O+1mX55bVdMtTWnqTmJPM9S0YYDD3289yuWodrBi9XJy72vfHWr2Bi\/EI2ALX4p8Yx2+yWjBA4gVfpqVelZu5iXcf20ZlwZmf5aAnGJy9BR\/uN0NbS7vIPunP4KaDAfWd66WgODpC76Z30+a5v782dqVezZpsLm\/Z2zITsBG12qNf0xeqJKk2whTQLGcpXReTqCzQLiRDMiqJ4fYF6t1auaOJ6OkmWyew3DYq5nKgUaRYxQGZiW5QzvS8ynCL1wtSEpvgW53mmnjqGIkWT81sxXw1W7yv2NPUHCWrG76Xy3tFvPvxymTpYoEy+Wi7E1Ts0aokMOuBIEK03+plZgqqXLHP1epsCSyTmZPaSKwB1JlPC6SnAJKCgAJQzLVxPJjADtAQLZYqY+XImhuXZSrrjwgAkZMXKNTQl5BVEoz2fnhYBhaEGB5T6KcDic2RUzdTaNbXSiem6GiQwIOltDRpX0wSqo1rzaBv1ihPGjfYpgFDWUnMwqI8N\/eyVrwxDk6UuQDfkO4r+suX7Kf2Bfs4X2XyzwMpZAKKA0mamj5qVkXKbR2v7NAjSEGUnVX0uy7REACo4uF4UJyFDvc24Xgrtqf0xenDPwHWQa\/LmCz843u\/ncjv8PKVGRavU\/LR6XQ2ti6BJIIG1NkPOWKhllSjWx2mjY6YOi00x0jDQYDDzpwA2dUOxL3EcpSZ8hGH11SBsL76wj12XH0O5Zg6hvWNVkfJDhVwuHy0WZZGJSaQ0DEqjuIRNLbg0eHCIF4TGoOqXy6Uuaf2Sq8RiJtNayMwKPLoOzd+xIlXo9SegvOs6gWLLNQHiN3T0tobVfcKbROqmOx9lHLVGCDHFidU4kXIx65jcF9tc05aqoMyRGT4j0kWaHmc0t\/Ci+EWFhZVZhSYv7Q37SXsKqY65wMTAqXp6lXGU1jCaETm36HoxmMYpDtP2q6SOpcUAxZZZpel88VsYCAX96n\/EKY5maFBY7OBYQrvs9cti3KbAiDWlRN+lMA+9u\/ayIVgiMjuASMUpNtwDuuNM5c7VL9iEesWsAUH8T2gaQEKLNDQUe5ZosxhOQu\/OBeCTuciso\/+Xf4IniCs6AR3zsDUGdBAgOq5KESCKFw2fhDK10BtMEacsUVBsmXUmnGLEXurkHrPCRgiLNSbWDIiJWmvNKGnfq1Sxr3p1YTxPM6WRqYKSpwESkiDXqIgrah4LNSjf+8Xikux8ZdYmJqT3x2RmCLcBc7jGeJ4yqZFYZ1X6XwfFloYmm\/IIPQHKldC3gQp4BwiaIu0Xn\/vl0vE8iy6v\/Qg79+\/GDvg\/kP8CSJ\/l3Muz5LUAAAAASUVORK5CYII=\">OnlyOffice Nedir? IT Profesyonelleri \u0130&ccedil;in Detayl\u0131 Bir Bak\u0131\u015f<\/h1>\r\n<p>Dijital d&ouml;n&uuml;\u015f&uuml;m&uuml;n h\u0131z kazand\u0131\u011f\u0131 g&uuml;n&uuml;m&uuml;zde, kurumlar sadece ofis belgelerini d&uuml;zenlemekle kalm\u0131yor, ayn\u0131 zamanda g&uuml;venli i\u015fbirli\u011fi, merkezi y&ouml;netim ve entegrasyon ihtiyac\u0131na da odaklan\u0131yor. Bu noktada &ouml;ne &ccedil;\u0131kan &ccedil;&ouml;z&uuml;mlerden biri de <strong>OnlyOffice<\/strong>.<\/p>\r\n<h2>OnlyOffice Nedir?<\/h2>\r\n<p>OnlyOffice, dok&uuml;man d&uuml;zenleme (DOCX, XLSX, PPTX), proje y&ouml;netimi, CRM ve i\u015fbirli\u011fi ara&ccedil;lar\u0131n\u0131 tek platformda toplayan <strong>a&ccedil;\u0131k kaynakl\u0131<\/strong> bir ofis paketidir. Hem <strong>bulut tabanl\u0131<\/strong> hem de <strong>on-premise<\/strong> kurulum se&ccedil;enekleri sunmas\u0131yla, farkl\u0131 &ouml;l&ccedil;eklerdeki kurumlar\u0131n ihtiya&ccedil;lar\u0131na uyum sa\u011flar.<\/p>\r\n<h2>Temel &Ouml;zellikler<\/h2>\r\n<ol>\r\n<li>\r\n<p><strong>Microsoft Office Uyumlu Dosya Deste\u011fi<\/strong><\/p>\r\n<ul>\r\n<li>\r\n<p>DOCX, XLSX, PPTX formatlar\u0131n\u0131 %100 uyumlu a&ccedil;ma ve d&uuml;zenleme.<\/p>\r\n<\/li>\r\n<li>\r\n<p>OpenDocument deste\u011fi (ODT, ODS, ODP).<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li>\r\n<p><strong>Ger&ccedil;ek Zamanl\u0131 \u0130\u015fbirli\u011fi<\/strong><\/p>\r\n<ul>\r\n<li>\r\n<p>Birden fazla kullan\u0131c\u0131 ayn\u0131 anda belge &uuml;zerinde &ccedil;al\u0131\u015fabilir.<\/p>\r\n<\/li>\r\n<li>\r\n<p>De\u011fi\u015fiklik izleme, yorumlama ve s&uuml;r&uuml;m kontrol&uuml;.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li>\r\n<p><strong>Da\u011f\u0131t\u0131m Se&ccedil;enekleri<\/strong><\/p>\r\n<ul>\r\n<li>\r\n<p><strong>OnlyOffice Cloud<\/strong>: SaaS olarak kullan\u0131labilir.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>On-Premise<\/strong>: Kendi sunucunuza kurabilir, verilerinizi tamamen kontrol alt\u0131nda tutabilirsiniz.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Docker image ve Kubernetes deste\u011fi<\/strong> ile kolay entegrasyon.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li>\r\n<p><strong>Ekstra Mod&uuml;ller<\/strong><\/p>\r\n<ul>\r\n<li>\r\n<p><strong>Proje Y&ouml;netimi<\/strong>: G&ouml;revler, takvim, ekip koordinasyonu.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>CRM<\/strong>: M&uuml;\u015fteri bilgileri, f\u0131rsatlar ve sat\u0131\u015f takibi.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Posta Sunucusu entegrasyonu<\/strong>.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li>\r\n<p><strong>G&uuml;venlik<\/strong><\/p>\r\n<ul>\r\n<li>\r\n<p>HTTPS, JWT tabanl\u0131 kimlik do\u011frulama.<\/p>\r\n<\/li>\r\n<li>\r\n<p>LDAP\/AD entegrasyonu.<\/p>\r\n<\/li>\r\n<li>\r\n<p>\u0130ki fakt&ouml;rl&uuml; kimlik do\u011frulama (2FA).<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li>\r\n<p><strong>A&ccedil;\u0131k Kaynak ve API Entegrasyonu<\/strong><\/p>\r\n<ul>\r\n<li>\r\n<p>A&ccedil;\u0131k kaynak kodlu &ccedil;ekirdek.<\/p>\r\n<\/li>\r\n<li>\r\n<p>REST API ve JS SDK ile di\u011fer sistemlere entegrasyon.<\/p>\r\n<\/li>\r\n<li>\r\n<p>Nextcloud, ownCloud, SharePoint, Confluence, Jira entegrasyonlar\u0131.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<\/ol>\r\n<h2>Avantajlar\u0131<\/h2>\r\n<ul>\r\n<li>\r\n<p><strong>Maliyet Etkinlik<\/strong>: Kurumsal lisans maliyetlerini d&uuml;\u015f&uuml;r&uuml;r, a&ccedil;\u0131k kaynak s&uuml;r&uuml;m&uuml; &uuml;cretsizdir.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Esneklik<\/strong>: Bulut, kendi veri merkeziniz ya da hibrit senaryolar.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>Uyumluluk<\/strong>: Windows, Linux, macOS, iOS, Android deste\u011fi.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>G&uuml;venlik Odakl\u0131l\u0131k<\/strong>: &Ouml;zellikle reg&uuml;lasyonlara tabi sekt&ouml;rlerde (finans, sa\u011fl\u0131k, kamu) b&uuml;y&uuml;k avantaj.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h2>Kimler \u0130&ccedil;in?<\/h2>\r\n<ul>\r\n<li>\r\n<p><strong>IT Departmanlar\u0131<\/strong>: On-premise kurulum ile tam kontrol isteyen kurumlar.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>E\u011fitim Kurumlar\u0131<\/strong>: &Ouml;\u011frenciler ve akademisyenler i&ccedil;in ortak dok&uuml;man &ccedil;al\u0131\u015fmas\u0131.<\/p>\r\n<\/li>\r\n<li>\r\n<p><strong>K&uuml;&ccedil;&uuml;k\/Orta &Ouml;l&ccedil;ekli \u0130\u015fletmeler<\/strong>: Uygun maliyetli ve &ouml;zelle\u015ftirilebilir bir ofis alternatifi arayanlar.<\/p>\r\n<\/li>\r\n<\/ul>\r\n<h2>Sonu&ccedil;<\/h2>\r\n<p>OnlyOffice, sadece bir ofis paketi de\u011fil; ayn\u0131 zamanda <strong>kurumsal i\u015fbirli\u011fi, entegrasyon ve g&uuml;venlik ihtiya&ccedil;lar\u0131na cevap veren bir platform<\/strong>. A&ccedil;\u0131k kaynak yap\u0131s\u0131 ve esnek da\u011f\u0131t\u0131m se&ccedil;enekleri sayesinde IT profesyonelleri i&ccedil;in g&uuml;&ccedil;l&uuml; bir alternatif sunuyor.<\/p>\r\n<p>\ud83d\udc49 Daha fazla bilgi i&ccedil;in: <a href=\"https:\/\/www.onlyoffice.com\/\">https:\/\/www.onlyoffice.com\/<\/a><\/p>\r\n<hr>\r\n<p>&nbsp;<\/p>","excerpt":"G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zl\u0131 dijital d\u00fcnyas\u0131nda, i\u015fbirli\u011fi yapmak ve verimlili\u011fi art\u0131rmak, hem bireyler hem de kurumlar i\u00e7in b\u00fcy\u00fck \u00f6nem ta\u015f\u0131yor. Ofis yaz\u0131l\u0131mlar\u0131, bu s\u00fcre\u00e7lerin vazge\u00e7ilmez bir par\u00e7as\u0131 haline geldi. OnlyOffice, bu alanda \u00f6ne \u00e7\u0131kan, kapsaml\u0131 ve esnek bir \u00e7\u00f6z\u00fcm sunarak kullan\u0131c\u0131lar\u0131n ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131l\u0131yor. Peki, OnlyOffice nedir ve neden bu kadar pop\u00fcler?","created_at":"2025-01-23 05:41:00","updated_at":"2026-09-08 01:28:46","category_id":9,"view_count":995,"reading_time":2,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-01-23 05:41:00","featured_image":"resimyok.jpg","slug":"onlyoffice-guclu-bir-ofis-cozumu","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":184,"title":"Lazydocker: Docker Y\u00f6netimini Kolayla\u015ft\u0131ran Terminal Tabanl\u0131 Ara\u00e7","content":"<p>Docker, modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinde vazge\u00e7ilmez bir ara\u00e7 haline geldi. Ancak Docker konteynerlerini ve imajlar\u0131n\u0131 y\u00f6netmek, \u00f6zellikle terminal \u00fczerinden \u00e7al\u0131\u015f\u0131rken bazen karma\u015f\u0131k ve zaman al\u0131c\u0131 olabilir. \u0130\u015fte tam da bu noktada **Lazydocker** devreye giriyor. Lazydocker, terminal tabanl\u0131 bir Docker y\u00f6netim arac\u0131 olarak, kullan\u0131c\u0131lar\u0131n Docker konteynerlerini, imajlar\u0131n\u0131 ve di\u011fer kaynaklar\u0131n\u0131 kolayca y\u00f6netmesine olanak tan\u0131r. Bu makalede, Lazydocker\u2019\u0131n ne oldu\u011funu, nas\u0131l kurulaca\u011f\u0131n\u0131 ve nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p><p>---<\/p><p>&nbsp;<\/p><p>### **Lazydocker Nedir?**<\/p><p>Lazydocker, **Jesse Duffield** taraf\u0131ndan geli\u015ftirilen a\u00e7\u0131k kaynakl\u0131 bir terminal tabanl\u0131 Docker y\u00f6netim arac\u0131d\u0131r. Lazydocker, kullan\u0131c\u0131lar\u0131n Docker konteynerlerini, imajlar\u0131n\u0131, a\u011flar\u0131n\u0131 ve volumelerini g\u00f6rsel bir aray\u00fczle y\u00f6netmesini sa\u011flar. Bu ara\u00e7, \u00f6zellikle terminal \u00fczerinden Docker y\u00f6netimi yaparken i\u015fleri kolayla\u015ft\u0131rmak ve h\u0131zland\u0131rmak i\u00e7in tasarlanm\u0131\u015ft\u0131r.<\/p><p>Lazydocker, **Lazygit** gibi di\u011fer \"lazy\" serisi ara\u00e7larla ayn\u0131 felsefeyi payla\u015f\u0131r: Kullan\u0131c\u0131 dostu, h\u0131zl\u0131 ve etkili bir deneyim sunmak.<\/p><p>---<\/p><p>### **Lazydocker\u2019\u0131n \u00d6ne \u00c7\u0131kan \u00d6zellikleri**<\/p><p>- **Konteyner Y\u00f6netimi:** \u00c7al\u0131\u015fan ve durdurulmu\u015f konteynerleri g\u00f6r\u00fcnt\u00fcleme, ba\u015flatma, durdurma, yeniden ba\u015flatma ve silme.<br>- **\u0130maj Y\u00f6netimi:** Docker imajlar\u0131n\u0131 listeleme, silme ve g\u00fcncelleme.<br>- **Loglar\u0131 G\u00f6r\u00fcnt\u00fcleme:** Konteyner loglar\u0131n\u0131 ger\u00e7ek zamanl\u0131 olarak g\u00f6r\u00fcnt\u00fcleme.<br>- **A\u011f ve Volume Y\u00f6netimi:** Docker a\u011flar\u0131n\u0131 ve volumelerini y\u00f6netme.<br>- **Klavye K\u0131sayollar\u0131:** H\u0131zl\u0131 ve etkili bir \u015fekilde i\u015flem yapmak i\u00e7in klavye k\u0131sayollar\u0131.<br>- **Tema Deste\u011fi:** Farkl\u0131 renk temalar\u0131yla ki\u015fiselle\u015ftirilebilir aray\u00fcz.<\/p><p>---<\/p><p>### **Lazydocker Nas\u0131l Kurulur?**<\/p><p>Lazydocker, birden fazla platformda kullan\u0131labilir. Kurulum i\u015flemi olduk\u00e7a basittir. \u0130\u015fte ad\u0131m ad\u0131m kurulum rehberi:<\/p><p>#### **1. Go ile Kurulum (Linux, macOS, Windows)**<br>Lazydocker, Go programlama dili ile yaz\u0131ld\u0131\u011f\u0131 i\u00e7in Go kurulu sistemlerde a\u015fa\u011f\u0131daki komutla kurulabilir:<br>```bash<br>go install github.com\/jesseduffield\/lazydocker@latest<br>```<\/p><p>#### **2. Homebrew ile Kurulum (macOS ve Linux)**<br>Homebrew kullan\u0131yorsan\u0131z, Lazydocker\u2019\u0131 a\u015fa\u011f\u0131daki komutla kurabilirsiniz:<br>```bash<br>brew install lazydocker<br>```<\/p><p>#### **3. Scoop ile Kurulum (Windows)**<br>Windows kullan\u0131c\u0131lar\u0131 Scoop paket y\u00f6neticisini kullanarak Lazydocker\u2019\u0131 kurabilir:<br>```bash<br>scoop install lazydocker<br>```<\/p><p>#### **4. Manuel Kurulum**<br>Lazydocker\u2019\u0131n en son s\u00fcr\u00fcm\u00fcn\u00fc GitHub\u2019dan indirip kurabilirsiniz:<br>1. (https:\/\/github.com\/jesseduffield\/lazydocker) \u00fczerinden en son s\u00fcr\u00fcm\u00fc indirin.<br>2. \u0130ndirilen dosyay\u0131 \u00e7al\u0131\u015ft\u0131r\u0131labilir hale getirin:<br>&nbsp; ```bash<br>&nbsp; chmod +x lazydocker<br>&nbsp; ```<br>3. Lazydocker\u2019\u0131 sisteminize ta\u015f\u0131y\u0131n:<br>&nbsp; ```bash<br>&nbsp; sudo mv lazydocker \/usr\/local\/bin<br>&nbsp; ```<\/p><p>---<\/p><p>### **Lazydocker Nas\u0131l Kullan\u0131l\u0131r?**<\/p><p>Lazydocker\u2019\u0131 kurduktan sonra, terminalinizde `lazydocker` komutunu \u00e7al\u0131\u015ft\u0131rarak aray\u00fcz\u00fc ba\u015flatabilirsiniz:<br>```bash<br>lazydocker<br>```<\/p><p>Aray\u00fcz a\u00e7\u0131ld\u0131\u011f\u0131nda, a\u015fa\u011f\u0131daki b\u00f6l\u00fcmleri g\u00f6receksiniz:<br>- **Konteynerler:** \u00c7al\u0131\u015fan ve durdurulmu\u015f konteynerlerin listesi.<br>- **\u0130majlar:** Docker imajlar\u0131n\u0131n listesi.<br>- **Loglar:** Se\u00e7ilen konteynerin loglar\u0131.<br>- **A\u011flar ve Volumeler:** Docker a\u011flar\u0131 ve volumeleri.<\/p><p>#### **Temel Klavye K\u0131sayollar\u0131**<br>- **Konteyner \u0130\u015flemleri:**<br>&nbsp;- `s`: Konteyneri durdur.<br>&nbsp;- `r`: Konteyneri yeniden ba\u015flat.<br>&nbsp;- `d`: Konteyneri sil.<br>&nbsp;- `l`: Konteyner loglar\u0131n\u0131 g\u00f6r\u00fcnt\u00fcle.<br>- **\u0130maj \u0130\u015flemleri:**<br>&nbsp;- `d`: \u0130maj\u0131 sil.<br>- **Genel:**<br>&nbsp;- `q`: Lazydocker\u2019dan \u00e7\u0131k.<br>&nbsp;- `?`: Klavye k\u0131sayollar\u0131n\u0131 g\u00f6r\u00fcnt\u00fcle.<\/p><p>---<\/p><p>### **Lazydocker\u2019\u0131n Avantajlar\u0131**<\/p><p>- **Terminal Tabanl\u0131:** Grafiksel aray\u00fczlere ihtiya\u00e7 duymadan, terminal \u00fczerinden Docker y\u00f6netimi.<br>- **H\u0131zl\u0131 ve Etkili:** Klavye k\u0131sayollar\u0131 sayesinde h\u0131zl\u0131 i\u015flem yapma imkan\u0131.<br>- **Hafif:** D\u00fc\u015f\u00fck sistem kayna\u011f\u0131 t\u00fcketimi.<br>- **A\u00e7\u0131k Kaynak:** \u00dccretsiz ve a\u00e7\u0131k kaynakl\u0131 bir ara\u00e7.<\/p><p>---<\/p><p>### **Sonu\u00e7**<\/p><p>Lazydocker, Docker kullan\u0131c\u0131lar\u0131 i\u00e7in terminal tabanl\u0131 bir y\u00f6netim arac\u0131 olarak b\u00fcy\u00fck bir kolayl\u0131k sa\u011fl\u0131yor. \u00d6zellikle geli\u015ftiriciler ve sistem y\u00f6neticileri, bu ara\u00e7 sayesinde Docker konteynerlerini ve imajlar\u0131n\u0131 daha h\u0131zl\u0131 ve etkili bir \u015fekilde y\u00f6netebilir. E\u011fer siz de Docker y\u00f6netimini terminal \u00fczerinden yap\u0131yorsan\u0131z, Lazydocker\u2019\u0131 denemenizi kesinlikle \u00f6neririz.<\/p><p>Lazydocker\u2019\u0131 kurmak ve kullanmak i\u00e7in yukar\u0131daki ad\u0131mlar\u0131 takip edebilirsiniz. Daha fazla bilgi ve g\u00fcncelleme i\u00e7in (https:\/\/github.com\/jesseduffield\/lazydocker)\u2019n\u0131 ziyaret edebilirsiniz.<\/p>","excerpt":"Docker, modern yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinde vazge\u00e7ilmez bir ara\u00e7 haline geldi. Ancak Docker konteynerlerini ve imajlar\u0131n\u0131 y\u00f6netmek, \u00f6zellikle terminal \u00fczerinden \u00e7al\u0131\u015f\u0131rken bazen karma\u015f\u0131k ve zaman al\u0131c\u0131 olabilir. \u0130\u015fte tam da bu noktada **Lazydocker** devreye giriyor. Lazydocker, terminal tabanl\u0131 bir Docker y\u00f6netim arac\u0131 olarak, kullan\u0131c\u0131lar\u0131n Docker konteynerlerini, imajlar\u0131n\u0131 ve di\u011fer kaynaklar\u0131n\u0131 kolayca y\u00f6netmesine olanak tan\u0131r. Bu makalede, Lazydocker\u2019\u0131n ne oldu\u011funu, nas\u0131l kurulaca\u011f\u0131n\u0131 ve nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz.","created_at":"2025-01-20 14:51:34","updated_at":"2026-09-07 22:07:47","category_id":9,"view_count":702,"reading_time":4,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-01-20 14:51:34","featured_image":"resimyok.jpg","slug":"lazydocker-docker-yonetimini-kolaylastiran-terminal-tabanli-arac","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":187,"title":"WHM\/cPanel'de HTML e-posta imzalar\u0131 olu\u015fturma s\u00fcreci","content":"<p>### WHM\/cPanel'de Kullan\u0131c\u0131lar i\u00e7in HTML E-Posta \u0130mzas\u0131 Nas\u0131l Olu\u015fturulur?<\/p><p>E-posta imzalar\u0131, kurumsal ileti\u015fimde profesyonel bir izlenim b\u0131rakmak i\u00e7in \u00f6nemlidir. WHM\/cPanel sunucular\u0131nda, kullan\u0131c\u0131lar\u0131n e-posta hesaplar\u0131na **HTML format\u0131nda imzalar** ekleyebilir ve bu imzalara resimler, ba\u011flant\u0131lar ve \u00f6zel stiller ekleyebilirsiniz. Bu yaz\u0131da, WHM\/cPanel'de t\u00fcm kullan\u0131c\u0131lar i\u00e7in HTML e-posta imzas\u0131 nas\u0131l olu\u015fturulur ad\u0131m ad\u0131m anlataca\u011f\u0131m.<\/p><p>---<\/p><p>### 1. **HTML \u0130mza \u015eablonu Haz\u0131rlama**<br>\u0130lk ad\u0131m, kullan\u0131c\u0131lar i\u00e7in bir HTML imza \u015fablonu olu\u015fturmakt\u0131r. Bu \u015fablon, resimler, ba\u011flant\u0131lar ve \u00f6zel stiller i\u00e7erebilir. \u00d6rnek bir HTML imza \u015fablonu:<\/p><p>```html<br>&lt;p style=\"font-family: Arial, sans-serif; font-size: 12px; color: #333;\"&gt;<br>&nbsp; &nbsp;&lt;strong&gt;John Doe&lt;\/strong&gt;&lt;br&gt;<br>&nbsp; &nbsp;&lt;span style=\"color: #777;\"&gt;Sat\u0131\u015f M\u00fcd\u00fcr\u00fc&lt;\/span&gt;&lt;br&gt;<br>&nbsp; &nbsp;&lt;a href=\"https:\/\/www.sirket.com\" style=\"color: #0073e6; text-decoration: none;\"&gt;www.sirket.com&lt;\/a&gt;<br>&lt;\/p&gt;<br>&lt;p style=\"margin-top: 10px;\"&gt;<br>&nbsp; &nbsp;&lt;img src=\"https:\/\/www.sirket.com\/images\/logo.png\" alt=\"Company Logo\" style=\"width: 150px; height: auto;\"&gt;<br>&lt;\/p&gt;<br>&lt;p style=\"font-family: Arial, sans-serif; font-size: 12px; color: #333;\"&gt;<br>&nbsp; &nbsp;&lt;strong&gt;\u0130leti\u015fim Bilgileri:&lt;\/strong&gt;&lt;br&gt;<br>&nbsp; &nbsp;Telefon: +90 123 456 78 90&lt;br&gt;<br>&nbsp; &nbsp;E-posta: john.doe@sirket.com<br>&lt;\/p&gt;<br>```<\/p><p>Bu \u015fablonda:<br>- **Resim**: `&lt;img&gt;` etiketi ile resim eklenir. Resmin URL'si herkese a\u00e7\u0131k olmal\u0131d\u0131r.<br>- **Stil**: `style` \u00f6zelli\u011fi ile yaz\u0131 tipi, renk, boyut gibi \u00f6zellikler ayarlan\u0131r.<br>- **Ba\u011flant\u0131lar**: `&lt;a&gt;` etiketi ile web sitesi veya e-posta ba\u011flant\u0131lar\u0131 eklenir.<\/p><p>---<\/p><p>### 2. **CSV Dosyas\u0131 Haz\u0131rlama**<br>Kullan\u0131c\u0131lar\u0131n imza bilgilerini bir CSV dosyas\u0131nda toplay\u0131n. \u00d6rne\u011fin:<\/p><p>```csv<br>Kullanici,Imza<br>user1,\"&lt;p style='font-family: Arial, sans-serif; font-size: 12px; color: #333;'&gt;&lt;strong&gt;John Doe&lt;\/strong&gt;&lt;br&gt;&lt;span style='color: #777;'&gt;Sat\u0131\u015f M\u00fcd\u00fcr\u00fc&lt;\/span&gt;&lt;br&gt;&lt;a href='https:\/\/www.sirket.com' style='color: #0073e6; text-decoration: none;'&gt;www.sirket.com&lt;\/a&gt;&lt;\/p&gt;&lt;p style='margin-top: 10px;'&gt;&lt;img src='https:\/\/www.sirket.com\/images\/logo.png' alt='Company Logo' style='width: 150px; height: auto;'&gt;&lt;\/p&gt;&lt;p style='font-family: Arial, sans-serif; font-size: 12px; color: #333;'&gt;&lt;strong&gt;\u0130leti\u015fim Bilgileri:&lt;\/strong&gt;&lt;br&gt;Telefon: +90 123 456 78 90&lt;br&gt;E-posta: john.doe@sirket.com&lt;\/p&gt;\"<br>user2,\"&lt;p style='font-family: Arial, sans-serif; font-size: 12px; color: #333;'&gt;&lt;strong&gt;Jane Doe&lt;\/strong&gt;&lt;br&gt;&lt;span style='color: #777;'&gt;Pazarlama M\u00fcd\u00fcr\u00fc&lt;\/span&gt;&lt;br&gt;&lt;a href='https:\/\/www.sirket.com' style='color: #0073e6; text-decoration: none;'&gt;www.sirket.com&lt;\/a&gt;&lt;\/p&gt;&lt;p style='margin-top: 10px;'&gt;&lt;img src='https:\/\/www.sirket.com\/images\/logo.png' alt='Company Logo' style='width: 150px; height: auto;'&gt;&lt;\/p&gt;&lt;p style='font-family: Arial, sans-serif; font-size: 12px; color: #333;'&gt;&lt;strong&gt;\u0130leti\u015fim Bilgileri:&lt;\/strong&gt;&lt;br&gt;Telefon: +90 987 654 32 10&lt;br&gt;E-posta: jane.doe@sirket.com&lt;\/p&gt;\"<br>```<\/p><p>Burada:<br>- `Kullanici`: cPanel kullan\u0131c\u0131 ad\u0131.<br>- `Imza`: HTML format\u0131nda imza i\u00e7eri\u011fi.<\/p><p>---<\/p><p>### 3. **CSV Dosyas\u0131n\u0131 Sunucuya Y\u00fckleme**<br>CSV dosyan\u0131z\u0131 sunucuya y\u00fckleyin. \u00d6rne\u011fin, `\/root\/signatures.csv` yoluna kaydedin.<\/p><p>---<\/p><p>### 4. **SSH ile Sunucuya Ba\u011flanma**<br>WHM\/cPanel sunucunuza SSH \u00fczerinden root kullan\u0131c\u0131s\u0131 olarak ba\u011flan\u0131n.<\/p><p>---<\/p><p>### 5. **Betik Olu\u015fturma**<br>A\u015fa\u011f\u0131daki beti\u011fi kullanarak, CSV dosyas\u0131ndaki bilgileri okuyup her kullan\u0131c\u0131 i\u00e7in imza dosyas\u0131n\u0131 g\u00fcncelleyebilirsiniz.<\/p><p>```bash<br>#!\/bin\/bash<\/p><p># CSV dosyas\u0131n\u0131n yolu<br>csv_file=\"\/root\/signatures.csv\"<\/p><p># CSV dosyas\u0131n\u0131 sat\u0131r sat\u0131r oku<br>tail -n +2 \"$csv_file\" | while IFS=, read -r kullanici imza; do<br>&nbsp; &nbsp;# Kullan\u0131c\u0131n\u0131n imza dosyas\u0131n\u0131n yolunu belirle<br>&nbsp; &nbsp;signature_file=\"\/home\/$kullanici\/.cpanel\/email_signatures\/default\"<\/p><p>&nbsp; &nbsp;# \u0130mza dosyas\u0131n\u0131n dizinini olu\u015ftur (e\u011fer yoksa)<br>&nbsp; &nbsp;mkdir -p \"\/home\/$kullanici\/.cpanel\/email_signatures\"<\/p><p>&nbsp; &nbsp;# \u0130mza bilgisini dosyaya yaz (HTML format\u0131nda)<br>&nbsp; &nbsp;echo \"$imza\" &gt; \"$signature_file\"<\/p><p>&nbsp; &nbsp;# Dosya izinlerini ayarla (cPanel'in eri\u015febilmesi i\u00e7in)<br>&nbsp; &nbsp;chown \"$kullanici:$kullanici\" \"$signature_file\"<br>&nbsp; &nbsp;chmod 644 \"$signature_file\"<\/p><p>&nbsp; &nbsp;echo \"$kullanici i\u00e7in imza g\u00fcncellendi.\"<br>done<\/p><p>echo \"\u0130mza g\u00fcncelleme i\u015flemi tamamland\u0131.\"<br>```<\/p><p>Bu beti\u011fi, \u00f6rne\u011fin `\/root\/update_signatures.sh` olarak kaydedin ve \u00e7al\u0131\u015ft\u0131r\u0131labilir hale getirin:<\/p><p>```bash<br>chmod +x \/root\/update_signatures.sh<br>```<\/p><p>---<\/p><p>### 6. **Beti\u011fi \u00c7al\u0131\u015ft\u0131rma**<br>Beti\u011fi \u00e7al\u0131\u015ft\u0131rarak CSV dosyas\u0131ndaki bilgileri kullan\u0131c\u0131lara uygulay\u0131n:<\/p><p>```bash<br>\/root\/update_signatures.sh<br>```<\/p><p>---<\/p><p>### 7. **cPanel'de HTML \u0130mzalar\u0131 Etkinle\u015ftirme**<br>Kullan\u0131c\u0131lar\u0131n e-posta istemcilerinde HTML imzalar\u0131n do\u011fru g\u00f6r\u00fcnt\u00fclenmesi i\u00e7in, cPanel'de HTML imzalar\u0131n etkin oldu\u011fundan emin olun. Bunun i\u00e7in:<br>1. WHM'de `Tweak Settings` b\u00f6l\u00fcm\u00fcne girin.<br>2. `Allow HTML email signatures` se\u00e7ene\u011finin etkin oldu\u011fundan emin olun.<\/p><p>---<\/p><p>### 8. **Test Etme**<br>Kullan\u0131c\u0131lar\u0131n e-posta hesaplar\u0131na giri\u015f yaparak imzalar\u0131n do\u011fru bir \u015fekilde g\u00f6r\u00fcnt\u00fclendi\u011fini kontrol edin. Resimlerin do\u011fru y\u00fcklendi\u011finden ve HTML i\u00e7eri\u011fin do\u011fru g\u00f6r\u00fcnt\u00fclendi\u011finden emin olun.<\/p><p>---<\/p><p>### Sonu\u00e7<br>Bu ad\u0131mlar\u0131 takip ederek, WHM\/cPanel sunucunuzdaki t\u00fcm kullan\u0131c\u0131lar i\u00e7in HTML format\u0131nda e-posta imzalar\u0131 olu\u015fturabilir ve bu imzalara resimler, ba\u011flant\u0131lar ve \u00f6zel stiller ekleyebilirsiniz. Bu y\u00f6ntem, kurumsal ileti\u015fimde tutarl\u0131 ve profesyonel bir imaj olu\u015fturman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p><p>---<\/p><p>### \u0130pu\u00e7lar\u0131:<br>- Resimlerin URL'leri herkese a\u00e7\u0131k olmal\u0131d\u0131r.<br>- CSV dosyas\u0131n\u0131 d\u00fczenli olarak g\u00fcncelleyerek yeni kullan\u0131c\u0131lar i\u00e7in imzalar olu\u015fturabilirsiniz.<br>- Bu i\u015flem, root eri\u015fimi gerektirir. E\u011fer root eri\u015fiminiz yoksa, cPanel API veya benzeri y\u00f6ntemlerle de bu i\u015flemi ger\u00e7ekle\u015ftirebilirsiniz.<\/p><p>Bu blog yaz\u0131s\u0131, WHM\/cPanel'de HTML e-posta imzalar\u0131 olu\u015fturma s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131klamaktad\u0131r. Umar\u0131m faydal\u0131 olur!<\/p>","excerpt":"Bu blog yaz\u0131s\u0131, WHM\/cPanel'de HTML e-posta imzalar\u0131 olu\u015fturma s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131klamaktad\u0131r.","created_at":"2025-01-16 23:31:06","updated_at":"2026-09-23 16:37:34","category_id":9,"view_count":723,"reading_time":6,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-01-16 23:31:06","featured_image":"resimyok.jpg","slug":"whm-cpanel-de-html-e-posta-imzalari-olusturma-sureci","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":190,"title":"SQL Notlar\u0131: Performans \u0130pu\u00e7lar\u0131 ve Optimizasyon","content":"<p>MySQL, b\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde \u00e7al\u0131\u015f\u0131rken performans\u0131 art\u0131rmak i\u00e7in \u00e7e\u015fitli optimizasyon teknikleri sunar. Bu yaz\u0131da, **bile\u015fik indeksler**, **sorgu optimizasyonu** ve **depolama d\u00fczeni** ile ilgili temel bilgileri ve kullan\u0131m \u00f6rneklerini ele alaca\u011f\u0131z.<\/p><p>---<\/p><p>### Bile\u015fik \u0130ndeks Olu\u015fturma<\/p><p>Bile\u015fik indeksler, birden fazla s\u00fctun \u00fczerinde tan\u0131mlan\u0131r ve belirli sorgular\u0131n performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. \u0130deal bir bile\u015fik indeks olu\u015fturmak i\u00e7in s\u00fctunlar\u0131 a\u015fa\u011f\u0131daki s\u0131rayla ekleyin:<\/p><p>1. **WHERE Ko\u015fulundaki S\u00fctunlar:** \u00d6rne\u011fin, `WHERE a = 12 AND b = 'xyz'` i\u00e7in `INDEX(a, b)`.<br>2. **IN Ko\u015fulundaki S\u00fctunlar:** Optimizat\u00f6r, indeks \u00fczerinde h\u0131zl\u0131 atlamalar yapabilir.<br>3. **Aral\u0131k Ko\u015fullar\u0131:** \u00d6rne\u011fin, `x BETWEEN 3 AND 9` veya `name LIKE 'J%'`. \u0130ndeks, ilk aral\u0131k s\u00fctunundan sonras\u0131n\u0131 kullanmaz.<br>4. **GROUP BY S\u00fctunlar\u0131:** Gruplama s\u00fctunlar\u0131n\u0131 s\u0131rayla ekleyin.<br>5. **ORDER BY S\u00fctunlar\u0131:** S\u0131ralama s\u00fctunlar\u0131n\u0131 s\u0131rayla ekleyin. T\u00fcm s\u00fctunlar `ASC` veya `DESC` olmal\u0131d\u0131r.<\/p><p>#### \u00d6rnek:<br>```sql<br>CREATE INDEX idx_composite ON my_table (a, b, c);<br>```<\/p><p>Bu indeks, a\u015fa\u011f\u0131daki sorgular i\u00e7in kullan\u0131labilir:<br>```sql<br>SELECT * FROM my_table WHERE a = 12 AND b = 'xyz';<br>SELECT * FROM my_table WHERE a = 12 ORDER BY c;<br>```<\/p><p>---<\/p><p>### Sorgu Optimizasyonu<\/p><p>#### 1. **Fonksiyonlar \u0130\u00e7inde \u0130ndeksli S\u00fctunlar\u0131 Kullanmaktan Ka\u00e7\u0131n\u0131n**<br>Fonksiyonlar i\u00e7inde indeksli s\u00fctunlar\u0131 kullanmak, indeksin kullan\u0131lmas\u0131n\u0131 engeller. \u00d6rne\u011fin:<br>```sql<br>WHERE DATE(dt) = '2000-01-01' &nbsp;-- \u0130ndeks kullan\u0131lmaz<br>```<br>Bunun yerine:<br>```sql<br>WHERE dt &gt;= '2000-01-01' AND dt &lt; '2000-01-02' &nbsp;-- \u0130ndeks kullan\u0131l\u0131r<br>```<\/p><p>#### 2. **OR Ko\u015fullar\u0131**<br>`OR` ko\u015fullar\u0131, optimizasyonu zorla\u015ft\u0131r\u0131r. \u00d6rne\u011fin:<br>```sql<br>WHERE a = 12 OR b = 78 &nbsp;-- \u0130ndeks kullan\u0131m\u0131 zor<br>```<br>Bunun yerine:<br>```sql<br>WHERE a IN (12, 78) &nbsp;-- \u0130ndeks kullan\u0131labilir<br>```<\/p><p>#### 3. **Alt Sorgular**<br>Alt sorgular, \u00f6zellikle ili\u015fkili (correlated) alt sorgular, performans\u0131 etkileyebilir. \u00d6rne\u011fin:<br>```sql<br>SELECT a, b, (SELECT MAX(x) FROM t WHERE t.x = u.x) AS c FROM u;<br>```<br>Bu t\u00fcr sorgular, `LEFT JOIN` ile de\u011fi\u015ftirilebilir ve daha h\u0131zl\u0131 \u00e7al\u0131\u015fabilir.<\/p><p>---<\/p><p>### Depolama D\u00fczeni Optimizasyonu<\/p><p>#### 1. **Uzun PRIMARY KEY'lerden Ka\u00e7\u0131n\u0131n**<br>Uzun bir PRIMARY KEY, disk alan\u0131n\u0131 bo\u015fa harcar ve ikincil indekslerde de yer kaplar. Bunun yerine `AUTO_INCREMENT` kullan\u0131n.<\/p><p>#### 2. **VARCHAR Kullan\u0131m\u0131**<br>De\u011fi\u015fken uzunluklu metinler i\u00e7in `VARCHAR` kullan\u0131n. `CHAR(N)` her zaman `N` karakter yer kaplar, oysa `VARCHAR` sadece gerekti\u011fi kadar yer kullan\u0131r.<\/p><p>#### 3. **COMPRESSED Sat\u0131r Format\u0131**<br>B\u00fcy\u00fck tablolar veya tekrarlanan veriler i\u00e7in `COMPRESSED` sat\u0131r format\u0131n\u0131 kullan\u0131n. Bu, disk I\/O'yu azalt\u0131r ve performans\u0131 art\u0131r\u0131r.<\/p><p>#### 4. **OPTIMIZE TABLE**<br>Tablo boyutu stabilize oldu\u011funda veya b\u00fcy\u00fck miktarda veri eklendi\u011finde `OPTIMIZE TABLE` kullanarak tabloyu yeniden d\u00fczenleyebilir ve bo\u015f alan\u0131 s\u0131k\u0131\u015ft\u0131rabilirsiniz. Ancak bu i\u015flem maliyetlidir ve nadiren kullan\u0131lmal\u0131d\u0131r.<\/p><p>---<\/p><p>### Performans\u0131 Art\u0131rmak \u0130\u00e7in Di\u011fer \u0130pu\u00e7lar\u0131<\/p><p>- **innodb_buffer_pool_size:** Bu de\u011fer, mevcut RAM'in yakla\u015f\u0131k %70'i olarak ayarlanmal\u0131d\u0131r.<br>- **Prefix \u0130ndeksler:** \u00d6rne\u011fin, `INDEX(foo(20))` gibi \u00f6nek indeksler genellikle faydas\u0131zd\u0131r ve performans\u0131 d\u00fc\u015f\u00fcrebilir.<br>- **PARTITIONing:** PARTITIONing nadiren performans avantaj\u0131 sa\u011flar ve bazen performans\u0131 d\u00fc\u015f\u00fcrebilir.<\/p><p>---<\/p><p>### Rezerve Kelimeler ve Hatalar<\/p><p>MySQL'de baz\u0131 \u00f6zel kelimeler (\u00f6rne\u011fin, `ORDER`, `GROUP`) rezerve edilmi\u015ftir. Bu kelimeleri tablo veya s\u00fctun ad\u0131 olarak kullan\u0131rken backtick (`) ile \u00e7evrelemeniz gerekir:<\/p><p>```sql<br>SELECT * FROM `order`; &nbsp;-- Rezerve kelime kullan\u0131m\u0131<br>```<\/p><p>---<\/p><p>### Sonu\u00e7<\/p><p>MySQL'de performans\u0131 art\u0131rmak i\u00e7in do\u011fru indeksleme, sorgu optimizasyonu ve depolama d\u00fczeni stratejileri kullan\u0131lmal\u0131d\u0131r. Bile\u015fik indeksler, sorgular\u0131n h\u0131z\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilirken, `OR` ko\u015fullar\u0131 ve fonksiyonlar i\u00e7inde indeksli s\u00fctunlar kullanmaktan ka\u00e7\u0131nmak da performans\u0131 korur. Ayr\u0131ca, depolama d\u00fczeni optimizasyonu ve do\u011fru yap\u0131land\u0131rma ayarlar\u0131, veritaban\u0131n\u0131n genel performans\u0131n\u0131 art\u0131rabilir.<\/p>","excerpt":"MySQL'de performans\u0131 art\u0131rmak i\u00e7in do\u011fru indeksleme, sorgu optimizasyonu ve depolama d\u00fczeni stratejileri kullan\u0131lmal\u0131d\u0131r. Bile\u015fik indeksler, sorgular\u0131n h\u0131z\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilirken, `OR` ko\u015fullar\u0131 ve fonksiyonlar i\u00e7inde indeksli s\u00fctunlar kullanmaktan ka\u00e7\u0131nmak da performans\u0131 korur. Ayr\u0131ca, depolama d\u00fczeni optimizasyonu ve do\u011fru yap\u0131land\u0131rma ayarlar\u0131, veritaban\u0131n\u0131n genel performans\u0131n\u0131 art\u0131rabilir.","created_at":"2025-01-13 16:01:04","updated_at":"2026-09-07 15:45:39","category_id":9,"view_count":660,"reading_time":4,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-01-13 16:01:04","featured_image":"resimyok.jpg","slug":"sql-notlari-performans-ipuclari-ve-optimizasyon","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"},{"id":191,"title":"SQL Notlar\u0131: Kullan\u0131c\u0131 Y\u00f6netimi ve \u015eifre De\u011fi\u015ftirme","content":"<p>### MySQL'de Kullan\u0131c\u0131 Y\u00f6netimi ve \u015eifre De\u011fi\u015ftirme<\/p><p>MySQL, kullan\u0131c\u0131 hesaplar\u0131n\u0131 y\u00f6netmek ve \u015fifreleri de\u011fi\u015ftirmek i\u00e7in \u00e7e\u015fitli komutlar sunar. Bu yaz\u0131da, **yeni kullan\u0131c\u0131 olu\u015fturma**, **\u015fifre de\u011fi\u015ftirme** ve **g\u00fcvenlik \u00f6nlemleri** ile ilgili temel bilgileri ve kullan\u0131m \u00f6rneklerini ele alaca\u011f\u0131z.<\/p><p>---<\/p><p>### Yeni Kullan\u0131c\u0131 Olu\u015fturma<\/p><p>MySQL'de yeni bir kullan\u0131c\u0131 olu\u015fturmak ve bu kullan\u0131c\u0131ya yetkiler vermek olduk\u00e7a kolayd\u0131r.<\/p><p>#### Temel Kullan\u0131c\u0131 Olu\u015fturma<br>Yeni bir kullan\u0131c\u0131 olu\u015fturmak i\u00e7in a\u015fa\u011f\u0131daki komutu kullanabilirsiniz:<\/p><p>```sql<br>CREATE USER 'my_new_user'@'localhost' IDENTIFIED BY 'test_password';<br>```<\/p><p>Bu komut, `my_new_user` ad\u0131nda bir kullan\u0131c\u0131 olu\u015fturur ve \u015fifresini `test_password` olarak ayarlar.<\/p><p>#### Kullan\u0131c\u0131ya Yetki Verme<br>Yeni olu\u015fturulan kullan\u0131c\u0131ya belirli bir veritaban\u0131 \u00fczerinde yetkiler vermek i\u00e7in `GRANT` komutunu kullanabilirsiniz:<\/p><p>```sql<br>GRANT ALL PRIVILEGES ON my_db.* TO 'my_new_user'@'localhost';<br>```<\/p><p>Bu komut, `my_new_user` kullan\u0131c\u0131s\u0131na `my_db` veritaban\u0131 \u00fczerinde t\u00fcm yetkileri verir.<\/p><p>#### \u015eifreyi Hashleyerek Kullan\u0131c\u0131 Olu\u015fturma<br>\u015eifreyi hashleyerek kullan\u0131c\u0131 olu\u015fturmak i\u00e7in `PASSWORD` fonksiyonunu kullanabilirsiniz:<\/p><p>```sql<br>SELECT PASSWORD('test_password'); -- Hash de\u011ferini al\u0131r<br>CREATE USER 'my_new_user'@'localhost' IDENTIFIED BY PASSWORD '*4414E26EDED6D661B5386813EBBA95865DBC4728';<br>```<\/p><p>---<\/p><p>### \u015eifre De\u011fi\u015ftirme<\/p><p>MySQL'de kullan\u0131c\u0131 \u015fifrelerini de\u011fi\u015ftirmek i\u00e7in farkl\u0131 y\u00f6ntemler bulunmaktad\u0131r. Bu i\u015flem, \u00f6zellikle g\u00fcvenlik a\u00e7\u0131s\u0131ndan \u00f6nemlidir.<\/p><p>#### Linux'ta Root \u015eifresini De\u011fi\u015ftirme<br>1. MySQL sunucusunu durdurun:<br>&nbsp; ```bash<br>&nbsp; sudo \/etc\/init.d\/mysql stop<br>&nbsp; ```<\/p><p>2. MySQL'i yetkilendirme sistemi olmadan ba\u015flat\u0131n:<br>&nbsp; ```bash<br>&nbsp; sudo mysqld_safe --skip-grant-tables &amp;<br>&nbsp; ```<\/p><p>3. MySQL'e root olarak ba\u011flan\u0131n:<br>&nbsp; ```bash<br>&nbsp; mysql -u root<br>&nbsp; ```<\/p><p>4. Yeni \u015fifreyi ayarlay\u0131n:<br>&nbsp; ```sql<br>&nbsp; FLUSH PRIVILEGES;<br>&nbsp; ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';<br>&nbsp; FLUSH PRIVILEGES;<br>&nbsp; exit;<br>&nbsp; ```<\/p><p>5. MySQL sunucusunu yeniden ba\u015flat\u0131n:<br>&nbsp; ```bash<br>&nbsp; sudo \/etc\/init.d\/mysql start<br>&nbsp; ```<\/p><p>#### Windows'ta Root \u015eifresini De\u011fi\u015ftirme<br>1. Komut \u0130stemi'ni y\u00f6netici olarak ba\u015flat\u0131n.<br>2. MySQL'in kurulu oldu\u011fu dizine gidin:<br>&nbsp; ```bash<br>&nbsp; cd C:\\mysql\\bin<br>&nbsp; ```<\/p><p>3. MySQL komut sat\u0131r\u0131na ba\u011flan\u0131n:<br>&nbsp; ```bash<br>&nbsp; mysql -u root mysql<br>&nbsp; ```<\/p><p>4. Yeni \u015fifreyi ayarlay\u0131n:<br>&nbsp; ```sql<br>&nbsp; SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');<br>&nbsp; ```<\/p><p>---<\/p><p>### MySQL 5.7+ i\u00e7in Varsay\u0131lan Root \u015eifresini Kurtarma<\/p><p>MySQL 5.7 ve sonras\u0131nda, sunucu ilk ba\u015flat\u0131ld\u0131\u011f\u0131nda root \u015fifresi otomatik olarak olu\u015fturulur ve `mysqld.log` dosyas\u0131na kaydedilir.<\/p><p>#### Varsay\u0131lan \u015eifreyi Bulma<br>Varsay\u0131lan \u015fifreyi bulmak i\u00e7in a\u015fa\u011f\u0131daki komutu kullanabilirsiniz:<br>```bash<br>sudo grep 'temporary password' \/var\/log\/mysqld.log<br>```<\/p><p>#### \u015eifreyi De\u011fi\u015ftirme<br>Varsay\u0131lan \u015fifre ile MySQL'e ba\u011flan\u0131n ve yeni \u015fifreyi ayarlay\u0131n:<br>```bash<br>mysql -uroot -p<br>ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass51';<br>```<\/p><p>---<\/p><p>### G\u00fcvenlik \u00d6nlemleri<\/p><p>MySQL'de g\u00fcvenli\u011fi art\u0131rmak i\u00e7in a\u015fa\u011f\u0131daki \u00f6nlemleri alabilirsiniz:<\/p><p>- **Root Kullan\u0131c\u0131s\u0131n\u0131 S\u0131n\u0131rland\u0131rma:** Root kullan\u0131c\u0131s\u0131n\u0131 sadece `localhost` \u00fczerinden eri\u015fime izin verin.<br>&nbsp;```sql<br>&nbsp;GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';<br>&nbsp;```<\/p><p>- **Uygulama Kullan\u0131c\u0131lar\u0131n\u0131 S\u0131n\u0131rland\u0131rma:** Uygulama kullan\u0131c\u0131lar\u0131n\u0131 sadece belirli bir veritaban\u0131 \u00fczerinde yetkilendirin.<br>&nbsp;```sql<br>&nbsp;GRANT SELECT, INSERT, UPDATE, DELETE ON my_db.* TO 'app_user'@'%';<br>&nbsp;```<\/p><p>- **Stored Procedure Kullan\u0131m\u0131:** Root yetkisi gerektiren i\u015flemler i\u00e7in stored procedure'ler kullan\u0131n ve `SECURITY DEFINER` ile s\u0131n\u0131rland\u0131r\u0131n.<\/p><p>---<\/p><p>### Sonu\u00e7<\/p><p>MySQL'de kullan\u0131c\u0131 y\u00f6netimi ve \u015fifre de\u011fi\u015ftirme i\u015flemleri, veritaban\u0131 g\u00fcvenli\u011fi a\u00e7\u0131s\u0131ndan olduk\u00e7a \u00f6nemlidir. Yeni kullan\u0131c\u0131lar olu\u015fturarak ve \u015fifreleri d\u00fczenli olarak g\u00fcncelleyerek, veritaban\u0131n\u0131z\u0131 yetkisiz eri\u015fimlere kar\u015f\u0131 koruyabilirsiniz. Ayr\u0131ca, g\u00fcvenlik \u00f6nlemleri alarak veritaban\u0131n\u0131z\u0131n g\u00fcvenli\u011fini daha da art\u0131rabilirsiniz.<\/p>","excerpt":"MySQL'de kullan\u0131c\u0131 y\u00f6netimi ve \u015fifre de\u011fi\u015ftirme i\u015flemleri, veritaban\u0131 g\u00fcvenli\u011fi a\u00e7\u0131s\u0131ndan olduk\u00e7a \u00f6nemlidir. Yeni kullan\u0131c\u0131lar olu\u015fturarak ve \u015fifreleri d\u00fczenli olarak g\u00fcncelleyerek, veritaban\u0131n\u0131z\u0131 yetkisiz eri\u015fimlere kar\u015f\u0131 koruyabilirsiniz. Ayr\u0131ca, g\u00fcvenlik \u00f6nlemleri alarak veritaban\u0131n\u0131z\u0131n g\u00fcvenli\u011fini daha da art\u0131rabilirsiniz.","created_at":"2025-01-13 15:59:21","updated_at":"2026-09-23 10:40:44","category_id":9,"view_count":799,"reading_time":4,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-01-13 15:59:21","featured_image":"resimyok.jpg","slug":"sql-notlari-kullanici-yonetimi-ve-sifre-degistirme","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim","category_color":"#ef4444"}]