garen.yöndem launching ...3 ...2 ...1

Visual Studio Code

6. Aralık 2017 09:00by Garen Yöndem

Son yıllarda cross platform tool’larını ve platform bağımsız servislerini görmeye alıştığımız Microsoft bulunduğu konuma ulaşabilmek için çok çaba harcadı. Bu çabanın ürünlerinden biri Visual Studio Code olarak karşımızda. Visual Studio Code’un özelliklerinden bahsetmeye başlamadan önce her yazıda yaptığımız gibi hikayesine bakalım.


Visual Studio Code - garen.yondem.com


Microsoft 2014 yılında şimdiki adıyla Visual Studio Team Services olan Visual Studio Online’da Azure Websites için kullanılmak üzere kod adı Monaco olan in-browser code editörü yayınladı. Monaco’da git entegrasyonu ve cloud shell gibi Visual Studio Code’da göreceğimiz pek çok özellik bulunuyor.


Monaco, Visual Studio Online’in gelişimi için süper bir adım oldu. Source control, continues integration, applicaton lifecycle management tool’ları ve code editör bir araya geldi. O sırada in-browser code editörlerin trend olduğu ve pek çok alternatiflerin çıktığı bir dönem başlamıştı. Bu hype uzun sürmedi çünkü, tarayıcı temelli code editörlerin performans, güvenilirlik ve özelleştirilebilirlik konularında desktop editörlerin çok gerisinde kaldıkları görüldü.


Microsoft Windows haricindeki platformlarda developer’ların bilgisayarlarına kurabilecekleri bir ürün çıkarabilmek için Monaco’yu web’den desktop’a doğru transfer etti. Bu süreçte Microsoft yeni uygulama için, başarısını zaten Atom ile kanıtlamış olan Electron Framework’ü tercih etti. Electron javascript, html ve css ile yazılmış web uygulamanızı mevcut code base’in büyük kısmına dokunmadan macOS, Windows ve Linux ortamlarına taşıyabilmenizi sağlayan bir desktop uygulama framework’ü sunuyor. Electron’un NodeJS runtime’ı ve ara yüz engine’i olarak da Chromium’u kullandığını belirtmek gerek. Son olarak, VS Code’un source code’una Github’dan ulaşabileceğini hatırlatmama gerek yok sanırım.


Visual Studio Code - garen.yondem.com


VS Code üç yıldır hayatımızda ve gelişimi ivmelenerek devam ediyor. Kasım ayı başındaki Microsoft’un Connect(); ‘17 konferansında paylaşılan istatistiklere göre aylık aktif kullanıcı sayısı geçen yıl aynı döneme kıyasla %160 büyümeyle 2.6 milyonu geçti. Github’da ise 15bin kişi katkıda bulundu.


Çoklu Dil Desteği

Microsoft’un “any platform, any language, any developer” motto’suyla geliştirdiği VS Code ile aklınıza gelebilecek hemen her dilde development yapmak mümkün. Javascript, C#, Go, Python ve VB gibi popüler diller için hali hazırda desteği bulunuyor. Elm, Rust, Dart, Swift, R, Clojure, Scala, Kotlin, Erlang, Haskell, Lua ve Crystal dahil pek çok dil için ise Language Extension paketlerini kurmak gerekiyor. Listeye eklemediğim diğer dillerle beraber 35’ten fazla dil desteğinden bahsediyoruz.


Visual Studio Code - garen.yondem.com


IntelliSense

Visual Studio Dünya’nın en iyi IDE’lerinden biri ve en iyi IntelliSense’ine sahip. Bir framework’ün veya library’nin method’larına hakim olmanıza gerek kalmadan IntelliSense’i kullanarak ortaya çalışan programlar çıkartabilirsiniz. VS Code’da bu deneyimi cross-platform’a taşımayı başarmış durumda. Fakat yazdığınız dile ve kullandığınız dil extension’ına göre verimliliği değişiklik gösteriyor.


Visual Studio Code - garen.yondem.com


Typescript, NodeJS ve Python gibi popüler diller için oldukça verimli olmasına rağmen Rust gibi daha az popüler olan dillerde aynı verimi alamayabilirsiniz. Özellikle NodeJS development verimliliği konusunda VS Code uzun zamandır Visual Studio’nun ilerisinde. Ancak henüz .NET programlama dillerinde Visual Studio’nun eline su dökemeyeceğini de belirtmek lazım.


