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

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!

Getir & BiTaksi Hackathon Macerası

30. Mart 2017 09:00by Garen Yöndem

Yaklaşık bir hafta önce başvuru yaptığım Getir & BiTaksi hackathon’u geçtiğimiz hafta sonu gerçekleşti. Bu sene yoğun başvuru miktarıyla başa çıkabilmek için, geçtiğimiz yıldan farklı olarak ön eleme sistemini devreye sokmuşlar. Başvuru yapmak isteyen herkesin öncelikle tamamlaması gereken ufak bir projesi vardı. Dolayısıyla bu yılki hackathon katılımcılarının kalite standardının yükseldiği çıkarımını yapmak yanlış olmaz sanıyorum. Bu yılki hackathonun diğer bir farkı ise BiTaksi’nin de organizasyona dahil olması.


Getir ve BiTaksi Hackathon Macerası - garen.yondem.com


Hafta içinde tamamlanan ön eleme ve kabul aşamalarından sonra, takim arkadaşım Aleks’le (Mutlu) beraber Cuma akşamı hackathon alanında yerimizi aldık. Diğer katılımcılarla tanışma ve proje konumuzun sunulmasının ardından 48 saatlik maraton başlamış oldu.


Her yeni projede olduğu gibi ilk saatleri fikir bombardımanı ve Github repo’muzu oluşturmakla geçirdik. Mümkün oldukça asgari seviyede tuttuğumuz isterleri belirledikten sonra çalışmaya başladık. Projemiz, kullanıcıların organizatörlerle buluşabilecekleri veya kendilerinin de bir etkinlik organizatörü olabilecekleri bir platform oluşturmaktı. Pek çok açıdan BiTaksi ile benzerlik gösterse de, uygulamada yapacağı iş ile daha bağlantılı olacağı için takımımızın ve uygulamanın adını “Gezdir” koyduk. Geliştirme sürecimiz genel olarak 2-3 saatlik bloklar ve ara durum değerlendirmeleri şeklinde sürdü. En fazla özen gösterdiğimiz şey ise back-end ile client-side implementasyonlarını eş zamanlı ilerletmek oldu. Yani back-end’de bir feature bittiği an, Aleks’in sıradaki işi o feature’un eklenmesi oldu. Böylece 48 saat boyunca senkronize kalmayı başardık.


Getir ve BiTaksi Hackathon Macerası - garen.yondem.com


Getir ve BiTaksi’nin muhteşem ev sahipliği sayesinde sık sık yemek ve eğlence molaları vererek çok daha motive şekilde çalışmaya kaldığımız yerden devam edebildik. Bu noktada etkinliğin lojistik kısmında emeği geçen herkesi tebrik etmem gerek. Bir hackathon’da olması beklenen her şey fazlasıyla vardı. Yeni insanlarla tanışma imkanı, yeni teknolojileri öğrenme fırsatı, sınırsız ücretsiz yemek, hackathon tshirt’ü ve sonunda ödül!


Final günü gün doğarken projemizi yüzde doksan oranında tamamlamıştık. Son detayları ve testlerimizi tamamladıktan sonra sunumların yapılacağı salona geçtik. “Ekleseydik daha güzel” olurdu dediğimiz özellikleri yolda konuşurken, aniden, ilk sunum için çağırılınca heyecanımız ikiye katlandı. Bilirsiniz genelde ilk sunumu yapan olmak dezavantajlı bir durumdur. Buna rağmen iyi iş çıkardık sanırım.


Getir ve BiTaksi Hackathon Macerası - garen.yondem.com


Herkes sunumunu tamamladıktan sonra sonuçlar için bir saat kadar beklememiz gerekti. Her takım gibi bizim de derece beklentimiz vardı. Sonuçlar açıklanmaya başlandığında üçüncü veya ikinci olmadığımızı gördüğümüzde benim umudum oldukça azaldı. Kısa bir süre sonra birinci açıklandığında kulaklarımıza inanamadık, birinci olmuştuk. O anda bir 48 saat daha aralıksız çalışabilecek kadar mutlu ve motive oldum.


Getir ve BiTaksi’ye böyle güzel bir etkinliğe ikinci kez ev sahipliği yaptıkları için çok teşekkürler. Bu arada, Serhat Karakaya’nın verdiği bilgiye göre de yakın gelecekte bu etkinliğin tekrarlarını yapmaktan vazgeçmeye niyetleri yok!

Projemize buradan ulaşabilirsiniz.


Görüşmek üzere!

Surface Book Değerlendirmesi

11. Ekim 2015 15:00by Garen Yöndem

