<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:betag="https://blogengine.io/schemas/tags">
  <channel>
    <title>WebUcu Günlükleri</title>
    <description>Mustafa Erhan Ersoy ile Web Programlama</description>
    <link>http://merhanersoy.net/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 3.3.8.0</generator>
    <language>tr-TR</language>
    <blogChannel:blogRoll>http://merhanersoy.net/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Mustafa Erhan Ersoy</dc:creator>
    <dc:title>WebUcu Günlükleri</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <item>
      <title>Transactional Outbox Deseni</title>
      <description>&lt;p&gt;Legacy monolith uygulamalarda işlem b&amp;uuml;t&amp;uuml;nl&amp;uuml;ğ&amp;uuml;n&amp;uuml; sağlamak i&amp;ccedil;in kullandığımız en temel ara&amp;ccedil; transactiondır. Bir işlemi, &amp;ouml;zellikle veritabanı işlemlerini aynı veritabanı transaction&amp;rsquo;ı i&amp;ccedil;erisinde yaparız ki herhangi bir adımda alınacak hata durumunda rollback komutu &amp;ccedil;alıştırarak t&amp;uuml;m işlemleri geri alabilelim. Eğer işler yolunda gider ve t&amp;uuml;m adımlar başarıyla tamamlanırsa commit ile transaction&amp;rsquo;ı kapatırız. Veritabanında yapılacak işlemler s&amp;ouml;z konusu olduğunda iş karmaşıklaşmaya başlayıp compansation dediğimiz geri alma metodlarını d&amp;uuml;ş&amp;uuml;nmemiz gerekmeye başlar. &amp;Ouml;rneğin bir muhasebe işlemi i&amp;ccedil;in &amp;ouml;nce veritabanı seviyesinde bazı tablolara kayıtlar girip bunu tamamladıktan sonra bir dizine dekont oluşturduğumuzu d&amp;uuml;ş&amp;uuml;nelim. Veritabanındaki işlemleri aynı transaction i&amp;ccedil;erisinde b&amp;uuml;t&amp;uuml;nl&amp;uuml;ğ&amp;uuml;n&amp;uuml; sağlayıp y&amp;ouml;netebiliriz. Eğer sonrasında dekont oluşturma sırasında hata alırsak yaptığımız muhasebe kaydı ne olacak? Eğer veritabanı işlemleri i&amp;ccedil;in a&amp;ccedil;tığımız transaction&amp;rsquo;ı a&amp;ccedil;ık tutup dekontun oluşturulmasının tamamlanmasını beklersek, bu veritabanı kaynaklarını k&amp;ouml;t&amp;uuml; kullanmak olur. Yok eğer veritabanı transaction&amp;rsquo;ını commit edip dekont basımına ge&amp;ccedil;ersek, hata durumunda bu sefer muhasebe işleminin iptalini yapacak bir compansation metodu &amp;ccedil;alıştırmamız gerekir. Peki ya bu compansation metodu da hata alır ise ?&lt;/p&gt;
&lt;p&gt;Mikroservis mimarisi hayatımıza yukarıdaki senaryoyu biraz daha bariz hale getiren bir trade-off ile birlikte geliyor. Uygulamalarımızı daha k&amp;uuml;&amp;ccedil;&amp;uuml;k mantıksal servisler haline getirip bunları birbiri ile konuşturmaya başlamamızla birlikte ilk karşımıza &amp;ccedil;ıkan sorun &amp;ldquo;dağıtık mimaride işlem b&amp;uuml;t&amp;uuml;nl&amp;uuml;ğ&amp;uuml;n&amp;uuml; nasıl sağlayacağız ?&amp;rdquo; oluyor.&lt;/p&gt;
&lt;p&gt;Bu noktada bu makalenin konusu olmayan ama &amp;ccedil;ok ilişkili bir tasarım deseninden bahsetmek gerekiyor :&amp;nbsp;&lt;strong&gt;Saga deseni&lt;/strong&gt;. Saga deseni, dağıtık mimaride transaction b&amp;uuml;t&amp;uuml;nl&amp;uuml;ğ&amp;uuml;n&amp;uuml; sağlamayı hedefleyen bir desendir. Farklı servislerce tamamlanacak adımları olan bir iş geliştirdiğimizi d&amp;uuml;ş&amp;uuml;nelim. Her mikroservis, kendi kapsamındaki işi tamamlayıp bir sonraki servise g&amp;ouml;revini yapması i&amp;ccedil;in talepte bulunmalıdır. Sıralı şekilde birbirine bağlı bu servislerden biri hata alması durumunda geriye doğru her servisin yaptığı işin tersi ya da compansation metodu &amp;ccedil;alışması gerekir. Bu şekilde saga i&amp;ccedil;erisindeki her adımın bir işi yapan bir de yapılan işi geri alan metodu yazılarak saga adımları oluşturulur. Şimdilik daha fazla detaya inmeden saga tasarım desenini bu şekilde &amp;ouml;zetleyebiliriz.&lt;/p&gt;
&lt;h2&gt;&amp;Ouml;rnek ile Transactional Outbox Deseni&lt;/h2&gt;
&lt;p&gt;&amp;Ouml;rneğin aşağıdaki gibi bir senaryoda, dış bir servisten gelen emir Order servisine ulaşıyor, Order servisimiz de bir saga başlatıyor. &amp;Ouml;ncelikle kendi hesaplama ve veritabanı işlemlerini tamamlayıp emir mesajını saganın diğer adımlarına iletmek &amp;uuml;zere mesaj kuyruğuna bırakıyor olsun. Burada servis kendi işlemlerini işlem b&amp;uuml;t&amp;uuml;nl&amp;uuml;ğ&amp;uuml; i&amp;ccedil;erisinde yapıp mesajı kuyruğa bırakma aşamasında bir kesintiden dolayı sorun yaşaması halinde işlem kuyruğa iletilememiş olacak. Kendi yaptığı işlemleri geri alması halinde de işlem sanki hi&amp;ccedil; ulaşmamış gibi olacak. Yok eğer kendi yaptığı işlemleri geri almaz ise bu sefer kuyruk erişimindeki sorun giderilene kadar kuyruğa mesajı bırakacak kısmı s&amp;uuml;rekli tekrarlayan bir mekanizmaya ihtiya&amp;ccedil; olacak.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=/OutboxPattern/WithoutOutboxPattern.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Transactional Outbox Pattern işte bu sorunun &amp;ccedil;&amp;ouml;z&amp;uuml;m&amp;uuml; i&amp;ccedil;in saga adımları arasındaki mesaj iletimini soyutlayarak her servis adımında atomik transaction i&amp;ccedil;erisinde mesaj iletimi yapılmasını sağlamak i&amp;ccedil;in tasarlanmıştır. Emri alan Order servisi kendi işlemlerini yaptığı transaction i&amp;ccedil;erisinde bir outbox tabloya iletilecek mesajı kaydeder ve kendi saga adımını ger&amp;ccedil;eklemiş olur. Eğer kendi transaction&amp;rsquo;ı i&amp;ccedil;erisinde bir hata oluşur ise mesaj alınamadı hatasını ilk elden d&amp;ouml;ner.&lt;/p&gt;
&lt;p&gt;Outbox tablosunu d&amp;uuml;zenli aralıklarla tarayıp yeni emirleri kuyruğa bırakan ek bir genel servis (Outbox Message Relay) tasarlanmalıdır. Bu servis mesajı okuyup kuyruğa iletmek, iletemez ise stat&amp;uuml; g&amp;uuml;ncellemek dışında bir şey ile ilgilenmemelidir. B&amp;ouml;ylece olası bir kesinti durumunda işlem saga adımını ge&amp;ccedil;miş ve diğer adıma iletilmek &amp;uuml;zere beklemede olacaktır. Servisler kendi g&amp;ouml;revleri dışında kuyruk iletimi ile alakalı detaylardan soyutlanmış, bağımlılık azaltılmış olacaktır.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=/OutboxPattern/OutboxPattern.png" alt="" /&gt;&lt;/p&gt;
&lt;h2&gt;Outbox Message Relay Y&amp;ouml;ntemleri&lt;/h2&gt;
&lt;p&gt;Transactional Outbox Pattern yukarıda anlattığım gibi uygulandığında bir outbox tablomuz oluşmuş ve mesajlarımızı barındırıyor olacaktır. Bu durumda Outbox Message Relay servisimiz Outbox tablosunu belli aralıklarla sorgulayarak yeni mesaj olup olmadığını kontrol ederek gerekli aksiyonları alıyor olacaktır. Bu y&amp;ouml;nteme&amp;nbsp;&lt;strong&gt;Polling Publisher&lt;/strong&gt;&amp;nbsp;deniyor.&lt;/p&gt;
&lt;p&gt;Bir diğer y&amp;ouml;ntem ise Outbox tablomuza mesajı yazdığımız anda veritabanının transaction loguna bu işlem kaydedileceğinden, destekleyen veritabanlarınca bu kaydedilen logu dinleyecek bir yapı tarafından mesajlar kuyruğa bırakılabilir. Bu y&amp;ouml;nteme ise&amp;nbsp;&lt;strong&gt;Transaction Log Tailing&lt;/strong&gt;&amp;nbsp;deniyor.&lt;/p&gt;
&lt;h2&gt;Kaynaklar&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.manning.com/books/microservices-patterns"&gt;Microservices Patterns With examples in Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://microservices.io/patterns/data/transactional-outbox.html"&gt;microservices.io Pattern: Transactional outbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://martinfowler.com/articles/patterns-of-distributed-systems/two-phase-commit.html"&gt;Martin Fowler : Two Phase Commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>http://merhanersoy.net/post/2023/09/01/transactional-outbox-deseni</link>
      <author>merhanersoy@gmail.com</author>
      <comments>http://merhanersoy.net/post/2023/09/01/transactional-outbox-deseni#comment</comments>
      <guid>http://merhanersoy.net/post.aspx?id=7af35b64-1230-4022-81d7-a2dbc9063d85</guid>
      <pubDate>Cum, 1 Eyl 2023 19:36:00 +0300</pubDate>
      <category>microservices</category>
      <dc:publisher>meersoy</dc:publisher>
      <pingback:server>http://merhanersoy.net/pingback.axd</pingback:server>
      <pingback:target>http://merhanersoy.net/post.aspx?id=7af35b64-1230-4022-81d7-a2dbc9063d85</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://merhanersoy.net/trackback.axd?id=7af35b64-1230-4022-81d7-a2dbc9063d85</trackback:ping>
      <wfw:comment>http://merhanersoy.net/post/2023/09/01/transactional-outbox-deseni#comment</wfw:comment>
      <wfw:commentRss>http://merhanersoy.net/syndication.axd?post=7af35b64-1230-4022-81d7-a2dbc9063d85</wfw:commentRss>
    </item>
    <item>
      <title>Visualizing Google Cloud Kitap İncelemesi</title>
      <description>&lt;div data-pm-slice="1 1 []" data-en-clipboard="true"&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=/Visualizing GCP/book_cover.png" alt="" width="827" height="652" /&gt;&lt;/div&gt;
&lt;div data-pm-slice="1 1 []" data-en-clipboard="true"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div data-pm-slice="1 1 []" data-en-clipboard="true"&gt;Google'da Developer Advocate olarak &amp;ccedil;alışan aynı zamanda GCP ile alakalı &lt;a href="https://thecloudgirl.dev/"&gt;i&amp;ccedil;erik sağlayan&lt;/a&gt; &lt;a href="https://cloud.google.com/developers/advocates/priyanka-vergadia"&gt;Priyanka Vergadia&lt;/a&gt; tarafından g&amp;ouml;rselleştirilerek anlatılmış bir Google Cloud referans kitabı. Kapağında da yazdığı gibi giriş seviyesi bir kitap. Bulut teknolojisi tanımı ve avantajları ile başlayıp Google Bulut Platformu / Google Cloud Platform (GCP) detayları ile devam eden bir kitap. Temel bulut bilgisini verdikten sonra GCP ortamındaki kullanılabilecek t&amp;uuml;m &amp;uuml;r&amp;uuml;nleri temel seviyede inceleyen bir kitap. Bunu yaparken de aşağıdaki gibi b&amp;ouml;l&amp;uuml;mlere ayrılmış kategorilerde &amp;uuml;r&amp;uuml;n&amp;uuml; tanıtırken yazarın kendi &amp;ccedil;izimleri ile konuyu g&amp;ouml;rselleştirdiği i&amp;ccedil;in &amp;uuml;r&amp;uuml;nleri ile kullanım şekli ve ama&amp;ccedil;larını anlamak olduk&amp;ccedil;a kolay hale gelmiş. Bazen sadece &amp;ccedil;izimleri inceleyince &amp;uuml;r&amp;uuml;n&amp;uuml; kavrayabiliyorsunuz, a&amp;ccedil;ıklama metni tekrar haline geliyor. Yazar ayrıca kitapta kullandığı &amp;ccedil;izimleri &lt;a href="https://github.com/priyankavergadia/GCPSketchnote"&gt;şu github reposundan&lt;/a&gt; da paylaşmış. Eğitim i&amp;ccedil;eriği sağlayıcılar ve sunumlar i&amp;ccedil;in olduk&amp;ccedil;a faydalı bir kaynak olduğunu d&amp;uuml;ş&amp;uuml;n&amp;uuml;yorum.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Kitaptaki kategoriler :&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;Ch 1. Infrastructure&lt;/div&gt;
&lt;div&gt;Ch 2. Storage&lt;/div&gt;
&lt;div&gt;Ch 3. Database&lt;/div&gt;
&lt;div&gt;Ch 4. Data Analytics&lt;/div&gt;
&lt;div&gt;Ch 5. Application Development and Modernization&lt;/div&gt;
&lt;div&gt;Ch 6. Networking&lt;/div&gt;
&lt;div&gt;Ch 7. Data Science, Machine Learning and, Artificial Intelligence&lt;/div&gt;
&lt;div&gt;Ch 8. Security&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Kitaptaki &amp;ccedil;izimlere bir &amp;ouml;rnek :&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=/Visualizing GCP/GCP_where should i run my stuff.png" alt="" width="1217" height="685" /&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;Kitap&amp;nbsp;bulut teknolojilerine giriş aşamasındaki ve GCP devam edecek ile teknik pozisyonlardaki kişileri hedef alıyor. O'Reilly'nin Head First serisindeki kitapları andırıyor. Benim gibi g&amp;ouml;rselleştirilmiş i&amp;ccedil;erik ile daha kolay anlayan kitlenin&amp;nbsp;zevk alarak&amp;nbsp;faydalanacağını d&amp;uuml;ş&amp;uuml;n&amp;uuml;yorum. Detay bilgi i&amp;ccedil;in konuları derinlemesine inceleyen kaynaklara bakmak lazım, bu kitap derin bilgi arayanlara uygun değil. Kitap daha &amp;ccedil;ok y&amp;uuml;zeysel bilgi vererek GCP ortamı ve &amp;uuml;r&amp;uuml;nlerinin tamamını 240 sayfada kapsamaya &amp;ccedil;alışıyor. Bunu yaparken de vaka problem &amp;uuml;zerinden &amp;ccedil;&amp;ouml;z&amp;uuml;mleri anlatmaya &amp;ccedil;alışıyor, sonrasında da &amp;uuml;r&amp;uuml;n&amp;uuml;n nasıl &amp;ccedil;alıştığını anlatıyor. ilgi alanınıza g&amp;ouml;re bazı b&amp;ouml;l&amp;uuml;mleri daha hızlı ge&amp;ccedil;ebilir ya da atlayabilirsiniz. Machine Learning ve AI b&amp;ouml;l&amp;uuml;m&amp;uuml; en ilgimi &amp;ccedil;eken b&amp;ouml;l&amp;uuml;mlerden oldu.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div data-pm-slice="1 1 []" data-en-clipboard="true"&gt;Ayrıca yazarın GitHub reposunda yer alan şu GCP cheat Sheet'i de olduk&amp;ccedil;a faydalı : &lt;a href="https://github.com/priyankavergadia/google-cloud-4-words"&gt;Google Cloud in 4 Words&lt;/a&gt;&lt;/div&gt;
&lt;div data-pm-slice="1 1 []" data-en-clipboard="true"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div data-pm-slice="1 1 []" data-en-clipboard="true"&gt;İyi okumalar.&lt;/div&gt;
&lt;div data-pm-slice="1 1 []" data-en-clipboard="true"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div data-pm-slice="1 1 []" data-en-clipboard="true"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <link>http://merhanersoy.net/post/2023/07/07/visualizing-google-cloud-kitap-incelemesi</link>
      <author>merhanersoy@gmail.com</author>
      <comments>http://merhanersoy.net/post/2023/07/07/visualizing-google-cloud-kitap-incelemesi#comment</comments>
      <guid>http://merhanersoy.net/post.aspx?id=9b1c27f9-d9c7-4287-a332-7495fc7fad31</guid>
      <pubDate>Cum, 7 Tem 2023 18:21:00 +0300</pubDate>
      <category>kitap incelemesi</category>
      <dc:publisher>meersoy</dc:publisher>
      <pingback:server>http://merhanersoy.net/pingback.axd</pingback:server>
      <pingback:target>http://merhanersoy.net/post.aspx?id=9b1c27f9-d9c7-4287-a332-7495fc7fad31</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://merhanersoy.net/trackback.axd?id=9b1c27f9-d9c7-4287-a332-7495fc7fad31</trackback:ping>
      <wfw:comment>http://merhanersoy.net/post/2023/07/07/visualizing-google-cloud-kitap-incelemesi#comment</wfw:comment>
      <wfw:commentRss>http://merhanersoy.net/syndication.axd?post=9b1c27f9-d9c7-4287-a332-7495fc7fad31</wfw:commentRss>
    </item>
    <item>
      <title>AZ-204: Developing Solutions For Microsoft Azure Sertifika Sınavı ve Hazırlığı</title>
      <description>&lt;p&gt;Microsoft'un bulut platformu Azure'a y&amp;ouml;nelik değişik rolleri kapsayan eğitimler g&amp;uuml;n ge&amp;ccedil;tik&amp;ccedil;e &amp;ccedil;eşitlenmeye ve artmaya başladı. Bu &amp;ccedil;eşitlilik ve zenginlik bir şekilde beni tekrar cezbetti.&lt;br clear="none" /&gt;Ge&amp;ccedil;tiğimiz yıllarda&amp;nbsp;&lt;strong&gt;AZ-900 Azure Fundamentals&lt;/strong&gt;&amp;nbsp;eğitimi ve sonrasında sertifika sınavına katılmıştım. Hazırlık ve sınav s&amp;uuml;recini, &amp;ccedil;ok istememe rağmen, tembellikten bir t&amp;uuml;rl&amp;uuml; yazılı hale getirememiştim.&lt;br clear="none" /&gt;Bu sefer&amp;nbsp;&lt;strong&gt;AZ-204 Developing Solutions For Microsoft Azure&lt;/strong&gt;&amp;nbsp;sertifika hazırlığım sırasında kendimi işin başından itibaren motive ederek yazmaya başladım :)&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;&amp;Ccedil;alıştığım şirket Intertech'in Microsoft Enterprise Skills Initiative (ESI) programına dahil olmasının faydalarından yararlandığım i&amp;ccedil;in eğitim ve sertifika sınavı voucher'larına erişimim olduk&amp;ccedil;a kolay ve &amp;uuml;cretsiz oldu.&lt;br clear="none" /&gt;Fakat bu programdan faydalanmasanız bile bir &amp;ccedil;oğu &amp;uuml;cretsiz veya uygun &amp;uuml;cretler karşılığında alternatif hazırlık materyalleri mevcut. Yazımda her &amp;uuml;&amp;ccedil; se&amp;ccedil;enekten bir miktar bahsedeceğim.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Azure Eğitim Yolculuğu&lt;/h3&gt;