Debug

VS Code ile yukarıda bahsettiğimiz tüm dillerdeki projelerinizi breakpointler kullanarak kolaylıkla debug edebilirsiniz. Debugging’e başlamadan launch.json dosyasını düzenlemelisiniz. Bu dosyada VS Code’un debug konfigürasyonları yer alıyor. Launch.json’ı oluşturmak için debug menüsünden çark buton’una tıklamanız yeterli.


Visual Studio Code - garen.yondem.com


VS Code varsayılan ayarlar ile çalıştığınız dile uygun düzenlenmiş olarak dosyayı projenize ekleyecektir. Varsayılan ayarlar çoğu zaman yeterli olacaktır, ancak projeniz belli bir giriş noktası olan bir web servis projesi ise başlangıç dosyasını entry point aşağıdaki gibi belirtmeniz gerekecek.


Visual Studio Code - garen.yondem.com


Launch.json dosyasını oluşturup gerekli konfigürasyonları tamamladıktan sonra projenize uygun debugger’ı da seçerek debug etmeye başlayabilirsiniz. Kullandığınız dile uygun debugger’ı listede bulamıyorsanız Visual Studio Marketplace’ten extension olarak ekleyebilirsiniz. NodeJS, Python ve Chrome gibi marketplace’te en çok indirilen debuggerların bizzat Microsoft tarafından geliştirildiğini de belirteyim.


Visual Studio Code - garen.yondem.com


Git

İlk versiyondan itibaren VS Code entegre git desteğiyle geliyor. Mevcut projenizi VS Code’dan ayrılmanıza gerek kalmadan kolayca git repository’si haline getirebilirsiniz. Değişikliklerinizi soldaki menüden takip ederek stage’leyip commit’lerinizi yapabilirsiniz. Bunlara ek olarak stash’leme, yeni branch oluşturma, mevcut dosyayı önceki versiyonları ile kıyaslama gibi standart git işlemlerini de CTRL+SHIFT+P komutuyla ulaşabileceğiniz command palette’ten hızlıca yapabilirsiniz.


Visual Studio Code - garen.yondem.com


Entegre git yetmediğinde onlarca daha özellik eklemek isterseniz Visual Studio Marketplace’te indirilme sayısı 1.7 milyonu geçen Git Lens extension’ını kullanmanızı öneririm.


Marketplace

Herhangi bir yazılımı hafif ve hızlı yapmak istiyorsanız onu modüler olarak tasarlamalı ve hayati olmayan tüm özellikleri çekirdeğin dışında tutmalısınız. Microsoft’un VS Code ile başardığı tam olarak bu. Git, Debugger, IntelliSense gibi hiç kimsenin vazgeçemeyeceği modüller haricinde kalan hemen hemen her şeyi kurmak isteğinize bağlı. Dolayısıyla bu modüllerin sergilenebileceği bir portal’a da ihtiyaç var.


Visual Studio Code - garen.yondem.com


Microsoft’un eskilerden bu yana Visual Studio için kullanılan Visual Studio Gallery adında bir portalı zaten vardı. Ancak portal uzun yıllar boyunca ciddi bir güncelleme almadı ve kullanıcılardan tepki topladı. VS Code’un çıkışıyla birlikte 2016 yılında Visual Studio Marketplace adıyla baştan aşağı yeni bir portal açıldı ve Visual Studio Gallery’nin yerini aldı. VS Marketplace bir tek VS Code extension’ları için değil, Visual Studio, VSTS (Visual Studio Team Services) ve Xamarin University gibi abonelik ile çalışan servislerin de yer aldığı ortak nokta haline geldi.


Connect(); ’17 konferansında paylaşılan sayıya göre Marketplace’te VS Code için 4700’den fazla extension paketi bulunuyor. Hepsini denemekle vakit kaybetmeyin diye github’da aralarından en güzellerinin seçilmiş olduğu listeyi de buraya bırakıyorum.


Sıradaki yazıda artık elimizi biraz kirleteceğiz. Görüşmek üzere!


macOS’te NodeJS Development Ortamı Kurmak

10. Kasım 2017 09:00by Garen Yöndem

NodeJS development için gerekli olan kurulum component’lerinin hikayelerinden ve görevlerinden önceki yazıda bahsetmiştik. Bu yazıda macOS’te de development ortamını kurduktan sonra sıradaki yazıda Visual Studio Code’u inceleyeceğiz.


