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!


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!