&lt;p&gt;&lt;br clear="none" /&gt;Microsoft ESI programı dahilinde geliştiriciler i&amp;ccedil;in hazırladıkları eğitim ve sertifika yolculuğu aşağıdaki gibi planlanmış, diğer t&amp;uuml;m roller i&amp;ccedil;in&amp;nbsp;&lt;a title="Microsoft ESI eğitim yolculuğu" href="https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RWwRN0" target="_blank"&gt;eğitim yolculuğu d&amp;ouml;k&amp;uuml;manına buradan&lt;/a&gt;&amp;nbsp;ulaşabilirsiniz.&lt;br clear="none" /&gt;ESI programı ile Microsoft, partner olan firmaların &amp;ccedil;alışanlarına olduk&amp;ccedil;a sık tekrarlanan online olarak katılım sağlayabilecekleri eğitimler sağlıyor. G&amp;ouml;rd&amp;uuml;ğ&amp;uuml;m kadarıyla aradığınız bir eğitimi ayda iki defa a&amp;ccedil;ıldığını farkettim. Kendinze en uygun zamana eğitiminizi planlayabiliyorsunuz.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img src="http://merhanersoy.net/image.axd?picture=/2022/azure_training_journey_for_developers.jpg" alt="" width="655" height="697" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br clear="none" /&gt;&lt;span style="text-decoration: underline;"&gt;Microsoft'un Azure platformu i&amp;ccedil;in sağladığı &amp;uuml;&amp;ccedil; seviye eğitim ve sertifika mevcut :&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fundamentals (*)&lt;/li&gt;
&lt;li&gt;Associate (**)&lt;/li&gt;
&lt;li&gt;Expert (***)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Not :&lt;/strong&gt;&amp;nbsp;**-900 kodlu olan eğitim ve sertifikalar, temel&amp;nbsp;eğitim kategorisinde oluyor. Giriş seviye eğitim deyip k&amp;uuml;&amp;ccedil;&amp;uuml;msememek lazım, sınavı hazırlanmadan girmek i&amp;ccedil;in uygun değil :)&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=/AZ-204/Azure-Certification-Roadmap-Path.png" alt="" width="586" height="384" /&gt;&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;Elbette t&amp;uuml;m eğitimler geliştiriciler i&amp;ccedil;in uygun olsa da ben kendime yani bir uygulama geliştiriciye daha uygun olarak aşağıkdaki eğitim ve sertifikaları yolculuk olarak belirledim :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AZ-900 Azure Fundamentals&lt;/li&gt;
&lt;li&gt;AZ-204 Developing Solutions For Microsoft Azure&lt;/li&gt;
&lt;li&gt;AZ-303 Microsoft Azure Architect Technologies&lt;/li&gt;
&lt;li&gt;AZ-304 Microsoft Azure Architect Design&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Not :&lt;/strong&gt;&amp;nbsp;Microsoft eğitim ve sertifika isimlerini ge&amp;ccedil;tiğimiz yıl g&amp;uuml;ncelleyerek değiştirdi. AZ-301 sertifikası AZ-303 olarak g&amp;uuml;ncellendi. Mart 2022'de de bu sertifikayı AZ-305 olarak g&amp;uuml;ncellenecek.&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;Genel bilgileri ve kuşbakışı tabloyu ilettikten sonra şimdi gelelim AZ-204 sertifika sınavı hazırlık s&amp;uuml;recine.&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;&lt;/p&gt;
&lt;h3&gt;AZ-204 Sertifika Sınavına Hazırlık Aşaması&lt;/h3&gt;
&lt;p&gt;&lt;br clear="none" /&gt;&amp;Ouml;ncelikle eski tecr&amp;uuml;belerimden, AZ-900 sınavına hazırlanırken yoğun olarak Microsoft'un resmi d&amp;ouml;k&amp;uuml;manını kullanmıştım. AZ-204 i&amp;ccedil;in de benzer şekilde olduk&amp;ccedil;a derli toplu&amp;nbsp;&lt;a title="AZ-204 eğtiim d&amp;ouml;k&amp;uuml;manı" href="https://docs.microsoft.com/en-us/learn/certifications/exams/az-204" target="_blank"&gt;bir dok&amp;uuml;man&lt;/a&gt;&amp;nbsp;var.&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;Bu dok&amp;uuml;man, online olarak aldığım eğitim i&amp;ccedil;eriği ve takvimi ile &amp;ccedil;ok benzer i&amp;ccedil;eriğe sahip. Online eğitim aldığım i&amp;ccedil;in bu d&amp;ouml;k&amp;uuml;manı takip etmedim. Sadece g&amp;uuml;venlik ve yedekleme derslerinde tam anlayamadığım kısımları g&amp;ouml;zden ge&amp;ccedil;irdim.&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;AZ-204 Developing Solutions For Microsoft Azure eğitimini 12 mod&amp;uuml;l olarak hazırlanmış ve 5 tam g&amp;uuml;n s&amp;uuml;r&amp;uuml;yor. Her g&amp;uuml;n yarı yarıya konu anlatımı, walkthrough ve lab &amp;ccedil;alışmalarından oluşuyor.&lt;br clear="none" /&gt;Eğitimi ESI platformu &amp;uuml;zerinden İngilizce alabildiğiniz gibi BilgeAdam da aynı eğitim i&amp;ccedil;eriğini T&amp;uuml;rk&amp;ccedil;e olarak veriyor.&lt;br clear="none" /&gt;Eğer sertifika ama&amp;ccedil;lı katılıyorsanız ve İngilizce'niz yeterli ise uluslarası versiyonu daha avantajlı olacaktır.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;Eğitimin mod&amp;uuml;lleri şu şekilde :&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Module 01: Create Azure App Service Web Apps&lt;/li&gt;
&lt;li&gt;Module 02: Implement Azure Functions&lt;/li&gt;
&lt;li&gt;Module 03: Develop solutions that use blob storage&lt;/li&gt;
&lt;li&gt;Module 04: Develop solutions that use Cosmos DB storage&lt;/li&gt;
&lt;li&gt;Module 05: Implement IaaS solutions&lt;/li&gt;
&lt;li&gt;Module 06: Implement user authentication and authorization&lt;/li&gt;
&lt;li&gt;Module 07: Implement secure cloud solutions&lt;/li&gt;
&lt;li&gt;Module 08: Implement API Management&lt;/li&gt;
&lt;li&gt;Module 09: Develop event-based solutions&lt;/li&gt;
&lt;li&gt;Module 10: Develop message-based solutions&lt;/li&gt;
&lt;li&gt;Module 11: Monitor and optimize Azure solutions&lt;/li&gt;
&lt;li&gt;Module 12: Integrate caching and content delivery within solutions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br clear="none" /&gt;Eğitimde yapılan&amp;nbsp;&lt;a href="https://microsoftlearning.github.io/AZ-204-DevelopingSolutionsforMicrosoftAzure/" target="_blank"&gt;lab &amp;ccedil;alışmalarına bu linkten&lt;/a&gt;&amp;nbsp;ulaşılabilir, Azure ortamına erişiminiz var ise lab &amp;ccedil;alışmalarını &amp;ccedil;alışma ortamınızda deneyebilirsiniz :&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;Eğitimi bitirdikten sonra aldığım notlar &amp;uuml;zerinden yukarıda bahsettiğim online Microsoft d&amp;ouml;k&amp;uuml;manı g&amp;ouml;zden ge&amp;ccedil;irip eksik noktalarımı okuyarak tamamlamaya &amp;ccedil;alıştım.&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;Şayet Microsoft'un online eğitimine erişiminz yok ise Udemy'deki&amp;nbsp;&lt;a href="https://www.udemy.com/course/70532-azure/" target="_blank"&gt;AZ-204 Developing for Microsoft Azure Exam Prep&lt;/a&gt;&amp;nbsp;eğitimi benzer bir i&amp;ccedil;eriği sunuyor. Konuları teorik bilgi &amp;uuml;zerinden anlatmak yerine daha &amp;ccedil;ok Azure Cloud Platform &amp;uuml;zerinde pratik olarak anlatmayı tercih etmiş eğitmen.&lt;br clear="none" /&gt;Bu i&amp;ccedil;eriğin faydası, eğitim tekrarının yanı sıra AZ-204 sertifika sınavının son kısmında yer alan lab sınav b&amp;ouml;l&amp;uuml;m&amp;uuml;ne aşina olmayı kolaylaştırması oldu benim i&amp;ccedil;in. Yazımın ilerleyen b&amp;ouml;l&amp;uuml;m&amp;uuml;nde bunla ilgili detay vermeye &amp;ccedil;alışacağım.&lt;br clear="none" /&gt;Kayıt olduğum online eğitimi aldıktan sonra kendimi eksik hissettiğim konuların b&amp;ouml;l&amp;uuml;mlerini bu pratik eğitim &amp;uuml;zerinden takip edip deneme sınavını &amp;ccedil;&amp;ouml;zd&amp;uuml;m.&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;Eğitim materyallerini bitirdikten sonra yine Scott Duffy'nin hazırladığı 4 ayrı deneme testini i&amp;ccedil;eren&amp;nbsp;&lt;a href="https://www.udemy.com/course/az204-azure-practice/" target="_blank"&gt;AZ-204 Microsoft Azure Developer Practice Tests&lt;/a&gt;&amp;nbsp;isimli eğitimi de alıp test materyalini &amp;ccedil;&amp;ouml;zd&amp;uuml;m.&lt;/p&gt;
&lt;h3&gt;&lt;br clear="none" /&gt;Microsoft ESI Exam Prep Eğitimi&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Microsoft ESI platformu ile sertifika i&amp;ccedil;in gerekli t&amp;uuml;m materyalleri hap haline getirip sunmuş. Online eğitimi aldıktan sonra sınav hazırlık eğitimi kategorisindeki Exam Prep eğitimini aldım. Bu eğitim 4 saatlik ve yine online bir eğitim. Bu eğitim Sınav hakkında genel bilgilendirme, sınav konularının &amp;ouml;zeti, &amp;ouml;rnek soru &amp;ccedil;&amp;ouml;z&amp;uuml;mleri i&amp;ccedil;eriyor. Stream video olarak izliyorsunuz eğitimi, istediğiniz zaman pause edebiliyorsunuz, sorunuz olursa mesajlaşma panelinden canlı olarak sorunuzu iletip cevap alabiliyorsunuz.&lt;br clear="none" /&gt;Bu eğitimin faydası &amp;ouml;rnek soruları g&amp;ouml;rmek ve AZ-204 sınavının lab kısmı hakkında bilgi edinmek oldu. Bu arada sınava online olarak kayıt olurken bu bahsettiğim eğitim de se&amp;ccedil;enek olarak sunuluyor. İsterseniz &amp;uuml;creti karşılığında alabiliyorsunuz.&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=/AZ-204/exam_prep_agenda.png" alt="" width="921" height="524" /&gt;&lt;br clear="none" /&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=/AZ-204/exam_weight.png" alt="" width="898" height="429" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;AZ-204 Sertifika Sınav ile İlgili Tavsiyeler&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;İlk tavsiyem sınava dinlenmiş, sakin bir kafa ile girmeniz. Ben haftai&amp;ccedil;i mesai sonrası girdim, sınavın ilk dakikalarında hatta ettiğimi anladım.&lt;br clear="none" /&gt;Sınav soruları &amp;ccedil;ok uzun metinler i&amp;ccedil;erebiliyor. Bu tarz soruları &amp;ouml;nce hızlıca tarayıp, se&amp;ccedil;eneklere g&amp;ouml;zatıp soruda ne isteniyor ve neden bahsediliyor anlayıp, sonrasında detaylı okumak vakit kazandırıyor. Aksi halde tekrar okumanız ya da sorunun belli b&amp;ouml;l&amp;uuml;mlerine tekrar d&amp;ouml;nmeniz gerekebiliyor.&lt;br clear="none" /&gt;Bazı sorular tek uzun metin olarak verilip, iki veya &amp;uuml;&amp;ccedil; ayrı şekilde farklı &amp;ccedil;&amp;ouml;z&amp;uuml;mler sorulabiliyor. Yani vakayı okuyup, bu vakaya farklı &amp;ccedil;&amp;ouml;z&amp;uuml;mleri farklı sorular şeklinde cevaplıyorsunuz.&lt;br clear="none" /&gt;Bazı sorular, &amp;ouml;zellikle dockerfile soruları, komutları se&amp;ccedil;enekler arasından s&amp;uuml;r&amp;uuml;kleyip sıralama şeklinde olabiliyor. Doğru komutları doğru sırada se&amp;ccedil;ip cevaplamanız gerekiyor. Sorudaki her detay bir komutu netleştiriyor.&lt;br clear="none" /&gt;Programlama soruları, Microsoft .NET framework'te ve &amp;ccedil;eşitli Microsoft SDK'larında &amp;ccedil;alışmış yazılımcılar i&amp;ccedil;in bi nebze kolay olabiliyor. Sorudaki k&amp;uuml;t&amp;uuml;phaneyi hi&amp;ccedil; bilmeseniz bile SDK'lara aşinalık ile &amp;ccedil;&amp;ouml;zebiliyorsunuz soruları.&lt;br clear="none" /&gt;Azure CLI, PowerShell komutlarının hep kendine has bir dizilimi var, bu dizilime lab &amp;ccedil;alışmalarında ve eğitimlerde aşina olduğunuzda, bilmediğiniz komutları dahi tahmin edebiliyorsunuz.&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;Kendi tecr&amp;uuml;beme g&amp;ouml;re dikkat etmek gereken konuları &amp;ccedil;ıkarmaya &amp;ccedil;alıştım, umarım faydası olur :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Azure Storage tipleri ve hangi durumlarda ve birbirlerinden farklarına&lt;/li&gt;
&lt;li&gt;Azure mesajlaşma &amp;ccedil;&amp;ouml;z&amp;uuml;mleri ve birbirinden farklarına&lt;/li&gt;
&lt;li&gt;Kaynakların CLI, PowerShell ve .NET SDK kodları ile nasıl yaratılıp y&amp;ouml;netileceğine&lt;/li&gt;
&lt;li&gt;Docker komutları ve belli bir senaryo i&amp;ccedil;in image oluşturma scripti ve sıralamasına&lt;/li&gt;
&lt;li&gt;Storage tierlarını anlamak ve birbirlerine avantajlarına&lt;/li&gt;
&lt;li&gt;API Management ile sunulan API'lere kısıt koyma y&amp;ouml;ntemlerine&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;aşina olmak gerekiyor.&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;Ayrıca sınavın son b&amp;ouml;l&amp;uuml;m&amp;uuml;, daha &amp;ouml;nce başka sınavlarda rastlamadığım pratik bilgiyi &amp;ouml;l&amp;ccedil;meye &amp;ccedil;alışan vaka şeklinde ilerliyor. 5-10 soruyu tek bir vaka i&amp;ccedil;erisinde soruyorlar. Vakaya konu olan şirketin tarih&amp;ccedil;esinden mevcut sistem mimarisine, mevcut uygulamalara a&amp;ccedil;ılmış olay kayıtlarından istenen &amp;ccedil;&amp;ouml;z&amp;uuml;mlerin detayına kadar &amp;ccedil;ok fazla materyal sunuluyor. Bu kısımda vaktinizi iyi değerlendirmeniz gerekiyor. T&amp;uuml;m materyali anlayıp sonra sorulara ge&amp;ccedil;mek mantıklı ve m&amp;uuml;mk&amp;uuml;n değil, &amp;ccedil;&amp;uuml;nk&amp;uuml; soruyu okuduğunuzda tekrar materyale d&amp;ouml;n&amp;uuml;p detayları taramanız gerekiyor.&lt;br clear="none" /&gt;Bundan dolayı &amp;ouml;ncelikle elimizde ne tarz bilgiler var diye hızlı bir tarama yapmanız ama detaya inmemenizi &amp;ouml;neririm. T&amp;uuml;m d&amp;ouml;k&amp;uuml;mana hızlıca bakıp, ilk soruyu okuyun, sonra bahsi ge&amp;ccedil;en olay kaydı, istenen mimari ya da &amp;ccedil;&amp;ouml;z&amp;uuml;mle ilgili d&amp;ouml;k&amp;uuml;mana d&amp;ouml;n&amp;uuml;p detayları okuyun, sonra soruyu &amp;ccedil;&amp;ouml;z&amp;uuml;n. Bu y&amp;ouml;ntem sınavın bu kısmında daha hızlı ilerlemenizi sağlayacaktır.&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;Sınav benim a&amp;ccedil;ımdan &amp;ouml;yle vaktimin bol bol yettiği ve erken bitirebildiğim tipte bir sınav olmadı, son dakikalarda iki soruyu fazla d&amp;uuml;ş&amp;uuml;nemeden kafadan atmak zorunda kaldım.&lt;br clear="none" /&gt;&amp;Ccedil;ok fazla metin ağırlıklı ve zihninizin a&amp;ccedil;ık olması gereken tipte bir sınav. Sabah saatleri taze zihin ile daha başarılı olacağımı d&amp;uuml;ş&amp;uuml;n&amp;uuml;yorum.&lt;br clear="none" /&gt;T&amp;uuml;m soruları yanıtlamaya &amp;ccedil;alışın, &amp;uuml;&amp;ccedil; yanlış bir doğruyu g&amp;ouml;t&amp;uuml;rm&amp;uuml;yor. Şıkları eleyip, en olası se&amp;ccedil;enekler arasından birini mutlaka se&amp;ccedil;in.&lt;br clear="none" /&gt;Emin olmadığınız soruları işaretlemek iyi bir tercih olabiliyor. Bir sorunun a&amp;ccedil;ıklama metni, bir diğer sorunun cevabı olabiliyor. D&amp;ouml;n&amp;uuml;p elinizdeki bilgi ile emin olmadığınız soruyu daha rahat cevaplayabiliyorsunuz.&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;Ayrıca&amp;nbsp;&lt;a href="https://docs.microsoft.com/en-us/learn/certifications/exam-duration-question-types" target="_blank"&gt;şu kaynakta&amp;nbsp;&lt;/a&gt;sınavlar hakkında detay bilgi ve soru &amp;ccedil;eşitleri ile ilgili &amp;ccedil;ok g&amp;uuml;zel videolar mevcut.&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;&lt;/p&gt;
&lt;h3&gt;AZ-204 Sertifika Sınavına Nasıl Girebilirim ?&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Sınava hazırlıklarınızı yaptınız, &amp;ouml;rnek sınavları tamamladınız ve kendinizi hazır hissediyorsunuz. Artık sınavı alma vakti geldi. Bu noktada iki se&amp;ccedil;enek mevcut. İlk se&amp;ccedil;enek bir anlaşmalı test merkezine kayıt olup fiziki olarak test merkezinde sınava katılmak.&lt;br clear="none" /&gt;Bunun faydası evinizde sınava uygun ortamı hazırlamanıza gerek kalmadan sınava &amp;ouml;zel hazırlanmış ortamda sınava katılıyor olmak.&lt;br clear="none" /&gt;Diğer bir se&amp;ccedil;enek ise Pearson VUE &amp;uuml;zerinden online olarak sınava girmek. Sınav ortamınızı ve &amp;ouml;n hazırlıkları kendiniz hazırlayıp sınava giriyorsunuz, kamera ile izleniyorsunuz, sınava girme deneyimi birebir test merkezi ile aynı.&lt;br clear="none" /&gt;Kariyerimin ilk yıllarında sınav merkezlerinde sınava girmiştim. AZ-900 ve AZ-204'&amp;uuml; online olarak aldım. Sınava nasıl kayıt olunur, voucher'ınız var ise nasıl kullanılır bunların hepsi&amp;nbsp;&lt;a href="https://docs.microsoft.com/en-us/learn/certifications/register-schedule-exam" target="_blank"&gt;şu d&amp;ouml;k&amp;uuml;manda&lt;/a&gt;&amp;nbsp;detayları ile anlatılıyor.&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;Size uygun tarihi se&amp;ccedil;ip sınava kaydolduktan sonra kayıtlı mailinize sınavla ilgili &amp;ouml;n kontrol komutları geliyor. Buradaki &amp;ouml;rnek test uygulamasını &amp;ccedil;alıştırıp bir sorun yaşamadığınızdan emin olun. Sınav g&amp;uuml;n&amp;uuml; bu &amp;ouml;rnek uygulamanın asıl versiyonunu kullanıyor olacaksınız. hoş olmayan bir s&amp;uuml;rpriz yaşamamak i&amp;ccedil;in bu adım &amp;ccedil;ok &amp;ouml;nemli.&lt;br clear="none" /&gt;Sınav g&amp;uuml;n&amp;uuml; geldiğinde yarım saat &amp;ouml;ncesinden sisteme girin. Sizden sınav ortamınızı ve kimlik bilgilerinizi kayıtlı telefonunuzdan resim olarak &amp;ccedil;ekip g&amp;ouml;ndermeniz beklenecek. Bilgisayarınızı elektronik aletlerden &amp;ouml;zellikle tv veya ek monit&amp;ouml;r gibi ekranlardan uzak bir masada konumlandırın. Işık seviyesi web cam'de rahat g&amp;ouml;r&amp;uuml;lebileceğiniz seviyede olmalı.&lt;br clear="none" /&gt;Bilgisayarınızın ve oturacağınız sandalyenin d&amp;ouml;rt bir yanından resmini &amp;ccedil;ekip g&amp;ouml;ndermeniz i&amp;ccedil;in bir link g&amp;ouml;nderiliyor. Kimliğinizin &amp;ouml;n&amp;uuml;n&amp;uuml; ve arkasını &amp;ccedil;ekip aynı uygulama vasıtasıyla y&amp;uuml;kl&amp;uuml;yorsunuz.&lt;br clear="none" /&gt;Sonrasında telefonuzu masadan uzak bir yere koyup sınavın başlamasını bekliyorsunuz.&lt;br clear="none" /&gt;Sınav sırasında etrafınızda su, kalem kağıt, telefon gibi herhangi bir şey bulunmamalı. Ortamda herhangi bir ses bulunmamalı.&lt;br clear="none" /&gt;Sınav başlamadan hemen &amp;ouml;nce bir mesaj uygulaması a&amp;ccedil;ılıp, sizi izleyecek kişi sizinle bağlantı kuruyor, ortamınızı kontrol ediyor, bilgisayarınızı yavaş&amp;ccedil;a 360 derece d&amp;ouml;nd&amp;uuml;rerek ortamınızı g&amp;ouml;rmek istiyor. bu istenenleri tamamladıktan sonra sınavınız i&amp;ccedil;in uygunluk veriyor.&lt;br clear="none" /&gt;Dış ortam seslerini kesmesi i&amp;ccedil;in kulaklık takmak istedim, fakat izin verilmedi.&lt;br clear="none" /&gt;Sınav sırasında kamera alanından &amp;ccedil;ıkmamaya &amp;ccedil;alışın. Ben zorlandığım yerlerde bilgisayara eğildiğim i&amp;ccedil;in iki kere uyarı aldım, robotik bir şekilde kas ağrıları ile sınavı bitirmek zorunda kaldım :)&lt;br clear="none" /&gt;Sınav i&amp;ccedil;eriği ve soru ge&amp;ccedil;işleri ile ilgili bilgileri yukarıda paylaştığım i&amp;ccedil;in bu kısma değinmiyorum.&lt;br clear="none" /&gt;Sınavı tamamladığınız gibi sonu&amp;ccedil; hesaplanıp size bildiriliyor, aynı şekilde kayıtlı mail adresinize ve Microsoft sertifikasyon dashboard'ınıza anında ekleniyor.&lt;br clear="none" /&gt;&lt;br clear="none" /&gt;Elimden geldiğinde detaylı bir şekilde tecr&amp;uuml;belerimi not alıp paylaşmaya &amp;ccedil;alıştım.&lt;br clear="none" /&gt;Atladığım veya tam a&amp;ccedil;ıklayamadığım bir kısım var ise bana ulaşmaktan &amp;ccedil;ekinmeyin, cevabı biliyorsam paylaşmak isterim :)&lt;/p&gt;
&lt;p&gt;&lt;br clear="none" /&gt;Sınava girmek isteyen arkadaşlara şimdiden&amp;nbsp;&lt;strong&gt;boş şans !&lt;/strong&gt;&lt;/p&gt;</description>
      <link>http://merhanersoy.net/post/2022/04/20/az-204-sertifikasi</link>
      <author>merhanersoy@gmail.com</author>
      <comments>http://merhanersoy.net/post/2022/04/20/az-204-sertifikasi#comment</comments>
      <guid>http://merhanersoy.net/post.aspx?id=6c43b902-3c23-47dd-933f-1e815af64188</guid>
      <pubDate>Per, 21 Nis 2022 01:09:00 +0300</pubDate>
      <category>sertifikalar</category>
      <dc:publisher>meersoy</dc:publisher>
      <pingback:server>http://merhanersoy.net/pingback.axd</pingback:server>
      <pingback:target>http://merhanersoy.net/post.aspx?id=6c43b902-3c23-47dd-933f-1e815af64188</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://merhanersoy.net/trackback.axd?id=6c43b902-3c23-47dd-933f-1e815af64188</trackback:ping>
      <wfw:comment>http://merhanersoy.net/post/2022/04/20/az-204-sertifikasi#comment</wfw:comment>
      <wfw:commentRss>http://merhanersoy.net/syndication.axd?post=6c43b902-3c23-47dd-933f-1e815af64188</wfw:commentRss>
    </item>
    <item>
      <title>SonarCube Bulgu Çözümleri : IDisposible arayüzünün uygulanması</title>
      <description>&lt;p&gt;İki yılı aşkın s&amp;uuml;redir şirketimizin g&amp;uuml;ndeminde olan &lt;a href="https://www.sonarqube.org/" target="_blank"&gt;Sonar Cube&lt;/a&gt; kod analis uygulaması vasıtasıyla projelerimizi kod analizine tabii tutup, kod kalitemizi y&amp;uuml;kseltmeye ve y&amp;uuml;ksek tutmaya &amp;ccedil;alışıyoruz. Bu kapsamda ekiplerimizde bazı bulgu &amp;ccedil;&amp;ouml;z&amp;uuml;mleri noktasında sorular ve destek talepleri gelebiliyor. Bir yazı dizisi ile bu destek talebi gelen bulgular ya da Sonar Cube kod analiz kuralları hakkında bir yazı dizisi yapmaya karar verdim.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Classes with "IDisposable" members should implement "IDisposable"&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Bu yazımda ele alacağımız Sonar Cube kritik hata bulgusu :&amp;nbsp;&lt;strong&gt;&lt;a href="https://rules.sonarsource.com/csharp/tag/cwe/RSPEC-2931" target="_blank"&gt;Classes with "IDisposable" members should implement "IDisposable"&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bu analiz kuralı kritik bulgu seviyesinde ve gayet &amp;ouml;nemli bir noktaya parmak basıyor. Uygulamamız i&amp;ccedil;ersinde kullandığımız kaynakları bırakmamamız durumunda sunucularımızda meydana gelebilecek performans sorunları ve sistem kaynaklarının k&amp;ouml;t&amp;uuml;ye kullanımına sebep olacak durumların &amp;ouml;n&amp;uuml;ne ge&amp;ccedil;meye &amp;ccedil;alışıyor.&lt;/p&gt;
