9 Nisan 2015 Perşembe

Async İle Asenkron Çalışma

Async asenkron işlemler için güzel özellikleri bulunan bir javascript kütüphanesidir.Tarayıcıda kullanılabildiği gibi NodeJS ile de npm vasıtasıyla da kullanılabilir.

Async'in üç farklı konuda fonksiyonları mevcut bunlar collection dediğimiz dizilere uygulanan kolaylaştırıcı fonksiyonlar,control flow diye adlandırdıkları asenkron akışın kontrolü için işe yarayacak fonksiyonlar ki bunlar en çok kullanacağımız fonksiyonlar ve bir diğer fonksiyonlar da util dedikleri çeşitli diyebileceğimiz fonksiyon türleridir.

Bizim üzerinde duracağımız fonksiyonlar control flow kategorisindeki fonksiyonlar olacak.Çünkü kütüphanenin asıl amacı asenkron işlerin yönetiminin kolaylaştırılması.

Hangi fonksiyonun ne işe yaradığını anlatmakla birlikte örnek kodlar da aktarmaya çalışacağım.

İlk olarak async.series kullanımından başlayalım.Bu kullanım fonksiyonlarınızı sıraya dizer ve her bir fonksiyon çalıştıktan sonra callback fonksiyonu çağırılır.Callback fonksiyonuna iki parametre geçilir.Bunlardan ilki varsa bir hata diğeri de fonksiyonun sonucudur.Eğer işlem yapılırken bir hata meydana gelirse onu callback fonksiyonunun ilk parametresi olarak geçmeniz gerekmekte.Örnek kod aşağıdadır.


İkinci önemli kullanım şekli async.parallel.Bu kullanım tüm belirttiğiniz fonksiyonların paralel çalışmasını sağlar.Yani belirli bir sıra gözetmeksizin sistem hepsini başlatır hepsinin sonucunu yine series'de olduğu gibi callback fonksiyonuna bildirir.Örnek kullanım aşağıda mevcuttur.


Bir diğer önemli kullanımımız async.waterfall.Bu kullanım yöntemi adından da anlaşılacağı gibi bir akıntıya veya çağlayana benzer.Fonksiyonlar birbirini takip eder ve bir fonksiyonun çalışması önceki fonksiyondan gelen değerle sağlanır.Aşağıdaki ne demek istediğimi anlatabileceğim bir örnek mevcut.


 Şimdilik async kütüphanesine ait siz NodeJS geliştiricilerinin canını en çok sıkacağını düşündüğüm callback hellleriyle baş etmeniz için yeterli miktarda fonksiyonu açıklamaya çalıştım.Yararlı olması dileğiyle.


2 Şubat 2015 Pazartesi

PhpStorm ile Nodejs Debugging

    Merhaba arkadaşlar bu yazıda kodlama yaparken yaşadığımız sıkıntıların çözümleri için başvurduğumuz debugging işleminin PhpStorm IDE'siyle nasıl yapılacağından bahsetmeye çalışacağım.

    Öncelikle PhpStorm IDE'sinden biraz bahsetmek istiyorum.PhpStorm Jetbrains firması tarafından İntellijIdea IDE'sinin PHP için düzenlenmesi sonucunda oluşturulmuş modern bir IDE'dir.Debugging işlemi başka IDE'lerle de yapılabilir.Fakat en çok kullanılan IDE'lerden biri olduğu için biz PhpStorm'u seçtik.

Nodejs'de debugging işlemi istek tabanlı şekilde yürütülür.Bir routeriniz ve o routerin beklediği bir olay varsa olay bloğunun istediğiniz yerine F9 tuşu ile koyacağınız bir breakpoint interpreterin geldiği anda sistemi durdurur ve size oradaki tüm değişkenleri aşağıdaki gibi gösterir.


Gördüğünüz üzere closureler ve globaller bile listeye dahil genişleterek istediğiniz değeri gösterebilirsiniz.Bir Expression'u(kod satırını veya işlemi) Evaluate yani sonucunu işleyebilirsiniz.
Bir satırın evaluate edilmesi aşağıdaki resimdeki gibi yapılabilir.

 Gelelim sistemi nasıl ayarlayacağımıza.Öncelikle sisteminizde NodeJs'yi kurmuş ve PhpStorm'a NodeJs Pluginini kurmuş olmanız gerekmekte.Çok uzatmayacağım NodeJs kurulumunu sitemizdeki bu adresten ve  PhpStorm plugininin kurulumunu buradan öğrenebilirsiniz.

  Aşağıdaki resimde kurulum konfigurasyonunun nasıl olması gerektiği hangi alanlara ne yazması gerektiği belirtildi.PhpStorm konfigürasyonlarına tıklayıp yeni konfigürasyon diyin.Sonra Add New Configuration deyip Node.js yi seçin.Bazı bilgiler isteniyor.Bunlar,
