nodejs etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
nodejs etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

31 Ocak 2015 Cumartesi

SSL üzerinden NodeJS

Hiç yorum yok:
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

Hiç yorum yok:

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

Hiç yorum yok:
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. 


12 Mart 2014 Çarşamba

NodeCast #1 - NodeJS Nedir?

Hiç yorum yok:
Merhaba arkadaşlar. Bugün itibariyle NodeJS video serisine bugün itibariyle başlamış bulunmaktayız. Fırsat buldukça NodeJS ile ilgili videolar hazırlayıp yayınlamaya çalışacağız. İlk dersimiz NodeJS Nedir?

İyi seyirler...




13 Kasım 2013 Çarşamba

Failover-Proxy ile NodeJS High Availability

Hiç yorum yok:



Daha önce forever ile nodejs uygulamamızın bir servis olarak çalıştırılmasından ve herhangi bir sorun oluştuğunda kendisini yeniden başlatabilmesinden söz etmiştik.Peki sunucu kaynaklı erişim sorunlarında ne yapacağız.

Günümüz web dünyasında bir uygulamanın erişim problemi yaşaması ciddi kullanıcı kayıplarına geri dönüşü olmayan hasarlara sebep olabilir. Bu tarz durumları önlemek adına birden fazla sunucu üzerinde uygulamamızı çalıştırıp failover-proxy ile bu sunucular üzerinde redirect yapılmasını sağlayabiliriz. Kullanımı son derece basit olan forever-proxy'i

 npm install failover-proxy

komutuyla kurduktan sonra aşağıda yer alan bir kaç satırlık kod ile sunucular arasında geçiş yapılmasını sağlayabilir, sunucular arasında geçiş yapılması durumunda yapılacak işlemleri ve loglamayı 'cycle' event'ı içerisinde yönetebilirsiniz.

Failover-proxy'i test etmek için localhost'da farklı portlarda çalışan aynı uygulamaları ayağa kaldıralım.

host1-port:7777

Yükleniyor...


host2-port:8888

Yükleniyor...

Bu iki uygulamayıda ayağa kaldırdıktan sonra proxy için host ayarlarını girip onu da çalışır hale getirelim.

proxy-port:9999

Yükleniyor...


localhost:9999 adresine istemde bulunduğumuzda uygulamamızdan dönen 'Hello World' cevabını göreceğiz.
Şimdi proxy'nin başlangıçta bağlandığı sunucuyu (bizde nodejs instance'ı ) kapatalım ve tekrar localhost:9999 adresine istemde bulunalım.
 'Hello World' cevabının görüntülendğini ve proxy'i çalıştırdığımız console'da sunucu değişikliklerinde yazmasını beklediğimiz 'cycle: 8888 -> 7777' çıktısını göreceğiz. Bu proxy'nin 8888 portu üzerinde çalışan uygulamadan cevap alamayıp 7777 üzerinde çalışan uygulamaya redirect ettiğini göstermektedir.

 'cycle' event'ı içerisinde istediğimiz bildirimleri gönderebilir bu sayede sunucularımızdan birinin cevap vermemesi durumundan anlık haberdar olarak gerekli önlemleri alabiliriz.

Failover-Proxy

12 Kasım 2013 Salı

NPM Proxy Ayarları

Hiç yorum yok:


Proxy arkasında çalışıyorsanız en basit işlemler bile ekstra ayarlar gerektirebilir.Bunlardan bir tanesini de npm ile paket kurulumu.Proxy üzerinden internete çıkış yaparak npm paketlerini kurabilmek için npm'in proxy ayarlarını kullanabilirsiniz.


Yükleniyor...

10 Ağustos 2013 Cumartesi

Express Middleware

Hiç yorum yok:

Express ile request'ler üzerinde aspect oriented(AOP) bir yapı geliştirmek çok kolay.Express tarafından tanımlanmış Middleware'ler kullanılabileceği gibi dilersek kendi işlemlerimiz için özelleşmiş middleware'lerde yazabiliriz.

Express tarafında tanımlı middleware'lerin tam listesi ve kullanımı için Express Middleware linkini takip edebilirsiniz.

Express tarafında tanımlanmış middleware'ler genel kullanıma yönelik ihtiyaçları karşılasa da bazen özelleştirilmiş middleware'lere ihtiyaç duyabiliyoruz. Özelleştirilmiş middleware'ler yazmakta oldukça basit.
Yapıyı anlamak adına basit bir örnekle başlayalım.

Yükleniyor...


yukarıda yer alan middleware her request için "Hello!" cevabı dönmektedir.

Daha detaylı, kompleks metodlara ihtiyacımız varsa ne yapacağız. Eğer middleware'in tüm requestlerde çalışmasını istiyorsak yazdığımız middleware'için yukarıda olduğu gibi "app.use" metodunu kullanmamız yeterli.
 Aşağıda yer alan örneğimiz gelen her request için request'den gelen ip'nin yasaklı listesinde olup olmadığını kontrol eden bir middleware.