Microsoft’un Yaz başında duyurduğu Windows 10 Devices etkinliği geçtiğimiz Salı günü gerçekleşti. Etkinlikte Microsoft’un yeni cihazlar duyurması bekleniyordu hatta deyimi yerindeyse yeni cihazların yağmur olup yağacağı söylentiler arasındaydı ve beklenen oldu. Microsoft altı yeni cihazın, Band 2, Lumia 950 & 950 XL, Lumia 550, Surface Pro 4 ve Surface Book’un lansmanını yaptı. Etkinliğin temposu hiç düşmedi, her cihaz kendi kategorisinde inovatif ve iddialıydı. Benim için en şaşırtıcı değişikliklerden biri de Panos Panay’ın sunum yapma yetenğindeki gelişme oldu. Yeni pozisyonunun getirdiği motivasyondan kaynaklanıyor olsa gerek, super iş çıkardı :).


Surface Book Değerlendirmesi - garen.yondem.com


6 Ekim 2015 tarihi ileride hatırlanması gereken bir tarih olarak tekrar karşımıza çıkacaktır, dolayısıyla bu zamanları iyi değerlendirmek gerek. Uzun yıllar sonra Microsoft basının 100%’üne yakın kesiminden olumlu yanıtlar almaya başladı. Windows 10 lansmanından bu yana Microsoft hakkında en ufak bir kötü eleştiriye dahi rastlamak zorlaştı. Bu başarının arkasındaki etkenler ise Satya Nadella ile yeni Microsoft’un hedeflerinin daha net olması ve onlara sadık kalması gibi görünüyor. Bunu etkinlik boyunca Panos Panay’ın söylemlerinden de anlamak mümkündü. 2007’de başlayan ve Microsoft’un uzun süre seyirci kaldığı iPhone, Android furyasından sonra artık yeni bir çağ başlıyor gibi, ne dersiniz? Gelecek, 2in1 ve Continuum konseptlerinin günlük hayatımızın bir parçası olacağına işaret ediyor.


Lafı daha fazla uzatmadan Surface Book’a geçelim. Herkesin hem fikir olduğu gibi, Microsoft son yılların en iyi “one more thing” olayına imza attı. Surface Book etkinliğin sonuna bomba gibi düştü, Microsoft’a en yakın basın mensuplarının bile haberi olmayan (ve hayret verici şekilde hiç sızdırılmayan) cihaz sıradan bir dokunmatik ekranlı ultrabook gibi lanse edildi. Ardından tam her şey bitti darken şaka gibi lansıman videosunun devamı gösterildi ve Surface Book’un 2in1 olduğu ortaya çıktı. Panos Panay’ın bu süreçdeki oyunculuğuna da hayran oldum doğrusu.



Donanım ve Tasarım

Yaklaşık bir sene önce laptop’ımı değiştirmek için piyasa araştırması yaptığımda, Surface Pro 3 haricindeki 2in1 seçeneklerinin çok zayıf olduklarını görmüştüm ve Asus Zenbook UX303LN ultrabook almaya karar vermiştim. Surface Pro 3’ün benim için yetersiz olmasındaki sebepler ise, maksimum 8GB Ram'inin olması ve harici ekran kartının olmaması. Surface Pro 4 ile 8GB ve 16GB Ram olarak iki farklı seçenek duyuruldu fakat harici ekran kartı konusunda bir gelişme olmadı. Neyseki, hem Surface Pro 4 hem de Surface Book Intel’in güncel 6th gen Skylake işlemcilerini kullanıyorlar ve on-board grafik performansları bir önceki nesillerinden daha üstün.


Surface Book Değerlendirmesi - garen.yondem.com


Microsoft, Surface Book ile bu boşluğu da doldurmayı hedefliyor. Surface Book piyasada şimdiye kadar hiç görülmemiş bir mühendislikle klavye kısmında Nvidia GeForce GPU ve ekran kısmında Intel Skylake işlemci barındırıyor. Aynı zamanda her iki modülün de kendi pilinin olması tablet olarak kullanıma da imkan sağlıyor. Böylece klavye ile birlikte kullanıldığında, sisteme hem ekstra batarya hem de Nvidia GPU’nun gücü eklenmiş oluyor. Anakartın her iki modüle de yayılmış olması açısından, bu tasarım bir ilk ve harika.


Bu tasarımın ihtiyaç duyacağı güçlü bağlantıyı sağlamak için de Microsoft, Muscle Wire Lock adını verdiği bir kilit mekanizması geliştirmiş. Bu mekanizma hem sistemi güvenilir şekilde bir arada tutuyor, hem şarj olurken gelen enerji ile daha da güçlenerek sıkılaşıyor.


Surface Book Değerlendirmesi - garen.yondem.com