Interpreter:Node.js interpreterinin yerini gösteriniz.Benim nodejs kurulumum linux kullandığımdan /usr/bin/node altında
Working Directory:projenizin olduğu yeri gösteriniz
Javascript File:server.js node.js www gibi NodeJs'yi başlatan .js dosyası yolunu gösteriniz.


Ayarlamaları yaptıktan sonra debug butonuna tıklayıp debug işlemini başlatın ve Breakpoint'i koyduğunuz yere requestlerinizle geliniz.

Biz sonraki yazımızda görüşmek üzere..

31 Ocak 2015 Cumartesi

SSL üzerinden NodeJS

Herkese merhabalar.Bu yazımızda NodeJs sunucusunu HTTPS üzerinden nasıl çalıştıracağımızdan bahsetmeye çalışacağım.
      Öncelikle nerede SSL kullanmamız gerekecek ona değinelim.SSL bildiğiniz üzere açılımı Secure Socket Layer olan bir güvenlik protokolüdür.Tüm trafik kriptolu bir şekilde yürütülür.SSL'ye ihtiyacım olmaz diyen arkadaşlar yine normal işleri HTTP üzerinden yapabilirler fakat Facebook uygulama geliştirmekle ilgilenen geliştirici arkadaşların SSL kullanması mecburidir.Ben Facebook uygulamamda NodeJs kullanmak istiyorum diyorsanız mutlaka bu yazıyı okumalısınız.SSL kurulumunu anlatan bir yazıya buradan ulaşabilirsiniz.


Yukarıdaki kod örneğini aynen yapıştırıp gerekli kütüphaneleri yükleyip.Sertifika bilgilerinizi de kendinize göre girerseniz sistemin çalışmaması için bir problem yok.Fakat bazı notları önceden belirtmem karşılacak bazı sorunların zaman kaybı olmadan kolayca çözülmesini sağlayacaktır.

    Ben sertifikasyonu ca ve crt dosyaları üzerinden yürüttüm fakat isteyenler pfx ve pam dosyalama yöntemlerini de kullanabilirler ve mantık neredeyse aynıdır.

options kısmında olan ayarlardan,
requestCert:Gelen istemcilerden bir sertifika talep edilmesini sağlıyor.Default değeri false'dir.

rejectUnauthorized:requestCert özelliğinin true olduğu zamanlarda kullanılabilir.Yanlış sertifika kullanan istemcilerin kabul edilmemesine yönelik bir ayardır.Local geliştirmeler ve farklı sunucu denemelerinde sorun cıkarmaması için false değeri önerilir.

Bu uygulamada Express Framework'u kullanıldı.


Yukarıdaki kodda da Origin ve Transport ayarları yapılmış durumda bu da zaman kaybını önlemek için sizlerle paylaşmaya gerek duyduğum bir kod parçası.

Bir sonraki yazımızda görüşmek üzere.

18 Kasım 2014 Salı

NodeJS Events ve EventEmitter


Merhaba arkadaşlar, bu yazıda sizlere Observer Pattern'ine çok benzeyen NodeJS Event ve EventEmitter'dan bahsedeceğim. Event ve EventEmitter Observer Patterni gibi çalışır dolayısıyla burada bir adet olay adı bir de observer mevcuttur. Gelin detaylı bir şekilde bunları detaylı bir şekilde örnek üzerinde inceleyelim.

Diyelimki askerde iki kişi bir kulede nöbet tutyorsunuz ve yanınızdaki eleman da sizin alt devreniz. Üst devre olmanın getirdiği bir takım rahatlıklar ve ayrıcalıklar nedeniyle diğer elemanın uyumamasını söyleyip, siz bir güzel uyumayı tercih ettiniz. Diğer elemanın görevi komutan kuleyi kontrole geldiğinde, sizi uyandırması. Bundan sonra sizin adınız AskerA alt devrenin adı da AskerB olsun. Olay adı KomutanGeliyor, bununla bağlantılı olan fonksiyon ise Uyan! olsun. Böyle bir örnek olayı NodeJS ile nasıl modelleriz hep beraber ona bakalım.