Yükleniyor...



Tanımladığımız middleware'i tıpkı yukarı da olduğu gibi kullanıyoruz.

Yükleniyor...


Peki tüm requestlerde uygulanmasını istemediğimiz bir yapı gerekirse ne yapmalıyız. Örneğin uygulamamız üzerindeki bazı linkler user authentication gerektirirken bazılarının gerektirmediği bir durumu ele alalım. Bu durumda authentication gerektiren url'lere gelen requestler kontrol edilip giriş yapan kullanıcının yetkisi varsa veya girişi yapılmışsa görüntülenmeli aksi takdirde sayfa yönlendirmesi yaparak kullanıcıdan giriş yapmasını istemelidir.

Bu durumda her bir request içinde tekrar tekrar kontrol yapmaktansa express için bir middleware yazıp ilgili requestlerde çalışmasını sağlayabiliriz.

İlgili request'in routingi tanımlarken çalışması gereken middleware metodlarıda parametre olarak geçmemiz yeterli olacaktır.Yukarıda anlatılan senaryo için hazırladığımız authorization middleware'i aşağıda görülmektedir.

Yükleniyor...


Peki tanımladığımız bu middleware'i nasıl kullanacağız.Tanımladığımız authorization dosyasının require edildiğinden yada parametre olarak geçildiğinden emin olduktan sonra;

Yükleniyor...


Tanımladığımız her url için ihtiyacımıza yönelik metodları kullanarak gerekli kontrollerin yapılmasını sağlayabiliriz.

Middleware'ler özellikle büyük projelerde hayat kurtaran, kod kalitesini yükselten, tekrar kullanılabilir yapıları destekleyen verimli bir çözüm yöntemi sunuyor.

27 Temmuz 2013 Cumartesi

Jade ile Partial Rendering Ajax Çağrılarını Yönetme

Hiç yorum yok:


Bir önceki yazımda bahsettiğim Jade ile tanımladığımız tekrar kullanılabilir yapılar sayesinde ajax işlemlerini pratik bir şekilde gerçekleştirebiliriz. Tek yapmamız gereken ajax çağrısı sonucunda güncellenecek alanı-bileşen(leri) farklı bir jade dosyası içerisinde tutmak ve kullanılan sayfalarda "include" komutuyla kullanmak.

Daha sonra yapılan ajax çağrısı sonucunda tanımladığımız partial jade dosyalarını yenilenen veriyle tekrar çalıştırıp response olarak döndürebiliriz. Dönen response oluşturulmuş html içeriği olacağından response'un boyutunu büyütecek olsada bir çok durumda işimizi kolaylaştıracaktır.

Öncelikle ajax işlemi sonucunda güncelleyeceğimiz partial jade dosyasını oluşturalım.

Yükleniyor...

Oluşturduğumuz partial dosyayı ajax çağrısı yapacağımız sayfa içerisinde include komutu ile kullanalım.

Yükleniyor...

Yapılan ajax çağrısı sonucu partial dosyanın html'ini yeni veriler tekrar oluşturup response olarak döndürüyoruz.

Yükleniyor...

Artık gelen verimizi güncellemek istediğimiz html elementinin yerine yazarak işlemimizi tamamlıyoruz.

Yükleniyor...


Ajax çağırsı ile sadece veri döndürüp client-side html yazarak güncelleme işlemlerini gerçekleştirmektense partial yapılar kullanarak ajax işlemlerini gerçekleştirmek çok daha kolay ve kullanışlı.

Örnek Kodlar:https://github.com/nodejstr/Jade-Examples

10 Temmuz 2013 Çarşamba

Sıcak sıcak kod yazalım

Hiç yorum yok:

Malum havalar giderek ısındığı şu günlerde, güzelim cumartesi günü projeksiyondan sunum izlemek çok da zevkli gelmeyebilir.

Daha da zevkli olması açısından oturup iki satır kod yazalım dedik.

Temmuz ayında bilgisayarını al da gel serinlemek için biraz bilgisayar fanı kullanalım. 

4 farklı oturum ile tüm gün konu anlatımı ve kod geliştirme olacaktır, 
eğlenceli bir etkinlik için elimizden geleni yapıyoruz :)

Katılım malum sebeplerden dolayı limitli olacaktır.


8 Temmuz 2013 Pazartesi

Jade Nedir?

Hiç yorum yok:

Jade NodeJs tarafında sıkça kullanılan, performansıyla öne çıkan bir template engine. Jade'i diğer template enginelerden ayıran en büyük özelliği performansı. Bunun yanında farklı, alışması zor ama kullanması çok pratik syntax'ı ile de dikkat çekiyor.

Kuruluım

npm install jade
komutuyla ilgili kütüphanenin kurulumu sağlanmaktadır.

Express ile birlikte kullanırken
app.set('view engine', 'jade')
yapılması jade dosyalarının işlenmesi için yeterlidir.