Bir diğer önemli tasarım özelliği ise Microsoft’un Dynamic Fulcrum adını verdiği menteşesi. Aslında Lenovo’nun Yoga 3 Pro modelinde kullandığı menteşe oldukça benziyor. Microsoft bu tasarımdan esinlenmiş olmalı fakat bir adım daha ileriye götürüyor. Dynamic Fulcrum menteşesi klavyenin kapladığı yüzey alanını genişleterek, genelde ucuz 2in1’larda gördüğümüz ekran kısmındaki ağırlıktan dolayı ağırlık merkezinin geriye kaçmasını engellemiş.


Surface Book Değerlendirmesi - garen.yondem.com


Surface Book’da bulabileceğiniz teknik özellikleri ise şöyle;


  • 13.5” Pixel Sense ekran

  • 6th Gen (Skylake) Intel Core i5 / i7

  • 3000 x 2000 çözünürlük, 267 ppi yoğunluk, 3:2 en-boy oranı, dokunmatik

  • 128GB – 1TB aralığında SSD depolama seçenekleri

  • 8 veya 16 GB Ram

  • Nvidia GeForce 1GB GDDR5 GPU

  • Stereo Hoparlörler – Dolby Audio

  • 802.11ac WiFi, BT4.0

  • Işık sensörü, akselerometre, jiroskop, manyetometre


Kapanış

Microsoft’un Surface Book ile Macbook Pro’yu hedef aldığına şüphe yok. Zaten sunum sırasında da Surface Book’un güncel Macbook Pro’dan 2kat hızlı olduğunu belirttiler. Apple’ın son kullanıcıya güçlü donanım satma konusunda ne kadar mütevazi olduğunu göz önüne alacak olursak, Macbook Pro ile yarışacak bir cihaz üretmek zaten zor değil. Bu noktada önemli olan, tasarım olarak da “değerli” imajını son kullanıcıya aktararak +1500$ seviyelerinde Apple’ın hakim olduğu %6’lık PC piyasasını kapmaya çalışmak. Çünkü son verilere göre dünya çapında PC satışları düşerken, satış hacmini en fazla büyüten marka Apple oldu. Aksi bir durumda Microsoft kendi partnerleriyle rekabet ediyor olacaktı. Bu arada, Dell, HP vb. Bütün donanım partnerlerinin etkinlikten önce Surface Book’dan haberi olduğu da dedikodular arasında. Buna rağmen nasıl sızdırılmamış hayret.


Surface Book Değerlendirmesi - garen.yondem.com


Sonuç olara Surface Book’un da kardeşi Surface Pro gibi piyasaya iyi geleceğini, piyasayı yönlendireceğini düşünüyorum. Surface serisi tam anlamıyla, Microsoft’un gelcek vizyonunu ve Windows’un geleceğini ifade ettiği bir seri haline dönüşüyor.


Görüşmek üzere!

Visual Studio 2015’te XAML Formatını Değiştirmek

2. Ağustos 2015 11:00by Garen Yöndem

Burada paylaşma fırsatı bulamadığım son zamanlarda, Android uygulamaları geliştiren ekiplerde yer almaya ve dolayısıyla Java + Android Studio kullanmaya başladım. Bundan sonra giriş seviyesinde de olsa Android ve Java tecrübelerimi ve maceralarımı da fırsat buldukça paylaşmaya çalışacağım. Fakat bugün Android Studio’da kullanmaya alıştıktan sonra kendimi daha rahat hissettiğim ve aynı ortamı Visual Studio’da da yaratmaya çalıştığım, XML ve XAML kod formatlama özelliğinden bahsedeceğim.


Bahsettiğim özellik esasında kodun görünüşünü değiştirmekten ötesi değil. Android Studio kullanmış olanlar zaten biliyordur, o ortam için varsayılan ayar bu şekilde (yanılmıyorsam). Layout yani XML kodlarına baktığınızda XML elementlerinin her property’si bir satırdan oluşuyor. Bu davranış layout kodunun dosya boyutunu oldukça büyütüyor ancak, kodu çok daha okunaklı ve aradığınız property’i bulmanızı kolay kılıyor.


Bu özelliği Visual Studio 2015’te etkinleştirmek için; Tools > Options > Text Editor > XAML > Formatting > Spacing yolunu takip ettikten sonra ulaşacağınız aşağıdaki pencerede, her property’yi ayrı satıra yerleştirme özelliğini bulabilirsiniz.


Visual Studio 2015’te XAML Formatını Değiştirmek - garen.yondem.com


Ayarlamayı kaydettikten sonra mevcut XAML sayfalarında Edit > Advanced > Format Document seçeneğini seçerek kodu aşağıdaki şekilde formatlayabilirsiniz.


Visual Studio 2015’te XAML Formatını Değiştirmek - garen.yondem.com


Görüşmek üzere