MacOS ortamında da Windows 10’dakilere benzer kurulum adımlarını takip edeceğiz. Windows’ta kurduğumuz nvm-windows’un bu sefer orijinal versiyonu olan NVM’i (Node Version Manager) kurarak başlayabiliriz. Bildiğiniz üzere, birden çok Node versiyonunu yan yana kurabilmemiz için NVM’e ihtiyacımız olacak.


MacOS ve Linux için NVM’i


  curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash


komutunu terminal'de çalıştırarak cURL ile kurabiliriz.


Windows 10’da NodeJS Development Ortamı Kurmak - garen.yondem.com


Kullanımı oldukça basit, install, list, use komutları fazlasıyla yeterli olacaktır. Nvm install node komutuyla en yüksek versiyon numaralı Node sürümünü kurabilirsiniz. İstediğiniz farklı bir versiyonu kurmak için ise nvm install 6.11.4 şeklinde tercih ettiğiniz versiyonu belirterek kurulumu gerçekleştirebilirsiniz.


Windows 10’da NodeJS Development Ortamı Kurmak - garen.yondem.com


Kurduğunuz node versiyonlarını görmek için nvm list komutuyla listeleyebilirsiniz. Böylece nvm use komutuyla aralarında geçiş yapabileceğiniz versiyonların numaralarını da görebilirsiniz.


Okla işaretlenmiş olan satır aktif olan Node versiyonunu belirtiyor. Nvm-windows’ta aktif versiyon yıldız ile işaretleniyordu hatırlarsınız.


Windows 10’da NodeJS Development Ortamı Kurmak - garen.yondem.com


Alternatif olarak kurulumları versiyon isimlerini kullanarak da gerçekleştirebilirsiniz. Ekran görüntüsünde sol tarafta görebileceğiniz default, node, stable, lts/carbon gibi argümanları kullanarak karşılık gelen versiyonları hızlıca kurabilirsiniz. Kurduğunuz LTS branch’inde güncelleme olduğunda bu satırlar resimdeki gibi kırmızı görünecek. Güncel versiyona geçmek için nvm install lts/carbon komutunu çalıştırmanız yeterli.


Windows 10’da NodeJS Development Ortamı Kurmak - garen.yondem.com


Daha önce bahsettiğimiz gibi, Windows’taki portuna kıyasla macOS’teki NVM biraz daha yetenekli. Aktif versiyonu değiştirmek istediğinizde veya yeni versiyon kurmak üzereyken versiyon numarasının bir kısmını yazmanız yeterli olacak.


Cross platform desteğinden dolayı macOS’te de editör olarak Visual Studio Code’u tavsiye ederim.


Görüşmek üzere!


Windows 10’da NodeJS Development Ortamı Kurmak

24. Ekim 2017 10:00by Garen Yöndem

Önceki yazıda NodeJS’in ne olduğuna ve Node’da basit bir I/O işleminin nasıl çalıştığına göz atmıştık. Daha detaylı makalelere geçmeden önce, Windows ortamında development yapabilmemiz için ihtiyacımız olacak araçları kurmaya başlayalım.


İlk olarak Node’un resmi web sayfası, nodejs.org adresinden NodeJS runtime paketini indirip bilgisayarımıza kurmalıyız. Bu pakete önceki yazıda incelediğimiz libuv gibi temel bileşenlere ek olarak, package management sistemi olan NPM (Node Package Manager) de dahil. Böylece .NET ortamındaki NuGet veya Python ortamındaki PyPi ile yapabildiğimiz gibi third party library’leri kolayca indirerek projelerimizde kullanabiliriz.


Node ekibi 2015 yılından itibaren LTS (Long Term Support) ve Current adından iki branch yürütmeye başladı. Current sürekli yeni feature’lar eklenen versiyon. LTS ise artık olgunlaşmış, sadece bakım güncellemeleri alan versiyon oldu. Gelecek makalelerde yapacağımız örneklerde her iki versiyonu da kullanacağız. Dolayısıyla iki branch’in de son versiyonlarını bilgisayarınıza indirmenizde fayda var.