Jade bilenen tag açıp kapatma yapısını ortadan kaldırarak boşluk ve girintilerle okunması kolay bir şekilde yazım olanağı sağlıyor. Aşağıda jade-lang.com 'in ana sayfasında da yer alan kullanım örneğini görüyoruz.

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Jade</title>
    <script type="text/javascript">
      if (foo) {
        bar()
      }
    </script>
  </head>
  <body>
    <h1>Jade - node template engine</h1>
    <div id="container" class="col">
      <p>You are amazing</p>
      <p>Jade is a terse and simple
         templating language with a
         strong focus on performance
         and powerful features.</p>
    </div>
  </body>
</html>
doctype 5
html(lang="en")
  head
    title= pageTitle
    script(type='text/javascript')
      if (foo) {
         bar()
      }
  body
    h1 Jade - node template engine
    #container.col
      if youAreUsingJade
        p You are amazing
      else
        p Get on it!
      p.
        Jade is a terse and simple
        templating language with a
        strong focus on performance
        and powerful features.



Yukarıda standart html ve jade ile yazılan aynı kod blogunu görülmektedir.
Jade ile tag açıp kapatma derdinden kurtuluyoruz. Bu sayede açık kalan taglarden kaynaklı sorunlardan da kurtulmuş oluyoruz. Indentation(girinti) ile hangi elemanın hangi eleman altında yer alacağını belirliyoruz.

Bunun yanı sıra if else yapısı gibi conditional operasyonlar ve loopları jade ile çalıştırabilirsiniz.
"#" ilgili elemana id vermek için kullanılırken "." ile ilgili html elamanına eklenecek css classlarını arka arkaya ekleyebiliyoruz. Atamasını yapmamız gereken diğer attributeler içinse yukarıdaki örnekte görüldüğü gibi 
(attrName="value",attrName2="value2")
şeklinde ilgili değerlerin atamasını yapabiliyoruz.

Express ile kullanımına bakacak olursak

exports.new = function(req, res){
  res.render('posts/yeni', {
    baslik: 'Yeni Makale',
    makale: new Makale({})
  })
}

Yukarıda yer alan kod parçacığı posts klasörü altında yer alan 'yeni.jade' dosyasını gönderdiğimiz baslik ve makale parametreleriyle işleyerek oluşturduğu html'i render edilmek üzere göndermektedir.

Id Kullanımı

div#container

<div id="container"></div> olarak görüntülenecektir.

Css Class Kullanımı

div#foo.bar.baz
<div id="foo" class="bar baz"></div> olarak görüntülenecektir.

#foo
.bar

<div id="foo"></div><div class="bar"></div>

İçerik Görüntüleme
  
p merhaba!

<p>merhaba!</p>.

Parametre Kullanımı 
Jade' parametre olarak gönderdiğimiz değerleri template içerisinde #{} yapısıyla kullanıyoruz.

Örneğin gönderdiğimiz parametreler :{baslik:'Ana Sayfa',girisMesaji:'Hoşgeldiniz'} olsun.
#{baslik} #{girisMesaji} olarak jade şablonları içerisinde kullanabiliriz.Peki #{} yapısnı text olarak kullanmamız gerekiyorsa yani yazı içerisinde "#{format}" bu şekilde görüntülemek istiyorsak ne yapmalıyız. Escape mekanizması burada yardımımıza yetişiyor.

p \#{format}
<p>#{format}</p>

Bir sonraki yazıda Jade'in daha detaylı kullanım örneklerini, jade ile yapılabilecek tekrar kullanılabilir bileşenleri inceleyeceğiz.

23 Şubat 2013 Cumartesi

Şubat 2013 Etkinliği

Hiç yorum yok:
GDGIstanbul ile ortak gerçekleşecek olan Şubat 2013 etkinliğimize davetlisiniz.

23 Şubat 2013 Cumartesi günü saat 13:00'de başlayacak etkinlik, İTÜ Ayazağa kampüsünün ARI 3 Teknokent Büyük Toplantı Salonunda gerçekleşecek.

Bilgi ve paylaşım dolu bir gün geçirmek için sizleri de aramızda görmek isteriz.

Etkinlik Programı:

Android ve Elektronik, Muharrem Taç
Guava: Meyve toplamanın incelikleri, Naci Dai
Sihirbaz Programcı, Murat Yener
OpenFrameWorks ve Android, Yağız Hatay 

Youtube API, Said Tahsin Dane
Web Crawling, Scraping, Cüneyt Yeşilkaya
NodeJS Herkese Karşı, Salim Kayabaşı
*sunum sırası değişiklik gösterebilir.

Katılım durumunuzu lütfen aşağıda yer alan Evenbrite sayfasını kullanarak belirtiniz.
Lütfen sosyal medya aracılığı ile yardımcı olunuz.



10 Ocak 2013 Perşembe

