<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Fırat Oltulu</title>
    <description>The latest articles on DEV Community by Fırat Oltulu (@firatoltulu).</description>
    <link>https://dev.to/firatoltulu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F201251%2F06568875-4220-400e-9a6a-1b3366d5f0ab.jpeg</url>
      <title>DEV Community: Fırat Oltulu</title>
      <link>https://dev.to/firatoltulu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/firatoltulu"/>
    <language>en</language>
    <item>
      <title>React mı VueJs mi Hangisini Kullanmalıyım ?</title>
      <dc:creator>Fırat Oltulu</dc:creator>
      <pubDate>Thu, 09 Apr 2020 12:41:08 +0000</pubDate>
      <link>https://dev.to/firatoltulu/react-mi-vuejs-mi-hangisini-kullanmaliyim-272g</link>
      <guid>https://dev.to/firatoltulu/react-mi-vuejs-mi-hangisini-kullanmaliyim-272g</guid>
      <description>&lt;p&gt;Hikaye’me nereden başlamalıyım bilemedim, herşey yeni bir uygulama projesi ile başladı.&lt;br&gt;
Herkes gibi bende trend olan teknolojileri araştırmak ile işe başladım. Tabi sadece ben değil, projedeki ekip arkadaşlarım da, araştırmaya başladı. Proje toplantıları, sunumları gözden geçirme derken. &lt;strong&gt;ReactJS&lt;/strong&gt; kurumsal hayatta daha çok tercih edildiğinden bahsedilmeye başlandı. Çünkü arkasında &lt;strong&gt;Facebook&lt;/strong&gt; var. Kurumsal hayatta bu felsefe çok önemli bir uygulama veya bir framework seçer iseniz mutlaka kurumsal desteği olmalı. Tabi ki Frontend teknolojilerinde böyle kurumsal destek, daha çok ücretli satılan paketler de geçerli oluyor. ReactJS ve VueJS için bunu söylemek pek doğru değil, ikisinde desteği sadece topluluk olarak var. (stackoverflow vb.)&lt;/p&gt;

&lt;p&gt;Proje toplantıların da gerekse birebirler de ben vuejs kullanma taraftarı olduğumu basa basa söylüyordum, aslında kendimce sebebim çok açıktı.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Öğrenmesi çok kolay.&lt;/li&gt;
&lt;li&gt;Yapısal anlamda KnockoutJS, Angular benzer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Internet de epey araştırmalarım neticesinde iyi bir sonuç alamadım, zira kimse ReactJS, VueJS den daha iyi veya daha kötü diyemez iddia da edemez.&lt;/p&gt;

