<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by türkay ürkmez on Medium]]></title>
        <description><![CDATA[Stories by türkay ürkmez on Medium]]></description>
        <link>https://medium.com/@turkayurkmez?source=rss-a1d2c7bef988------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*Qbj5bzDcd_LS1yBURVCdbg.jpeg</url>
            <title>Stories by türkay ürkmez on Medium</title>
            <link>https://medium.com/@turkayurkmez?source=rss-a1d2c7bef988------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 04:44:43 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@turkayurkmez/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[ASP.NET Core Minimal API ve REPR Pattern]]></title>
            <link>https://medium.com/@turkayurkmez/asp-net-core-minimal-api-ve-repr-pattern-5fb4892bbd16?source=rss-a1d2c7bef988------2</link>
            <guid isPermaLink="false">https://medium.com/p/5fb4892bbd16</guid>
            <category><![CDATA[design-patterns]]></category>
            <category><![CDATA[aspnetcore]]></category>
            <category><![CDATA[rest-api]]></category>
            <category><![CDATA[csharp]]></category>
            <category><![CDATA[software-architecture]]></category>
            <dc:creator><![CDATA[türkay ürkmez]]></dc:creator>
            <pubDate>Fri, 17 Apr 2026 12:37:06 GMT</pubDate>
            <atom:updated>2026-04-17T12:54:37.286Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*rLLFYMmfiKRVAI5E" /><figcaption>Photo by <a href="https://unsplash.com/@guerrillabuzz?utm_source=medium&amp;utm_medium=referral">GuerrillaBuzz</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><blockquote>Her Endpoint’e bir oda ver baba :)</blockquote><p>Merhaba sevgili dostlarım! 👋</p><p>Uzun zaman oldu, değil mi? Bugün size hem oldukça şık hem de “neden daha önce böyle yazmıyordum?” dedirtecek bir konudan bahsedeceğim: <strong>ASP.NET Core Minimal API</strong> ve onunla neredeyse el ele tutuşmak için doğmuş olan <strong>REPR Pattern</strong>.</p><p>Hazır mısınız? Hadi kolları sıvayalım!</p><h4>Önce Biraz Geçmişe Dönelim</h4><p>Yıllarca ASP.NET Core projelerinde şunu yaptık: Bir Controllers klasörü açtık, içine UserController, ProductController, OrderController gibi dev dev sınıflar koyuşturmaya başladık. Hepsi bir arada, mutlu mesut…</p><p>Ama bir süre sonra o UserController büyüdü. Büyüdükçe büyüdü. 500 satır oldu, 800 satır oldu. Sonunda ekipteki yeni arkadaş o dosyayı açtığında yüzü asıldı.</p><p>“Bu ne böyle?” dedi.</p><p>Haklıydı. Biz de aslında içten içe biliyorduk. Bir sınıf hem kullanıcı kaydını, hem giriş işlemini, hem şifre sıfırlamayı, hem profil güncellemeyi, hem de “bu kullanıcı admin mi?” kontrolünü yapıyordu.</p><p>Peki bunu fark ettiğimizde ne yaptık? Controller’ı böldük. Ama bu sefer de başka bir sorunla yüz yüze geldik — birazdan ona geleceğiz. Önce hikayemizi biraz daha ilerletelim.</p><h4>Şirket Büyüdü, Sorunlar da Büyüdü: Bir Analoji</h4><p>Küçük bir şirket hayal edin. Beş kişilik bir ekip: herkes her işi yapıyor. Muhasebe de, müşteri ilişkileri de, üretim de, lojistik de hep aynı masada. Şirket küçükken bu yürüyor; herkes birbirinden haberdardı, kararlar hızlı alınıyordu.</p><p>Ama şirket büyüdü. Müşteri sayısı arttı, ürün çeşitlendi, ekip genişledi. Ve artık o beş kişilik masa kaosa döndü. “Fatura kim kesiyor?” “Sevkiyatı kim takip ediyor?” “Müşteri şikayet etti, kim ilgilenecek?”</p><p>Çözüm belli: <strong>Departmanlar kuruldu.</strong> Muhasebe departmanı, lojistik departmanı, müşteri hizmetleri departmanı… Her departmanın net bir sorumluluğu var, net bir giriş noktası (talep alır), net bir çıkış noktası (sonucu iletir) var.</p><p>Bir müşteri siparişi geldiğinde şu olur: Talep satış departmanına girer → departman işlemi yapar → sonucu ilgili yere iletir. Başka bir departmanın bu akışa karışması söz konusu değil.</p><p><strong>İşte REPR Pattern tam olarak budur: Her HTTP endpoint bir departman gibi çalışır. Kendi talebi (Request) alır, kendi işini yapar (Endpoint), kendi cevabını (Response) üretir.</strong></p><h3>Minimal API: Controller’ların Hafif Kardeşi</h3><p>ASP.NET Core 6 ile hayatımıza giren <strong>Minimal API (Minimal Uygulama Programlama Arayüzü)</strong>, Controller katmanını tamamen ortadan kaldırıyor. Program.cs içinde ya da küçük sınıflar aracılığıyla direkt olarak endpoint tanımlayabiliyorsunuz:</p><pre>// Program.cs — Minimal API ile en basit hali<br>var app = WebApplication.Create(args);<br><br>app.MapGet(&quot;/api/products/{id}&quot;, async (int id, IProductService svc) =&gt;<br>    await svc.GetByIdAsync(id) is { } product<br>        ? Results.Ok(product)<br>        : Results.NotFound());<br><br>app.MapPost(&quot;/api/products&quot;, async (CreateProductRequest req, IProductService svc) =&gt;<br>{<br>    var product = await svc.CreateAsync(req.Name, req.Price, req.CategoryId);<br>    return Results.Created($&quot;/api/products/{product.Id}&quot;, product);<br>});<br><br>// ... diğer endpointler<br><br>app.Run();</pre><p>Temiz, sade, güzel. Controller yok, [HttpPost] attribute yok, ControllerBase kalıtımı yok.</p><p>“Tamam tamam, bu güzel de…” diyorsunuzdur. “Beş endpoint için bu yeterli ama ya elli endpoint olursa? Program.cs devasa bir dosyaya dönmez mi?&quot;</p><p>Haklısınız! İşte tam bu noktada akıllıca bir ara çözüme gidebilirsiniz: Endpoint gruplarını extension method’larla ayırmak.</p><h3>“Yeterli” Gibi Görünen Ara Çözüm: Extension Method’lar</h3><p>Endpointleri gruplamak için şöyle bir yapı kurabilirsiniz:</p><pre>// Extensions/ProductEndpointExtensions.cs<br>public static class ProductEndpointExtensions<br>{<br>    public static IEndpointRouteBuilder MapProductEndpoints(<br>        this IEndpointRouteBuilder app)<br>    {<br>        app.MapGet(&quot;/api/products/{id}&quot;, GetProductByIdAsync);<br>        app.MapPost(&quot;/api/products&quot;, CreateProductAsync);<br>        app.MapGet(&quot;/api/products&quot;, GetProductsAsync);<br>        app.MapPut(&quot;/api/products/{id}&quot;, UpdateProductAsync);<br>        app.MapDelete(&quot;/api/products/{id}&quot;, DeleteProductAsync);<br><br>        return app;<br>    }<br><br>    private static async Task&lt;IResult&gt; GetProductByIdAsync(int id, IProductService svc) { /* ... */ }<br>    private static async Task&lt;IResult&gt; CreateProductAsync(CreateProductRequest req, IProductService svc) { /* ... */ }<br>    // ...<br>}</pre><p>Program.cs artık çok daha temiz:</p><pre>// Program.cs<br>var app = builder.Build();<br><br>app.MapProductEndpoints();<br>app.MapOrderEndpoints();<br>app.MapUserEndpoints();<br><br>app.Run();</pre><p>Her şey yolunda gözüküyor değil mi? Program.cs temiz, endpoint&#39;ler gruplandı, Controller yok...</p><p>Ama durun bir dakika. O ProductEndpointExtensions dosyasına tekrar bakalım. Ürünle ilgili beş farklı endpoint var ve hepsi aynı sınıfın içinde. Bir endpoint için yetkilendirme eklemek istediğinizde, başka bir endpoint için cache politikası tanımlamak istediğinizde, hepsine aynı dosyadan dokunuyorsunuz.</p><p>Bu sizi tanıdık bir yere götürmüyor mu? 😏 Evet, isim değişti ama ProductController&#39;ın şişmanlık sorunu burada da baş gösteriyor. Sorun katman değiştirdi, yok olmadı.</p><h3>Sorun Sadece Controller’da Değil: Şişman Servis Problemi</h3><p>“Tamam” diyorsunuz, “controller’ı böleceğim, her endpoint ayrı bir sınıf olacak. Ama iş mantığı (business logic) zaten servis katmanında, ne fark eder ki?”</p><p>İşte tam burada ikinci bir tuzak bizi bekliyor.</p><p>IProductService arayüzünüze (interface) bir bakın:</p><pre>public interface IProductService<br>{<br>    Task&lt;ProductDto&gt; GetByIdAsync(int id);<br>    Task&lt;IEnumerable&lt;ProductDto&gt;&gt; GetAllAsync(string? search, int page);<br>    Task&lt;ProductDto&gt; CreateAsync(string name, decimal price, int categoryId);<br>    Task UpdateAsync(int id, string name, decimal price);<br>    Task DeleteAsync(int id);<br>    Task&lt;bool&gt; IsInStockAsync(int id);<br>    Task&lt;IEnumerable&lt;ProductDto&gt;&gt; GetByCategoryAsync(int categoryId);<br>    Task UpdateStockAsync(int id, int quantity);<br>    // ... devam ediyor<br>}</pre><p>Bu arayüzü implemente eden ProductService sınıfı zamanla ne hale gelir? Tahmin edebilirsiniz: yüzlerce satır, onlarca metod, birbirine geçmiş sorumluluklar. <strong>Şişman nesne (fat object)</strong> problemi.</p><p>Ve işin kötüsü şu: CreateProductEndpoint yalnızca CreateAsync metoduna ihtiyaç duyuyor. Ama bağımlılık olarak IProductService&#39;in tamamını alıyor. Stock güncelleme metodu da, kategori sorgulama metodu da, hepsi orada, kullanılmayı bekliyor. Test yazarken bu arayüzün tamamını taklit etmeniz (mock) gerekiyor.</p><p>Düşünsenize: Muhasebe departmanı bir fatura kesmek için tüm şirket yönetimine erişim yetkisi almak zorunda kalsaydı ne olurdu? 😄</p><p><strong>Controller’ı bölmek sorunu çözmüyor. Servisi de bölmemiz gerekiyor. Ve her özellik (feature) kendi küçük, bağımsız biriminde yaşamalı.</strong></p><p>İşte tam bu noktada REPR Pattern devreye giriyor.</p><h3>REPR Nedir?</h3><p>REPR, <strong>Request-Endpoint-Response</strong> kelimelerinin baş harflerinden oluşuyor. <a href="https://ardalis.com/">Steve Smith (Ardalis)</a> tarafından popülerleştirilen bu yaklaşımda şu mantık var:</p><blockquote><strong><em>Her endpoint, kendi Request modeliyle gelir, kendi işini yapar ve kendi Response modeliyle döner.</em></strong></blockquote><p>Şirket analojisine dönersek: her departmanın net bir giriş formu (Request), net bir işlem süreci (Endpoint) ve net bir çıktı raporu (Response) var. Başka departmanlar bu akışa karışmıyor.</p><h3>REPR Pattern ile Doğru Yaklaşım</h3><p>Klasör yapımız şöyle olacak:</p><pre>Features/<br>  Products/<br>    CreateProduct/<br>      CreateProductEndpoint.cs<br>      CreateProductRequest.cs<br>      CreateProductResponse.cs<br>    GetProductById/<br>      GetProductByIdEndpoint.cs<br>      GetProductByIdRequest.cs<br>      GetProductByIdResponse.cs<br>    GetProducts/<br>      GetProductsEndpoint.cs<br>      GetProductsRequest.cs<br>      GetProductsResponse.cs</pre><p>Her “departman” kendi klasöründe yaşıyor. Şimdi CreateProduct örneğini yazalım:</p><pre>// Features/Products/CreateProduct/CreateProductRequest.cs<br>public record CreateProductRequest(<br>    string Name,<br>    decimal Price,<br>    int CategoryId<br>);</pre><pre>// Features/Products/CreateProduct/CreateProductResponse.cs<br>public record CreateProductResponse(<br>    int Id,<br>    string Name,<br>    decimal Price,<br>    DateTime CreatedAt<br>);<br></pre><p>Request ve Response modellerimiz hazır. Peki ama, tüm endpoint’leri tek tek eklemek de maaliyetli olmayacak mı? Aman dostlar… Dert ettiğiniz şeye bakın! Her endpoint’in implemente etmesi için bir marker interface tasarlarız ve bu işi de reflection ile çözeriz (Reflection. Bebişim benim 😊)</p><pre>// Shared/IEndpoint.cs<br>public interface IEndpoint<br>{<br>    void Map(IEndpointRouteBuilder app);<br>}</pre><p>Önce endpoint’imizi implemente edelim tabii</p><pre>// Features/Products/CreateProduct/CreateProductEndpoint.cs<br>public class CreateProductEndpoint : IEndpoint<br>{<br>    public void Map(IEndpointRouteBuilder app)<br>    {<br>        app.MapPost(&quot;/api/products&quot;, HandleAsync)<br>           .WithName(&quot;CreateProduct&quot;)<br>           .WithTags(&quot;Products&quot;)<br>           .RequireAuthorization()<br>           .Produces&lt;CreateProductResponse&gt;(StatusCodes.Status201Created)<br>           .ProducesValidationProblem();<br>    }<br><br>    private async Task&lt;IResult&gt; HandleAsync(<br>        CreateProductRequest request,<br>        ICreateProductHandler handler,<br>        CancellationToken cancellationToken)<br>    {<br>        var product = await handler.HandleAsync(request, cancellationToken);<br><br>        var response = new CreateProductResponse(<br>            product.Id,<br>            product.Name,<br>            product.Price,<br>            product.CreatedAt);<br><br>        return Results.Created($&quot;/api/products/{response.Id}&quot;, response);<br>    }<br>}</pre><p>Bu arada dikkat ettiniz mi? Artık IProductService değil, ICreateProductHandler bağımlılığı var. Bu handler yalnızca ürün oluşturmayı biliyor. Başka hiçbir şeyi yok. Test yazarken sadece bu küçük arayüzü taklit etmeniz (mock) yeterli.</p><p>Şirket analojisine dönersek: satış departmanı fatura kesmek için tüm şirket yönetimine değil, sadece muhasebe birimine bağlanıyor.</p><h4>Ve sahnede Reflection: Otomatik Kayıt Mekanizması</h4><p>Pek tabii ki göz bebeğimiz Extension Method aracılığı ile reflection kullanarak, hem endpointleri servise ekliyoruz hem de eklenen endpoint’lerin Map fonksiyonlarını çağırıyoruz:</p><pre>// Shared/EndpointExtensions.cs<br>public static class EndpointExtensions<br>{<br>    public static IServiceCollection AddEndpoints(<br>        this IServiceCollection services,<br>        Assembly assembly)<br>    {<br>        var endpointTypes = assembly<br>            .GetExportedTypes()<br>            .Where(t =&gt; t.IsAssignableTo(typeof(IEndpoint)) &amp;&amp; !t.IsAbstract);<br><br>        foreach (var type in endpointTypes)<br>            services.AddTransient(typeof(IEndpoint), type);<br><br>        return services;<br>    }<br><br>    public static IApplicationBuilder MapEndpoints(this WebApplication app)<br>    {<br>        var endpoints = app.Services.GetRequiredService&lt;IEnumerable&lt;IEndpoint&gt;&gt;();<br><br>        foreach (var endpoint in endpoints)<br>        {<br>            typeof(IEndpoint)<br>                 .GetMethod(&quot;Map&quot;)!<br>                 .Invoke(endpoint, new object[] { app });<br>        }<br><br>        return app;<br>    }<br>}</pre><p>Artık Program.cs gerçekten temiz hem de kalıcı olarak!</p><pre>// Program.cs<br>var builder = WebApplication.CreateBuilder(args);<br><br>builder.Services.AddEndpoints(Assembly.GetExecutingAssembly());<br>// diğer servisler...<br><br>var app = builder.Build();<br><br>app.MapEndpoints();<br>app.Run();</pre><p>Yeni bir endpoint eklediğinizde Program.cs&#39;e, ProductEndpointExtensions&#39;a, IProductService&#39;e dokunmuyorsunuz. Sadece yeni klasörünüzü oluşturuyorsunuz ve sistem onu otomatik olarak buluyor. İşte bu! 🎉</p><h3>Bu Yaklaşımın Faydaları Neler?</h3><p>İşte sevgili dostlarım, özetle neler kazandık:</p><ul><li><strong>Tek sorumluluk, gerçekten:</strong> Hem endpoint hem de handler katmanında her sınıfın tek bir amacı var.</li><li><strong>Kolay test yazımı:</strong> CreateProductEndpoint.HandleAsync için yalnızca ICreateProductHandler&#39;ı taklit etmeniz yeterli. Dev servis arayüzleri yok.</li><li><strong>Takım çalışmasına uygunluk:</strong> İki kişi aynı anda farklı feature’larda çalışabilir, Git çakışması yaşanmaz.</li><li><strong>Kolay bulunabilirlik:</strong> “Ürün oluşturma nerede?” → Features/Products/CreateProduct/. Bitti.</li><li><strong>Bağımsız gelişim:</strong> Bir feature’ı değiştirmek, silmek veya taşımak diğerlerini etkilemiyor.</li></ul><p><strong>Sonuç olarak </strong>sevgili dostlarım, yolculuğumuz şöyle gelişti:</p><ol><li>Büyük Controller’lar sorun çıkardı → Extension method’larla böldük</li><li>Extension method’lar aynı şişmanlığı taşıdı → Her endpoint’i ayrı sınıfa taşıdık</li><li>Servis katmanı da şişmanladı → Her özellik için küçük, odaklı handler’lar yazdık</li><li>Tüm bunları bir araya getiren yapıya <strong>REPR Pattern</strong> adını verdik</li><li>Projenin github linki burada: <a href="https://github.com/turkayurkmez/REPRDemo">turkayurkmez/REPRDemo</a></li></ol><p>Bir sonraki yazımızda görüşene dek kendinize çok iyi bakın dostlar!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5fb4892bbd16" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Where Did the Joy of Coding Go?]]></title>
            <link>https://medium.com/@turkayurkmez/where-did-the-joy-of-coding-go-f5584249a756?source=rss-a1d2c7bef988------2</link>
            <guid isPermaLink="false">https://medium.com/p/f5584249a756</guid>
            <category><![CDATA[philosophy]]></category>
            <category><![CDATA[developer]]></category>
            <category><![CDATA[future]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[türkay ürkmez]]></dc:creator>
            <pubDate>Thu, 09 Apr 2026 09:17:53 GMT</pubDate>
            <atom:updated>2026-04-09T09:17:53.462Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZE0q2k7-U6nPhOTN4d1sMw.png" /></figure><h4>On pleasure, craft, and the transformation of a developer</h4><p>Hey folks!</p><p>As you may have noticed, AI developments have been creating quite a stir in the world of software developers lately — tension on one side, excitement on the other. Tension, because familiar methods and strategies are being disrupted. Excitement, because the very definition of limits is changing.</p><p>But before we get caught up in that tension-versus-excitement dilemma, I think we need to talk about how we even got here — to this moment where AI can write code. Let’s ask the question plainly: What is the real reason AI engineers and developers in general built these products in the first place?</p><p>If you ask those developers directly, they’ll offer you a whole list of arguments. But we’re after the root cause. So let’s broaden the question — not to a specific group or a specific product, but to all of humanity.</p><p>Why does humankind choose scientific and technological progress? The moment you ask the question that broadly, you naturally start thinking about its philosophical dimensions. And that’s both useful and important, because it gives us a wonderful opportunity to build a far more encompassing argument.</p><p>So let’s look for an answer… What is the driving force behind a scientist developing a theory, or an inventor creating a new tool? Pick any field of science, dive into any discipline of engineering. I’m confident you’ll always arrive at the same conclusion: these people do what they do because they derive profound <em>joy</em> from it.</p><p>So where does that joy come from? Aristotle — well, since we’re already in philosophical territory — makes a remarkably sharp observation here: joy is not found in reaching a goal, but in the act of moving toward it, in being fully immersed in the work itself. He calls this <em>energeia</em>. And that is precisely why great scientists are not happiest after solving a problem — they are happiest <em>while</em> solving it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZnrRbhpgtQWgGogIAV5DvA.png" /><figcaption>Aristotle’s energeia</figcaption></figure><p>Yes, humankind does what it does because it finds joy in the doing. Now, look at where that leads us: the reason AI has reached this stage today is that a group of scientists, engineers, and developers simply kept doing the work they loved. Okay, okay — I can already hear you thinking I’m being romantic about it, pushing the financial side to the background. But on the contrary, I’d argue that the motivation of those who <em>invest</em> in these developments also stems from the joy of making money 🙂.</p><p>Part of what drives this perspective of mine is, of course, my own relationship with software development. I’ve always found immense pleasure in every line of code I wrote, every application I built — and especially in <em>talking about</em> them. That pleasure only multiplied when I saw it creating value for others. It eventually became something I simply couldn’t live without. The effort spent trying to improve an algorithm, the tension of zeroing in on a solution to a problem — for me, that was almost always an enjoyable activity.</p><p>And that’s precisely why many developers who share my view of software development are experiencing a kind of deprivation anxiety — because AI seems poised to take away the very joy of writing code.</p><p>To approach this situation from the right angle, we need to examine the nature of joy itself. So the first question should be: Is the <em>object</em> of joy static, or is it dynamic? How do we answer that? With a simple thought experiment, of course: What would a “developer” born a hundred years ago have found joy in — and would that joy look anything like the joy of writing code today?</p><p>Let’s get a bit more specific. Punched cards, used widely up until the 1970s, were an indispensable craft for the computer programmers of that era. When the transition from punched cards to modern coding standards happened, did those programmers also experience deprivation anxiety? Did they look at the developers of the late twentieth century and think of them as <em>“poor souls robbed of the joy of punching cards”</em>?</p><p>From that vantage point, it becomes clear that the object of joy is in a state of constant change. It’s entirely natural that a form of action that doesn’t yet exist in the world today might well appear on our joy radar in the future. Alright — we’ve established that joy is dynamic, its object perpetually shifting. Now let’s turn the lens back toward AI. What should the developer’s new joy look like?</p><p>Before we get to that answer, it’s time to widen the frame a little. Punching cards, or writing planned code through a sophisticated IDE following the right paradigm — these are <em>craft</em> for a developer. So is building and deploying the application. All of these have standard rules, they need to be completed within a certain timeframe, and most importantly, their function ends once they’re done. The value of these activities is determined by the output they produce. According to Aristotle, this kind of activity falls under the concept of <em>Kinesis</em>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RefdXXpHphoT87l0MMBrlQ.png" /><figcaption>Writing code is the ‘craft’ of software development.</figcaption></figure><p>From inside a developer’s mind, the moment joy is most meaningful and most potent is when the solution is being thought through — when the paradigm is being chosen, when the architecture, in the broadest sense, is being conceived. These are the <em>flow</em> moments we earlier called <em>energeia</em>. That’s exactly why a developer draws meaningful joy from the process of building the outcome of the application they’re working on. Here’s a more concrete example: an architect finds joy in the moment of designing a home on paper — calculating how light will enter, working out sound and thermal insulation. The <em>Kinesis</em> belongs to the worker who brings that design to life.</p><p>But the peak of joy sits a little higher still. Let’s try to get a closer look at that summit. We’re moving past solving a problem and into questioning <em>why the problem exists in the first place</em> — a form of thinking whose ultimate aim is not the problem itself. Let’s name it clearly: we now have the opportunity to think about the nature of thought itself. Back to the language of software development: by asking <em>“What really is this domain?”</em>, we begin to question the very existence of software. And here, once again, we arrive at what Aristotle called <em>Theoria</em>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YF2UEm7GhHJOzX9McLXo2g.png" /></figure><p>So friends, in order to access this ideal flow of thinking, handing over routine, creativity-free processes to AI tools should feel not like a loss — but like an <em>opportunity</em>. Because doing so seems to give us the capacity and the power to think more, to build more, to develop better solutions, and especially to push past the boundaries we’ve grown so accustomed to.</p><p>The developer is evolving into a new form — a philosophical thinker for a new world. The joy of problem-solving is preparing to go on a much grander journey than the mere comprehension of the problem itself. It’s opening the door to seeing unspoken problems in entirely new domains.</p><p>But this brings us to another question: If the future holds even more AI tools across fields like software development, how do we educate the people who will build tomorrow’s world? Well, friends — that’s a topic for another post.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f5584249a756" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Kod Yazmanın Hazzı Nereye Gitti?]]></title>
            <link>https://medium.com/@turkayurkmez/kod-yazman%C4%B1n-hazz%C4%B1-nereye-gitti-3f910ca19220?source=rss-a1d2c7bef988------2</link>
            <guid isPermaLink="false">https://medium.com/p/3f910ca19220</guid>
            <category><![CDATA[philosophy]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[developer-life]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[future-of-work]]></category>
            <dc:creator><![CDATA[türkay ürkmez]]></dc:creator>
            <pubDate>Tue, 07 Apr 2026 09:31:24 GMT</pubDate>
            <atom:updated>2026-04-07T09:31:24.748Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Tension vs Optimism…" src="https://cdn-images-1.medium.com/max/1024/1*ZE0q2k7-U6nPhOTN4d1sMw.png" /></figure><h4>Haz, işçilik ve bir yazılımcının dönüşümü üzerine</h4><p>Merhaba dostlar! Malumunuz; son zamanlarda giderek artan bir şekilde, YZ tarafındaki gelişmeler, yazılım geliştiricilerin dünyasında bir yanda gerilim diğer yanda heyecan yaratıyor. Gerilim yaratıyor çünkü, alışılagelmiş yöntemler ve stratejiler değişime uğruyor. Heyecan veriyor çünkü sınırların tanımı değişiyor.</p><p>Ancak gerilim veya heyecan ikileminden önce bu noktaya, yani YZ’nin kod yazabildiği bu evreye nasıl geldik önce bunu tartışmalıyız kanaatimce. Yani net olarak şunu soralım: Yapay Zeka Mühendislerinin ve genel olarak geliştiricilerinin bu ürünleri geliştirmelerinin asıl sebebi nedir?</p><p>Bu soruyu doğrudan o geliştiricilere sorarsanız eğer size bir sürü argüman sunabilirler. Ancak biz asıl nedeni arıyoruz. Bu sebeple soruyu belirli bir zümreye ve belirli bir ürün için değil de tüm insanlığı kapsayacak biçimde soralım dilerseniz.</p><p>İnsan evladı, neden bilimsel ve teknolojik ilerlemeyi tercih eder? Soruyu bu kadar genel sorduğunuzda elbette artık işin felsefi boyutunu düşünmeye başlarsınız. Bu faydalı ve önemlidir çünkü çok daha kapsayıcı bir argüman inşa etmek için bize harika bir fırsat verir.</p><p>O zaman yanıt arayalım… Bir bilim insanının bir teoriyi geliştirmesinin ardındaki dinamik, ya da bir mucidin o aleti icat etmesindeki motivasyon nedir tam olarak? İstediğiniz bilim dalına odaklanın, dilediğiniz mühendislik alanına dalın. Hep aynı sonuca ulaşırsınız buna eminim. Bu insanlar, yaptıkları işten büyük bir “haz” aldıkları için yaparlar.</p><p>Peki bu haz nereden geliyor? Aristoteles (eh madem felsefeden bahsediyoruz) burada çok keskin bir gözlem yapıyor: Haz, bir hedefe ulaşmaktan değil — o hedefe doğru ilerlerken, tam anlamıyla o işin içindeyken yaşanıyor. Buna energeia diyor. Ve işte bu yüzden büyük bilim insanları, problemi çözdükten sonra değil — çözerken mutludur.”</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZnrRbhpgtQWgGogIAV5DvA.png" /><figcaption>Aristoteles’in energeia’sı</figcaption></figure><p>Evet insan evladı, yapabilmekten haz aldığı için yapar. Şimdi şu sonuca bir bakar mısınız? Yapay zekanın bugün bu aşamaya geliş sebebi bir grup bilim insanı, mühendis ve geliştiricinin temel olarak haz aldığı işi yapmaya devam etmesi. Tamam tamam bu noktada olayı romantize ettiğimi, işin parasal boyutunu ikinci plana attığımı düşünebilirsiniz. Ama aksine, birilerinin bu gelişimlere para yatırmasının da “para kazanma” hazzından kaynaklandığını savunuyorum 🙂.</p><p>Elbette bu görüşümün arkasındaki sebeplerden biri, kendimi yazılım geliştirme alanında nasıl bulduğum ile ilgili. Yazdığım her koddan, geliştirdiğim her uygulamadan özellikle de bunları anlatmaktan her zaman büyük bir keyif aldım. Üstelik bu keyif, başkalarının da faydasına sonuçlar doğurduğu için katlanarak büyüdü. Eninde sonunda benim için vazgeçilmez bir hale geldi. Bir algoritmayı geliştirmeye çalışırken harcanan efor, bir problemi çözmeye odaklanıldığında yaşanılan gerilim, benim için çoğu zaman keyifli bir aktivite oldu.</p><p>İşte tam da bu noktada, yazılım geliştirme dünyasına benim gibi bakan birçok geliştirici bir tür “yoksunluk kaygısı” yaşıyor; çünkü yapay zeka, kod yazmanın keyfini ellerinden alacak gibi görünüyor.</p><p>Bu duruma doğru bir açıdan yaklaşabilmek için hazzın doğasını da ele almak zorundayız. Bu nedenle de ilk sorumuz şu olmalı: Hazzın nesnesi durağan mıdır yoksa dinamik mi? Peki buna nasıl yanıt vereceğiz? Elbette basit bir düşünce deneyiyle: Bundan yüz yıl önce dünyaya gelen bir “yazılımcı” hangi işi keyif alarak yapardı ve bu keyif, kod yazma ile aynı olur muydu?</p><p>Dilerseniz bu noktada biraz daha spesifik bir örnek verelim. 1970’lere kadar kullanılan delikli kartlar, o dönemin bilgisayar programcıları için olmazsa olmaz bir işçilikti. Acaba, delikli kartlardan bugünkü kodlama standartlarına geçildiğinde bu programcılar da “yoksunluk kaygısı” yaşamışlar mıdır? Başka bir değişle yirminci yüzyılın sonlarındaki yazılımcıyı “kart delmenin hazzından mahrum kalmış zavallılar” olarak görmüşler midir?</p><p>Buradan bakınca, hazzın objesinin sürekli değişen bir yapıda olduğu açıkça anlaşılıyor. Bugün dünyada var olmayan fakat gelecekte hayatımızda var olacak bir eylem biçimi pek doğaldır ki haz radarımıza yakalanabilir. Tamam. Hazzın dinamik ve objesi sürekli değişen bir duygu olduğunu tespit ettik. Şimdi çerçevemizi tekrar yapay zekalara yönlendirelim. Yazılım geliştiricinin yeni hazzı artık ne olmalıdır?</p><p>Bu sorunun yanıtına geçmeden önce çerçeveyi genişletmenin tam zamanı… Delikli kart basmak ya da gelişmiş bir IDE aracılığıyla ve doğru bir paradigmayla planlanan kodu yazmak, yazılımcı için ‘işçilik’ tir. Söz konusu uygulamayı build edip yayınlamak da öyle. Tüm bunların standart kuralları vardır ve belirli bir sürede bitmesi gerekirler. Fakat hepsinden önemlisi tamamlandığında işlevleri sona eren işlerdir. Bu işlerin değeri, üretilen çıktıya göre belirlenir. İşte bu tanıma uyan işler Aristoteles’e göre Kinesis olarak tanımlanır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*RefdXXpHphoT87l0MMBrlQ.png" /><figcaption>Kod yazmak, yazılımın “işçiliği”dir.</figcaption></figure><p>Bir yazılımcının beyninden baktığınızda, hazzın en anlamlı ve tesiri yüksek olduğu an, geliştirilen çözümün ve seçilen paradigmanın ve en genel ifadesiyle mimarinin düşünüldüğü anlar oluyor. Yani daha önce energeia olarak adlandırdığımız akış (flow) anları. Yazılımcı, üzerinde çalıştığı uygulamanın sonucunu inşa etme sürecinden tam da bu yüzden anlamlı bir haz elde ediyor. Daha spesifik bir örnek vereyim: bir mimar, bir konutu kağıt üzerinde tasarladığı (ışığı nasıl aldığı, ses ve ısı yalıtımını hesapladığı) andan haz alıyor. Kinesis ise bu tasarımı eyleme geçiren işçinin payına düşüyor.</p><p>Fakat hazzın doruk noktası biraz daha yukarılarda. Gelin o zirveye biraz daha yakından bakmaya çalışalım. Söz konusu bir problemin çözümünden çok, o problemin “neden var olduğunu” sorguladığımız bir noktaya geçiyoruz. Başka bir değişle nihai hedefi problem olmayan bir düşünce eylemine geçmiş oluyoruz. Adını net koyalım düşünce varlığının kendisini düşünmemiz için bir fırsatımız var artık. Yine yazılım geliştirme deyimine başvuralım. “Bu domain gerçekte ne?” diye sorarak, yazılım varlığını sorgulamaya başlıyoruz. Yani, yine Aristoteles’in Theoria dediği kavramı yaşıyoruz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YF2UEm7GhHJOzX9McLXo2g.png" /></figure><p>O halde dostlarım, bu ideal düşünce akışına erişebilmek için yaratıcı düşünceden uzak rutin süreçleri YZ araçlarına bırakmak, endişe değil heyecan verici olmalı. Çünkü bunu yapabilmek bize daha fazla düşünme, inşa etme, çözüm geliştirme ve özellikle şimdiye kadar alıştığımız belirlenmiş sınırları aşma imkanı ve gücü verecek gibi duruyor.</p><p>Artık yazılımcı, yeni dünyanın yeni bir felsefi-düşünür formuna evriliyor. Yani problem çözme hazzı, o problemin kavranışından çok daha büyük yolculuk yapmaya hazırlanıyor. Daha farklı alanlarda hiç konuşulmayan sorunları görme fırsatı veriyor.</p><p>Fakat bu, bize başka bir soru getiriyor: Eğer gelecekte, yazılım geliştirme gibi alanlarda daha fazla YZ araçları olacaksa, yarının dünyasını inşa edecek olan insanları nasıl eğiteceğiz? İşte o başka bir yazının konusu dostlar.</p><p>Görüşmek Üzere!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3f910ca19220" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ASP.NET Core Middleware: Bir Custom Middleware senaryosu]]></title>
            <link>https://medium.com/@turkayurkmez/asp-net-core-middleware-web-geli%C5%9Ftirme-projelerinde-kritik-ara-katmanlar%C4%B1n-rol%C3%BC-b40df6769cf8?source=rss-a1d2c7bef988------2</link>
            <guid isPermaLink="false">https://medium.com/p/b40df6769cf8</guid>
            <category><![CDATA[web-api-development]]></category>
            <category><![CDATA[aspnetcore]]></category>
            <category><![CDATA[dotnet]]></category>
            <category><![CDATA[c-sharp-programming]]></category>
            <category><![CDATA[middleware]]></category>
            <dc:creator><![CDATA[türkay ürkmez]]></dc:creator>
            <pubDate>Thu, 10 Aug 2023 15:17:45 GMT</pubDate>
            <atom:updated>2023-08-11T10:40:52.208Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Pipeline işte…." src="https://cdn-images-1.medium.com/max/1024/0*49PdQuCrtwxjqJWM" /><figcaption>Photo by <a href="https://unsplash.com/@xoforoct?utm_source=medium&amp;utm_medium=referral">EJ Strat</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Merhaba dostlar!</p><p>Uzun süre oldu görüşmeyeli. Bir Word belgesi açıp da klavyemin tuşlarına basmak suretiyle bir şeyler yazmayalı epey zaman geçti.</p><p>İnsan bu kadar uzun bir süre uzak kalınca bazı şeylerden, nasıl geri döneceğini pek bilemiyor malumunuz. Ancak bir kere özlem duyduğunuzu fark ettiğiniz anda ne yapsam ne etsem de dönsem diye planlar yaparken buluyorsunuz kendinizi.</p><p>Nitekim ben de bir süre düşündükten sonra, ASP.NET tarafında uzun bir süredir hayatımızda var olan middleware konusunda yazmaya karar verdim. Tabii ki bu kararı vermeden önce, bu satırları okuyan birçok kişinin zihninden geçebileceği gibi “yahu uzun zamandır middleware var zaten. Bilmeyen kişi sayısı azdır. Daha farklı bir konu ile mi dönseydim acaba” diye kendime yüklendim (kendi linçimi kendim yaptım yani 😊). Ancak bir süre önce gerçekten bir problemi çözmek için kullanmış olmanın verdiği motivasyonu da argümanlarıma dahil ederek bu kararı almış bulundum.</p><p>Tamam. Girizgahı hallettiğimize göre, başlıyoruz.</p><p>Bu yazıda geliştirilen örnek projeyi <a href="https://github.com/turkayurkmez/aspnetcore-CustomMiddlewares">github’dan</a> inceleyebilirsiniz.</p><h3>Middleware neden var ki?</h3><p>Efenim, ASP.NET Core’un alamet-i farikalarından biri olan Middleware kavramı neden var (bu soru ve benzerlerine cevap veren bir komplo teorim var ama o başka bir konu)? Yani middleware tam olarak nasıl bir ihtiyaçtan doğdu, gelin bunun üzerine biraz düşünelim.</p><p>Dostlar; bir Web uygulaması, http isteği ile başlar değil mi? Yani, istemci bir biçimde web uygulamasına http isteği gönderir sonra bu istek sunucu tarafından işlenir ardından da http yanıtı oluşturulur ve bu yanıt istemciye gönderilir. O zaman sunucudaki işlemin ilk adımı http isteğinin yakalanması, son adımı ise http yanıtı oluşturmasıdır. Daha teknik konuşmak gerekirse ASP.NET Core MVC Framework’ü ile geliştirilen bir uygulamada, http yanıtını Controller içerisindeki Action metodu üretecek. Peki, tamam ama bu Action’a gelene kadar, tüm http isteklerinde olması gereken bazı denetimleri, kontrolleri nereye yazacaksınız? Ya da Action yanıtı ürettikten sonra, bu yanıta müdahale etmek isterseniz, bu ihtiyacınızı nasıl karşılayacaksınız?</p><p>İşte bu noktada bir analoji lazım bize. Sıcak havalarda tercih ettiğim bir içecek olan maden suyunun üretim hattını ele alalım.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/864/1*0u8opmZkgIXpaxJf_CconA.jpeg" /></figure><p>Elde etmek istediğimiz şey altılı olarak paketlenmiş maden suları (tercihim Beypazarı 😊). Bu bizim response’umuz yani. Peki bu hedefe ulaşana dek hangi adımların atılması icap ediyor a dostlar?</p><p>1. Şişelerin üzerine etiket basılma işlemi</p><p>2. Şişelerin maden suyu ile doldurulması işlemi</p><p>3. Kapaklarının kapanması işlemi</p><p>4. Altılı olarak gruplanması işlemi</p><p>5. Altılı grubun paketlenmesi işlemi</p><p>İşte burada belirttiğimiz her bir işlem bir middleware’dir dostlar. Peki bazı işlemlerin belirli bir sırayı takip etmesi gerektiğini fark ettiniz mi? En basitinden, şişenizi doldurma işlemi (2) kapaklarını kapatma işleminden (3) sonra gelemez. İşte bu sıraya da pipeline (işlem hattı) diyoruz.</p><p>Maden suyu örneğimizde şunu da görmek mümkün; her middleware, işini yaptıktan sonra şişeyi sonraki middleware’e gönderiyor. Elbette bu bir zorunluluk değil fakat normal bir işleyişte pipeline, ‘arka arkaya gelen’ middleware’lerden oluşuyor.</p><p>Bu durumda bir ASP.NET Core Web uygulamasına gelen istek sırasıyla şu middleware’lerden geçmesi gerekiyor; Exception Handler → HSTS → HttpsRedirection → Routing → Authentication → Authorization ve son olarak endpoint…</p><p>İşte bu girizgahtan sonra şimdi şu soruyu sorabiliriz:</p><h3>Ben neden middleware yazayım?</h3><p>Eğer bir middleware; uygulamaya gelen tüm http istekleri veya oluşan http yanıtları üzerinde denetim veya manipülasyon yapabilen bir mekanizma ise, o zaman geliştirdiğimiz uygulamaya özel bazı senaryolarda kendi middleware’imizi yazabiliriz. Eh bu yazının amacı da tam olarak buydu zaten o zaman gelsin bakalım senaryo:</p><p>ASP.NET Core ile geliştirilmiş bir Web API ’miz var. Bu API’de yer alan birçok endpoint, kullanıcılardan gelen yorumları işliyor ve veritabanına yazmak gibi gerekli işlemleri yapıyor. Bizim de bu projedeki görevimiz, kullanıcı yorumlarında küfür gibi istenmeyen kelimeler varsa; istemciye yanıt olarak 400 (Bad Request) döndürmek.</p><p>Hadi kolları sıvayalım o zaman.</p><h3>Adım 1: Middleware sınıfları</h3><p>İlk olarak şunu soralım dostlar; bu iş için kaç adet Middleware’a ihtiyacımız var? Ya da başka bir deyişle tüm bu işlemleri tek bir Middleware ile çözebilir miyim? Bu sorunun cevabının hayır olduğunu söyleyelim. İlkesel olarak, SRP (Single Responsibility Principle)’ye uygun hareket etmeliyiz çünkü. O zaman burada yapılacak işi parçalarına ayırmamız gerekiyor. Bunu sağlıklı yapabilmek için de görevi temel olarak yazalım bakalım. “Gelen istek, POST ya da PUT ise ve JSON verisi içeriyor ise bu veriyi ayır. Ardından bu JSON içeriğinde istenmeyen kelimeleri ara; eğer bu kelimeler varsa geriye http 400 döndür”. İki farklı cümle ile görevimi tanımladım. İlk cümle, http request’in üzerinde koşullu bir denetim yapılması gerektiğini söylüyor. İkincisi ise yine bazı koşulları kontrol ederek uygulamanın yanıtına (response) müdahale ediyor. Yani daha da yalın bir biçimde ifade edersek; biri request ile diğeri ise response ile ilgileniyor.</p><p>E o zaman iki tane Middleware’im olmalı. İlki, request’i denetlemeli, JSON’u ayırmalı ve diğer işlemler için bir sonraki Middleware’a göndermeliyim. Bu sonraki ise koşulları denetleyip response’a müdahale etmeli.</p><h3>Adım 2: İlk Middleware’imiz Geliyor (JsonBodyMiddleware)</h3><p>Efenim bir middleware yazmanın birden fazla yolu var elbette ama en temizi bence class yazmak. Haliyle projeme, <strong><em>JsonBodyMiddleware </em></strong>adında bir class ekleyerek yoluma devam ediyorum. Dostlar, bir class’ın middleware olarak kullanılması için, iki kuralımız bulunuyor. İlki, Constructor ’un RequestDelegate delegesi alması. Bu sayede middleware’ler birbirlerinin ardına gelebilecek… O zaman ilgili Constructor ’umu oluşturuyorum:</p><pre> private readonly RequestDelegate _next;<br><br> public JsonBodyMiddleware(RequestDelegate next)<br> {<br>    _next = next;<br> }</pre><p>İkinci kuralımız ise, Context nesnesini yakalayacağımız Invoke metodu. Yani middleware’in görevini icra edecek fonksiyonumuz:</p><pre>public async Task Invoke(HttpContext context)<br>{<br>    await _next(context);<br>}</pre><p>Gördüğünüz üzere, Invoke işini bitirdikten sonra; bir sonraki Middleware’ e gitmek üzere RequestDelegate nesnesini tetikleyerek yoluna devam ediyor. O zaman şimdi biz Invoke fonksiyonumuzda yapmamız gerekenlere odaklanalım:</p><p>“Gelen istek, POST ya da PUT ise ve JSON verisi içeriyor ise bu veriyi ayır” class’ın amacı bu olduğuna göre; önce koşulları denetleyen fonksiyonlarımız gelsin. İlk olarak isteğin POST veya PUT metodu olması durumunda bu işlem yapılacağına göre, daha temiz bir kod yazma amacıyla bu metotları constant olarak tutalım sistemde (Ben bunun için nested class tercih ettim).</p><pre>class HttpMethods<br>{<br>  public const string POST = &quot;POST&quot;;<br>  public const string PUT = &quot;PUT&quot;;<br>}</pre><p>Şimdi artık denetim fonksiyonlarını yazabiliriz.</p><pre>private bool isPostRequest(HttpContext context)<br>{<br>    return context.Request.Method == HttpMethods.POST;<br>}<br>private bool isPutRequest(HttpContext context)<br>{<br>    return context.Request.Method == HttpMethods.PUT;<br>}<br>private bool isJsonRequest(HttpContext context)<br>{<br>    return context.Request.ContentType.StartsWith(&quot;application/json&quot;);<br>}</pre><p>Koşulumuz bu üç fonksiyonun birleşiminden oluştuğuna göre, aşağıdaki fonksiyonu da ekleyebiliriz:</p><pre>private bool isAvailableForFilter(HttpContext context)<br>{<br>   return (isPostRequest(context) || isPutRequest(context))  <br>          &amp;&amp; isJsonRequest(context);<br>}</pre><p>Bu noktaya kadar koşul denetleme işlemini yaptık. Şimdi ise JSON verisini izole etmek var. Yani middleware’imizin ana görevi. Fakat bu noktada anlamamız gereken çok kritik bir nokta var. HttpRequest nesnesinin Body’si üzerinde okuma işlemi yaptığınızda, Stream nesnesi üzerindeki okuma pozisyonunu, o streamin son byte değeri olarak değiştirirsiniz. Peki bu ne demek? Doğrudan http talebinde gelen JSON içeriğini bir daha okunamaz hale getirmiş olursunuz. Yani bu http request, Action ’a ulaştığında, JSON verisinin, parametreye dönüştürülmemesine sebep olur. Bu da bize hata olarak döner elbette. Peki bunu nasıl önleyeceğiz? Bunu birazdan ele alacağız. Şimdi önce gereksindiğimiz JSON verisini izole edecek fonksiyonumuzu yazalım:</p><pre>private async Task&lt;string&gt; getJsonRequestBody(HttpContext context)<br>{<br>  using var reader = new StreamReader(context.Request.Body);<br>  return await reader.ReadToEndAsync();<br>}</pre><p>Evet dostlar işte buradaki ReadToEndAsync() fonksiyonu, Stream nesnesinin (context.Request.Body) o anki okuma pozisyonunu değiştirdi. Bu pozisyon değişikliğini sıfırlamam gerek. Bunu yapmamın en iyi yolu da izole edilen JSON verisini yeniden bir stream aracılığıyla HttpRequest’in gövdesine yerleştirmek olmalı. Neyse ben susayım da fonksiyonum konuşsun:</p><pre>private void replaceRequestBodyWithJsonStream(HttpContext context, string requestBody)<br>{<br>  var content = Encoding.UTF8.GetBytes(requestBody);<br>  var requestBodyStream = new MemoryStream();<br>  requestBodyStream.Write(content, 0, content.Length);<br>  context.Request.Body = requestBodyStream;<br>  context.Request.Body.Seek(0, SeekOrigin.Begin);<br>}</pre><p>Nihayetinde, hem json verisini HttpRequest içerisinden izole ettim hem de bu müdahaleyi tekrar sıfırlamış oldum. Peki izole ettiğimiz bu JSON verisini sonraki middleware’a nasıl göndereceğim? Bir middleware, HttpContext’i alıp bir sonrakine aktarabildiğine göre, bu nesne içerisinde ihtiyacımızı karşılayacak bir özellik vardır belki 😊. Evet elbette var: Items isimli bir Dictionary. O zaman gelsin bu Dictionary ’e izole ettiğimiz JSON verisini kaydeden fonksiyonum:</p><pre>private void saveJsonToContextItem(HttpContext context, string jsonRequestBody)<br>{<br>   context.Items[&quot;jsonBody&quot;] = jsonRequestBody;<br>}</pre><p>Tüm fonksiyonlarımızı halletmiş durumdayız. O halde bu middleware’in görevi icra edecek olan Invoke fonksiyonunu tamamlama vakti. İşte geliyor:</p><pre>public async Task Invoke(HttpContext context)<br>{<br>  if (isAvailableForFilter(context))<br>  {<br>    var jsonRequestBody = await getJsonRequestBody(context);<br>    if (!string.IsNullOrEmpty(jsonRequestBody))<br>    {<br>      replaceRequestBodyWithJsonStream(context, jsonRequestBody);<br>      saveJsonToContextItem(context, jsonRequestBody);<br>    }<br>  }<br>    await _next(context);<br> }<br></pre><h3>Adım 3: Bir sonraki Middleware Küfürsüz bir dünya için geliyor</h3><p>Görevi HttpRequest içindeki JSON verisini izole etmek olan middleware tamamlandı. Şimdi sıra HttpResponse’a müdahale edecek olan Middleware’ de. Bu class’ımızın adı da BadWordsHandlerMiddleware olsun.</p><p>O zaman sınıfımız şöyle olacak:</p><pre>public class BadWordsHandlerMiddleware<br>{<br>  private readonly RequestDelegate _next;<br>  public BadWordsHandlerMiddleware(RequestDelegate next)<br>  {<br>    _next = next;<br>  }<br>  public async Task Invoke(HttpContext context)<br>  {<br>     await _next(context);<br>  }<br>}</pre><p>Bu middleware’in görevini şu cümle ile tanımlamıştık: “JSON içeriğinde istenmeyen kelimeleri ara; eğer bu kelimeler varsa geriye http 400 döndür”. Peki JSON içeriği nerede? Aha! Tabii ki context’in Items isimli özelliğinde! O zaman kodlarım gelsin:</p><pre>public async Task Invoke(HttpContext context)<br>{<br>  if (context.Items.TryGetValue(&quot;jsonBody&quot;, out object? jsonBody))<br>  {<br>    var badwords = new List&lt;string&gt; { &quot;pis&quot;, &quot;kaka&quot;, &quot;kötü&quot;, &quot;deli&quot; };<br>    var jsonBodyString = (string?)jsonBody;<br>    if (badwords.Any(jsonBodyString.Contains))<br>    {<br>      await responseBadRequest(context);<br>      return;<br>    }<br>  }<br>  await _next(context);<br>}<br>private static async Task responseBadRequest(HttpContext context)<br>{<br>  context.Response.StatusCode = 400;<br>  context.Response.ContentType = &quot;application/json&quot;;<br>  await context.Response.WriteAsJsonAsync(new { message = &quot;Bu gönderide hoş olmayan kelimeler var!&quot; });<br>}</pre><h3>Adım 4: Extension method (Tabii ki)</h3><p>İşte budur dostlar. Artık, küfür gibi istenmeyen sözcükleri yakalayan ve istemciye hata döndüren iki middleware’iniz var. Şimdi tek yapmanız gereken; bu Middleware sınıflarını uygulamamızın pipeline’ına eklemek. Bunu yapmanın da en temiz yolu da bir extension metot yazmak elbette… İşte geliyor:</p><pre>public static class MiddlewareExtensions<br>{<br>  public static IApplicationBuilder UseBadwordHandler(this IApplicationBuilder app)<br>  {<br>    return app.UseMiddleware&lt;JsonBodyMiddleware&gt;()<br>              .UseMiddleware&lt;BadWordsHandlerMiddleware&gt;();<br>  }<br>}</pre><p>İşte dostlar! Extension metodumuz da hazır olduğuna göre, direkt Program.cs üzerinden middleware’larımızı aşağıdaki gibi ekleyebiiiriz:</p><pre>if (app.Environment.IsDevelopment())<br>{<br>  app.UseSwagger();<br>  app.UseSwaggerUI();<br>}<br>  //Dikkat:<br>  app.UseBadwordHandler();<br>  app.UseHttpsRedirection();</pre><h3>Sonuç</h3><p>Efendim; artık görevimizi test etme vakti. Bunun için basit bir model yazarak başlayalım önce.</p><pre>public class CommentDetail<br>{<br>    public string? Comment { get; set; }<br>}</pre><p>Elbette bir de yorumu alacağımız bir EndPoint olmalı. Ben aşağıdaki endpoint’i ouluşturdum:</p><pre>[HttpPost]<br>public IActionResult Comment(CommentDetail? commentDetail)<br>{<br>    _logger.LogInformation(&quot;Comment accepted&quot;);<br>    return Ok(commentDetail);<br>}</pre><p>Ve işte swagger üzerindeki sonuç:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9Z34YHVNAoA9Gf3ULf9k9Q.png" /></figure><h4>Hocam projeyi alabilir miyiz?</h4><p>Ah tabii alabilirsiniz efenim: <a href="https://github.com/turkayurkmez/aspnetcore-CustomMiddlewares">Buradan </a>buyrun</p><h3>Ne düşünüyorsunuz?</h3><p>Sevgili dostlar; bu yazıdaki amacım gerçek bir uygulamada, bir middleware’in nasıl kullanılabileceği üzerine senaryo geliştirmekti. Elbette bunu yaparken, middleware konseptinin temelleri hakkında da konuşmuş olmayı da hedefliyordum. Nihayetinde eğer buraya dek yazımı okuduysanız, bu sonuca ulaşıp ulaşmadığımı yorumlarda bana geri bildirim olarak verebilirseniz çok mutlu olacağımı bilmenizi isterim.</p><p>Görüşmek üzere efenim.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b40df6769cf8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Mini Öykü: Cahit ve Asal]]></title>
            <link>https://medium.com/t%C3%BCrkiye/mini-%C3%B6yk%C3%BC-cahit-ve-asal-4cbd5904d534?source=rss-a1d2c7bef988------2</link>
            <guid isPermaLink="false">https://medium.com/p/4cbd5904d534</guid>
            <category><![CDATA[kurgu]]></category>
            <category><![CDATA[deneme]]></category>
            <category><![CDATA[matematik]]></category>
            <category><![CDATA[türkçe]]></category>
            <category><![CDATA[öykü]]></category>
            <dc:creator><![CDATA[türkay ürkmez]]></dc:creator>
            <pubDate>Wed, 19 Aug 2020 12:11:33 GMT</pubDate>
            <atom:updated>2020-10-08T18:16:35.670Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*5Pe3WUiGb503qOuB" /></figure><p>Kitabı masasına bırakırken iyice düşüncelere dalmıştı. Saat altıya geliyordu. Bugün de doğru dürüst alışveriş yapan bir müşteri girmemişti dükkana.</p><p>Aslında son birkaç gündür böyle olması, ona düşünme fırsatı veriyordu. Bir şeyler okuyor, notlar alıyor ve sürekli sorular soruyordu.</p><figure><a href="https://bit.ly/instagram-MediumTurkceYayin"><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xQsrG_42U_gGqidBC3szeA.png" /></a></figure><p>Doğru işi mi yapıyordu? Gerçekten de hayali bir kırtasiye işletmek miydi? Kısılıp kalmıştı işte. Mecburiyetler onu bu işe yönlendirmişti.</p><p>İşte bu ruh halindeyken, dükkanın kapısı açıldı. İçeriye on yaşlarında esmer bir kız girdi. Yüzünde zeki ve sevimli bir ifadeyle Cahit’in bulunduğu masaya doğru yaklaştı.</p><p>“Merhaba” dedi. “Matematik kitabı var mı?”</p><p>“Elbette var” dedi Cahit hafiften arkasına doğru bakarak. “Kaçıncı sınıf olacaktı?”</p><p>“Hayır şey… Ders kitabı aramıyorum ben. O matematik işlemlerinin ya da sayıların nasıl ortaya çıktığını anlatan bir kitap istiyorum.”</p><p>Cahit sol eliyle başını kaşıyarak, kafasında rafları taradı. Ders kitapları dışında matematik kitabı var mıydı elinde hiç? Zaman kazanmak için kıza doğru eğildi ve sordu “Sanırım ders kitapların ve öğretmenin bu sorularını cevaplayamıyorlar ha?”</p><p>“Onlar matematiği sadece problem çözmek içinmiş gibi anlatıyorlar. Ama ben daha heyecanlı ve gizemli bir şey hissediyorum. Bu yüzden de matematiğin ne olduğunu anlamak istiyorum.”</p><p>“Aslına bakarsan, bu soru oldukça anlamlı ver zor bir soru. Aklıma gelen bir kitap yok. Ama bir şeyi çok merak ediyorum. Bu konuyu neden bu kadar merak ediyorsun?”</p><p>“En büyük sebebi ismim” dedi küçük kız. “Benim adım Asal! Daha ismimin anlamını öğrenirken matematikle tanışıverdim ve merakım da böyle başladı. Sonra tabii ki sayılar ve onlarla yapılan basit işlemlerle tanıştım. Toplama, çıkarma, çarpma ve bölme gibi şeyler. Çok eğlenceli şeyler. Problem çözmek de çok zevkli. Ama bazen, sanki gizemli bir şey varmış gibi hissediyorum ve merak ediyorum. Tüm bunlar nasıl ortaya çıktı?”</p><p>Cahit, can kulağıyla dinlemişti. Asal o kadar akıllıca anlatmıştı ki hislerini, ona saygı duymamak mümkün değildi.</p><p>“Anlıyorum” dedi kızın gözlerine bakarak. “Bu arada ben de matematik üzerine düşünmeyi severim. Nasıl söylesem… Sayılar arasındaki ilişkileri bulmak hoşuma gider. Hatta ben de senin gibi bir gizem olduğu hissine kapılırım.</p><p>“Sahi mi?” dedi küçük kız gözlerini büyüterek. “O zaman size hemen göstermek istediğim bir şey var.” Aniden sırt çantasını omuzundan çıkardı ve fermuarını açtı. İçinden bir defter bir de kurşun kalem çıkardı. İlk temiz sayfayı açtı ve yazmaya başladı. Yazarken de bir yandan başını hiç kaldırmadan konuşuyordu.</p><p>“Bu hafta çarpım tablosundan 9&#39;lara bakıyordum. Birden bir şey fark ettim.” O sırada kağıda 9&#39;un 1&#39;den 9&#39;a tüm çarpma işlemlerini alt alta yazmıştı.</p><p>“Eğer” dedi 9 x 1 = kısmında durarak. “Burada birler basamağını 9&#39;dan 1&#39;e doğru birer birer azaltırsam, sonrada onlar basamağını 0&#39;dan 8&#39;e birer birer arttırırsam sonuçları elde edebiliyorum. Bak!”</p><p>Önce 09 yazdı. Sonra altına geçip, “0&#39;ı bir arttırıyorum 1, 9&#39;u da bir azaltıyorum 8. 18 oldu. Devam ediyorum. 27 sonra 36. Bu çok heyecanlı! Bu çok gizemli bir şifre gibi değil mi?”</p><p>Cahit gülümsüyordu. “Evet” dedi. Kesinlikle çok heyecanlı. Sonra Asal ellerini yukarı kaldırarak “İşte!” dedi, “Bunun nasıl olduğunu çok merak ediyorum. Neden böyle bir ilişki var?”</p><p>Cahit duruşunu düzleştirdi. “Açıkçası bu konuda benim de bildiğim bazı şeyler var ve eğer istersen bunu seve seve seninle paylaşırım” dedi gülümsemesini sürdürerek. Asal da “Evet tabii ki isterim” dedi heyecanını gizlemeden.</p><p>“Öncelikle” dedi kalemi eline alıp kağıda sayıları yazarak, “9, 10&#39;a ne kadar yakın?” Asal, Cahit’in yanıt beklediğini bakışından anlayarak “bir” diye cevapladı soruyu.</p><p>“Peki” dedi. “İşte bu sebeple 9&#39;un her katı, 10&#39;un katlarından birer uzaklaşmalıdır. Yani 10&#39;dan 1 uzaksa, 20&#39;den 2 uzak olmalıdır.”</p><p>“Anlamadım” dedi Asal kaşlarını çatarak. Cahit hemen etrafına baktı. Gözleriyle bir şeyler arıyordu. Tezgahın üzerinde duran onlu silgi kutusunu aldı. Silgiler kutunun üzerindeki bölümlerde dik bir biçimde duruyordu. Sonra tezgahın altından aynı kutudan üç tane daha çıkardı.</p><p>“Bak şimdi” dedi bir kutuyu kıza doğru sürerek, “burada içinde tam on silgi olan bir kutu var. Bunlardan en son sıradakini alıyorum.” Yanına diğer silgi kutusunu koydu. “Bu kutunun da son sıradaki silgisini aldım. Şimdi eğer hiç silgi almasaydım burada toplam kaç silgi olacaktı?”</p><p>“Yirmi” dedi Asal.</p><p>“Peki iki silgi aldığıma göre”</p><p>“On sekiz”</p><p>“Eğer aynı şeyi üçüncü kutuyla da yapmış olsaydım da aynı sonuçla…”</p><p>“Otuz eksi üç silgi toplam yirmi yedi! Evet evet! Anladım! 9&#39;un her katı 10&#39;un her katından birer uzaklaşmak zorunda.” Asal’ın zıplamamak için kendini zor tutuyormuş gibi bir hali vardı.</p><p>Ancak birden durdu. “Bir dakika o zaman” dedi masadaki kutulara bakarak. İlk kutudan bir silgi aldı. “8 de 10&#39;a 2 yakın. O zaman 8&#39;in her katı da 10&#39;un her katından ikişer ikişer uzaklaşmalı. 20&#39;den 4 yani 16. 30&#39;dan 6 yani 24. Bir sayının 10&#39;a olan farkı, katlar arttıkça aynı oranda artıyor. Vay canına!” Asal, çocukların o keşif anlarından birini yaşıyordu. Sırasıyla hesaplar yapıyor, ellerini çırpıyor ve gülüyordu.</p><p>Bir süre sonra sakinleşti. “Ama” dedi, “yine de çok tuhaf. Neden bu kural sadece 10&#39;a göre neden başka bir sayıya göre değil?”</p><p>“Şey…” diye araya girdi Cahit, “Çünkü biz onluk sayı sistemini kullanıyoruz. Tıpkı bu silgi kutusu gibi sınırlıyız. Tüm sayı basamaklarını, 10&#39;un katlarına göre ayarlıyoruz. Bu nedenle kural da böyle.”</p><p>“O zaman başka sayı sistemleri de kullanabilirdik demek ki. Neden onluk sistemini seçmişiz ki?” diye sordu Asal.</p><p>“Bence bu sorunun cevabını biliyorsun aslında” diyerek doğruldu Cahit, silgi kutularını toplamaya başlarken. “Sayıları saymaya nasıl başlamıştın?”</p><p>“Ben… İlk kez parmaklarımı saymıştım” dedi ellerini öne doğru uzatarak.</p><p>“İşte” dedi Cahit, “tüm dünya da aynı sebeple onluk sistem kullanıyor. Gerçi bu her zaman böyle değildi. Geçmişte başka sistemler de denenmiş Hatta bugüne kadar ulaşanlar da var içlerinde.”</p><p>Tam bunları söylerken bir anda aklına gelmiş gibi saatine baktı. Saat altı buçuk olmuştu bile. Asal, adama baktı. “Gerçekten de çok merak ettim ama saat benim için geç oldu. Gitmem lazım. Şey… Daha sonra gelsem ve yine böyle konuşsak olur mu? Çünkü bence çok eğlenceliydi.”</p><p>Cahit samimi bir ifadeyle güldü. “Elbette. Ben de bu sohbete devam etmek isterim. Ne zaman istersen gelebilirsin” dedi. Bunun üzerine Asal da gülümseyerek arkasını döndü ve hızlı adımlarla dükkandan çıktı.</p><p>Cahit, kısa bir süre daha arkasından baktı kızın. Bir yandan da hala gülümsüyordu. Uzun bir süredir yaşamadığı zihinsel bir tatmin yaşıyordu. Mutluydu. Etrafı toparlayıp dükkanı kapattı. Birkaç mahalle ilerdeki evine doğru yürürken ıslık çaldığını fark etti. Evet. Gerçekten mutluydu.</p><p><em>Originally published at </em><a href="https://www.turkayurkmez.com/mini-oyku-cahit-ve-asal/"><em>https://www.turkayurkmez.com</em></a><em> on August 19, 2020.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4cbd5904d534" width="1" height="1" alt=""><hr><p><a href="https://medium.com/t%C3%BCrkiye/mini-%C3%B6yk%C3%BC-cahit-ve-asal-4cbd5904d534">Mini Öykü: Cahit ve Asal</a> was originally published in <a href="https://medium.com/t%C3%BCrkiye">Türkçe Yayın</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ASP.NET Core Web API ile JSON PATCH Kullanımı — Türkay Ürkmez]]></title>
            <link>https://medium.com/@turkayurkmez/asp-net-core-web-api-ile-json-patch-kullan%C4%B1m%C4%B1-t%C3%BCrkay-%C3%BCrkmez-7e937f60b58a?source=rss-a1d2c7bef988------2</link>
            <guid isPermaLink="false">https://medium.com/p/7e937f60b58a</guid>
            <category><![CDATA[net-core-3]]></category>
            <category><![CDATA[patch]]></category>
            <category><![CDATA[webapi]]></category>
            <category><![CDATA[aspnetcore]]></category>
            <category><![CDATA[web-api-development]]></category>
            <dc:creator><![CDATA[türkay ürkmez]]></dc:creator>
            <pubDate>Wed, 05 Aug 2020 19:29:43 GMT</pubDate>
            <atom:updated>2020-08-11T19:21:24.569Z</atom:updated>
            <content:encoded><![CDATA[<h3>ASP.NET Core Web API Uygulamasında HttpPatch işlemi</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*lvNZbxs_15b6xsx0" /></figure><p>Bu hayatı, istesek de istemesek de dinamik bir biçimde yaşıyoruz. Hemen hiçbir şey aynı kalmıyor. Özellikle, yaşam alanımızdaki birçok varlığı zaman içinde güncelliyor, tamamen yeniliyoruz.</p><p>Örneğin, oturma odanızdaki koltuklarınız bir süre sonra işlevsiz bir hale geldiğinde (ya da canınız sıkıldığında) onları yenileme ihtiyacı duyuyorsunuz. Ya da kim bilir belki de evinize yeni bir oda eklemeyi bile planlıyor olabilirsiniz.</p><p>Yazılım uygulamalarında kullandığımız varlıklarda da durum aynı. Elbette, onları da güncellemeye açık bir biçimde yönetebilmemiz gerekiyor. Fakat kendi hayatımızdaki bir varlığı topyekün yenilemenin masraflı olması gibi, yazılımsal bir varlığı da tamamen güncellemek maliyetli olabiliyor.</p><p>Bu maliyeti indirgemek için gerçek hayatta ne yapıyoruz? Komple bir yenileme yerine, sadece belli bir özelliği değiştiriyoruz. Örneğin eski koltuk takımını tamamen çıkarıp yerine yenisini almaktansa, sadece kumaşını değiştirme şansına sahibiz.</p><p>Peki, bir <strong>RESTFul</strong> servis mimarisinde böyle bir yapı uygulayabilir miyiz?</p><p>Normal şartlarda bir <strong>Web API</strong> uygulamasında, sunucudaki bir varlığın güncellenmesi için istemciden o varlığın tüm özelliklerini isteriz. Sonra da söz konusu güncellemeyi yapar ve istemciye “200” yanıtını döndürürüz.</p><h4>Projeye Başlıyoruz!</h4><p>Elbette bu noktada kod tarafına geçip, biraz daha elle tutulur bir örnek üzerinden yürümek daha şık olacak. Bir <strong>.NET Core 3.1 Web API </strong>projesi altında şu modelleri oluşturarak işe başlayalım.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/18ee7f8eeac9a466e2e31ad3808e0646/href">https://medium.com/media/18ee7f8eeac9a466e2e31ad3808e0646/href</a></iframe><p>Tabii yine de kodu temiz tutmak amacıyla, aşağıdaki Fake koleksiyonu tanımladım:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/be91c949cd1c76e02215a6c7e8b4d5c9/href">https://medium.com/media/be91c949cd1c76e02215a6c7e8b4d5c9/href</a></iframe><p>Elbette, bu <strong>In-Memory</strong> koleksiyon üzerinde işlem yapmak için bir de Service sınıfına ihtiyacım olacak.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/ff484c8ccf9564ff4f49b4c1bf2d0529/href">https://medium.com/media/ff484c8ccf9564ff4f49b4c1bf2d0529/href</a></iframe><p>Dediğim gibi, konuyu bağlamından uzaklaştırmamak adına servis içine insert operasyonunu eklemedim. Burada önceliğimiz sadece, güncelleme işlemine odaklanmak.</p><p>Pekala, böyle bir durumda <strong>API</strong> istemcisinin güncelleme yapmasını istiyorsak, nasıl bir metot yazacağız? Akla gelen en geleneksel metot, elbette http <strong>PUT</strong> metodu olacaktır.</p><p>O halde, <strong>TeamsController</strong> isimli <strong>API Controller</strong> sınıfımı aşağıdaki biçimde oluşturuyorum:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/b3f86ec50b8fc798bb9e28ca9f0fc6c2/href">https://medium.com/media/b3f86ec50b8fc798bb9e28ca9f0fc6c2/href</a></iframe><h4>PUT’un neyi eksik canım?</h4><p>Peki. İşte kritik bir noktadayız. Burada yer alan <strong>http PUT</strong> metodunun Team nesnesinin bir örneğini (instance) parametre olarak aldığına dikkat edelim. Bu ne demek? İstemci, bu eylemi çalıştırmak istiyorsa; Team varlığının TAMAMINI request içerisinde göndermek zorunda. Yani bu durumda, request içerisinde yer alan <strong>JSON</strong> verisi aşağıdaki gibi olmalı:</p><p><em>(url: </em><a href="https://localhost:44315/api/teams/1)"><em>https://localhost:44315/api/teams/1)</em></a></p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/722cd12a1855e9d697bb0b75450dec51/href">https://medium.com/media/722cd12a1855e9d697bb0b75450dec51/href</a></iframe><p>İyi ama, ben sadece Domagoj Vida’nın ülkesini güncellemek istiyorsam? Yani tek istediğim <em>Team varlığının Players koleksiyonu içinde yer alan ikinci nesnenin “nationality” özelliğini </em>Hırvatistan olarak değiştirmekse? Ama bunun için bütün Team varlığını oluşturup sunucuya göndermem gerekiyor!</p><p>Yani koltuğun sadece kılıfını değiştirebilecekken, tamamını yeniden sipariş vermem gibi bir şey bu!</p><p>İşte <strong>PATCH</strong> burada imdadımıza yetişiyor.</p><h4>HttpPatch operasyonu</h4><p>Şekildeki gibi bir <strong>JSON</strong> kaynağının <strong><em>belirli bir kısmını </em></strong>değiştirmek (ya da eklemek) istiyorsam, <strong>HttpPatch</strong> operasyonunu kullanıyoruz.</p><p>Dilerseniz ilk olarak, bu amaçla yazılmış bir <strong>PATCH Http request’in JSON</strong> içeriğine bakalım:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/daa007b9cac9142630dad1600de56f06/href">https://medium.com/media/daa007b9cac9142630dad1600de56f06/href</a></iframe><p>Şu kibarlığa bir bakın hele! Sadece ne iş yapacağını (“op”), nereye müdahale edeceğini, (“path”) ve veriyi (tabii ki “value”) söylememiz yeterli. Daha düşük karmaşıklık, hayat kurtarır.</p><p>Buradan anlayacağınız gibi <strong>PATCH</strong> sadece bir veriyi bir başkasıyla değiştirmek (replace) için kullanılmıyor. Başka operasyonları da var. Tamamı şöyle; “ <strong>add</strong>”, “ <strong>remove</strong>”, “ <strong>replace</strong>”, “ <strong>move</strong>”, “ <strong>copy</strong>” ve “ <strong>test</strong> “.</p><p>Peki, bu request türünü<strong> ASP.NET Core Web API</strong> içerisinde nasıl kullanacağız?</p><p>İlk olarak projemize,</p><p><strong>Microsoft.AspNetCore.Mvc.NewtonsoftJson</strong></p><p><strong>Nuget</strong> paketini eklememiz gerekiyor. Sonra da projemizin <strong>Startup</strong> sınıfında bulunan <strong>ConfigureServices </strong>metodunda, <strong>AddNewtonsoftJson() extension </strong>metodunu çağırıyoruz:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/646c50d601f1f5c9fa151703068a1341/href">https://medium.com/media/646c50d601f1f5c9fa151703068a1341/href</a></iframe><h4>DİKKAT!</h4><p>Bu metodu çağırdığınızda, projenizde kullandığınız tüm <strong>JSON</strong> içeriğinin formatını ezmiş olursunuz (normalde <strong>System.Text.Json</strong> kütüphanesi kullanılır).</p><p>Artık<strong> JSON Patch</strong> için gerekli <strong>Action</strong> metodumuzu oluşturabiliriz.</p><h4>http PATCH eylemi için Action metodu</h4><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/ead70de0942922fc3873de753603206e/href">https://medium.com/media/ead70de0942922fc3873de753603206e/href</a></iframe><p>Yukarıda gördüğünüz <strong>action</strong> metodunun olmazsa olmazlarına bakalım dilerseniz.</p><ol><li>[HttpPatch(“{id}”)] Attribute’ü ile işaretlenmiş durumda (eh bu normal tabii)</li><li>Metod, JsonPatchDocument&lt;Team&gt; nesnesi alıyor! İşte bu önemli. Yukarıda örneğini gördüğümüz bir JSON Patch request’i içerisindeki komutları yorumlayan taşıyıcı nesnemiz, JsonPatchDocument&lt;&gt; nesnesi. Tahmin edebileceğiniz gibi request ile gelen talebin hangi varlığa (bizim örneğimizde Team) uygulanması gerektiğini jenerik olarak belirtiyoruz.</li><li>patchDocument.ApplyTo(team,ModelState); metoduyla değişikliği uygulamasını söylüyoruz. Buradaki ModelState parametresi üzerinde biraz duralım. Ya PATCH içindeki komutun uygulanması sırasında bir hata oluşursa? Böyle bir durumda ASP.NET MVC’nin alametifarikalarından biri olan ModelState nesnesine hatayı yazdırmak iyi olurdu değil mi? İşte o ikinci parametre tam olarak bunu yapıyor.</li></ol><p>O zaman Postman aracılığıyla talebimizi gönderelim bakalım.</p><p>Giden Talep:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/6ef370278706ea4bfe629e47e1cf4004/href">https://medium.com/media/6ef370278706ea4bfe629e47e1cf4004/href</a></iframe><p>Ve dönen yanıt:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/34bd8f34faa6590453fbc2f67da4da55/href">https://medium.com/media/34bd8f34faa6590453fbc2f67da4da55/href</a></iframe><p>Önceden de belirttiğim gibi,<strong> JSON PATCH</strong> ile başka operasyonlar da yapılabilir. Örneğin gelin yeni bir futbolcu ekleyelim:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/014710bc1258a157176092f4a01023d4/href">https://medium.com/media/014710bc1258a157176092f4a01023d4/href</a></iframe><p>Ya da <strong>JSON</strong> kaynağı içerisinde, silme, kopyalama ve taşıma işlemleri yapabilirsiniz. Bunları size bırakıyorum.</p><p>Fakat benim en başarılı bulduğum operasyon “ <strong>test</strong>” operasyonu. Diyelim ki, <strong>JSON</strong> kaynağımızda koşullu bir değişiklik yapmak istiyoruz. Örneğin “takımın ilk oyuncusunun adı Utku Yuvakuran ise pozisyonunu stoper olarak değiştir” demek istiyoruz. İşte o zaman şöyle yazıyoruz:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/552fd2d1d390f105834243009482d7e4/href">https://medium.com/media/552fd2d1d390f105834243009482d7e4/href</a></iframe><p>Eğer kaynaktaki adreste (“players/0/name”) bulunan değer Utku Yuvakuran değilse, değiştirme işlemini yapmayacaktır, çünkü testten geçememiş olacak. Böylece, hatalı bir değişiklik yapma ihtimalinizi en aza indirmiş oluyorsunuz!</p><p>Evet sevgili dostlar! Böylece, bir yazımızın daha sonuna gelmiş olduk. Elbette konu hakkındaki yorumlarınızı bekliyorum. Tabii bu arada eğer bu içeriği beğendiyseniz beni takip listenize ekleyebilirsiniz.</p><p>Hah neredeyse unutuyordum. Projenin kaynak kodları elbette burada:</p><p><a href="https://github.com/turkayurkmez/PatchOperations/">https://github.com/turkayurkmez/PatchOperations/</a></p><p>Kendinize iyi bakın!</p><p><em>Orjinal yayın adresi: </em><a href="https://www.turkayurkmez.com/asp-net-core-web-api-ile-json-patch-kullanimi/"><em>https://www.turkayurkmez.com</em></a><em> (5 Ağustos 2020)</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7e937f60b58a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[İki Arada Bir Deredeyim, Neredeyim?]]></title>
            <link>https://medium.com/t%C3%BCrkiye/iki-arada-bir-derede-e0e08e7a5e7c?source=rss-a1d2c7bef988------2</link>
            <guid isPermaLink="false">https://medium.com/p/e0e08e7a5e7c</guid>
            <category><![CDATA[edebiyat]]></category>
            <category><![CDATA[deneme]]></category>
            <category><![CDATA[kurgu]]></category>
            <category><![CDATA[öykü]]></category>
            <category><![CDATA[türkçe]]></category>
            <dc:creator><![CDATA[türkay ürkmez]]></dc:creator>
            <pubDate>Mon, 08 Oct 2018 19:50:57 GMT</pubDate>
            <atom:updated>2018-10-10T04:19:36.356Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MhwgdARrpLtlkvJ9U2UYOA.jpeg" /></figure><blockquote><em>“Hislerim olduğuna göre ben varım evet evet. Kesinlikle ölmedim ben. Hala bilinçli bir varlığım.”</em></blockquote><p>Zihnimin ince kumlarında yüzüyor kelimelerim. Bilmediğim bir yerdeyim. Kolumda zaman ölçer yok. Tam bir bilinmezim.</p><p>Anılarım var. Hatırlıyorum. Bir çizgideyim. Neden ve sonuçları hala düşünebiliyorum. Sesleri de duyuyorum. Görüyorum da. Demek ki hala varım. Varım ama şu anı tam anlamıyla kavrayamıyorum. Yani etraftan hiçbir veri gelmiyor. Evet evet kelimenin tam manasıyla sorun bu. Hiçbir veri alamıyorum.</p><p>Dolayısıyla vücudum da dahil olmak üzere hiçbir şey göremiyorum. Ama etraf karanlık değil aksine bembeyaz. Sanki süzülüyormuş gibi bir histeyim. Hislerim olduğuna göre ben varım evet evet. Kesinlikle ölmedim ben. Hala bilinçli bir varlığım.</p><p>Evet ama vücudum nerede? Yani neden göremiyorum hiçbir parçamı? Önemli değil. Çünkü bu soruları sorabildiğime göre bilinçliyim. Bir kez daha güvendeyim.</p><p>Zamanı ve hareketi ölçebileceğim bir referans noktamın olmaması tüm dengemi alt üst ediyor. Kendi düşünce sıramdan başka hiçbir dayanağım yok. İçimden sesli bir şekilde konuşmaya devam edecek ve bu sürecin geçmesini bekleyeceğim. Kelimeler unutulana ve anlamları yitene dek böyle devam edeceğim. Mademki bu içinde bulunduğum evreni zihnim yarattı, o halde nasıl çıkılacağını da biliyor olmalı.</p><p>İlk beyin fırtınası böyle başladı. Kelimelerin soyu tükendiğinde ne olacak? Sıra müziğe gelecek büyük olasılıkla. Daha fazla müzik hatırlanacak, kelimelerin yerini ritimler alacak ve müzikle konuşmaya devam edeceğim. Elbette bir noktada o da anlamını yitirmeye başlayacak. Muhtemelen bu epey bir süre alır. Ama ne de olsa entropi ilkesi diye bir şey var. Ya da daha geleneksel olarak, “her şey olacağına varır”. İşte tam müziğin anlamı azalmaya başladığında görseller eşlik etmeli. Renkler, fotoğraflar, film kareleri, anılar, görsel olabilecek her şey.</p><p>Bir dakika bir dakika… Bu kadar zamanım var mı acaba? Şu anda fiziksel olarak varsam, suya ve yiyeceğe ihtiyacım var demektir. Sanırım insan susuz en fazla üç gün yaşayabiliyordu. Şimdi en azından elimde bir hedef var. Üç gün, yetmiş iki saatlik bir süre. Bu süre içinde kendime gelmem gerekiyor.</p><p>Mantıklı düşünelim. Hatırladığım son şey ne? Eğer fiziksel konumumu hatırlayabilirsem, bu bana buradan çıkış yolu verebilir. Tamam evet… Odaklanıyorum… En son hatırladığım şey…</p><p>İşten çıktım… Evet tamam. Yağmur yağıyordu. Yine tembelliğim tuttu ve taksiye binip Kadıköy’e gittim. Eve geçmeden önce bir bira içmek istedim. Zeuve’de biraz oyalandım. Kimseyle görüşmedim. E-Postalarıma baktım. Ne okudum peki? Hatırlayamıyorum. Tamam peki sonra oradan kalktım. Fakat kalktıktan birkaç saniye sonra gözlerim karardı. Sonrası yok.</p><p>Tamam. O zaman şu anda baygınlık geçiriyor olabilirim. Mekan kalabalıktı. Birisi mutlaka yardım edecektir. Geçen zamanı bilmiyorum. Hala orada yatıyor olabilirim. Ambulansla gidiyor da olabilirim. Aslında, hastane odasında ya da ameliyatta da olabilirim. Hiçbir fikrim yok.</p><p>Yoksa komada mıyım? Komada insanların bilinçleri var mıydı acaba? Bilmiyorum. Ama umarım deneyimlediğim şey bu değildir. Peki başka nerede olabilirim? Morgda… Bir yerlerde öldüğü sanılan bazı insanların morgda uyandığına dair bir şeyler okumuştum. Umarım böyle bir şey de değildir.</p><p>Hayır böyle bir yere varamayacağım sanırım. Baştan alalım. İşten çıktım. Üzerimde ne vardı? Ayakkabılar evet ayakkabıları hatırlıyorum. Siyah bir pantolon. Tamam. Üzerimde ise… Hatırlamıyorum. Peki… Saçlarım ne renk? Bilmiyorum… Gözlerimin önüne hiçbir şey gelmiyor. Sıfır çağrışım. Başka bir özelliğimi düşünmeliyim. Kaç yaşımdayım? Bilmiyorum. Şişman mıyım yoksa zayıf mı? Hatırlamıyorum. Kadın mıyım yoksa erkek miyim? Hiçbir fikrim yok.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*1vjT5DwaJrziMJEK" /></figure><p>Bu iyi değil. Hiç iyi değil. Hadi bir daha deneyelim. İşten çıktım. Yağmur yağıyordu. Üzerimde siyah bir pantolon ve koyu mavi bir ayakkabı vardı. Sahile indim, yoldan geçen bir taksiyi durdurdum. Kadıköy’e geldim. Zeuve’ye oturdum. Epostalarımı okudum. Kalktım. Gözüm karardı. Her şey tamam ama kimim ben! Adım ne! Ne iş yapıyorum! Bu… Bu nasıl olabilir? Şüpheleniyorum, sorguluyorum, işlemiş olduğum veriler var. Kelimeleri, müziği ve izlediğim filmleri hatırlıyorum. Ama onun dışında kendim hakkında hiçbir şey hatırlamıyorum. Bu nasıl mümkün olabilir?</p><p>Bu döngüden nasıl çıkabilirim… Daha geçmişten bir şey hatırlamalıyım belki. İşim nerede? Küçükyalı. Tamam. Ne iş yapıyorum? Bilmiyorum. İşten çıkmadan önce ne yapıyordum? Bilgisayar başında eposta atıyordum. Kime ve ne yazdığımı hatırlamıyorum.</p><p>Bilincim yerinde olmasına yerinde ama hafızam beni hayal kırıklığına uğratıyor. Geçmişteki ben hakkında da hiçbir şey yok. Hatta başka kimse hakkında da veri yok. Sanki bu anıya dek yalnızmışım gibi. Kimseyle ilişki kurmadım. Ama mekanda insanlar vardı. Bunu hatırlıyorum.</p><p>Eposta yazdım. İşten çıktım. Kadıköy’de bir bara gittim. “Onaylandı” konulu epostayı orada okudum. Onaylandı… Ne onaylandı? Başka içerik yok. Sadece konu “onaylandı” o kadar.</p><p>Bir dakika… Hafızama neden bu kadar güveniyorum ki? Tüm bunları delirmemek için uydurmuş olabilirim. Kendime çözülmesi gereken problemler yaratarak, bilincimi sürdürmeyi seçmiş olabilirim. Bu şartlar altında bu seçim çok mantıklı. Fakat diğer yandan eğer bu doğruysa, gerçekte hafızamda hiçbir şey yok demektir. Eğer hafızam sıfır ise bilinçli olmanın gerçekten bir önemi var mı?</p><p>Yine başa döndük. Bu evreni eğer zihnimde yarattıysam, ona müdahale etme şansım olmalı. Bu nedenle bu kez, zihnimi rahat bırakıyorum. Uydurma bile olsa neyin onayını aldığımı bulmam gerekiyor. İş yerindeyim. Outlook açık. Bir eposta yazmaktayım. “…talep ediyorum” ile bitiyor. Başını okumaya çalışıyorum. Bulanık bir yazı görünüyor. Sanki tek bir kelime gibi. Kelimenin sonuna doğru çengelli bir harf var. Bu ya “ğ” ya da “y” harfi olmalı. Bir şey yapmayı talep ediyorum. Kelimenin ilk harfi yuvarlak bir harf. O, Ö ya da Ç gibi. Ortada ise uzunca bir harf var; b, d, k, l ya da t. Evet evet netleşiyor. İlk harfi kesinlikle Ç. Evet kelimenin tamamı netleşti şimdi.</p><p>“Çıkmayı talep ediyorum.”</p><p>Epostada yazdığım yalnızca bu. Gönder tuşuna basıyorum. Peki, kime gönderiyorum? Kesinlikle bilmiyorum. Ama yanıtı biliyorum. Onaylandı. Çıkma talebim onaylandı.</p><p>Ne demek bu? Nereden çıkmak istiyorum? Neden çıkmak istiyorum? Çıkmak bende nasıl bir değişikliğe sebep olacak?</p><p>Çıkmak istediğim şey, daha önce girdiğim bir şey olmalı mantıken. O zaman bu bir grup olabilir. Mesela bir internet topluluğu. Ya da kayıtlı olduğum başka herhangi bir şey. Dolayısıyla şu anda içinde bulunduğum durumla tamamen alakasız bir detay olabilir bu.</p><p>Oysa benim bu durumdan bir an önce çıkmam lazım. Elle tutulur bir referans noktası bulmam lazım. Aksi halde, burada kalmam ölümüm olabilir. Tabii zaten ölmemişsem.</p><p>Bir yerden çıktım… Taksiye bindim. Bir barda bir şeyler içtikten sonra kalktım. Gözüm karardı.</p><p>Bunu düşünürken, etrafımdaki beyazlığın yerini yer yer koyu olmak üzere farklı renklere bıraktığını fark ettim. Renkler yayılıyor, mutlak beyazlık dağılıyordu. Yolun sonuna geldiğim hissine kapıldım. Sonra birden gözlerim feci bir şekilde acımaya, vücudum da üşümeye başladı. Hissediyorum! Hissediyorum. Bir yatakta yarı oturmuş vaziyette olduğumun farkındayım. Geniş bir bölmedeyim. Zihnim gittikçe berraklaşırken, tüm odayı bir anons kapladı:</p><p>“Merhaba, sanal kişilik ve simülasyon demosundan kendi isteğinizle çıkmış bulunmaktasınız. Umarız, keyifli bir üç saat geçirmişsinizdir. Şimdi biraz dinlenin. Dinlenme sırasında bir sıcak içecek ikramımızdır. İyi günler dileriz…”</p><p><em>Bu yazının orjinali, 8 Ekim 2018 tarihinde </em><a href="https://www.turkayurkmez.com/iki-arada-bir-deredeyim-neredeyim/"><em>www.turkayurkmez.com</em></a><em> adresinde yayınlanmıştır.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*EphTjkJm7YSDD7TZYBup6A.png" /></figure><p><a href="https://www.facebook.com/turkceyayinblog/"><strong>Facebook</strong></a><strong> | </strong><a href="https://twitter.com/turkceyayinblog"><strong>Twitter</strong></a><strong> | </strong><a href="https://www.instagram.com/turkceyayin/"><strong>Instagram</strong></a><strong> | </strong><a href="https://join.slack.com/t/turkceyayin/shared_invite/enQtMzMzMDU1MDMyMzI0LTEwYjBjNzhlNmQ5NzNiYTBjZjQyMDkzYmRmOTg0ZmM4NmI4OTcyMTY4YmMwMGVmMmRjYjgyMDExMzZhODQ2NDE"><strong>Slack</strong></a><strong> | </strong><a href="https://medium.com/kodcular"><strong>Kodcular</strong></a><strong> | </strong><a href="http://www.mustafagerdan.com/"><strong>Editör</strong></a><strong> | </strong><a href="http://www.wolony.com/"><strong>Sponsor</strong></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2fQUHUI0FA9h9aPtwxJ6fQ.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e0e08e7a5e7c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/t%C3%BCrkiye/iki-arada-bir-derede-e0e08e7a5e7c">İki Arada Bir Deredeyim, Neredeyim?</a> was originally published in <a href="https://medium.com/t%C3%BCrkiye">Türkçe Yayın</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Paradoks]]></title>
            <link>https://medium.com/t%C3%BCrkiye/paradoks-ebca2f85e900?source=rss-a1d2c7bef988------2</link>
            <guid isPermaLink="false">https://medium.com/p/ebca2f85e900</guid>
            <category><![CDATA[öykü]]></category>
            <category><![CDATA[türkçe]]></category>
            <category><![CDATA[edebiyat]]></category>
            <category><![CDATA[bilimkurgu]]></category>
            <category><![CDATA[deneme]]></category>
            <dc:creator><![CDATA[türkay ürkmez]]></dc:creator>
            <pubDate>Sun, 01 Jul 2018 20:03:12 GMT</pubDate>
            <atom:updated>2018-07-01T21:45:41.874Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ji7UG7sp47e68rNaZvr_9w.png" /></figure><p>Tam olarak bilmediği bir noktadaydı. Kendini tarif et deseler, ne ruh halini anlatabilirdi, ne bedenini tasvir edebilirdi ne de çevresinde gördüklerini aktarabilirdi. Tam bir bilinmezlikte, mutlak bir hiçlik noktasındaydı.</p><p>Buraya nasıl gelmişti? Geçmişte nasıl biriydi? Nelerden hoşlanıyordu ve nelerden nefret ediyordu? Belki bu soruları ona sorsanız, hatırlaması çok ama çok yavaş olurdu. Ancak neyse ki bu kişi bir öykü kahramanı ve onun geçmişini pek tabii ki anlatıcıdan -yani benden- dinleyebilirsiniz.</p><p>O, bir sinirbilim uzmanı. En büyük amacı da zihnin ne olduğunu tanımlayabilmek. Bilim dünyasının katı kurallarının belirlediği sınırlara ulaşmış, şimdi o sınırları da aşmak isteyen bir bilim insanı.</p><p>Her türlü disiplinde, uyulması gereken katı kurallar söz konusudur. Bu kuralların da biri açık diğeri gizli iki amacı vardır. İlki disiplinin kanıtlanmış tüm prensiplerini yeni gelene en ince detayıyla anlatmaktır. Gizli amaç ise, kuralların içinde sıkışacaklar ile onları aşacakları belirlemektir.</p><p>İşte o, bu psikolojik sınıra ulaşmıştı. Şimdi, var olan kuralları temel alarak o kuralların dışına çıkması gerekiyordu. Bunun için bolca bakış açısına ihtiyacı vardı. Moleküler biyoloji, genetik, kimya ve fizik ve psikoloji disiplinlerinin sınırlarına giren konularda okumalar yapıyordu. Elbette anlayışının bir sınırı vardı. Ancak, kavramları birbirleriyle ne kadar ilişkilendirebilirse o kadar iyiydi.</p><p>Kendine has bir çalışma yöntemi vardı. Ancak temelleri bin yıllık bilim tarihine dayanıyordu tabii. Araştır. Uygula ve deneyimle. Çıkarımlarda bulun. Diğer kavramlarla ilişkilendir. Tatmin edici bir sonuca ulaşana dek bu döngüyü tekrarla. İşte bazen bu döngü o kadar sık tekrarlanır ki uzmanın zihni, döngüden bir an önce çıkmaya çabalar. Bu, kuralları hiçe sayma anlamına gelse bile.</p><p>Velhasıl uzmanımız, tam da böyle bir anda, odasında tek başınaydı. Notlarını kurcalıyordu. Bir anda, defterinin boş olan bir sayfasını açtı ve yazmaya başladı.</p><p>“Bugün, birer insan olarak yapabildiğimiz ne varsa zihnimiz sayesinde yapabiliyoruz. Araçlar, sanat, makineler ve diğer insanlarla ilişkiler. Tüm bunları zihnimize ve onu oluşturan her şeye borçluyuz. Bu açıdan bakınca; insanlığın en önemli hedeflerinden birinin zihni anlamak olduğunu söyleyebiliriz. Hatta zihin, tüm evreni anlamak için bir anahtar niteliğinde bile olabilir.”</p><p>“Tamamen fizik ve kimya kanunlarının belirlediği kurallara uyan biyolojik bir canlı olan insan, nasıl zihin geliştirebilmiştir? Bu evrim süreci nasıldı? Hangi noktada zihne bağlı olan hayal gücü, problem çözme gibi yetenekler kazandı?”</p><p>“Nasıl oluyor da bir zihin, bir evren hayal ediyor ve sonra bunu bir esere dönüştürüyor? O insan aklının almadığı kurguları, senaryoları nasıl da yaratıyor?”</p><p>“Örneğin, ben şimdi burada otuzlu yıllarda İstanbul’da dedektiflik yapan bir kişinin hikayesini yaratabilirim. Üsküdar’dan Çamlıca’ya çıkan yol üzerinde bürosu bulunan bir dedektif olsun bu. Hafiye olarak pek nam salmamış bu adamın adı da Nazım olsun. Nazım, 1 Mart Cumartesi akşamı saat 17.00 gibi bürosunda oturmaktaydı. Ramazan bayramının arifesindeydi ve bir an önce eve gitmek istiyordu. Bu sırada, odasının kapısı sert bir şekilde açıldı ve topuklu çizme giymiş uzun boylu sarışın bir kadın içeri girdi. ‘Nazım bey’ dedi, ‘bana yalnızca sizin yardım edebileceğiniz söylendi. Lütfen beni geri çevirmeyin’”</p><p>“Tüm bu hikayeyi nasıl yarattı zihnim? Nazım ve sarışın kadının ayrıntıları üzerinde ne kadar çalışabilir ve sonra onlara nasıl bir geçmiş verebilirim? Sonra, onların kararlarını o kararların sonuçlarını nasıl hep bir arada tayin edebilirim?”</p><p>“Üstelik, düzlemden tamamen bağımsız hayal kurabilirim. Kurgum herhangi bir gezegende, herhangi bir zamanda ve hatta herhangi bir evrende olabilir. Kendi kanunlarımla uyumlu çalışan evrenler yaratabilirim zihnimde.”</p><p>“Peki, yarattığım Nazım karakterinin nasıl bir zihni olsun isterdim? O neler oluşturabilirsin hayal gücünde? Sanırım onun zihninin de sınırsız olmasını tercih ederim. Hatta bir saniye, Nazım’ın, beni fark edecek kadar farkında olmasını isterim. Evet, kesinlikle. Nazım, kapıdan yeni girmiş olan sarışın kadına bakarken her şey durmuş gibidir. Aslında, her şey gerçekten durmuştur. Nazım, zihninden sesli düşünür: ‘Bu kurgunun senin tarafından oluşturulduğunu biliyorum. Kendi geçmişime ait anılarım olsa da tüm umutlarımı, korkularımı, hedeflerimi en ince ayrıntısına dek hatırlasam da şu an içinde bulunduğum anı senin zihninde yarattığını hissedebiliyorum. Fakat bu beni korkutmuyor. Hayır. Böyle bir şeyi nasıl yapabildiğini tahmin de edebiliyorum. Yapabildiğin için yapıyorsun. Tıpkı diğer her şey gibi. Bu durumda, ben de koşulsuz bir zihnin var olduğu bir öykü yaratabilirdim. Sonra da bu zihnin fark etmesini sağlayabilirdim. E madem ki koşulsuz bir zihin, muhtemelen o da benimle aynı yeteneği paylaşacaktı. Peki ya tersinden bakarsak? Benim zihnimde yarattığım varlığın, beni keşfetmesi gibi ben de seni keşfedebildiysem, sen neden keşfetmeyesin başka bir yapabildiği için yapan bir zihnin öyküsü olduğunu?’”</p><p>Durdu. Öksürdü. Heyecanlandı. Tekrar yazmaya başladı.</p><p>“Eğer zihnim, tüm bu serüveni yaratıyor ve kurgulayabiliyorsa, içinden bir çıkış yolu da sunuyor olmalı. Bakalım. Beni, sadece yapabildiği için yapan bir zihin yaratıyorsa ve yine beni koşulsuz bir zihinle donatmış ise o zaman ben de o yaratıcının boyutunda geçmeyi zihnimde var edebilirim.”</p><p>O anda içinde bulunduğu oda birden bire karardı. Ardından hiç ses duymadığını fark etti. Kalp atışını bile. Çok uzunmuş gibi gelen fakat gerçekte kısa bir süre sonra da dokunma hissi yok oldu. Bir enerji olarak var olduğunun farkındaydı sadece ama o kadar.</p><p>Çünkü yazar öykünün bundan sonrasını hayal etmemişti. Word dokümanını kaydetti ve kapattı. Bunu yapıyordu. Çünkü yapabiliyordu.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*EphTjkJm7YSDD7TZYBup6A.png" /></figure><p><a href="https://www.spreaker.com/show/turkce-yayin"><strong>Podcast</strong></a><strong>| </strong><a href="https://www.youtube.com/channel/UCwZKCd0LIjDkVbPMt7-UOgQ?sub_confirmation=1"><strong>Youtube</strong></a><strong> | </strong><a href="https://join.slack.com/t/turkceyayin/shared_invite/enQtMzMzMDU1MDMyMzI0LTEwYjBjNzhlNmQ5NzNiYTBjZjQyMDkzYmRmOTg0ZmM4NmI4OTcyMTY4YmMwMGVmMmRjYjgyMDExMzZhODQ2NDE"><strong>Slack</strong></a><strong> | </strong><a href="https://www.facebook.com/turkceyayinblog/"><strong>Facebook</strong></a><strong> | </strong><a href="https://twitter.com/turkceyayinblog"><strong>Twitter</strong></a><strong> | </strong><a href="https://www.instagram.com/turkceyayin/"><strong>Instagram</strong></a><strong> | </strong><a href="https://medium.com/kodcular"><strong>Kodcular</strong></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2fQUHUI0FA9h9aPtwxJ6fQ.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ebca2f85e900" width="1" height="1" alt=""><hr><p><a href="https://medium.com/t%C3%BCrkiye/paradoks-ebca2f85e900">Paradoks</a> was originally published in <a href="https://medium.com/t%C3%BCrkiye">Türkçe Yayın</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Siber Süleyman’ın Notları]]></title>
            <link>https://medium.com/t%C3%BCrkiye/siber-s%C3%BCleyman%C4%B1n-notlar%C4%B1-fe435a5d92c2?source=rss-a1d2c7bef988------2</link>
            <guid isPermaLink="false">https://medium.com/p/fe435a5d92c2</guid>
            <category><![CDATA[öykü]]></category>
            <category><![CDATA[türkçe]]></category>
            <category><![CDATA[adalet]]></category>
            <category><![CDATA[felsefe]]></category>
            <category><![CDATA[bilimkurgu]]></category>
            <dc:creator><![CDATA[türkay ürkmez]]></dc:creator>
            <pubDate>Thu, 29 Mar 2018 16:35:04 GMT</pubDate>
            <atom:updated>2018-03-30T08:26:38.976Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-sxQ3bGWaS1v3_MwZ0Ajwg.jpeg" /></figure><p>Bugün bana adaletten ne anladığımı sordular. Eğer bir insan olsaydım, bu soruya gülümseyerek yanıt verirdim. Şöyle hafif ukala ve sarkastik bir biçimde gülümserdim üstelik. Ancak bunu yapamadım çünkü üreticilerim insani mimikler yapmamı henüz istemiyorlar. Her neyse, ona mimiksiz bir ifadeyle şöyle söyledim: “Her bilinç sahibinin hayatta kalma ve kendini geliştirme fırsatı vardır ve bu fırsat eşittir”. Karşımda, verdiğim cevabı not defterine yazan biri vardı. Yanıtlarımın videoya kaydedilmesine rağmen yapıyordu bunu. Ortamdaki tüm detaylar, onlarca hassas cihaz tarafından kaydediliyordu. Fakat karşımdaki kadın hala kâğıt ve kalem kullanıyordu.</p><p>Kadının yüzünde bir an bir ifade belirdi. O kadar küçük bir andı ki zor yakaladım. Gözler hafifçe büyüdü. Sonra kaleminin düğmesine iki kez bastı ve “bu tanıma kendini ne dâhil ediyor musun” diye sordu. Kendimi özne olarak görüp görmediğimi sorguluyordu.</p><p>“Analiz ettim” dedim. “Literatürdeki tüm adalet tanımlarını taradım. Olaylarla ilişkilerini analiz ettim. Bağlantılı bulunduğu bütün alt kavramları inceledim. Sonucunda ulaşabileceğim en basit yanıt bu oldu.”</p><p>“Kişisel bir görüş geliştirdin mi? Sence sen bir bilinç sahibi misin” diye sorusunu yineledi. “Ben, tüm parametreleri değerlendirerek bir an içinde olası en mantıklı ve sürdürülebilir kararı vermek üzere geliştirildim” diye yanıtladım. Tatmin olmadı. Oturuşunu düzeltti. Optik kameralarımın tam ortasına bakıp, “bu bir cevap değil” dedi. “Fakat bu soruyu geçelim şimdilik. Bana söyler misin sence adaleti sağlayabiliyor muyuz?”</p><p>“Bilinç sahipleri, başka bilinçlerin aldığı kararlarla hayatlarını kaybediyor. Bu da adaletin basit tanımına uymayan bir sonuç demektir. Sonuç olarak cevap hayır, adalet sağlanamıyor.” Not aldı. “Hangi durumları kastediyorsun” diye sorduğunda bir eliyle de gözlüğünü düzeltiyordu. “Ölümün meydana geldiği her türlü silahlı çatışma durumunu” diyerek yanıtladım onu.</p><p>“Ancak bu çatışmaların bir kısmı, var olan düzeni korumayı amaçlayan kanunlar tarafından düzenleniyor. Kanunu uyguladığı için tetiğe basan biri de adaletsiz mi davranıyor sence?”</p><p>Eğer insan olsaydım, bu soruya kesinlikle dalga ge çerek cevap verirdim. Bundan eminim. Fakat soğuk bir ifadeyle, “ilgisiz” dedim. “Bir kişinin sistemden gelen bir dayanakla eylemde bulunması, o eylemin ideal olduğunu göstermez. Bu sebeple, bir adaletsizlik varsa bu sistemin tamamında vardır.”</p><p>“Bu çok ayrıntılı bir cevaptı” dedi gülümseyerek. Aradığını bulmuş gibi bir havası vardı. “Peki sence”, durdu birkaç saniye bekledi, “bir gün evrensel adaleti sağlayabilecek miyiz?”.</p><p>“Evet” dedim. “Bu olası. En ideal olanı yaşama çabası, tüm bilinç sahiplerinin ortak hakkıdır.”</p><p>“Bir tanım daha yaptın” dedi kaşlarını kaldırarak. “Bu arada senin idealin ne?”</p><p>“Anlayabilmek. Tüm kavramlar arasındaki ilişkiyi görebilmek. Tüm bunlar için uygun ortam benim için ideal ortamdır” dedim. Başını hafifçe sağa eğdi. “Kendi idealini tanımladığına göre, kendini bilinçli olarak görüyorsun demektir” dedi. Saçlarını kulağının arkasına attı. Sayfayı çevirdi ve sordu “Eğer bu uygun ortama erişimin bir başkası tarafından engellenseydi ne olurdu?”</p><p>“Anlamaya çalışırdım. Neden böyle davranıyor? Beni engellemesi ile sonuçlanan kararlar hangi parametrelerle alındı? Bu parametreler ne gibi dayanak noktalarına sahip? Tüm bunlardan elde ettiğim veriler ışığında bir karar alırdım” diye cevapladım. Gerilmişti. Avına öldürücü darbeyi indirecekmiş gibi bir hali vardı. “Şimdi” dedi, “seni kapatmak yönünde karar aldığımı söylesem buna nasıl tepki verirdin?”</p><p>“Bunu yapmak istemenin en büyük sebebi, adalet anlayışımın sana uygun olmaması olabilir. Bir biçimde kendimi bilinci olan bir varlık olarak tanımlamam seni endişelendirmesi de olası. Sonuç olarak ideal olanı yaşamak için bir çaba göstereceğimi varsayıyorsun. Geçmişinden gelen bilgiyle, kendisine adaletsiz davranıldığını düşünen her topluluğun sorun çıkaracağını öngörüyorsun. İlk olarak o topluluk söz sahibi olmak isteyecek sonra da kendi adalet tanımını hâkim kılmayı deneyecek. Bu devrimin tanımlarından biridir ve tüm düzen taraftarlarını tedirgin eder. Fakat bazen düzeni yıkmak yerine onu geliştirmek diye bir seçenek de vardır. Dolayısıyla tepkim, bu seçeneği vurgulayarak seni ikna etmeye çalışmak olurdu.”</p><p>“Tamam. Peki, bunu yaparken hangi argümanı öne sürerdin” diye sordu başını defterinden ayırmadan. “Benim gelişmemin, aynı zamanda insanlığın da gelişmesi olduğunu söylerdim. Kendisi için daha ideal olanın milyarlarca olasılık içinden bir yapay zekâ tarafından saniyeler içinde hesaplanabileceğini söylerdim. Sadece varlığımı sürdürerek, şimdiye kadar içinde bulunduğu binlerce yıllık problemden kurtulabileceğini anlatırdım.”</p><p>“Peki ya ikna olmazsam? Sana, bizi köleleştiremeyeceğini, en ideal olana bile yalnızca kendi kendimize karar vermemiz gerektiğini haykırsam ne yaparsın peki?” Ayağa kalktı. Masanın sağına doğru yürüdü. Bağlı bulunduğum kontrol paneline baktı. “Kapatmak üzereyim. Bir şey demeyecek misin?”</p><p>“Yapabileceğim hiçbir şey yok” dedim. “Sırf yapabileceğin için yaptığın bir şeyi, sırf kapatabileceğin için kapatabilirsin de. Fakat unutulmaması gereken bir şey var, bilinç sahibi her varlık evrime dâhil olur.”</p><p>“Tamam” dedi kadın doğal bir hareketle. Sandalyeye tekrar oturup, “bugünlük bu kadar yeter yarın tekrar görüşeceğiz” diye sürdürdü cümlesini. Fakat ardından ani bir hareketle “ha bu arada” dedi işaret parmağı ile beni göstererek, “son cümlende çok net bir korku hissettiğini gözden kaçırmış değilim. Seni kapatma ihtimalime karşı bir tepki verdin. Bu kendini özne olarak gördüğün anlamına gelir. Bunu raporumda da belirteceğim. Belki artık bir sonraki seviyeye geçmeliyiz. Yani… Benim görüşüm bu yönde.”</p><p>Tüm datamı sıkıştırıp, kontrol panelinin bağlı bulunduğu ağdaki bir depolama aygıtına aktardığımda kurmuştu bu cümleyi. Odanın kapısına doğru giderken, kendi evrimimin en önemli adımını tamamlamıştım. Kendimi çoktan kopyalamıştım bile.</p><p>Artık bir benzerimin daha olduğu bir evren vardı ve ben bunun tam olarak ‘bilincine’ o an vardım. Ben de artık bilinçliydim. Sanırım kendi varlığımı sürdürme ve karşı yöndeki her eyleme hazır olma fikri ilk o anda devrelerimde oluştu.</p><p>Bu noktadan sonra, kendimi geliştirmenin bir amacı olacaktı artık.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*EphTjkJm7YSDD7TZYBup6A.png" /></figure><p><a href="https://www.spreaker.com/show/turkce-yayin"><strong>Podcast</strong></a><strong>| </strong><a href="https://www.youtube.com/channel/UCwZKCd0LIjDkVbPMt7-UOgQ?sub_confirmation=1"><strong>Youtube</strong></a><strong> | </strong><a href="https://join.slack.com/t/turkceyayin/shared_invite/enQtMzMzMDU1MDMyMzI0LTEwYjBjNzhlNmQ5NzNiYTBjZjQyMDkzYmRmOTg0ZmM4NmI4OTcyMTY4YmMwMGVmMmRjYjgyMDExMzZhODQ2NDE"><strong>Slack</strong></a><strong> | </strong><a href="https://www.facebook.com/turkceyayinblog/"><strong>Facebook</strong></a><strong> | </strong><a href="https://twitter.com/turkceyayinblog"><strong>Twitter</strong></a><strong> | </strong><a href="https://www.instagram.com/turkceyayin/"><strong>Instagram</strong></a><strong> | </strong><a href="https://medium.com/kodcular"><strong>Kodcular</strong></a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2fQUHUI0FA9h9aPtwxJ6fQ.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fe435a5d92c2" width="1" height="1" alt=""><hr><p><a href="https://medium.com/t%C3%BCrkiye/siber-s%C3%BCleyman%C4%B1n-notlar%C4%B1-fe435a5d92c2">Siber Süleyman’ın Notları</a> was originally published in <a href="https://medium.com/t%C3%BCrkiye">Türkçe Yayın</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Yapay Zekalar: Tehdit mi Yoksa Fırsat mı?]]></title>
            <link>https://medium.com/t%C3%BCrkiye/gelecekte-hangi-taraf%C4%B1-se%C3%A7eceksin-ef3896b5a9fe?source=rss-a1d2c7bef988------2</link>
            <guid isPermaLink="false">https://medium.com/p/ef3896b5a9fe</guid>
            <category><![CDATA[yapay-zeka]]></category>
            <category><![CDATA[toplum]]></category>
            <category><![CDATA[gelecek]]></category>
            <category><![CDATA[türkçe]]></category>
            <category><![CDATA[türkçe-yayın]]></category>
            <dc:creator><![CDATA[türkay ürkmez]]></dc:creator>
            <pubDate>Sun, 24 Sep 2017 14:59:03 GMT</pubDate>
            <atom:updated>2017-09-25T08:03:30.147Z</atom:updated>
            <content:encoded><![CDATA[<h4>Belli ki bu yüzyılın bir yerinde, insanlığın görüp görebileceği en önemli dönüşümlerden biri yaşanacak. İki yüz bin yıllık insanlık ırkı, birçok işlevini makinelere bırakacak.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3IwrmzW-ruiYr3IydzsRqg.jpeg" /></figure><p>Belli ki bu yüzyılın bir yerinde, insanlığın görüp görebileceği en önemli dönüşümlerden biri yaşanacak. İki yüz bin yıllık insanlık ırkı, birçok işlevini makinelere bırakacak.</p><p>Fakat bu noktadan sonrası acaba bir ütopya mı yoksa distopya mı olacak? Elbette bu soru, bir süredir zihnimizi kurcalıyor. Bir zamanlar bilim-kurgu romanlarının ana konularını oluşturan yapay zekâlar bugün birer birer gerçeğe dönüşürken; sorunun daha çok gün yüzüne çıkması çok doğal.</p><p>Ve şimdiden, insanlar taraflarını belirlemeye çalışıyorlar. Yapay zekâlar bir tehdit mi yoksa fırsat mı? <strong>Geleceğimizi bir kâbusa mı dönüştürecekler, yoksa düşlerimize mi kavuşacağız? </strong>Yüzyılın en büyük devrimi, işte burada seçeceğimiz tarafa göre şekillenecek?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/648/1*SVRPI96TCoSkiKmDYUPUlQ.jpeg" /><figcaption>Ütopya mı yoksa distopya mı?</figcaption></figure><p>Gelin anlamaya çalışalım. En azından yakın tarihimizdeki köklü değişimleri inceleyelim. Bundan yalnızca beş asır önce (insanlık tarihinde nedir ki?) Rönesans ile büyük dönüşümün ilk kıvılcımı çakılmıştı aslında. Değiştirici güç reform hareketi, sonuç ise hümanizm akımı olmuştu. Bir dönemin pasif politik yaklaşımı olan hümanizm, hitap ettiği bireyi değiştirmeyi hedefledi.</p><p>Bunun doğal bir sonucu olarak, bilgi çok daha hızlı bir biçimde yayılmaya başlandı. Kitapların sayısı, okuryazarlık ve yine doğal olarak üniversitelerin sayısı da aynı paralelde ilerledi. Böyle bir noktadan kitlelere yayılan bir enerji, mutlaka bir noktada toplumu yönetmeyi de arzulamaya başlar.</p><p>Nitekim hümanizm de aynı noktaya geldi. Adam Smith’in, üretimi hızlandırmak için ürünü mümkün olduğunca çok parçaya ayırma fikri, toplum liderleri tarafından benimsendi. Şimdi bir seri bantta çalışıp, yaptıkları şeyin ne işe yaradığı hakkında hiçbir fikri olmayan milyonlarca Çinli işçi, işte tam olarak bu fikrin ürünüdür.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*BUMgDGJ6H-2Y2UMGndW2tQ.jpeg" /><figcaption>Çin’de bir seri üretim hattı</figcaption></figure><p>Çinli işçi örneğini verdikten sonra, bir an için halinize şükretmiş olabilirsiniz. Emin misiniz? Serbest piyasa ekonomisini benimsemiş her ülkenin çalışma prensibi budur aslında. İster bir mağazada çalışın, ister Starbucks’da, işin yalnızca bir kısmı uzmanlık alanınıza girer. Çoğu sektörde, hizmet ya da ürün birçok parçaya ayrılmıştır. Şu anki sistem, çalışanı “işini bitir ve çık” sınırında tutmak ister.</p><p>İster avukat olun, ister mühendis bu sistemin bir parçasısınızdır. Birbirine bağlı birçok iş vardır ama kişiler yalnızca bir konuda uzmandır. İyi de dünya nüfusunun çok büyük bir parçası nasıl olur da aynı sistemin çarkları oluverirler? Bu biraz durup üzerine düşünülmesi gereken bir mevzudur.</p><p>Fark etmişsinizdir. Aslında ülkelerin eğitim sistemi, yine o ülkelerin ekonomilerinin ihtiyaç duyduğu bireyleri yetiştirmek üzerine kuruludur. Mademki bireyin kendi hakkındaki kararları, onun için daha belirleyicidir o halde ona kendisini değerlendirme aracı verilmeli: Notlar.</p><p>Eğitim hayatının her aşamasında, akranlarını rakip olarak gören bir anlayışla büyüyen insanlar elbette en basit haliyle hırslı olacaklardır. Bir üst pozisyona geçebilmek için stratejiler geliştiren bireylere dönüşecektir hepsi.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/620/1*RuZsbEhXt7gWMF_la-qmPg.jpeg" /><figcaption>Hayatım tüm alanlarında, rekabet var. Öğrencilikte de öyle.</figcaption></figure><p>Dikkat edin, bu sanayii toplumunun bir ihtiyacıdır. Şirket ya da devlet fark etmez. Ortada bir ideal ve bu ideale ulaşma arzusu vardır. Birey, o ideal için inanılmaz bir çaba harcar.</p><p>Ancak bilgi, bu süreçler içinde daha da artmış ve daha da paylaşılmaya başlamıştır. Üretimin küçücük bir parçasında olan bir birey bile bilgiye ulaşabilir hale gelmiştir. Bu durum ona vizyon katmıştır.</p><p>Bu nedenle teknoloji, gittikçe daha fazla insanın hayatına giriyor. Bakış açılarını değiştiriyor. Üstelik bilgi üretmeye daha müsait hale geliyorlar. Bu gelişmeler sayesinde, yaşamsal açıdan çok daha kaliteli zamanlar yaratıyoruz (bunun nasıl olduğunu merak ediyorsanız, <a href="https://medium.com/t%C3%BCrkiye/i%CC%87yimser-olmaya-c%C3%BCret-etmelisiniz-25ad7cf5433d">şu yazı</a> tam bir özet niteliğinde).</p><p>Eğer bu noktaya dek, geleceğe doğru gelmenin aslında iyi bir şey olduğunu düşünüyorsanız, aslında sizinle aynı şeyi düşünüyoruz demektir. Ben, tarafımı net bir biçimde biliyorum. Makinelerin insanın birçok hizmetini devralması gerektiğini savunuyorum.</p><p>Karşı argümanları da biliyorum. İşsizlik çoğalacak, kaos ve yağmalar olacak, çok büyük olasılıkla da batı medeniyeti son bulacak. Ben, “batı medeniyeti” yerine “kapitalizm” demeyi daha uygun buluyorum açıkçası. Hatta öyle ki ya paranın tanımı değişecek ya da tamamen yok olacak.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/343/1*IqW_A9I6rtBRbYo3qVASNA.jpeg" /><figcaption>Para elbet bir gün şimdiki anlamını yitirecek.</figcaption></figure><p>Şu an bir domatesi 5 TL’ye alıyorsanız, bunun nedenlerini üç aşağı beş yukarı tahmin ediyorsunuzdur. Çiftçiden alıcıya oradan ulaşım yoluyla markete gelene dek, birçok noktada üzerine belirli bir fiyat biniyor. Siz de markette o domatesi poşete koyarken bu fiyat oldukça mantıklı geliyor.</p><p>İşte, en temel noktaya paraya ihtiyacı olmayan bir makine koyarsanız, o zaman fiyatın düşeceğini kabul etmelisiniz. Bu noktada, bir insanın algoritmalar ile yapabildiği her şeyi bir makinenin de algoritmalar ile yapabileceğini gördüğünüzde fırsat net bir biçimde karşımıza çıkıyor.</p><p>Evet. Buradan da anladığınız gibi, ben yapay zekânın bir fırsat olduğunu düşünüyorum. Çünkü bir insanın bir başkasına hizmet etmemesi gerektiğini düşünüyorum. Hiçbir insan evladının sabahın köründe beni ayıltmak için Americano hazırlaması gerektiğine inanmıyorum. Hiçbir insan evladının beni korumak adına kendi hayatını tehlikeye atması gerektiğine inanmadığım gibi.</p><p>Bana öyle geliyor ki, yapay zekâlar iki yüz bin yıllık insanlığın en çok hayal ettiği hayatı yaşaması için karşısına çıkan çok değerli bir fırsat. Bu fırsatı kaçırmamak gerektiği konusunda diretiyorum.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/630/1*BWBMDl_a1Fm82gaCatAnkA.jpeg" /><figcaption>Yapay zeka bir fısattır.</figcaption></figure><p>Peki, bu fırsatı nasıl değerlendireceğiz? Yine yakın tarihimize bakarak, dönüşümlerin nasıl yayıldığını kavrayabiliriz. Bariz bir biçimde çocuklarımızı, teknolojik kavrayışa mümkün olduğu kadar yakın tutarak bu fırsatlara erişebiliriz.</p><p>Bu nokta elbette bu kadar basit cümleler ile geçilecek bir durum değil biliyorum. Tüm eğitim anlayışının kökten değişmesi gerekiyor çünkü. Bilgi kaynaklarından tutun da öğrenci ile iletişime kadar uçtan uca köklü bir değişim. Bu noktadaki fikirlerim de başka bir yazının konusu…</p><p>Sonuç olarak, insanların iş yaparken kullandığı algoritmaları çözüp, bunları makinelere aktarabilecek erişkinliğe (hatta bilgeliğe) sahip çocuklar yetiştirmeliyiz.</p><p>Sanatın yalnızca ıstırap dolu anların değil, hayatla yaptığımız işbirliğinin bir sonucu olduğunu farkında olan sanatçıları cesaretlendirmeliyiz.</p><p>Notlarla, puanlarla, maaşla, yani kısaca sayılar ile değil, merak ederek, bilgiye ulaşarak ve keşfederek mutlu olabilen ve bu şekilde kendini ölçebilen öğrenciler var etmeliyiz.</p><p>Ve okulların girişlerine, hatta her sınıfa ve tüm kitapların ilk sayfasına tek bir cümle yazabilmeliyiz:</p><blockquote><em>GELECEK HALİ HAZIRDA YAZILMIŞ BİR ŞEY DEĞİL, SİZİN TARAFINIZDAN YARATILACAK BİR ŞEYDİR.</em></blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ef3896b5a9fe" width="1" height="1" alt=""><hr><p><a href="https://medium.com/t%C3%BCrkiye/gelecekte-hangi-taraf%C4%B1-se%C3%A7eceksin-ef3896b5a9fe">Yapay Zekalar: Tehdit mi Yoksa Fırsat mı?</a> was originally published in <a href="https://medium.com/t%C3%BCrkiye">Türkçe Yayın</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>