Merhaba NodeJS Etkinliği

Hiç yorum yok:


2013 yılının ilk etkinliği ile yeni yıla merhaba diyoruz. GDG İstanbul ile birlikte gerçekleştireceğimiz bu etkinliğe herkes davetlidir.


19 Ocak 2013 saat 13:00'da ARI Teknokent ARI-3 konferans salonunda başlayacak olan etkinlik çerçevesinde MongoDB NodeJS, Android, GWT, Mobil, HTML5 gibi konular hakkında bilgi paylaşımında bulunacak. 

İlgili teknolojileri kullanarak uygulama geliştirme örnekleri göstereceğiz. Etkinlik sonrasında vakti olan arkadaşlarla hep beraber birer kahve içip güncel teknolojiler hakkında sohbet edebiliriz.

MongoDB, Ertuğrul Taş
  • MongoDB Giriş, IFUR (CRUD), Neden MongoDB
Merhaba NodeJS, Salim Kayabaşı
  • NodeJS Nedir, Neden NodeJS, Google V8, Cloud ve NodeJS
Android, Hasan Keklik
  • Rest Api, Maps 
mGWT ile Mobil Web, Murat Yener
  • HTML5 ve JS yazmadan mobil web
Detaylar ve daha fazlası için http://www.gdgistanbul.com/2013/01/merhaba-2013.html adresini takip ediniz.


Etkinlik Sponsorumuz

21 Ağustos 2012 Salı

Node.js, Socket.IO, Express.js ile HTML5 Oyun Geliştirme - Bölüm 1

1 yorum:
Herkese Merhaba,

Node.js, Socket.IO, Express.js ile HTML5 Oyun Geliştirme, NodeJS Türkiye sitesindeki ilk makalem olacaktır. Bu makalenin temelini jstanbul 2012'de yapmış olduğum sunum oluşturmaktadır. Sunumun tamamını ve kodlarını aşağıdaki linklerde bulabilirsiniz:

Sunum: http://slidesha.re/Nezd9N
Kodlar: http://bit.ly/NcxzGj


Makalemizi 3 parça olarak tamamlamayı planlamaktayım. Makalelerin bütününde anlatılacak konu olarak aşağıdaki sıralamada olacaktır:



  1. Bingo Oyunu (Bölüm 1)
  2. Bingo Oyununun Tasarımı (Bölüm 1)
  3. Bingo Oyununun Yazılım Mimarisi (Bölüm 1)
  4. Node.js ve Neden Node.js? (Bölüm 2)
  5. Express.js ve Neden Express.js? (Bölüm 2)
  6. Socket.IO ve Neden Socket.IO? (Bölüm 2)
  7. HTML5 Canvas (Bölüm 3)
  8. Oyunun İmplementasyonu (Bölüm 3)
  9. Sonuç (Bölüm 3)
Bölüm 1:

Oyunumuzun yapılışı için öncelikle oyun tasarımıyla analizi çıkarılacak, ardından mimarisi çizilecek, daha sonra da kullanılacak teknolojiler teker teker anlatılıp neden multiplayer bir oyun için gerekli olduğundan bahsedilecektir. İlk olarak, bingo oyununu tanıyalım ve oyun tasarımından bahsedelim.


Bingo Oyunu:

Bingo oyunu aslında bizim her sene yılbaşında oynadığımız Tombola oyunundan hiçbir farkı yoktur. Ancak Bingo oyununun belirli çeşitleri bulunmakta ve bizim bildiğimiz Tombola oyunu, Kara Avrupa'sında aynı stildedir. 

Resim 1: Tombola Oyunu


Bingo oyununun oynanışını adım adım belirtirsek:
  1. Her oyuncuya Bingo kartları dağıtılır.
  2. Daha sonra içi kapalı Bingo torbasından sayılar rastgele bir şekilde seçilir. 
  3. Seçilen sayının kartlarda bulunması sonucu, o kart üzerindeki o sayı kapatılır.
  4. Kartındaki bütün sayıları ilk kapatan oyuncu, oyunu kazanır.
Oyunun temel oynanışı yukarıdaki gibidir. Ayrıca, bazı oyun kuralları da mevcuttur:
  • Bingo kartlarının her bir sütunu 10'un katlarındaki sayıları belirtecek şekilde ayarlanır.
  • Çekilen rastgale sayılar 0 - 90 arasında olmalıdır.
Şimdi az-çok oyunumuzun nasıl oynandığı ve hangi kurallar dahilinde oynanacağı belirtmiş olduk. Artık, oyunumuzu bilgisayar ortamında nasıl tasarlayacağımız konusunda temel bilgilere sahip olduk ve şimdi oyuncuların nasıl oyuna giriş yapacağını belirlemek için bazı yapılardan bahsedeceğim:


Resim 2: Oyuncu Alanları