NodeJS'in hızlı olmasının nedenlerinden bir tanesi de, ön tanımlı olarak event(olay) ler ile çalışması. Siz gerekli tanımlamaları yaparsınız, ve ondan sonra bir olay olduğunda gerekli aksiyonları çalıştırırsınız. NodeJS'te ön tanımlı olarak varolan bu özelliği, kendinize özel bir sistem kurmak için kullanmanız da mümkün. Bunun için kullanmamız gereken modulün adı events . Aşağıda çok basit bir şekilde yukarıdaki olayı örnekleyen kod mevcuttur:




Burada askeri uyandırmak için bir fonksiyon tanımladık. Sonra, belirli bir olay olduğunda askeri uyandırma fonksiyonunu çağırdık. KomutanGeliyor olayı olduğunda AskerB bir olay bildiriyor, ve bunu eventEmitter.emit ile yapıyor. AskerA da eventEmitter.on ile KomutanGeliyor olayını dinlediği için, AskerB nin yolladığı haberi duyuyor ve uyan fonksiyonu çalışıyor yani AskerA uyanıyor. Tabi bunların hepsini NodeJS'in events modülü sayesinde oluyor, ve bunu ekstradan npm install events diyerek yüklemiyorsunuz çünkü ön tanımlı olarak mevcut.  

Bir olaya birden fazla fonksiyon bağlamak da mümkündür. Mesela, komutan gelirken hem uyanıp hem de can yeleğini giymek istediğinde;



Bitmedi... Olayları haber verirken parametre de geçebilirsiniz. Mesela hangi komutanın geldiğini de söyleyebilirsiniz. Sevdiğiniz bir komutan ise uyumaya devam eder, gıcık biriyse anında uyanırsınız. Örnek;



Olayı haber verirken aynı zamanda hangi komutanın geldiği de belirtiliyor. 

Diyelimki komutan geldi ve başarılı bir şekilde uyandın ve selamını verdin. Komutan gittikten sonra bir daha gelmeyeceğini biliyorsun. O zaman daha fazla dinlemeye gerek kalmayabilir. Bunun için de;

eventEmitter.removeListener("KomutanGeliyor", uyan); 

ile bu olayı dinlemeyi bırakabilirsiniz. Hiçbir olayı dinlemek istemiyorsanız, koğuşa gidip rahat bir uyku çekmek istiyorsanız;

eventEmitter.removeAllListeners("KomutanGeliyor");

kullanabilirsiniz.

Sonuç olarak, NodeJS'te event kullanmak basit olmasına rağmen çok ciddi uygulamalarda hayat kurtarıcı yerlerde kullanılabilir. 

Not: Burada anlatılan yöntemleri askerlik yaparken kullanılması durumunda oluşacak problemlerin sorumluluğunu biz kabul etmiyoruz :)

22 Ağustos 2014 Cuma

SDI Brown Bag Session Etkinliği

Merhaba arkadaşlar bir etkinlikle daha karşınızdayız. Optimist Payments Consulting kurucusu Hakan ErdoğanEntrepreneurship with Real Life Challenges başlıklı konuşmasıyla girişim hayatındaki serüvenlerinden edindiği tecrübelerini katılımcılarla paylaşacak. Ayrıca katılımcıları sürpriz etkinlikler ve hediyeler de bekliyor! Bunlardan bir tanesi, etkinlik dahilinde şanslı 1 katılımcıya bedava NodeJS in Action eğitimi verilecektir :) Etkinlik 30 kişiyle sınırlı olup aşağıdaki bağlantıyı kullanarak ücretsiz kayıt olabilirsiniz. 


27 Mayıs 2014 Salı

NodeCast #4 - NPM Nedir?

Bu dersimizde, NodeJS projelerinizdeki modullerin yönetimininden sorumlu olan NPM (Node Package Manager) hakkında kısaca bilgi vermek istedik. 



25 Mayıs 2014 Pazar

NodeCast #3 - MongoDB Nedir?

Bu dersimizde, ilerideki derslerimizde sıkça kullanacağımız döküman odaklı veritabanlarından biri olan MongoDB hakkında bilgiler ve uygulamalı örneklere yer verdik. Derste kullanılan araçların linki;

MongoDB: http://www.mongodb.org/downloads

Robomongo: http://robomongo.org/