&lt;p&gt;Sonar bulgu a&amp;ccedil;ıklamasında &amp;ouml;rneğinin iletildiği gibi, projemizdeki bir sınıf eğer dispose edilmesi gereken bir kaynağı sınıfın bir &amp;uuml;yesi olarak kullanıyor ise sınıfın IDisposible aray&amp;uuml;z&amp;uuml;n&amp;uuml; uygulayıp bu kaynağı Dispose metodunda elden &amp;ccedil;ıkarması gerekir. Ya da bu kaynak sınıfın bir &amp;uuml;yesi olarak değil de gerekli olan metod i&amp;ccedil;erisinde yaratılıp using bloku i&amp;ccedil;erisinde kullanılabilir.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Bu &amp;ccedil;&amp;ouml;z&amp;uuml;m uygulanınca yeni bir sonar code smell&amp;rsquo;i yaratıyor olabiliriz : &lt;a href="https://rules.sonarsource.com/csharp/RSPEC-3881" target="_blank"&gt;"IDisposable" should be implemented correctly&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bu code smell&amp;rsquo;i &amp;ccedil;&amp;ouml;zmek i&amp;ccedil;in de eğer sınıfımız başka sınıfları t&amp;uuml;retmiyor ise sınıfı m&amp;uuml;h&amp;uuml;rlemek yani sealed hale getirmek, aksi halde de aşağıdaki gibi geliştirme yapmak sorunu &amp;ccedil;&amp;ouml;zecektir. Yani bu yazımda biri kritik bulgu, biri de code smell olan iki ayrı kod analiz bulgusuna uygulanacak &amp;ccedil;&amp;ouml;z&amp;uuml;m&amp;uuml; inceliyor olacağız.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&amp;Ouml;rnek &amp;Ccedil;&amp;ouml;z&amp;uuml;m 1&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public class ResourceHolder : IDisposable
{
        private FileStream fs;

        public void OpenResource(string path)
        {
            this.fs = new FileStream(path, FileMode.Open); 
        }

        public void CloseResource()
        {
            this.fs.Close();
        }

        public void Dispose() { 
		Dispose(true); 
		GC.SuppressFinalize(this); 
	} 

	protected virtual void Dispose(bool disposing) { 
		this.fs.Dispose(); 
	}
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&amp;Ouml;rnek &amp;Ccedil;&amp;ouml;z&amp;uuml;m 2&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public sealed class ResourceHolder : IDisposable
{
        private FileStream fs;

        public void OpenResource(string path)
        {
            this.fs = new FileStream(path, FileMode.Open);
        }

        public void CloseResource()
        {
            this.fs.Close();
        }

        public void Dispose()
        {
            this.fs.Dispose();
        }
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style="white-space: normal;"&gt;&amp;Ouml;rnek &amp;Ccedil;&amp;ouml;z&amp;uuml;m 3&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public class ResourceHolder
{
        public void OpenResource(string path)
        {
            using (FileStream fs = new FileStream(path, FileMode.Open))
            {
                // burada fs'i kullanalım
            }
        }
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Sonu&amp;ccedil;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;IDisposible aray&amp;uuml;z&amp;uuml; ve doğru kullanımı ile alakalı iki farklı sonar kod analis kuralını incelemiş ve &amp;uuml;&amp;ccedil; farklı &amp;ccedil;&amp;ouml;z&amp;uuml;m &amp;ouml;nerisi getirdik. Bu yazımın devamında benzer Sonar Cube Kod Analiz kurallarına değiniyor olacağız. Eğer siz de belli bir kural hakkında detay ve &amp;ccedil;&amp;ouml;z&amp;uuml;m &amp;ouml;nerileri istiyorsanız bana ulaşıp haber vermeniz yeterli, kodu inceleyip beraber bir yazı ele alabiliriz.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <link>http://merhanersoy.net/post/2020/06/14/SonarCube-Bulgu-Cozumleri-IDisposible-arayuzunun-uygulanmas%C4%B1</link>
      <author>merhanersoy@gmail.com</author>
      <comments>http://merhanersoy.net/post/2020/06/14/SonarCube-Bulgu-Cozumleri-IDisposible-arayuzunun-uygulanmas%C4%B1#comment</comments>
      <guid>http://merhanersoy.net/post.aspx?id=06a2d823-0928-40f7-a919-2971a0a4e372</guid>
      <pubDate>Pzt, 15 Haz 2020 00:47:00 +0300</pubDate>
      <category>sonar cube kod analizi</category>
      <dc:publisher>meersoy</dc:publisher>
      <pingback:server>http://merhanersoy.net/pingback.axd</pingback:server>
      <pingback:target>http://merhanersoy.net/post.aspx?id=06a2d823-0928-40f7-a919-2971a0a4e372</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://merhanersoy.net/trackback.axd?id=06a2d823-0928-40f7-a919-2971a0a4e372</trackback:ping>
      <wfw:comment>http://merhanersoy.net/post/2020/06/14/SonarCube-Bulgu-Cozumleri-IDisposible-arayuzunun-uygulanmas%C4%B1#comment</wfw:comment>
      <wfw:commentRss>http://merhanersoy.net/syndication.axd?post=06a2d823-0928-40f7-a919-2971a0a4e372</wfw:commentRss>
    </item>
    <item>
      <title>WCF Client Kaynaklarının Elden Çıkarılması</title>
      <description>&lt;p&gt;Blog yazılarıma verdiğim uzun bir aradan sonra ısınma ama&amp;ccedil;lı olarak, ge&amp;ccedil;tiğimiz hafta uğraştığım bir sorun ve &amp;ccedil;&amp;ouml;z&amp;uuml;m&amp;uuml; ile yazılarıma tekrar d&amp;ouml;nmek istiyorum. Yaklaşık 6 senedir kullandığımız bir WCF uygulamamızı windows service olarak host ediyoruz. Uygulama yıllardır gayet performanslı ve sorunsuz &amp;ccedil;alışrıken son 6 aydır g&amp;uuml;n aşırı&amp;nbsp; farklı sebeplerden sorun oluşturmaya başladı. Bir s&amp;uuml;redir bakımını yaptığımız uygulamada son karşılaştığımız sorunlardan biri servise gelen taleplerin yoğun olduğu anlarda "&lt;span style="background-color: #eff0f1; color: #242729; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; font-size: 13px; white-space: pre-wrap;"&gt;Thread was being aborted&lt;/span&gt;" hatası ile taleplerin kesilmesi ve işlemlerin yarım kalması idi. İlk ş&amp;uuml;phelendiğimiz nokta, servise aynı sunucudan iki farklı talep oluştuğunda yeni a&amp;ccedil;ılan bağlantının &amp;ouml;nceki aktif bağlantıyı kopartıyor oluşu idi. Konu bir yandan tutarsız g&amp;ouml;z&amp;uuml;k&amp;uuml;yor, bir yandan da sorunun sebebinin bu olduğunun tam bir kanıtını bulamıyorduk.&lt;/p&gt;
&lt;p&gt;Stackoverflow'da yaptığımız araştırmalar sorunucunda sorunun genel bir programlama hatasından kaynaklandığını, istemci uygulamada oluşturulan istemci proxy nesnelerinin Close metodu ile kapatılmadan elden &amp;ccedil;ıkarılmaması, yoğun anlarda uygulamanın "&lt;span style="background-color: #eff0f1; color: #242729; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, sans-serif; font-size: 13px; white-space: pre-wrap;"&gt;Thread was being aborted&lt;/span&gt;" hatası atmasına sebep olduğunu g&amp;ouml;rd&amp;uuml;k. Ger&amp;ccedil;ekten de servis &amp;ccedil;ağrılarında s&amp;uuml;rekli yeni bir istemci nesne yaratıp, istek sonucu d&amp;ouml;n&amp;uuml;nce istemciki kapatmadan işlemi sonlandırıyordu uygulamamız. Doğru kullanım ise aşağıdaki gibi kullanılan kaynakları sağlıklı bir şekilde serbest bırakması :&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;var client = new WCFServiceProxy();
try
{
    client.DoSomeWork();
    client.Close();
}
catch (Exception e)
{
    // log...
    client.Abort();
    throw;
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;StackOverflow'da karşılaştığım sorun ve &amp;ccedil;&amp;ouml;z&amp;uuml;m :&amp;nbsp;&lt;a href="https://stackoverflow.com/questions/3812770/thread-was-being-aborted-in-wcf-service-call#"&gt;&amp;ldquo;Thread was being aborted&amp;rdquo; in WCF Service Call&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bulduğumuz &amp;ccedil;&amp;ouml;z&amp;uuml;m sorunu &amp;ccedil;&amp;ouml;zecek fakat ilerde bu yanlış kullanımın &amp;ouml;n&amp;uuml;ne ge&amp;ccedil;meyi sağlamayacaktı. Yazılımcı servis kullanımı sonrası yarattığı istemciyi kapatmayı unuttuğu takdirde ileriki zamanlarda tekrar sorun ortaya &amp;ccedil;ıkacak. Bundan dolayı istemci proxy'nin yaratılmasını sağlayan bir yardımcı sınıfımız olduğu gibi, bu yaratılan istemcinin olması gerektiği gibi kapatılmasından da sorumlu olmalı idi. Yani tek bir noktada istemci sınıfını yaratıp, hayat d&amp;ouml;ng&amp;uuml;s&amp;uuml;n&amp;uuml; y&amp;ouml;neterek, kullanan yazılımcıdan encapsule etmeliydik.&lt;/p&gt;
&lt;p&gt;WCF istemci proxy sınıfını &lt;strong&gt;using&lt;/strong&gt; ile kullanıp gerektiğinde elden &amp;ccedil;ıkarılmasının sağlanması da bir opsiyon fakat bu &amp;ccedil;&amp;ouml;z&amp;uuml;mde yine yazılımcının unutması halinde soruna sebep olabilecek bir durum. Ayrıca &lt;a href="https://blog.marcgravell.com/2008/11/dontdontuse-using.html"&gt;Marc Gravell'in şu makalesinde&lt;/a&gt; bahsettiği &amp;uuml;zere framework'te bulunan bazı sorunlardan dolayı &lt;strong&gt;ClientBase&lt;/strong&gt; sınıfının her zaman d&amp;uuml;zg&amp;uuml;n dispose edilemiyor. Marc Gravell makalesinde extension metodlar ile istediğim tarz &amp;ccedil;&amp;ouml;z&amp;uuml;me bir &amp;ouml;rnek vermiş. Ancak ben "&lt;a href="http://web.archive.org/web/20100703123454/http://old.iserviceoriented.com/blog/post/Indisposable+-+WCF+Gotcha+1.aspx"&gt;Indisposable: WCF Gotcha #1&lt;/a&gt;" makalesindeki gibi bir &amp;ccedil;&amp;ouml;z&amp;uuml;m ile proxy istemcisinin yaratılmasını ve sonlandırılmasını sağlayacak komple bir &amp;ccedil;&amp;ouml;z&amp;uuml;m&amp;uuml; tercih etmeyi daha uygun g&amp;ouml;r&amp;uuml;yorum.&lt;/p&gt;
&lt;p&gt;İstemciyi yaratıp kullanan bir &amp;ouml;rnek :&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;Service&amp;lt;IWCFServiceProxy&amp;gt;.Use(client=&amp;gt;
{
  client.DoSomeWork();
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Use extension metodu :&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public delegate void UseServiceDelegate&amp;lt;T&amp;gt;(T proxy);

public static class Service&amp;lt;T&amp;gt;
{
    public static ChannelFactory&amp;lt;T&amp;gt; _channelFactory = new ChannelFactory&amp;lt;T&amp;gt;(""); 

    public static void Use(UseServiceDelegate&amp;lt;T&amp;gt; codeBlock)
    {
        IClientChannel proxy = (IClientChannel)_channelFactory.CreateChannel();
        bool success = false;
        try
        {
            codeBlock((T)proxy);
            proxy.Close();
            success = true;
        }
        finally
        {
            if (!success)
            {
                proxy.Abort();
            }
        }
    }
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Yukarıdaki metodda g&amp;ouml;r&amp;uuml;ld&amp;uuml;ğ&amp;uuml; gibi UseServiceDelegate delegate'i ile yazılımcının servis &amp;ccedil;ağrısı, Use extension metodu i&amp;ccedil;erisinde oluşturulan istemci sınıfı kullanarak &amp;ccedil;alıştırılıp, delegate tamamlanınca istemci olması gerektiği gibi kapatılıyor. Bizim kendi &amp;ouml;rneğimizde olduğu gibi WCF istemcisine ge&amp;ccedil;ilen ek konfigurasyon değerleri var ise, ki bu konfigurasyonları uygulamanın config dosyası yerine kodda ge&amp;ccedil;meyi uygun g&amp;ouml;rd&amp;uuml;k, metod i&amp;ccedil;ersinde tanımlanabilir. B&amp;ouml;ylece istemci sınıfın yaratılması ve kapatılması ile ilgili t&amp;uuml;m detayları kullanıcı yazılımcıdan saklamış ve kod &amp;ccedil;oklanmasının da &amp;ouml;n&amp;uuml;ne ge&amp;ccedil;miş oluyoruz.&lt;/p&gt;</description>
      <link>http://merhanersoy.net/post/2020/02/16/WCF-Client-Kaynaklar%C4%B1n%C4%B1n-Elden-C%C4%B1kar%C4%B1lmas%C4%B1</link>
      <author>merhanersoy@gmail.com</author>
      <comments>http://merhanersoy.net/post/2020/02/16/WCF-Client-Kaynaklar%C4%B1n%C4%B1n-Elden-C%C4%B1kar%C4%B1lmas%C4%B1#comment</comments>
      <guid>http://merhanersoy.net/post.aspx?id=a6dd9b4d-93cb-4ee7-8411-b6fb29226dd0</guid>
      <pubDate>Paz, 16 Şub 2020 15:23:00 +0300</pubDate>
      <category>asp.net</category>
      <dc:publisher>meersoy</dc:publisher>
      <pingback:server>http://merhanersoy.net/pingback.axd</pingback:server>
      <pingback:target>http://merhanersoy.net/post.aspx?id=a6dd9b4d-93cb-4ee7-8411-b6fb29226dd0</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://merhanersoy.net/trackback.axd?id=a6dd9b4d-93cb-4ee7-8411-b6fb29226dd0</trackback:ping>
      <wfw:comment>http://merhanersoy.net/post/2020/02/16/WCF-Client-Kaynaklar%C4%B1n%C4%B1n-Elden-C%C4%B1kar%C4%B1lmas%C4%B1#comment</wfw:comment>
      <wfw:commentRss>http://merhanersoy.net/syndication.axd?post=a6dd9b4d-93cb-4ee7-8411-b6fb29226dd0</wfw:commentRss>
    </item>
    <item>
      <title>Bulut Uygulamaları İçin Dayanıklılık (Resiliency) Tasarım Desenleri</title>
      <description>&lt;p&gt;Dayanıklılık, zor durumlar ile başa &amp;ccedil;ıkabilme, ayağa kalkabilme ve tekrar devam edebilmektir. Yazılım d&amp;uuml;nyasında dayanıklılık ise bir uygulamanın hata durumlarına d&amp;uuml;şt&amp;uuml;ğ&amp;uuml;nde durumu y&amp;ouml;netebilmesi, tekrar &amp;ccedil;alışır hale gelebilmesi ve sorunlu durumdan tamamen kullanılmaz hale gelmeden kurtulabilmesi diyebiliriz. Uygulamanın devamlılığını sağlayabilmesi, geliştiricileri olarak bizlerin sorumluluğudur. Ayrıca bu tarz durumlarda yine sorunu &amp;ccedil;&amp;ouml;zebilmek i&amp;ccedil;in gecesi g&amp;uuml;nd&amp;uuml;z&amp;uuml;ne karışanlar gene biz yazılım geliştiriciler oluyoruz. Dolayısıyla uygulama geliştirirken dayanıklılık konusu da tasarımımızın bir par&amp;ccedil;ası olmalı, gerekli yerlerde mimarimize bu tarz sorunlu durumlarda hayatımızı kolaylaştıracak m&amp;uuml;dahaleler yapmalıyız. &lt;a href="https://docs.microsoft.com/en-us/visualstudio/ide/how-to-sign-application-and-deployment-manifests?view=vs-2017" target="_blank"&gt;MSDN'in bu linkteki makaleler&lt;/a&gt; zincirini okurken kendi adıma aldığım kısa notlar olarak yazdığım &lt;span style="text-decoration: underline;"&gt;bu yazıdaki &amp;ccedil;oğu g&amp;ouml;rsel kaynak da yine aynı makalelerden alınmıştır&lt;/span&gt;.&lt;/p&gt;
&lt;h2&gt;Bulkhead Tasarım Deseni&lt;/h2&gt;
&lt;p&gt;Bulkhead, gemilerde kullanılan, geminin g&amp;ouml;vdesini odalara ayırarak tehlikeli durumlara karşı gemiyi koruma y&amp;ouml;ntemidir. Bu sayede ayrık odalardan birinde meydana gelecek kaza ve su sızıntısı, geminin tamamının su almasını engeller.&lt;/p&gt;
&lt;p&gt;Uygulama i&amp;ccedil;erisinde &amp;ouml;zellikle yoğun kullanılan servisleri ayrı uygulama havuzları (pool) ile &amp;ccedil;alıştırarak kaynakların paylaşılması sağlanır. Bir serviste oluşacak sistem yoğunluğu ya da hatalar silsilesi, sadece bir havuzu etkileyeceğinden, uygulama altındaki diğer servisler etkilenmeden &amp;ccedil;alışmaya devam edebilirler. Bazı senaryolarda uygulamanın mimarisinin anlaşılmasının zorlaştırabilir, bu gibi durumlarda faydası ile karşılaştırarak tercih edilebilir.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2019%2f5%2fbulkhead.jpg" alt="gemi b&amp;ouml;lmesi" /&gt;&amp;nbsp; &lt;img src="http://merhanersoy.net/image.axd?picture=2019%2f5%2fbulkhead_example.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Devre Kesici (Circuit Breaker) Tasarım Deseni&lt;/h2&gt;
&lt;p&gt;Uygulamalarımız bazen hata durumuna d&amp;uuml;şer ve bu hata durumlarından &amp;ccedil;ıkması, m&amp;uuml;dahale s&amp;uuml;resi vakit alabilir. Bu tarz bir durumda, uygulama gelen istekleri karşılayamaz ve s&amp;uuml;rekli hatalar verir. Belki arka planda yarım işlemler bırakır. Ya da uygulama zaman aşımına d&amp;uuml;şme durumlarında istemci uygulamaya hata mesajının d&amp;ouml;nmesi vakit alabilir. Biriken yeni talepler gitgide daha fazla soruna sebep olabilir. İşte bu tarz sorunlu anlarda uygulamanın bu durumu, tamamıyla hata durumuna d&amp;uuml;şmeden, kolay bir şekilde atlatabilmesi i&amp;ccedil;in tasarlanmış devre kesici - circuit breaker tasarım desenini kullanabilir.&lt;/p&gt;
&lt;p&gt;Bu tasarım desenine g&amp;ouml;re uygulamamız &amp;uuml;&amp;ccedil; ayrı durumda bulunabilir.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kapalı Durum (Closed) :&lt;/strong&gt; Kapalı elektrik devresi gibi d&amp;uuml;ş&amp;uuml;nebiliriz. Uygulamamız gelen isteklere cevap verebilir durumdadır ve gelen istekleri işler, cevap d&amp;ouml;ner. Hata alınması durumunda bir saya&amp;ccedil; değeri arttırılarak tutulur.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yarı A&amp;ccedil;ık Durum (Half-Open) :&lt;/strong&gt; Uygulama gelen isteklerin bazılarını işler, bazılarına ise hızlıca hata mesajı d&amp;ouml;ner. İşlenen istekler hata alırsa saya&amp;ccedil; arttırılmaya devam eder.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A&amp;ccedil;ık durum (Open) :&lt;/strong&gt; Uygulama stabil durumda değildir. Gelen isteklere belli bir zaman aşımı s&amp;uuml;resine kadar hata d&amp;ouml;ner ve istekleri işlemeye &amp;ccedil;alışmaz.&lt;/p&gt;
&lt;p&gt;Bu tasarım deseni dış kaynaklara erişilen durumlarda tercih edilebilir. Uygulama i&amp;ccedil;i kaynakların kullanıldığı durumlarda ek bir mekanizma olacağından y&amp;uuml;k getirebilir.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2019%2f5%2fcircuit_breaker_example.png" alt="" /&gt;&lt;/p&gt;
&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;Telafi İşlem Tasarım Deseni&lt;/h2&gt;
&lt;p&gt;Başlattığımız bir işlemin hata alması durumunda işlemin rollback edilmesi geliştirme sırasında sıklıkla &amp;ccedil;alıştığımız bir senaryodur. Eğer &amp;ccedil;alıştığımız sistem, birbirine bağlı microservice veya entegre uygulamalardan oluşuyor ise rollback mekanizması sıkı kurallara sahip ve tutarlı olamayabilir. Her yapılan işlemin tersini veya hata durumunda yapılacak işlemleri i&amp;ccedil;eren bir metodunun olması gerekir. Bazen par&amp;ccedil;alı işlemlerden bir kısmı ger&amp;ccedil;ekleştirilip, bir aşamasında hata alındığında, uygulamaya bağlı olarak, her zaman işlemler tersine &amp;ccedil;evrilmeyebilir. Yerine alternatif işlemler yapıldığı durumlar da olabilir. Mesela birden fazla noktaya u&amp;ccedil;uş planladığımız bir u&amp;ccedil;uş planının bir kısmı ger&amp;ccedil;ekleştirilirken, bir aşamasında hata alındığını d&amp;uuml;ş&amp;uuml;nelim. Bu hata alınan aşamada alınmış olan biletleri iptal etmek yerine belki kullanıcı onayı ile farklı bir tarihteki u&amp;ccedil;uş ile veya farklı bir sağlayıcıdan girilecek bir tarife ile alternatif bir &amp;ccedil;&amp;ouml;z&amp;uuml;m bulunabilir. Bu mekanizma geliştirilen uygulama &amp;ouml;zelinde bir senaryo tasarlanarak incelenmelidir. Bu tasarımlar sırasında rollback veya telafi işlemin ger&amp;ccedil;ekleştirilmesi sırasında alınabilecek hatalar da g&amp;ouml;z &amp;ouml;n&amp;uuml;nde bulundurulmalı.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Aslında benim fikrim bu konu dayanıklılık konusu dışında zaten tasarım aşamasında d&amp;uuml;ş&amp;uuml;n&amp;uuml;lmesi gereken senaryolardan biri. Sistem hataları olması durumunda uygulamanın dayanıklılığından ziyade m&amp;uuml;şteri deneyimini iyileştirmeye y&amp;ouml;nelik bir &amp;ccedil;alışma. Ayrıca hatalı ya da yarım kalıp tamamlanamayacak işlemler konusunda nasıl aksiyon alınacağının y&amp;ouml;netimi yine bu tarz &amp;ccedil;alışmalarda d&amp;uuml;ş&amp;uuml;n&amp;uuml;lmesi gereken başlıklardan.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Uygulama Sağlığı İzleme Noktaları (Health Monitoring Endpoints)&lt;/h2&gt;
&lt;p&gt;Uygulamalarımız arka planda bir &amp;ccedil;ok kaynağı kullanıyor ve bu kaynaklara erişimde sunucu bazlı sorunlarla karşılaşıyor olabiliriz. Uygulamamız bulutta veya sunucuda &amp;ccedil;alıştığı durumlarda her an elimizin altında olmadığından sunucularda olabilecek sorunları sorun iletilmeden fark edebilmek &amp;ccedil;ok &amp;ouml;nemli. Bu tarz sistem kaynaklarına erişim ve network seviyesindeki gecikmeleri izleyebilmek i&amp;ccedil;in uygulamalara bu kontrolleri yapan birer erişim noktası tanımlanıp, belli aralıklarla uygulamanın sağlığı ve gelen isteklere cevap s&amp;uuml;releri kontrol edilir. Hatta uygulamanın başka servislere entegrasyon noktaları ve cevap s&amp;uuml;releri de kontroller i&amp;ccedil;erisine alınıp, t&amp;uuml;m erişim ve performans takibi yapılabilir.&lt;/p&gt;
&lt;p&gt;Kısaca şu kaynakların erişimi ve cevap s&amp;uuml;relerini izlemek faydalı olacaktır :&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Var ise disk erişimi&lt;/li&gt;
&lt;li&gt;Var ise ağ dizini erişimi&lt;/li&gt;
&lt;li&gt;Veritabanı erişimi&lt;/li&gt;
&lt;li&gt;CDN'de tutulan script veya css gibi kaynaklar var ise bunlara erişim&lt;/li&gt;
&lt;li&gt;Dış entegrasyon servislerine erişim&lt;/li&gt;
&lt;li&gt;Sertifika validasyonları&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2019%2f5%2fhealth-endpoint-monitoring-pattern.png" alt="" /&gt;&lt;/p&gt;
&lt;h2&gt;Lider Se&amp;ccedil;im Deseni&lt;/h2&gt;
&lt;p&gt;Uygulamalarımızda toplu olarak ve birbiri ile koordineli olarak &amp;ccedil;alışması gereken işlemler yer aldığında bir thread veya instance tarafından işlenen işin bir diğer thread veya instance tarafından ezilmesini engellemek ve eldeki t&amp;uuml;m kaynakları koordine edecek bir lidere ihtiya&amp;ccedil; duyarız. Bu liderin kaynaklar i&amp;ccedil;erisinden se&amp;ccedil;ilip, liderin bir sorun yaşaması halinde ya da lidere erişilemez hale geldiği bir durumda yeni bir liderin se&amp;ccedil;ilebilmesini sağlayan bir tasarıma ihtiya&amp;ccedil; olur. Liderin diğer kaynaklar gibi işi yapması gerekmeyebilir. Liderin tek işi koordinasyon ve diğer kaynakların birbiri ile &amp;ccedil;akışmaması olabilir. Liderin sistem i&amp;ccedil;in bir darboğaz oluşturmaması gerekir. Eğer t&amp;uuml;m kaynaklar aynı kodu &amp;ccedil;alıştırıyor ise t&amp;uuml;m kaynaklar lider olabilme potansiyeline sahip demektir, bu durumda birden fazla lider se&amp;ccedil;imi yapılmaması dikkat edilecek &amp;ouml;nemli noktalardan bir tanesidir.&lt;/p&gt;
&lt;p&gt;Aşağıdaki &amp;ouml;rneğe bakarsak, işlemleri yapan &amp;uuml;&amp;ccedil; ayrı instance g&amp;ouml;r&amp;uuml;yoruz. &amp;Uuml;&amp;ccedil;&amp;uuml; de aynı liderlik metodunu &amp;ccedil;ağırıyor, 1 nolu instance metodu ilk &amp;ccedil;ağırdığı i&amp;ccedil;in liderlik rol&amp;uuml;n&amp;uuml; alıyor ve metodu locklıyor. 2 ve 3 nolu instance'lar liderlik rol&amp;uuml;n&amp;uuml; alamıyor, ama belli aralıklarla liderlik rol&amp;uuml;n&amp;uuml; metodunu &amp;ccedil;ağırmaya devam ediyorlar.&lt;/p&gt;
&lt;p&gt;Liderliği elde eden 1 nolu instance elindeki işleri diğer 2 ve 3 nolu instance'lara paylaştırıyor. Bu arada liderin sağlıklı olduğunu ve işini yapabildiğini kontrol edebilmek i&amp;ccedil;in lider belli zaman aralığında liderlik vasfını yeniliyor. Eğer liderde bir sorun var ise lock kalkıyor, yapılan işlemler geri alınıyor. Diğer instancelar'dan biri lider olup koordinasyonu sağlıyor.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2019%2f6%2fleader_election.png" alt="" /&gt;&lt;/p&gt;
&lt;h2&gt;Mesaj Kuyruğu Tabanlı Y&amp;uuml;k Dengeleme&lt;/h2&gt;
&lt;p&gt;Enterprise uygulamalarda y&amp;uuml;k y&amp;ouml;netimi ve servisler arası bağımlılığı azaltma ama&amp;ccedil;lı olarak sıklıkla kuyruk tabanlı &amp;ccedil;&amp;ouml;z&amp;uuml;mler kullanırız. Uygulamamıza gelen mesaj sayısı zamana g&amp;ouml;re değişebiliyor ve zaman zaman uygulamanın karşılayabileceği seviyelerin &amp;uuml;zerine &amp;ccedil;ıkıyor ise kuyruk &amp;ccedil;&amp;ouml;z&amp;uuml;m&amp;uuml; derdimize &amp;ccedil;are olacaktır. İşlenmek &amp;uuml;zere uygulamamıza gelen mesajlar mesaj kuyruğunda, uygulamamız m&amp;uuml;sait olduk&amp;ccedil;a uygulamamıza beslenerek y&amp;uuml;k kontrol&amp;uuml; sağlanabilir. Yada mesajlar, kuyruk tarafından t&amp;uuml;ketici uygulamalarımıza y&amp;uuml;k durumlarına g&amp;ouml;re paylaştırılabilir. &amp;Ouml;zellikle veritabanı gibi tek bir kaynağı işleyen fonksiyonlarda aynı anda birden fazla işlem kaynağa erişimde d&amp;uuml;ğ&amp;uuml;m oluşturup uygulamamızı cevap veremez hale getirebilir. Bu tarz durumlar i&amp;ccedil;in &amp;ccedil;&amp;ouml;z&amp;uuml;m işlenecek mesajları kuyrukta biriktirip, peyderpey alıp işlemektir.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2019%2f6%2fqueue-based-load-leveling-pattern.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Tekrar Deneme&lt;/h2&gt;
&lt;p&gt;Uygulamamızın &amp;ccedil;alışması sırasında sıklıkla hatalar ile karşılaşırız. Kimi hatalar ağ kesintileri veya servis yoğunluklarından kaynaklı olup, ge&amp;ccedil;ici olabildiği gibi kimileri ise uygulamada bulunan mantık hatalarından kaynaklı kalıcı hatalar olabilir. Hatalara, tipine g&amp;ouml;re tekrar deneme mekanizmasının kurulması uygulamanın dayanıklılığını arttırıcı &amp;ouml;nlemlerden biridir. Hata durumlarında alınabilecek aksiyonları temelde aşağıdaki gibi d&amp;uuml;ş&amp;uuml;nebiliriz.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;İptal :&lt;/strong&gt; Oluşan hata kalıcı bir hatadır, aralıklarla tekrar tekrar işlemin denenmesi işlemi başarılı yapmaz. Bu tarz durumlarda işlem iptal edilip, loglanarak raporlanmalıdır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tekrar Deneme :&lt;/strong&gt; Oluşan hata, nadir oluşan ge&amp;ccedil;ici bir sistem aksaklığından dolayı oluşmuştur. Bu tarz hataları tekrar denemek işlemi başarılı sonlandırabilir.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ertelemeli Tekrar Deneme :&lt;/strong&gt; Oluşan hata, yine nadir oluşan ge&amp;ccedil;ici bir sistem aksaklığından dolayı oluşmuştur. Fakat tekrar deneme işlemi art arda denemelerde tekrar tekrar hata alınıyor ise bekleme s&amp;uuml;resi arttırılarak tekrar deneme yapılır, hatta belli sayıda denemeden sonra limit aşımından işlemler iptal edilir. B&amp;ouml;ylece sistemde hata alan işlemlerden dolayı bir y&amp;uuml;k yaratılmaz.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tekrar deneme tasarımları yapılırken, agresif ertelemeler vermek sistemi negatif y&amp;ouml;nde etkileyebilir. O y&amp;uuml;zden uygun bekleme s&amp;uuml;relerinin belirlenmesi &amp;ccedil;ok kritiktir. Ayrıca yukarıda bahsettiğimiz &lt;strong&gt;Devre Kesici Tasarım Deseni&lt;/strong&gt; mekanizma i&amp;ccedil;erisine dahil edilerek daha kontroll&amp;uuml; bir tekrar deneme mekanizması tasarlanabilir. Yeniden denenecek işlemlerin her defasında yarım kalmış kayıtlar yaratma olasılığı olduğundan dolayı denemeler atomik ve hata durumunda kendi kendini geri alabiliyor olmalı (rollback). İşlem her yeni denemede sanki sıfırdan sisteme giriyor gibi &amp;ccedil;alışabilmeli ve hata durumunda sistemde kalıntı bırakmamalı.&lt;/p&gt;
&lt;p&gt;Tekrar deneme mekanizmasını kurgularken, tekrar denenecek hataların iyi analiz edilmesi gerekir. Her hatanın tekrar denemeye sokulması sistemde beklenmedik sonu&amp;ccedil;lar doğurabilir. Hata logları iyi analiz edildikten sonra tekrar deneme mekanizması kurulup, mekanizma i&amp;ccedil;in g&amp;uuml;venli, yani tekrar denemeye m&amp;uuml;sait hatalar tespit edildikten sonra kullanıma alınması daha uygun olacaktır.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2019%2f6%2fretry-pattern.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;Ouml;rneğin yukarıdaki servis &amp;ccedil;ağrısı, ilk denemede HTTP 500 hatası alıyor. Belli bir s&amp;uuml;re beklenip mekanizma tarafından tekrar deneneniyor, tekrar HTTP 500 hatası alıyor.&lt;/p&gt;
&lt;p&gt;&amp;Ouml;nceki beklemeden daha uzun bir s&amp;uuml;re beklenip, tekrar deneniyor ve bu sefer HTTP 200 cevabı alıp işlemi başarıyla tamamlıyor.&lt;/p&gt;
&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;Scheduler, Agent, Supervisor Tasarım Deseni&lt;/h2&gt;
&lt;p&gt;Yukarıda &amp;ouml;ğrendiğimiz tasarım desenlerinin topluca birlikte kullanıldığı bir desen olan Scheduler Agent Supervisor tasarım deseni, bir işlemi ger&amp;ccedil;ekleştirmek i&amp;ccedil;in gerekli olan birbirine bağlı işlerden oluşan iş akışının y&amp;ouml;netimine odaklanıyor. Bu tasarım deseni isminden de anlaşılacağı &amp;uuml;zere desen &amp;uuml;&amp;ccedil; par&amp;ccedil;adan oluşuyor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scheduler :&lt;/strong&gt; İş akışı i&amp;ccedil;erisindeki işleri organize edip &amp;ccedil;alıştıran, aralarındaki orkestrasyonu yapan yapı.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agent :&lt;/strong&gt; Her bir işi &amp;ccedil;alıştıran yapı, scheduler tarafından y&amp;ouml;nlendirilen yapı aynı zamanda. İş eğer hata alırsa, yarım işlemleri geri alan yapıyı da i&amp;ccedil;eriyor olmalı.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Supervisor :&lt;/strong&gt; Scheduler tarafından &amp;ccedil;alıştırılan işlerin durumlarını takip eden, gerekli durumlarda tekrar &amp;ccedil;alıştırılması i&amp;ccedil;in scheduler'ı tetikleyen yapı.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2019%2f6%2fscheduler-agent-supervisor-pattern.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Agent'ların hata alması veya timeout olması durumunda supervisor'lar devreye girip işi geri alıyor. Fakat supervisor'ın hata alması veya cevap vermemesi durumunda scheduler, bu işi komple hatalı duruma &amp;ccedil;ekip iptal etmelidir. İptale &amp;ccedil;ekilen iş i&amp;ccedil;in yeni bir supervisor ile iş tekrar denenmesi halinde, &amp;ouml;nceki supervisor agent'a veya scheduler'a tekrar m&amp;uuml;dahale edememelidir. Lider se&amp;ccedil;imi tasarım deseni burada supervisor se&amp;ccedil;imi ve &amp;ccedil;alışması i&amp;ccedil;in uygun y&amp;ouml;ntem. Karmaşık bir yapıya sahip bir sistem olduğu i&amp;ccedil;in yapının t&amp;uuml;m hata senaryolarını i&amp;ccedil;eren bir testi yapılmalı.&amp;nbsp;&lt;/p&gt;</description>
      <link>http://merhanersoy.net/post/2019/05/20/Bulut-Uygulamalar%C4%B1-Icin-Dayan%C4%B1kl%C4%B1l%C4%B1k-(Resiliency)-Tasar%C4%B1m-Desenleri</link>
      <author>merhanersoy@gmail.com</author>
      <comments>http://merhanersoy.net/post/2019/05/20/Bulut-Uygulamalar%C4%B1-Icin-Dayan%C4%B1kl%C4%B1l%C4%B1k-(Resiliency)-Tasar%C4%B1m-Desenleri#comment</comments>
      <guid>http://merhanersoy.net/post.aspx?id=db2a54c1-ee92-455c-910c-a04968209ba9</guid>
      <pubDate>Pzt, 20 May 2019 21:45:00 +0300</pubDate>
      <category>Tasarım Desenleri</category>
      <dc:publisher>meersoy</dc:publisher>
      <pingback:server>http://merhanersoy.net/pingback.axd</pingback:server>
      <pingback:target>http://merhanersoy.net/post.aspx?id=db2a54c1-ee92-455c-910c-a04968209ba9</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://merhanersoy.net/trackback.axd?id=db2a54c1-ee92-455c-910c-a04968209ba9</trackback:ping>
      <wfw:comment>http://merhanersoy.net/post/2019/05/20/Bulut-Uygulamalar%C4%B1-Icin-Dayan%C4%B1kl%C4%B1l%C4%B1k-(Resiliency)-Tasar%C4%B1m-Desenleri#comment</wfw:comment>
      <wfw:commentRss>http://merhanersoy.net/syndication.axd?post=db2a54c1-ee92-455c-910c-a04968209ba9</wfw:commentRss>
    </item>
    <item>
      <title>50 Soruda Yapay Zeka - Kitap İncelemesi</title>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://merhanersoy.net/image.axd?picture=2019%2f5%2fkapak.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Bilim ve Gelecek Kitaplığı'ndan &amp;ccedil;ıkan &lt;strong&gt;50 Soruda Yapay Zeka&lt;/strong&gt;, Boğazi&amp;ccedil;i &amp;Uuml;niversitesi Bilgisayar M&amp;uuml;hendisliği b&amp;ouml;l&amp;uuml;m&amp;uuml;nde profes&amp;ouml;r olan hocamız Cem Say tarafından tamamı cep telefonunda yazılmış yazılmış. Kitabın kapağını da Cem Say'ın kızı tarafından yine cep telefonunda &amp;ccedil;izilmiş. Kitap Cem Say'ın yapay zeka &amp;uuml;zerine, belirlediği 50 soru ve bu sorulara cevaplar ile bilgisayar bilimlerinin ve programlamanın gelişiminden başlayıp yapay zekayı, makina &amp;ouml;ğrenmesini ve g&amp;uuml;ncel yapay zeka uygulamalarına değinerek g&amp;uuml;n&amp;uuml;m&amp;uuml;zde sık&amp;ccedil;a sorulan sorulara yanıtlar veriyor. Farklı kaynakların &amp;ccedil;ok satan listelerinde sıklıkla g&amp;ouml;rd&amp;uuml;ğ&amp;uuml;m&amp;uuml;z, etrafımızdaki pop&amp;uuml;ler kitap&amp;ccedil;ıların hemen hepsinde rastlayabildiğimiz ve T&amp;uuml;rk&amp;ccedil;e bir kaynak olarak karşımıza &amp;ccedil;ıkan bu kitap bu &amp;ouml;zellikleriyle &amp;ouml;ncelikle ilgimi &amp;ccedil;ekti. Hen&amp;uuml;z Ekim 2018'de ilk baskısını yapan kitap Nisan 2019'da 8. baskısını yapmış, yoğun ilgi alan bir kitap. Cem Say'ın da &amp;ouml;zellikle belirttiği gibi yurt dışı kaynaklarda da farklı bir i&amp;ccedil;erikle karşılaşmayacağınız şekilde yazılmış bir kitap. Yani dili olduk&amp;ccedil;a akıcı, İngilizce kaynaklara ihtiya&amp;ccedil; duymadan doyurucu bir i&amp;ccedil;erik sağlıyor. Yer yer esprili bir &amp;uuml;slupla yazıldığı i&amp;ccedil;inde ilginiz d&amp;uuml;şmeden &amp;ccedil;ok rahatlıkla okuyabiliyorsunuz.&lt;/p&gt;
&lt;p&gt;Matematik, mantık, bilgisayarların &amp;ccedil;alışma mantığı, Alan Turing ve Turing Makinası, G&amp;ouml;del ile başlayan kitap ilk b&amp;ouml;l&amp;uuml;m&amp;uuml;nde yer alan sorular ile okuyucuya bir temel inşa ediyor. Bilişim Teknolojileri &amp;uuml;zerine eğitim almamış meraklı okuyucuları sıkmayacak bir dile sahip, olduk&amp;ccedil;a anlaşılır. İlk b&amp;ouml;l&amp;uuml;mdeki bazı soruları olmazsa olmaz nitelikte değerlendirip, fazla da detaya giremeden cevaplandığından &amp;ouml;t&amp;uuml;r&amp;uuml; bazı kısımlarda biraz yorucu olabilse de yazar ilgiyi her soruda y&amp;uuml;ksek tutuyor. Turing testi ile alakalı b&amp;ouml;l&amp;uuml;m olduk&amp;ccedil;a ilgi &amp;ccedil;ekici, &amp;ccedil;ok sevdiğim bir bilim kurgu filmi olan &lt;a href="http://tozluraf.im/ex_machina-blu-ray-incelemesi/" target="_blank"&gt;Ex_Machina&lt;/a&gt;'yı izlememiş olanlar i&amp;ccedil;in tavsiye ederim.&lt;/p&gt;
&lt;p&gt;Programlama dillerinin felsefesi, hayatın matematiği, beynimiz nasıl &amp;ccedil;alışır gibi konularla d&amp;uuml;ş&amp;uuml;nme şeklimiz ile yazılım geliştirme sırasında kullandığımız yapılar arasında bağlantılar kuran sorular ile okuyucuyu Yapay Zeka teknolojilerine ve temelde &amp;ccedil;&amp;ouml;zmeye &amp;ccedil;alıştığı problemlere hazırlayan harika bir kurgusu var kitabın. Bu ara Cem Say'ın ve &amp;ouml;ğrencilerinin yaptığı &amp;ccedil;alışmalar &amp;uuml;zerine de bilgi sahibi olup, T&amp;uuml;rkiye'de yapılan &amp;ccedil;alışmalara da g&amp;ouml;z atıyoruz.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Sonrasında g&amp;uuml;n&amp;uuml;m&amp;uuml;zde olduk&amp;ccedil;a sık karşımıza &amp;ccedil;ıkan sinir ağları, yapay zeka, derin &amp;ouml;ğrenme gibi kavramlara sıra geliyor. Bir bilgisayar programının Kasparov'u yenmesi ve bu tarz yazılımların algoritmalarının nasıl tasarlandığı &amp;uuml;zerine şahane bir b&amp;ouml;l&amp;uuml;m başlıyor. Kitabın bu b&amp;ouml;l&amp;uuml;m&amp;uuml;nden sonrası su gibi akıyor adeta. Kasparov'dan AlphaGo'ya, chatbotlara, otonom arabalara ve google'ın keşfettiği gezegene kadar her soruda ilgin&amp;ccedil; ve &amp;ccedil;ok g&amp;uuml;ncel konulara cevaplar alıyoruz. Bu arada AlphaGo demişken, izlemeyenler i&amp;ccedil;in AlphaGo'nun hikayesini anlatan Netflix belgeseli AlphaGo'yu şiddetle tavsiye ederim.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="http://merhanersoy.net/image.axd?picture=2019%2f5%2falphago_yenilmez_ben_robot.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Burada araya girip İthaki Yayınları'ndan &amp;ccedil;ıkan Bilimkurgu Klasikleri serisinde yer alan iki kitabı referans vermek istiyorum. Evrimsel Programlama'nın anlatıldığı, yazılımların kendi kendini sınayarak evrimleşmesi ile ilgili b&amp;ouml;l&amp;uuml;m&amp;uuml; okurken anımsadığım, ge&amp;ccedil;tiğimiz yıl okuduğum ve &amp;ccedil;ok etkilendiğim Stanislaw Lem'in&amp;nbsp;&lt;strong&gt;Yenilmez&lt;/strong&gt;'ine referans vermek istiyorum. Yenilmez'de uzak bir gezegene inen bir gemideki robotların evrimleşerek gezegen &amp;uuml;zerindeki t&amp;uuml;m hayatı yok edişleri ve altedilemez bir t&amp;uuml;r robot oluşturmaları &amp;uuml;zerine şahane bir kitap. Ayrıca otonom arabalar ve robotik konuları ele alınırken robotik kelimesinin ilk kullanımının Isaac Asimov'a ve şiddetle tavsiye ettiğim &lt;strong&gt;Ben, Robot&lt;/strong&gt;'ta okuyabileceğiniz&amp;nbsp;&lt;em&gt;Yalancı!&lt;/em&gt;&amp;nbsp;hikayesine atıfta bulunuyor Cem Say. Asimov'un hikayelerinde dile getirdiği&amp;nbsp;&lt;strong&gt;&amp;Uuml;&amp;ccedil; Robot Kanunu&lt;/strong&gt;&amp;nbsp;ile "robotlar d&amp;uuml;nyayı ele ge&amp;ccedil;irebilir mi ?" ya da "insanlığın sonunu getirebilir mi ?" sorularına verilen yanıtlarda Asimov'a referans veriyor Cem Say.&lt;/p&gt;
&lt;p&gt;Yapay zeka ile alakalı g&amp;uuml;ncel sorulardan biri olan "Yapay Zeka mesleğimi elimden alacak mı ?"'ya bir nevi cevap arayan son sorular ile yapay zekanın, işin i&amp;ccedil;eriğine bağlı olarak uzman bir profesyonelin g&amp;ouml;rebileceğinden daha fazla vaka y&amp;uuml;klenebildiği ve bunlardan &amp;ouml;ğrendikleri ile uzman profesyonellere g&amp;ouml;re &amp;ccedil;ok daha başarılı olabildiği vakalar &amp;uuml;zerine &amp;ccedil;ok g&amp;uuml;zel &amp;ouml;rnekler inceliyor.&lt;/p&gt;
&lt;p&gt;Son b&amp;ouml;l&amp;uuml;mde ise Yapay Zeka'nın geleceği &amp;uuml;zerine sorular ele alıyor yazar. Yapay zekanın &amp;ouml;ğrendiği vakalardaki &amp;ouml;nyargılı eğilimlerin yapay zekaya da aktarılabildiği &amp;ouml;rnekler &amp;uuml;zerinden k&amp;ouml;t&amp;uuml; &amp;ouml;rneklere de değinip, mevcut problemleri de ele alıyor Cem Say.&lt;/p&gt;
&lt;p&gt;175 sayfalık, 50 soruluk, &amp;ccedil;ok akıcı bir kitap olan 50 soruda Yapay Zeka &amp;ccedil;ok akıcı ve &amp;ccedil;ok g&amp;uuml;ncel konulardan verilen &amp;ouml;rneklerle Yapay Zeka hakkında hepimizin aklındaki sorulara cevap vermeye &amp;ccedil;alışıyor. Bilişim teknolojileri konusunda uzman olmayanların da rahatlıkla okuyabileceğini d&amp;uuml;ş&amp;uuml;nd&amp;uuml;ğ&amp;uuml;m Cem Say hocamızın bu kitabını tavsiye ederim.&lt;/p&gt;</description>
      <link>http://merhanersoy.net/post/2019/05/03/50-Soruda-Yapay-Zeka-Kitap-Incelemesi</link>
      <author>merhanersoy@gmail.com</author>
      <comments>http://merhanersoy.net/post/2019/05/03/50-Soruda-Yapay-Zeka-Kitap-Incelemesi#comment</comments>
      <guid>http://merhanersoy.net/post.aspx?id=b00a5455-ce6a-43de-826c-52bf1d7ba868</guid>
      <pubDate>Cum, 3 May 2019 14:58:00 +0300</pubDate>
      <dc:publisher>meersoy</dc:publisher>
      <pingback:server>http://merhanersoy.net/pingback.axd</pingback:server>
      <pingback:target>http://merhanersoy.net/post.aspx?id=b00a5455-ce6a-43de-826c-52bf1d7ba868</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://merhanersoy.net/trackback.axd?id=b00a5455-ce6a-43de-826c-52bf1d7ba868</trackback:ping>
      <wfw:comment>http://merhanersoy.net/post/2019/05/03/50-Soruda-Yapay-Zeka-Kitap-Incelemesi#comment</wfw:comment>
      <wfw:commentRss>http://merhanersoy.net/syndication.axd?post=b00a5455-ce6a-43de-826c-52bf1d7ba868</wfw:commentRss>
    </item>
    <item>
      <title>ASP.NET Core Web API ile NSwag Entegregrasyonu</title>
      <description>&lt;h2&gt;OpenAPI, Swagger, NSwag nedir ?&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;OpenAPI insiyatifi, d&amp;uuml;nya &amp;ccedil;apında kullanılan Restful API standartlarını tanımlamaya &amp;ccedil;alışan bir topluluk. Swagger&amp;nbsp; ise OpenAPI ile tanımlanan WebApiler i&amp;ccedil;in oluşturulan spesifikasyon ve &amp;uuml;retilen ara&amp;ccedil;lara verilen isim.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Yani geliştirdiğimiz bir Web API i&amp;ccedil;in oluşturacağımız swagger spesifikasyon dosyası ile web apimizi d&amp;uuml;nyaca tanınan bir standarta g&amp;ouml;re tanımlamış oluyoruz. Bu dosyaya g&amp;ouml;re istenilen dilde servisimizi kullanacak istemciler yazılabilir. Web API&amp;rsquo;mizi web servis gibi d&amp;uuml;ş&amp;uuml;n&amp;uuml;rsek aslında swagger spesifikasyon dosyaları wsdl&amp;rsquo;e karşılık geliyor.&lt;/p&gt;
&lt;p&gt;NSwag, swagger spesifikasyon dosyalarını kullanarak .NET platformu i&amp;ccedil;in ara&amp;ccedil;lar &amp;uuml;reten k&amp;uuml;t&amp;uuml;phane diyebiliriz. Aşağıda detaylarına gireceğimiz, swagger spesifikasyon dosyasını, Web API &amp;ouml;ny&amp;uuml;zlerini ve C#, TypeScript (Jquery, AngularJS ve Fetch istemcileri) ile ASP.NET Web API controller istemcilerini &amp;uuml;retebildiğimiz ara&amp;ccedil; ve k&amp;uuml;t&amp;uuml;phaneleri i&amp;ccedil;eriyor.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;VS.NET 2017 ile &amp;Ouml;rnek Olarak Kullanacağımız Web API Projesinin Oluşturulması&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;VS.NET 2017 ile Web API şablonunu kullanarak yeni bir ASP.NET Core web uygulaması projesi oluşturup derleyip varsayılan olarak gelen Values Web API&amp;rsquo;sini deneyebiliriz.&lt;/p&gt;
&lt;p&gt;Values Apisinin Get metodunu tarayıcıdan &amp;ccedil;ağırdığımızda aşağıdaki gibi basit bir JSON d&amp;ouml;nd&amp;uuml;ğ&amp;uuml;n&amp;uuml; g&amp;ouml;r&amp;uuml;yoruz. Bunu makalemizdeki &amp;ouml;rneklerimizde kullanıyor olacağız.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2018%2f12%2f01_WebAPIOrnegi.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Web API Metodlarını İncelemek ve Test Etmek&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Gerek kendi yazdığım, gerekse başka sağlayıcılarca sağlanan web api metodlarını incelemek test etmek i&amp;ccedil;in yakın zamana kadar &lt;a href="https://www.getpostman.com/" target="_blank"&gt;Postman &lt;/a&gt;kullandım. Kullanıcı dostu aray&amp;uuml;z&amp;uuml; ve tarih&amp;ccedil;e &amp;ouml;zelliği ile web api testlerinde ve hatta .NET Click Once uygulamaların manifesto dosyalarını inceleme konusunda olmazsa olmaz bir ara&amp;ccedil; benim i&amp;ccedil;in. &amp;Ouml;rnek olarak hazırladığımız projeyi Postman ile aşağıdaki gibi test edebiliyoruz. Http metodunu değiştirerek, parametre var ise onları da girerek olduk&amp;ccedil;a hızlı bir şekilde web api testi yapabiliyoruz.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2018%2f12%2f02_PostmanIleWebAPI.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Swagger UI ile Web API projemize oluşturacağımız &amp;ouml;ny&amp;uuml;zler a&amp;ccedil;ık&amp;ccedil;ası Postman gibi bir araca ihtiyacı yok edecek gibi g&amp;ouml;z&amp;uuml;k&amp;uuml;yor. Fazla vakit kaybetmeden projemizin NSwag entegrasyonunu tamamlayıp web api metodlarımız i&amp;ccedil;in oluşacak &amp;ouml;ny&amp;uuml;zleri inceleyelim.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;ASP.NET Web API Projesi NSwag Entegrasyonu&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Hazırladığımız Web API uygulamasının swagger spesifikasyonu oluşturmak i&amp;ccedil;in &amp;ouml;ncelikle yapmamız gereken şey uygulamamıza &lt;strong&gt;NSwag.AspNetCore&lt;/strong&gt; referansını eklemek.&lt;/p&gt;
&lt;p&gt;Web API projesine nuget ile NSwag.AspNetCore referansı eklenerek NSwag projeye dahil edilmiş oluyor. Aşağıdaki ayarları yaparak Swagger Ui&amp;rsquo;i aktif hale getirerek Web API metodlarımız i&amp;ccedil;in hazırlanan Swagger &amp;ouml;ny&amp;uuml;z ekranlarına ulaşabilir ve tarayıcı yardımı ile metodlarımızı test edebilir hale geliyoruz. Bu uygulayacağımız metodlar NSwag&amp;rsquo;in her versiyonunda değişikliğe uğramış g&amp;ouml;r&amp;uuml;l&amp;uuml;yor. Internetteki pek &amp;ccedil;ok &amp;ouml;rnekte kullanılan metodlar obsolete olarak işaretlenmiş, kullanımı tavsiye edilmiyor, bu metodların yerlerine yeni metodlar eklenmiş k&amp;uuml;t&amp;uuml;phanede. Fakat pek &amp;ccedil;oğunun d&amp;ouml;k&amp;uuml;mantasyonunu yada g&amp;uuml;ncel bir &amp;ouml;rneğini bulmak &amp;ccedil;ok zor. A&amp;ccedil;ık&amp;ccedil;ası deneme yanılma ile Swagger Ui ekranlarını aktif hale getirebildim.&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2018%2f12%2f03_NSwagNugetPackage.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NSwag.AspNetCore referansını projemize ekledikten sonra aşağıdaki gibi swagger ui entegrasyonunu yapıyoruz.&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;public void ConfigureServices(IServiceCollection services)
{ 
   services.AddSwaggerDocument();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
     app.UseSwagger();
     app.UseSwaggerUi3();

    if (env.IsDevelopment())
    {
       app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseMvc();            
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2018%2f12%2f04_SwaggerUi_1.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Yukarıda g&amp;ouml;rd&amp;uuml;ğ&amp;uuml;n&amp;uuml;z gibi NSwag hem swagger spesifikasyon osyasını oluşturuyor, hem de uygulamamız altındaki web apiler i&amp;ccedil;in d&amp;ouml;k&amp;uuml;mantasyon ve test aray&amp;uuml;zleri oluşturuyor.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2018%2f12%2f05_SwaggerUi_2.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;NSwagStudio ile Web Api'mize Erişecek İstemci Kodunu &amp;Uuml;retelim&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Şuana kadarki &amp;ouml;rneklerimizde ASP.NET Core Web API ile hazırladığımız Web API'mize tarayıcı izlenebilen bir d&amp;ouml;k&amp;uuml;mantasyon sayfası &amp;uuml;retip test edebileceğimiz &amp;ouml;ny&amp;uuml;zleri nasıl oluşturabileceğimiz &amp;uuml;zerinde durduk. Yani konuya sunucu tarafından, api sağlayıcı tarafından baktık. Şimdiki &amp;ouml;rneğimizde konuya istemci tarafından yani ilk &amp;ouml;rneğimizde sağladığımız web apiyi kullanacak uygulama tarafından bakacağız.&lt;/p&gt;
&lt;p&gt;NSwag&amp;nbsp; Studio Studio uygulaması ile Web Api projemizde oluşturulan swagger.json dosyası analiz ettirilerek C#, TypeScript veya C# Web Api controller&amp;rsquo;ı şeklinde API&amp;rsquo;yi kullanan client kodların &amp;uuml;retilmesi sağlanabilir. Studio projesi onlarca se&amp;ccedil;enek ile &amp;ouml;zelleştirilebiliyor ve olduk&amp;ccedil;a parametrik g&amp;ouml;z&amp;uuml;k&amp;uuml;yor. Aşağıdaki &amp;ouml;rnekte kendi yazdığım iki web api i&amp;ccedil;in oluşturulan C# istemci kodunu nasıl &amp;uuml;rettiğimi ve kullanımın nasıl olduğunu inceleyebiliriz.&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2018%2f12%2f06_NSwagStudio_1.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2018%2f12%2f07_NSwagStudio_2.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2018%2f12%2f08_NSwagStudio_3.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush: c-sharp;"&gt;CustomerClient cusClient = new CustomerClient(new System.Net.Http.HttpClient());
List&amp;lt;Customer&amp;gt; customers = (List&amp;lt;Customer&amp;gt;)cusClient.GetAsync().GetAwaiter().GetResult();

foreach (Customer value in customers)
{
    Console.WriteLine("Customer received : {0} {1}", value.Name, value.Surname);
}&lt;/pre&gt;
&lt;p class="brush: c-sharp;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="brush: c-sharp;"&gt;NSwag Studio sadece Windows GUI olarak değil, aynı zamanda komut satırı uygulaması olarak da kullanılabiliyor. B&amp;ouml;ylece derleme otomasyonumuz i&amp;ccedil;erisine script olarak kod &amp;uuml;retimini dahil edip, kullanacağımız istemci sınıfları otomatize bir şekilde g&amp;uuml;ncel tutabiliriz. Tam da bu ama&amp;ccedil;la eklenmiş Cake ve MSBuild scriptleri desteği mevcut.&lt;/p&gt;
&lt;h2 class="brush: c-sharp;"&gt;Kaynaklar&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="brush: c-sharp;"&gt;Bu &amp;ouml;rnekleri hazırlarken internette karşılaştığım &amp;ccedil;oğu kaynak eski kalmıştı, &amp;ouml;rnek olarak verilen neredeyse t&amp;uuml;m kod par&amp;ccedil;aları k&amp;uuml;t&amp;uuml;phaneden kaldırılmış ya da obsolete olarak işaretlenmişti. An itibariyle &amp;ccedil;alışır durumdaki metodlar makalemdeki metodlardır. Projeyi g&amp;uuml;ncelledik&amp;ccedil;e makalemi de g&amp;uuml;ncelliyor olacağım. Makaleyi hazırlarken aşağıdaki kaynaklardan faydalandım. Daha g&amp;uuml;ncel ve orjinal dilindeki kaynaklara buradan erişebilirsiniz.&lt;/p&gt;
&lt;p class="brush: c-sharp;"&gt;&lt;a href="https://github.com/RSuter/NSwag" target="_blank"&gt;https://github.com/RSuter/NSwag &lt;/a&gt;&lt;/p&gt;
&lt;p class="brush: c-sharp;"&gt;&lt;a href="https://blog.rsuter.com/nswag-tutorial-integrate-the-nswag-toolchain-into-your-asp-net-web-api-project/" target="_blank"&gt;https://blog.rsuter.com/nswag-tutorial-integrate-the-nswag-toolchain-into-your-asp-net-web-api-project/ &lt;/a&gt;&lt;/p&gt;</description>
      <link>http://merhanersoy.net/post/2018/12/09/ASPNET-Core-Web-API-ile-NSwag-Entegregrasyonu</link>
      <author>merhanersoy@gmail.com</author>
      <comments>http://merhanersoy.net/post/2018/12/09/ASPNET-Core-Web-API-ile-NSwag-Entegregrasyonu#comment</comments>
      <guid>http://merhanersoy.net/post.aspx?id=28b225a7-2560-490b-bd67-59eb5bf04548</guid>
      <pubDate>Paz, 9 Ara 2018 03:36:00 +0300</pubDate>
      <dc:publisher>meersoy</dc:publisher>
      <pingback:server>http://merhanersoy.net/pingback.axd</pingback:server>
      <pingback:target>http://merhanersoy.net/post.aspx?id=28b225a7-2560-490b-bd67-59eb5bf04548</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://merhanersoy.net/trackback.axd?id=28b225a7-2560-490b-bd67-59eb5bf04548</trackback:ping>
      <wfw:comment>http://merhanersoy.net/post/2018/12/09/ASPNET-Core-Web-API-ile-NSwag-Entegregrasyonu#comment</wfw:comment>
      <wfw:commentRss>http://merhanersoy.net/syndication.axd?post=28b225a7-2560-490b-bd67-59eb5bf04548</wfw:commentRss>
    </item>
    <item>
      <title>The Phoenix Project Kitap İncelemesi</title>
      <description>&lt;p&gt;&lt;img src="http://merhanersoy.net/image.axd?picture=2018%2f11%2fthe_phoenix_project.jpg" alt="" width="500" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 8pt; color: #222222; line-height: 15.6933px; font-size: 11pt; font-family: Calibri, sans-serif;"&gt;The Phoenix Project, DevOps'u yoğun bir şekilde duymaya başladığımız bu aylarda DevOps'un neyi &amp;ccedil;&amp;ouml;zmek i&amp;ccedil;in nasıl ortaya &amp;ccedil;ıktığını adım adım adeta bir macera romanı havasında takip ettiğimiz Parts Unlimited firması ve hayata ge&amp;ccedil;irmeye &amp;ccedil;alıştıkları Phoenix Projesinin &amp;uuml;retim ortamına alınması hikayesi hakkında.&amp;nbsp; Teknik olmayan, bilişim teknolojileri ekipleriyle az &amp;ccedil;ok &amp;ccedil;alışmış kişilerin de rahatlıkla okuyup, anlayıp bakış a&amp;ccedil;ısını değiştirebileceği bir kitap.&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 8pt; color: #222222; line-height: 15.6933px; font-size: 11pt; font-family: Calibri, sans-serif;"&gt;Kitap roman gibi yazıldığı i&amp;ccedil;in bazı b&amp;ouml;l&amp;uuml;mlerde ger&amp;ccedil;ekten &amp;ccedil;ok heyecanlı devam ediyor ve b&amp;ouml;l&amp;uuml;m sonunda kitabı bırakamayıp diğer b&amp;ouml;l&amp;uuml;me devam ediyorsunuz &amp;ccedil;oğu zaman. Hikayedeki &amp;ccedil;oğu kişi, olay ya da diyalog, bilgi teknolojilerinde &amp;ccedil;alışan herkes i&amp;ccedil;in &amp;ccedil;ok tanıdık. Kahramanlarımızın olaylara verecekleri tepkiyi siz daha olayın gelişimi sırasında veriyorsunuz bazen.&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 8pt; color: #222222; line-height: 15.6933px; font-size: 11pt; font-family: Calibri, sans-serif;"&gt;Bill, Wes, Patty ve hatta neredeyse hi&amp;ccedil; iletişim kurmadığımız ama romanın ana kahramanlarından biri olan Brent sanki beraber &amp;ccedil;alıştığımız kişiler gibi. Kitap DevOps'a operasyon ekipleri g&amp;ouml;z&amp;uuml;yle bakıyor. Ana kahramanlarımızın tamamı operasyon ekiplerinde &amp;ccedil;alışan personeller. Yazılım geliştiren ekip ise &amp;ccedil;ok tipik bir bakış a&amp;ccedil;ısıyla konuya yaklaştığı i&amp;ccedil;in a&amp;ccedil;ık&amp;ccedil;ası ilgili b&amp;ouml;l&amp;uuml;mlerde, bir yazılımcı olarak daha fazla yorumunuz ya da serzenişiniz olabiliyor. DevOps ve &amp;ccedil;evik metodolojiye yazılım ekibi a&amp;ccedil;ısından yaklaşım pek &amp;ccedil;oğumuz a&amp;ccedil;ısından daha yararlı olurdu g&amp;ouml;r&amp;uuml;ş&amp;uuml;ndeyim.&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 8pt; color: #222222; line-height: 15.6933px; font-size: 11pt; font-family: Calibri, sans-serif;"&gt;Konu olan pek &amp;ccedil;ok sorunun &amp;ccedil;&amp;ouml;z&amp;uuml;m&amp;uuml; aylar alabiliyor normalde kitapta birka&amp;ccedil; sayfada &amp;ccedil;&amp;ouml;z&amp;uuml;me gidilebiliyor. Bu bir yandan ger&amp;ccedil;ek&amp;ccedil;i gelmiyor, ama bir yandan da kitabın vermek istediği mesajı hızlı verebilmesi i&amp;ccedil;in b&amp;ouml;yle olması gerektiğine hemfikirim. O&lt;span style="font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;tomobil &amp;uuml;retim hattı &amp;ouml;rnekleri &amp;uuml;zerinden yazılım geliştirme ve operasyon s&amp;uuml;re&amp;ccedil;lerindeki sorunların &amp;ccedil;&amp;ouml;z&amp;uuml;m&amp;uuml;, Toyota'nın &lt;strong&gt;Single Minute Exchange of Die (SMED)&lt;/strong&gt; adını verdiği, &amp;uuml;retim ekipmanlarının &amp;uuml;retim işlemleri sırasında değiştirilmesi s&amp;uuml;recindeki iyileştirmeleri hakkındaki bilgiler ile bağlanan daha sık yazılım s&amp;uuml;r&amp;uuml;m&amp;uuml; kurulumu arasındaki bağlantılar olduk&amp;ccedil;a ilgi &amp;ccedil;ekici b&amp;ouml;l&amp;uuml;mler.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0cm 0cm 8pt; color: #222222; line-height: 15.6933px; font-size: 11pt; font-family: Calibri, sans-serif;"&gt;Kesinlikle &amp;ccedil;ok eğlenceli ve s&amp;uuml;r&amp;uuml;kleyici dille yazılmış bir kitap.Teknik olsun olmasın herkese hitap edebilecek tarzda, hatta bilişim teknolojilerinde &amp;ccedil;alışmayan kişilerce okunmasının faydalı olabileceğini s&amp;ouml;yleyebilirim. Okuyalım, okutalım.&lt;/p&gt;</description>
      <link>http://merhanersoy.net/post/2018/11/18/The-Phoenix-Project-Kitap-Incelemesi</link>
      <author>merhanersoy@gmail.com</author>
      <comments>http://merhanersoy.net/post/2018/11/18/The-Phoenix-Project-Kitap-Incelemesi#comment</comments>
      <guid>http://merhanersoy.net/post.aspx?id=2b149a27-c49d-45e3-9f07-39766f608e37</guid>
      <pubDate>Pzt, 19 Kas 2018 02:36:00 +0300</pubDate>
      <category>kitap incelemesi</category>
      <dc:publisher>meersoy</dc:publisher>
      <pingback:server>http://merhanersoy.net/pingback.axd</pingback:server>
      <pingback:target>http://merhanersoy.net/post.aspx?id=2b149a27-c49d-45e3-9f07-39766f608e37</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://merhanersoy.net/trackback.axd?id=2b149a27-c49d-45e3-9f07-39766f608e37</trackback:ping>
      <wfw:comment>http://merhanersoy.net/post/2018/11/18/The-Phoenix-Project-Kitap-Incelemesi#comment</wfw:comment>
      <wfw:commentRss>http://merhanersoy.net/syndication.axd?post=2b149a27-c49d-45e3-9f07-39766f608e37</wfw:commentRss>
    </item>
    <item>
      <title>Building Evolutionary Architectures: Support Constant Change - Kitap İncelemesi</title>
      <description>&lt;p&gt;&amp;nbsp;&lt;img src="http://merhanersoy.net/image.axd?picture=2018%2f6%2fevo-arch-book.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;G&amp;uuml;ncel hayatta g&amp;uuml;nl&amp;uuml;k iş yaşamımızda sıklıkla, halihazırda var olan uygulamalara ek &amp;ouml;zellikler geliştiriyoruz. Bazen karşılaştığımız yazılımların mimarileri yeni geliştirilen &amp;ouml;zelliklerin adaptasyonunda &amp;ccedil;ok zorluk &amp;ccedil;ıkarıyor, bazen ise &amp;ccedil;ok daha kolay bir şekilde adapte edebiliyoruz yeni &amp;ouml;zellikleri. İşte evrimleşebilir yazılım mimarisi tam da bu konu ile ilgileniyor. Yani g&amp;uuml;nl&amp;uuml;k yaşamımızda sıklıkla karşımıza &amp;ccedil;ıkan evrimleşen yazılımları, yeni gelecek &amp;ouml;zelliklere adaptasonunu kolaylaştırma, yazılımın hedeflediği mimari &amp;ouml;zellikleri riske atmadan yeni &amp;ouml;zellik geliştirebilmeyi, g&amp;uuml;ncel teknolojiler ve g&amp;uuml;ncel yazılım geliştirme pratiklerini kullanarak aktarmaya &amp;ccedil;alışıyor.&lt;/p&gt;
&lt;p&gt;Yazılım mimarisi &amp;uuml;zerine &amp;ccedil;ok g&amp;uuml;ncel ve ilginizi kitabın sonuna dek &amp;uuml;st seviyede tutacak bir kitaba ne dersiniz ? Son yıllarda sık sık duyduğumuz ve hatta hayatımıza girmeye başlayan bu yeni trendlerin ve pratiklerin olduk&amp;ccedil;a a&amp;ccedil;ık ve anlaşılır bir şekilde anlatıldığı bu kitabı şiddetle tavsiye ediyorum.&lt;/p&gt;
&lt;p&gt;Aşağıda kitabı b&amp;ouml;l&amp;uuml;m b&amp;ouml;l&amp;uuml;m i&amp;ccedil;erikleri ve benim ilgimi &amp;ccedil;eken kısımları ile kısaca &amp;ouml;zetlemeye &amp;ccedil;alıştım, umarım faydası dokunur.&lt;/p&gt;
&lt;h2&gt;1. B&amp;ouml;l&amp;uuml;m : Software Architecture&lt;/h2&gt;
&lt;p&gt;Bu b&amp;ouml;l&amp;uuml;m konuya giriş mahiyetinde yazılmış, genel bilgiler vererek neden yazılım mimarileri değişikliğe uğrar, nasıl hazırlıklar yapılmalıdır ve zamanla karşılaşılacak değişikliklerin ne kadar normal ihtiya&amp;ccedil;lar olduğu &amp;uuml;zerine nispeten kısa bir b&amp;ouml;l&amp;uuml;m. Yazılım geliştirirken yazılım mimarlarının, yazılım ile alakalı taleplere g&amp;ouml;re &amp;ccedil;ıkardıkları karakteristik mimari &amp;ouml;zelliklerin nasıl belirlendiği ne nasıl korunduğu &amp;uuml;zerine başlıklar i&amp;ccedil;eriyor.&lt;/p&gt;
&lt;h2&gt;2. B&amp;ouml;l&amp;uuml;m : Fitness Functions&lt;/h2&gt;
&lt;p&gt;Benim i&amp;ccedil;in yeni olan bu terimi bu kitap sayesinde &amp;ouml;ğrendim. İlk b&amp;ouml;l&amp;uuml;mde bahsedilen yazılımın karakteristik &amp;ouml;zelliklerini, yazılıma zamanla yapılan değişikliklerle korunup korunmadığını test eden fonksiyonlara verilen isim fitness functions. Yazılım geliştirme s&amp;uuml;reci i&amp;ccedil;erisinde continuous integration i&amp;ccedil;erisine dahil edilen fonksiyonlar her değişiklikte karakteristik &amp;ouml;zelliklere yapılan etkiyi test ediyor.&amp;nbsp; Kısacası geliştirilen mimarinin, talep edilen ya da iddia edilen mimari &amp;ouml;zelliklere sahip olup olmadığını kontrol eden testlere fitness function deniyor.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Fitness functionları a&amp;ccedil;ıklayan b&amp;ouml;l&amp;uuml;m sonrasında atomik, yani tek &amp;ouml;zellik &amp;uuml;zerine yoğunlaşan fonksiyonları ve holistik yani birden fazla &amp;ouml;zelliğe yoğunlaşıp birbirleri ile ilişkilerini test eden fonksiyonları a&amp;ccedil;ıklıyor. Statik / dinamik, otomatik &amp;ccedil;alışan / manuel tetiklenen ve ge&amp;ccedil;ici fonksiyonlar gibi pek &amp;ccedil;ok kategoriye ayrılan fitness fonksiyon &amp;ccedil;eşidini a&amp;ccedil;ıklayarak devam ediyor b&amp;ouml;l&amp;uuml;m.&lt;/p&gt;
&lt;h2&gt;3. B&amp;ouml;l&amp;uuml;m : Engineering Incremental Change&lt;/h2&gt;
&lt;p&gt;Continuous Delivery kavramını a&amp;ccedil;ıklayarak başlayan b&amp;ouml;l&amp;uuml;m bu kavramın evrimleşebilir mimaride nasıl yer bulduğunu a&amp;ccedil;ıklıyor. Yapılancak değişikliklerin agile pratiklere de uygun olarak olabildiğince ufak yapılması ve otomatize edilmesi &amp;uuml;zerinde duruyor. Sağlanan bir serviste yapılacak değişikliğin geriye d&amp;ouml;n&amp;uuml;k desteği nasıl sağlayabileceğini &amp;ouml;rneklendirerek &amp;ccedil;ok anlaşılır bir şekilde aktarıyor.&lt;/p&gt;
&lt;p&gt;Github'ın, sisteminde ger&amp;ccedil;ekleştirdiği g&amp;uuml;nde 60 kurulumu nasıl yaptığı &amp;uuml;zerine yazılmış b&amp;ouml;l&amp;uuml;m ve Github ekiplerinin geliştirdiği Scientist k&amp;uuml;t&amp;uuml;phanesini tanıtan b&amp;ouml;l&amp;uuml;mler gayet g&amp;uuml;ncel ve ilgi &amp;ccedil;ekici. Scientist k&amp;uuml;t&amp;uuml;phanesi, sistemde yapılan refactoring'lerin eski kodda ve yeni yazılan kodda nasıl sonu&amp;ccedil;lar verdiğini karşılaştırıp g&amp;uuml;venle değişiklik yapmayı sağlıyor. Kendime not olarak da aldığım Scientist'in .NET port'u olan &lt;a href="https://github.com/github/Scientist.net"&gt;Scientist.NET&lt;/a&gt; gayet g&amp;uuml;zel &amp;ouml;rneklerle d&amp;ouml;k&amp;uuml;mante edilmiş a&amp;ccedil;ık kaynak bir k&amp;uuml;t&amp;uuml;phane.&lt;/p&gt;
&lt;p&gt;Ayrıca Hypothesis and Data Driven Development ve 2013 yılbaşında Facebook'un karşılaştığı inanılmaz sayıdaki fotoğraf y&amp;uuml;klenesi ve bunların b&amp;uuml;y&amp;uuml;k bir &amp;ccedil;oğunun saldırgan olarak işaretlenmesi ile ilgili vaka, ve bunun altyapıda yarattığı yoğunluk &amp;uuml;zerinde duruluyor. İnsanların kendi "hoş g&amp;ouml;z&amp;uuml;kmeyen" fotoğraflarını saldırgan olarak işaretlemesi eğilimi &amp;uuml;zerine facebook ekiplerinin yaptığı &amp;ccedil;alışmalar ve bu probleme &amp;ccedil;&amp;ouml;z&amp;uuml;mleri anlatılıyor.&lt;/p&gt;
&lt;h2&gt;4. B&amp;ouml;l&amp;uuml;m : Architectural Coupling&lt;/h2&gt;
&lt;p&gt;Mimari a&amp;ccedil;ıdan uygulama mod&amp;uuml;llerinin birbirlerine referansları her zaman problem olmuştur. Mod&amp;uuml;llerin ne kadar bağlı olması gerektiği &amp;uuml;zerine &amp;ccedil;alışmak mimarları zorlayan konulardan biri. Bu konuya ayrılmış olan 4. b&amp;ouml;l&amp;uuml;m mod&amp;uuml;lerlik ve mimari quantum'dan bahsederek konuyu monolith uygulamalara, plugin tabanlı uygulamalara, SOA, sunucusuz uygulamalara, BaaS ve FaaS ile microservislere bağlıyor. Bir&amp;ccedil;ok modern mimarinin anlatıldığı b&amp;ouml;l&amp;uuml;m uzun ama olduk&amp;ccedil;a zevkli ve kolay anlaşılır bir dille yazılmış.&lt;/p&gt;
&lt;p&gt;Bu noktada yine kendime not olarak aldığım bir Channel 9'da yayınlanmış g&amp;uuml;ncel bir videoyu paylaşmak istiyorum : &lt;a href="https://channel9.msdn.com/Shows/On-NET/Microservice-Architecture-with-ASPNET-Core"&gt;Microservice Architecture with ASP.NET Core&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;5. B&amp;ouml;l&amp;uuml;m : Evolutionary Data&lt;/h2&gt;
&lt;p&gt;Uygulamaların olmazsa olmaz par&amp;ccedil;ası veri kaynakları &amp;uuml;zerine ayrılmış b&amp;ouml;l&amp;uuml;m temelde veritabanlarında yapılacak değişikliklerin nasıl y&amp;ouml;netileceği &amp;uuml;zerine yoğunlaşmış. Veri kaynağı olarak veritabanlarını kullanan ortalama seviyedeki bir yazılım geliştiricinin sıklıkla kullandığı y&amp;ouml;ntemler &amp;uuml;zerinde duruluyor.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;6. B&amp;ouml;l&amp;uuml;m : Building Evolvable Architectures&lt;/h2&gt;
&lt;p&gt;Bu b&amp;ouml;l&amp;uuml;mde eski bir uygulama nasıl evrimleşen hale getirilir, yeni geliştirilmeye başlanan bir uygulamada evrimleşen&amp;nbsp;bir mimari kurabilmek i&amp;ccedil;in uygulanması gerekenler &amp;uuml;zerinde duruluyor. Farklı tip uygulama mimarileri ve bunların evrimleşebilir hale getirilmesi ya da evrimleşebilirliğe ne kadar uygun oldukları a&amp;ccedil;ıklamalı anlatılıyor. Farklı tip mimarileri tanımak i&amp;ccedil;in bile okumaya değer bir b&amp;ouml;l&amp;uuml;m. Ayrıca referans olarak eklenen k&amp;uuml;t&amp;uuml;phanelerin evrimleşebilir bir mimari &amp;uuml;zerindeki olası etkileri, eklenen k&amp;uuml;t&amp;uuml;phanelere ya da bağımlı olunan frameworklere nasıl yaklaşılması gerektiği konusu inceleniyor.&lt;/p&gt;
&lt;h2&gt;7. B&amp;ouml;l&amp;uuml;m : Evolutionary Architecture Pitfalls and Antipatterns&lt;/h2&gt;
&lt;p&gt;Bu b&amp;ouml;l&amp;uuml;mde evrimleşebilir bir mimari tasarlarken karşılaşılabilecek tuzaklar ve k&amp;ouml;t&amp;uuml; tasarım desenleri inceleniyor. Mesela genellikle d&amp;uuml;ş&amp;uuml;len tuzaklardan biri, geliştirilen yeni bir uygulama eğer temelde bir başka &amp;uuml;r&amp;uuml;ne dayanıyor ise mimarinin bu &amp;uuml;r&amp;uuml;ne g&amp;ouml;re şekillenmesinin yanlışlıklarından ve etkilerinden bahsediliyor. Ayrıca kitap genelinde s&amp;uuml;rekli referans konan &lt;strong&gt;The Last 10%&lt;/strong&gt; tuzağı bu b&amp;ouml;l&amp;uuml;mde inceleniyor sonunda. Uygulama geliştirirken genellikle se&amp;ccedil;ilen k&amp;uuml;t&amp;uuml;phaneleri uygulamanın 80% - 90%'sini hızlandıracak, ya da geliştirmesini kolaylaştıracak şekilde se&amp;ccedil;iyoruz. Ama bazen kalan 10%'lik kısmın geliştirmesi ya da etkileri o kadar b&amp;uuml;y&amp;uuml;k olabiliyor ki uygulamaların başarısızlıkla sonu&amp;ccedil;lanmasına bile sebep olabiliyor. Bu tuzak, ger&amp;ccedil;ek bir &amp;ouml;rnek anlatılarak inceleniyor.&lt;/p&gt;
&lt;p&gt;Code Reuse ile alakalı olduk&amp;ccedil;a aykırı fikirlerin yeraldığı bir b&amp;ouml;l&amp;uuml;m var, benim olduk&amp;ccedil;a ilgimi &amp;ccedil;ekti. &amp;Uuml;niveristeden beri şartlandığımız code reuse'un ger&amp;ccedil;ek hayatta işleri ne kadar zorlanştırdığı &amp;uuml;zerinde duruluyor. Loglama ve monitoring gibi temel mimari &amp;ouml;zellikler dışındaki kısımların kod kopyalanarak ya da yeniden yazılarak uygulamaların olabildiğince birbirinden ayrık tasarlanması &amp;uuml;zerinde duruluyor.&lt;/p&gt;
&lt;p&gt;Hatta yanlışlıkla yapılabilecek kod reuse'ları ve bunun sonucu oluşan bağımlıklıkları engellemek i&amp;ccedil;in her ayrık servis i&amp;ccedil;in farklı teknoloji se&amp;ccedil;imi bile yapılabileceği &amp;ouml;neriliyor.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;8. B&amp;ouml;l&amp;uuml;m : Putting Evolutionary Architecture into Practice&lt;/h2&gt;
&lt;p&gt;Kitabın son b&amp;ouml;l&amp;uuml;m&amp;uuml; ger&amp;ccedil;ek hayatta evrimleşebilir bir yazılım mimarisinin nasıl hayata ge&amp;ccedil;irilebileceği &amp;uuml;zerine eğiliyor. Yazılım geliştirecek ekiplerin nasıl yapılandırılması gerektiğinden başlayıp s&amp;uuml;re&amp;ccedil;lere kadar eğiliyor.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <link>http://merhanersoy.net/post/2018/06/03/Building-Evolutionary-Architectures-Support-Constant-Change-Kitap-Incelemesi</link>
      <author>merhanersoy@gmail.com</author>
      <comments>http://merhanersoy.net/post/2018/06/03/Building-Evolutionary-Architectures-Support-Constant-Change-Kitap-Incelemesi#comment</comments>
      <guid>http://merhanersoy.net/post.aspx?id=17f58f11-1725-49b7-b3b5-3ebcf460bff3</guid>
      <pubDate>Paz, 3 Haz 2018 19:09:00 +0300</pubDate>
      <category>kitap incelemesi</category>
      <dc:publisher>meersoy</dc:publisher>
      <pingback:server>http://merhanersoy.net/pingback.axd</pingback:server>
      <pingback:target>http://merhanersoy.net/post.aspx?id=17f58f11-1725-49b7-b3b5-3ebcf460bff3</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://merhanersoy.net/trackback.axd?id=17f58f11-1725-49b7-b3b5-3ebcf460bff3</trackback:ping>
      <wfw:comment>http://merhanersoy.net/post/2018/06/03/Building-Evolutionary-Architectures-Support-Constant-Change-Kitap-Incelemesi#comment</wfw:comment>
      <wfw:commentRss>http://merhanersoy.net/syndication.axd?post=17f58f11-1725-49b7-b3b5-3ebcf460bff3</wfw:commentRss>
    </item>
  </channel>
</rss>