Salon: Bütün oyuna bağlanan oyuncuların, ilk olarak bağlanacağı alandır.
Oda: Oyuncuların oyun oynamak için salondan giriş yapacağı alanlardır. Odaların oyuncu limiti gibi bir kısıtı olmalıdır. Böylece, oda dolu olduğu zaman oyunun başlaması için temel kural tamamlanmış olacaktır.

Yani temel olarak oyuncumuz öncelikle salona giriş yapacak, ardından boş olan odalardan herhangi birine girdikten sonra odanın dolmasını bekleyecek, oda dolduğu zaman oyun başlayacaktır. Oyunun sonunda oyuncu isterse oda da kalıp diğer oyunun başlamasını bekleyecek veya salona geri dönüp herhangi bir odaya giriş yapabilecektir.


Resim 3: Oyuncu Durumu
Bingo Oyununun Yazılım Mimarisi:

Artık, oyunumuzun kurallarını belirledikten sonra, geriye kalan oyunumuzun yazılım mimarisinin nasıl olacağını belirlemek kaldı. Oyun mimarisi, multiplayer oyunlar için benzerlikler göstermektedir. Aşağıdaki resimde bizim Bingo oyunumuzda kullanacağımız mimariyi göstermektedir.


Resim 4: Oyun Yazılım Mimarisi

Öncelikle yazılım mimarimiz, iki parçaya ayrılmış durumdadır. Birincisi, Server tarafı yani bütün kullanıcıların bağlanacağı taraf, diğeri ise Client tarafı, her bir kullanıcıyı(Oyuncuyu) temsil eden birimdir. Ayrıca her ikisinin arasında mesaj iletimini gerçekleştiren bir yapıda bulunmaktadır. Açıklamalara, server tarafıyla başlamak istiyorum:


  • Server Tarafı:  Bütün kullanıcıları kontrol eden taraftır. Bu tarafta veri tabanı(Kalıcı ve Geçici veritabanları) ile ilişkiler, modeller, mesaj kuyruk yapıları ve ana kontrol yapısından(Front Controller) oluşmaktadır Bu yapımız tamamen Node.js tabanını kullanmaktadır.
    • Front Controller: Kullanıcıya iletilen bütün mesajların kontrollerini ve karar mekanizmasını, ayrıca modeller aracılığıyla veritabanı ile haberleşmeleri kontrol eden mekanizmadır. 
    • Models: Normal bir uygulamadaki gibi, Business Logic diye anlattığımız yapıların olduğu, Player, Room, Saloon gibi objelerin olduğu ve bunların birbirleriyle etkileşimlerini ve veritabanları ile kontrolleri sağlayan bölümdür.
    • MySQL(Persistent Storage): Modeller içerisinde oluşan verilerin kalıcı bir şekilde tutulmasını sağlayan, hepimizin web uygulamarda oldukça fazla kullandığımız veritabanıdır. Örnek olarak, oyuncunun geçmiş oyunlarda kazandığı puanlar, kişilik bilgileri gibi kalıcı olarak tutulmasını istediğimiz bilgileri MySQL tarafında tutmamız gerekmektedir.
    • Redis (Temporary Storage): Modeller içerisinde oluşan ancak geçici bilgileri tutacağımız  ve tamamen memory tabanlı, hızlı ve ölçeklenebilirlik konusunda, bize ve MySQL'e yardımcı olacak bilgileri Redis üzerinde saklamayı planlıyoruz. Mesela, oyuncu oyuna girdiği zaman, oyuncu ile ilgili bilgileri ve o anki oyundaki bilgileri Redis üzerinde tuttuğumuz zaman, verilere ulaşmamız en hızlı ve ölçeklenebilir bir şekilde gerçekleşecektir.
    • Message Queue: Mesaj kuyruğu yapısı, Server tarafından Client tarafına iletilecek ve geri gelecek bütün mesajların ölçeklenebilırliği konusunda yardımcı olacaktır. Ayrıca, bu mesajların, mesaj kuyruğunda takip edilmesi kolaylaşacak ve implementasyonunda oluşacak hataları mimimuma indirmeye yardımcı olacaktır.
  • Client Tarafı: Her bir kullanıcıyı temsil eden taraftır. Bu tarafta oyun arayüzünün yapıldığı, tamamen kullanıcının etkileşimine açık taraftır.
    • HTML 5 Rendering: Kullanıcıyı etkileyici bir arayüzle, animasyonlarla karşılamak ve bütün gelişmiş Browser'larda gösterebilmek için kullanabileceğimiz en iyi yapı, şu anda 2 boyutlu grafikler için HTML 5 Canvas ve 3 boyutlu yapılarda HTML 5 WebGL'dir. 
  • Socket.IO Tarafı: Server ve Client arasında mesaj iletimini gerçekleştiren protokole sahip ve elimizdeki bütün Browser'lara iletimi gerçekleştiren API'ye sahip Node.JS'te bulunan en iyi kütüphane Socket.IO'dur. Socket.IO sayesinde IE5'e bile anlık olarak(real-time communication) mesajlaşmaları gerçekleştirmekteyiz. Daha detaylı bilgiyi bir sonraki bölümde anlatmayı planlıyorum. 