Bilgisayarınıza birden çok Node versiyonu kurmaya çalıştığınızda kurulum sırasında bir önceki versiyonu kaldırmanızı isteyecektir. Bunun üstesinden gelebilmek için kurulumu NVM (Node Version Manager) kullanarak yapmalıyız. Orijinal versiyonu Linux ve macOS için yazılmış olan NVM’in çeşitli Windows portları bulunuyor. En popüler olanlardan ikisi nvm-windows ve nodist. Orjinal NVM’e benzerliğinden ve kullanım kolaylığından dolayı nvm-windows benim tavsiyem. Nvm-Windows’u GitHub sayfasından indirebilir veya choco install nvm komutuyla chocolatey aracılığıyla kurabilirsiniz. Bunlarla uğraşmak istemiyorum, ben zaten sık sık versiyon değiştirmiyorum diyenler editörlerden bahsedeceğimiz bölüme atlayabilirler. :)


Nvm-windows kurulumunu tamamladıktan sonra konsol’a nvm yazıp yardım dokümanına ulaşabiliriz.


Windows 10’da NodeJS Development Ortamı Kurmak - garen.yondem.com


Dilediğimiz Node versiyonunu indirmek için nvm install 6.10.2 gibi versiyon numarasını eklemeli veya var olan son versiyonu indirmek için nvm install latest komutunu çalıştırmalıyız. Versiyonları sırayla kurduktan sonra nvm list komutuyla bilgisayarımızda kurulu olan Node versiyonlarını listeleyebiliriz.


Windows 10’da NodeJS Development Ortamı Kurmak - garen.yondem.com


Listede yanında yıldız olan satır şu anda aktif olan Node versiyonunu belirtiyor. Aktif versiyonu değiştirmek için nvm use (versiyon numarası) komutunu çalıştırmanız yeterli.


Editör

Gerekli kurulumları tamamladıktan sonra sıra kodumuzu yazacağımız editörü kurmaya geldi. Bilgisayarınızda Visual Studio zaten kurulu ise Node.js Tools for Visual Studio’yu kurarak hızlıca çalışmaya başlayabilirsiniz. Eğer kullanımı daha basit bir editör arıyorsanız Visual Studio Code’u indirebilirsiniz. Serinin ilerleyen yazılarında örneklerimizi benim de aktif olarak kullandığım Visual Studio Code üzerinde yapacağımız için Visual Studio Code’u tercih etmenizi tavsiye ederim.


Windows 10’da NodeJS Development Ortamı Kurmak - garen.yondem.com


Editör tercihimizi ve kurulumumuzu da yaptıktan sonra NodeJS development ortamımız artık hazır. Sıradaki yazıda benzer ortamı macOS’te nasıl kurabileceğimize bakacağız. Görüşmek üzere!

NodeJS Nedir?

6. Ekim 2017 11:00by Garen Yöndem

Javascript dünyasının büyümesine son yıllarda en fazla katkısı olan şey nedir diye soracak olsaydık, hepimizin cevabı şüphesiz NodeJS olurdu. 2009 Yılında ilk versiyonu çıkan NodeJS ile Javascript sadece browser’larda kullanılan bir dil olmaktan kurtularak server-side kullanım alanı da kazandı.


NodeJS Nedir - garen.yondem.com


Peki nedir bu NodeJS? En yaygın tanımıyla, server-side kullanım için hazırlanmış single threaded Javascript runtime. Fakat bu tanımlamada eksikler var ve genellikle yanlış anlaşılmaya neden oluyor. NodeJS CPU kullanımı gerektiren işlemlerde tasarımından dolayı sadece tek thread kullanabiliyor. Yani yoğun CPU işlemleri yapmayı düşünenler için NodeJS doğru tercih değil. Ancak, database’den data okumak gibi I/O işlemlerinde her işlem için yeni bir thread açabiliyor. Bu özelliği de NodeJS’i günümüzde web/mobil uygulamalar için back-end olarak kullanılabilecek ideal seçenek yapıyor.


NodeJS Nedir - garen.yondem.com


NodeJS’e doğru parçalar bir araya getirilerek oluşturulmuş runtime paketi de diyebiliriz. Bu parçalar Chrome V8, libuv ve OpenSSL gibi açık kaynak kodlu library’ler. Gelin bu bileşenlere yakından bakalım.


Chrome V8, ilk olarak 2008’de Google Chrome browser’ında gördüğümüz (artık her yerde karşılaşabileceğimiz) Javascript compiler. Kodu interprete etmek yerinde JIT (Just-In-Time) compiler ile doğrudan machinde code’a çevirebiliyor. C++ ile yazılmış olması da pek çok farklı uygulamaya entegre edilebilir hale getirdi ve piyasadaki konumunu güçlendirdi. MongoDB, ChouchBase, Opera ve Electron bu uygulamalardan birkaçı.