&lt;p&gt;İşi daha karışık hale getirmeden en iyi sonuç ihtiyacınız olan proje için bir POC  yapmak. Bende öyle yaptım, önce vueJS ile bir tane temasatın aldım ( &lt;a href="https://themeforest.net/item/vuexy-vuejs-html-laravel-admin-dashboard-template/23328599"&gt;https://themeforest.net/item/vuexy-vuejs-html-laravel-admin-dashboard-template/23328599&lt;/a&gt; ), Hızlıca istediğim şekilde düzenlemeye başladım. çünkü anlaşılırdı, gerek bir sayfa kodlarken,  &lt;strong&gt;Template, Script,  Style&lt;/strong&gt; notasyon kullanımı çok rahat ve bildiğimiz &lt;em&gt;HTML&lt;/em&gt; standartdı.&lt;/p&gt;

&lt;p&gt;Ayrıca Routing, Vuex yapısı kullanımı çok rahat. ReactJS’deki gibi declarative değil. Diğer konulara pek girmeye gerek yok zira internette bir çok karşılaştırma yazıları bulabilirsiniz.&lt;/p&gt;

&lt;p&gt;Gelelim ReactJS’e&lt;br&gt;
Başlar da çok itici geliyordu, çünkü daha öncede angularJS ve knockoutJS kodlama tecrübemiz olduğu için bilinen dışında bir kodlama biçimine sahip.  ReactJS ile de POC ( &lt;a href="https://themeforest.net/item/air-ui-multi-concept-admin-template/24434456"&gt;https://themeforest.net/item/air-ui-multi-concept-admin-template/24434456&lt;/a&gt;) yapmak gerekliydi. Bu temayı satın alarak yola devam ettim.  Düzenledikçe zorlukları fark ettim.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Öğrenmesi epey meşakatli&lt;/li&gt;
&lt;li&gt;Yapısal anlamda bilinenlere benzemiyor&lt;/li&gt;
&lt;li&gt;Herşey Declaratif&lt;/li&gt;
&lt;li&gt;SPA’ya uygun değil ( Şahsi Fikrim )&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;HOOK ile birşeyleri düzeltmeye kolaylaştırmaya çalıştırmışlar, evet biraz ilerleme kaydetmişler gayet de güzel olmuş.&lt;/p&gt;

&lt;p&gt;Redux, Routing yapısılarıda öğrenmek de biraz zaman alıyor.&lt;/p&gt;

&lt;h2 id="sonuç"&gt;Sonuç&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Her ikisi içinde yeteri kadar dökümantasyon var. Hatta VueJs bu konu da daha iyi&lt;/li&gt;
&lt;li&gt;Her ikisi içinde UI kütüphaneleri tatmin edici seviyede&lt;/li&gt;
&lt;li&gt;Her ikisinde de gün sonunda aynı etkiyi verebilirsiniz ( Müşteri arkaplanda ne çalıştığını bilmeyeceği için sorun yok :) )&lt;/li&gt;
&lt;li&gt;Her ikisininde toplulukları  gayet makul düzeyler de&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Projeler de temel sorun, zaman baskısıdır. eğer yeterli kadar zamanınız varsa. POC yapın ve size kolay gelen ile yola koyulun.&lt;br&gt;
15 yıllık tecrübem şunu bana gösterdi, trendler değişebilir. değişmeyen tek şey &lt;strong&gt;ZAMAN BASKISI&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>vue</category>
    </item>
    <item>
      <title># Windows ortamında NodeJS Javascript Out of Memory Problemi</title>
      <dc:creator>Fırat Oltulu</dc:creator>
      <pubDate>Thu, 09 Apr 2020 12:38:58 +0000</pubDate>
      <link>https://dev.to/firatoltulu/windows-ortaminda-nodejs-javascript-out-of-memory-problemi-538f</link>
      <guid>https://dev.to/firatoltulu/windows-ortaminda-nodejs-javascript-out-of-memory-problemi-538f</guid>
      <description>&lt;p&gt;ReactJS ile yazmaya devam ettiğimiz bir UI kütüphanesi projesi için, dökümantasyon yazma gereği hissedik ve bunun için &lt;a href="https://www.docz.site/"&gt;https://www.docz.site/&lt;/a&gt; kullanmaya karar verdik. &lt;/p&gt;

&lt;p&gt;Harika bir kütüphane,  &lt;a href="https://www.gatsbyjs.org/"&gt;https://www.gatsbyjs.org/&lt;/a&gt; alt yapısını kullarak, hızlı bir şekilde bir websitesi hazırlayabiliyorsunuz.&lt;/p&gt;

&lt;p&gt;Gelelim problemimize, yaklaşık 65 sayfa döküman oluşturduk. GatsbyJS SSR ile siteyi oluşturduğu için bir süre sonra Javascript Out Of Memory ( Heap Memory ) almaya başladık.  İnternetdeki aramalarımızda,  developerların sıkça aldığını gördük. Biz geliştirmeyi &lt;strong&gt;windows&lt;/strong&gt; ortamında yaptığımız için, hali ile internetteki verilen çözümlerde OS belirtilmiyor genelde. &lt;/p&gt;

&lt;p&gt;Bu problemi aşağıdaki şekilde çözebilirsiniz.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;node_modules/bin&lt;/strong&gt; klasörü içinde yer alan &lt;code&gt;docz.cmd&lt;/code&gt; ve &lt;code&gt;gatsby.cmd&lt;/code&gt; dosyalarını açın  ve &lt;code&gt;"%_prog%"&lt;/code&gt; ifadesinin yanına &lt;code&gt;"--max_old_space_size=8192"&lt;/code&gt; aşağıda olduğu gibi.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;@ECHO  off
SETLOCAL

CALL :find_dp0
IF  EXIST  &lt;span class="s2"&gt;"%dp0%&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;ode.exe"&lt;/span&gt;  &lt;span class="o"&gt;(&lt;/span&gt;
  SET  &lt;span class="s2"&gt;"_prog=%dp0%&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;ode.exe"&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt;  ELSE  &lt;span class="o"&gt;(&lt;/span&gt;
  SET  &lt;span class="s2"&gt;"_prog=node"&lt;/span&gt;
  SET  &lt;span class="nv"&gt;PATHEXT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;%PATHEXT:&lt;span class="p"&gt;;&lt;/span&gt;.JS&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;%
&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="s2"&gt;"%_prog%"&lt;/span&gt;  &lt;span class="s2"&gt;"--max_old_space_size=8192"&lt;/span&gt; &lt;span class="s2"&gt;"%dp0%&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;.&lt;/span&gt;&lt;span class="se"&gt;\d&lt;/span&gt;&lt;span class="s2"&gt;ocz&lt;/span&gt;&lt;span class="se"&gt;\b&lt;/span&gt;&lt;span class="s2"&gt;in&lt;/span&gt;&lt;span class="se"&gt;\i&lt;/span&gt;&lt;span class="s2"&gt;ndex.js"&lt;/span&gt; %&lt;span class="k"&gt;*&lt;/span&gt;

ENDLOCAL
EXIT /b %errorlevel%
:find_dp0
SET  &lt;span class="nv"&gt;dp0&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;%~dp0
EXIT /b
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Eğer direk &lt;code&gt;node index.js&lt;/code&gt; gibi bir ifade ile nodejs modulunüzü çalıştırıyorsanız &lt;code&gt;node index.js --max_old_space_size=8192&lt;/code&gt; şeklinde değiştirmeniz yeterli olacaktır&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>outofmemory</category>
      <category>windows</category>
      <category>node</category>
    </item>
    <item>
      <title># ElasticSearch 1.7 versiyonun'dan 7.5 versiyonuna geçiş hikayemiz.</title>
      <dc:creator>Fırat Oltulu</dc:creator>
      <pubDate>Thu, 09 Apr 2020 12:37:57 +0000</pubDate>
      <link>https://dev.to/firatoltulu/elasticsearch-1-7-versiyonun-dan-7-5-versiyonuna-gecis-hikayemiz-3jp1</link>
      <guid>https://dev.to/firatoltulu/elasticsearch-1-7-versiyonun-dan-7-5-versiyonuna-gecis-hikayemiz-3jp1</guid>
      <description>&lt;p&gt;Merhabalar,&lt;/p&gt;

&lt;p&gt;Edindiğimiz tecrübeyi yazıya aktarmak genel'de zor oluyor, fakat tecrübe ve bilgi paylaştıkça daha anlamlı oluyor.&lt;/p&gt;

&lt;p&gt;Turkcell içinde müşteri şikayetleri ve diğer süreçleri yönettiğimiz &lt;strong&gt;Onedesk&lt;/strong&gt; adında bir uygulamaz var. &lt;/p&gt;

&lt;p&gt;Bu uygulama %100 türk mühendislerinin emekleri ile yazılmış bir BPM alt yapısı üzerinde koşmaktadır. Alt yapı üzerinde koşan tüm uygulamalar ve o uygulamalara ait veriler üzerinde arama ve sıralama işlemleri &lt;strong&gt;ElasticSearch&lt;/strong&gt; alt yapısı kullanılarak çalışmaktadır.  Biraz rakamlar ile açıklayacak olursak.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Yaklaşık 600 milyon döküman üzerinde anlık 1500+ kullanıcı ile arama
işlemleri yapılmaktadır. &lt;/li&gt;
&lt;li&gt;Sistemin bel kemiğini oluşturmaktadır.

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10 Node&lt;/strong&gt; üzerinde *&lt;em&gt;5 Primary ve Replica *&lt;/em&gt;  olacak şekilde bir konfügürasyonu ile çalışmaktadır.&lt;/li&gt;
&lt;li&gt;Ortalama sorgu ve sıralama işlemlerinde &lt;strong&gt;ElasticSearch&lt;/strong&gt; üzerinden dönüş
sürelerimiz &lt;strong&gt;5sn&lt;/strong&gt; altındadır.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Neden version yükseltmeye ihtiyaç duyduk
&lt;/h2&gt;

&lt;p&gt;Yaşam ömrünü tamamlamış bir sürümden dolayı, sıkıntı çektiğimiz durumlarda çözümler genelde yeni sürümler ile sunuluyordu.&lt;/p&gt;

&lt;p&gt;ElasticSearch 1.7 sürümünden beri bir çok konuda mesafe kat etti ve çözümler sundu.&lt;/p&gt;

&lt;p&gt;Özellikle 7.5 sürümünde bellek, disk ve cluster iyileştirmelerinde bize katkı sunacağını düşündük.&lt;/p&gt;

&lt;h2&gt;
  
  
  Geçiş Hazırlıkları
&lt;/h2&gt;

&lt;p&gt;ElasticSearch 1.7 versiyonunda &lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.6/removal-of-types.html"&gt;&lt;strong&gt;type&lt;/strong&gt;&lt;/a&gt; kullanımı vardı,   Indexin altında &lt;strong&gt;type&lt;/strong&gt; ile verilerimizi kategorize edebiliyorduk. Fakat 6.8 versiyonundan sonra &lt;strong&gt;type&lt;/strong&gt; kaldırıldığını öğrendik bu bizim için çok büyük bir süpriz oldu. &lt;br&gt;
Çünkü 1 alt yapı üzerinde koşan 12 farklı uygulama var.  Sadece değişiklik &lt;strong&gt;type&lt;/strong&gt; ile sınırlı değildi &lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking_50_search_changes.html"&gt;arama ve DSL&lt;/a&gt;  yapısında değişiklikler söz konusuydu.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Neler yapacağımızı aşağıdaki gibi planladık.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tüm verilerimizi tekrar indexleyecektik, fakat tüm verileri veritabanından çekip indexlemek çok uzun bir süre olacağı için, Çözüm olarak  ES 1.7 ortamından alıp, 7.5 versiyon şemasına uygun hale getirip indexlemeye karar verdik. &lt;/p&gt;

&lt;p&gt;Bir aktarım aracı yazdık.  Kısaca bahsetmek gerekirse, verileri 1.7 versiyonundan alıp, &lt;a href="https://redis.io/"&gt;https://redis.io/&lt;/a&gt; üzerinde muhafa ettik.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Redis&lt;/strong&gt; üzerinde dosyaya kaydetme işlemini kapattık, Verileri sadece &lt;strong&gt;in-memory&lt;/strong&gt; tutacak şekilde konfügüre ettik. &lt;br&gt;
Aktarımlar sırasında gördük ki, veri boyutu artıkça, redis anlık görüntüyü kayderderken ciddi problemler yaşıyor.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bunu yapmamızın sebebi önce veriyi alıp, daha sonra başka bir uygulama vasıtası ile 7.5 uygun desene çevirmek olacaktı. &lt;/p&gt;

&lt;p&gt;Yaklaşık 2 aylık bir süre veriyi toplayıp ve dönüştürmek ile vakit geçirdik. &lt;/p&gt;

&lt;p&gt;Bu süre sonunda, yaklaşık &lt;strong&gt;240 binlik&lt;/strong&gt; indexlememiz gereken veriyi yaklaşık &lt;strong&gt;6&lt;/strong&gt; saatte aktarabilir hale geldik. &lt;/p&gt;

&lt;h2&gt;
  
  
  Test Süreçleri
&lt;/h2&gt;

&lt;p&gt;Yaklaşık 4 aylık bir test süreci geçirdik.  Sürenin bu kadar uzun olmasının ana sebeplerinden biri kullanıcı deneyimlerinde herhangi bir kayıp yaşatmak istemedik,  1.7 sürümünde veri tipleri sınırlı olduğu için özellikle &lt;strong&gt;Text&lt;/strong&gt; alanlarda çok fazla &lt;strong&gt;lucene&lt;/strong&gt; syntax kullanmıştık. &lt;br&gt;
7.5 sürümü ile &lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.0/text.html"&gt;&lt;code&gt;text&lt;/code&gt;&lt;/a&gt;  ve &lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.0/keyword.html"&gt;&lt;code&gt;keyword&lt;/code&gt;&lt;/a&gt; gibi iki ayrım olduğu için ona göre kullanıcı deneyimlerimde iyileştirmeler yaptık. daha akıllı aramalar seçenekler sunduk. &lt;/p&gt;

&lt;h3&gt;
  
  
  Preprod test süreci
&lt;/h3&gt;

&lt;p&gt;Canlıda çalışan ElasticSearch topolojisinin birebir uyguladık. ve ek olarak  burada 7.5 sürümü ile gelen &lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.x/allocation-awareness.html#forced-awareness"&gt;awareness&lt;/a&gt;  ayarlamasını yaptık. &lt;br&gt;
Kısaca bahsetmek gerekirse 2 farklı lokasyonda veri tutuyorsanız, replica shard ile primary shardlar kesinlikle ayrı lokasyonda olması kuralını koyduk. &lt;br&gt;
Herhangi bir lokasyonda çıkacak problemde veri kaybı yaşamamak için çok güzel bir özellik. 2 farklı lokasyonda 2 master node olacak şekilde konfigüre ettik.&lt;br&gt;&lt;br&gt;
Preprod testlerimizde başarılı sonuçlar alınca canlı geçişi için hazır hale geldik.&lt;/p&gt;

&lt;h2&gt;
  
  
  Devreye  Alım
&lt;/h2&gt;

&lt;p&gt;PROD devreye alımından sonra, bir süre sistemi izledik, Geçişten 2 gün sonra TCP Keep Alive ile ilgili bir sorun yaşadık,  ElasticSearch süresiz bir bağlantı açıyor ( long-lived TCP connections ) fakat şirket prensipleri gereği, bu sürenin bizde sınırlı olduğunu öğrendik, Windows yaptığımız konfügürasyon ile bu probleminde üstesinden geldik.   &lt;/p&gt;

</description>
      <category>elasticsearch</category>
      <category>versionupgrade</category>
    </item>
  </channel>
</rss>