Artık, oyun mimarimizi de oluşturduktan sonra kullanacağımız teknolojileri, teker teker anlatmaya başlayabiliriz. Bu teknolojiler sırasıyla Node.JS, Express.JS, Socket.IO ve HTML5 Canvas olacaktır. Bir sonraki bölumde teknolojileri anlatmaya başlayacağız. 

Herkese Iyi Bayramlar,




11 Ağustos 2012 Cumartesi

NodeJS Express Framework MVC yapısı

Hiç yorum yok:

Daha önceki yazımızda NodeJS ve express framework'unu kullanarak uygulama geliştirmeye giriş yapmıştık.Bu yazımızda ise edindiğimiz tecrübe ile birlikte tam bir MVC yapısı kullanarak NodeJS ile nasıl uygulama geliştireceğimizi inceleyeceğiz.

Anlatımı tam olarak takip edebilmeniz için WebMatrix kullanmanızı tavsiye etmekle birlikte, istediğiniz editörü kullanmakta özgürsünüz.

Daha önce yaptığımız gibi WebMatrix üzerinden yeni bir şablon uygulama ile boş bir NodeJS uygulaması oluşturuyoruz.Boş oluşturmamızın sebebi Express framework'unu daha sonra kurarak en güncel versiyon ile geliştirme yapmak.

Daha önceki yazımızda belirttiğimiz şekilde command prompt'dan yeni oluşturduğumuz proje dizinine gelerek;

npm install express komutunu çalıştırıyoruz.

Yazımıza devam etmeden önce Express framework'ünün güncellenmesi ile birlikte daha önce yazdığımız kodlar yeni versiyonda hata verecektir. Daha önce

express.createServer();

şeklinde kullandığımız yapı express'in artık http.Server'dan inherit ederek geliştirilmediğinden dolayı hata verecektir. Bu nedenle yeni kullanım şekli olan

var express = require('express'),
    app = express();
app.listen(3000);

şeklinde değiştirmemiz gerekmektedir.

Projemize sağa tıklayıp 2 yeni klasör oluşturuyoruz. model ve view isimlerini verdiğimiz bu klasörler isminden de anlaşılacağı üzere model sınıflarımızı ve view'lerimizi saklayacağımız klasörler.

Model klasörüne sağa tıklayarak new File deyip yeni bir javascript dosyası oluşturalım. "urun.js" adını verdiğimiz dosyamıza aşağıda yer alan kod blogunu ekleyerek ilk modelimizi oluşturalım.

function urun(data, id) {
    this.id = id;
    this.adi = String(data.adi) || "Tanımlanmamış";
    this.kategoriler = (data.kategoriler || []).map(function(c, index) {
        return { id: Number(c.id) || index, kategoriAdi: String(c.kategoriAdi) };
    });
}
module.exports = urun;



module.exports = urun;
satırı modelimizin proje genelinde kullanabilir, referans verilebilir hale getirmektedir.


Ürün modelimiz içerisinde id, adi , ve kategoriler alanları bulunmaktadır. Kategori ise kendi içerisinde id, kategoriAdi attribute'lerine sahiptir.
Şimdi uygulamamuz için bir request tanımlayıp yeni oluşturduğumuz modeli kullanarak bir cevap dönelim.

app.get('/urun', function(req, res) {
    var urun1 = new urun({ adi: 'Portakal', kategoriler: [{ kategoriAdi: 'Meyve'}] });
    res.send(urun1);
});

Response olarak döndürdüğümüz objenin görüntülendiğini göreceğiz.
{
    "adi":"Portakal",
    "kategoriler": [
      {
        "id":0,
        "kategoriAdi": 'Meyve'
      }
    ]
}

Şimdi Jade template engine'inin kullanarak oluşturduğumuz modeli görüntüleyeceğimiz bir sayfa geliştirmesi yapalım.

Bu işlem için ilk olarak projemiz içerisine Jade kurulumu yapmamız gerekiyor.

Command prompt ile proje dizinimize ulaştıktan sonra (C:\Users\<kullaniciAdi>\Documents\My Web Sites\Express MVC Sample)
npm install jade komutunu çalıştırıyoruz. Jade kurulumu gerçekleşecektir.

Daha sonra önceden oluşturmuş olduğumuz view klasörüne urun.jade dosyasını ekleyelim.

Açılan dosya içerisine görüntülemek istediğimiz html'i Jade yapısına uygun olarak yazalım

urun.jade


h1 
 p adi: #{data.adi}
 p Kategoriler
 ul  
 - each kategori in data.kategoriler
   li=kategori.kategoriAdi

Her ne kadar Jade ile ilgili detaylı bir konu yazacak olsak da Jade'den kısaca söz edelim.