Javascript kodunu parse etmek dışındaki çoğu aksiyon libuv ile gerçekleşiyor. Bunlara event loop ve I/O işlemleri de dahil. İlk versiyonlarında NodeJS çekirdek ekibi tarafından libeio (event loop) ve libev (thread pool) library’leri için wrapper olarak yazıldı. Ancak libev’in performans sorunlarından dolayı, Argon(4.x) versiyonundan itibaren libuv bu bileşenlerin yerini almış durumda.


NodeJS Nedir - garen.yondem.com


Konuyu daha fazla dağıtmadan yukarıdaki mimariye bakarak toparlayalım. NodeJS’e gelen istekler V8 tarafından parse edildikten sonra event queue’ya giriyor. Ardından, event loop CPU yoğunluğuna göre sırayla event’leri çalıştırmaya başlıyor. Eğer event’ler I/O gerektiren işlemler ise, event loop bunlar için ayrı worker thread’ler açtıktan sonra event queue’dan yeni event’ler almaya devam ediyor. Worker thread’de işi biten event ise callback’ini çağırarak tekrar event queue’ya giriyor ve bir sonraki cycle’ı beklemeye başlıyor. Olay bu kadar basit aslında :)


Hello World

Callback, NodeJS’in ayrılmaz parçası. Network veya database gibi harici kaynaklardan cevap beklediğimizde sonucu callback function’lar kullanarak yakalıyoruz. Örnek olarak diskten dosya okuyalım.


Okuyacağımız dosya JS script’iyle aynı klasörde. NodeJS’de dosya veya klasörlerle ilgili işler yapacağımızda fs module’ünü kullanabiliriz. Bu module’ün readFile ve writeFile adında iki popüler function’ı var. Her iki function da parametre olarak callback function alabiliyor. Okuma veya yazma işlemi worker thread’de tamamlandığında callback function’ı çağırarak sonuçları dönüyorlar. Bu sırada event loop boşta beklediği için farklı function’lar çağırmaya devam edebilirdik. Sıradaki işlem için async çalışan function’ın sonucunu beklememiz gerektiğinde ise işimizi callback function’da yapmalıyız.


Şimdi kodu çalıştırıp sonucunu kontrol edelim. NodeJS’i başlatmak için diğer script dillerinde olduğu gibi script’imizin bulunduğu dosyayı executable’a argument geçmeliyiz. Bunun için Visual Studio Code’un integrated terminal’ini kullanabiliriz. Integrated Terminal’e “View” menüsünden ulaşabilirsiniz.


NodeJS Nedir - garen.yondem.com


Script dosyasını yukarıdaki şekilde çalıştırdığımızda dosyanın içeriğini terminal’de görebiliriz.


NodeJS Nedir - garen.yondem.com


Sıradaki yazıda NodeJS için development ortamını nasıl kurabileceğimize bakacağız. Görüşmek üzere!


Emoji Encode ve Decode Etmek

25. Eylül 2017 11:00by Garen Yöndem

Son yıllarda emojilere olan ilgi katlanarak büyüyor. Emojiler artık günlük yaşantımızı bir parçası haline geldi. Küçük, büyük demeden hemen her kesim kendisini ifade ederken emojiler kullanıyor. Hatta bu durumu fırsata çevirip, çeşitli emojiler satarak gelir elde etmeye çalışan start-up’lar dahi var.


Uygulamamızda chat gibi sosyal özellikler olduğunda emoji kullanımını arka planda doğru yönetmeliyiz. Emojiler unicode değerlerdir ve TextBlock gibi kontrollerde kullanıcıya sembol olarak göstermek için öncelikle decode etmeliyiz. Bunun için System.Net namespace’inde bulunan WebUtility class’ındaki HtmlEncode ve HtmlDecode method’larını kullanacağız.


Böylece uygulamamızda aşağıdaki görüntüyü elde edebiliriz.


Emoji encode ve decode etmek - garen.yondem.com


İçinde emojiler bulunan bir text’i web servise’e veya database’e yazmak istediğimizde ise önce encode ederek unicode formatına çevirmeliyiz.


Görüşmek üzere!