Jade node için geliştirilmiş yüksek performans sağlayan bir template engine.

Oluşturmuş olduğumuz urun.jade dosyası içerisinde göndereceğimiz ürün modelinin adını ve kategorilerini listeleyeceğiz. "data.adi" tahmin edebileceğiniz gibi ürünün adı, Kategoriler başlığı altında yer alan liste ise kategoriler listesinde yer alan her bir kategori için kategori adını listleyecek. Bu işlemin yapılması için

server.js dosyası içerisine ilgili get metodunu ekleyelim.



app.get('/urun', function(req, res) {
    var urun1 = new urun({ adi: 'Portakal', kategoriler: [{ kategoriAdi: 'Meyve'},{ kategoriAdi: 'Kış Meyvesi'}] });
    //res.send(urun1);
    res.render('index', {data :urun1});
});


Gördüğünüz gibi server'a yapılan request bu method tarafından karşılanarak "urun1" değişkenine ürünümüz tanımlanacak.
"res.render" methoduna hangi jade dosyasının render edileceğini ve parametre verimizi gönderiyoruz.
"data" template içerisinde veriye erişim için kullanacağımız değişken adı. 
Template içerisinde #{} ifadesi içerisinde gönderdiğimiz data değişkenine erişim yapabilirz.
"- each kategori in data.kategoriler" ifadesi data değişkeni içerisinde yer alan her bir kategori için html list item oluşturacak ve kategoriAdi alanının yazacak.
Çalıştırdığımızda karşılaşmayı beklediğimiz sonuç aşağıdaki gibi olacaktır.



GitHub:

jade@0.27.2 node_modules\jade
├── commander@0.6.1
└── mkdirp@0.3.0

express@3.0.0rc2 node_modules\express
├── methods@0.0.1
├── cookie@0.0.4
├── crc@0.2.0
├── fresh@0.1.0
├── range-parser@0.0.4
├── commander@0.6.1
├── debug@0.7.0
├── mkdirp@0.3.3
├── send@0.0.3 (mime@1.2.6)
└── connect@2.4.2 (pause@0.0.1, bytes@0.1.0, qs@0.4.2,formidable@1.0.11)



3 Ağustos 2012 Cuma

NodeJS Express Framework

Hiç yorum yok:
Daha önceki yazılarımızda NodeJS kurulumu ve npm ile express framework kurulumundan bahsetmiştik. Express nodejs ile çok daha kolay ve hızlı geliştirme yapmamıza imkan sağlayan bir web çatısıdır(web framework). Daha önce kurmuş olduğumuz WebMatrix programı açılıp templates diyerek yeni bir Node tabından Empty Site şablonu seçilir.Site adına "Express Sample" adını verelim. Her ne kadar diğer şablonlarda Express kurulu olarak gelse de bu yazımızda npm ile Express kurulumunu da göstermek adına Empty Site şablonu üzerinden devam edeceğiz.



"Next" dedikten sonra WebMatrix bizim için şablon uygulamamızı hazırlayacak. Sol alt köşede yer alan Files sekmesine tıkladığımızda projemizde yer alan dosyaların görüntülendiğini göreceğiz. Devam etmeden önce express kurulumu yapmak için Command Prompt açılıp dizin olarak projemizin oluşturulduğu dizine geçiş yapılır.

cd Dcouments\My Web Sites\Express Sample komutu çalıştırılır. Daha önce site adını farklı verdiyseniz çalıştıracağınız komut da buna göre değiştirilmelidir.

npm install express komutu çalıştırılır.
Kurulum bittikten sonra proje altındaki kurulu paketleri görüntülemek için
npm ls
komutu çalıştırılıp Express'in listelendiği görülür.

Şimdi WebMatrix'e dönüp server.js dosyamızda express'i kullanmak için ilgili kodlarımızı yazalım.
var express = require('express'),
app = express.createServer();
 
app.get('/', function(req, res) {
    res.send('Express deneme');
});
 
app.listen(process.env.PORT || 8080);

express ile suncumuzu oluşturduktan sonra "\" ile gelecek requestleri dinlemesi için metodumuzu yazıyoruz.Bunun dışında bir request yapıldığında 404 hatasına karşılık gelen "Cannot GET /{istek yapılan sayfa}" cevabını döndürecektir.

Bu şekilde farklı sayfalara yapılan istemleri yönlendirebiliriz. Örneğin, id request parametresi alan urun sayfamız olsun.Bu sayfaya yaptığımız istemleri gelen request parametresinin değeri ile ekrana yazdıralım.
app.get('/urun/:id', function(req, res)
{ res.send('Talep edilen ürün:'+req.params.id); });

kodlarını server.js içerisine eklememiz yeterli olacaktır. Tanımlanmayan bir sayfaya istem yapıldığında gösterdiğimiz 404 hata sayfasını özelleştirelim.
app.use(function(req, res, next)
 { res.send("Böyle bir sayfa yok ki", 404); });

metodunu eklediğimizde server içerisinde talep edilen istem tanımlanmadıysa çalışacak ve kullanıcıya bizim tanımladığımız cevabı döndürecektir.Adres çubuğundan herhangi bir adres girişi yaparak sayfayı test edebiliriz.
Şu ana kadar verdiğimiz örneklerde response'a direkt ekleme yaptık, tanımlayacağımız myFirstPage sayfası için myFirstPage.ejs dosyasının görüntülenmesini sağlayalım. Bu işlem için öncelikle EJS paketini kurmamız gerekmektedir.EJS veri ile şablonları birleştirerek html oluşturmamız sağlayan javascript kütüphanesidir. Kurulum işlemi için command prompt açılıp, projemizin dizinine eriştikten sonra

- npm install ejs komutu çalıştırılır.
app.get('firstHtmlPage/:id', function(req, res)
 { res.render("firstHtmlPage.ejs", {itemRequested:req.params.id,layout:false}); }); 

metodu eklenerek firstHtmlPage'e request gönderdiğimizde proje içerisinde firstPage.js dosyasını bulamadığı için hata verecektir. Proje klasörüne sağa tıklanıp yeni bir klasör açılarak "views" olarak isimlendirilir.

Yeni oluşturulan klasöre sağa tıklayarak new File denilip HTML dosyası seçilir, firstHtmlPage.ejs olarak isimlendirilir.




Html Dosyası Ürün sayfası

Talep Edilen Ürün id: <%=itemRequested%> "itemRequested" oalrak server.js içerisinde tanımladığımız request parametresini sayfa içerisinde "<%=%>" tagleri arasında kullandık. adres çubuğundan "/firstHtmlPage/urun" isteminde bulunduğumuzda yazdığımız html görüntülenecektir.



NodeJS versiyonu ve tüm kodlara ulaşabileceğiniz github adresi aşağıda yer almaktadır.
Node Version : v0.8.4
GitHub: GitHub

2 Ağustos 2012 Perşembe

NodeJS İle İlk Kodlar

Hiç yorum yok:
NodeJS ile ilk kodlarımızı yazıp çalıştırmaya başlayabiliriz. Bunun için en basit uygulamamızı yazıp, hızlıca bu yapıyı incelemeye başlayalım.


NodeJS.org üzerindeki en basit olarak gösterilmiş örnek kodlarla başlayalım.
Bu kodları şu adresten ve bütün örnek kodlarımıza da bu adresten ulaşabilirsiniz.


Örnek kod "http" protokolünü kullanarak nasıl sunucu tarafında kod yazılabildiğini ispatlamak amaçlı en kısa kod örneğidir.


Yazdığımız kodu çalıştırıp test edebilmek için ilgili klasöre gidip, "node server.js" komutunu çalıştırdığımız da artık NodeJS bizim sunucu tarafındaki kodlarımızı derleyip çalıştırmış olmaktadır.


NodeJS v0.8.4 kullanılmıştır.







var http = require('http');
// http protokolünü kodlarımızda kullanabilmek için dahil ediyor.
// require komutu ile içinde belirttiğimiz kütüphaneler nodejs içinde ya da
// npm ile yüklediğimiz yapılar olmalıdır
 
// http ile sunucumuzun kurulumunu yapıyoruz
http.createServer(function (req, res) {
// kurulum sonucu olarak bu isimsiz fonksiyona 'callback' geri dönüş sağlanır
  res.writeHead(200, {'Content-Type': 'text/plain'});
// res -> respond yani sunucunun döneceği cevap olarak kullanılmaktadır.
// 200 kodu sunucudan 'OK' sonucu yani sonucun hatasız döndüğünü belirtir.
// sonuç tipinin 'text/plain' düz metin belgesi olduğunu belirtir.
  res.end('Hello World\n');
// içerik olarak ekrana helloWorld yazısı yazdırılır
}).listen(1337, '127.0.0.1');
// uygulama 1337 portundan localhost || 127.0.0.1 adresi üzerinden yayın yapmaktadır.
console.log('Server running at http://127.0.0.1:1337/');
// sorunsuz çalıştığında nodejs'in loglaması içindir.

28 Temmuz 2012 Cumartesi

Merhaba Dünya!

Hiç yorum yok:
NodeJS Türkçe olarak yayın hayatına an itibariyle başlamış bulunmaktayız. Amacımız NodeJS hakkında internette neredeyse yok denecek kadar az olan Türkçe içeriğe destek olmak, tek bir başlıkta tüm deneyimleri aktarabilmek.

Bu sitede neler olacak?

Örnek projeler, sık karşılaşılan sorunlar, elimizdeki projeyi nodejs'e aktarmak, örnek videolar, etkinlikler ve çok daha fazlası ile içeriği zenginleştirmek istiyoruz.

Sizlerin de desteği ile NodeJS Türkçe olarak yayın hayatına başlamıştır.